ref: ef7ae860c74643e61196d7206315a44d30422748
parent: b990790eec02f9330babcd44914c5235542b5ebe
author: Clownacy <Clownacy@users.noreply.github.com>
date: Wed Jun 24 13:57:21 EDT 2020
Update built-in SDL2 to 2.0.12
--- a/external/SDL2/Android.mk
+++ b/external/SDL2/Android.mk
@@ -64,7 +64,11 @@
-Wmissing-variable-declarations \
-Wfloat-conversion \
-Wshorten-64-to-32 \
- -Wunreachable-code-return
+ -Wunreachable-code-return \
+ -Wshift-sign-overflow \
+ -Wstrict-prototypes \
+ -Wkeyword-macro \
+
# Warnings we haven't fixed (yet)
LOCAL_CFLAGS += -Wno-unused-parameter -Wno-sign-compare
--- a/external/SDL2/CMakeLists.txt
+++ b/external/SDL2/CMakeLists.txt
@@ -42,12 +42,12 @@
# set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0.
set(SDL_MAJOR_VERSION 2)
set(SDL_MINOR_VERSION 0)
-set(SDL_MICRO_VERSION 10)
+set(SDL_MICRO_VERSION 12)
set(SDL_INTERFACE_AGE 0)
-set(SDL_BINARY_AGE 10)
+set(SDL_BINARY_AGE 12)
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
# the following should match the versions in Xcode project file:
-set(DYLIB_CURRENT_VERSION 10.0.0)
+set(DYLIB_CURRENT_VERSION 12.0.0)
set(DYLIB_COMPATIBILITY_VERSION 1.0.0)
# Set defaults preventing destination file conflicts
@@ -118,6 +118,8 @@
set(DARWIN TRUE)
elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
set(MACOSX TRUE)
+ elseif(CMAKE_SYSTEM_NAME MATCHES ".*tvOS.*")
+ set(TVOS TRUE)
endif()
# TODO: iOS?
elseif(CMAKE_SYSTEM_NAME MATCHES "BeOS.*")
@@ -127,7 +129,7 @@
endif()
# Don't mistake osx for unix
-if(UNIX AND NOT APPLE)
+if(UNIX AND NOT APPLE AND NOT RISCOS)
set(UNIX_SYS ON)
else()
set(UNIX_SYS OFF)
@@ -156,11 +158,10 @@
endif()
# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
-# so we'll just use libusb when it's available. Except that libusb
-# requires root permissions to open devices, so that's not generally
-# useful, and we'll disable this by default on Unix. Windows and macOS
-# can use it without root access, though, so enable by default there.
-if(WINDOWS OR APPLE OR ANDROID)
+# so we'll just use libusb when it's available. libusb does not support iOS,
+# so we default to yes on iOS.
+# TODO: Windows can support libusb, the hid.c file just depends on Unix APIs
+if(WINDOWS OR IOS OR TVOS OR ANDROID)
set(HIDAPI_SKIP_LIBUSB TRUE)
else()
set(HIDAPI_SKIP_LIBUSB FALSE)
@@ -169,6 +170,14 @@
set(OPT_DEF_HIDAPI ON)
endif()
+# On the other hand, *BSD specifically uses libusb only, so we make a special
+# case just for them.
+if(FREEBSD OR NETBSD OR OPENBSD OR BSDI)
+ set(HIDAPI_ONLY_LIBUSB TRUE)
+else()
+ set(HIDAPI_ONLY_LIBUSB FALSE)
+endif()
+
# Compiler info
if(CMAKE_COMPILER_IS_GNUCC)
set(USE_GCC TRUE)
@@ -257,7 +266,7 @@
# General includes
include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include)
if(USE_GCC OR USE_CLANG)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter \"${SDL2_SOURCE_DIR}/src/video/khronos\"")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -idirafter ${SDL2_SOURCE_DIR}/src/video/khronos")
else()
include_directories(${SDL2_SOURCE_DIR}/src/video/khronos)
endif()
@@ -320,6 +329,8 @@
set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH})
set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
+set_option(ARMSIMD "use SIMD assembly blitters on ARM" ON)
+set_option(ARMNEON "use NEON assembly blitters on ARM" ON)
set_option(DISKAUDIO "Support the disk writer audio driver" ON)
set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF)
@@ -330,7 +341,7 @@
set_option(PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_ENABLED_BY_DEFAULT})
dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF)
set_option(SDL_DLOPEN "Use dlopen for shared object loading" ${SDL_DLOPEN_ENABLED_BY_DEFAULT})
-set_option(OSS "Support the OSS audio API" ${UNIX_SYS})
+dep_option(OSS "Support the OSS audio API" ON "UNIX_SYS OR RISCOS" OFF)
set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS})
dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF)
set_option(JACK "Support the JACK audio API" ${UNIX_SYS})
@@ -366,10 +377,13 @@
set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS})
set_option(WASAPI "Use the Windows WASAPI audio driver" ${WINDOWS})
set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS})
+set_option(RENDER_METAL "Enable the Metal render driver" ${APPLE})
set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS})
dep_option(VIDEO_VULKAN "Enable Vulkan support" ON "ANDROID OR APPLE OR LINUX OR WINDOWS" OFF)
+set_option(VIDEO_METAL "Enable Metal support" ${APPLE})
set_option(VIDEO_KMSDRM "Use KMS DRM video driver" ${UNIX_SYS})
dep_option(KMSDRM_SHARED "Dynamically load KMS DRM support" ON "VIDEO_KMSDRM" OFF)
+set_option(VIDEO_OFFSCREEN "Use offscreen video driver" OFF)
option_string(BACKGROUNDING_SIGNAL "number to use for magic backgrounding signal or 'OFF'" "OFF")
option_string(FOREGROUNDING_SIGNAL "number to use for magic foregrounding signal or 'OFF'" "OFF")
set_option(HIDAPI "Use HIDAPI for low level joystick drivers" ${OPT_DEF_HIDAPI})
@@ -659,6 +673,61 @@
endif()
endif()
endif()
+
+ if(ARMSIMD)
+ set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
+ check_c_source_compiles("
+ .text
+ .arch armv6
+ .object_arch armv4
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ uqadd8 r0, r0, r0
+ " ARMSIMD_FOUND)
+ set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
+
+ if(ARMSIMD_FOUND)
+ set(HAVE_ARMSIMD TRUE)
+ set(SDL_ARM_SIMD_BLITTERS 1)
+ file(GLOB ARMSIMD_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-simd*.S)
+ set(SOURCE_FILES ${SOURCE_FILES} ${ARMSIMD_SOURCES})
+ set(WARN_ABOUT_ARM_SIMD_ASM_MIT TRUE)
+ endif()
+ endif()
+
+ if(ARMNEON)
+ set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
+ check_c_source_compiles("
+ .text
+ .fpu neon
+ .arch armv7a
+ .object_arch armv4
+ .eabi_attribute 10, 0
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ vmovn.u16 d0, q0
+ " ARMNEON_FOUND)
+ set(CMAKE_REQUIRED_FLAGS "${ORIG_CMAKE_REQUIRED_FLAGS}")
+
+ if(ARMNEON_FOUND)
+ set(HAVE_ARMNEON TRUE)
+ set(SDL_ARM_NEON_BLITTERS 1)
+ file(GLOB ARMNEON_SOURCES ${SDL2_SOURCE_DIR}/src/video/arm/pixman-arm-neon*.S)
+ set(SOURCE_FILES ${SOURCE_FILES} ${ARMNEON_SOURCES})
+ set(WARN_ABOUT_ARM_NEON_ASM_MIT TRUE)
+ endif()
+ endif()
+
elseif(MSVC_VERSION GREATER 1500)
# TODO: SDL_cpuinfo.h needs to support the user's configuration wish
# for MSVC - right now it is always activated
@@ -691,10 +760,10 @@
set(HAVE_SIGNAL_H 1)
foreach(_FN
malloc calloc realloc free qsort abs memset memcpy memmove memcmp
- wcslen wcscmp
+ wcslen wcslcpy wcslcat wcsdup wcsstr wcscmp wcsncmp
strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
_ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
- _stricmp _strnicmp sscanf
+ _stricmp _strnicmp strtok_s sscanf
acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf
copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf
log logf log10 log10f pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf)
@@ -728,10 +797,11 @@
foreach(_FN
strtod malloc calloc realloc free getenv setenv putenv unsetenv
qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
- _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
+ _strrev _strupr _strlwr strchr strrchr strstr strtok_r itoa _ltoa
_uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp
- vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp
+ wcscmp wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr
+ sscanf vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp
nanosleep sysconf sysctlbyname getauxval poll _Exit
)
string(TOUPPER ${_FN} _UPPER)
@@ -743,8 +813,10 @@
if(HAVE_LIBM)
set(CMAKE_REQUIRED_LIBRARIES m)
foreach(_FN
- atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin
- sinf sqrt sqrtf tan tanf acos asin)
+ atan atan2 atanf atan2f ceil ceilf copysign copysignf cos cosf
+ exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f
+ pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf acos acosf
+ asin asinf)
string(TOUPPER ${_FN} _UPPER)
set(_HAVEVAR "HAVE_${_UPPER}")
check_function_exists("${_FN}" ${_HAVEVAR})
@@ -841,6 +913,13 @@
set(HAVE_VIDEO_DUMMY TRUE)
set(HAVE_SDL_VIDEO TRUE)
endif()
+ if(VIDEO_OFFSCREEN)
+ set(SDL_VIDEO_DRIVER_OFFSCREEN 1)
+ file(GLOB VIDEO_OFFSCREEN_SOURCES ${SDL2_SOURCE_DIR}/src/video/offscreen/*.c)
+ set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_OFFSCREEN_SOURCES})
+ set(HAVE_VIDEO_OFFSCREEN TRUE)
+ set(HAVE_SDL_VIDEO TRUE)
+ endif()
endif()
# Platform-specific options and settings
@@ -916,12 +995,18 @@
set(HAVE_SDL_VIDEO TRUE)
# Core stuff
- find_library(ANDROID_DL_LIBRARY dl)
+ # find_library(ANDROID_DL_LIBRARY dl)
+ # FIXME failing dlopen https://github.com/android-ndk/ndk/issues/929
+ find_library(ANDROID_DL_LIBRARY NAMES libdl.so dl)
find_library(ANDROID_LOG_LIBRARY log)
find_library(ANDROID_LIBRARY_LIBRARY android)
list(APPEND EXTRA_LIBS ${ANDROID_DL_LIBRARY} ${ANDROID_LOG_LIBRARY} ${ANDROID_LIBRARY_LIBRARY})
add_definitions(-DGL_GLEXT_PROTOTYPES)
+ if (HAVE_HIDAPI)
+ list(APPEND EXTRA_LIBS hidapi)
+ endif()
+
#enable gles
if(VIDEO_OPENGLES)
set(SDL_VIDEO_OPENGL_EGL 1)
@@ -1006,7 +1091,7 @@
endif()
endif()
-elseif(UNIX AND NOT APPLE AND NOT ANDROID)
+elseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT RISCOS)
if(SDL_AUDIO)
if(SYSV5 OR SOLARIS OR HPUX)
set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
@@ -1105,6 +1190,7 @@
set(HAVE_IBUS_IBUS_H TRUE)
include_directories(${IBUS_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${IBUS_LIBRARIES})
+ add_definitions(-DSDL_USE_IME)
endif()
if(HAVE_LIBUNWIND_H)
# We've already found the header, so REQUIRE the lib to be present
@@ -1128,7 +1214,9 @@
endif()
if(SDL_JOYSTICK)
- CheckUSBHID() # seems to be BSD specific - limit the test to BSD only?
+ if(FREEBSD OR NETBSD OR OPENBSD OR BSDI)
+ CheckUSBHID()
+ endif()
CheckHIDAPI()
if(LINUX AND NOT ANDROID)
set(SDL_JOYSTICK_LINUX 1)
@@ -1266,10 +1354,9 @@
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
endif()
- # headers needed elsewhere ...
+ # headers needed elsewhere
check_include_file(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
check_include_file(audioclient.h HAVE_AUDIOCLIENT_H)
- check_include_file(endpointvolume.h HAVE_ENDPOINTVOLUME_H)
if(SDL_AUDIO)
set(SDL_AUDIO_DRIVER_WINMM 1)
@@ -1374,6 +1461,7 @@
if(SDL_JOYSTICK)
CheckHIDAPI()
+ # TODO: Remove this hid.c block when SDL_hidapi.c is supported on Windows!
if(HAVE_HIDAPI)
set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/windows/hid.c)
endif()
@@ -1430,10 +1518,11 @@
# !!! FIXME: we need Carbon for some very old API calls in
# !!! FIXME: src/video/cocoa/SDL_cocoakeyboard.c, but we should figure out
# !!! FIXME: how to dump those.
- if(NOT IOS)
+ if(DARWIN OR MACOSX)
set(SDL_FRAMEWORK_COCOA 1)
set(SDL_FRAMEWORK_CARBON 1)
endif()
+ set(SDL_FRAMEWORK_FOUNDATION 1)
# Requires the darwin file implementation
if(SDL_FILE)
@@ -1457,41 +1546,47 @@
set(HAVE_SDL_AUDIO TRUE)
set(SDL_FRAMEWORK_COREAUDIO 1)
set(SDL_FRAMEWORK_AUDIOTOOLBOX 1)
+ set(SDL_FRAMEWORK_AVFOUNDATION 1)
endif()
if(SDL_JOYSTICK)
CheckHIDAPI()
if(HAVE_HIDAPI)
- if(IOS)
+ if(IOS OR TVOS)
set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/ios/hid.m)
- else()
- set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/mac/hid.c)
+ set(SDL_FRAMEWORK_COREBLUETOOTH 1)
endif()
endif()
- set(SDL_JOYSTICK_IOKIT 1)
- if (IOS)
+ if(IOS OR TVOS)
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/iphoneos/*.m ${SDL2_SOURCE_DIR}/src/joystick/steam/*.c)
+ set(SDL_JOYSTICK_MFI 1)
+ if(IOS)
+ set(SDL_FRAMEWORK_COREMOTION 1)
+ endif()
+ set(SDL_FRAMEWORK_GAMECONTROLLER 1)
+ set(HAVE_SDL_SENSORS 1)
else()
file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c)
+ set(SDL_JOYSTICK_IOKIT 1)
+ set(SDL_FRAMEWORK_IOKIT 1)
+ set(SDL_FRAMEWORK_FF 1)
endif()
set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
set(HAVE_SDL_JOYSTICK TRUE)
- set(SDL_FRAMEWORK_IOKIT 1)
- set(SDL_FRAMEWORK_FF 1)
endif()
if(SDL_HAPTIC)
- set(SDL_HAPTIC_IOKIT 1)
- if (IOS)
+ if (IOS OR TVOS)
file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c)
set(SDL_HAPTIC_DUMMY 1)
else()
file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c)
+ set(SDL_HAPTIC_IOKIT 1)
+ set(SDL_FRAMEWORK_IOKIT 1)
+ set(SDL_FRAMEWORK_FF 1)
endif()
set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
set(HAVE_SDL_HAPTIC TRUE)
- set(SDL_FRAMEWORK_IOKIT 1)
- set(SDL_FRAMEWORK_FF 1)
if(NOT SDL_JOYSTICK)
message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK to be enabled")
endif()
@@ -1498,15 +1593,16 @@
endif()
if(SDL_POWER)
- set(SDL_POWER_MACOSX 1)
- if (IOS)
+ if (IOS OR TVOS)
file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/uikit/*.m)
+ set(SDL_POWER_UIKIT 1)
else()
file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/macosx/*.c)
+ set(SDL_POWER_MACOSX 1)
+ set(SDL_FRAMEWORK_IOKIT 1)
endif()
set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
set(HAVE_SDL_POWER TRUE)
- set(SDL_FRAMEWORK_IOKIT 1)
endif()
if(SDL_TIMERS)
@@ -1525,6 +1621,89 @@
set(HAVE_SDL_FILESYSTEM TRUE)
endif()
+ if(SDL_SENSOR)
+ if(IOS)
+ set(SDL_SENSOR_COREMOTION 1)
+ set(HAVE_SDL_SENSORS TRUE)
+ file(GLOB SENSOR_SOURCES ${SDL2_SOURCE_DIR}/src/sensor/coremotion/*.m)
+ set(SOURCE_FILES ${SOURCE_FILES} ${SENSOR_SOURCES})
+ endif()
+ endif()
+
+ # iOS hack needed - http://code.google.com/p/ios-cmake/ ?
+ if(SDL_VIDEO)
+ if (IOS OR TVOS)
+ set(SDL_VIDEO_DRIVER_UIKIT 1)
+ set(SDL_FRAMEWORK_COREGRAPHICS 1)
+ set(SDL_FRAMEWORK_QUARTZCORE 1)
+ set(SDL_FRAMEWORK_UIKIT 1)
+ set(SDL_IPHONE_KEYBOARD 1)
+ set(SDL_IPHONE_LAUNCHSCREEN 1)
+ file(GLOB UIKITVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/uikit/*.m)
+ set(SOURCE_FILES ${SOURCE_FILES} ${UIKITVIDEO_SOURCES})
+ else()
+ CheckCOCOA()
+ if(VIDEO_OPENGL)
+ set(SDL_VIDEO_OPENGL 1)
+ set(SDL_VIDEO_OPENGL_CGL 1)
+ set(SDL_VIDEO_RENDER_OGL 1)
+ set(HAVE_VIDEO_OPENGL TRUE)
+ endif()
+ endif()
+
+ if(VIDEO_OPENGLES)
+ if(IOS OR TVOS)
+ set(SDL_FRAMEWORK_OPENGLES 1)
+ set(SDL_VIDEO_OPENGL_ES 1)
+ set(SDL_VIDEO_RENDER_OGL_ES 1)
+ else()
+ set(SDL_VIDEO_OPENGL_EGL 1)
+ endif()
+ set(SDL_VIDEO_OPENGL_ES2 1)
+ set(SDL_VIDEO_RENDER_OGL_ES2 1)
+ set(HAVE_VIDEO_OPENGLES TRUE)
+ endif()
+
+ if(VIDEO_VULKAN OR VIDEO_METAL OR RENDER_METAL)
+ set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x objective-c")
+ check_c_source_compiles("
+ #include <AvailabilityMacros.h>
+ #import <Metal/Metal.h>
+ #import <QuartzCore/CAMetalLayer.h>
+
+ #if TARGET_OS_SIMULATOR || (!TARGET_CPU_X86_64 && !TARGET_CPU_ARM64)
+ #error Metal doesn't work on this configuration
+ #endif
+ int main()
+ {
+ return 0;
+ }
+ " HAVE_FRAMEWORK_METAL)
+ set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
+ if(HAVE_FRAMEWORK_METAL)
+ set(SDL_FRAMEWORK_METAL 1)
+ set(SDL_FRAMEWORK_QUARTZCORE 1)
+ else()
+ set(VIDEO_VULKAN 0)
+ set(VIDEO_METAL 0)
+ set(RENDER_METAL 0)
+ endif()
+ endif()
+
+ if(VIDEO_METAL)
+ set(SDL_VIDEO_METAL 1)
+ set(HAVE_VIDEO_METAL TRUE)
+ endif()
+
+ if(RENDER_METAL)
+ file(GLOB RENDER_METAL_SOURCES ${SDL2_SOURCE_DIR}/src/render/metal/*.m)
+ set(SOURCE_FILES ${SOURCE_FILES} ${RENDER_METAL_SOURCES})
+ set(SDL_VIDEO_RENDER_METAL 1)
+ set(HAVE_RENDER_METAL TRUE)
+ endif()
+ endif()
+
# Actually load the frameworks at the end so we don't duplicate include.
if(SDL_FRAMEWORK_COREVIDEO)
find_library(COREVIDEO CoreVideo)
@@ -1554,30 +1733,54 @@
find_library(AUDIOTOOLBOX AudioToolbox)
list(APPEND EXTRA_LIBS ${AUDIOTOOLBOX})
endif()
-
- # iOS hack needed - http://code.google.com/p/ios-cmake/ ?
- if(SDL_VIDEO)
- if (IOS)
- set(SDL_VIDEO_DRIVER_UIKIT 1)
- file(GLOB UIKITVIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/uikit/*.m)
- set(SOURCE_FILES ${SOURCE_FILES} ${UIKITVIDEO_SOURCES})
+ if(SDL_FRAMEWORK_AVFOUNDATION)
+ find_library(AVFOUNDATION AVFoundation)
+ list(APPEND EXTRA_LIBS ${AVFOUNDATION})
+ endif()
+ if(SDL_FRAMEWORK_COREBLUETOOTH)
+ find_library(COREBLUETOOTH CoreBluetooth)
+ list(APPEND EXTRA_LIBS ${COREBLUETOOTH})
+ endif()
+ if(SDL_FRAMEWORK_COREGRAPHICS)
+ find_library(COREGRAPHICS CoreGraphics)
+ list(APPEND EXTRA_LIBS ${COREGRAPHICS})
+ endif()
+ if(SDL_FRAMEWORK_COREMOTION)
+ find_library(COREMOTION CoreMotion)
+ list(APPEND EXTRA_LIBS ${COREMOTION})
+ endif()
+ if(SDL_FRAMEWORK_FOUNDATION)
+ find_library(FOUNDATION Foundation)
+ list(APPEND EXTRA_LIBS ${FOUNDATION})
+ endif()
+ if(SDL_FRAMEWORK_GAMECONTROLLER)
+ find_library(GAMECONTROLLER GameController)
+ list(APPEND EXTRA_LIBS ${GAMECONTROLLER})
+ endif()
+ if(SDL_FRAMEWORK_METAL)
+ if(IOS OR TVOS)
+ find_library(METAL Metal)
+ list(APPEND EXTRA_LIBS ${METAL})
else()
- CheckCOCOA()
- if(VIDEO_OPENGL)
- set(SDL_VIDEO_OPENGL 1)
- set(SDL_VIDEO_OPENGL_CGL 1)
- set(SDL_VIDEO_RENDER_OGL 1)
- set(HAVE_VIDEO_OPENGL TRUE)
- endif()
-
- if(VIDEO_OPENGLES)
- set(SDL_VIDEO_OPENGL_EGL 1)
- set(SDL_VIDEO_OPENGL_ES2 1)
- set(SDL_VIDEO_RENDER_OGL_ES2 1)
- set(HAVE_VIDEO_OPENGLES TRUE)
- endif()
+ list(APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,Metal")
endif()
endif()
+ if(SDL_FRAMEWORK_OPENGLES)
+ find_library(OPENGLES OpenGLES)
+ list(APPEND EXTRA_LIBS ${OPENGLES})
+ endif()
+ if(SDL_FRAMEWORK_QUARTZCORE)
+ if(IOS OR TVOS)
+ find_library(QUARTZCORE QuartzCore)
+ list(APPEND EXTRA_LIBS ${QUARTZCORE})
+ else()
+ list(APPEND EXTRA_LDFLAGS "-Wl,-weak_framework,QuartzCore")
+ endif()
+ endif()
+ if(SDL_FRAMEWORK_UIKIT)
+ find_library(UIKIT UIKit)
+ list(APPEND EXTRA_LIBS ${UIKIT})
+ endif()
CheckPTHREAD()
@@ -1611,6 +1814,24 @@
endif()
CheckPTHREAD()
+
+elseif(RISCOS)
+ if(SDL_TIMERS)
+ set(SDL_TIMER_UNIX 1)
+ file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
+ set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
+ set(HAVE_SDL_TIMERS TRUE)
+
+ if(CLOCK_GETTIME)
+ set(HAVE_CLOCK_GETTIME 1)
+ endif()
+ endif()
+
+ CheckPTHREAD()
+
+ if(SDL_AUDIO)
+ CheckOSS()
+ endif()
endif()
if(VIDEO_VULKAN)
@@ -1784,17 +2005,39 @@
message(STATUS "")
endif()
+if(WARN_ABOUT_ARM_SIMD_ASM_MIT)
+ message(STATUS "")
+ message(STATUS "SDL is being built with ARM SIMD optimizations, which")
+ message(STATUS "uses code licensed under the MIT license. If this is a")
+ message(STATUS "problem, please disable that code by rerunning CMake with:")
+ message(STATUS "")
+ message(STATUS " -DARMSIMD=OFF")
+endif()
+
+if(WARN_ABOUT_ARM_NEON_ASM_MIT)
+ message(STATUS "")
+ message(STATUS "SDL is being built with ARM NEON optimizations, which")
+ message(STATUS "uses code licensed under the MIT license. If this is a")
+ message(STATUS "problem, please disable that code by rerunning CMake with:")
+ message(STATUS "")
+ message(STATUS " -DARMNEON=OFF")
+endif()
+
# Ensure that the extra cflags are used at compile time
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
# Always build SDLmain
add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
-target_include_directories(SDL2main PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
+target_include_directories(SDL2main PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>)
set(_INSTALL_LIBS "SDL2main")
if (NOT ANDROID)
- set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
+ set_target_properties(SDL2main PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}")
endif()
+if (ANDROID AND HAVE_HIDAPI)
+ set(_INSTALL_LIBS ${_INSTALL_LIBS} "hidapi")
+endif()
+
if(SDL_SHARED)
add_library(SDL2 SHARED ${SOURCE_FILES} ${VERSION_SOURCES})
if(APPLE)
@@ -1820,10 +2063,14 @@
endif()
set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
- target_include_directories(SDL2 PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
+ target_include_directories(SDL2 PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>)
if (NOT ANDROID)
- set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
+ set_target_properties(SDL2 PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}")
endif()
+ if(IOS OR TVOS)
+ set_property(TARGET SDL2 APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
+ target_compile_definitions(SDL2 PRIVATE IOS_DYLIB=1)
+ endif()
endif()
if(ANDROID)
@@ -1837,13 +2084,14 @@
set_target_properties(hidapi PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
set_target_properties(hidapi PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB")
endif()
- target_link_libraries(hidapi log)
+ if(HAVE_HIDAPI)
+ target_link_libraries(hidapi log)
+ endif()
endif()
if(SDL_STATIC)
set (BUILD_SHARED_LIBS FALSE)
add_library(SDL2-static STATIC ${SOURCE_FILES})
- target_compile_definitions(SDL2-static PRIVATE SDL_STATIC)
if (NOT SDL_SHARED OR NOT WIN32)
set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
# Note: Apparently, OUTPUT_NAME must really be unique; even when
@@ -1861,10 +2109,13 @@
# libraries - do we need to consider this?
set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
- target_include_directories(SDL2-static PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include/SDL2>)
+ target_include_directories(SDL2-static PUBLIC "$<BUILD_INTERFACE:${SDL2_SOURCE_DIR}/include>" $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/SDL2>)
if (NOT ANDROID)
- set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX ${SDL_CMAKE_DEBUG_POSTFIX})
+ set_target_properties(SDL2-static PROPERTIES DEBUG_POSTFIX "${SDL_CMAKE_DEBUG_POSTFIX}")
endif()
+ if(IOS OR TVOS)
+ set_property(TARGET SDL2-static APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
+ endif()
endif()
##### Tests #####
@@ -1886,7 +2137,7 @@
if (WINDOWS)
set(PKG_PREFIX "cmake")
else ()
- set(PKG_PREFIX "lib/cmake/SDL2")
+ set(PKG_PREFIX "lib${LIB_SUFFIX}/cmake/SDL2")
endif ()
include(CMakePackageConfigHelpers)
--- a/external/SDL2/COPYING.txt
+++ b/external/SDL2/COPYING.txt
@@ -1,6 +1,6 @@
Simple DirectMedia Layer
-Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/Makefile.in
+++ b/external/SDL2/Makefile.in
@@ -46,7 +46,7 @@
INSTALL_SDL2_CONFIG = @INSTALL_SDL2_CONFIG@
-SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac debian docs include Makefile.* sdl2-config.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in SDL2Config.cmake src test VisualC.html VisualC VisualC-WinRT Xcode Xcode-iOS wayland-protocols
+SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac debian docs include Makefile.* sdl2-config.cmake.in sdl2-config-version.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in SDL2Config.cmake src test VisualC.html VisualC VisualC-WinRT Xcode Xcode-iOS wayland-protocols
GEN_DIST = SDL2.spec
ifneq ($V,1)
@@ -84,6 +84,7 @@
SDL_log.h \
SDL_main.h \
SDL_messagebox.h \
+ SDL_metal.h \
SDL_mouse.h \
SDL_mutex.h \
SDL_name.h \
@@ -187,6 +188,7 @@
ifeq ($(INSTALL_SDL2_CONFIG),TRUE)
$(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/cmake/SDL2
$(INSTALL) -m 644 sdl2-config.cmake $(DESTDIR)$(libdir)/cmake/SDL2
+ $(INSTALL) -m 644 sdl2-config-version.cmake $(DESTDIR)$(libdir)/cmake/SDL2
endif
uninstall: uninstall-bin uninstall-hdrs uninstall-lib uninstall-data
@@ -207,6 +209,7 @@
rm -f $(DESTDIR)$(datadir)/aclocal/sdl2.m4
rm -f $(DESTDIR)$(libdir)/pkgconfig/sdl2.pc
rm -f $(DESTDIR)$(libdir)/cmake/SDL2/sdl2-config.cmake
+ rm -f $(DESTDIR)$(libdir)/cmake/SDL2/sdl2-config-version.cmake
clean:
rm -rf $(objects)
--- a/external/SDL2/Makefile.os2
+++ b/external/SDL2/Makefile.os2
@@ -1,8 +1,8 @@
-# Open Watcom makefile to build SDL2.dll for OS/2:
+# Open Watcom makefile to build SDL2.dll for OS/2
# wmake -f Makefile.os2
LIBNAME = SDL2
-VERSION = 2.0.10
+VERSION = 2.0.12
DESCRIPTION = Simple DirectMedia Layer 2
LIBHOME = .
@@ -33,7 +33,7 @@
s_atan.c s_copysign.c s_cos.c s_fabs.c s_floor.c s_scalbn.c s_sin.c s_tan.c
SRCS = SDL.c SDL_assert.c SDL_error.c SDL_log.c SDL_dataqueue.c SDL_hints.c
-SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_qsort.c SDL_stdlib.c SDL_string.c
+SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c
SRCS+= SDL_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
SRCS+= SDL_rwops.c SDL_power.c
SRCS+= SDL_audio.c SDL_audiocvt.c SDL_audiodev.c SDL_audiotypecvt.c SDL_mixer.c SDL_wave.c
@@ -88,6 +88,9 @@
SDL_rwops.obj: SDL_rwops.c
wcc386 $(CFLAGS) -wcd=136 -fo=$^@ $<
+
+SDL_wave.obj: SDL_wave.c
+ wcc386 $(CFLAGS) -wcd=124 -fo=$^@ $<
SDL_blendfillrect.obj: SDL_blendfillrect.c
wcc386 $(CFLAGS) -wcd=200 -fo=$^@ $<
--- a/external/SDL2/Makefile.psp
+++ b/external/SDL2/Makefile.psp
@@ -50,6 +50,7 @@
src/stdlib/SDL_qsort.o \
src/stdlib/SDL_stdlib.o \
src/stdlib/SDL_string.o \
+ src/stdlib/SDL_strtokr.o \
src/thread/SDL_thread.o \
src/thread/generic/SDL_systls.o \
src/thread/psp/SDL_syssem.o \
@@ -78,7 +79,7 @@
src/video/psp/SDL_pspevents.o \
src/video/psp/SDL_pspvideo.o \
src/video/psp/SDL_pspgl.o \
- src/video/psp/SDL_pspmouse.o \
+ src/video/psp/SDL_pspmouse.o
INCDIR = ./include
CFLAGS = -g -O2 -G0 -Wall -D__PSP__ -DHAVE_OPENGL
--- a/external/SDL2/SDL2.spec
+++ b/external/SDL2/SDL2.spec
@@ -1,6 +1,6 @@
Summary: Simple DirectMedia Layer
Name: SDL2
-Version: 2.0.10
+Version: 2.0.12
Release: 2
Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz
URL: http://www.libsdl.org/
--- a/external/SDL2/VisualC-WinRT/UWP_VS2015/SDL-UWP.vcxproj
+++ b/external/SDL2/VisualC-WinRT/UWP_VS2015/SDL-UWP.vcxproj
@@ -285,6 +285,7 @@
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c" />
<ClCompile Include="..\..\src\thread\generic\SDL_syssem.c" />
<ClCompile Include="..\..\src\thread\SDL_thread.c" />
<ClCompile Include="..\..\src\thread\stdcpp\SDL_syscond.cpp" />
--- a/external/SDL2/VisualC-WinRT/UWP_VS2015/SDL-UWP.vcxproj.filters
+++ b/external/SDL2/VisualC-WinRT/UWP_VS2015/SDL-UWP.vcxproj.filters
@@ -626,6 +626,9 @@
<ClCompile Include="..\..\src\stdlib\SDL_string.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\thread\generic\SDL_syssem.c">
<Filter>Source Files</Filter>
</ClCompile>
--- a/external/SDL2/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj
+++ b/external/SDL2/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj
@@ -251,6 +251,7 @@
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c" />
<ClCompile Include="..\..\src\thread\generic\SDL_syscond.c" />
<ClCompile Include="..\..\src\thread\SDL_thread.c" />
<ClCompile Include="..\..\src\thread\windows\SDL_sysmutex.c" />
--- a/external/SDL2/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj.filters
+++ b/external/SDL2/VisualC-WinRT/WinPhone81_VS2013/SDL-WinPhone81.vcxproj.filters
@@ -593,6 +593,9 @@
<ClCompile Include="..\..\src\stdlib\SDL_string.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\thread\SDL_thread.c">
<Filter>Source Files</Filter>
</ClCompile>
--- a/external/SDL2/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj
+++ b/external/SDL2/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj
@@ -283,6 +283,7 @@
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c" />
<ClCompile Include="..\..\src\thread\generic\SDL_syscond.c" />
<ClCompile Include="..\..\src\thread\SDL_thread.c" />
<ClCompile Include="..\..\src\thread\windows\SDL_sysmutex.c" />
--- a/external/SDL2/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj.filters
+++ b/external/SDL2/VisualC-WinRT/WinRT81_VS2013/SDL-WinRT81.vcxproj.filters
@@ -611,6 +611,9 @@
<ClCompile Include="..\..\src\stdlib\SDL_string.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\thread\SDL_thread.c">
<Filter>Source Files</Filter>
</ClCompile>
--- a/external/SDL2/VisualC/SDL/SDL.vcxproj
+++ b/external/SDL2/VisualC/SDL/SDL.vcxproj
@@ -130,7 +130,6 @@
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
@@ -196,7 +195,6 @@
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
@@ -320,7 +318,7 @@
<ClInclude Include="..\..\src\haptic\windows\SDL_dinputhaptic_c.h" />
<ClInclude Include="..\..\src\haptic\windows\SDL_windowshaptic_c.h" />
<ClInclude Include="..\..\src\haptic\windows\SDL_xinputhaptic_c.h" />
- <ClInclude Include="..\..\src\joystick\hidapi\controller_type.h" />
+ <ClInclude Include="..\..\src\joystick\controller_type.h" />
<ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
<ClInclude Include="..\..\src\joystick\SDL_joystick_c.h" />
<ClInclude Include="..\..\src\joystick\SDL_sysjoystick.h" />
@@ -421,9 +419,12 @@
<ClCompile Include="..\..\src\haptic\windows\SDL_xinputhaptic.c" />
<ClCompile Include="..\..\src\hidapi\windows\hid.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapijoystick.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_gamecube.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_ps4.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_rumble.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_switch.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xbox360.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xbox360w.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xboxone.c" />
<ClCompile Include="..\..\src\joystick\SDL_gamecontroller.c" />
<ClCompile Include="..\..\src\joystick\SDL_joystick.c" />
@@ -486,6 +487,7 @@
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c" />
<ClCompile Include="..\..\src\thread\generic\SDL_syscond.c" />
<ClCompile Include="..\..\src\thread\SDL_thread.c" />
<ClCompile Include="..\..\src\thread\windows\SDL_sysmutex.c" />
--- a/external/SDL2/VisualC/SDL/SDL.vcxproj.filters
+++ b/external/SDL2/VisualC/SDL/SDL.vcxproj.filters
@@ -259,7 +259,7 @@
<ClInclude Include="..\..\src\haptic\windows\SDL_dinputhaptic_c.h" />
<ClInclude Include="..\..\src\haptic\windows\SDL_windowshaptic_c.h" />
<ClInclude Include="..\..\src\haptic\windows\SDL_xinputhaptic_c.h" />
- <ClInclude Include="..\..\src\joystick\hidapi\controller_type.h" />
+ <ClInclude Include="..\..\src\joystick\controller_type.h" />
<ClInclude Include="..\..\src\joystick\hidapi\SDL_hidapijoystick_c.h" />
<ClInclude Include="..\..\src\joystick\SDL_joystick_c.h" />
<ClInclude Include="..\..\src\joystick\SDL_sysjoystick.h" />
@@ -360,9 +360,12 @@
<ClCompile Include="..\..\src\haptic\windows\SDL_windowshaptic.c" />
<ClCompile Include="..\..\src\haptic\windows\SDL_xinputhaptic.c" />
<ClCompile Include="..\..\src\hidapi\windows\hid.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_gamecube.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_ps4.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_rumble.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_switch.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xbox360.c" />
+ <ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xbox360w.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapi_xboxone.c" />
<ClCompile Include="..\..\src\joystick\hidapi\SDL_hidapijoystick.c" />
<ClCompile Include="..\..\src\joystick\SDL_gamecontroller.c" />
@@ -426,6 +429,7 @@
<ClCompile Include="..\..\src\stdlib\SDL_qsort.c" />
<ClCompile Include="..\..\src\stdlib\SDL_stdlib.c" />
<ClCompile Include="..\..\src\stdlib\SDL_string.c" />
+ <ClCompile Include="..\..\src\stdlib\SDL_strtokr.c" />
<ClCompile Include="..\..\src\thread\generic\SDL_syscond.c" />
<ClCompile Include="..\..\src\thread\SDL_thread.c" />
<ClCompile Include="..\..\src\thread\windows\SDL_sysmutex.c" />
--- a/external/SDL2/VisualC/SDLmain/SDLmain.vcxproj
+++ b/external/SDL2/VisualC/SDLmain/SDLmain.vcxproj
@@ -108,7 +108,6 @@
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
@@ -143,7 +142,6 @@
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
--- a/external/SDL2/VisualC/SDLtest/SDLtest.vcxproj
+++ b/external/SDL2/VisualC/SDLtest/SDLtest.vcxproj
@@ -108,7 +108,6 @@
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
@@ -143,7 +142,6 @@
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
- <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>OldStyle</DebugInformationFormat>
<OmitDefaultLibName>true</OmitDefaultLibName>
--- a/external/SDL2/WhatsNew.txt
+++ b/external/SDL2/WhatsNew.txt
@@ -2,6 +2,69 @@
This is a list of major changes in SDL's version history.
---------------------------------------------------------------------------
+2.0.12:
+---------------------------------------------------------------------------
+
+General:
+* Added SDL_GetTextureScaleMode() and SDL_SetTextureScaleMode() to get and set the scaling mode used for a texture
+* Added SDL_LockTextureToSurface(), similar to SDL_LockTexture() but the locked area is exposed as a SDL surface.
+* Added new blend mode, SDL_BLENDMODE_MUL, which does a modulate and blend operation
+* Added the hint SDL_HINT_DISPLAY_USABLE_BOUNDS to override the results of SDL_GetDisplayUsableBounds() for display index 0.
+* Added the window underneath the finger to the SDL_TouchFingerEvent
+* Added SDL_GameControllerTypeForIndex(), SDL_GameControllerGetType() to return the type of a game controller (Xbox 360, Xbox One, PS3, PS4, or Nintendo Switch Pro)
+* Added the hint SDL_HINT_GAMECONTROLLERTYPE to override the automatic game controller type detection
+* Added SDL_JoystickFromPlayerIndex() and SDL_GameControllerFromPlayerIndex() to get the device associated with a player index
+* Added SDL_JoystickSetPlayerIndex() and SDL_GameControllerSetPlayerIndex() to set the player index associated with a device
+* Added the hint SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS to specify whether Nintendo Switch Pro controllers should use the buttons as labeled or swapped to match positional layout. The default is to use the buttons as labeled.
+* Added support for Nintendo GameCube controllers to the HIDAPI driver, and a hint SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE to control whether this is used.
+* Improved support for Xbox 360 and Xbox One controllers when using the HIDAPI driver
+* Added support for many game controllers, including:
+ * 8BitDo FC30 Pro
+ * 8BitDo M30 GamePad
+ * BDA PS4 Fightpad
+ * HORI Fighting Commander
+ * Hyperkin Duke
+ * Hyperkin X91
+ * MOGA XP5-A Plus
+ * NACON GC-400ES
+ * NVIDIA Controller v01.04
+ * PDP Versus Fighting Pad
+ * Razer Raion Fightpad for PS4
+ * Razer Serval
+ * Stadia Controller
+ * SteelSeries Stratus Duo
+ * Victrix Pro Fight Stick for PS4
+ * Xbox One Elite Series 2
+* Fixed blocking game controller rumble calls when using the HIDAPI driver
+* Added SDL_zeroa() macro to zero an array of elements
+* Added SDL_HasARMSIMD() which returns true if the CPU has ARM SIMD (ARMv6+) features
+
+Windows:
+* Fixed crash when using the release SDL DLL with applications built with gcc
+* Fixed performance regression in event handling introduced in 2.0.10
+* Added support for SDL_SetThreadPriority() for UWP applications
+
+Linux:
+* Added the hint SDL_HINT_VIDEO_X11_WINDOW_VISUALID to specify the visual chosen for new X11 windows
+* Added the hint SDL_HINT_VIDEO_X11_FORCE_EGL to specify whether X11 should use GLX or EGL by default
+
+iOS / tvOS / macOS:
+* Added SDL_Metal_CreateView() and SDL_Metal_DestroyView() to create CAMetalLayer-backed NSView/UIView and attach it to the specified window.
+
+iOS/ tvOS:
+* Added support for Bluetooth Steam Controllers as game controllers
+
+tvOS:
+* Fixed support for surround sound on Apple TV
+
+Android:
+* Added SDL_GetAndroidSDKVersion() to return the API level of the current device
+* Added support for audio capture using OpenSL-ES
+* Added support for Bluetooth Steam Controllers as game controllers
+* Fixed rare crashes when the app goes into the background or terminates
+
+
+---------------------------------------------------------------------------
2.0.10:
---------------------------------------------------------------------------
--- a/external/SDL2/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj
+++ b/external/SDL2/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj
@@ -355,14 +355,37 @@
56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E0118A8EE200A56AA6 /* SDL_power.c */; };
56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */; };
56F9D5601DF73BA400C15B5D /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 566726431DF72CF5001DD3DB /* SDL_dataqueue.c */; };
+ 63CC93C723849391002A5C54 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = 63CC93C623849391002A5C54 /* SDL_strtokr.c */; };
+ 63CC93C823849391002A5C54 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = 63CC93C623849391002A5C54 /* SDL_strtokr.c */; };
+ 63CC93C923849391002A5C54 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = 63CC93C623849391002A5C54 /* SDL_strtokr.c */; };
+ 63CC93CA23849391002A5C54 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = 63CC93C623849391002A5C54 /* SDL_strtokr.c */; };
93CB792313FC5E5200BD3E05 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CB792213FC5E5200BD3E05 /* SDL_uikitviewcontroller.h */; };
93CB792613FC5F5300BD3E05 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CB792513FC5F5300BD3E05 /* SDL_uikitviewcontroller.m */; };
A704172E20F7E74800A82227 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A704172D20F7E74800A82227 /* controller_type.h */; };
A704172F20F7E76000A82227 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */; };
+ A704173120F7F39900A82227 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A704173020F7F39400A82227 /* SDL_hidapi_steam.c */; };
+ A704173220F7F39900A82227 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A704173020F7F39400A82227 /* SDL_hidapi_steam.c */; };
+ A75FDAB723E288E400529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A704173020F7F39400A82227 /* SDL_hidapi_steam.c */; };
+ A75FDAB823E2890000529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A704173020F7F39400A82227 /* SDL_hidapi_steam.c */; };
+ A75FDBD923EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBDA23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBDB23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBDC23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBDD23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBD823EA38AD00529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBDE23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBD823EA38AD00529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBDF23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBD823EA38AD00529352 /* SDL_hidapi_rumble.h */; };
A7C19D29212E552C00DF2152 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C19D27212E552B00DF2152 /* SDL_displayevents_c.h */; };
A7C19D2A212E552C00DF2152 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7C19D28212E552B00DF2152 /* SDL_displayevents.c */; };
A7C19D2B212E552C00DF2152 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7C19D28212E552B00DF2152 /* SDL_displayevents.c */; };
A7F629241FE06523002F9CC9 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D7516F81EE1C28A00820EEA /* SDL_uikitmetalview.m */; };
+ A7FF6B6223AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */; };
+ A7FF6B6323AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */; };
+ A7FF6B6423AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */; };
+ A7FF6B6523AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */; };
+ A7FF6B6723AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */; };
+ A7FF6B6823AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */; };
+ A7FF6B6923AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */; };
+ A7FF6B6A23AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */; };
AA0AD06216647BBB00CE5896 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */; };
AA0AD06516647BD400CE5896 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0AD06416647BD400CE5896 /* SDL_gamecontroller.h */; };
AA0F8495178D5F1A00823F9D /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0F8494178D5F1A00823F9D /* SDL_systls.c */; };
@@ -717,6 +740,7 @@
F3E3C75B224138AE007D243C /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = F3E3C657224069CE007D243C /* SDL_uikit_main.c */; };
FA1DC2721C62BE65008F99A0 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA1DC2701C62BE65008F99A0 /* SDL_uikitclipboard.h */; };
FA1DC2731C62BE65008F99A0 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = FA1DC2711C62BE65008F99A0 /* SDL_uikitclipboard.m */; };
+ FA24348D21D4201400B8918A /* SDL_metal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA24348C21D4201400B8918A /* SDL_metal.h */; };
FAB5981D1BB5C31500BE72C5 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */; };
FAB5981E1BB5C31500BE72C5 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */; };
FAB5981F1BB5C31500BE72C5 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.m */; };
@@ -962,11 +986,17 @@
56EA86FA13E9EC2B002E47EB /* SDL_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coreaudio.h; sourceTree = "<group>"; };
56ED04E0118A8EE200A56AA6 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_power.c; sourceTree = "<group>"; };
56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_syspower.m; sourceTree = "<group>"; };
+ 63CC93C623849391002A5C54 /* SDL_strtokr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_strtokr.c; sourceTree = "<group>"; };
93CB792213FC5E5200BD3E05 /* SDL_uikitviewcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitviewcontroller.h; sourceTree = "<group>"; };
93CB792513FC5F5300BD3E05 /* SDL_uikitviewcontroller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitviewcontroller.m; sourceTree = "<group>"; };
A704172D20F7E74800A82227 /* controller_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = controller_type.h; sourceTree = "<group>"; };
+ A704173020F7F39400A82227 /* SDL_hidapi_steam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_steam.c; sourceTree = "<group>"; };
+ A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_rumble.c; sourceTree = "<group>"; };
+ A75FDBD823EA38AD00529352 /* SDL_hidapi_rumble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_rumble.h; sourceTree = "<group>"; };
A7C19D27212E552B00DF2152 /* SDL_displayevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_displayevents_c.h; sourceTree = "<group>"; };
A7C19D28212E552B00DF2152 /* SDL_displayevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_displayevents.c; sourceTree = "<group>"; };
+ A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_gamecube.c; sourceTree = "<group>"; };
+ A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360w.c; sourceTree = "<group>"; };
AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = "<group>"; };
AA0AD06416647BD400CE5896 /* SDL_gamecontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamecontroller.h; sourceTree = "<group>"; };
AA0F8494178D5F1A00823F9D /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = "<group>"; };
@@ -1064,6 +1094,8 @@
F3E3C75F224138AE007D243C /* libSDLmain.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDLmain.a; sourceTree = BUILT_PRODUCTS_DIR; };
FA1DC2701C62BE65008F99A0 /* SDL_uikitclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitclipboard.h; sourceTree = "<group>"; };
FA1DC2711C62BE65008F99A0 /* SDL_uikitclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitclipboard.m; sourceTree = "<group>"; };
+ FA20874D2307894C0029758C /* SDL_shaders_metal_tvos.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_tvos.h; sourceTree = "<group>"; };
+ FA24348C21D4201400B8918A /* SDL_metal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_metal.h; sourceTree = "<group>"; };
FAB598141BB5C1B100BE72C5 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
FAD4F7011BA3C4E8008346CE /* SDL_sysjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick_c.h; sourceTree = "<group>"; };
FD0BBFEF0E3933DD00D833B1 /* SDL_uikitview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitview.h; sourceTree = "<group>"; };
@@ -1405,6 +1437,7 @@
children = (
AADC5A621FDA10C800960936 /* SDL_render_metal.m */,
AADC5A611FDA10C800960936 /* SDL_shaders_metal_ios.h */,
+ FA20874D2307894C0029758C /* SDL_shaders_metal_tvos.h */,
);
path = metal;
sourceTree = "<group>";
@@ -1458,9 +1491,14 @@
F3BDD78A20F51C8D004ECBF3 /* hidapi */ = {
isa = PBXGroup;
children = (
+ A7FF6B6123AC3BC6005876C6 /* SDL_hidapi_gamecube.c */,
F3BDD78E20F51CB8004ECBF3 /* SDL_hidapi_ps4.c */,
+ A75FDBD723EA38AD00529352 /* SDL_hidapi_rumble.c */,
+ A75FDBD823EA38AD00529352 /* SDL_hidapi_rumble.h */,
+ A704173020F7F39400A82227 /* SDL_hidapi_steam.c */,
F3BDD78C20F51CB8004ECBF3 /* SDL_hidapi_switch.c */,
F3BDD78B20F51CB8004ECBF3 /* SDL_hidapi_xbox360.c */,
+ A7FF6B6623AC3BCD005876C6 /* SDL_hidapi_xbox360w.c */,
F3BDD78D20F51CB8004ECBF3 /* SDL_hidapi_xboxone.c */,
F3BDD79020F51CB8004ECBF3 /* SDL_hidapijoystick_c.h */,
F3BDD79120F51CB8004ECBF3 /* SDL_hidapijoystick.c */,
@@ -1487,6 +1525,7 @@
FD3F4A6F0DEA620800C5B771 /* stdlib */ = {
isa = PBXGroup;
children = (
+ 63CC93C623849391002A5C54 /* SDL_strtokr.c */,
FD3F4A700DEA620800C5B771 /* SDL_getenv.c */,
FD3F4A710DEA620800C5B771 /* SDL_iconv.c */,
FD3F4A720DEA620800C5B771 /* SDL_malloc.c */,
@@ -1576,7 +1615,6 @@
children = (
AA7558651595D55500BBD41B /* begin_code.h */,
AA7558661595D55500BBD41B /* close_code.h */,
- AA7558971595D55500BBD41B /* SDL.h */,
AA7558671595D55500BBD41B /* SDL_assert.h */,
AA7558681595D55500BBD41B /* SDL_atomic.h */,
AA7558691595D55500BBD41B /* SDL_audio.h */,
@@ -1583,8 +1621,8 @@
AADA5B8E16CCAB7C00107CF7 /* SDL_bits.h */,
AA75586A1595D55500BBD41B /* SDL_blendmode.h */,
AA75586B1595D55500BBD41B /* SDL_clipboard.h */,
- AA75586D1595D55500BBD41B /* SDL_config.h */,
AA75586C1595D55500BBD41B /* SDL_config_iphoneos.h */,
+ AA75586D1595D55500BBD41B /* SDL_config.h */,
AA75586E1595D55500BBD41B /* SDL_copying.h */,
AA75586F1595D55500BBD41B /* SDL_cpuinfo.h */,
AA7558701595D55500BBD41B /* SDL_endian.h */,
@@ -1602,6 +1640,7 @@
AA75587B1595D55500BBD41B /* SDL_log.h */,
AA75587C1595D55500BBD41B /* SDL_main.h */,
AA9FF9501637C6E5000DF050 /* SDL_messagebox.h */,
+ FA24348C21D4201400B8918A /* SDL_metal.h */,
AA75587D1595D55500BBD41B /* SDL_mouse.h */,
AA75587E1595D55500BBD41B /* SDL_mutex.h */,
AA75587F1595D55500BBD41B /* SDL_name.h */,
@@ -1630,6 +1669,7 @@
AA7558951595D55500BBD41B /* SDL_version.h */,
AA7558961595D55500BBD41B /* SDL_video.h */,
4D7516FE1EE1C5B400820EEA /* SDL_vulkan.h */,
+ AA7558971595D55500BBD41B /* SDL.h */,
);
name = "Public Headers";
path = ../../include;
@@ -1960,6 +2000,7 @@
52ED1DD5222889500061FCE0 /* SDL_syswm.h in Headers */,
52ED1DD6222889500061FCE0 /* SDL_thread.h in Headers */,
52ED1DD7222889500061FCE0 /* SDL_timer.h in Headers */,
+ A75FDBDE23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */,
52ED1DD8222889500061FCE0 /* SDL_touch.h in Headers */,
52ED1DD9222889500061FCE0 /* SDL_types.h in Headers */,
52ED1DDA222889500061FCE0 /* SDL_version.h in Headers */,
@@ -2096,6 +2137,7 @@
F3E3C6C32241389A007D243C /* SDL_syswm.h in Headers */,
F3E3C6C42241389A007D243C /* SDL_thread.h in Headers */,
F3E3C6C52241389A007D243C /* SDL_timer.h in Headers */,
+ A75FDBDF23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */,
F3E3C6C62241389A007D243C /* SDL_touch.h in Headers */,
F3E3C6C72241389A007D243C /* SDL_types.h in Headers */,
F3E3C6C82241389A007D243C /* SDL_version.h in Headers */,
@@ -2183,6 +2225,7 @@
AA75589D1595D55500BBD41B /* SDL_blendmode.h in Headers */,
F30D9C9E212CD0990047DF2E /* SDL_sensor_c.h in Headers */,
AA75589E1595D55500BBD41B /* SDL_clipboard.h in Headers */,
+ FA24348D21D4201400B8918A /* SDL_metal.h in Headers */,
AA75589F1595D55500BBD41B /* SDL_config_iphoneos.h in Headers */,
AA7558A01595D55500BBD41B /* SDL_config.h in Headers */,
AA7558A11595D55500BBD41B /* SDL_copying.h in Headers */,
@@ -2232,6 +2275,7 @@
AA7558C31595D55500BBD41B /* SDL_syswm.h in Headers */,
AA7558C41595D55500BBD41B /* SDL_thread.h in Headers */,
AA7558C51595D55500BBD41B /* SDL_timer.h in Headers */,
+ A75FDBDD23EA38AD00529352 /* SDL_hidapi_rumble.h in Headers */,
AA7558C61595D55500BBD41B /* SDL_touch.h in Headers */,
AA7558C71595D55500BBD41B /* SDL_types.h in Headers */,
AA7558C81595D55500BBD41B /* SDL_version.h in Headers */,
@@ -2483,6 +2527,7 @@
52ED1E07222889500061FCE0 /* SDL_getenv.c in Sources */,
52ED1E08222889500061FCE0 /* SDL_iconv.c in Sources */,
52ED1E09222889500061FCE0 /* SDL_malloc.c in Sources */,
+ A7FF6B6323AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */,
52ED1E0A222889500061FCE0 /* SDL_hidapi_xbox360.c in Sources */,
52ED1E0B222889500061FCE0 /* SDL_qsort.c in Sources */,
52ED1E0C222889500061FCE0 /* SDL_hidapi_ps4.c in Sources */,
@@ -2489,6 +2534,7 @@
52ED1E0D222889500061FCE0 /* SDL_stdlib.c in Sources */,
52ED1E0E222889500061FCE0 /* SDL_blit.c in Sources */,
52ED1E0F222889500061FCE0 /* SDL_blit_0.c in Sources */,
+ A75FDAB723E288E400529352 /* SDL_hidapi_steam.c in Sources */,
52ED1E10222889500061FCE0 /* SDL_yuv.c in Sources */,
52ED1E11222889500061FCE0 /* SDL_blit_1.c in Sources */,
52ED1E12222889500061FCE0 /* SDL_dataqueue.c in Sources */,
@@ -2504,6 +2550,7 @@
52ED1E1C222889500061FCE0 /* SDL_stretch.c in Sources */,
52ED1E1D222889500061FCE0 /* SDL_egl.c in Sources */,
52ED1E1E222889500061FCE0 /* SDL_surface.c in Sources */,
+ A75FDBDA23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */,
52ED1E1F222889500061FCE0 /* SDL_video.c in Sources */,
52ED1E20222889500061FCE0 /* SDL_nullevents.c in Sources */,
52ED1E21222889500061FCE0 /* SDL_nullvideo.c in Sources */,
@@ -2547,6 +2594,7 @@
52ED1E47222889500061FCE0 /* SDL_render_gles.c in Sources */,
52ED1E48222889500061FCE0 /* SDL_hints.c in Sources */,
52ED1E49222889500061FCE0 /* SDL_shape.c in Sources */,
+ A7FF6B6823AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */,
52ED1E4A222889500061FCE0 /* SDL_render_gles2.c in Sources */,
52ED1E4B222889500061FCE0 /* SDL_dummysensor.c in Sources */,
52ED1E4C222889500061FCE0 /* SDL_shaders_gles2.c in Sources */,
@@ -2562,6 +2610,7 @@
52ED1E56222889500061FCE0 /* SDL_gamecontroller.c in Sources */,
52ED1E57222889500061FCE0 /* SDL_systls.c in Sources */,
52ED1E58222889500061FCE0 /* SDL_sysfilesystem.m in Sources */,
+ 63CC93C823849391002A5C54 /* SDL_strtokr.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2611,6 +2660,7 @@
F3E3C6F52241389A007D243C /* SDL_getenv.c in Sources */,
F3E3C6F62241389A007D243C /* SDL_iconv.c in Sources */,
F3E3C6F72241389A007D243C /* SDL_malloc.c in Sources */,
+ A7FF6B6523AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */,
F3E3C6F82241389A007D243C /* SDL_hidapi_xbox360.c in Sources */,
F3E3C6F92241389A007D243C /* SDL_qsort.c in Sources */,
F3E3C6FA2241389A007D243C /* SDL_hidapi_ps4.c in Sources */,
@@ -2617,6 +2667,7 @@
F3E3C6FB2241389A007D243C /* SDL_stdlib.c in Sources */,
F3E3C6FC2241389A007D243C /* SDL_blit.c in Sources */,
F3E3C6FD2241389A007D243C /* SDL_blit_0.c in Sources */,
+ A75FDAB823E2890000529352 /* SDL_hidapi_steam.c in Sources */,
F3E3C6FE2241389A007D243C /* SDL_yuv.c in Sources */,
F3E3C6FF2241389A007D243C /* SDL_blit_1.c in Sources */,
F3E3C7002241389A007D243C /* SDL_dataqueue.c in Sources */,
@@ -2632,6 +2683,7 @@
F3E3C70A2241389A007D243C /* SDL_stretch.c in Sources */,
F3E3C70B2241389A007D243C /* SDL_egl.c in Sources */,
F3E3C70C2241389A007D243C /* SDL_surface.c in Sources */,
+ A75FDBDC23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */,
F3E3C70D2241389A007D243C /* SDL_video.c in Sources */,
F3E3C70E2241389A007D243C /* SDL_nullevents.c in Sources */,
F3E3C70F2241389A007D243C /* SDL_nullvideo.c in Sources */,
@@ -2675,6 +2727,7 @@
F3E3C7362241389A007D243C /* SDL_render_gles.c in Sources */,
F3E3C7372241389A007D243C /* SDL_hints.c in Sources */,
F3E3C7382241389A007D243C /* SDL_shape.c in Sources */,
+ A7FF6B6A23AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */,
F3E3C7392241389A007D243C /* SDL_render_gles2.c in Sources */,
F3E3C73A2241389A007D243C /* SDL_dummysensor.c in Sources */,
F3E3C73B2241389A007D243C /* SDL_shaders_gles2.c in Sources */,
@@ -2690,6 +2743,7 @@
F3E3C7452241389A007D243C /* SDL_gamecontroller.c in Sources */,
F3E3C7462241389A007D243C /* SDL_systls.c in Sources */,
F3E3C7472241389A007D243C /* SDL_sysfilesystem.m in Sources */,
+ 63CC93CA23849391002A5C54 /* SDL_strtokr.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2736,6 +2790,7 @@
FAB5984B1BB5C31600BE72C5 /* SDL_sysfilesystem.m in Sources */,
AADC5A5D1FDA104400960936 /* yuv_rgb.c in Sources */,
FAB5984C1BB5C31600BE72C5 /* SDL_syshaptic.c in Sources */,
+ A75FDBDB23EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */,
AADC5A5F1FDA105600960936 /* SDL_vulkan_utils.c in Sources */,
AADC5A5E1FDA105300960936 /* SDL_yuv.c in Sources */,
FAB5984D1BB5C31600BE72C5 /* SDL_haptic.c in Sources */,
@@ -2744,6 +2799,7 @@
FAB598521BB5C31600BE72C5 /* SDL_joystick.c in Sources */,
FAB598551BB5C31600BE72C5 /* SDL_sysloadso.c in Sources */,
AADC5A651FDA10CB00960936 /* SDL_render_metal.m in Sources */,
+ A7FF6B6923AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */,
FAB598561BB5C31600BE72C5 /* SDL_sysloadso.c in Sources */,
FAB598571BB5C31600BE72C5 /* SDL_power.c in Sources */,
F30D9CA1212CD0990047DF2E /* SDL_sensor.c in Sources */,
@@ -2773,6 +2829,7 @@
FAB598781BB5C31600BE72C5 /* SDL_syscond.c in Sources */,
F3BDD79D20F51CB8004ECBF3 /* SDL_hidapijoystick.c in Sources */,
AADC5A601FDA10A400960936 /* SDL_uikitvulkan.m in Sources */,
+ A7FF6B6423AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */,
FAB598791BB5C31600BE72C5 /* SDL_sysmutex.c in Sources */,
FAB5987B1BB5C31600BE72C5 /* SDL_syssem.c in Sources */,
FAB5987C1BB5C31600BE72C5 /* SDL_systhread.c in Sources */,
@@ -2791,6 +2848,7 @@
FAB598951BB5C31600BE72C5 /* SDL_uikitview.m in Sources */,
FAB598971BB5C31600BE72C5 /* SDL_uikitviewcontroller.m in Sources */,
FAB598991BB5C31600BE72C5 /* SDL_uikitwindow.m in Sources */,
+ A704173220F7F39900A82227 /* SDL_hidapi_steam.c in Sources */,
FAB5989A1BB5C31600BE72C5 /* SDL_nullevents.c in Sources */,
FAB5989D1BB5C31600BE72C5 /* SDL_nullframebuffer.c in Sources */,
FAB5989E1BB5C31600BE72C5 /* SDL_nullvideo.c in Sources */,
@@ -2816,6 +2874,7 @@
FAB598BD1BB5C31600BE72C5 /* SDL_hints.c in Sources */,
FAB598BE1BB5C31600BE72C5 /* SDL_log.c in Sources */,
FAB598BF1BB5C31600BE72C5 /* SDL.c in Sources */,
+ 63CC93C923849391002A5C54 /* SDL_strtokr.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2857,6 +2916,7 @@
FD3F4A760DEA620800C5B771 /* SDL_getenv.c in Sources */,
FD3F4A770DEA620800C5B771 /* SDL_iconv.c in Sources */,
FD3F4A780DEA620800C5B771 /* SDL_malloc.c in Sources */,
+ A7FF6B6223AC3BC6005876C6 /* SDL_hidapi_gamecube.c in Sources */,
F3BDD79220F51CB8004ECBF3 /* SDL_hidapi_xbox360.c in Sources */,
FD3F4A790DEA620800C5B771 /* SDL_qsort.c in Sources */,
F3BDD79820F51CB8004ECBF3 /* SDL_hidapi_ps4.c in Sources */,
@@ -2868,6 +2928,7 @@
566726451DF72CF5001DD3DB /* SDL_dataqueue.c in Sources */,
FDA684510DF2374E00F98A1A /* SDL_blit_A.c in Sources */,
FDA684520DF2374E00F98A1A /* SDL_blit_auto.c in Sources */,
+ A704173120F7F39900A82227 /* SDL_hidapi_steam.c in Sources */,
FDA684540DF2374E00F98A1A /* SDL_blit_copy.c in Sources */,
FDA684560DF2374E00F98A1A /* SDL_blit_N.c in Sources */,
FDA684570DF2374E00F98A1A /* SDL_blit_slow.c in Sources */,
@@ -2878,6 +2939,7 @@
FDA684640DF2374E00F98A1A /* SDL_stretch.c in Sources */,
AA13B34D1FB8B27800D9FEE6 /* SDL_egl.c in Sources */,
FDA684660DF2374E00F98A1A /* SDL_surface.c in Sources */,
+ A75FDBD923EA38AD00529352 /* SDL_hidapi_rumble.c in Sources */,
FDA684680DF2374E00F98A1A /* SDL_video.c in Sources */,
FDA685FB0DF244C800F98A1A /* SDL_nullevents.c in Sources */,
FDA685FF0DF244C800F98A1A /* SDL_nullvideo.c in Sources */,
@@ -2921,6 +2983,7 @@
0442EC5312FE1C28004C9285 /* SDL_render_gles.c in Sources */,
0442EC5512FE1C3F004C9285 /* SDL_hints.c in Sources */,
AA13B34A1FB8B27800D9FEE6 /* SDL_shape.c in Sources */,
+ A7FF6B6723AC3BCD005876C6 /* SDL_hidapi_xbox360w.c in Sources */,
0402A85812FE70C600CECEE3 /* SDL_render_gles2.c in Sources */,
F36839CD214790950000F255 /* SDL_dummysensor.c in Sources */,
0402A85912FE70C600CECEE3 /* SDL_shaders_gles2.c in Sources */,
@@ -2936,6 +2999,7 @@
AA0AD06216647BBB00CE5896 /* SDL_gamecontroller.c in Sources */,
AA0F8495178D5F1A00823F9D /* SDL_systls.c in Sources */,
56C181E217C44D7A00406AE3 /* SDL_sysfilesystem.m in Sources */,
+ 63CC93C723849391002A5C54 /* SDL_strtokr.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
--- a/external/SDL2/Xcode/SDL/Info-Framework.plist
+++ b/external/SDL2/Xcode/SDL/Info-Framework.plist
@@ -19,10 +19,10 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
- <string>2.0.10</string>
+ <string>2.0.12</string>
<key>CFBundleSignature</key>
<string>SDLX</string>
<key>CFBundleVersion</key>
- <string>2.0.10</string>
+ <string>2.0.12</string>
</dict>
</plist>
--- a/external/SDL2/Xcode/SDL/SDL.xcodeproj/project.pbxproj
+++ b/external/SDL2/Xcode/SDL/SDL.xcodeproj/project.pbxproj
@@ -9,491 +9,3718 @@
/* Begin PBXBuildFile section */
007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; };
007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
- 007317AB0858DECD00B2BC32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; };
- 007317AD0858DECD00B2BC32 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
- 007317C30858E15000B2BC32 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; };
00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
- 04043BBB12FEB1BE0076DB1F /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */; };
- 04043BBC12FEB1BE0076DB1F /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */; };
- 041B2CA512FA0D680087D585 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = 041B2C9E12FA0D680087D585 /* SDL_render.c */; };
- 041B2CA612FA0D680087D585 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 041B2C9F12FA0D680087D585 /* SDL_sysrender.h */; };
- 041B2CAB12FA0D680087D585 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = 041B2C9E12FA0D680087D585 /* SDL_render.c */; };
- 041B2CAC12FA0D680087D585 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 041B2C9F12FA0D680087D585 /* SDL_sysrender.h */; };
- 0435673E1303160F00BA5428 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0435673C1303160F00BA5428 /* SDL_shaders_gl.c */; };
- 0435673F1303160F00BA5428 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0435673D1303160F00BA5428 /* SDL_shaders_gl.h */; };
- 043567401303160F00BA5428 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0435673C1303160F00BA5428 /* SDL_shaders_gl.c */; };
- 043567411303160F00BA5428 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0435673D1303160F00BA5428 /* SDL_shaders_gl.h */; };
- 04409B9312FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409B8F12FA97ED00FB9AA8 /* SDL_yuv_sw_c.h */; };
- 04409B9412FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409B9012FA97ED00FB9AA8 /* SDL_yuv_sw.c */; };
- 04409B9712FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409B8F12FA97ED00FB9AA8 /* SDL_yuv_sw_c.h */; };
- 04409B9812FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409B9012FA97ED00FB9AA8 /* SDL_yuv_sw.c */; };
- 0442EC1812FE1BBA004C9285 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1712FE1BBA004C9285 /* SDL_render_gl.c */; };
- 0442EC1912FE1BBA004C9285 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1712FE1BBA004C9285 /* SDL_render_gl.c */; };
- 0442EC1C12FE1BCB004C9285 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC1A12FE1BCB004C9285 /* SDL_render_sw_c.h */; };
- 0442EC1D12FE1BCB004C9285 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1B12FE1BCB004C9285 /* SDL_render_sw.c */; };
- 0442EC1E12FE1BCB004C9285 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC1A12FE1BCB004C9285 /* SDL_render_sw_c.h */; };
- 0442EC1F12FE1BCB004C9285 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1B12FE1BCB004C9285 /* SDL_render_sw.c */; };
- 0442EC5A12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5812FE1C60004C9285 /* SDL_x11framebuffer.c */; };
- 0442EC5B12FE1C60004C9285 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC5912FE1C60004C9285 /* SDL_x11framebuffer.h */; };
- 0442EC5C12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5812FE1C60004C9285 /* SDL_x11framebuffer.c */; };
- 0442EC5D12FE1C60004C9285 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC5912FE1C60004C9285 /* SDL_x11framebuffer.h */; };
- 0442EC5F12FE1C75004C9285 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5E12FE1C75004C9285 /* SDL_hints.c */; };
- 0442EC6012FE1C75004C9285 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5E12FE1C75004C9285 /* SDL_hints.c */; };
- 04BAC0C81300C2160055DE28 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BAC0C71300C2160055DE28 /* SDL_log.c */; };
- 04BAC0C91300C2160055DE28 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BAC0C71300C2160055DE28 /* SDL_log.c */; };
- 04BD000812E6671800899322 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD8812E6671700899322 /* SDL_diskaudio.c */; };
- 04BD000912E6671800899322 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD8912E6671700899322 /* SDL_diskaudio.h */; };
- 04BD001012E6671800899322 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD9412E6671700899322 /* SDL_dummyaudio.c */; };
- 04BD001112E6671800899322 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */; };
- 04BD001912E6671800899322 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDA112E6671700899322 /* SDL_coreaudio.h */; };
- 04BD002612E6671800899322 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB412E6671700899322 /* SDL_audio.c */; };
- 04BD002712E6671800899322 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB512E6671700899322 /* SDL_audio_c.h */; };
- 04BD002812E6671800899322 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB612E6671700899322 /* SDL_audiocvt.c */; };
- 04BD002912E6671800899322 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB712E6671700899322 /* SDL_audiodev.c */; };
- 04BD002A12E6671800899322 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB812E6671700899322 /* SDL_audiodev_c.h */; };
- 04BD002C12E6671800899322 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBA12E6671700899322 /* SDL_audiotypecvt.c */; };
- 04BD002D12E6671800899322 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBB12E6671700899322 /* SDL_mixer.c */; };
- 04BD003412E6671800899322 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC212E6671700899322 /* SDL_sysaudio.h */; };
- 04BD003512E6671800899322 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDC312E6671700899322 /* SDL_wave.c */; };
- 04BD003612E6671800899322 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC412E6671700899322 /* SDL_wave.h */; };
- 04BD004112E6671800899322 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDD412E6671700899322 /* SDL_cpuinfo.c */; };
- 04BD004212E6671800899322 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD612E6671700899322 /* blank_cursor.h */; };
- 04BD004312E6671800899322 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD712E6671700899322 /* default_cursor.h */; };
- 04BD004412E6671800899322 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD812E6671700899322 /* scancodes_darwin.h */; };
- 04BD004512E6671800899322 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD912E6671700899322 /* scancodes_linux.h */; };
- 04BD004712E6671800899322 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDB12E6671700899322 /* scancodes_xfree86.h */; };
- 04BD004812E6671800899322 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDC12E6671700899322 /* SDL_clipboardevents.c */; };
- 04BD004912E6671800899322 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDD12E6671700899322 /* SDL_clipboardevents_c.h */; };
- 04BD004A12E6671800899322 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDE12E6671700899322 /* SDL_events.c */; };
- 04BD004B12E6671800899322 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDF12E6671700899322 /* SDL_events_c.h */; };
- 04BD004C12E6671800899322 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE012E6671700899322 /* SDL_gesture.c */; };
- 04BD004D12E6671800899322 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE112E6671700899322 /* SDL_gesture_c.h */; };
- 04BD004E12E6671800899322 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE212E6671700899322 /* SDL_keyboard.c */; };
- 04BD004F12E6671800899322 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE312E6671700899322 /* SDL_keyboard_c.h */; };
- 04BD005012E6671800899322 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE412E6671700899322 /* SDL_mouse.c */; };
- 04BD005112E6671800899322 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE512E6671700899322 /* SDL_mouse_c.h */; };
- 04BD005212E6671800899322 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE612E6671700899322 /* SDL_quit.c */; };
- 04BD005312E6671800899322 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE712E6671700899322 /* SDL_sysevents.h */; };
- 04BD005412E6671800899322 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE812E6671700899322 /* SDL_touch.c */; };
- 04BD005512E6671800899322 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE912E6671700899322 /* SDL_touch_c.h */; };
- 04BD005612E6671800899322 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEA12E6671700899322 /* SDL_windowevents.c */; };
- 04BD005712E6671800899322 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEB12E6671700899322 /* SDL_windowevents_c.h */; };
- 04BD005812E6671800899322 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEE12E6671700899322 /* SDL_rwopsbundlesupport.h */; };
- 04BD005912E6671800899322 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEF12E6671700899322 /* SDL_rwopsbundlesupport.m */; };
- 04BD005A12E6671800899322 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF012E6671700899322 /* SDL_rwops.c */; };
- 04BD005B12E6671800899322 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF312E6671700899322 /* SDL_syshaptic.c */; };
- 04BD005F12E6671800899322 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDFA12E6671700899322 /* SDL_haptic.c */; };
- 04BD006012E6671800899322 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFB12E6671700899322 /* SDL_haptic_c.h */; };
- 04BD006112E6671800899322 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFC12E6671700899322 /* SDL_syshaptic.h */; };
- 04BD006612E6671800899322 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE0712E6671700899322 /* SDL_sysjoystick.c */; };
- 04BD006712E6671800899322 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE0812E6671700899322 /* SDL_sysjoystick_c.h */; };
- 04BD007012E6671800899322 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE1612E6671700899322 /* SDL_joystick.c */; };
- 04BD007112E6671800899322 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1712E6671700899322 /* SDL_joystick_c.h */; };
- 04BD007212E6671800899322 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1812E6671700899322 /* SDL_sysjoystick.h */; };
- 04BD008812E6671800899322 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE3312E6671700899322 /* SDL_sysloadso.c */; };
- 04BD009412E6671800899322 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4B12E6671700899322 /* SDL_syspower.c */; };
- 04BD009612E6671800899322 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4E12E6671700899322 /* SDL_power.c */; };
- 04BD009B12E6671800899322 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5512E6671700899322 /* SDL_assert_c.h */; };
- 04BD009C12E6671800899322 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5612E6671700899322 /* SDL_assert.c */; };
- 04BD009E12E6671800899322 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5812E6671700899322 /* SDL_error_c.h */; };
- 04BD009F12E6671800899322 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5912E6671700899322 /* SDL_error.c */; };
- 04BD00A212E6671800899322 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5C12E6671700899322 /* SDL.c */; };
- 04BD00A312E6671800899322 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5E12E6671700899322 /* SDL_getenv.c */; };
- 04BD00A412E6671800899322 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5F12E6671700899322 /* SDL_iconv.c */; };
- 04BD00A512E6671800899322 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6012E6671700899322 /* SDL_malloc.c */; };
- 04BD00A612E6671800899322 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6112E6671700899322 /* SDL_qsort.c */; };
- 04BD00A712E6671800899322 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6212E6671700899322 /* SDL_stdlib.c */; };
- 04BD00A812E6671800899322 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6312E6671700899322 /* SDL_string.c */; };
- 04BD00BD12E6671800899322 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7E12E6671800899322 /* SDL_syscond.c */; };
- 04BD00BE12E6671800899322 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7F12E6671800899322 /* SDL_sysmutex.c */; };
- 04BD00BF12E6671800899322 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8012E6671800899322 /* SDL_sysmutex_c.h */; };
- 04BD00C012E6671800899322 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8112E6671800899322 /* SDL_syssem.c */; };
- 04BD00C112E6671800899322 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8212E6671800899322 /* SDL_systhread.c */; };
- 04BD00C212E6671800899322 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8312E6671800899322 /* SDL_systhread_c.h */; };
- 04BD00C912E6671800899322 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8B12E6671800899322 /* SDL_systhread.h */; };
- 04BD00CA12E6671800899322 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8C12E6671800899322 /* SDL_thread.c */; };
- 04BD00CB12E6671800899322 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8D12E6671800899322 /* SDL_thread_c.h */; };
- 04BD00D712E6671800899322 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE9F12E6671800899322 /* SDL_timer.c */; };
- 04BD00D812E6671800899322 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEA012E6671800899322 /* SDL_timer_c.h */; };
- 04BD00D912E6671800899322 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEA212E6671800899322 /* SDL_systimer.c */; };
- 04BD00F312E6671800899322 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC212E6671800899322 /* SDL_cocoaclipboard.h */; };
- 04BD00F412E6671800899322 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC312E6671800899322 /* SDL_cocoaclipboard.m */; };
- 04BD00F512E6671800899322 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC412E6671800899322 /* SDL_cocoaevents.h */; };
- 04BD00F612E6671800899322 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC512E6671800899322 /* SDL_cocoaevents.m */; };
- 04BD00F712E6671800899322 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC612E6671800899322 /* SDL_cocoakeyboard.h */; };
- 04BD00F812E6671800899322 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC712E6671800899322 /* SDL_cocoakeyboard.m */; };
- 04BD00F912E6671800899322 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC812E6671800899322 /* SDL_cocoamodes.h */; };
- 04BD00FA12E6671800899322 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC912E6671800899322 /* SDL_cocoamodes.m */; };
- 04BD00FB12E6671800899322 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECA12E6671800899322 /* SDL_cocoamouse.h */; };
- 04BD00FC12E6671800899322 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECB12E6671800899322 /* SDL_cocoamouse.m */; };
- 04BD00FD12E6671800899322 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */; };
- 04BD00FE12E6671800899322 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */; };
- 04BD00FF12E6671800899322 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECE12E6671800899322 /* SDL_cocoashape.h */; };
- 04BD010012E6671800899322 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECF12E6671800899322 /* SDL_cocoashape.m */; };
- 04BD010112E6671800899322 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED012E6671800899322 /* SDL_cocoavideo.h */; };
- 04BD010212E6671800899322 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED112E6671800899322 /* SDL_cocoavideo.m */; };
- 04BD010312E6671800899322 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED212E6671800899322 /* SDL_cocoawindow.h */; };
- 04BD010412E6671800899322 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED312E6671800899322 /* SDL_cocoawindow.m */; };
- 04BD011712E6671800899322 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEE812E6671800899322 /* SDL_nullevents.c */; };
- 04BD011812E6671800899322 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */; };
- 04BD011B12E6671800899322 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */; };
- 04BD011C12E6671800899322 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEED12E6671800899322 /* SDL_nullvideo.h */; };
- 04BD017512E6671800899322 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4E12E6671800899322 /* SDL_blit.c */; };
- 04BD017612E6671800899322 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4F12E6671800899322 /* SDL_blit.h */; };
- 04BD017712E6671800899322 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5012E6671800899322 /* SDL_blit_0.c */; };
- 04BD017812E6671800899322 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5112E6671800899322 /* SDL_blit_1.c */; };
- 04BD017912E6671800899322 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5212E6671800899322 /* SDL_blit_A.c */; };
- 04BD017A12E6671800899322 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5312E6671800899322 /* SDL_blit_auto.c */; };
- 04BD017B12E6671800899322 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5412E6671800899322 /* SDL_blit_auto.h */; };
- 04BD017C12E6671800899322 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5512E6671800899322 /* SDL_blit_copy.c */; };
- 04BD017D12E6671800899322 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5612E6671800899322 /* SDL_blit_copy.h */; };
- 04BD017E12E6671800899322 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5712E6671800899322 /* SDL_blit_N.c */; };
- 04BD017F12E6671800899322 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5812E6671800899322 /* SDL_blit_slow.c */; };
- 04BD018012E6671800899322 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5912E6671800899322 /* SDL_blit_slow.h */; };
- 04BD018112E6671800899322 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5A12E6671800899322 /* SDL_bmp.c */; };
- 04BD018212E6671800899322 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5B12E6671800899322 /* SDL_clipboard.c */; };
- 04BD018712E6671800899322 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6012E6671800899322 /* SDL_fillrect.c */; };
- 04BD018C12E6671800899322 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6512E6671800899322 /* SDL_pixels.c */; };
- 04BD018D12E6671800899322 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF6612E6671800899322 /* SDL_pixels_c.h */; };
- 04BD018E12E6671800899322 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6712E6671800899322 /* SDL_rect.c */; };
- 04BD019612E6671800899322 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6F12E6671800899322 /* SDL_RLEaccel.c */; };
- 04BD019712E6671800899322 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7012E6671800899322 /* SDL_RLEaccel_c.h */; };
- 04BD019812E6671800899322 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7112E6671800899322 /* SDL_shape.c */; };
- 04BD019912E6671800899322 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7212E6671800899322 /* SDL_shape_internals.h */; };
- 04BD019A12E6671800899322 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7312E6671800899322 /* SDL_stretch.c */; };
- 04BD019B12E6671800899322 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7412E6671800899322 /* SDL_surface.c */; };
- 04BD019C12E6671800899322 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7512E6671800899322 /* SDL_sysvideo.h */; };
- 04BD019D12E6671800899322 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7612E6671800899322 /* SDL_video.c */; };
- 04BD01DB12E6671800899322 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFB812E6671800899322 /* imKStoUCS.c */; };
- 04BD01DC12E6671800899322 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFB912E6671800899322 /* imKStoUCS.h */; };
- 04BD01DD12E6671800899322 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBA12E6671800899322 /* SDL_x11clipboard.c */; };
- 04BD01DE12E6671800899322 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBB12E6671800899322 /* SDL_x11clipboard.h */; };
- 04BD01DF12E6671800899322 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBC12E6671800899322 /* SDL_x11dyn.c */; };
- 04BD01E012E6671800899322 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBD12E6671800899322 /* SDL_x11dyn.h */; };
- 04BD01E112E6671800899322 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBE12E6671800899322 /* SDL_x11events.c */; };
- 04BD01E212E6671800899322 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBF12E6671800899322 /* SDL_x11events.h */; };
- 04BD01E512E6671800899322 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC212E6671800899322 /* SDL_x11keyboard.c */; };
- 04BD01E612E6671800899322 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC312E6671800899322 /* SDL_x11keyboard.h */; };
- 04BD01E712E6671800899322 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC412E6671800899322 /* SDL_x11modes.c */; };
- 04BD01E812E6671800899322 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC512E6671800899322 /* SDL_x11modes.h */; };
- 04BD01E912E6671800899322 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC612E6671800899322 /* SDL_x11mouse.c */; };
- 04BD01EA12E6671800899322 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC712E6671800899322 /* SDL_x11mouse.h */; };
- 04BD01EB12E6671800899322 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC812E6671800899322 /* SDL_x11opengl.c */; };
- 04BD01EC12E6671800899322 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC912E6671800899322 /* SDL_x11opengl.h */; };
- 04BD01ED12E6671800899322 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCA12E6671800899322 /* SDL_x11opengles.c */; };
- 04BD01EE12E6671800899322 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCB12E6671800899322 /* SDL_x11opengles.h */; };
- 04BD01F112E6671800899322 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCE12E6671800899322 /* SDL_x11shape.c */; };
- 04BD01F212E6671800899322 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCF12E6671800899322 /* SDL_x11shape.h */; };
- 04BD01F312E6671800899322 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD012E6671800899322 /* SDL_x11sym.h */; };
- 04BD01F412E6671800899322 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD112E6671800899322 /* SDL_x11touch.c */; };
- 04BD01F512E6671800899322 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD212E6671800899322 /* SDL_x11touch.h */; };
- 04BD01F612E6671800899322 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD312E6671800899322 /* SDL_x11video.c */; };
- 04BD01F712E6671800899322 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD412E6671800899322 /* SDL_x11video.h */; };
- 04BD01F812E6671800899322 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD512E6671800899322 /* SDL_x11window.c */; };
- 04BD01F912E6671800899322 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD612E6671800899322 /* SDL_x11window.h */; };
- 04BD021712E6671800899322 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7412E6671700899322 /* SDL_atomic.c */; };
- 04BD021812E6671800899322 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7512E6671700899322 /* SDL_spinlock.c */; };
- 04BD022412E6671800899322 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD8812E6671700899322 /* SDL_diskaudio.c */; };
- 04BD022512E6671800899322 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD8912E6671700899322 /* SDL_diskaudio.h */; };
- 04BD022C12E6671800899322 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD9412E6671700899322 /* SDL_dummyaudio.c */; };
- 04BD022D12E6671800899322 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */; };
- 04BD023512E6671800899322 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDA112E6671700899322 /* SDL_coreaudio.h */; };
- 04BD024212E6671800899322 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB412E6671700899322 /* SDL_audio.c */; };
- 04BD024312E6671800899322 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB512E6671700899322 /* SDL_audio_c.h */; };
- 04BD024412E6671800899322 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB612E6671700899322 /* SDL_audiocvt.c */; };
- 04BD024512E6671800899322 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB712E6671700899322 /* SDL_audiodev.c */; };
- 04BD024612E6671800899322 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB812E6671700899322 /* SDL_audiodev_c.h */; };
- 04BD024812E6671800899322 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBA12E6671700899322 /* SDL_audiotypecvt.c */; };
- 04BD024912E6671800899322 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBB12E6671700899322 /* SDL_mixer.c */; };
- 04BD025012E6671800899322 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC212E6671700899322 /* SDL_sysaudio.h */; };
- 04BD025112E6671800899322 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDC312E6671700899322 /* SDL_wave.c */; };
- 04BD025212E6671800899322 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC412E6671700899322 /* SDL_wave.h */; };
- 04BD025C12E6671800899322 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDD412E6671700899322 /* SDL_cpuinfo.c */; };
- 04BD025D12E6671800899322 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD612E6671700899322 /* blank_cursor.h */; };
- 04BD025E12E6671800899322 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD712E6671700899322 /* default_cursor.h */; };
- 04BD025F12E6671800899322 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD812E6671700899322 /* scancodes_darwin.h */; };
- 04BD026012E6671800899322 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD912E6671700899322 /* scancodes_linux.h */; };
- 04BD026212E6671800899322 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDB12E6671700899322 /* scancodes_xfree86.h */; };
- 04BD026312E6671800899322 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDC12E6671700899322 /* SDL_clipboardevents.c */; };
- 04BD026412E6671800899322 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDD12E6671700899322 /* SDL_clipboardevents_c.h */; };
- 04BD026512E6671800899322 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDE12E6671700899322 /* SDL_events.c */; };
- 04BD026612E6671800899322 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDF12E6671700899322 /* SDL_events_c.h */; };
- 04BD026712E6671800899322 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE012E6671700899322 /* SDL_gesture.c */; };
- 04BD026812E6671800899322 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE112E6671700899322 /* SDL_gesture_c.h */; };
- 04BD026912E6671800899322 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE212E6671700899322 /* SDL_keyboard.c */; };
- 04BD026A12E6671800899322 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE312E6671700899322 /* SDL_keyboard_c.h */; };
- 04BD026B12E6671800899322 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE412E6671700899322 /* SDL_mouse.c */; };
- 04BD026C12E6671800899322 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE512E6671700899322 /* SDL_mouse_c.h */; };
- 04BD026D12E6671800899322 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE612E6671700899322 /* SDL_quit.c */; };
- 04BD026E12E6671800899322 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE712E6671700899322 /* SDL_sysevents.h */; };
- 04BD026F12E6671800899322 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE812E6671700899322 /* SDL_touch.c */; };
- 04BD027012E6671800899322 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE912E6671700899322 /* SDL_touch_c.h */; };
- 04BD027112E6671800899322 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEA12E6671700899322 /* SDL_windowevents.c */; };
- 04BD027212E6671800899322 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEB12E6671700899322 /* SDL_windowevents_c.h */; };
- 04BD027312E6671800899322 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEE12E6671700899322 /* SDL_rwopsbundlesupport.h */; };
- 04BD027412E6671800899322 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEF12E6671700899322 /* SDL_rwopsbundlesupport.m */; };
- 04BD027512E6671800899322 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF012E6671700899322 /* SDL_rwops.c */; };
- 04BD027612E6671800899322 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF312E6671700899322 /* SDL_syshaptic.c */; };
- 04BD027A12E6671800899322 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDFA12E6671700899322 /* SDL_haptic.c */; };
- 04BD027B12E6671800899322 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFB12E6671700899322 /* SDL_haptic_c.h */; };
- 04BD027C12E6671800899322 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFC12E6671700899322 /* SDL_syshaptic.h */; };
- 04BD028112E6671800899322 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE0712E6671700899322 /* SDL_sysjoystick.c */; };
- 04BD028212E6671800899322 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE0812E6671700899322 /* SDL_sysjoystick_c.h */; };
- 04BD028B12E6671800899322 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE1612E6671700899322 /* SDL_joystick.c */; };
- 04BD028C12E6671800899322 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1712E6671700899322 /* SDL_joystick_c.h */; };
- 04BD028D12E6671800899322 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1812E6671700899322 /* SDL_sysjoystick.h */; };
- 04BD02A312E6671800899322 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE3312E6671700899322 /* SDL_sysloadso.c */; };
- 04BD02AE12E6671800899322 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4B12E6671700899322 /* SDL_syspower.c */; };
- 04BD02B012E6671800899322 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4E12E6671700899322 /* SDL_power.c */; };
- 04BD02B512E6671800899322 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5512E6671700899322 /* SDL_assert_c.h */; };
- 04BD02B612E6671800899322 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5612E6671700899322 /* SDL_assert.c */; };
- 04BD02B812E6671800899322 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5812E6671700899322 /* SDL_error_c.h */; };
- 04BD02B912E6671800899322 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5912E6671700899322 /* SDL_error.c */; };
- 04BD02BC12E6671800899322 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5C12E6671700899322 /* SDL.c */; };
- 04BD02BD12E6671800899322 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5E12E6671700899322 /* SDL_getenv.c */; };
- 04BD02BE12E6671800899322 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5F12E6671700899322 /* SDL_iconv.c */; };
- 04BD02BF12E6671800899322 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6012E6671700899322 /* SDL_malloc.c */; };
- 04BD02C012E6671800899322 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6112E6671700899322 /* SDL_qsort.c */; };
- 04BD02C112E6671800899322 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6212E6671700899322 /* SDL_stdlib.c */; };
- 04BD02C212E6671800899322 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6312E6671700899322 /* SDL_string.c */; };
- 04BD02D712E6671800899322 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7E12E6671800899322 /* SDL_syscond.c */; };
- 04BD02D812E6671800899322 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7F12E6671800899322 /* SDL_sysmutex.c */; };
- 04BD02D912E6671800899322 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8012E6671800899322 /* SDL_sysmutex_c.h */; };
- 04BD02DA12E6671800899322 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8112E6671800899322 /* SDL_syssem.c */; };
- 04BD02DB12E6671800899322 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8212E6671800899322 /* SDL_systhread.c */; };
- 04BD02DC12E6671800899322 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8312E6671800899322 /* SDL_systhread_c.h */; };
- 04BD02E312E6671800899322 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8B12E6671800899322 /* SDL_systhread.h */; };
- 04BD02E412E6671800899322 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8C12E6671800899322 /* SDL_thread.c */; };
- 04BD02E512E6671800899322 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8D12E6671800899322 /* SDL_thread_c.h */; };
- 04BD02F112E6671800899322 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE9F12E6671800899322 /* SDL_timer.c */; };
- 04BD02F212E6671800899322 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEA012E6671800899322 /* SDL_timer_c.h */; };
- 04BD02F312E6671800899322 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEA212E6671800899322 /* SDL_systimer.c */; };
- 04BD030D12E6671800899322 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC212E6671800899322 /* SDL_cocoaclipboard.h */; };
- 04BD030E12E6671800899322 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC312E6671800899322 /* SDL_cocoaclipboard.m */; };
- 04BD030F12E6671800899322 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC412E6671800899322 /* SDL_cocoaevents.h */; };
- 04BD031012E6671800899322 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC512E6671800899322 /* SDL_cocoaevents.m */; };
- 04BD031112E6671800899322 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC612E6671800899322 /* SDL_cocoakeyboard.h */; };
- 04BD031212E6671800899322 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC712E6671800899322 /* SDL_cocoakeyboard.m */; };
- 04BD031312E6671800899322 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC812E6671800899322 /* SDL_cocoamodes.h */; };
- 04BD031412E6671800899322 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC912E6671800899322 /* SDL_cocoamodes.m */; };
- 04BD031512E6671800899322 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECA12E6671800899322 /* SDL_cocoamouse.h */; };
- 04BD031612E6671800899322 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECB12E6671800899322 /* SDL_cocoamouse.m */; };
- 04BD031712E6671800899322 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */; };
- 04BD031812E6671800899322 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */; };
- 04BD031912E6671800899322 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECE12E6671800899322 /* SDL_cocoashape.h */; };
- 04BD031A12E6671800899322 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECF12E6671800899322 /* SDL_cocoashape.m */; };
- 04BD031B12E6671800899322 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED012E6671800899322 /* SDL_cocoavideo.h */; };
- 04BD031C12E6671800899322 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED112E6671800899322 /* SDL_cocoavideo.m */; };
- 04BD031D12E6671800899322 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED212E6671800899322 /* SDL_cocoawindow.h */; };
- 04BD031E12E6671800899322 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED312E6671800899322 /* SDL_cocoawindow.m */; };
- 04BD033112E6671800899322 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEE812E6671800899322 /* SDL_nullevents.c */; };
- 04BD033212E6671800899322 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */; };
- 04BD033512E6671800899322 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */; };
- 04BD033612E6671800899322 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEED12E6671800899322 /* SDL_nullvideo.h */; };
- 04BD038F12E6671800899322 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4E12E6671800899322 /* SDL_blit.c */; };
- 04BD039012E6671800899322 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4F12E6671800899322 /* SDL_blit.h */; };
- 04BD039112E6671800899322 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5012E6671800899322 /* SDL_blit_0.c */; };
- 04BD039212E6671800899322 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5112E6671800899322 /* SDL_blit_1.c */; };
- 04BD039312E6671800899322 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5212E6671800899322 /* SDL_blit_A.c */; };
- 04BD039412E6671800899322 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5312E6671800899322 /* SDL_blit_auto.c */; };
- 04BD039512E6671800899322 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5412E6671800899322 /* SDL_blit_auto.h */; };
- 04BD039612E6671800899322 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5512E6671800899322 /* SDL_blit_copy.c */; };
- 04BD039712E6671800899322 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5612E6671800899322 /* SDL_blit_copy.h */; };
- 04BD039812E6671800899322 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5712E6671800899322 /* SDL_blit_N.c */; };
- 04BD039912E6671800899322 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5812E6671800899322 /* SDL_blit_slow.c */; };
- 04BD039A12E6671800899322 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5912E6671800899322 /* SDL_blit_slow.h */; };
- 04BD039B12E6671800899322 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5A12E6671800899322 /* SDL_bmp.c */; };
- 04BD039C12E6671800899322 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5B12E6671800899322 /* SDL_clipboard.c */; };
- 04BD03A112E6671800899322 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6012E6671800899322 /* SDL_fillrect.c */; };
- 04BD03A612E6671800899322 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6512E6671800899322 /* SDL_pixels.c */; };
- 04BD03A712E6671800899322 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF6612E6671800899322 /* SDL_pixels_c.h */; };
- 04BD03A812E6671800899322 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6712E6671800899322 /* SDL_rect.c */; };
- 04BD03B012E6671800899322 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6F12E6671800899322 /* SDL_RLEaccel.c */; };
- 04BD03B112E6671800899322 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7012E6671800899322 /* SDL_RLEaccel_c.h */; };
- 04BD03B212E6671800899322 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7112E6671800899322 /* SDL_shape.c */; };
- 04BD03B312E6671800899322 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7212E6671800899322 /* SDL_shape_internals.h */; };
- 04BD03B412E6671800899322 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7312E6671800899322 /* SDL_stretch.c */; };
- 04BD03B512E6671800899322 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7412E6671800899322 /* SDL_surface.c */; };
- 04BD03B612E6671800899322 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7512E6671800899322 /* SDL_sysvideo.h */; };
- 04BD03B712E6671800899322 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7612E6671800899322 /* SDL_video.c */; };
- 04BD03F312E6671800899322 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFB812E6671800899322 /* imKStoUCS.c */; };
- 04BD03F412E6671800899322 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFB912E6671800899322 /* imKStoUCS.h */; };
- 04BD03F512E6671800899322 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBA12E6671800899322 /* SDL_x11clipboard.c */; };
- 04BD03F612E6671800899322 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBB12E6671800899322 /* SDL_x11clipboard.h */; };
- 04BD03F712E6671800899322 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBC12E6671800899322 /* SDL_x11dyn.c */; };
- 04BD03F812E6671800899322 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBD12E6671800899322 /* SDL_x11dyn.h */; };
- 04BD03F912E6671800899322 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBE12E6671800899322 /* SDL_x11events.c */; };
- 04BD03FA12E6671800899322 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBF12E6671800899322 /* SDL_x11events.h */; };
- 04BD03FD12E6671800899322 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC212E6671800899322 /* SDL_x11keyboard.c */; };
- 04BD03FE12E6671800899322 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC312E6671800899322 /* SDL_x11keyboard.h */; };
- 04BD03FF12E6671800899322 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC412E6671800899322 /* SDL_x11modes.c */; };
- 04BD040012E6671800899322 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC512E6671800899322 /* SDL_x11modes.h */; };
- 04BD040112E6671800899322 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC612E6671800899322 /* SDL_x11mouse.c */; };
- 04BD040212E6671800899322 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC712E6671800899322 /* SDL_x11mouse.h */; };
- 04BD040312E6671800899322 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC812E6671800899322 /* SDL_x11opengl.c */; };
- 04BD040412E6671800899322 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC912E6671800899322 /* SDL_x11opengl.h */; };
- 04BD040512E6671800899322 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCA12E6671800899322 /* SDL_x11opengles.c */; };
- 04BD040612E6671800899322 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCB12E6671800899322 /* SDL_x11opengles.h */; };
- 04BD040912E6671800899322 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCE12E6671800899322 /* SDL_x11shape.c */; };
- 04BD040A12E6671800899322 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCF12E6671800899322 /* SDL_x11shape.h */; };
- 04BD040B12E6671800899322 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD012E6671800899322 /* SDL_x11sym.h */; };
- 04BD040C12E6671800899322 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD112E6671800899322 /* SDL_x11touch.c */; };
- 04BD040D12E6671800899322 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD212E6671800899322 /* SDL_x11touch.h */; };
- 04BD040E12E6671800899322 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD312E6671800899322 /* SDL_x11video.c */; };
- 04BD040F12E6671800899322 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD412E6671800899322 /* SDL_x11video.h */; };
- 04BD041012E6671800899322 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD512E6671800899322 /* SDL_x11window.c */; };
- 04BD041112E6671800899322 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD612E6671800899322 /* SDL_x11window.h */; };
- 04BDFFFB12E6671800899322 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7412E6671700899322 /* SDL_atomic.c */; };
- 04BDFFFC12E6671800899322 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7512E6671700899322 /* SDL_spinlock.c */; };
- 04F7803912FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */; };
- 04F7803A12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */; };
- 04F7803B12FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */; };
- 04F7803C12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */; };
- 04F7804912FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */; };
- 04F7804A12FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */; };
- 04F7804B12FB74A200FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */; };
- 04F7804C12FB74A200FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804012FB74A200FC43C0 /* SDL_blendline.h */; };
- 04F7804D12FB74A200FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */; };
- 04F7804E12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */; };
- 04F7804F12FB74A200FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804312FB74A200FC43C0 /* SDL_draw.h */; };
- 04F7805012FB74A200FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804412FB74A200FC43C0 /* SDL_drawline.c */; };
- 04F7805112FB74A200FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804512FB74A200FC43C0 /* SDL_drawline.h */; };
- 04F7805212FB74A200FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */; };
- 04F7805312FB74A200FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */; };
- 04F7805512FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */; };
- 04F7805612FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */; };
- 04F7805712FB74A200FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */; };
- 04F7805812FB74A200FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804012FB74A200FC43C0 /* SDL_blendline.h */; };
- 04F7805912FB74A200FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */; };
- 04F7805A12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */; };
- 04F7805B12FB74A200FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804312FB74A200FC43C0 /* SDL_draw.h */; };
- 04F7805C12FB74A200FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804412FB74A200FC43C0 /* SDL_drawline.c */; };
- 04F7805D12FB74A200FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804512FB74A200FC43C0 /* SDL_drawline.h */; };
- 04F7805E12FB74A200FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */; };
- 04F7805F12FB74A200FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */; };
- 4D16644E1EDD6023003DE88E /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */; };
- 4D16644F1EDD6023003DE88E /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D16644D1EDD6023003DE88E /* SDL_vulkan_utils.c */; };
- 4D1664531EDD60AD003DE88E /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664501EDD60AD003DE88E /* SDL_cocoametalview.m */; };
- 4D1664541EDD60AD003DE88E /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */; };
- 4D1664551EDD60AD003DE88E /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664521EDD60AD003DE88E /* SDL_cocoavulkan.m */; };
- 4D1664561EDD61DA003DE88E /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D16644D1EDD6023003DE88E /* SDL_vulkan_utils.c */; };
- 4D1664571EDD61F0003DE88E /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664501EDD60AD003DE88E /* SDL_cocoametalview.m */; };
- 4D1664581EDD61F0003DE88E /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664521EDD60AD003DE88E /* SDL_cocoavulkan.m */; };
- 4D1664591EDD621B003DE88E /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D16644D1EDD6023003DE88E /* SDL_vulkan_utils.c */; };
- 4D16645A1EDD6235003DE88E /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664501EDD60AD003DE88E /* SDL_cocoametalview.m */; };
- 4D16645B1EDD6235003DE88E /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D1664521EDD60AD003DE88E /* SDL_cocoavulkan.m */; };
- 4D7517291EE2562B00820EEA /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D7517281EE2562B00820EEA /* SDL_cocoametalview.h */; };
- 56115BBB1DF72C6D00F47E1E /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 56115BB91DF72C6D00F47E1E /* SDL_dataqueue.c */; };
- 56115BBC1DF72C6D00F47E1E /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 56115BBA1DF72C6D00F47E1E /* SDL_dataqueue.h */; };
- 562C4AE91D8F496200AF9EBE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; };
562C4AEA1D8F496300AF9EBE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; };
- 562D3C7C1D8F4933003FEEE6 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA34C61D8B5DB100915323 /* SDL_coreaudio.m */; };
- 562D3C7D1D8F4933003FEEE6 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA34C61D8B5DB100915323 /* SDL_coreaudio.m */; };
564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
564624381FF821DA0074AC87 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
- 564624391FF821EF0074AC87 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
- 5646243A1FF821FF0074AC87 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
5646243B1FF822100074AC87 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
5646243C1FF822170074AC87 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
- 566CDE8F148F0AC200C5A9BB /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 566CDE8D148F0AC200C5A9BB /* SDL_dropevents_c.h */; };
- 566CDE90148F0AC200C5A9BB /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */; };
- 567E2F1C17C44BB2005F1892 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */; };
567E2F2117C44C35005F1892 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 56A670091856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; };
- 56A6700A1856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; };
- 56A6700B1856545C0007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A670081856545C0007D20F /* SDL_internal.h */; };
- 56A67021185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; };
- 56A67022185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; };
- 56A67023185654B40007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */; };
- 56A67024185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; };
- 56A67025185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; };
- 56A67026185654B40007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6701E185654B40007D20F /* SDL_dynapi.c */; };
- 56A67027185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; };
- 56A67028185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; };
- 56A67029185654B40007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6701F185654B40007D20F /* SDL_dynapi.h */; };
- 56A6702A185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; };
- 56A6702B185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; };
- 56A6702C185654B40007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */; };
- 56C5237E1D8F4985001F2F30 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
56C5237F1D8F4985001F2F30 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
- 56C523801D8F498B001F2F30 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
56C523811D8F498C001F2F30 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
- 56F9D55C1DF73B6B00C15B5D /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 56115BB91DF72C6D00F47E1E /* SDL_dataqueue.c */; };
- 56F9D55D1DF73B6C00C15B5D /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 56115BB91DF72C6D00F47E1E /* SDL_dataqueue.c */; };
- 56F9D55E1DF73B7C00C15B5D /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 56115BBA1DF72C6D00F47E1E /* SDL_dataqueue.h */; };
- 56F9D55F1DF73B7D00C15B5D /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 56115BBA1DF72C6D00F47E1E /* SDL_dataqueue.h */; };
- 5C2EF69F1FC987C6003F5197 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69B1FC987C6003F5197 /* SDL_gles2funcs.h */; };
- 5C2EF6A01FC987C6003F5197 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69C1FC987C6003F5197 /* SDL_render_gles2.c */; };
- 5C2EF6A11FC987C6003F5197 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69D1FC987C6003F5197 /* SDL_shaders_gles2.h */; };
- 5C2EF6A21FC987C6003F5197 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69E1FC987C6003F5197 /* SDL_shaders_gles2.c */; };
- 5C2EF6A31FC98B38003F5197 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F131FB0209C00FED37F /* SDL_yuv.c */; };
- 5C2EF6A41FC98B39003F5197 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F131FB0209C00FED37F /* SDL_yuv.c */; };
- 5C2EF6A51FC98B6B003F5197 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F101FB0206300FED37F /* yuv_rgb.c */; };
- 5C2EF6A61FC98B6C003F5197 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F101FB0206300FED37F /* yuv_rgb.c */; };
- 5C2EF6A71FC98D2D003F5197 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69B1FC987C6003F5197 /* SDL_gles2funcs.h */; };
- 5C2EF6A81FC98D2D003F5197 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69C1FC987C6003F5197 /* SDL_render_gles2.c */; };
- 5C2EF6A91FC98D2D003F5197 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69E1FC987C6003F5197 /* SDL_shaders_gles2.c */; };
- 5C2EF6AA1FC98D2D003F5197 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69D1FC987C6003F5197 /* SDL_shaders_gles2.h */; };
- 5C2EF6AB1FC98D2E003F5197 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69B1FC987C6003F5197 /* SDL_gles2funcs.h */; };
- 5C2EF6AC1FC98D2E003F5197 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69C1FC987C6003F5197 /* SDL_render_gles2.c */; };
- 5C2EF6AD1FC98D2E003F5197 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF69E1FC987C6003F5197 /* SDL_shaders_gles2.c */; };
- 5C2EF6AE1FC98D2E003F5197 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF69D1FC987C6003F5197 /* SDL_shaders_gles2.h */; };
- 5C2EF6EE1FC9D0ED003F5197 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6EC1FC9D0EC003F5197 /* SDL_cocoaopengles.m */; };
- 5C2EF6EF1FC9D0ED003F5197 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6ED1FC9D0ED003F5197 /* SDL_cocoaopengles.h */; };
- 5C2EF6F01FC9D181003F5197 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6ED1FC9D0ED003F5197 /* SDL_cocoaopengles.h */; };
- 5C2EF6F11FC9D181003F5197 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6EC1FC9D0EC003F5197 /* SDL_cocoaopengles.m */; };
- 5C2EF6F21FC9D182003F5197 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6ED1FC9D0ED003F5197 /* SDL_cocoaopengles.h */; };
- 5C2EF6F31FC9D182003F5197 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6EC1FC9D0EC003F5197 /* SDL_cocoaopengles.m */; };
- 5C2EF6F71FC9EE35003F5197 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F41FC9EE34003F5197 /* SDL_rect_c.h */; };
- 5C2EF6F81FC9EE35003F5197 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6F51FC9EE35003F5197 /* SDL_egl.c */; };
- 5C2EF6F91FC9EE35003F5197 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F61FC9EE35003F5197 /* SDL_egl_c.h */; };
- 5C2EF6FA1FC9EE64003F5197 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F61FC9EE35003F5197 /* SDL_egl_c.h */; };
- 5C2EF6FB1FC9EE64003F5197 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6F51FC9EE35003F5197 /* SDL_egl.c */; };
- 5C2EF6FC1FC9EE64003F5197 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F41FC9EE34003F5197 /* SDL_rect_c.h */; };
- 5C2EF6FD1FC9EE65003F5197 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F61FC9EE35003F5197 /* SDL_egl_c.h */; };
- 5C2EF6FE1FC9EE65003F5197 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C2EF6F51FC9EE35003F5197 /* SDL_egl.c */; };
- 5C2EF6FF1FC9EE65003F5197 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF6F41FC9EE34003F5197 /* SDL_rect_c.h */; };
5C2EF7011FC9EF10003F5197 /* SDL_egl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF7001FC9EF0F003F5197 /* SDL_egl.h */; };
- A704170920F09A9800A82227 /* hid.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170820F09A9800A82227 /* hid.c */; };
- A704170A20F09A9800A82227 /* hid.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170820F09A9800A82227 /* hid.c */; };
- A704170B20F09A9800A82227 /* hid.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170820F09A9800A82227 /* hid.c */; };
- A704171420F09AC900A82227 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170D20F09AC800A82227 /* SDL_hidapijoystick.c */; };
- A704171520F09AC900A82227 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170D20F09AC800A82227 /* SDL_hidapijoystick.c */; };
- A704171620F09AC900A82227 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170D20F09AC800A82227 /* SDL_hidapijoystick.c */; };
- A704171720F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A704170E20F09AC800A82227 /* SDL_hidapijoystick_c.h */; };
- A704171820F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A704170E20F09AC800A82227 /* SDL_hidapijoystick_c.h */; };
- A704171920F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A704170E20F09AC800A82227 /* SDL_hidapijoystick_c.h */; };
- A704171A20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170F20F09AC800A82227 /* SDL_hidapi_switch.c */; };
- A704171B20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170F20F09AC800A82227 /* SDL_hidapi_switch.c */; };
- A704171C20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A704170F20F09AC800A82227 /* SDL_hidapi_switch.c */; };
- A704172020F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171120F09AC900A82227 /* SDL_hidapi_ps4.c */; };
- A704172120F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171120F09AC900A82227 /* SDL_hidapi_ps4.c */; };
- A704172220F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171120F09AC900A82227 /* SDL_hidapi_ps4.c */; };
- A704172320F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171220F09AC900A82227 /* SDL_hidapi_xboxone.c */; };
- A704172420F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171220F09AC900A82227 /* SDL_hidapi_xboxone.c */; };
- A704172520F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171220F09AC900A82227 /* SDL_hidapi_xboxone.c */; };
- A704172620F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171320F09AC900A82227 /* SDL_hidapi_xbox360.c */; };
- A704172720F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171320F09AC900A82227 /* SDL_hidapi_xbox360.c */; };
- A704172820F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A704171320F09AC900A82227 /* SDL_hidapi_xbox360.c */; };
A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; };
+ A75FCCFD23E25AB700529352 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A75FCCFE23E25AB700529352 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0023E25AB700529352 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0123E25AB700529352 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A75FCD0223E25AB700529352 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0323E25AB700529352 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0423E25AB700529352 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A75FCD0523E25AB700529352 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0623E25AB700529352 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A75FCD0723E25AB700529352 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A75FCD0823E25AB700529352 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0923E25AB700529352 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A75FCD0A23E25AB700529352 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A75FCD0B23E25AB700529352 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A75FCD0C23E25AB700529352 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A75FCD0D23E25AB700529352 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A75FCD0E23E25AB700529352 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD0F23E25AB700529352 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A75FCD1023E25AB700529352 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A75FCD1123E25AB700529352 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD1223E25AB700529352 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A75FCD1323E25AB700529352 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A75FCD1423E25AB700529352 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD1523E25AB700529352 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A75FCD1623E25AB700529352 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A75FCD1723E25AB700529352 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD1823E25AB700529352 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A75FCD1923E25AB700529352 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A75FCD1A23E25AB700529352 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A75FCD1B23E25AB700529352 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD1C23E25AB700529352 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A75FCD1D23E25AB700529352 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A75FCD1F23E25AB700529352 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A75FCD2023E25AB700529352 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2123E25AB700529352 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A75FCD2223E25AB700529352 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A75FCD2323E25AB700529352 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A75FCD2423E25AB700529352 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A75FCD2523E25AB700529352 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A75FCD2623E25AB700529352 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A75FCD2723E25AB700529352 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A75FCD2823E25AB700529352 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2923E25AB700529352 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2A23E25AB700529352 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2B23E25AB700529352 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2C23E25AB700529352 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A75FCD2D23E25AB700529352 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD2E23E25AB700529352 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A75FCD3023E25AB700529352 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A75FCD3123E25AB700529352 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A75FCD3223E25AB700529352 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A75FCD3323E25AB700529352 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A75FCD3423E25AB700529352 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A75FCD3523E25AB700529352 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD3623E25AB700529352 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A75FCD3723E25AB700529352 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD3823E25AB700529352 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A75FCD3923E25AB700529352 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A75FCD3A23E25AB700529352 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A75FCD3B23E25AB700529352 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A75FCD3C23E25AB700529352 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD3D23E25AB700529352 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A75FCD3E23E25AB700529352 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A75FCD3F23E25AB700529352 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A75FCD4023E25AB700529352 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A75FCD4123E25AB700529352 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD4223E25AB700529352 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A75FCD4323E25AB700529352 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD4423E25AB700529352 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A75FCD4523E25AB700529352 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A75FCD4623E25AB700529352 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A75FCD4723E25AB700529352 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A75FCD4823E25AB700529352 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD4923E25AB700529352 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A75FCD4A23E25AB700529352 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A75FCD4B23E25AB700529352 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A75FCD4C23E25AB700529352 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A75FCD4D23E25AB700529352 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A75FCD4E23E25AB700529352 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A75FCD4F23E25AB700529352 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD5023E25AB700529352 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A75FCD5123E25AB700529352 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A75FCD5223E25AB700529352 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A75FCD5323E25AB700529352 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A75FCD5423E25AB700529352 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A75FCD5523E25AB700529352 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A75FCD5623E25AB700529352 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A75FCD5723E25AB700529352 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A75FCD5823E25AB700529352 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A75FCD5923E25AB700529352 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A75FCD5A23E25AB700529352 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD5B23E25AB700529352 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A75FCD5C23E25AB700529352 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A75FCD5D23E25AB700529352 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A75FCD5E23E25AB700529352 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A75FCD5F23E25AB700529352 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A75FCD6023E25AB700529352 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A75FCD6123E25AB700529352 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A75FCD6223E25AB700529352 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A75FCD6323E25AB700529352 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A75FCD6423E25AB700529352 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD6523E25AB700529352 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A75FCD6623E25AB700529352 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD6723E25AB700529352 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A75FCD6823E25AB700529352 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A75FCD6923E25AB700529352 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A75FCD6A23E25AB700529352 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A75FCD6B23E25AB700529352 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A75FCD6C23E25AB700529352 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A75FCD6D23E25AB700529352 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A75FCD6E23E25AB700529352 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A75FCD6F23E25AB700529352 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A75FCD7023E25AB700529352 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD7123E25AB700529352 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD7223E25AB700529352 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD7323E25AB700529352 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A75FCD7423E25AB700529352 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A75FCD7523E25AB700529352 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A75FCD7623E25AB700529352 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A75FCD7723E25AB700529352 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD7823E25AB700529352 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A75FCD7923E25AB700529352 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A75FCD7A23E25AB700529352 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A75FCD7C23E25AB700529352 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A75FCD7D23E25AB700529352 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD7E23E25AB700529352 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A75FCD7F23E25AB700529352 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD8023E25AB700529352 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A75FCD8123E25AB700529352 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD8223E25AB700529352 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A75FCD8323E25AB700529352 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A75FCD8423E25AB700529352 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A75FCD8523E25AB700529352 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A75FCD8623E25AB700529352 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A75FCD8723E25AB700529352 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A75FCD8823E25AB700529352 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A75FCD8923E25AB700529352 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A75FCD8A23E25AB700529352 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A75FCD8B23E25AB700529352 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A75FCD8C23E25AB700529352 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A75FCD8D23E25AB700529352 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A75FCD8E23E25AB700529352 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD8F23E25AB700529352 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A75FCD9023E25AB700529352 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A75FCD9123E25AB700529352 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A75FCD9223E25AB700529352 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A75FCD9323E25AB700529352 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A75FCD9423E25AB700529352 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A75FCD9523E25AB700529352 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A75FCD9623E25AB700529352 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A75FCD9723E25AB700529352 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A75FCD9823E25AB700529352 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A75FCD9923E25AB700529352 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD9A23E25AB700529352 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCD9B23E25AB700529352 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A75FCD9D23E25AB700529352 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A75FCD9E23E25AB700529352 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A75FCD9F23E25AB700529352 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A75FCDA023E25AB700529352 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A75FCDA123E25AB700529352 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A75FCDA223E25AB700529352 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A75FCDA323E25AB700529352 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A75FCDA423E25AB700529352 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A75FCDA523E25AB700529352 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDA623E25AB700529352 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A75FCDA723E25AB700529352 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A75FCDA823E25AB700529352 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDA923E25AB700529352 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDAA23E25AB700529352 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A75FCDAB23E25AB700529352 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A75FCDAC23E25AB700529352 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A75FCDAD23E25AB700529352 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A75FCDAE23E25AB700529352 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A75FCDAF23E25AB700529352 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDB023E25AB700529352 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A75FCDB123E25AB700529352 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDB223E25AB700529352 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDB323E25AB700529352 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A75FCDB423E25AB700529352 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A75FCDB523E25AB700529352 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A75FCDB623E25AB700529352 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A75FCDB723E25AB700529352 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A75FCDB823E25AB700529352 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A75FCDBA23E25AB700529352 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A75FCDBB23E25AB700529352 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A75FCDBC23E25AB700529352 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A75FCDBD23E25AB700529352 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A75FCDBE23E25AB700529352 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A75FCDBF23E25AB700529352 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A75FCDC023E25AB700529352 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A75FCDC123E25AB700529352 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A75FCDC223E25AB700529352 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A75FCDC323E25AB700529352 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A75FCDC423E25AB700529352 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDC523E25AB700529352 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDC623E25AB700529352 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDC723E25AB700529352 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A75FCDC823E25AB700529352 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A75FCDC923E25AB700529352 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDCA23E25AB700529352 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDCB23E25AB700529352 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDCC23E25AB700529352 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A75FCDCD23E25AB700529352 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A75FCDCE23E25AB700529352 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A75FCDCF23E25AB700529352 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A75FCDD023E25AB700529352 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A75FCDD123E25AB700529352 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDD223E25AB700529352 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A75FCDD323E25AB700529352 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A75FCDD423E25AB700529352 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A75FCDD523E25AB700529352 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDD623E25AB700529352 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A75FCDD723E25AB700529352 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A75FCDD823E25AB700529352 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDD923E25AB700529352 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDDA23E25AB700529352 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A75FCDDB23E25AB700529352 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A75FCDDC23E25AB700529352 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A75FCDDD23E25AB700529352 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDDE23E25AB700529352 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDDF23E25AB700529352 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDE023E25AB700529352 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDE123E25AB700529352 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A75FCDE223E25AB700529352 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDE323E25AB700529352 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCDE423E25AB700529352 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A75FCDE523E25AB700529352 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A75FCDE623E25AB700529352 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A75FCDE723E25AB700529352 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A75FCDE923E25AB700529352 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A75FCDEA23E25AB700529352 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A75FCDEB23E25AB700529352 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A75FCDEC23E25AB700529352 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A75FCDED23E25AB700529352 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A75FCDEE23E25AB700529352 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A75FCDEF23E25AB700529352 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A75FCDF023E25AB700529352 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A75FCDF123E25AB700529352 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A75FCDF223E25AB700529352 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A75FCDF323E25AB700529352 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A75FCDF423E25AB700529352 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A75FCDF523E25AB700529352 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A75FCDF623E25AB700529352 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A75FCDF723E25AB700529352 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A75FCDF823E25AB700529352 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A75FCDF923E25AB700529352 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A75FCDFA23E25AB700529352 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A75FCDFB23E25AB700529352 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A75FCDFC23E25AB700529352 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A75FCDFD23E25AB700529352 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A75FCDFE23E25AB700529352 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A75FCDFF23E25AB700529352 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A75FCE0023E25AB700529352 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A75FCE0123E25AB700529352 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A75FCE0223E25AB700529352 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A75FCE0323E25AB700529352 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A75FCE0423E25AB700529352 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A75FCE0523E25AB700529352 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A75FCE0623E25AB700529352 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A75FCE0723E25AB700529352 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A75FCE0823E25AB700529352 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A75FCE0923E25AB700529352 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A75FCE0A23E25AB700529352 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A75FCE0B23E25AB700529352 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A75FCE0C23E25AB700529352 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A75FCE0D23E25AB700529352 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A75FCE0E23E25AB700529352 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A75FCE0F23E25AB700529352 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A75FCE1023E25AB700529352 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A75FCE1123E25AB700529352 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A75FCE1223E25AB700529352 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A75FCE1323E25AB700529352 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A75FCE1423E25AB700529352 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A75FCE1523E25AB700529352 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A75FCE1623E25AB700529352 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A75FCE1723E25AB700529352 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A75FCE1823E25AB700529352 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A75FCE1923E25AB700529352 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A75FCE1A23E25AB700529352 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A75FCE1B23E25AB700529352 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A75FCE1C23E25AB700529352 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A75FCE1D23E25AB700529352 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A75FCE1E23E25AB700529352 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A75FCE1F23E25AB700529352 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A75FCE2023E25AB700529352 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A75FCE2123E25AB700529352 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A75FCE2223E25AB700529352 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A75FCE2323E25AB700529352 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A75FCE2423E25AB700529352 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A75FCE2523E25AB700529352 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A75FCE2623E25AB700529352 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A75FCE2723E25AB700529352 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A75FCE2823E25AB700529352 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A75FCE2923E25AB700529352 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A75FCE2A23E25AB700529352 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A75FCE2B23E25AB700529352 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A75FCE2C23E25AB700529352 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A75FCE2D23E25AB700529352 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A75FCE2E23E25AB700529352 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A75FCE2F23E25AB700529352 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A75FCE3023E25AB700529352 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A75FCE3123E25AB700529352 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A75FCE3223E25AB700529352 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A75FCE3323E25AB700529352 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A75FCE3423E25AB700529352 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A75FCE3523E25AB700529352 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A75FCE3623E25AB700529352 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A75FCE3723E25AB700529352 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A75FCE3823E25AB700529352 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A75FCE3923E25AB700529352 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A75FCE3A23E25AB700529352 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A75FCE3B23E25AB700529352 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A75FCE3C23E25AB700529352 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A75FCE3D23E25AB700529352 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A75FCE3E23E25AB700529352 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A75FCE3F23E25AB700529352 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A75FCE4023E25AB700529352 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A75FCE4123E25AB700529352 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A75FCE4223E25AB700529352 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A75FCE4323E25AB700529352 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A75FCE4423E25AB700529352 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A75FCE4523E25AB700529352 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A75FCE4623E25AB700529352 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A75FCE4723E25AB700529352 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A75FCE4823E25AB700529352 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A75FCE4923E25AB700529352 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A75FCE4A23E25AB700529352 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A75FCE4B23E25AB700529352 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A75FCE4C23E25AB700529352 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A75FCE4D23E25AB700529352 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A75FCE4E23E25AB700529352 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A75FCE4F23E25AB700529352 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A75FCE5023E25AB700529352 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A75FCE5123E25AB700529352 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A75FCE5223E25AB700529352 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A75FCE5323E25AB700529352 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A75FCE5423E25AB700529352 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A75FCE5523E25AB700529352 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A75FCE5623E25AB700529352 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A75FCE5723E25AB700529352 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A75FCE5823E25AB700529352 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A75FCE5923E25AB700529352 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A75FCE5A23E25AB700529352 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A75FCE5C23E25AB700529352 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A75FCE5D23E25AB700529352 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A75FCE5E23E25AB700529352 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A75FCE5F23E25AB700529352 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A75FCE6023E25AB700529352 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A75FCE6123E25AB700529352 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A75FCE6223E25AB700529352 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A75FCE6323E25AB700529352 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A75FCE6423E25AB700529352 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A75FCE6523E25AB700529352 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A75FCE6623E25AB700529352 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A75FCE6723E25AB700529352 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A75FCE6823E25AB700529352 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A75FCE6923E25AB700529352 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A75FCE6A23E25AB700529352 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A75FCE6B23E25AB700529352 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A75FCE6C23E25AB700529352 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A75FCE6D23E25AB700529352 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A75FCE6E23E25AB700529352 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A75FCE6F23E25AB700529352 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A75FCE7023E25AB700529352 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A75FCE7123E25AB700529352 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A75FCE7223E25AB700529352 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A75FCE7323E25AB700529352 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A75FCE7523E25AB700529352 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A75FCE7623E25AB700529352 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A75FCE7723E25AB700529352 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A75FCE7823E25AB700529352 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A75FCE7923E25AB700529352 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A75FCE7A23E25AB700529352 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A75FCE7B23E25AB700529352 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A75FCE7C23E25AB700529352 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A75FCE7D23E25AB700529352 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A75FCE7E23E25AB700529352 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A75FCE7F23E25AB700529352 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A75FCE8023E25AB700529352 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A75FCE8123E25AB700529352 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A75FCE8223E25AB700529352 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A75FCE8323E25AB700529352 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A75FCE8423E25AB700529352 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A75FCE8523E25AB700529352 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A75FCE8623E25AB700529352 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A75FCE8723E25AB700529352 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A75FCE8823E25AB700529352 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A75FCE8923E25AB700529352 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A75FCE8A23E25AB700529352 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A75FCE8B23E25AB700529352 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A75FCE8C23E25AB700529352 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A75FCE8D23E25AB700529352 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A75FCE8E23E25AB700529352 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A75FCE8F23E25AB700529352 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A75FCE9023E25AB700529352 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A75FCE9123E25AB700529352 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A75FCE9223E25AB700529352 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A75FCE9323E25AB700529352 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A75FCE9423E25AB700529352 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A75FCE9523E25AB700529352 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A75FCE9623E25AB700529352 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A75FCE9723E25AB700529352 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A75FCE9823E25AB700529352 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A75FCE9923E25AB700529352 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A75FCE9A23E25AB700529352 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A75FCE9B23E25AB700529352 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A75FCE9C23E25AB700529352 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A75FCE9D23E25AB700529352 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A75FCE9F23E25AB700529352 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A75FCEA023E25AB700529352 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A75FCEA123E25AB700529352 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A75FCEA223E25AB700529352 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A75FCEA323E25AB700529352 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A75FCEA523E25AB700529352 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; };
+ A75FCEA623E25AB700529352 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; };
+ A75FCEA723E25AB700529352 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
+ A75FCEA823E25AB700529352 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
+ A75FCEAA23E25AB700529352 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
+ A75FCEAB23E25AB700529352 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
+ A75FCEAE23E25AB700529352 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E931D8B69C300B177DD /* AudioToolbox.framework */; };
+ A75FCEB623E25AC700529352 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A75FCEB723E25AC700529352 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEB923E25AC700529352 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEBA23E25AC700529352 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A75FCEBB23E25AC700529352 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEBC23E25AC700529352 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEBD23E25AC700529352 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A75FCEBE23E25AC700529352 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEBF23E25AC700529352 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A75FCEC023E25AC700529352 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A75FCEC123E25AC700529352 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEC223E25AC700529352 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A75FCEC323E25AC700529352 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A75FCEC423E25AC700529352 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A75FCEC523E25AC700529352 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A75FCEC623E25AC700529352 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A75FCEC723E25AC700529352 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEC823E25AC700529352 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A75FCEC923E25AC700529352 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A75FCECA23E25AC700529352 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCECB23E25AC700529352 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A75FCECC23E25AC700529352 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A75FCECD23E25AC700529352 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCECE23E25AC700529352 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A75FCECF23E25AC700529352 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A75FCED023E25AC700529352 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCED123E25AC700529352 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A75FCED223E25AC700529352 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A75FCED323E25AC700529352 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A75FCED423E25AC700529352 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCED523E25AC700529352 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A75FCED623E25AC700529352 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A75FCED823E25AC700529352 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A75FCED923E25AC700529352 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEDA23E25AC700529352 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A75FCEDB23E25AC700529352 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A75FCEDC23E25AC700529352 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A75FCEDD23E25AC700529352 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A75FCEDE23E25AC700529352 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A75FCEDF23E25AC700529352 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A75FCEE023E25AC700529352 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A75FCEE123E25AC700529352 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEE223E25AC700529352 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEE323E25AC700529352 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEE423E25AC700529352 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEE523E25AC700529352 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A75FCEE623E25AC700529352 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEE723E25AC700529352 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A75FCEE923E25AC700529352 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A75FCEEA23E25AC700529352 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A75FCEEB23E25AC700529352 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A75FCEEC23E25AC700529352 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A75FCEED23E25AC700529352 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A75FCEEE23E25AC700529352 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEEF23E25AC700529352 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A75FCEF023E25AC700529352 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEF123E25AC700529352 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A75FCEF223E25AC700529352 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A75FCEF323E25AC700529352 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A75FCEF423E25AC700529352 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A75FCEF523E25AC700529352 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEF623E25AC700529352 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A75FCEF723E25AC700529352 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A75FCEF823E25AC700529352 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A75FCEF923E25AC700529352 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A75FCEFA23E25AC700529352 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEFB23E25AC700529352 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A75FCEFC23E25AC700529352 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCEFD23E25AC700529352 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A75FCEFE23E25AC700529352 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A75FCEFF23E25AC700529352 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A75FCF0023E25AC700529352 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A75FCF0123E25AC700529352 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF0223E25AC700529352 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A75FCF0323E25AC700529352 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A75FCF0423E25AC700529352 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A75FCF0523E25AC700529352 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A75FCF0623E25AC700529352 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A75FCF0723E25AC700529352 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A75FCF0823E25AC700529352 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF0923E25AC700529352 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A75FCF0A23E25AC700529352 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A75FCF0B23E25AC700529352 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A75FCF0C23E25AC700529352 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A75FCF0D23E25AC700529352 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A75FCF0E23E25AC700529352 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A75FCF0F23E25AC700529352 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A75FCF1023E25AC700529352 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A75FCF1123E25AC700529352 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A75FCF1223E25AC700529352 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A75FCF1323E25AC700529352 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF1423E25AC700529352 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A75FCF1523E25AC700529352 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A75FCF1623E25AC700529352 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A75FCF1723E25AC700529352 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A75FCF1823E25AC700529352 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A75FCF1923E25AC700529352 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A75FCF1A23E25AC700529352 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A75FCF1B23E25AC700529352 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A75FCF1C23E25AC700529352 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A75FCF1D23E25AC700529352 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF1E23E25AC700529352 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A75FCF1F23E25AC700529352 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF2023E25AC700529352 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A75FCF2123E25AC700529352 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A75FCF2223E25AC700529352 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A75FCF2323E25AC700529352 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A75FCF2423E25AC700529352 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A75FCF2523E25AC700529352 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A75FCF2623E25AC700529352 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A75FCF2723E25AC700529352 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A75FCF2823E25AC700529352 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A75FCF2923E25AC700529352 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF2A23E25AC700529352 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF2B23E25AC700529352 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF2C23E25AC700529352 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A75FCF2D23E25AC700529352 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A75FCF2E23E25AC700529352 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A75FCF2F23E25AC700529352 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A75FCF3023E25AC700529352 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF3123E25AC700529352 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A75FCF3223E25AC700529352 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A75FCF3323E25AC700529352 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A75FCF3523E25AC700529352 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A75FCF3623E25AC700529352 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF3723E25AC700529352 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A75FCF3823E25AC700529352 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF3923E25AC700529352 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A75FCF3A23E25AC700529352 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF3B23E25AC700529352 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A75FCF3C23E25AC700529352 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A75FCF3D23E25AC700529352 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A75FCF3E23E25AC700529352 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A75FCF3F23E25AC700529352 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A75FCF4023E25AC700529352 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A75FCF4123E25AC700529352 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A75FCF4223E25AC700529352 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A75FCF4323E25AC700529352 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A75FCF4423E25AC700529352 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A75FCF4523E25AC700529352 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A75FCF4623E25AC700529352 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A75FCF4723E25AC700529352 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF4823E25AC700529352 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A75FCF4923E25AC700529352 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A75FCF4A23E25AC700529352 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A75FCF4B23E25AC700529352 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A75FCF4C23E25AC700529352 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A75FCF4D23E25AC700529352 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A75FCF4E23E25AC700529352 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A75FCF4F23E25AC700529352 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A75FCF5023E25AC700529352 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A75FCF5123E25AC700529352 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A75FCF5223E25AC700529352 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF5323E25AC700529352 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF5423E25AC700529352 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A75FCF5623E25AC700529352 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A75FCF5723E25AC700529352 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A75FCF5823E25AC700529352 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A75FCF5923E25AC700529352 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A75FCF5A23E25AC700529352 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A75FCF5B23E25AC700529352 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A75FCF5C23E25AC700529352 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A75FCF5D23E25AC700529352 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A75FCF5E23E25AC700529352 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF5F23E25AC700529352 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A75FCF6023E25AC700529352 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A75FCF6123E25AC700529352 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF6223E25AC700529352 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF6323E25AC700529352 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A75FCF6423E25AC700529352 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A75FCF6523E25AC700529352 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A75FCF6623E25AC700529352 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A75FCF6723E25AC700529352 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A75FCF6823E25AC700529352 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF6923E25AC700529352 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A75FCF6A23E25AC700529352 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF6B23E25AC700529352 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF6C23E25AC700529352 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A75FCF6D23E25AC700529352 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A75FCF6E23E25AC700529352 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A75FCF6F23E25AC700529352 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A75FCF7023E25AC700529352 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A75FCF7123E25AC700529352 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A75FCF7323E25AC700529352 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A75FCF7423E25AC700529352 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A75FCF7523E25AC700529352 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A75FCF7623E25AC700529352 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A75FCF7723E25AC700529352 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A75FCF7823E25AC700529352 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A75FCF7923E25AC700529352 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A75FCF7A23E25AC700529352 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A75FCF7B23E25AC700529352 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A75FCF7C23E25AC700529352 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A75FCF7D23E25AC700529352 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF7E23E25AC700529352 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF7F23E25AC700529352 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8023E25AC700529352 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A75FCF8123E25AC700529352 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A75FCF8223E25AC700529352 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8323E25AC700529352 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8423E25AC700529352 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8523E25AC700529352 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A75FCF8623E25AC700529352 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A75FCF8723E25AC700529352 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A75FCF8823E25AC700529352 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A75FCF8923E25AC700529352 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A75FCF8A23E25AC700529352 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8B23E25AC700529352 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A75FCF8C23E25AC700529352 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A75FCF8D23E25AC700529352 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A75FCF8E23E25AC700529352 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF8F23E25AC700529352 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A75FCF9023E25AC700529352 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A75FCF9123E25AC700529352 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9223E25AC700529352 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9323E25AC700529352 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A75FCF9423E25AC700529352 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A75FCF9523E25AC700529352 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A75FCF9623E25AC700529352 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9723E25AC700529352 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9823E25AC700529352 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9923E25AC700529352 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9A23E25AC700529352 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A75FCF9B23E25AC700529352 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9C23E25AC700529352 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FCF9D23E25AC700529352 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A75FCF9E23E25AC700529352 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A75FCF9F23E25AC700529352 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A75FCFA023E25AC700529352 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A75FCFA223E25AC700529352 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A75FCFA323E25AC700529352 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A75FCFA423E25AC700529352 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A75FCFA523E25AC700529352 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A75FCFA623E25AC700529352 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A75FCFA723E25AC700529352 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A75FCFA823E25AC700529352 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A75FCFA923E25AC700529352 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A75FCFAA23E25AC700529352 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A75FCFAB23E25AC700529352 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A75FCFAC23E25AC700529352 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A75FCFAD23E25AC700529352 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A75FCFAE23E25AC700529352 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A75FCFAF23E25AC700529352 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A75FCFB023E25AC700529352 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A75FCFB123E25AC700529352 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A75FCFB223E25AC700529352 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A75FCFB323E25AC700529352 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A75FCFB423E25AC700529352 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A75FCFB523E25AC700529352 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A75FCFB623E25AC700529352 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A75FCFB723E25AC700529352 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A75FCFB823E25AC700529352 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A75FCFB923E25AC700529352 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A75FCFBA23E25AC700529352 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A75FCFBB23E25AC700529352 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A75FCFBC23E25AC700529352 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A75FCFBD23E25AC700529352 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A75FCFBE23E25AC700529352 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A75FCFBF23E25AC700529352 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A75FCFC023E25AC700529352 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A75FCFC123E25AC700529352 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A75FCFC223E25AC700529352 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A75FCFC323E25AC700529352 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A75FCFC423E25AC700529352 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A75FCFC523E25AC700529352 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A75FCFC623E25AC700529352 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A75FCFC723E25AC700529352 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A75FCFC823E25AC700529352 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A75FCFC923E25AC700529352 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A75FCFCA23E25AC700529352 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A75FCFCB23E25AC700529352 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A75FCFCC23E25AC700529352 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A75FCFCD23E25AC700529352 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A75FCFCE23E25AC700529352 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A75FCFCF23E25AC700529352 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A75FCFD023E25AC700529352 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A75FCFD123E25AC700529352 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A75FCFD223E25AC700529352 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A75FCFD323E25AC700529352 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A75FCFD423E25AC700529352 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A75FCFD523E25AC700529352 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A75FCFD623E25AC700529352 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A75FCFD723E25AC700529352 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A75FCFD823E25AC700529352 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A75FCFD923E25AC700529352 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A75FCFDA23E25AC700529352 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A75FCFDB23E25AC700529352 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A75FCFDC23E25AC700529352 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A75FCFDD23E25AC700529352 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A75FCFDE23E25AC700529352 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A75FCFDF23E25AC700529352 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A75FCFE023E25AC700529352 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A75FCFE123E25AC700529352 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A75FCFE223E25AC700529352 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A75FCFE323E25AC700529352 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A75FCFE423E25AC700529352 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A75FCFE523E25AC700529352 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A75FCFE623E25AC700529352 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A75FCFE723E25AC700529352 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A75FCFE823E25AC700529352 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A75FCFE923E25AC700529352 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A75FCFEA23E25AC700529352 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A75FCFEB23E25AC700529352 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A75FCFEC23E25AC700529352 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A75FCFED23E25AC700529352 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A75FCFEE23E25AC700529352 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A75FCFEF23E25AC700529352 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A75FCFF023E25AC700529352 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A75FCFF123E25AC700529352 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A75FCFF223E25AC700529352 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A75FCFF323E25AC700529352 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A75FCFF423E25AC700529352 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A75FCFF523E25AC700529352 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A75FCFF623E25AC700529352 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A75FCFF723E25AC700529352 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A75FCFF823E25AC700529352 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A75FCFF923E25AC700529352 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A75FCFFA23E25AC700529352 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A75FCFFB23E25AC700529352 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A75FCFFC23E25AC700529352 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A75FCFFD23E25AC700529352 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A75FCFFE23E25AC700529352 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A75FCFFF23E25AC700529352 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A75FD00023E25AC700529352 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A75FD00123E25AC700529352 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A75FD00223E25AC700529352 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A75FD00323E25AC700529352 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A75FD00423E25AC700529352 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A75FD00523E25AC700529352 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A75FD00623E25AC700529352 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A75FD00723E25AC700529352 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A75FD00823E25AC700529352 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A75FD00923E25AC700529352 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A75FD00A23E25AC700529352 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A75FD00B23E25AC700529352 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A75FD00C23E25AC700529352 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A75FD00D23E25AC700529352 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A75FD00E23E25AC700529352 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A75FD00F23E25AC700529352 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A75FD01023E25AC700529352 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A75FD01123E25AC700529352 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A75FD01223E25AC700529352 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A75FD01323E25AC700529352 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A75FD01523E25AC700529352 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A75FD01623E25AC700529352 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A75FD01723E25AC700529352 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A75FD01823E25AC700529352 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A75FD01923E25AC700529352 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A75FD01A23E25AC700529352 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A75FD01B23E25AC700529352 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A75FD01C23E25AC700529352 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A75FD01D23E25AC700529352 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A75FD01E23E25AC700529352 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A75FD01F23E25AC700529352 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A75FD02023E25AC700529352 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A75FD02123E25AC700529352 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A75FD02223E25AC700529352 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A75FD02323E25AC700529352 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A75FD02423E25AC700529352 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A75FD02523E25AC700529352 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A75FD02623E25AC700529352 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A75FD02723E25AC700529352 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A75FD02823E25AC700529352 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A75FD02923E25AC700529352 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A75FD02A23E25AC700529352 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A75FD02B23E25AC700529352 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A75FD02C23E25AC700529352 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A75FD02E23E25AC700529352 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A75FD02F23E25AC700529352 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A75FD03023E25AC700529352 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A75FD03123E25AC700529352 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A75FD03223E25AC700529352 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A75FD03323E25AC700529352 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A75FD03423E25AC700529352 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A75FD03523E25AC700529352 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A75FD03623E25AC700529352 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A75FD03723E25AC700529352 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A75FD03823E25AC700529352 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A75FD03923E25AC700529352 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A75FD03A23E25AC700529352 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A75FD03B23E25AC700529352 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A75FD03C23E25AC700529352 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A75FD03D23E25AC700529352 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A75FD03E23E25AC700529352 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A75FD03F23E25AC700529352 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A75FD04023E25AC700529352 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A75FD04123E25AC700529352 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A75FD04223E25AC700529352 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A75FD04323E25AC700529352 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A75FD04423E25AC700529352 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A75FD04523E25AC700529352 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A75FD04623E25AC700529352 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A75FD04723E25AC700529352 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A75FD04823E25AC700529352 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A75FD04923E25AC700529352 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A75FD04A23E25AC700529352 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A75FD04B23E25AC700529352 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A75FD04C23E25AC700529352 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A75FD04D23E25AC700529352 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A75FD04E23E25AC700529352 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A75FD04F23E25AC700529352 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A75FD05023E25AC700529352 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A75FD05123E25AC700529352 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A75FD05223E25AC700529352 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A75FD05323E25AC700529352 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A75FD05423E25AC700529352 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A75FD05523E25AC700529352 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A75FD05623E25AC700529352 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A75FD05823E25AC700529352 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A75FD05923E25AC700529352 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A75FD05A23E25AC700529352 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A75FD05B23E25AC700529352 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A75FD05C23E25AC700529352 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A75FDAAA23E2792500529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDAAB23E2792500529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDAAD23E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAAE23E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAAF23E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAB023E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAB123E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAB223E2795C00529352 /* SDL_hidapi_steam.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */; };
+ A75FDAB423E2797600529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAB323E2797600529352 /* CoreBluetooth.framework */; };
+ A75FDAB623E2799700529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAB523E2799700529352 /* CoreBluetooth.framework */; };
+ A75FDABA23E28A7A00529352 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAB923E28A7A00529352 /* AVFoundation.framework */; };
+ A75FDABB23E28B1D00529352 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBB23E24A2F00DCD162 /* UIKit.framework */; };
+ A75FDABC23E28B4000529352 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBF23E24A7700DCD162 /* OpenGLES.framework */; };
+ A75FDABE23E28B6200529352 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDABD23E28B6200529352 /* GameController.framework */; };
+ A75FDAC023E28B8000529352 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDABF23E28B8000529352 /* CoreMotion.framework */; };
+ A75FDAC223E28B9600529352 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC123E28B9600529352 /* CoreGraphics.framework */; };
+ A75FDAC423E28BA700529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
+ A75FDAC523E28BD800529352 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A75FDAC623E28BD900529352 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A75FDAC723E28BD900529352 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A75FDAC823E28BD900529352 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A75FDACA23E28D0200529352 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC923E28D0100529352 /* UIKit.framework */; };
+ A75FDACC23E28D0700529352 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDACB23E28D0700529352 /* QuartzCore.framework */; };
+ A75FDACE23E28D0F00529352 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDACD23E28D0F00529352 /* OpenGLES.framework */; };
+ A75FDAD023E28D1300529352 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDACF23E28D1300529352 /* Metal.framework */; };
+ A75FDAD223E28D2000529352 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAD123E28D2000529352 /* GameController.framework */; };
+ A75FDAD423E28D2E00529352 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAD323E28D2E00529352 /* CoreVideo.framework */; };
+ A75FDAD623E28D3300529352 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAD523E28D3300529352 /* CoreGraphics.framework */; };
+ A75FDAD823E28D3B00529352 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAD723E28D3B00529352 /* CoreFoundation.framework */; };
+ A75FDAD923E28D3F00529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAB523E2799700529352 /* CoreBluetooth.framework */; };
+ A75FDADB23E28D4900529352 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDADA23E28D4900529352 /* CoreAudio.framework */; };
+ A75FDADD23E28D5500529352 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDADC23E28D5500529352 /* AVFoundation.framework */; };
+ A75FDADF23E28D6600529352 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDADE23E28D6600529352 /* AudioToolbox.framework */; };
+ A75FDAF623E35EC400529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FDAF723E35EC400529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FDAF823E35ED500529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
+ A75FDAF923E35ED500529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
+ A75FDAFA23E35ED600529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
+ A75FDAFB23E35ED700529352 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */; };
+ A75FDB5123E39D1700529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDB5223E39D1700529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDB5323E39D1C00529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDB5523E39DAC00529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
+ A75FDB5623E39DE900529352 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBB23E24A2F00DCD162 /* UIKit.framework */; };
+ A75FDB5823E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5923E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5A23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5B23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5C23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5D23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5E23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB5F23E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB6023E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; };
+ A75FDB6123E39E6100529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FDB6423E3A2C900529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FDB6623E3A2C900529352 /* hid.m in Sources */ = {isa = PBXBuildFile; fileRef = A75FDAA523E2792500529352 /* hid.m */; };
+ A75FDB6823E3A2C900529352 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDAC323E28BA700529352 /* CoreBluetooth.framework */; };
+ A75FDB6923E3A2C900529352 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBB23E24A2F00DCD162 /* UIKit.framework */; };
+ A75FDB8223E4C74400529352 /* hidapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDB5723E39E6100529352 /* hidapi.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A75FDB8F23E4C80B00529352 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
+ A75FDB9023E4C80D00529352 /* SDL_hidapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */; };
+ A75FDB9323E4C8DB00529352 /* hid.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDB9223E4C8DB00529352 /* hid.c */; };
+ A75FDB9423E4C91300529352 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
+ A75FDB9523E4C93600529352 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
+ A75FDB9A23E4CAEF00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB8C23E4C74400529352 /* hidapi.framework */; };
+ A75FDB9B23E4CAEF00529352 /* hidapi.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB8C23E4C74400529352 /* hidapi.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ A75FDB9D23E4CAFA00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB4923E399AC00529352 /* hidapi.framework */; };
+ A75FDB9E23E4CAFA00529352 /* hidapi.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB4923E399AC00529352 /* hidapi.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ A75FDBA023E4CAFF00529352 /* hidapi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB6E23E3A2C900529352 /* hidapi.framework */; };
+ A75FDBA123E4CAFF00529352 /* hidapi.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A75FDB6E23E3A2C900529352 /* hidapi.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ A75FDBA823E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
+ A75FDBA923E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
+ A75FDBAA23E4CB7000529352 /* LICENSE-bsd.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */; };
+ A75FDBAB23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
+ A75FDBAC23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
+ A75FDBAD23E4CB7000529352 /* AUTHORS.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA423E4CB6F00529352 /* AUTHORS.txt */; };
+ A75FDBAE23E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
+ A75FDBAF23E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
+ A75FDBB023E4CB7000529352 /* LICENSE-orig.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */; };
+ A75FDBB123E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
+ A75FDBB223E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
+ A75FDBB323E4CB7000529352 /* LICENSE-gpl3.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */; };
+ A75FDBB423E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
+ A75FDBB523E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
+ A75FDBB623E4CB7000529352 /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = A75FDBA723E4CB6F00529352 /* LICENSE.txt */; };
+ A75FDBB723E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; };
+ A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; };
+ A75FDBB923E4CBC700529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; };
+ A75FDBBA23E4CBC700529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; };
+ A75FDBBB23E4CBC800529352 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 00794D3F09D0C461003FC8A1 /* License.txt */; };
+ A75FDBBC23E4CBC800529352 /* ReadMe.txt in Resources */ = {isa = PBXBuildFile; fileRef = F59C710300D5CB5801000001 /* ReadMe.txt */; };
+ A75FDBC523EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBC623EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBC723EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBC823EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBC923EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBCA23EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBCB23EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBCC23EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBCD23EA380300529352 /* SDL_hidapi_rumble.h in Headers */ = {isa = PBXBuildFile; fileRef = A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */; };
+ A75FDBCE23EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBCF23EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD023EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD123EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD223EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD323EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD423EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD523EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A75FDBD623EA380300529352 /* SDL_hidapi_rumble.c in Sources */ = {isa = PBXBuildFile; fileRef = A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */; };
+ A769B08423E259AE00872273 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A769B08523E259AE00872273 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B08723E259AE00872273 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B08823E259AE00872273 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A769B08923E259AE00872273 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B08A23E259AE00872273 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B08B23E259AE00872273 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A769B08C23E259AE00872273 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B08D23E259AE00872273 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A769B08E23E259AE00872273 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A769B08F23E259AE00872273 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B09023E259AE00872273 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A769B09123E259AE00872273 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A769B09223E259AE00872273 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A769B09323E259AE00872273 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A769B09423E259AE00872273 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A769B09523E259AE00872273 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B09623E259AE00872273 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A769B09723E259AE00872273 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A769B09823E259AE00872273 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B09923E259AE00872273 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A769B09A23E259AE00872273 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A769B09B23E259AE00872273 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B09C23E259AE00872273 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A769B09D23E259AE00872273 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A769B09E23E259AE00872273 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B09F23E259AE00872273 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A769B0A023E259AE00872273 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A769B0A123E259AE00872273 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A769B0A223E259AE00872273 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0A323E259AE00872273 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A769B0A423E259AE00872273 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A769B0A623E259AE00872273 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A769B0A723E259AE00872273 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0A823E259AE00872273 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A769B0A923E259AE00872273 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A769B0AA23E259AE00872273 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A769B0AB23E259AE00872273 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A769B0AC23E259AE00872273 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A769B0AD23E259AE00872273 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A769B0AE23E259AE00872273 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A769B0AF23E259AE00872273 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0B023E259AE00872273 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0B123E259AE00872273 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0B223E259AE00872273 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0B323E259AE00872273 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A769B0B423E259AE00872273 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0B523E259AE00872273 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A769B0B623E259AE00872273 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A769B0B723E259AE00872273 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A769B0B823E259AE00872273 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A769B0B923E259AE00872273 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A769B0BA23E259AE00872273 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A769B0BB23E259AE00872273 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0BC23E259AE00872273 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A769B0BD23E259AE00872273 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0BE23E259AE00872273 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A769B0BF23E259AE00872273 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A769B0C023E259AE00872273 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A769B0C123E259AE00872273 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A769B0C223E259AE00872273 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0C323E259AE00872273 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A769B0C423E259AE00872273 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A769B0C523E259AE00872273 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A769B0C623E259AE00872273 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A769B0C723E259AE00872273 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0C823E259AE00872273 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A769B0C923E259AE00872273 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0CA23E259AE00872273 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A769B0CB23E259AE00872273 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A769B0CC23E259AE00872273 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A769B0CD23E259AE00872273 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A769B0CE23E259AE00872273 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0CF23E259AE00872273 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A769B0D023E259AE00872273 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A769B0D123E259AE00872273 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A769B0D223E259AE00872273 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A769B0D323E259AE00872273 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A769B0D423E259AE00872273 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A769B0D523E259AE00872273 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0D623E259AE00872273 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A769B0D723E259AE00872273 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A769B0D823E259AE00872273 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A769B0D923E259AE00872273 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A769B0DA23E259AE00872273 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A769B0DB23E259AE00872273 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A769B0DC23E259AE00872273 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A769B0DD23E259AE00872273 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A769B0DE23E259AE00872273 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A769B0DF23E259AE00872273 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A769B0E023E259AE00872273 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0E123E259AE00872273 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A769B0E223E259AE00872273 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A769B0E423E259AE00872273 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A769B0E523E259AE00872273 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A769B0E623E259AE00872273 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A769B0E723E259AE00872273 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A769B0E823E259AE00872273 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A769B0E923E259AE00872273 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A769B0EA23E259AE00872273 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A769B0EB23E259AE00872273 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A769B0EC23E259AE00872273 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0ED23E259AE00872273 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A769B0EE23E259AE00872273 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0EF23E259AE00872273 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A769B0F023E259AE00872273 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A769B0F123E259AE00872273 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A769B0F223E259AE00872273 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A769B0F323E259AE00872273 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A769B0F423E259AE00872273 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A769B0F523E259AE00872273 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A769B0F623E259AE00872273 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A769B0F723E259AE00872273 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A769B0F823E259AE00872273 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0F923E259AE00872273 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0FA23E259AE00872273 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B0FB23E259AE00872273 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A769B0FC23E259AE00872273 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A769B0FD23E259AE00872273 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A769B0FE23E259AE00872273 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A769B0FF23E259AE00872273 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B10023E259AE00872273 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A769B10123E259AE00872273 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A769B10223E259AE00872273 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A769B10323E259AE00872273 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A769B10423E259AE00872273 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B10523E259AE00872273 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A769B10623E259AE00872273 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B10723E259AE00872273 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A769B10823E259AE00872273 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B10923E259AE00872273 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A769B10A23E259AE00872273 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A769B10B23E259AE00872273 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A769B10C23E259AE00872273 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A769B10D23E259AE00872273 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A769B10E23E259AE00872273 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A769B10F23E259AE00872273 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A769B11023E259AE00872273 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A769B11123E259AE00872273 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A769B11223E259AE00872273 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A769B11323E259AE00872273 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A769B11423E259AE00872273 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B11523E259AE00872273 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A769B11723E259AE00872273 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A769B11823E259AE00872273 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A769B11A23E259AE00872273 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A769B11B23E259AE00872273 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A769B11C23E259AE00872273 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A769B11D23E259AE00872273 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A769B11E23E259AE00872273 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A769B11F23E259AE00872273 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A769B12023E259AE00872273 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A769B12123E259AE00872273 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B12223E259AE00872273 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B12323E259AE00872273 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A769B12523E259AE00872273 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A769B12623E259AE00872273 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A769B12723E259AE00872273 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A769B12823E259AE00872273 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A769B12923E259AE00872273 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A769B12A23E259AE00872273 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A769B12B23E259AE00872273 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A769B12C23E259AE00872273 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A769B12D23E259AE00872273 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B12E23E259AE00872273 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A769B12F23E259AE00872273 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A769B13023E259AE00872273 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B13123E259AE00872273 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B13223E259AE00872273 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A769B13323E259AE00872273 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A769B13423E259AE00872273 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A769B13523E259AE00872273 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A769B13623E259AE00872273 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A769B13723E259AE00872273 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B13823E259AE00872273 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A769B13923E259AE00872273 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B13A23E259AE00872273 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B13B23E259AE00872273 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A769B13C23E259AE00872273 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A769B13D23E259AE00872273 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A769B13E23E259AE00872273 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A769B13F23E259AE00872273 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A769B14023E259AE00872273 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A769B14123E259AE00872273 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A769B14223E259AE00872273 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A769B14323E259AE00872273 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A769B14423E259AE00872273 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A769B14523E259AE00872273 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A769B14623E259AE00872273 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A769B14723E259AE00872273 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A769B14823E259AE00872273 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A769B14923E259AE00872273 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A769B14A23E259AE00872273 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A769B14B23E259AE00872273 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B14C23E259AE00872273 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B14D23E259AE00872273 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B14E23E259AE00872273 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A769B14F23E259AE00872273 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A769B15023E259AE00872273 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B15123E259AE00872273 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B15223E259AE00872273 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B15323E259AE00872273 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A769B15423E259AE00872273 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A769B15523E259AE00872273 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A769B15623E259AE00872273 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A769B15723E259AE00872273 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A769B15823E259AE00872273 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B15923E259AE00872273 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A769B15A23E259AE00872273 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A769B15B23E259AE00872273 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A769B15C23E259AE00872273 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B15D23E259AE00872273 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A769B15E23E259AE00872273 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A769B15F23E259AE00872273 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16023E259AE00872273 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16123E259AE00872273 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A769B16223E259AE00872273 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A769B16323E259AE00872273 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A769B16423E259AE00872273 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A769B16523E259AE00872273 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16623E259AE00872273 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16723E259AE00872273 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16823E259AE00872273 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16923E259AE00872273 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A769B16A23E259AE00872273 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16B23E259AE00872273 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A769B16C23E259AE00872273 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A769B16D23E259AE00872273 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A769B16E23E259AE00872273 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A769B16F23E259AE00872273 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A769B17123E259AE00872273 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A769B17223E259AE00872273 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A769B17323E259AE00872273 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A769B17423E259AE00872273 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A769B17523E259AE00872273 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A769B17623E259AE00872273 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A769B17723E259AE00872273 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A769B17823E259AE00872273 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A769B17923E259AE00872273 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A769B17A23E259AE00872273 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A769B17B23E259AE00872273 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A769B17C23E259AE00872273 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A769B17D23E259AE00872273 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A769B17E23E259AE00872273 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A769B17F23E259AE00872273 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A769B18023E259AE00872273 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A769B18123E259AE00872273 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A769B18223E259AE00872273 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A769B18423E259AE00872273 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A769B18523E259AE00872273 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A769B18623E259AE00872273 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A769B18723E259AE00872273 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A769B18823E259AE00872273 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A769B18923E259AE00872273 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A769B18A23E259AE00872273 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A769B18B23E259AE00872273 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A769B18C23E259AE00872273 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A769B18D23E259AE00872273 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A769B18E23E259AE00872273 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A769B18F23E259AE00872273 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A769B19023E259AE00872273 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A769B19123E259AE00872273 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A769B19223E259AE00872273 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A769B19323E259AE00872273 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A769B19423E259AE00872273 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A769B19523E259AE00872273 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A769B19623E259AE00872273 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A769B19723E259AE00872273 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A769B19823E259AE00872273 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A769B19923E259AE00872273 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A769B19A23E259AE00872273 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A769B19B23E259AE00872273 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A769B19C23E259AE00872273 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A769B19D23E259AE00872273 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A769B19E23E259AE00872273 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A769B19F23E259AE00872273 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A769B1A023E259AE00872273 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A769B1A123E259AE00872273 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A769B1A223E259AE00872273 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A769B1A323E259AE00872273 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A769B1A423E259AE00872273 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A769B1A523E259AE00872273 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A769B1A623E259AE00872273 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A769B1A723E259AE00872273 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A769B1A823E259AE00872273 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A769B1A923E259AE00872273 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A769B1AA23E259AE00872273 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A769B1AB23E259AE00872273 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A769B1AC23E259AE00872273 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A769B1AD23E259AE00872273 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A769B1AE23E259AE00872273 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A769B1AF23E259AE00872273 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A769B1B023E259AE00872273 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A769B1B123E259AE00872273 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A769B1B223E259AE00872273 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A769B1B323E259AE00872273 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A769B1B423E259AE00872273 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A769B1B523E259AE00872273 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A769B1B623E259AE00872273 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A769B1B723E259AE00872273 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A769B1B823E259AE00872273 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A769B1B923E259AE00872273 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A769B1BA23E259AE00872273 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A769B1BB23E259AE00872273 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A769B1BC23E259AE00872273 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A769B1BD23E259AE00872273 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A769B1BE23E259AE00872273 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A769B1BF23E259AE00872273 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A769B1C023E259AE00872273 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A769B1C123E259AE00872273 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A769B1C223E259AE00872273 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A769B1C323E259AE00872273 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A769B1C423E259AE00872273 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A769B1C523E259AE00872273 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A769B1C623E259AE00872273 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A769B1C723E259AE00872273 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A769B1C823E259AE00872273 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A769B1C923E259AE00872273 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A769B1CA23E259AE00872273 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A769B1CB23E259AE00872273 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A769B1CC23E259AE00872273 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A769B1CD23E259AE00872273 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A769B1CE23E259AE00872273 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A769B1CF23E259AE00872273 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A769B1D023E259AE00872273 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A769B1D123E259AE00872273 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A769B1D223E259AE00872273 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A769B1D323E259AE00872273 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A769B1D423E259AE00872273 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A769B1D523E259AE00872273 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A769B1D623E259AE00872273 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A769B1D723E259AE00872273 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A769B1D823E259AE00872273 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A769B1D923E259AE00872273 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A769B1DA23E259AE00872273 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A769B1DB23E259AE00872273 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A769B1DC23E259AE00872273 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A769B1DD23E259AE00872273 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A769B1DE23E259AE00872273 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A769B1DF23E259AE00872273 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A769B1E023E259AE00872273 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A769B1E123E259AE00872273 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A769B1E223E259AE00872273 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A769B1E323E259AE00872273 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A769B1E423E259AE00872273 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A769B1E523E259AE00872273 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A769B1E723E259AE00872273 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A769B1E823E259AE00872273 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A769B1E923E259AE00872273 /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5B023E2513D00DCD162 /* SDL_uikit_main.c */; };
+ A769B1EA23E259AE00872273 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A769B1EB23E259AE00872273 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A769B1EC23E259AE00872273 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A769B1ED23E259AE00872273 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A769B1EE23E259AE00872273 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A769B1EF23E259AE00872273 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A769B1F023E259AE00872273 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A769B1F123E259AE00872273 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A769B1F223E259AE00872273 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A769B1F323E259AE00872273 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A769B1F423E259AE00872273 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A769B1F523E259AE00872273 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A769B1F623E259AE00872273 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A769B1F723E259AE00872273 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A769B1F823E259AE00872273 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A769B1F923E259AE00872273 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A769B1FA23E259AE00872273 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A769B1FB23E259AE00872273 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A769B1FC23E259AE00872273 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A769B1FD23E259AE00872273 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A769B1FE23E259AE00872273 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A769B1FF23E259AE00872273 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A769B20123E259AE00872273 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A769B20223E259AE00872273 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A769B20323E259AE00872273 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A769B20423E259AE00872273 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A769B20523E259AE00872273 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A769B20623E259AE00872273 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A769B20723E259AE00872273 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A769B20823E259AE00872273 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A769B20923E259AE00872273 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A769B20A23E259AE00872273 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A769B20B23E259AE00872273 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A769B20C23E259AE00872273 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A769B20D23E259AE00872273 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A769B20E23E259AE00872273 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A769B20F23E259AE00872273 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A769B21023E259AE00872273 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A769B21123E259AE00872273 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A769B21223E259AE00872273 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A769B21323E259AE00872273 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A769B21423E259AE00872273 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A769B21623E259AE00872273 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A769B21723E259AE00872273 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A769B21823E259AE00872273 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A769B21923E259AE00872273 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A769B21A23E259AE00872273 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A769B21B23E259AE00872273 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A769B21C23E259AE00872273 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A769B21D23E259AE00872273 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A769B21E23E259AE00872273 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A769B21F23E259AE00872273 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A769B22023E259AE00872273 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A769B22123E259AE00872273 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A769B22223E259AE00872273 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A769B22323E259AE00872273 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A769B22423E259AE00872273 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A769B22523E259AE00872273 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A769B22623E259AE00872273 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A769B22723E259AE00872273 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A769B22823E259AE00872273 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A769B22923E259AE00872273 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A769B22A23E259AE00872273 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A769B22B23E259AE00872273 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A769B22C23E259AE00872273 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A769B22D23E259AE00872273 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
A77E6EB4167AB0A90010E40B /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
A77E6EB5167AB0A90010E40B /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AA0AD09D16648D1700CE5896 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; };
- AA0F8491178D5ECC00823F9D /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0F8490178D5ECC00823F9D /* SDL_systls.c */; };
- AA0F8492178D5ECC00823F9D /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0F8490178D5ECC00823F9D /* SDL_systls.c */; };
- AA0F8493178D5ECC00823F9D /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0F8490178D5ECC00823F9D /* SDL_systls.c */; };
- AA41F88014B8F1F500993C4F /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */; };
- AA628ACA159367B7005138DD /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628AC8159367B7005138DD /* SDL_rotate.c */; };
- AA628ACB159367B7005138DD /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628AC8159367B7005138DD /* SDL_rotate.c */; };
- AA628ACC159367B7005138DD /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AC9159367B7005138DD /* SDL_rotate.h */; };
- AA628ACD159367B7005138DD /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AC9159367B7005138DD /* SDL_rotate.h */; };
- AA628AD1159367F2005138DD /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628ACF159367F2005138DD /* SDL_x11xinput2.c */; };
- AA628AD2159367F2005138DD /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628ACF159367F2005138DD /* SDL_x11xinput2.c */; };
- AA628AD3159367F2005138DD /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AD0159367F2005138DD /* SDL_x11xinput2.h */; };
- AA628AD4159367F2005138DD /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AD0159367F2005138DD /* SDL_x11xinput2.h */; };
+ A7D88A1623E2437C00DCD162 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1823E2437C00DCD162 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1923E2437C00DCD162 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1A23E2437C00DCD162 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1B23E2437C00DCD162 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1D23E2437C00DCD162 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1E23E2437C00DCD162 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A1F23E2437C00DCD162 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2023E2437C00DCD162 /* SDL_egl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF7001FC9EF0F003F5197 /* SDL_egl.h */; };
+ A7D88A2123E2437C00DCD162 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2323E2437C00DCD162 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2523E2437C00DCD162 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2623E2437C00DCD162 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2723E2437C00DCD162 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2823E2437C00DCD162 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2923E2437C00DCD162 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2A23E2437C00DCD162 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2B23E2437C00DCD162 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2C23E2437C00DCD162 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2D23E2437C00DCD162 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2E23E2437C00DCD162 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A2F23E2437C00DCD162 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3023E2437C00DCD162 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3123E2437C00DCD162 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3223E2437C00DCD162 /* SDL_metal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA24348A21D41FFB00B8918A /* SDL_metal.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3323E2437C00DCD162 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3523E2437C00DCD162 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3623E2437C00DCD162 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3823E2437C00DCD162 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3923E2437C00DCD162 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3A23E2437C00DCD162 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3B23E2437C00DCD162 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3C23E2437C00DCD162 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3D23E2437C00DCD162 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3E23E2437C00DCD162 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A3F23E2437C00DCD162 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4023E2437C00DCD162 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4123E2437C00DCD162 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4223E2437C00DCD162 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4323E2437C00DCD162 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4423E2437C00DCD162 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4523E2437C00DCD162 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4623E2437C00DCD162 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4723E2437C00DCD162 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4823E2437C00DCD162 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4923E2437C00DCD162 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4B23E2437C00DCD162 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4C23E2437C00DCD162 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4D23E2437C00DCD162 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A4E23E2437C00DCD162 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5023E2437C00DCD162 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5123E2437C00DCD162 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5223E2437C00DCD162 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5323E2437C00DCD162 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5423E2437C00DCD162 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5523E2437C00DCD162 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5623E2437C00DCD162 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5723E2437C00DCD162 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5823E2437C00DCD162 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5923E2437C00DCD162 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5A23E2437C00DCD162 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88A5C23E2437C00DCD162 /* SDL_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4820431F0F10B400EDC31C /* SDL_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88B4723E2437C00DCD162 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; };
+ A7D88B4823E2437C00DCD162 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; };
+ A7D88B4C23E2437C00DCD162 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
+ A7D88B4D23E2437C00DCD162 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
+ A7D88B4E23E2437C00DCD162 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
+ A7D88B5023E2437C00DCD162 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
+ A7D88BBC23E24A2F00DCD162 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBB23E24A2F00DCD162 /* UIKit.framework */; };
+ A7D88BBE23E24A6000DCD162 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBD23E24A6000DCD162 /* GameController.framework */; };
+ A7D88BC023E24A7700DCD162 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBF23E24A7700DCD162 /* OpenGLES.framework */; };
+ A7D88BC223E24A8800DCD162 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC123E24A8800DCD162 /* CoreMotion.framework */; };
+ A7D88BC423E24A9F00DCD162 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC323E24A9F00DCD162 /* AudioToolbox.framework */; };
+ A7D88BC623E24ABA00DCD162 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC523E24ABA00DCD162 /* AVFoundation.framework */; };
+ A7D88BC823E24B0300DCD162 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC723E24B0200DCD162 /* CoreGraphics.framework */; };
+ A7D88BCC23E24BED00DCD162 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BCE23E24BED00DCD162 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BCF23E24BED00DCD162 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD023E24BED00DCD162 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD123E24BED00DCD162 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD423E24BED00DCD162 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD523E24BED00DCD162 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD623E24BED00DCD162 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BD723E24BED00DCD162 /* SDL_egl.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2EF7001FC9EF0F003F5197 /* SDL_egl.h */; };
+ A7D88BD823E24BED00DCD162 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BDA23E24BED00DCD162 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BDC23E24BED00DCD162 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BDD23E24BED00DCD162 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BDE23E24BED00DCD162 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BDF23E24BED00DCD162 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE023E24BED00DCD162 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE123E24BED00DCD162 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE223E24BED00DCD162 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE323E24BED00DCD162 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE423E24BED00DCD162 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE523E24BED00DCD162 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE623E24BED00DCD162 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE723E24BED00DCD162 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BE923E24BED00DCD162 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BEA23E24BED00DCD162 /* SDL_metal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA24348A21D41FFB00B8918A /* SDL_metal.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BEB23E24BED00DCD162 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BED23E24BED00DCD162 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BEF23E24BED00DCD162 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF123E24BED00DCD162 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF223E24BED00DCD162 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF323E24BED00DCD162 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF423E24BED00DCD162 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF523E24BED00DCD162 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF623E24BED00DCD162 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF723E24BED00DCD162 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF823E24BED00DCD162 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BF923E24BED00DCD162 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFA23E24BED00DCD162 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFB23E24BED00DCD162 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFC23E24BED00DCD162 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFD23E24BED00DCD162 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFE23E24BED00DCD162 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88BFF23E24BED00DCD162 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0023E24BED00DCD162 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0123E24BED00DCD162 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0223E24BED00DCD162 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0423E24BED00DCD162 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0523E24BED00DCD162 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0723E24BED00DCD162 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0823E24BED00DCD162 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0A23E24BED00DCD162 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0C23E24BED00DCD162 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0D23E24BED00DCD162 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0E23E24BED00DCD162 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C0F23E24BED00DCD162 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1123E24BED00DCD162 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1223E24BED00DCD162 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1423E24BED00DCD162 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1523E24BED00DCD162 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1623E24BED00DCD162 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1723E24BED00DCD162 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88C1923E24BED00DCD162 /* SDL_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4820431F0F10B400EDC31C /* SDL_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D0523E24BED00DCD162 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC323E24A9F00DCD162 /* AudioToolbox.framework */; };
+ A7D88D0623E24BED00DCD162 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC523E24ABA00DCD162 /* AVFoundation.framework */; };
+ A7D88D0723E24BED00DCD162 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7381E951D8B69D600B177DD /* CoreAudio.framework */; };
+ A7D88D0823E24BED00DCD162 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; };
+ A7D88D0923E24BED00DCD162 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BC723E24B0200DCD162 /* CoreGraphics.framework */; };
+ A7D88D0B23E24BED00DCD162 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
+ A7D88D0C23E24BED00DCD162 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBD23E24A6000DCD162 /* GameController.framework */; };
+ A7D88D0E23E24BED00DCD162 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624371FF821CB0074AC87 /* Metal.framework */; };
+ A7D88D0F23E24BED00DCD162 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBF23E24A7700DCD162 /* OpenGLES.framework */; };
+ A7D88D1023E24BED00DCD162 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 564624351FF821B80074AC87 /* QuartzCore.framework */; };
+ A7D88D1123E24BED00DCD162 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7D88BBB23E24A2F00DCD162 /* UIKit.framework */; };
+ A7D88D1923E24D3B00DCD162 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1A23E24D3B00DCD162 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1B23E24D3B00DCD162 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1C23E24D3B00DCD162 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1D23E24D3B00DCD162 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1E23E24D3B00DCD162 /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CA1595D4D800BBD41B /* SDL_atomic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D1F23E24D3B00DCD162 /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CB1595D4D800BBD41B /* SDL_audio.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2023E24D3B00DCD162 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2123E24D3B00DCD162 /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2223E24D3B00DCD162 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2323E24D3B00DCD162 /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557CF1595D4D800BBD41B /* SDL_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2623E24D3B00DCD162 /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D01595D4D800BBD41B /* SDL_copying.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2723E24D3B00DCD162 /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D11595D4D800BBD41B /* SDL_cpuinfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2823E24D3B00DCD162 /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D21595D4D800BBD41B /* SDL_endian.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2923E24D3B00DCD162 /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D31595D4D800BBD41B /* SDL_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2A23E24D3B00DCD162 /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D41595D4D800BBD41B /* SDL_events.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2B23E24D3B00DCD162 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2C23E24D3B00DCD162 /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D51595D4D800BBD41B /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2D23E24D3B00DCD162 /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D61595D4D800BBD41B /* SDL_haptic.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2E23E24D3B00DCD162 /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D71595D4D800BBD41B /* SDL_hints.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D2F23E24D3B00DCD162 /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557D91595D4D800BBD41B /* SDL_joystick.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3023E24D3B00DCD162 /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DA1595D4D800BBD41B /* SDL_keyboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3123E24D3B00DCD162 /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DB1595D4D800BBD41B /* SDL_keycode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3223E24D3B00DCD162 /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DC1595D4D800BBD41B /* SDL_loadso.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3323E24D3B00DCD162 /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DD1595D4D800BBD41B /* SDL_log.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3423E24D3B00DCD162 /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DE1595D4D800BBD41B /* SDL_main.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3523E24D3B00DCD162 /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3623E24D3B00DCD162 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3723E24D3B00DCD162 /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557DF1595D4D800BBD41B /* SDL_mouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3823E24D3B00DCD162 /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E01595D4D800BBD41B /* SDL_mutex.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3923E24D3B00DCD162 /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E11595D4D800BBD41B /* SDL_name.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3A23E24D3B00DCD162 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E21595D4D800BBD41B /* SDL_opengl.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3B23E24D3B00DCD162 /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E31595D4D800BBD41B /* SDL_opengles.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3D23E24D3B00DCD162 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E41595D4D800BBD41B /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3E23E24D3B00DCD162 /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E51595D4D800BBD41B /* SDL_pixels.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D3F23E24D3B00DCD162 /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E61595D4D800BBD41B /* SDL_platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4023E24D3B00DCD162 /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E71595D4D800BBD41B /* SDL_power.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4123E24D3B00DCD162 /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E81595D4D800BBD41B /* SDL_quit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4223E24D3B00DCD162 /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557E91595D4D800BBD41B /* SDL_rect.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4323E24D3B00DCD162 /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EA1595D4D800BBD41B /* SDL_render.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4423E24D3B00DCD162 /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EB1595D4D800BBD41B /* SDL_revision.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4523E24D3B00DCD162 /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EC1595D4D800BBD41B /* SDL_rwops.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4623E24D3B00DCD162 /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557ED1595D4D800BBD41B /* SDL_scancode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4723E24D3B00DCD162 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EE1595D4D800BBD41B /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4B23E24D3B00DCD162 /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557EF1595D4D800BBD41B /* SDL_stdinc.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4C23E24D3B00DCD162 /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F01595D4D800BBD41B /* SDL_surface.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4D23E24D3B00DCD162 /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F11595D4D800BBD41B /* SDL_system.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4E23E24D3B00DCD162 /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F21595D4D800BBD41B /* SDL_syswm.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D4F23E24D3B00DCD162 /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5023E24D3B00DCD162 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F31595D4D800BBD41B /* SDL_thread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5223E24D3B00DCD162 /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F41595D4D800BBD41B /* SDL_timer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5323E24D3B00DCD162 /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F51595D4D800BBD41B /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5423E24D3B00DCD162 /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F61595D4D800BBD41B /* SDL_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5523E24D3B00DCD162 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5623E24D3B00DCD162 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D5D23E24D3B00DCD162 /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D7A23E24D3B00DCD162 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88D8A23E24D3B00DCD162 /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D88DA623E24D3B00DCD162 /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A7D8A94523E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94623E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94723E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94823E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94923E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94A23E2514000DCD162 /* SDL_dataqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */; };
+ A7D8A94B23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A94C23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A94D23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A94E23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A94F23E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A95023E2514000DCD162 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57123E2513D00DCD162 /* SDL.c */; };
+ A7D8A95123E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95223E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95323E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95423E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95523E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95623E2514000DCD162 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */; };
+ A7D8A95723E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95823E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95923E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95A23E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95B23E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95C23E2514000DCD162 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57423E2513D00DCD162 /* SDL_atomic.c */; };
+ A7D8A95D23E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A95E23E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A95F23E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A96023E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A96123E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A96223E2514000DCD162 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57523E2513D00DCD162 /* SDL_error_c.h */; };
+ A7D8A96323E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96423E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96523E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96623E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96723E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96823E2514000DCD162 /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */; };
+ A7D8A96923E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96A23E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96B23E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96C23E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96D23E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96E23E2514000DCD162 /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */; };
+ A7D8A96F23E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97023E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97123E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97223E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97323E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97423E2514000DCD162 /* SDL_coremotionsensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */; };
+ A7D8A97523E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97623E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97723E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97823E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97923E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97A23E2514000DCD162 /* SDL_coremotionsensor.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */; };
+ A7D8A97B23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A97C23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A97D23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A97E23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A97F23E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A98023E2514000DCD162 /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */; };
+ A7D8A98D23E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A98E23E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A98F23E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A99023E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A99123E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A99223E2514000DCD162 /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */; };
+ A7D8A99323E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99423E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99523E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99623E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99723E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99823E2514000DCD162 /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A58223E2513D00DCD162 /* SDL_sensor.c */; };
+ A7D8A99923E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8A99A23E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8A99B23E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8A99C23E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8A99D23E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8A99E23E2514000DCD162 /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A58323E2513D00DCD162 /* SDL_internal.h */; };
+ A7D8AA6523E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AA6623E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AA6723E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AA6823E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AA6923E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AA6A23E2514000DCD162 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */; };
+ A7D8AAB023E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB123E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB223E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB323E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB423E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB523E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AAB723E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AAB823E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AAB923E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AABA23E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AABB23E2514100DCD162 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */; };
+ A7D8AABC23E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AABD23E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AABE23E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AABF23E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AAC023E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AAC123E2514100DCD162 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */; };
+ A7D8AAD423E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AAD523E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AAD623E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AAD723E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AAD823E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AAD923E2514100DCD162 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */; };
+ A7D8AADA23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AADB23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AADC23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AADD23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AADE23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AADF23E2514100DCD162 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */; };
+ A7D8AAE023E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AAE123E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AAE223E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AAE323E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AAE423E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AAE523E2514100DCD162 /* SDL_syshaptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */; };
+ A7D8AB0A23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB0B23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB0C23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB0D23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB0E23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB0F23E2514100DCD162 /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */; };
+ A7D8AB1023E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1123E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1223E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1323E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1423E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1523E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */; };
+ A7D8AB1623E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1723E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1823E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1923E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1A23E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1B23E2514100DCD162 /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */; };
+ A7D8AB1C23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB1D23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB1E23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB1F23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB2023E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB2123E2514100DCD162 /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */; };
+ A7D8AB2523E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2623E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2723E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2823E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2923E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2A23E2514100DCD162 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DD23E2513D00DCD162 /* SDL_log.c */; };
+ A7D8AB2B23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB2C23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB2D23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB2E23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB2F23E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB3023E2514100DCD162 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */; };
+ A7D8AB3123E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3223E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3323E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3423E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3523E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3623E2514100DCD162 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */; };
+ A7D8AB3723E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB3823E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB3923E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB3A23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB3B23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB3C23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4923E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4A23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4B23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4C23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4D23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB4E23E2514100DCD162 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */; };
+ A7D8AB5523E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5623E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5723E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5823E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5923E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5A23E2514100DCD162 /* SDL_offscreenopengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */; };
+ A7D8AB5B23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB5C23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB5D23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB5E23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB5F23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB6023E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */; };
+ A7D8AB6123E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6223E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6323E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6423E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6523E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6623E2514100DCD162 /* SDL_offscreenwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */; };
+ A7D8AB6723E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6823E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6923E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6A23E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6B23E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6C23E2514100DCD162 /* SDL_offscreenevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */; };
+ A7D8AB6D23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB6E23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB6F23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB7023E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB7123E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB7223E2514100DCD162 /* SDL_offscreenvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */; };
+ A7D8AB7323E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7423E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7523E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7623E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7723E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7823E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */; };
+ A7D8AB7923E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7A23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7B23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7C23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7D23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7E23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */; };
+ A7D8AB7F23E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8023E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8123E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8223E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8323E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8423E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */; };
+ A7D8AB8523E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8623E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8723E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8823E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8923E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8A23E2514100DCD162 /* SDL_offscreenwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */; };
+ A7D8AB8B23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8AB8C23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8AB8D23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8AB8E23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8AB8F23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8AB9023E2514100DCD162 /* SDL_offscreenvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */; };
+ A7D8ABCD23E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABCE23E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABCF23E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABD023E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABD123E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABD223E2514100DCD162 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */; };
+ A7D8ABD323E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD423E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD523E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD623E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD723E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD823E2514100DCD162 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60323E2513D00DCD162 /* SDL_stretch.c */; };
+ A7D8ABD923E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDA23E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDB23E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDC23E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDD23E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDE23E2514100DCD162 /* SDL_egl_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */; };
+ A7D8ABDF23E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE023E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE123E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE223E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE323E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE423E2514100DCD162 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */; };
+ A7D8ABE523E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABE623E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABE723E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABE823E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABE923E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABEA23E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */; };
+ A7D8ABEB23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABEC23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABED23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABEE23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABEF23E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABF023E2514100DCD162 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */; };
+ A7D8ABF123E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF223E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF323E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF423E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF523E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF623E2514100DCD162 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */; };
+ A7D8ABF723E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABF823E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABF923E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABFA23E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABFB23E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABFC23E2514100DCD162 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */; };
+ A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8ABFE23E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8ABFF23E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8AC0023E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8AC0123E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8AC0223E2514100DCD162 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */; };
+ A7D8AC0323E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0423E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0523E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0623E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0723E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0823E2514100DCD162 /* SDL_rect_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */; };
+ A7D8AC0923E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0A23E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0B23E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0C23E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0D23E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0E23E2514100DCD162 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */; };
+ A7D8AC0F23E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC1023E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC1123E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC1223E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC1423E2514100DCD162 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A60E23E2513D00DCD162 /* SDL_video.c */; };
+ A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC2E23E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC2F23E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC3023E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC3123E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC3223E2514100DCD162 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61423E2513D00DCD162 /* SDL_surface.c */; };
+ A7D8AC3323E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3423E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3523E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3623E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3723E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3823E2514100DCD162 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */; };
+ A7D8AC3923E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3A23E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3B23E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3C23E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3D23E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3E23E2514100DCD162 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */; };
+ A7D8AC3F23E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4023E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4123E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4223E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4323E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4423E2514100DCD162 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */; };
+ A7D8AC4623E2514100DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8AC4723E2514100DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8AC4923E2514100DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8AC4A23E2514100DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8AC4C23E2514100DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8AC4D23E2514100DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8AC4F23E2514100DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8AC5023E2514100DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8AC5223E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8AC5323E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8AC5523E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8AC5623E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8AC5823E2514100DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8AC5923E2514100DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8AC5B23E2514100DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8AC5C23E2514100DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8AC5E23E2514100DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8AC5F23E2514100DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8AC6123E2514100DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8AC6223E2514100DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8AC6423E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8AC6523E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8AC6723E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8AC6823E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8AC6A23E2514100DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8AC6B23E2514100DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8AC6D23E2514100DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8AC6E23E2514100DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8AC7023E2514100DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8AC7123E2514100DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8AC7323E2514100DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8AC7423E2514100DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8AC7623E2514100DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8AC7723E2514100DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8AC7923E2514100DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8AC7A23E2514100DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8AC7C23E2514100DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8AC7D23E2514100DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8AC7F23E2514100DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8AC8023E2514100DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8AC8223E2514100DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8AC8323E2514100DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8AC8523E2514100DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8AC8623E2514100DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8AC8823E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8AC8923E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8AC8B23E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8AC8C23E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8AC8E23E2514100DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8AC8F23E2514100DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8AC9123E2514100DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8AC9223E2514100DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8AC9423E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8AC9523E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8AC9723E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8AC9823E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8AC9A23E2514100DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8AC9B23E2514100DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8AC9D23E2514100DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8AC9E23E2514100DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8ACA023E2514100DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8ACA123E2514100DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8ACA323E2514100DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8ACA423E2514100DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8ACA623E2514100DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8ACA723E2514100DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8ACA923E2514100DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8ACAA23E2514100DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8ACAC23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8ACAD23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8ACAF23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8ACB023E2514100DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8ACB223E2514100DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8ACB323E2514100DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8ACB523E2514100DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8ACB623E2514100DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8ACB823E2514100DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8ACB923E2514100DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8ACBB23E2514100DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8ACBC23E2514100DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8ACBE23E2514100DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8ACBF23E2514100DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8ACC123E2514100DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8ACC223E2514100DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8ACC423E2514100DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8ACC523E2514100DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8ACC723E2514100DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8ACC823E2514100DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8ACCA23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8ACCB23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8ACCD23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8ACCE23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8ACD023E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8ACD123E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8ACD323E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8ACD423E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8ACD623E2514100DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8ACD723E2514100DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8ACD923E2514100DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8ACDA23E2514100DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8ACDC23E2514100DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8ACDD23E2514100DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8ACDF23E2514100DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8ACE023E2514100DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8ACE223E2514100DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8ACE323E2514100DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8ACE523E2514100DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8ACE623E2514100DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8ACE723E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8ACE823E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8ACE923E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8ACEA23E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8ACEB23E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8ACEC23E2514100DCD162 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63423E2513D00DCD162 /* SDL_rect.c */; };
+ A7D8AD1D23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD1E23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD1F23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD2023E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD2123E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD2223E2514100DCD162 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */; };
+ A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2423E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2523E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2623E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2723E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2823E2514100DCD162 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */; };
+ A7D8AD2923E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD2A23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD2B23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD2C23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD2D23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD2E23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */; };
+ A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD3323E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD3423E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD3523E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD3623E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD3723E2514100DCD162 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */; };
+ A7D8AD6823E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6923E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6A23E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6B23E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6C23E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6D23E2514100DCD162 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64C23E2513D00DCD162 /* SDL_blit.c */; };
+ A7D8AD6E23E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8AD6F23E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8AD7023E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8AD7123E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8AD7223E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8AD7323E2514100DCD162 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */; };
+ A7D8ADE623E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADE723E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADE823E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADE923E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADEA23E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADEB23E2514100DCD162 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */; };
+ A7D8ADEC23E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADED23E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADEE23E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADEF23E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADF023E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADF123E2514100DCD162 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */; };
+ A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8ADF323E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8ADF423E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8ADF523E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8ADF623E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8ADF723E2514100DCD162 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */; };
+ A7D8AE7623E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7723E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7823E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7923E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7A23E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7B23E2514100DCD162 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */; };
+ A7D8AE7C23E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE7D23E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE7E23E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE7F23E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE8023E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE8123E2514100DCD162 /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */; };
+ A7D8AE8223E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8323E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8423E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8523E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8623E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8723E2514100DCD162 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */; };
+ A7D8AE8823E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8923E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8A23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8B23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8C23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8D23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */; };
+ A7D8AE8E23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE8F23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE9023E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE9123E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE9223E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE9323E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */; };
+ A7D8AE9423E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9523E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9623E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9723E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9823E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9923E2514100DCD162 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */; };
+ A7D8AE9A23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AE9B23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AE9C23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AE9D23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AE9E23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AE9F23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */; };
+ A7D8AEA023E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA123E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA223E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA323E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA423E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA523E2514100DCD162 /* SDL_cocoavulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */; };
+ A7D8AEA623E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEA723E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEA823E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEA923E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEAA23E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEAB23E2514100DCD162 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */; };
+ A7D8AEAC23E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEAD23E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEAE23E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEAF23E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEB023E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEB123E2514100DCD162 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */; };
+ A7D8AEB223E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB323E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB423E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB523E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB623E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB723E2514100DCD162 /* SDL_cocoametalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */; };
+ A7D8AEB823E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEB923E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEBA23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEBB23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEBC23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEBD23E2514100DCD162 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */; };
+ A7D8AEBE23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEBF23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEC023E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEC123E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEC223E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEC323E2514100DCD162 /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */; };
+ A7D8AEC423E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AEC523E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AEC623E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AEC723E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AEC823E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AEC923E2514100DCD162 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */; };
+ A7D8AECA23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AECB23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AECC23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AECD23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AECE23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AECF23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */; };
+ A7D8AED023E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED123E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED223E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED323E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED423E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED523E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */; };
+ A7D8AED623E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AED723E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AED823E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AED923E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AEDA23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AEDB23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */; };
+ A7D8AEDC23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEDD23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEDE23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEDF23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEE023E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEE123E2514100DCD162 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */; };
+ A7D8AEE223E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE323E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE423E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE523E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE623E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE723E2514100DCD162 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */; };
+ A7D8AEE823E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEE923E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEEA23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEEB23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEEC23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEED23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */; };
+ A7D8AEEE23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEEF23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEF023E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEF123E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEF223E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEF323E2514100DCD162 /* SDL_cocoaopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */; };
+ A7D8AEF423E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEF523E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEF623E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEF723E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEF823E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEF923E2514100DCD162 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */; };
+ A7D8AEFA23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AEFB23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AEFC23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AEFD23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AEFE23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AEFF23E2514100DCD162 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */; };
+ A7D8AF0023E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0123E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0223E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0323E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0423E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0523E2514100DCD162 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */; };
+ A7D8AF0623E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0723E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0823E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0923E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0A23E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0B23E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */; };
+ A7D8AF0C23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF0D23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF0E23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF0F23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF1023E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF1123E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */; };
+ A7D8AF1223E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1323E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1423E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1523E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1623E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1723E2514100DCD162 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */; };
+ A7D8AF1823E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1923E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1A23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1B23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1C23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1D23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */; };
+ A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF1F23E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF2023E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF2123E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF2223E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF2323E2514100DCD162 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */; };
+ A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AF2523E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AF2623E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AF2723E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AF2823E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AF2923E2514100DCD162 /* SDL_cocoametalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */; };
+ A7D8AFC023E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8AFC123E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8AFC223E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8AFC323E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8AFC423E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8AFC523E2514200DCD162 /* SDL_egl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6B623E2513E00DCD162 /* SDL_egl.c */; };
+ A7D8B14023E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14123E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14223E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14323E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14423E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14523E2514200DCD162 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */; };
+ A7D8B14623E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14723E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14823E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14923E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14A23E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14B23E2514200DCD162 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */; };
+ A7D8B14C23E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B14D23E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B14E23E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B14F23E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B15023E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B15123E2514200DCD162 /* SDL_x11messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */; };
+ A7D8B15223E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15323E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15423E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15523E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15623E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15723E2514200DCD162 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */; };
+ A7D8B15823E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15923E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15A23E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15B23E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15C23E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15D23E2514200DCD162 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */; };
+ A7D8B15E23E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B15F23E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B16023E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B16123E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B16223E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B16323E2514200DCD162 /* SDL_x11vulkan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */; };
+ A7D8B16423E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16523E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16623E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16723E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16823E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16923E2514200DCD162 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */; };
+ A7D8B16A23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B16B23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B16C23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B16D23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B16E23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B16F23E2514200DCD162 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */; };
+ A7D8B17023E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17123E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17223E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17323E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17423E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17523E2514200DCD162 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */; };
+ A7D8B17623E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17723E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17823E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17923E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17A23E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17B23E2514200DCD162 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */; };
+ A7D8B17C23E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B17D23E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B17E23E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B17F23E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B18023E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B18123E2514200DCD162 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */; };
+ A7D8B18223E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18323E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18423E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18523E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18623E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18723E2514200DCD162 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */; };
+ A7D8B18823E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18923E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18A23E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18B23E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18C23E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18D23E2514200DCD162 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70723E2513E00DCD162 /* SDL_x11window.c */; };
+ A7D8B18E23E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B18F23E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B19023E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B19123E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B19223E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B19323E2514200DCD162 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70823E2513E00DCD162 /* SDL_x11video.c */; };
+ A7D8B19423E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19523E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19623E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19723E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19823E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19923E2514200DCD162 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70923E2513E00DCD162 /* imKStoUCS.c */; };
+ A7D8B19A23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B19B23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B19C23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B19D23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B19E23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B19F23E2514200DCD162 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */; };
+ A7D8B1A023E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A123E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A223E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A323E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A423E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A523E2514200DCD162 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */; };
+ A7D8B1A623E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1A723E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1A823E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1A923E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1AA23E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1AB23E2514200DCD162 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */; };
+ A7D8B1AC23E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1AD23E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1AE23E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1AF23E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1B023E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1B123E2514200DCD162 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */; };
+ A7D8B1B223E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B323E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B423E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B523E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B623E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B723E2514200DCD162 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */; };
+ A7D8B1B823E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1B923E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1BA23E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1BB23E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1BC23E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1BD23E2514200DCD162 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */; };
+ A7D8B1BE23E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1BF23E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1C023E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1C123E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1C223E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1C323E2514200DCD162 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */; };
+ A7D8B1C423E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1C523E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1C623E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1C723E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1C823E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1C923E2514200DCD162 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */; };
+ A7D8B1CA23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1CB23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1CC23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1CD23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1CE23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1CF23E2514200DCD162 /* edid-parse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71223E2513E00DCD162 /* edid-parse.c */; };
+ A7D8B1D023E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D123E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D223E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D323E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D423E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D523E2514200DCD162 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */; };
+ A7D8B1D623E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1D723E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1D823E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1D923E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1DA23E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1DB23E2514200DCD162 /* edid.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71423E2513E00DCD162 /* edid.h */; };
+ A7D8B1DC23E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1DD23E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1DE23E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1DF23E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1E023E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1E123E2514200DCD162 /* SDL_x11vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */; };
+ A7D8B1E223E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E323E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E423E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E523E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E623E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E723E2514200DCD162 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */; };
+ A7D8B1E823E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1E923E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1EA23E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1EB23E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1EC23E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1ED23E2514200DCD162 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71723E2513E00DCD162 /* SDL_x11window.h */; };
+ A7D8B1EE23E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1EF23E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1F023E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1F123E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1F223E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1F323E2514200DCD162 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */; };
+ A7D8B1F423E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1F523E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1F623E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1F723E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1F823E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1F923E2514200DCD162 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */; };
+ A7D8B1FA23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B1FB23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B1FC23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B1FD23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B1FE23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B1FF23E2514200DCD162 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */; };
+ A7D8B20023E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20123E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20223E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20323E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20423E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20523E2514200DCD162 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */; };
+ A7D8B20623E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20723E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20823E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20923E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20A23E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20B23E2514200DCD162 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */; };
+ A7D8B20C23E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B20D23E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B20E23E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B20F23E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B21023E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B21123E2514200DCD162 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */; };
+ A7D8B21223E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21323E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21423E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21523E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21623E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21723E2514200DCD162 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */; };
+ A7D8B21823E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21923E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21A23E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21B23E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21C23E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21D23E2514200DCD162 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */; };
+ A7D8B21E23E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B21F23E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B22023E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B22123E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B22223E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B22323E2514200DCD162 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72023E2513E00DCD162 /* SDL_x11video.h */; };
+ A7D8B22423E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22523E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22623E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22723E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22823E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22923E2514200DCD162 /* gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72323E2513E00DCD162 /* gl2ext.h */; };
+ A7D8B22A23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B22B23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B22C23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B22D23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B22E23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B22F23E2514200DCD162 /* gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72423E2513E00DCD162 /* gl2.h */; };
+ A7D8B23023E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23123E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23223E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23323E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23423E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23523E2514200DCD162 /* gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72523E2513E00DCD162 /* gl2platform.h */; };
+ A7D8B23623E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23723E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23823E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23923E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23A23E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23B23E2514200DCD162 /* khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72723E2513E00DCD162 /* khrplatform.h */; };
+ A7D8B23C23E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B23D23E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B23E23E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B23F23E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B24023E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B24123E2514200DCD162 /* egl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72923E2513E00DCD162 /* egl.h */; };
+ A7D8B24223E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24323E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24423E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24523E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24623E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24723E2514200DCD162 /* eglext.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72A23E2513E00DCD162 /* eglext.h */; };
+ A7D8B24823E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24923E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24A23E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24B23E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24C23E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24D23E2514200DCD162 /* eglplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72B23E2513E00DCD162 /* eglplatform.h */; };
+ A7D8B24E23E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B24F23E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B25023E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B25123E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B25223E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B25323E2514200DCD162 /* vk_layer.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72D23E2513E00DCD162 /* vk_layer.h */; };
+ A7D8B25423E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25523E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25623E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25723E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25823E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25923E2514200DCD162 /* vk_icd.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72E23E2513E00DCD162 /* vk_icd.h */; };
+ A7D8B25A23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B25B23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B25C23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B25D23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B25E23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B25F23E2514200DCD162 /* vulkan_vi.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */; };
+ A7D8B26023E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26123E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26223E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26323E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26423E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26523E2514200DCD162 /* vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73023E2513E00DCD162 /* vulkan.h */; };
+ A7D8B26623E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26723E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26823E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26923E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26A23E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26B23E2514200DCD162 /* vk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73123E2513E00DCD162 /* vk_platform.h */; };
+ A7D8B26C23E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B26D23E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B26E23E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B26F23E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B27023E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B27123E2514200DCD162 /* vulkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73223E2513E00DCD162 /* vulkan.hpp */; };
+ A7D8B27223E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27323E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27423E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27523E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27623E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27723E2514200DCD162 /* vulkan_fuchsia.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */; };
+ A7D8B27823E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27923E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27A23E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27B23E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27C23E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27D23E2514200DCD162 /* vulkan_wayland.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */; };
+ A7D8B27E23E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B27F23E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B28023E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B28123E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B28223E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B28323E2514200DCD162 /* vulkan_win32.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73523E2513E00DCD162 /* vulkan_win32.h */; };
+ A7D8B28423E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28523E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28623E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28723E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28823E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28923E2514200DCD162 /* vulkan_macos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73623E2513E00DCD162 /* vulkan_macos.h */; };
+ A7D8B28A23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B28B23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B28C23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B28D23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B28E23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B28F23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */; };
+ A7D8B29023E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29123E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29223E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29323E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29423E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29523E2514200DCD162 /* vulkan_xcb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */; };
+ A7D8B29623E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29723E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29823E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29923E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29A23E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29B23E2514200DCD162 /* vulkan_mir.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73923E2513E00DCD162 /* vulkan_mir.h */; };
+ A7D8B29C23E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B29D23E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B29E23E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B29F23E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B2A023E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B2A123E2514200DCD162 /* vulkan_xlib.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */; };
+ A7D8B2A223E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A323E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A423E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A523E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A623E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A723E2514200DCD162 /* vulkan_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */; };
+ A7D8B2A823E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2A923E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2AA23E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2AB23E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2AC23E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2AD23E2514200DCD162 /* vulkan_core.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73C23E2513E00DCD162 /* vulkan_core.h */; };
+ A7D8B2AE23E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2AF23E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2B023E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2B123E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2B223E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2B323E2514200DCD162 /* vk_sdk_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */; };
+ A7D8B2B423E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2B523E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2B623E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2B723E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2B823E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2B923E2514200DCD162 /* vulkan_android.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73E23E2513E00DCD162 /* vulkan_android.h */; };
+ A7D8B2BA23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2BB23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2BC23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2BD23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2BE23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2BF23E2514200DCD162 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */; };
+ A7D8B2C023E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B2C123E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B2C223E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B2C323E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B2C423E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B2C523E2514200DCD162 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */; };
+ A7D8B39823E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39923E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39A23E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39B23E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39C23E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39D23E2514200DCD162 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */; };
+ A7D8B39E23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B39F23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B3A023E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B3A123E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B3A223E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B3A323E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */; };
+ A7D8B3A423E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3A523E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3A623E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3A723E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3A823E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3A923E2514200DCD162 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */; };
+ A7D8B3AA23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3AB23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3AC23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3AD23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3AE23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3AF23E2514200DCD162 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76923E2513E00DCD162 /* SDL_shape.c */; };
+ A7D8B3B023E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B123E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B223E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B323E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B423E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B523E2514200DCD162 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */; };
+ A7D8B3B623E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3B723E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3B823E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3B923E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3BA23E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3BB23E2514200DCD162 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A76B23E2513E00DCD162 /* SDL_blit.h */; };
+ A7D8B3BF23E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C023E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C123E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C223E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C323E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C423E2514200DCD162 /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */; };
+ A7D8B3C823E2514200DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3C923E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3CA23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3CB23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3CC23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3CD23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */; };
+ A7D8B3CE23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3CF23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3D023E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3D123E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3D223E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3D323E2514300DCD162 /* yuv_rgb_std_func.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */; };
+ A7D8B3D423E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3D523E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3D623E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3D723E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3D823E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3D923E2514300DCD162 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77223E2513E00DCD162 /* yuv_rgb.h */; };
+ A7D8B3DA23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3DB23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3DC23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3DD23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3DE23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3DF23E2514300DCD162 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77323E2513E00DCD162 /* SDL_bmp.c */; };
+ A7D8B3E023E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E123E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E223E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E323E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E423E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E523E2514300DCD162 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */; };
+ A7D8B3E623E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3E723E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3E823E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3E923E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3EA23E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3EB23E2514300DCD162 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77723E2513E00DCD162 /* SDL_systhread.h */; };
+ A7D8B3EC23E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3ED23E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3EE23E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3EF23E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3F023E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3F123E2514300DCD162 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */; };
+ A7D8B3F223E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B3F323E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B3F423E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B3F523E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B3F623E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B3F723E2514300DCD162 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A77923E2513E00DCD162 /* SDL_thread.c */; };
+ A7D8B41C23E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B41D23E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B41E23E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B41F23E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B42023E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B42123E2514300DCD162 /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78223E2513E00DCD162 /* SDL_systls.c */; };
+ A7D8B42223E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42323E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42423E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42523E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42623E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42723E2514300DCD162 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78323E2513E00DCD162 /* SDL_syssem.c */; };
+ A7D8B42823E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42923E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42A23E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42B23E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42C23E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42D23E2514300DCD162 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */; };
+ A7D8B42E23E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B42F23E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B43023E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B43123E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B43223E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B43323E2514300DCD162 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78523E2513E00DCD162 /* SDL_syscond.c */; };
+ A7D8B43423E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43523E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43623E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43723E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43823E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43923E2514300DCD162 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78623E2513E00DCD162 /* SDL_systhread.c */; };
+ A7D8B43A23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B43B23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B43C23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B43D23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B43E23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B43F23E2514300DCD162 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */; };
+ A7D8B44023E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B44123E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B44223E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B44323E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B44423E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B44523E2514300DCD162 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */; };
+ A7D8B4AC23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4AD23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4AE23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4AF23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4B023E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4B123E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */; };
+ A7D8B4B223E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4B323E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4B423E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4B523E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4B623E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4B723E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B4C523E2514300DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8B4C623E2514300DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8B4C823E2514300DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8B4D123E2514300DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8B4D223E2514300DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8B4D423E2514300DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4DD23E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4DE23E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4DF23E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4E023E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4E123E2514300DCD162 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */; };
+ A7D8B4E423E2514300DCD162 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A7D8B4E623E2514300DCD162 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A7D8B4EA23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B4EC23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B4EE23E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B4EF23E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B4F023E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B4F123E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B4F223E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B4F323E2514300DCD162 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */; };
+ A7D8B53923E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53A23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53B23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53C23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53D23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53E23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */; };
+ A7D8B53F23E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54023E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54123E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54223E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54323E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54423E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */; };
+ A7D8B54523E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54623E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54723E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54823E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54923E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54A23E2514300DCD162 /* SDL_hidapijoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */; };
+ A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B54C23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B54D23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B54E23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B54F23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B55023E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */; };
+ A7D8B55123E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55223E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55323E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55423E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55523E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55623E2514300DCD162 /* SDL_hidapi_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */; };
+ A7D8B55723E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55823E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55923E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55A23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55B23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55C23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */; };
+ A7D8B55D23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B55E23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B55F23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B56023E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B56123E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B56223E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */; };
+ A7D8B56323E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56423E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56523E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56623E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56723E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56823E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */; };
+ A7D8B56F23E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57023E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57123E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57223E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57323E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57423E2514300DCD162 /* usb_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CB23E2513E00DCD162 /* usb_ids.h */; };
+ A7D8B57523E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57623E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57723E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57823E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57923E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57A23E2514300DCD162 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */; };
+ A7D8B57B23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B57C23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B57D23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B57E23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B57F23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B58023E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8B58123E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58223E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58323E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58423E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58523E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58623E2514300DCD162 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */; };
+ A7D8B58723E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B58823E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B58923E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B58A23E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B58B23E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B58C23E2514300DCD162 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */; };
+ A7D8B5B723E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5B823E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5B923E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5BA23E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5BB23E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5BC23E2514300DCD162 /* controller_type.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7D923E2513E00DCD162 /* controller_type.h */; };
+ A7D8B5BD23E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5BE23E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5BF23E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5C023E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5C123E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5C223E2514300DCD162 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */; };
+ A7D8B5C323E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C423E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C523E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C623E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C723E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C823E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */; };
+ A7D8B5C923E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CA23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CB23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CC23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CE23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */; };
+ A7D8B5CF23E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D023E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D123E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D223E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D323E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D423E2514300DCD162 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */; };
+ A7D8B5D523E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5D623E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5D723E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5D823E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5D923E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5DA23E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B5E723E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5E823E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5E923E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5EA23E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5EB23E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5EC23E2514300DCD162 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7E723E2513F00DCD162 /* SDL_power.c */; };
+ A7D8B5F323E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B5F423E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B5F523E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B5F623E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B5F723E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B5F823E2514300DCD162 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */; };
+ A7D8B61123E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61223E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61323E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61423E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61523E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61623E2514300DCD162 /* SDL_syspower.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */; };
+ A7D8B61723E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61823E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61923E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61A23E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61B23E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61C23E2514300DCD162 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */; };
+ A7D8B61D23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B61E23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B61F23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B62023E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B62123E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B62223E2514300DCD162 /* SDL_sysfilesystem.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */; };
+ A7D8B62F23E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B63023E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B63123E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B63223E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B63323E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B63423E2514300DCD162 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */; };
+ A7D8B75223E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75323E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75423E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75523E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75623E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75723E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75E23E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B75F23E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B76023E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B76123E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B76223E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B76323E2514300DCD162 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */; };
+ A7D8B76423E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76523E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76623E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76723E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76823E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76923E2514300DCD162 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86523E2513F00DCD162 /* SDL_mixer.c */; };
+ A7D8B76A23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B76B23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B76C23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B76D23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B76E23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B76F23E2514300DCD162 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A86623E2513F00DCD162 /* SDL_wave.c */; };
+ A7D8B79423E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79523E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79623E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79723E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79823E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79923E2514400DCD162 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */; };
+ A7D8B79A23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B79B23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B79C23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B79D23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B79E23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B79F23E2514400DCD162 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */; };
+ A7D8B7A023E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7A123E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7A223E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7A323E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7A423E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7A523E2514400DCD162 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */; };
+ A7D8B7B223E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B7B323E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B7B423E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B7B523E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B7B623E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B7B723E2514400DCD162 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */; };
+ A7D8B81823E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B81923E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B81A23E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B81B23E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B81C23E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B81D23E2514400DCD162 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */; };
+ A7D8B85A23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B85B23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B85C23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B85D23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B85E23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B85F23E2514400DCD162 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */; };
+ A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86123E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86223E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86323E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86423E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86523E2514400DCD162 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */; };
+ A7D8B86623E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86723E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86823E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86923E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86A23E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86B23E2514400DCD162 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */; };
+ A7D8B86C23E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B86D23E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B86E23E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B86F23E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B87023E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B87123E2514400DCD162 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8A223E2513F00DCD162 /* SDL_wave.h */; };
+ A7D8B8A223E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A323E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A423E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A523E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A623E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A723E2514400DCD162 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */; };
+ A7D8B8A823E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8A923E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8AA23E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8AB23E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8AC23E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8AD23E2514400DCD162 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */; };
+ A7D8B8C623E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8C723E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8C823E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8C923E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8CA23E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8CB23E2514400DCD162 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8B823E2513F00DCD162 /* SDL_audio.c */; };
+ A7D8B8CC23E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8CD23E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8CE23E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8CF23E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8D023E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8D123E2514400DCD162 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */; };
+ A7D8B8D223E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8D323E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8D423E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8D523E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8D623E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8D723E2514400DCD162 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */; };
+ A7D8B8E423E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B8E523E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B8E623E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B8E723E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B8E823E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B8E923E2514400DCD162 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8BF23E2513F00DCD162 /* SDL_error.c */; };
+ A7D8B94A23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B94B23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B94C23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B94D23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B94E23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B94F23E2514400DCD162 /* SDL_hints_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */; };
+ A7D8B95023E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95123E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95223E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95323E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95423E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95523E2514400DCD162 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D323E2514000DCD162 /* SDL_iconv.c */; };
+ A7D8B95623E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95723E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95823E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95923E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95A23E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95B23E2514400DCD162 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D423E2514000DCD162 /* SDL_getenv.c */; };
+ A7D8B95C23E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B95D23E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B95E23E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B95F23E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B96023E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B96123E2514400DCD162 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D523E2514000DCD162 /* SDL_string.c */; };
+ A7D8B96223E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96323E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96423E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96523E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96623E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96723E2514400DCD162 /* SDL_strtokr.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */; };
+ A7D8B96823E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96923E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96A23E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96B23E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96C23E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96D23E2514400DCD162 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D723E2514000DCD162 /* SDL_qsort.c */; };
+ A7D8B96E23E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B96F23E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B97023E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B97123E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B97223E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B97323E2514400DCD162 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */; };
+ A7D8B97423E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97523E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97623E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97723E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97823E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97923E2514400DCD162 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8D923E2514000DCD162 /* SDL_malloc.c */; };
+ A7D8B97A23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B97B23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B97C23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B97D23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B97E23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B97F23E2514400DCD162 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DB23E2514000DCD162 /* SDL_render.c */; };
+ A7D8B98023E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98123E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98223E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98323E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98423E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98523E2514400DCD162 /* SDL_d3dmath.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */; };
+ A7D8B98623E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98723E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98823E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98923E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98A23E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98B23E2514400DCD162 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */; };
+ A7D8B98C23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B98D23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B98E23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B98F23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B99023E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B99123E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */; };
+ A7D8B99223E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99323E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99423E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99523E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99623E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99723E2514400DCD162 /* SDL_shaders_metal.metal in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */; };
+ A7D8B99B23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B99C23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B99D23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B99E23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B99F23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B9A023E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */; };
+ A7D8B9A123E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9A223E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9A323E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9A423E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9A523E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9A623E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */; };
+ A7D8B9CB23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9CC23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9CD23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9CE23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9CF23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9D023E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */; };
+ A7D8B9D123E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D223E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D323E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D423E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D523E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D623E2514400DCD162 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */; };
+ A7D8B9D723E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9D823E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9D923E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9DA23E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9DB23E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9DC23E2514400DCD162 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */; };
+ A7D8B9DD23E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9DE23E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9DF23E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9E023E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9E123E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9E223E2514400DCD162 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */; };
+ A7D8B9E323E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E423E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E523E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E623E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E723E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E823E2514400DCD162 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F123E2514000DCD162 /* SDL_drawline.c */; };
+ A7D8B9E923E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9EA23E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9EB23E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9EC23E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9ED23E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9EE23E2514400DCD162 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F223E2514000DCD162 /* SDL_blendline.h */; };
+ A7D8B9EF23E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F023E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F123E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F223E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F323E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F423E2514400DCD162 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */; };
+ A7D8B9F523E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9F623E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9F723E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9F823E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9F923E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9FA23E2514400DCD162 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F423E2514000DCD162 /* SDL_rotate.c */; };
+ A7D8B9FB23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8B9FC23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8B9FD23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8B9FE23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8B9FF23E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8BA0023E2514400DCD162 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */; };
+ A7D8BA0123E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0223E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0323E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0423E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0523E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0623E2514400DCD162 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */; };
+ A7D8BA0723E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0823E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0923E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0A23E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0B23E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0C23E2514400DCD162 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F723E2514000DCD162 /* SDL_drawline.h */; };
+ A7D8BA0D23E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA0E23E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA0F23E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA1023E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA1123E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA1223E2514400DCD162 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */; };
+ A7D8BA1323E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1423E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1523E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1623E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1723E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1823E2514400DCD162 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */; };
+ A7D8BA1923E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1A23E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1B23E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1C23E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1D23E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1E23E2514400DCD162 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FA23E2514000DCD162 /* SDL_draw.h */; };
+ A7D8BA1F23E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2023E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2123E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2223E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2323E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2423E2514400DCD162 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */; };
+ A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2623E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2723E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2823E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2923E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2A23E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
+ A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA2C23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA2D23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA2E23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA2F23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA3023E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
+ A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3223E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3323E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3423E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3523E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3623E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
+ A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3823E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3923E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3A23E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3B23E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3C23E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
+ A7D8BA3D23E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA3E23E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA3F23E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA4023E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA4123E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA4223E2514400DCD162 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90123E2514000DCD162 /* SDL_render_gles.c */; };
+ A7D8BA4323E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4423E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4523E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4623E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4723E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4823E2514400DCD162 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */; };
+ A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4A23E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4B23E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4C23E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4D23E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4E23E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
+ A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5023E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5123E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5223E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5323E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5423E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
+ A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5623E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5723E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5823E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5923E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5A23E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
+ A7D8BA5B23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA5C23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA5D23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA5E23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA5F23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA6023E2514400DCD162 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */; };
+ A7D8BA7323E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7423E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7523E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7623E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7723E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7823E2514400DCD162 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */; };
+ A7D8BA7923E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7A23E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7B23E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7C23E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7D23E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7E23E2514400DCD162 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */; };
+ A7D8BA7F23E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8023E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8123E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8223E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8323E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8423E2514400DCD162 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */; };
+ A7D8BA8523E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8623E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8723E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8823E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8923E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8A23E2514400DCD162 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */; };
+ A7D8BA8B23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA8C23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA8D23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA8E23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA8F23E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA9023E2514400DCD162 /* s_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91223E2514000DCD162 /* s_sin.c */; };
+ A7D8BA9123E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9223E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9323E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9423E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9523E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9623E2514400DCD162 /* s_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91323E2514000DCD162 /* s_cos.c */; };
+ A7D8BA9723E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9823E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9923E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9A23E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9B23E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9C23E2514400DCD162 /* s_copysign.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91423E2514000DCD162 /* s_copysign.c */; };
+ A7D8BA9D23E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BA9E23E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BA9F23E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BAA023E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BAA123E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BAA223E2514400DCD162 /* s_fabs.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91523E2514000DCD162 /* s_fabs.c */; };
+ A7D8BAA323E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA423E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA523E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA623E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA723E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA823E2514400DCD162 /* k_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91623E2514000DCD162 /* k_rem_pio2.c */; };
+ A7D8BAA923E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAA23E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAB23E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAC23E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAD23E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAE23E2514400DCD162 /* k_sin.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91723E2514000DCD162 /* k_sin.c */; };
+ A7D8BAAF23E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB023E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB123E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB223E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB323E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB423E2514400DCD162 /* s_atan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91823E2514000DCD162 /* s_atan.c */; };
+ A7D8BAB523E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BAB623E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BAB723E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BAB823E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BAB923E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BABA23E2514400DCD162 /* k_cos.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91923E2514000DCD162 /* k_cos.c */; };
+ A7D8BABB23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BABC23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BABD23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BABE23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BABF23E2514400DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BAC023E2514500DCD162 /* s_scalbn.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91A23E2514000DCD162 /* s_scalbn.c */; };
+ A7D8BAC123E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC223E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC323E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC423E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC523E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC623E2514500DCD162 /* math_private.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A91B23E2514000DCD162 /* math_private.h */; };
+ A7D8BAC723E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BAC823E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BAC923E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BACA23E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BACB23E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BACC23E2514500DCD162 /* e_pow.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91C23E2514000DCD162 /* e_pow.c */; };
+ A7D8BACD23E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BACE23E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BACF23E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BAD023E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BAD123E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BAD223E2514500DCD162 /* e_atan2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91D23E2514000DCD162 /* e_atan2.c */; };
+ A7D8BAD323E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD423E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD523E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD623E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD723E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD823E2514500DCD162 /* s_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91E23E2514000DCD162 /* s_tan.c */; };
+ A7D8BAD923E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADA23E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADB23E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADC23E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADD23E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADE23E2514500DCD162 /* e_rem_pio2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */; };
+ A7D8BADF23E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE023E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE123E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE223E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE323E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE423E2514500DCD162 /* e_fmod.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92023E2514000DCD162 /* e_fmod.c */; };
+ A7D8BAE523E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAE623E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAE723E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAE823E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAE923E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAEA23E2514500DCD162 /* e_exp.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92123E2514000DCD162 /* e_exp.c */; };
+ A7D8BAEB23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAEC23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAED23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAEE23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAEF23E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAF023E2514500DCD162 /* e_log10.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92223E2514000DCD162 /* e_log10.c */; };
+ A7D8BAF123E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF223E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF323E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF423E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF523E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF623E2514500DCD162 /* e_log.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92323E2514000DCD162 /* e_log.c */; };
+ A7D8BAF723E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAF823E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAF923E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAFA23E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAFB23E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAFC23E2514500DCD162 /* e_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92423E2514000DCD162 /* e_sqrt.c */; };
+ A7D8BAFD23E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BAFE23E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BAFF23E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BB0023E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BB0123E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BB0223E2514500DCD162 /* s_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92523E2514000DCD162 /* s_floor.c */; };
+ A7D8BB0323E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0423E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0523E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0623E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0723E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0823E2514500DCD162 /* math_libm.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92623E2514000DCD162 /* math_libm.h */; };
+ A7D8BB0923E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0A23E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0B23E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0C23E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0D23E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0E23E2514500DCD162 /* k_tan.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92723E2514000DCD162 /* k_tan.c */; };
+ A7D8BB0F23E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1023E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1123E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1223E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1323E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1423E2514500DCD162 /* SDL_dataqueue.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */; };
+ A7D8BB1523E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1623E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1723E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1823E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1923E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1A23E2514500DCD162 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92A23E2514000DCD162 /* SDL_mouse.c */; };
+ A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB1C23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB1D23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB1E23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB1F23E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB2023E2514500DCD162 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */; };
+ A7D8BB2123E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2223E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2323E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2423E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2523E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2623E2514500DCD162 /* scancodes_windows.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92C23E2514000DCD162 /* scancodes_windows.h */; };
+ A7D8BB2723E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2823E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2923E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2A23E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2B23E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2C23E2514500DCD162 /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */; };
+ A7D8BB2D23E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB2E23E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB2F23E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB3023E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB3123E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB3223E2514500DCD162 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */; };
+ A7D8BB3323E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3423E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3523E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3623E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3723E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3823E2514500DCD162 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */; };
+ A7D8BB3923E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3A23E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3B23E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3C23E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3D23E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3E23E2514500DCD162 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */; };
+ A7D8BB3F23E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4023E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4123E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4223E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4323E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4423E2514500DCD162 /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */; };
+ A7D8BB4523E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4623E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4723E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4823E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4923E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4A23E2514500DCD162 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93223E2514000DCD162 /* blank_cursor.h */; };
+ A7D8BB4B23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB4C23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB4D23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB4E23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB4F23E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB5023E2514500DCD162 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93323E2514000DCD162 /* default_cursor.h */; };
+ A7D8BB5123E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5223E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5323E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5423E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5523E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5623E2514500DCD162 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93423E2514000DCD162 /* scancodes_darwin.h */; };
+ A7D8BB5723E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5823E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5923E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5A23E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5B23E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5C23E2514500DCD162 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93523E2514000DCD162 /* SDL_events.c */; };
+ A7D8BB5D23E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB5E23E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB5F23E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB6023E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB6123E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB6223E2514500DCD162 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93623E2514000DCD162 /* scancodes_linux.h */; };
+ A7D8BB6323E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6423E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6523E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6623E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6723E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6823E2514500DCD162 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93723E2514000DCD162 /* SDL_touch_c.h */; };
+ A7D8BB6923E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6A23E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6B23E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6C23E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6D23E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6E23E2514500DCD162 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93823E2514000DCD162 /* SDL_keyboard.c */; };
+ A7D8BB6F23E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7023E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7123E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7223E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7323E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7423E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */; };
+ A7D8BB7523E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7623E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7723E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7823E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7923E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7A23E2514500DCD162 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */; };
+ A7D8BB7B23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB7C23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB7D23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB7E23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB7F23E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB8023E2514500DCD162 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */; };
+ A7D8BB8123E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8223E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8323E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8423E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8523E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8623E2514500DCD162 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93C23E2514000DCD162 /* SDL_quit.c */; };
+ A7D8BB8723E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8823E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8923E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8A23E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8B23E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8C23E2514500DCD162 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */; };
+ A7D8BB8D23E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB8E23E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB8F23E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB9023E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB9123E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB9223E2514500DCD162 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A93E23E2514000DCD162 /* SDL_touch.c */; };
+ A7D8BB9323E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9423E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9523E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9623E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9723E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9823E2514500DCD162 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */; };
+ A7D8BB9923E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9A23E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9B23E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9C23E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9D23E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9E23E2514500DCD162 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94023E2514000DCD162 /* SDL_gesture.c */; };
+ A7D8BB9F23E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA023E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA123E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA223E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA323E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA423E2514500DCD162 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */; };
+ A7D8BBA523E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBA623E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBA723E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBA823E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBA923E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBAA23E2514500DCD162 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94223E2514000DCD162 /* SDL_events_c.h */; };
+ A7D8BBAB23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBAC23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBAD23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBAE23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBAF23E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBB023E2514500DCD162 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */; };
+ A7D8BBB123E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB223E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB323E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB423E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB523E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB623E2514500DCD162 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A94423E2514000DCD162 /* SDL_assert.c */; };
+ A7D8BBB723E254E400DCD162 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */; };
+ A7D8BBB823E254E400DCD162 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */; };
+ A7D8BBB923E2560500DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8BBBA23E2560600DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */; };
+ A7D8BBC723E2561500DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8BBCB23E2561600DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8BBCF23E2561600DCD162 /* SDL_steamcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */; };
+ A7D8BBD123E2574800DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8BBD223E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8BBD323E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8BBD423E2574800DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8BBD523E2574800DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8BBD623E2574800DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8BBD723E2574800DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8BBD823E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8BBD923E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8BBDA23E2574800DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8BBDB23E2574800DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8BBDC23E2574800DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8BBDE23E2574800DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8BBDF23E2574800DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8BBE023E2574800DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8BBE123E2574800DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8BBE223E2574800DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8BBE323E2574800DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8BBE423E2574800DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8BBE523E2574800DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8BBE623E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8BBE823E2574800DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8BBE923E2574800DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8BBEA23E2574800DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8BBEB23E2574800DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8BBEC23E2574800DCD162 /* keyinfotable.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62823E2513D00DCD162 /* keyinfotable.h */; };
+ A7D8BBED23E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */; };
+ A7D8BBEE23E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */; };
+ A7D8BBEF23E2574800DCD162 /* SDL_uikitclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */; };
+ A7D8BBF023E2574800DCD162 /* SDL_uikitclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */; };
+ A7D8BBF123E2574800DCD162 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */; };
+ A7D8BBF223E2574800DCD162 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */; };
+ A7D8BBF323E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */; };
+ A7D8BBF423E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */; };
+ A7D8BBF523E2574800DCD162 /* SDL_uikitmetalview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */; };
+ A7D8BBF623E2574800DCD162 /* SDL_uikitmetalview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */; };
+ A7D8BBF723E2574800DCD162 /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */; };
+ A7D8BBF823E2574800DCD162 /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */; };
+ A7D8BBF923E2574800DCD162 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */; };
+ A7D8BBFA23E2574800DCD162 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */; };
+ A7D8BBFB23E2574800DCD162 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */; };
+ A7D8BBFC23E2574800DCD162 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */; };
+ A7D8BBFD23E2574800DCD162 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */; };
+ A7D8BBFE23E2574800DCD162 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */; };
+ A7D8BBFF23E2574800DCD162 /* SDL_uikitview.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */; };
+ A7D8BC0023E2574800DCD162 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */; };
+ A7D8BC0123E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */; };
+ A7D8BC0223E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */; };
+ A7D8BC0323E2574800DCD162 /* SDL_uikitvulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */; };
+ A7D8BC0423E2574800DCD162 /* SDL_uikitvulkan.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */; };
+ A7D8BC0523E2574800DCD162 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */; };
+ A7D8BC0623E2574800DCD162 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */; };
+ A7D8BC0723E2590800DCD162 /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A5B023E2513D00DCD162 /* SDL_uikit_main.c */; };
AA7557FA1595D4D800BBD41B /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
AA7557FB1595D4D800BBD41B /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
AA7557FC1595D4D800BBD41B /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -595,17 +3822,7 @@
AA75585E1595D4D800BBD41B /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
AA75585F1595D4D800BBD41B /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
AA8167541F5E727800518735 /* SDL_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D4820431F0F10B400EDC31C /* SDL_vulkan.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AA9A7F111FB0206400FED37F /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */; };
- AA9A7F121FB0206400FED37F /* yuv_rgb.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F101FB0206300FED37F /* yuv_rgb.c */; };
- AA9A7F151FB0209D00FED37F /* SDL_yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9A7F131FB0209C00FED37F /* SDL_yuv.c */; };
- AA9A7F161FB0209D00FED37F /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */; };
- AA9E4093163BE51E007A2AD0 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9E4092163BE51E007A2AD0 /* SDL_x11messagebox.c */; };
- AA9E4094163BE51E007A2AD0 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9E4092163BE51E007A2AD0 /* SDL_x11messagebox.c */; };
AA9FF95A1637CBF9000DF050 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AABCC38D164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */; };
- AABCC38E164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */; };
- AABCC38F164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */; };
- AABCC390164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */; };
AAC070F9195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
AAC070FA195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
AAC070FB195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -623,114 +3840,10 @@
AAC07107195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; };
AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
- AADC5A431FDA035D00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; };
- AADC5A441FDA035D00960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; };
- AADC5A451FDA047900960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; };
- AADC5A461FDA047B00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; };
- AADC5A471FDA047E00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; };
- AADC5A481FDA048100960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; };
- AADC5A491FDA05C100960936 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */; };
- AADC5A4A1FDA05C200960936 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */; };
- AADC5A4B1FDA05CF00960936 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */; };
- AADC5A4C1FDA05CF00960936 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */; };
- AADC5A4D1FDA05D300960936 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */; };
- AADC5A4E1FDA05D400960936 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */; };
- AADC5A4F1FDA05E600960936 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */; };
- AADC5A501FDA05E600960936 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */; };
- BBFC088D164C6647003E6A99 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; };
- D55A1B81179F262300625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
- D55A1B82179F262300625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
- D55A1B83179F263500625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
- D55A1B84179F263600625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
- D55A1B85179F278E00625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
- D55A1B86179F278F00625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
DB0F489317C400E6008798C5 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB0F489417C400ED008798C5 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DB0F490817CA5292008798C5 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */; };
- DB0F490A17CA5293008798C5 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */; };
DB0F490B17CA57ED008798C5 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB0F490C17CA57ED008798C5 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 567E2F2017C44C35005F1892 /* SDL_filesystem.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DB313F7417554B71006C0E22 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD8912E6671700899322 /* SDL_diskaudio.h */; };
- DB313F7517554B71006C0E22 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */; };
- DB313F7617554B71006C0E22 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDA112E6671700899322 /* SDL_coreaudio.h */; };
- DB313F7717554B71006C0E22 /* SDL_audio_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB512E6671700899322 /* SDL_audio_c.h */; };
- DB313F7817554B71006C0E22 /* SDL_audiodev_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDB812E6671700899322 /* SDL_audiodev_c.h */; };
- DB313F7A17554B71006C0E22 /* SDL_sysaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC212E6671700899322 /* SDL_sysaudio.h */; };
- DB313F7B17554B71006C0E22 /* SDL_wave.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDC412E6671700899322 /* SDL_wave.h */; };
- DB313F7C17554B71006C0E22 /* blank_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD612E6671700899322 /* blank_cursor.h */; };
- DB313F7D17554B71006C0E22 /* default_cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD712E6671700899322 /* default_cursor.h */; };
- DB313F7E17554B71006C0E22 /* scancodes_darwin.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD812E6671700899322 /* scancodes_darwin.h */; };
- DB313F7F17554B71006C0E22 /* scancodes_linux.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDD912E6671700899322 /* scancodes_linux.h */; };
- DB313F8017554B71006C0E22 /* scancodes_xfree86.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDB12E6671700899322 /* scancodes_xfree86.h */; };
- DB313F8117554B71006C0E22 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDD12E6671700899322 /* SDL_clipboardevents_c.h */; };
- DB313F8217554B71006C0E22 /* SDL_events_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDDF12E6671700899322 /* SDL_events_c.h */; };
- DB313F8317554B71006C0E22 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE112E6671700899322 /* SDL_gesture_c.h */; };
- DB313F8417554B71006C0E22 /* SDL_keyboard_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE312E6671700899322 /* SDL_keyboard_c.h */; };
- DB313F8517554B71006C0E22 /* SDL_mouse_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE512E6671700899322 /* SDL_mouse_c.h */; };
- DB313F8617554B71006C0E22 /* SDL_sysevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE712E6671700899322 /* SDL_sysevents.h */; };
- DB313F8717554B71006C0E22 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDE912E6671700899322 /* SDL_touch_c.h */; };
- DB313F8817554B71006C0E22 /* SDL_windowevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEB12E6671700899322 /* SDL_windowevents_c.h */; };
- DB313F8917554B71006C0E22 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDEE12E6671700899322 /* SDL_rwopsbundlesupport.h */; };
- DB313F8A17554B71006C0E22 /* SDL_haptic_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFB12E6671700899322 /* SDL_haptic_c.h */; };
- DB313F8B17554B71006C0E22 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDFC12E6671700899322 /* SDL_syshaptic.h */; };
- DB313F8C17554B71006C0E22 /* SDL_sysjoystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE0812E6671700899322 /* SDL_sysjoystick_c.h */; };
- DB313F8D17554B71006C0E22 /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1712E6671700899322 /* SDL_joystick_c.h */; };
- DB313F8E17554B71006C0E22 /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE1812E6671700899322 /* SDL_sysjoystick.h */; };
- DB313F8F17554B71006C0E22 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5512E6671700899322 /* SDL_assert_c.h */; };
- DB313F9017554B71006C0E22 /* SDL_error_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE5812E6671700899322 /* SDL_error_c.h */; };
- DB313F9217554B71006C0E22 /* SDL_sysmutex_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8012E6671800899322 /* SDL_sysmutex_c.h */; };
- DB313F9317554B71006C0E22 /* SDL_systhread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8312E6671800899322 /* SDL_systhread_c.h */; };
- DB313F9417554B71006C0E22 /* SDL_systhread.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8B12E6671800899322 /* SDL_systhread.h */; };
- DB313F9517554B71006C0E22 /* SDL_thread_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFE8D12E6671800899322 /* SDL_thread_c.h */; };
- DB313F9617554B71006C0E22 /* SDL_timer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEA012E6671800899322 /* SDL_timer_c.h */; };
- DB313F9717554B71006C0E22 /* SDL_cocoaclipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC212E6671800899322 /* SDL_cocoaclipboard.h */; };
- DB313F9817554B71006C0E22 /* SDL_cocoaevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC412E6671800899322 /* SDL_cocoaevents.h */; };
- DB313F9917554B71006C0E22 /* SDL_cocoakeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC612E6671800899322 /* SDL_cocoakeyboard.h */; };
- DB313F9A17554B71006C0E22 /* SDL_cocoamodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEC812E6671800899322 /* SDL_cocoamodes.h */; };
- DB313F9B17554B71006C0E22 /* SDL_cocoamouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECA12E6671800899322 /* SDL_cocoamouse.h */; };
- DB313F9C17554B71006C0E22 /* SDL_cocoaopengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */; };
- DB313F9D17554B71006C0E22 /* SDL_cocoashape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFECE12E6671800899322 /* SDL_cocoashape.h */; };
- DB313F9E17554B71006C0E22 /* SDL_cocoavideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED012E6671800899322 /* SDL_cocoavideo.h */; };
- DB313F9F17554B71006C0E22 /* SDL_cocoawindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFED212E6671800899322 /* SDL_cocoawindow.h */; };
- DB313FA017554B71006C0E22 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */; };
- DB313FA117554B71006C0E22 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEED12E6671800899322 /* SDL_nullvideo.h */; };
- DB313FA217554B71006C0E22 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4F12E6671800899322 /* SDL_blit.h */; };
- DB313FA317554B71006C0E22 /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5412E6671800899322 /* SDL_blit_auto.h */; };
- DB313FA417554B71006C0E22 /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5612E6671800899322 /* SDL_blit_copy.h */; };
- DB313FA517554B71006C0E22 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5912E6671800899322 /* SDL_blit_slow.h */; };
- DB313FA617554B71006C0E22 /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF6612E6671800899322 /* SDL_pixels_c.h */; };
- DB313FA717554B71006C0E22 /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7012E6671800899322 /* SDL_RLEaccel_c.h */; };
- DB313FA817554B71006C0E22 /* SDL_shape_internals.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7212E6671800899322 /* SDL_shape_internals.h */; };
- DB313FA917554B71006C0E22 /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF7512E6671800899322 /* SDL_sysvideo.h */; };
- DB313FAA17554B71006C0E22 /* imKStoUCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFB912E6671800899322 /* imKStoUCS.h */; };
- DB313FAB17554B71006C0E22 /* SDL_x11clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBB12E6671800899322 /* SDL_x11clipboard.h */; };
- DB313FAC17554B71006C0E22 /* SDL_x11dyn.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBD12E6671800899322 /* SDL_x11dyn.h */; };
- DB313FAD17554B71006C0E22 /* SDL_x11events.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFBF12E6671800899322 /* SDL_x11events.h */; };
- DB313FAE17554B71006C0E22 /* SDL_x11keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC312E6671800899322 /* SDL_x11keyboard.h */; };
- DB313FAF17554B71006C0E22 /* SDL_x11modes.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC512E6671800899322 /* SDL_x11modes.h */; };
- DB313FB017554B71006C0E22 /* SDL_x11mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC712E6671800899322 /* SDL_x11mouse.h */; };
- DB313FB117554B71006C0E22 /* SDL_x11opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFC912E6671800899322 /* SDL_x11opengl.h */; };
- DB313FB217554B71006C0E22 /* SDL_x11opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCB12E6671800899322 /* SDL_x11opengles.h */; };
- DB313FB317554B71006C0E22 /* SDL_x11shape.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFCF12E6671800899322 /* SDL_x11shape.h */; };
- DB313FB417554B71006C0E22 /* SDL_x11sym.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD012E6671800899322 /* SDL_x11sym.h */; };
- DB313FB517554B71006C0E22 /* SDL_x11touch.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD212E6671800899322 /* SDL_x11touch.h */; };
- DB313FB617554B71006C0E22 /* SDL_x11video.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD412E6671800899322 /* SDL_x11video.h */; };
- DB313FB717554B71006C0E22 /* SDL_x11window.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFFD612E6671800899322 /* SDL_x11window.h */; };
- DB313FB817554B71006C0E22 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 041B2C9F12FA0D680087D585 /* SDL_sysrender.h */; };
- DB313FBA17554B71006C0E22 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409B8F12FA97ED00FB9AA8 /* SDL_yuv_sw_c.h */; };
- DB313FBB17554B71006C0E22 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */; };
- DB313FBC17554B71006C0E22 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */; };
- DB313FBD17554B71006C0E22 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804012FB74A200FC43C0 /* SDL_blendline.h */; };
- DB313FBE17554B71006C0E22 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */; };
- DB313FBF17554B71006C0E22 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804312FB74A200FC43C0 /* SDL_draw.h */; };
- DB313FC017554B71006C0E22 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804512FB74A200FC43C0 /* SDL_drawline.h */; };
- DB313FC117554B71006C0E22 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */; };
- DB313FC217554B71006C0E22 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC1A12FE1BCB004C9285 /* SDL_render_sw_c.h */; };
- DB313FC317554B71006C0E22 /* SDL_x11framebuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC5912FE1C60004C9285 /* SDL_x11framebuffer.h */; };
- DB313FC417554B71006C0E22 /* SDL_glfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */; };
- DB313FC517554B71006C0E22 /* SDL_shaders_gl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0435673D1303160F00BA5428 /* SDL_shaders_gl.h */; };
- DB313FC617554B71006C0E22 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AC9159367B7005138DD /* SDL_rotate.h */; };
- DB313FC717554B71006C0E22 /* SDL_x11xinput2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628AD0159367F2005138DD /* SDL_x11xinput2.h */; };
DB313FC817554B71006C0E22 /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C71595D4D800BBD41B /* begin_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB313FC917554B71006C0E22 /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C81595D4D800BBD41B /* close_code.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB313FCA17554B71006C0E22 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557C91595D4D800BBD41B /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -781,148 +3894,18 @@
DB313FF717554B71006C0E22 /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F71595D4D800BBD41B /* SDL_version.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB313FF817554B71006C0E22 /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F81595D4D800BBD41B /* SDL_video.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB313FF917554B71006C0E22 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7557F91595D4D800BBD41B /* SDL.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DB313FFA17554B71006C0E22 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */; };
DB313FFB17554B71006C0E22 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB313FFC17554B71006C0E22 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DB313FFE17554B71006C0E22 /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7412E6671700899322 /* SDL_atomic.c */; };
- DB313FFF17554B71006C0E22 /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD7512E6671700899322 /* SDL_spinlock.c */; };
- DB31400017554B71006C0E22 /* SDL_diskaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD8812E6671700899322 /* SDL_diskaudio.c */; };
- DB31400117554B71006C0E22 /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFD9412E6671700899322 /* SDL_dummyaudio.c */; };
- DB31400317554B71006C0E22 /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB412E6671700899322 /* SDL_audio.c */; };
- DB31400417554B71006C0E22 /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB612E6671700899322 /* SDL_audiocvt.c */; };
- DB31400517554B71006C0E22 /* SDL_audiodev.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDB712E6671700899322 /* SDL_audiodev.c */; };
- DB31400617554B71006C0E22 /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBA12E6671700899322 /* SDL_audiotypecvt.c */; };
- DB31400717554B71006C0E22 /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDBB12E6671700899322 /* SDL_mixer.c */; };
- DB31400817554B71006C0E22 /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDC312E6671700899322 /* SDL_wave.c */; };
- DB31400917554B71006C0E22 /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDD412E6671700899322 /* SDL_cpuinfo.c */; };
- DB31400A17554B71006C0E22 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDC12E6671700899322 /* SDL_clipboardevents.c */; };
- DB31400B17554B71006C0E22 /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDDE12E6671700899322 /* SDL_events.c */; };
- DB31400C17554B71006C0E22 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */; };
- DB31400D17554B71006C0E22 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE012E6671700899322 /* SDL_gesture.c */; };
- DB31400E17554B71006C0E22 /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE212E6671700899322 /* SDL_keyboard.c */; };
- DB31400F17554B71006C0E22 /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE412E6671700899322 /* SDL_mouse.c */; };
- DB31401017554B71006C0E22 /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE612E6671700899322 /* SDL_quit.c */; };
- DB31401117554B71006C0E22 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDE812E6671700899322 /* SDL_touch.c */; };
- DB31401217554B71006C0E22 /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEA12E6671700899322 /* SDL_windowevents.c */; };
- DB31401317554B71006C0E22 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDEF12E6671700899322 /* SDL_rwopsbundlesupport.m */; };
- DB31401417554B71006C0E22 /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF012E6671700899322 /* SDL_rwops.c */; };
- DB31401517554B71006C0E22 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDF312E6671700899322 /* SDL_syshaptic.c */; };
- DB31401617554B71006C0E22 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFDFA12E6671700899322 /* SDL_haptic.c */; };
- DB31401717554B71006C0E22 /* SDL_sysjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE0712E6671700899322 /* SDL_sysjoystick.c */; };
- DB31401817554B71006C0E22 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; };
- DB31401917554B71006C0E22 /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE1612E6671700899322 /* SDL_joystick.c */; };
- DB31401A17554B71006C0E22 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE3312E6671700899322 /* SDL_sysloadso.c */; };
- DB31401B17554B71006C0E22 /* SDL_syspower.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4B12E6671700899322 /* SDL_syspower.c */; };
- DB31401C17554B71006C0E22 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE4E12E6671700899322 /* SDL_power.c */; };
- DB31401D17554B71006C0E22 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5612E6671700899322 /* SDL_assert.c */; };
- DB31401E17554B71006C0E22 /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5912E6671700899322 /* SDL_error.c */; };
- DB31402017554B71006C0E22 /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5C12E6671700899322 /* SDL.c */; };
- DB31402117554B71006C0E22 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5E12E6671700899322 /* SDL_getenv.c */; };
- DB31402217554B71006C0E22 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE5F12E6671700899322 /* SDL_iconv.c */; };
- DB31402317554B71006C0E22 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6012E6671700899322 /* SDL_malloc.c */; };
- DB31402417554B71006C0E22 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6112E6671700899322 /* SDL_qsort.c */; };
- DB31402517554B71006C0E22 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6212E6671700899322 /* SDL_stdlib.c */; };
- DB31402617554B71006C0E22 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE6312E6671700899322 /* SDL_string.c */; };
- DB31402717554B71006C0E22 /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7E12E6671800899322 /* SDL_syscond.c */; };
- DB31402817554B71006C0E22 /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE7F12E6671800899322 /* SDL_sysmutex.c */; };
- DB31402917554B71006C0E22 /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8112E6671800899322 /* SDL_syssem.c */; };
- DB31402A17554B71006C0E22 /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8212E6671800899322 /* SDL_systhread.c */; };
- DB31402B17554B71006C0E22 /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE8C12E6671800899322 /* SDL_thread.c */; };
- DB31402C17554B71006C0E22 /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFE9F12E6671800899322 /* SDL_timer.c */; };
- DB31402D17554B71006C0E22 /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEA212E6671800899322 /* SDL_systimer.c */; };
- DB31402E17554B71006C0E22 /* SDL_cocoaclipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC312E6671800899322 /* SDL_cocoaclipboard.m */; };
- DB31402F17554B71006C0E22 /* SDL_cocoaevents.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC512E6671800899322 /* SDL_cocoaevents.m */; };
- DB31403017554B71006C0E22 /* SDL_cocoakeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC712E6671800899322 /* SDL_cocoakeyboard.m */; };
- DB31403117554B71006C0E22 /* SDL_cocoamodes.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEC912E6671800899322 /* SDL_cocoamodes.m */; };
- DB31403217554B71006C0E22 /* SDL_cocoamouse.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECB12E6671800899322 /* SDL_cocoamouse.m */; };
- DB31403317554B71006C0E22 /* SDL_cocoaopengl.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */; };
- DB31403417554B71006C0E22 /* SDL_cocoashape.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFECF12E6671800899322 /* SDL_cocoashape.m */; };
- DB31403517554B71006C0E22 /* SDL_cocoavideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED112E6671800899322 /* SDL_cocoavideo.m */; };
- DB31403617554B71006C0E22 /* SDL_cocoawindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFED312E6671800899322 /* SDL_cocoawindow.m */; };
- DB31403717554B71006C0E22 /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEE812E6671800899322 /* SDL_nullevents.c */; };
- DB31403817554B71006C0E22 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */; };
- DB31403917554B71006C0E22 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4E12E6671800899322 /* SDL_blit.c */; };
- DB31403A17554B71006C0E22 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5012E6671800899322 /* SDL_blit_0.c */; };
- DB31403B17554B71006C0E22 /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5112E6671800899322 /* SDL_blit_1.c */; };
- DB31403C17554B71006C0E22 /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5212E6671800899322 /* SDL_blit_A.c */; };
- DB31403D17554B71006C0E22 /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5312E6671800899322 /* SDL_blit_auto.c */; };
- DB31403E17554B71006C0E22 /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5512E6671800899322 /* SDL_blit_copy.c */; };
- DB31403F17554B71006C0E22 /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5712E6671800899322 /* SDL_blit_N.c */; };
- DB31404017554B71006C0E22 /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5812E6671800899322 /* SDL_blit_slow.c */; };
- DB31404117554B71006C0E22 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5A12E6671800899322 /* SDL_bmp.c */; };
- DB31404217554B71006C0E22 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5B12E6671800899322 /* SDL_clipboard.c */; };
- DB31404317554B71006C0E22 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6012E6671800899322 /* SDL_fillrect.c */; };
- DB31404417554B71006C0E22 /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6512E6671800899322 /* SDL_pixels.c */; };
- DB31404517554B71006C0E22 /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6712E6671800899322 /* SDL_rect.c */; };
- DB31404617554B71006C0E22 /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6F12E6671800899322 /* SDL_RLEaccel.c */; };
- DB31404717554B71006C0E22 /* SDL_shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7112E6671800899322 /* SDL_shape.c */; };
- DB31404817554B71006C0E22 /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7312E6671800899322 /* SDL_stretch.c */; };
- DB31404917554B71006C0E22 /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7412E6671800899322 /* SDL_surface.c */; };
- DB31404A17554B71006C0E22 /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF7612E6671800899322 /* SDL_video.c */; };
- DB31404B17554B71006C0E22 /* imKStoUCS.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFB812E6671800899322 /* imKStoUCS.c */; };
- DB31404C17554B71006C0E22 /* SDL_x11clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBA12E6671800899322 /* SDL_x11clipboard.c */; };
- DB31404D17554B71006C0E22 /* SDL_x11dyn.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBC12E6671800899322 /* SDL_x11dyn.c */; };
- DB31404E17554B71006C0E22 /* SDL_x11events.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFBE12E6671800899322 /* SDL_x11events.c */; };
- DB31404F17554B71006C0E22 /* SDL_x11keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC212E6671800899322 /* SDL_x11keyboard.c */; };
- DB31405017554B71006C0E22 /* SDL_x11modes.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC412E6671800899322 /* SDL_x11modes.c */; };
- DB31405117554B71006C0E22 /* SDL_x11mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC612E6671800899322 /* SDL_x11mouse.c */; };
- DB31405217554B71006C0E22 /* SDL_x11opengl.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFC812E6671800899322 /* SDL_x11opengl.c */; };
- DB31405317554B71006C0E22 /* SDL_x11opengles.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCA12E6671800899322 /* SDL_x11opengles.c */; };
- DB31405417554B71006C0E22 /* SDL_x11shape.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFCE12E6671800899322 /* SDL_x11shape.c */; };
- DB31405517554B71006C0E22 /* SDL_x11touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD112E6671800899322 /* SDL_x11touch.c */; };
- DB31405617554B71006C0E22 /* SDL_x11video.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD312E6671800899322 /* SDL_x11video.c */; };
- DB31405717554B71006C0E22 /* SDL_x11window.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFFD512E6671800899322 /* SDL_x11window.c */; };
- DB31405817554B71006C0E22 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = 041B2C9E12FA0D680087D585 /* SDL_render.c */; };
- DB31405A17554B71006C0E22 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409B9012FA97ED00FB9AA8 /* SDL_yuv_sw.c */; };
- DB31405B17554B71006C0E22 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */; };
- DB31405C17554B71006C0E22 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */; };
- DB31405D17554B71006C0E22 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */; };
- DB31405E17554B71006C0E22 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */; };
- DB31405F17554B71006C0E22 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804412FB74A200FC43C0 /* SDL_drawline.c */; };
- DB31406017554B71006C0E22 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */; };
- DB31406117554B71006C0E22 /* SDL_render_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1712FE1BBA004C9285 /* SDL_render_gl.c */; };
- DB31406217554B71006C0E22 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC1B12FE1BCB004C9285 /* SDL_render_sw.c */; };
- DB31406317554B71006C0E22 /* SDL_x11framebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5812FE1C60004C9285 /* SDL_x11framebuffer.c */; };
- DB31406417554B71006C0E22 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5E12FE1C75004C9285 /* SDL_hints.c */; };
- DB31406517554B71006C0E22 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BAC0C71300C2160055DE28 /* SDL_log.c */; };
- DB31406617554B71006C0E22 /* SDL_shaders_gl.c in Sources */ = {isa = PBXBuildFile; fileRef = 0435673C1303160F00BA5428 /* SDL_shaders_gl.c */; };
- DB31406717554B71006C0E22 /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628AC8159367B7005138DD /* SDL_rotate.c */; };
- DB31406817554B71006C0E22 /* SDL_x11xinput2.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628ACF159367F2005138DD /* SDL_x11xinput2.c */; };
- DB31406917554B71006C0E22 /* SDL_x11messagebox.c in Sources */ = {isa = PBXBuildFile; fileRef = AA9E4092163BE51E007A2AD0 /* SDL_x11messagebox.c */; };
- DB31406A17554B71006C0E22 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */; };
DB31406E17554B71006C0E22 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; };
DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; };
DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; };
- DB31408B17554D37006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; };
DB31408D17554D3C006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; };
- F30D9C84212BC94F0047DF2E /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C81212BC94E0047DF2E /* SDL_sensor_c.h */; };
- F30D9C85212BC94F0047DF2E /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C81212BC94E0047DF2E /* SDL_sensor_c.h */; };
- F30D9C86212BC94F0047DF2E /* SDL_sensor_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C81212BC94E0047DF2E /* SDL_sensor_c.h */; };
- F30D9C87212BC94F0047DF2E /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C82212BC94F0047DF2E /* SDL_syssensor.h */; };
- F30D9C88212BC94F0047DF2E /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C82212BC94F0047DF2E /* SDL_syssensor.h */; };
- F30D9C89212BC94F0047DF2E /* SDL_syssensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C82212BC94F0047DF2E /* SDL_syssensor.h */; };
- F30D9C8A212BC94F0047DF2E /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C83212BC94F0047DF2E /* SDL_sensor.c */; };
- F30D9C8B212BC94F0047DF2E /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C83212BC94F0047DF2E /* SDL_sensor.c */; };
- F30D9C8C212BC94F0047DF2E /* SDL_sensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C83212BC94F0047DF2E /* SDL_sensor.c */; };
- F30D9C90212CABDC0047DF2E /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C8E212CABDB0047DF2E /* SDL_dummysensor.h */; };
- F30D9C91212CABDC0047DF2E /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C8E212CABDB0047DF2E /* SDL_dummysensor.h */; };
- F30D9C92212CABDC0047DF2E /* SDL_dummysensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9C8E212CABDB0047DF2E /* SDL_dummysensor.h */; };
- F30D9C93212CABDC0047DF2E /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C8F212CABDB0047DF2E /* SDL_dummysensor.c */; };
- F30D9C94212CABDC0047DF2E /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C8F212CABDB0047DF2E /* SDL_dummysensor.c */; };
- F30D9C95212CABDC0047DF2E /* SDL_dummysensor.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9C8F212CABDB0047DF2E /* SDL_dummysensor.c */; };
- F30D9CCD212EB4810047DF2E /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9CCB212EB4810047DF2E /* SDL_displayevents_c.h */; };
- F30D9CCE212EB4810047DF2E /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9CCB212EB4810047DF2E /* SDL_displayevents_c.h */; };
- F30D9CCF212EB4810047DF2E /* SDL_displayevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = F30D9CCB212EB4810047DF2E /* SDL_displayevents_c.h */; };
- F30D9CD0212EB4810047DF2E /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9CCC212EB4810047DF2E /* SDL_displayevents.c */; };
- F30D9CD1212EB4810047DF2E /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9CCC212EB4810047DF2E /* SDL_displayevents.c */; };
- F30D9CD2212EB4810047DF2E /* SDL_displayevents.c in Sources */ = {isa = PBXBuildFile; fileRef = F30D9CCC212EB4810047DF2E /* SDL_displayevents.c */; };
F3950CD8212BC88D00F51292 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
F3950CD9212BC88D00F51292 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
F3950CDA212BC88D00F51292 /* SDL_sensor.h in Headers */ = {isa = PBXBuildFile; fileRef = F3950CD7212BC88D00F51292 /* SDL_sensor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ FA24348B21D41FFB00B8918A /* SDL_metal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA24348A21D41FFB00B8918A /* SDL_metal.h */; settings = {ATTRIBUTES = (Public, ); }; };
FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
- FA73671E19A54140004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
FA73671F19A54144004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; };
- FABA34C71D8B5DB100915323 /* SDL_coreaudio.m in Sources */ = {isa = PBXBuildFile; fileRef = FABA34C61D8B5DB100915323 /* SDL_coreaudio.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -933,8 +3916,51 @@
remoteGlobalIDString = BECDF5FE0761BA81005FE872;
remoteInfo = "Framework (Upgraded)";
};
+ F3190016240CA3BA00ED104F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = A75FDB8023E4C74400529352;
+ remoteInfo = hidapi;
+ };
/* End PBXContainerItemProxy section */
+/* Begin PBXCopyFilesBuildPhase section */
+ A75FDB9C23E4CAEF00529352 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ A75FDB9B23E4CAEF00529352 /* hidapi.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB9F23E4CAFA00529352 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ A75FDB9E23E4CAFA00529352 /* hidapi.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDBA223E4CAFF00529352 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ A75FDBA123E4CAFF00529352 /* hidapi.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
0073179D0858DECD00B2BC32 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
0073179F0858DECD00B2BC32 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
@@ -942,230 +3968,420 @@
00794D3F09D0C461003FC8A1 /* License.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = License.txt; sourceTree = "<group>"; };
00CFA89C106B4BA100758660 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; };
00D0D08310675DD9004B05EF /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
- 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glfuncs.h; sourceTree = "<group>"; };
- 041B2C9E12FA0D680087D585 /* SDL_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render.c; sourceTree = "<group>"; };
- 041B2C9F12FA0D680087D585 /* SDL_sysrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysrender.h; sourceTree = "<group>"; };
- 0435673C1303160F00BA5428 /* SDL_shaders_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gl.c; sourceTree = "<group>"; };
- 0435673D1303160F00BA5428 /* SDL_shaders_gl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gl.h; sourceTree = "<group>"; };
- 04409B8F12FA97ED00FB9AA8 /* SDL_yuv_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_sw_c.h; sourceTree = "<group>"; };
- 04409B9012FA97ED00FB9AA8 /* SDL_yuv_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_sw.c; sourceTree = "<group>"; };
- 0442EC1712FE1BBA004C9285 /* SDL_render_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gl.c; sourceTree = "<group>"; };
- 0442EC1A12FE1BCB004C9285 /* SDL_render_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_render_sw_c.h; sourceTree = "<group>"; };
- 0442EC1B12FE1BCB004C9285 /* SDL_render_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_sw.c; sourceTree = "<group>"; };
- 0442EC5812FE1C60004C9285 /* SDL_x11framebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11framebuffer.c; sourceTree = "<group>"; };
- 0442EC5912FE1C60004C9285 /* SDL_x11framebuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11framebuffer.h; sourceTree = "<group>"; };
- 0442EC5E12FE1C75004C9285 /* SDL_hints.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hints.c; sourceTree = "<group>"; };
- 04BAC0C71300C2160055DE28 /* SDL_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_log.c; sourceTree = "<group>"; };
- 04BDFD7412E6671700899322 /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = "<group>"; };
- 04BDFD7512E6671700899322 /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = "<group>"; };
- 04BDFD8812E6671700899322 /* SDL_diskaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_diskaudio.c; sourceTree = "<group>"; };
- 04BDFD8912E6671700899322 /* SDL_diskaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_diskaudio.h; sourceTree = "<group>"; };
- 04BDFD9412E6671700899322 /* SDL_dummyaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummyaudio.c; sourceTree = "<group>"; };
- 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummyaudio.h; sourceTree = "<group>"; };
- 04BDFDA112E6671700899322 /* SDL_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coreaudio.h; sourceTree = "<group>"; };
- 04BDFDB412E6671700899322 /* SDL_audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audio.c; sourceTree = "<group>"; };
- 04BDFDB512E6671700899322 /* SDL_audio_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_c.h; sourceTree = "<group>"; };
- 04BDFDB612E6671700899322 /* SDL_audiocvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiocvt.c; sourceTree = "<group>"; };
- 04BDFDB712E6671700899322 /* SDL_audiodev.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiodev.c; sourceTree = "<group>"; };
- 04BDFDB812E6671700899322 /* SDL_audiodev_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audiodev_c.h; sourceTree = "<group>"; };
- 04BDFDBA12E6671700899322 /* SDL_audiotypecvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiotypecvt.c; sourceTree = "<group>"; };
- 04BDFDBB12E6671700899322 /* SDL_mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mixer.c; sourceTree = "<group>"; };
- 04BDFDC212E6671700899322 /* SDL_sysaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysaudio.h; sourceTree = "<group>"; };
- 04BDFDC312E6671700899322 /* SDL_wave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_wave.c; sourceTree = "<group>"; };
- 04BDFDC412E6671700899322 /* SDL_wave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_wave.h; sourceTree = "<group>"; };
- 04BDFDD412E6671700899322 /* SDL_cpuinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_cpuinfo.c; sourceTree = "<group>"; };
- 04BDFDD612E6671700899322 /* blank_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blank_cursor.h; sourceTree = "<group>"; };
- 04BDFDD712E6671700899322 /* default_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default_cursor.h; sourceTree = "<group>"; };
- 04BDFDD812E6671700899322 /* scancodes_darwin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_darwin.h; sourceTree = "<group>"; };
- 04BDFDD912E6671700899322 /* scancodes_linux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_linux.h; sourceTree = "<group>"; };
- 04BDFDDB12E6671700899322 /* scancodes_xfree86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_xfree86.h; sourceTree = "<group>"; };
- 04BDFDDC12E6671700899322 /* SDL_clipboardevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboardevents.c; sourceTree = "<group>"; };
- 04BDFDDD12E6671700899322 /* SDL_clipboardevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboardevents_c.h; sourceTree = "<group>"; };
- 04BDFDDE12E6671700899322 /* SDL_events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_events.c; sourceTree = "<group>"; };
- 04BDFDDF12E6671700899322 /* SDL_events_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events_c.h; sourceTree = "<group>"; };
- 04BDFDE012E6671700899322 /* SDL_gesture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gesture.c; sourceTree = "<group>"; };
- 04BDFDE112E6671700899322 /* SDL_gesture_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gesture_c.h; sourceTree = "<group>"; };
- 04BDFDE212E6671700899322 /* SDL_keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_keyboard.c; sourceTree = "<group>"; };
- 04BDFDE312E6671700899322 /* SDL_keyboard_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard_c.h; sourceTree = "<group>"; };
- 04BDFDE412E6671700899322 /* SDL_mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mouse.c; sourceTree = "<group>"; };
- 04BDFDE512E6671700899322 /* SDL_mouse_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse_c.h; sourceTree = "<group>"; };
- 04BDFDE612E6671700899322 /* SDL_quit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_quit.c; sourceTree = "<group>"; };
- 04BDFDE712E6671700899322 /* SDL_sysevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysevents.h; sourceTree = "<group>"; };
- 04BDFDE812E6671700899322 /* SDL_touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_touch.c; sourceTree = "<group>"; };
- 04BDFDE912E6671700899322 /* SDL_touch_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch_c.h; sourceTree = "<group>"; };
- 04BDFDEA12E6671700899322 /* SDL_windowevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_windowevents.c; sourceTree = "<group>"; };
- 04BDFDEB12E6671700899322 /* SDL_windowevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_windowevents_c.h; sourceTree = "<group>"; };
- 04BDFDEE12E6671700899322 /* SDL_rwopsbundlesupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwopsbundlesupport.h; sourceTree = "<group>"; };
- 04BDFDEF12E6671700899322 /* SDL_rwopsbundlesupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_rwopsbundlesupport.m; sourceTree = "<group>"; };
- 04BDFDF012E6671700899322 /* SDL_rwops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rwops.c; sourceTree = "<group>"; };
- 04BDFDF312E6671700899322 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = "<group>"; };
- 04BDFDFA12E6671700899322 /* SDL_haptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_haptic.c; sourceTree = "<group>"; };
- 04BDFDFB12E6671700899322 /* SDL_haptic_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_haptic_c.h; sourceTree = "<group>"; };
- 04BDFDFC12E6671700899322 /* SDL_syshaptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic.h; sourceTree = "<group>"; };
- 04BDFE0712E6671700899322 /* SDL_sysjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysjoystick.c; sourceTree = "<group>"; };
- 04BDFE0812E6671700899322 /* SDL_sysjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick_c.h; sourceTree = "<group>"; };
- 04BDFE1612E6671700899322 /* SDL_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_joystick.c; sourceTree = "<group>"; };
- 04BDFE1712E6671700899322 /* SDL_joystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick_c.h; sourceTree = "<group>"; };
- 04BDFE1812E6671700899322 /* SDL_sysjoystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick.h; sourceTree = "<group>"; };
- 04BDFE3312E6671700899322 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = "<group>"; };
- 04BDFE4B12E6671700899322 /* SDL_syspower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syspower.c; sourceTree = "<group>"; };
- 04BDFE4E12E6671700899322 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_power.c; sourceTree = "<group>"; };
- 04BDFE5512E6671700899322 /* SDL_assert_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert_c.h; sourceTree = "<group>"; };
- 04BDFE5612E6671700899322 /* SDL_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_assert.c; sourceTree = "<group>"; };
- 04BDFE5812E6671700899322 /* SDL_error_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_error_c.h; sourceTree = "<group>"; };
- 04BDFE5912E6671700899322 /* SDL_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_error.c; sourceTree = "<group>"; };
- 04BDFE5C12E6671700899322 /* SDL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL.c; sourceTree = "<group>"; };
- 04BDFE5E12E6671700899322 /* SDL_getenv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_getenv.c; sourceTree = "<group>"; };
- 04BDFE5F12E6671700899322 /* SDL_iconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iconv.c; sourceTree = "<group>"; };
- 04BDFE6012E6671700899322 /* SDL_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_malloc.c; sourceTree = "<group>"; };
- 04BDFE6112E6671700899322 /* SDL_qsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_qsort.c; sourceTree = "<group>"; };
- 04BDFE6212E6671700899322 /* SDL_stdlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stdlib.c; sourceTree = "<group>"; };
- 04BDFE6312E6671700899322 /* SDL_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_string.c; sourceTree = "<group>"; };
- 04BDFE7E12E6671800899322 /* SDL_syscond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syscond.c; sourceTree = "<group>"; };
- 04BDFE7F12E6671800899322 /* SDL_sysmutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysmutex.c; sourceTree = "<group>"; };
- 04BDFE8012E6671800899322 /* SDL_sysmutex_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysmutex_c.h; sourceTree = "<group>"; };
- 04BDFE8112E6671800899322 /* SDL_syssem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syssem.c; sourceTree = "<group>"; };
- 04BDFE8212E6671800899322 /* SDL_systhread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systhread.c; sourceTree = "<group>"; };
- 04BDFE8312E6671800899322 /* SDL_systhread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread_c.h; sourceTree = "<group>"; };
- 04BDFE8B12E6671800899322 /* SDL_systhread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread.h; sourceTree = "<group>"; };
- 04BDFE8C12E6671800899322 /* SDL_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_thread.c; sourceTree = "<group>"; };
- 04BDFE8D12E6671800899322 /* SDL_thread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread_c.h; sourceTree = "<group>"; };
- 04BDFE9F12E6671800899322 /* SDL_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_timer.c; sourceTree = "<group>"; };
- 04BDFEA012E6671800899322 /* SDL_timer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer_c.h; sourceTree = "<group>"; };
- 04BDFEA212E6671800899322 /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = "<group>"; };
- 04BDFEC212E6671800899322 /* SDL_cocoaclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaclipboard.h; sourceTree = "<group>"; };
- 04BDFEC312E6671800899322 /* SDL_cocoaclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaclipboard.m; sourceTree = "<group>"; };
- 04BDFEC412E6671800899322 /* SDL_cocoaevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaevents.h; sourceTree = "<group>"; };
- 04BDFEC512E6671800899322 /* SDL_cocoaevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaevents.m; sourceTree = "<group>"; };
- 04BDFEC612E6671800899322 /* SDL_cocoakeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoakeyboard.h; sourceTree = "<group>"; };
- 04BDFEC712E6671800899322 /* SDL_cocoakeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoakeyboard.m; sourceTree = "<group>"; };
- 04BDFEC812E6671800899322 /* SDL_cocoamodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamodes.h; sourceTree = "<group>"; };
- 04BDFEC912E6671800899322 /* SDL_cocoamodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamodes.m; sourceTree = "<group>"; };
- 04BDFECA12E6671800899322 /* SDL_cocoamouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamouse.h; sourceTree = "<group>"; };
- 04BDFECB12E6671800899322 /* SDL_cocoamouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamouse.m; sourceTree = "<group>"; };
- 04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengl.h; sourceTree = "<group>"; };
- 04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengl.m; sourceTree = "<group>"; };
- 04BDFECE12E6671800899322 /* SDL_cocoashape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoashape.h; sourceTree = "<group>"; };
- 04BDFECF12E6671800899322 /* SDL_cocoashape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoashape.m; sourceTree = "<group>"; };
- 04BDFED012E6671800899322 /* SDL_cocoavideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavideo.h; sourceTree = "<group>"; };
- 04BDFED112E6671800899322 /* SDL_cocoavideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavideo.m; sourceTree = "<group>"; };
- 04BDFED212E6671800899322 /* SDL_cocoawindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoawindow.h; sourceTree = "<group>"; };
- 04BDFED312E6671800899322 /* SDL_cocoawindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoawindow.m; sourceTree = "<group>"; };
- 04BDFEE812E6671800899322 /* SDL_nullevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullevents.c; sourceTree = "<group>"; };
- 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullevents_c.h; sourceTree = "<group>"; };
- 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullvideo.c; sourceTree = "<group>"; };
- 04BDFEED12E6671800899322 /* SDL_nullvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullvideo.h; sourceTree = "<group>"; };
- 04BDFF4E12E6671800899322 /* SDL_blit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit.c; sourceTree = "<group>"; };
- 04BDFF4F12E6671800899322 /* SDL_blit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit.h; sourceTree = "<group>"; };
- 04BDFF5012E6671800899322 /* SDL_blit_0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_0.c; sourceTree = "<group>"; };
- 04BDFF5112E6671800899322 /* SDL_blit_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_1.c; sourceTree = "<group>"; };
- 04BDFF5212E6671800899322 /* SDL_blit_A.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_A.c; sourceTree = "<group>"; };
- 04BDFF5312E6671800899322 /* SDL_blit_auto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_auto.c; sourceTree = "<group>"; };
- 04BDFF5412E6671800899322 /* SDL_blit_auto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_auto.h; sourceTree = "<group>"; };
- 04BDFF5512E6671800899322 /* SDL_blit_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_copy.c; sourceTree = "<group>"; };
- 04BDFF5612E6671800899322 /* SDL_blit_copy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_copy.h; sourceTree = "<group>"; };
- 04BDFF5712E6671800899322 /* SDL_blit_N.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_N.c; sourceTree = "<group>"; };
- 04BDFF5812E6671800899322 /* SDL_blit_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_slow.c; sourceTree = "<group>"; };
- 04BDFF5912E6671800899322 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = "<group>"; };
- 04BDFF5A12E6671800899322 /* SDL_bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_bmp.c; sourceTree = "<group>"; };
- 04BDFF5B12E6671800899322 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = "<group>"; };
- 04BDFF6012E6671800899322 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = "<group>"; };
- 04BDFF6512E6671800899322 /* SDL_pixels.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_pixels.c; sourceTree = "<group>"; };
- 04BDFF6612E6671800899322 /* SDL_pixels_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels_c.h; sourceTree = "<group>"; };
- 04BDFF6712E6671800899322 /* SDL_rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rect.c; sourceTree = "<group>"; };
- 04BDFF6F12E6671800899322 /* SDL_RLEaccel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_RLEaccel.c; sourceTree = "<group>"; };
- 04BDFF7012E6671800899322 /* SDL_RLEaccel_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_RLEaccel_c.h; sourceTree = "<group>"; };
- 04BDFF7112E6671800899322 /* SDL_shape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shape.c; sourceTree = "<group>"; };
- 04BDFF7212E6671800899322 /* SDL_shape_internals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shape_internals.h; sourceTree = "<group>"; };
- 04BDFF7312E6671800899322 /* SDL_stretch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stretch.c; sourceTree = "<group>"; };
- 04BDFF7412E6671800899322 /* SDL_surface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_surface.c; sourceTree = "<group>"; };
- 04BDFF7512E6671800899322 /* SDL_sysvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysvideo.h; sourceTree = "<group>"; };
- 04BDFF7612E6671800899322 /* SDL_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_video.c; sourceTree = "<group>"; };
- 04BDFFB812E6671800899322 /* imKStoUCS.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imKStoUCS.c; sourceTree = "<group>"; };
- 04BDFFB912E6671800899322 /* imKStoUCS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imKStoUCS.h; sourceTree = "<group>"; };
- 04BDFFBA12E6671800899322 /* SDL_x11clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11clipboard.c; sourceTree = "<group>"; };
- 04BDFFBB12E6671800899322 /* SDL_x11clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11clipboard.h; sourceTree = "<group>"; };
- 04BDFFBC12E6671800899322 /* SDL_x11dyn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11dyn.c; sourceTree = "<group>"; };
- 04BDFFBD12E6671800899322 /* SDL_x11dyn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11dyn.h; sourceTree = "<group>"; };
- 04BDFFBE12E6671800899322 /* SDL_x11events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11events.c; sourceTree = "<group>"; };
- 04BDFFBF12E6671800899322 /* SDL_x11events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11events.h; sourceTree = "<group>"; };
- 04BDFFC212E6671800899322 /* SDL_x11keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11keyboard.c; sourceTree = "<group>"; };
- 04BDFFC312E6671800899322 /* SDL_x11keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11keyboard.h; sourceTree = "<group>"; };
- 04BDFFC412E6671800899322 /* SDL_x11modes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11modes.c; sourceTree = "<group>"; };
- 04BDFFC512E6671800899322 /* SDL_x11modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11modes.h; sourceTree = "<group>"; };
- 04BDFFC612E6671800899322 /* SDL_x11mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11mouse.c; sourceTree = "<group>"; };
- 04BDFFC712E6671800899322 /* SDL_x11mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11mouse.h; sourceTree = "<group>"; };
- 04BDFFC812E6671800899322 /* SDL_x11opengl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11opengl.c; sourceTree = "<group>"; };
- 04BDFFC912E6671800899322 /* SDL_x11opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11opengl.h; sourceTree = "<group>"; };
- 04BDFFCA12E6671800899322 /* SDL_x11opengles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11opengles.c; sourceTree = "<group>"; };
- 04BDFFCB12E6671800899322 /* SDL_x11opengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11opengles.h; sourceTree = "<group>"; };
- 04BDFFCE12E6671800899322 /* SDL_x11shape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11shape.c; sourceTree = "<group>"; };
- 04BDFFCF12E6671800899322 /* SDL_x11shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11shape.h; sourceTree = "<group>"; };
- 04BDFFD012E6671800899322 /* SDL_x11sym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11sym.h; sourceTree = "<group>"; };
- 04BDFFD112E6671800899322 /* SDL_x11touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11touch.c; sourceTree = "<group>"; };
- 04BDFFD212E6671800899322 /* SDL_x11touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11touch.h; sourceTree = "<group>"; };
- 04BDFFD312E6671800899322 /* SDL_x11video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11video.c; sourceTree = "<group>"; };
- 04BDFFD412E6671800899322 /* SDL_x11video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11video.h; sourceTree = "<group>"; };
- 04BDFFD512E6671800899322 /* SDL_x11window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11window.c; sourceTree = "<group>"; };
- 04BDFFD612E6671800899322 /* SDL_x11window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11window.h; sourceTree = "<group>"; };
- 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = "<group>"; };
- 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = "<group>"; };
- 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = "<group>"; };
- 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = "<group>"; };
- 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = "<group>"; };
- 04F7804012FB74A200FC43C0 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = "<group>"; };
- 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = "<group>"; };
- 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = "<group>"; };
- 04F7804312FB74A200FC43C0 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = "<group>"; };
- 04F7804412FB74A200FC43C0 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = "<group>"; };
- 04F7804512FB74A200FC43C0 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = "<group>"; };
- 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = "<group>"; };
- 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = "<group>"; };
- 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_vulkan_internal.h; sourceTree = "<group>"; };
- 4D16644D1EDD6023003DE88E /* SDL_vulkan_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_vulkan_utils.c; sourceTree = "<group>"; };
- 4D1664501EDD60AD003DE88E /* SDL_cocoametalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoametalview.m; sourceTree = "<group>"; };
- 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavulkan.h; sourceTree = "<group>"; };
- 4D1664521EDD60AD003DE88E /* SDL_cocoavulkan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavulkan.m; sourceTree = "<group>"; };
4D4820431F0F10B400EDC31C /* SDL_vulkan.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_vulkan.h; sourceTree = "<group>"; };
- 4D7517281EE2562B00820EEA /* SDL_cocoametalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoametalview.h; sourceTree = "<group>"; };
- 56115BB91DF72C6D00F47E1E /* SDL_dataqueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dataqueue.c; sourceTree = "<group>"; };
- 56115BBA1DF72C6D00F47E1E /* SDL_dataqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dataqueue.h; sourceTree = "<group>"; };
564624351FF821B80074AC87 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
564624371FF821CB0074AC87 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
- 566CDE8D148F0AC200C5A9BB /* SDL_dropevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dropevents_c.h; sourceTree = "<group>"; };
- 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dropevents.c; sourceTree = "<group>"; };
- 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_sysfilesystem.m; path = cocoa/SDL_sysfilesystem.m; sourceTree = "<group>"; };
567E2F2017C44C35005F1892 /* SDL_filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_filesystem.h; sourceTree = "<group>"; };
- 56A670081856545C0007D20F /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_internal.h; sourceTree = "<group>"; };
- 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_procs.h; sourceTree = "<group>"; };
- 56A6701E185654B40007D20F /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dynapi.c; sourceTree = "<group>"; };
- 56A6701F185654B40007D20F /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi.h; sourceTree = "<group>"; };
- 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_overrides.h; sourceTree = "<group>"; };
- 5C2EF69B1FC987C6003F5197 /* SDL_gles2funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gles2funcs.h; sourceTree = "<group>"; };
- 5C2EF69C1FC987C6003F5197 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = "<group>"; };
- 5C2EF69D1FC987C6003F5197 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = "<group>"; };
- 5C2EF69E1FC987C6003F5197 /* SDL_shaders_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gles2.c; sourceTree = "<group>"; };
- 5C2EF6EC1FC9D0EC003F5197 /* SDL_cocoaopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengles.m; sourceTree = "<group>"; };
- 5C2EF6ED1FC9D0ED003F5197 /* SDL_cocoaopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengles.h; sourceTree = "<group>"; };
- 5C2EF6F41FC9EE34003F5197 /* SDL_rect_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rect_c.h; sourceTree = "<group>"; };
- 5C2EF6F51FC9EE35003F5197 /* SDL_egl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_egl.c; sourceTree = "<group>"; };
- 5C2EF6F61FC9EE35003F5197 /* SDL_egl_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_egl_c.h; sourceTree = "<group>"; };
5C2EF7001FC9EF0F003F5197 /* SDL_egl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_egl.h; sourceTree = "<group>"; };
- A704170820F09A9800A82227 /* hid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hid.c; sourceTree = "<group>"; };
- A704170D20F09AC800A82227 /* SDL_hidapijoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapijoystick.c; sourceTree = "<group>"; };
- A704170E20F09AC800A82227 /* SDL_hidapijoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapijoystick_c.h; sourceTree = "<group>"; };
- A704170F20F09AC800A82227 /* SDL_hidapi_switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_switch.c; sourceTree = "<group>"; };
- A704171120F09AC900A82227 /* SDL_hidapi_ps4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_ps4.c; sourceTree = "<group>"; };
- A704171220F09AC900A82227 /* SDL_hidapi_xboxone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xboxone.c; sourceTree = "<group>"; };
- A704171320F09AC900A82227 /* SDL_hidapi_xbox360.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360.c; sourceTree = "<group>"; };
A7381E931D8B69C300B177DD /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
A7381E951D8B69D600B177DD /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
+ A75FCEB323E25AB700529352 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ A75FD06C23E25AC700529352 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+ A75FDAA523E2792500529352 /* hid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = hid.m; sourceTree = "<group>"; };
+ A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_steam.c; sourceTree = "<group>"; };
+ A75FDAB323E2797600529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAB523E2799700529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAB923E28A7A00529352 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+ A75FDABD23E28B6200529352 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
+ A75FDABF23E28B8000529352 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+ A75FDAC123E28B9600529352 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ A75FDAC323E28BA700529352 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; };
+ A75FDAC923E28D0100529352 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDACB23E28D0700529352 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDACD23E28D0F00529352 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDACF23E28D1300529352 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/Metal.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAD123E28D2000529352 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAD323E28D2E00529352 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/CoreVideo.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAD523E28D3300529352 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAD723E28D3B00529352 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDADA23E28D4900529352 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/CoreAudio.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDADC23E28D5500529352 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDADE23E28D6600529352 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS13.2.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; };
+ A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_iphoneos.h; sourceTree = "<group>"; };
+ A75FDB4923E399AC00529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A75FDB4C23E399AC00529352 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ A75FDB5723E39E6100529352 /* hidapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hidapi.h; path = hidapi/hidapi.h; sourceTree = "<group>"; };
+ A75FDB6E23E3A2C900529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A75FDB8C23E4C74400529352 /* hidapi.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = hidapi.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A75FDB8D23E4C74400529352 /* hidapi-iOS copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "hidapi-iOS copy-Info.plist"; path = "/Users/saml/projects/SDL/Xcode/SDL/hidapi-iOS copy-Info.plist"; sourceTree = "<absolute>"; };
+ A75FDB9223E4C8DB00529352 /* hid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hid.c; sourceTree = "<group>"; };
+ A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-bsd.txt"; sourceTree = "<group>"; };
+ A75FDBA423E4CB6F00529352 /* AUTHORS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS.txt; sourceTree = "<group>"; };
+ A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-orig.txt"; sourceTree = "<group>"; };
+ A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "LICENSE-gpl3.txt"; sourceTree = "<group>"; };
+ A75FDBA723E4CB6F00529352 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
+ A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapi_rumble.h; sourceTree = "<group>"; };
+ A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_rumble.c; sourceTree = "<group>"; };
+ A769B23D23E259AE00872273 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
A77E6EB3167AB0A90010E40B /* SDL_gamecontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamecontroller.h; sourceTree = "<group>"; };
- AA0F8490178D5ECC00823F9D /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = "<group>"; };
- AA628AC8159367B7005138DD /* SDL_rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rotate.c; sourceTree = "<group>"; };
- AA628AC9159367B7005138DD /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = "<group>"; };
- AA628ACF159367F2005138DD /* SDL_x11xinput2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11xinput2.c; sourceTree = "<group>"; };
- AA628AD0159367F2005138DD /* SDL_x11xinput2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11xinput2.h; sourceTree = "<group>"; };
+ A7D88B5423E2437C00DCD162 /* SDL2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A7D88BBB23E24A2F00DCD162 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BBD23E24A6000DCD162 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BBF23E24A7700DCD162 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BC123E24A8800DCD162 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BC323E24A9F00DCD162 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BC523E24ABA00DCD162 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88BC723E24B0200DCD162 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+ A7D88D1523E24BED00DCD162 /* SDL2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A7D88E5423E24D3B00DCD162 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dataqueue.h; sourceTree = "<group>"; };
+ A7D8A57123E2513D00DCD162 /* SDL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL.c; sourceTree = "<group>"; };
+ A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = "<group>"; };
+ A7D8A57423E2513D00DCD162 /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = "<group>"; };
+ A7D8A57523E2513D00DCD162 /* SDL_error_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_error_c.h; sourceTree = "<group>"; };
+ A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummysensor.h; sourceTree = "<group>"; };
+ A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummysensor.c; sourceTree = "<group>"; };
+ A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coremotionsensor.h; sourceTree = "<group>"; };
+ A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_coremotionsensor.m; sourceTree = "<group>"; };
+ A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syssensor.h; sourceTree = "<group>"; };
+ A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor_c.h; sourceTree = "<group>"; };
+ A7D8A58223E2513D00DCD162 /* SDL_sensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sensor.c; sourceTree = "<group>"; };
+ A7D8A58323E2513D00DCD162 /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_internal.h; sourceTree = "<group>"; };
+ A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hints.c; sourceTree = "<group>"; };
+ A7D8A5B023E2513D00DCD162 /* SDL_uikit_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_uikit_main.c; sourceTree = "<group>"; };
+ A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = "<group>"; };
+ A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_haptic.c; sourceTree = "<group>"; };
+ A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_haptic_c.h; sourceTree = "<group>"; };
+ A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic.h; sourceTree = "<group>"; };
+ A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = "<group>"; };
+ A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic_c.h; sourceTree = "<group>"; };
+ A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi.h; sourceTree = "<group>"; };
+ A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_overrides.h; sourceTree = "<group>"; };
+ A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dynapi.c; sourceTree = "<group>"; };
+ A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dynapi_procs.h; sourceTree = "<group>"; };
+ A7D8A5DD23E2513D00DCD162 /* SDL_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_log.c; sourceTree = "<group>"; };
+ A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_timer.c; sourceTree = "<group>"; };
+ A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer_c.h; sourceTree = "<group>"; };
+ A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = "<group>"; };
+ A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = "<group>"; };
+ A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenopengl.c; sourceTree = "<group>"; };
+ A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenevents_c.h; sourceTree = "<group>"; };
+ A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenwindow.c; sourceTree = "<group>"; };
+ A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenevents.c; sourceTree = "<group>"; };
+ A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenvideo.h; sourceTree = "<group>"; };
+ A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenframebuffer.c; sourceTree = "<group>"; };
+ A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenopengl.h; sourceTree = "<group>"; };
+ A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenframebuffer_c.h; sourceTree = "<group>"; };
+ A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_offscreenwindow.h; sourceTree = "<group>"; };
+ A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_offscreenvideo.c; sourceTree = "<group>"; };
+ A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_slow.c; sourceTree = "<group>"; };
+ A7D8A60323E2513D00DCD162 /* SDL_stretch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stretch.c; sourceTree = "<group>"; };
+ A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_egl_c.h; sourceTree = "<group>"; };
+ A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = "<group>"; };
+ A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = "<group>"; };
+ A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullvideo.c; sourceTree = "<group>"; };
+ A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullevents.c; sourceTree = "<group>"; };
+ A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullvideo.h; sourceTree = "<group>"; };
+ A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullevents_c.h; sourceTree = "<group>"; };
+ A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rect_c.h; sourceTree = "<group>"; };
+ A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shape_internals.h; sourceTree = "<group>"; };
+ A7D8A60E23E2513D00DCD162 /* SDL_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_video.c; sourceTree = "<group>"; };
+ A7D8A61423E2513D00DCD162 /* SDL_surface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_surface.c; sourceTree = "<group>"; };
+ A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_RLEaccel.c; sourceTree = "<group>"; };
+ A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_copy.c; sourceTree = "<group>"; };
+ A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysvideo.h; sourceTree = "<group>"; };
+ A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitview.h; sourceTree = "<group>"; };
+ A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitwindow.m; sourceTree = "<group>"; };
+ A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmessagebox.m; sourceTree = "<group>"; };
+ A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitevents.m; sourceTree = "<group>"; };
+ A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmetalview.h; sourceTree = "<group>"; };
+ A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitappdelegate.m; sourceTree = "<group>"; };
+ A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmodes.h; sourceTree = "<group>"; };
+ A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopenglview.m; sourceTree = "<group>"; };
+ A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitclipboard.h; sourceTree = "<group>"; };
+ A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitvideo.h; sourceTree = "<group>"; };
+ A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopengles.m; sourceTree = "<group>"; };
+ A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitviewcontroller.h; sourceTree = "<group>"; };
+ A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitvulkan.m; sourceTree = "<group>"; };
+ A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmessagebox.h; sourceTree = "<group>"; };
+ A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitwindow.h; sourceTree = "<group>"; };
+ A7D8A62823E2513D00DCD162 /* keyinfotable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keyinfotable.h; sourceTree = "<group>"; };
+ A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitview.m; sourceTree = "<group>"; };
+ A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitclipboard.m; sourceTree = "<group>"; };
+ A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopenglview.h; sourceTree = "<group>"; };
+ A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmodes.m; sourceTree = "<group>"; };
+ A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitevents.h; sourceTree = "<group>"; };
+ A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmetalview.m; sourceTree = "<group>"; };
+ A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitappdelegate.h; sourceTree = "<group>"; };
+ A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitviewcontroller.m; sourceTree = "<group>"; };
+ A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopengles.h; sourceTree = "<group>"; };
+ A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitvideo.m; sourceTree = "<group>"; };
+ A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitvulkan.h; sourceTree = "<group>"; };
+ A7D8A63423E2513D00DCD162 /* SDL_rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rect.c; sourceTree = "<group>"; };
+ A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_vulkan_internal.h; sourceTree = "<group>"; };
+ A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_auto.c; sourceTree = "<group>"; };
+ A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_vulkan_utils.c; sourceTree = "<group>"; };
+ A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_N.c; sourceTree = "<group>"; };
+ A7D8A64C23E2513D00DCD162 /* SDL_blit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit.c; sourceTree = "<group>"; };
+ A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_pixels.c; sourceTree = "<group>"; };
+ A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_0.c; sourceTree = "<group>"; };
+ A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = "<group>"; };
+ A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_A.c; sourceTree = "<group>"; };
+ A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = "<group>"; };
+ A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv.c; sourceTree = "<group>"; };
+ A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoashape.h; sourceTree = "<group>"; };
+ A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengl.m; sourceTree = "<group>"; };
+ A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoakeyboard.h; sourceTree = "<group>"; };
+ A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamodes.m; sourceTree = "<group>"; };
+ A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaopengles.m; sourceTree = "<group>"; };
+ A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavulkan.m; sourceTree = "<group>"; };
+ A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoawindow.m; sourceTree = "<group>"; };
+ A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoavideo.m; sourceTree = "<group>"; };
+ A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoametalview.h; sourceTree = "<group>"; };
+ A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamouse.m; sourceTree = "<group>"; };
+ A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamousetap.h; sourceTree = "<group>"; };
+ A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaevents.m; sourceTree = "<group>"; };
+ A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaclipboard.h; sourceTree = "<group>"; };
+ A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamessagebox.m; sourceTree = "<group>"; };
+ A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoakeyboard.m; sourceTree = "<group>"; };
+ A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengl.h; sourceTree = "<group>"; };
+ A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoashape.m; sourceTree = "<group>"; };
+ A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavulkan.h; sourceTree = "<group>"; };
+ A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaopengles.h; sourceTree = "<group>"; };
+ A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamodes.h; sourceTree = "<group>"; };
+ A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoawindow.h; sourceTree = "<group>"; };
+ A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoavideo.h; sourceTree = "<group>"; };
+ A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamessagebox.h; sourceTree = "<group>"; };
+ A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoaclipboard.m; sourceTree = "<group>"; };
+ A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoaevents.h; sourceTree = "<group>"; };
+ A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamousetap.m; sourceTree = "<group>"; };
+ A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamouse.h; sourceTree = "<group>"; };
+ A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoametalview.m; sourceTree = "<group>"; };
+ A7D8A6B623E2513E00DCD162 /* SDL_egl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_egl.c; sourceTree = "<group>"; };
+ A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_1.c; sourceTree = "<group>"; };
+ A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11touch.h; sourceTree = "<group>"; };
+ A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11messagebox.h; sourceTree = "<group>"; };
+ A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11modes.c; sourceTree = "<group>"; };
+ A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11opengl.c; sourceTree = "<group>"; };
+ A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11vulkan.c; sourceTree = "<group>"; };
+ A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11shape.h; sourceTree = "<group>"; };
+ A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11xinput2.c; sourceTree = "<group>"; };
+ A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11opengles.h; sourceTree = "<group>"; };
+ A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11mouse.c; sourceTree = "<group>"; };
+ A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11dyn.c; sourceTree = "<group>"; };
+ A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11framebuffer.c; sourceTree = "<group>"; };
+ A7D8A70723E2513E00DCD162 /* SDL_x11window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11window.c; sourceTree = "<group>"; };
+ A7D8A70823E2513E00DCD162 /* SDL_x11video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11video.c; sourceTree = "<group>"; };
+ A7D8A70923E2513E00DCD162 /* imKStoUCS.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = imKStoUCS.c; sourceTree = "<group>"; };
+ A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11events.c; sourceTree = "<group>"; };
+ A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11clipboard.c; sourceTree = "<group>"; };
+ A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11keyboard.c; sourceTree = "<group>"; };
+ A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11sym.h; sourceTree = "<group>"; };
+ A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11opengl.h; sourceTree = "<group>"; };
+ A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11modes.h; sourceTree = "<group>"; };
+ A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11messagebox.c; sourceTree = "<group>"; };
+ A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11touch.c; sourceTree = "<group>"; };
+ A7D8A71223E2513E00DCD162 /* edid-parse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "edid-parse.c"; sourceTree = "<group>"; };
+ A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11xinput2.h; sourceTree = "<group>"; };
+ A7D8A71423E2513E00DCD162 /* edid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = edid.h; sourceTree = "<group>"; };
+ A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11vulkan.h; sourceTree = "<group>"; };
+ A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11shape.c; sourceTree = "<group>"; };
+ A7D8A71723E2513E00DCD162 /* SDL_x11window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11window.h; sourceTree = "<group>"; };
+ A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11framebuffer.h; sourceTree = "<group>"; };
+ A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11dyn.h; sourceTree = "<group>"; };
+ A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11mouse.h; sourceTree = "<group>"; };
+ A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11opengles.c; sourceTree = "<group>"; };
+ A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11keyboard.h; sourceTree = "<group>"; };
+ A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11clipboard.h; sourceTree = "<group>"; };
+ A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11events.h; sourceTree = "<group>"; };
+ A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imKStoUCS.h; sourceTree = "<group>"; };
+ A7D8A72023E2513E00DCD162 /* SDL_x11video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_x11video.h; sourceTree = "<group>"; };
+ A7D8A72323E2513E00DCD162 /* gl2ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2ext.h; sourceTree = "<group>"; };
+ A7D8A72423E2513E00DCD162 /* gl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2.h; sourceTree = "<group>"; };
+ A7D8A72523E2513E00DCD162 /* gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gl2platform.h; sourceTree = "<group>"; };
+ A7D8A72723E2513E00DCD162 /* khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = khrplatform.h; sourceTree = "<group>"; };
+ A7D8A72923E2513E00DCD162 /* egl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = egl.h; sourceTree = "<group>"; };
+ A7D8A72A23E2513E00DCD162 /* eglext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eglext.h; sourceTree = "<group>"; };
+ A7D8A72B23E2513E00DCD162 /* eglplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eglplatform.h; sourceTree = "<group>"; };
+ A7D8A72D23E2513E00DCD162 /* vk_layer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_layer.h; sourceTree = "<group>"; };
+ A7D8A72E23E2513E00DCD162 /* vk_icd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_icd.h; sourceTree = "<group>"; };
+ A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_vi.h; sourceTree = "<group>"; };
+ A7D8A73023E2513E00DCD162 /* vulkan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan.h; sourceTree = "<group>"; };
+ A7D8A73123E2513E00DCD162 /* vk_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_platform.h; sourceTree = "<group>"; };
+ A7D8A73223E2513E00DCD162 /* vulkan.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vulkan.hpp; sourceTree = "<group>"; };
+ A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_fuchsia.h; sourceTree = "<group>"; };
+ A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_wayland.h; sourceTree = "<group>"; };
+ A7D8A73523E2513E00DCD162 /* vulkan_win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_win32.h; sourceTree = "<group>"; };
+ A7D8A73623E2513E00DCD162 /* vulkan_macos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_macos.h; sourceTree = "<group>"; };
+ A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xlib_xrandr.h; sourceTree = "<group>"; };
+ A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xcb.h; sourceTree = "<group>"; };
+ A7D8A73923E2513E00DCD162 /* vulkan_mir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_mir.h; sourceTree = "<group>"; };
+ A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_xlib.h; sourceTree = "<group>"; };
+ A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_ios.h; sourceTree = "<group>"; };
+ A7D8A73C23E2513E00DCD162 /* vulkan_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_core.h; sourceTree = "<group>"; };
+ A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vk_sdk_platform.h; sourceTree = "<group>"; };
+ A7D8A73E23E2513E00DCD162 /* vulkan_android.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vulkan_android.h; sourceTree = "<group>"; };
+ A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_auto.h; sourceTree = "<group>"; };
+ A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels_c.h; sourceTree = "<group>"; };
+ A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_copy.h; sourceTree = "<group>"; };
+ A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_RLEaccel_c.h; sourceTree = "<group>"; };
+ A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = "<group>"; };
+ A7D8A76923E2513E00DCD162 /* SDL_shape.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shape.c; sourceTree = "<group>"; };
+ A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_c.h; sourceTree = "<group>"; };
+ A7D8A76B23E2513E00DCD162 /* SDL_blit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit.h; sourceTree = "<group>"; };
+ A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_rgb.c; sourceTree = "<group>"; };
+ A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb_sse_func.h; sourceTree = "<group>"; };
+ A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb_std_func.h; sourceTree = "<group>"; };
+ A7D8A77223E2513E00DCD162 /* yuv_rgb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb.h; sourceTree = "<group>"; };
+ A7D8A77323E2513E00DCD162 /* SDL_bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_bmp.c; sourceTree = "<group>"; };
+ A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_cpuinfo.c; sourceTree = "<group>"; };
+ A7D8A77723E2513E00DCD162 /* SDL_systhread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread.h; sourceTree = "<group>"; };
+ A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread_c.h; sourceTree = "<group>"; };
+ A7D8A77923E2513E00DCD162 /* SDL_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_thread.c; sourceTree = "<group>"; };
+ A7D8A78223E2513E00DCD162 /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = "<group>"; };
+ A7D8A78323E2513E00DCD162 /* SDL_syssem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syssem.c; sourceTree = "<group>"; };
+ A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread_c.h; sourceTree = "<group>"; };
+ A7D8A78523E2513E00DCD162 /* SDL_syscond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syscond.c; sourceTree = "<group>"; };
+ A7D8A78623E2513E00DCD162 /* SDL_systhread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systhread.c; sourceTree = "<group>"; };
+ A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysmutex.c; sourceTree = "<group>"; };
+ A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysmutex_c.h; sourceTree = "<group>"; };
+ A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamecontrollerdb.h; sourceTree = "<group>"; };
+ A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysjoystick.c; sourceTree = "<group>"; };
+ A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_steamcontroller.h; sourceTree = "<group>"; };
+ A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_steamcontroller.c; sourceTree = "<group>"; };
+ A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_joystick.c; sourceTree = "<group>"; };
+ A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysjoystick.m; sourceTree = "<group>"; };
+ A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick_c.h; sourceTree = "<group>"; };
+ A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = "<group>"; };
+ A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360.c; sourceTree = "<group>"; };
+ A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_ps4.c; sourceTree = "<group>"; };
+ A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapijoystick.c; sourceTree = "<group>"; };
+ A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xboxone.c; sourceTree = "<group>"; };
+ A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_switch.c; sourceTree = "<group>"; };
+ A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hidapijoystick_c.h; sourceTree = "<group>"; };
+ A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_xbox360w.c; sourceTree = "<group>"; };
+ A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi_gamecube.c; sourceTree = "<group>"; };
+ A7D8A7CB23E2513E00DCD162 /* usb_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = usb_ids.h; sourceTree = "<group>"; };
+ A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysjoystick.c; sourceTree = "<group>"; };
+ A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick_c.h; sourceTree = "<group>"; };
+ A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick.h; sourceTree = "<group>"; };
+ A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick_c.h; sourceTree = "<group>"; };
+ A7D8A7D923E2513E00DCD162 /* controller_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = controller_type.h; sourceTree = "<group>"; };
+ A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rwops.c; sourceTree = "<group>"; };
+ A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwopsbundlesupport.h; sourceTree = "<group>"; };
+ A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_rwopsbundlesupport.m; sourceTree = "<group>"; };
+ A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_syspower.m; sourceTree = "<group>"; };
+ A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syspower.h; sourceTree = "<group>"; };
+ A7D8A7E723E2513F00DCD162 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_power.c; sourceTree = "<group>"; };
+ A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syspower.c; sourceTree = "<group>"; };
+ A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syspower.h; sourceTree = "<group>"; };
+ A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert_c.h; sourceTree = "<group>"; };
+ A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysfilesystem.c; sourceTree = "<group>"; };
+ A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysfilesystem.m; sourceTree = "<group>"; };
+ A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_hidapi.c; sourceTree = "<group>"; };
+ A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = "<group>"; };
+ A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = "<group>"; };
+ A7D8A86523E2513F00DCD162 /* SDL_mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mixer.c; sourceTree = "<group>"; };
+ A7D8A86623E2513F00DCD162 /* SDL_wave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_wave.c; sourceTree = "<group>"; };
+ A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummyaudio.h; sourceTree = "<group>"; };
+ A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummyaudio.c; sourceTree = "<group>"; };
+ A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_c.h; sourceTree = "<group>"; };
+ A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audiodev_c.h; sourceTree = "<group>"; };
+ A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiodev.c; sourceTree = "<group>"; };
+ A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysaudio.h; sourceTree = "<group>"; };
+ A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiotypecvt.c; sourceTree = "<group>"; };
+ A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiocvt.c; sourceTree = "<group>"; };
+ A7D8A8A223E2513F00DCD162 /* SDL_wave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_wave.h; sourceTree = "<group>"; };
+ A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_diskaudio.h; sourceTree = "<group>"; };
+ A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_diskaudio.c; sourceTree = "<group>"; };
+ A7D8A8B823E2513F00DCD162 /* SDL_audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audio.c; sourceTree = "<group>"; };
+ A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_coreaudio.h; sourceTree = "<group>"; };
+ A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_coreaudio.m; sourceTree = "<group>"; };
+ A7D8A8BF23E2513F00DCD162 /* SDL_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_error.c; sourceTree = "<group>"; };
+ A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hints_c.h; sourceTree = "<group>"; };
+ A7D8A8D323E2514000DCD162 /* SDL_iconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iconv.c; sourceTree = "<group>"; };
+ A7D8A8D423E2514000DCD162 /* SDL_getenv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_getenv.c; sourceTree = "<group>"; };
+ A7D8A8D523E2514000DCD162 /* SDL_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_string.c; sourceTree = "<group>"; };
+ A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_strtokr.c; sourceTree = "<group>"; };
+ A7D8A8D723E2514000DCD162 /* SDL_qsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_qsort.c; sourceTree = "<group>"; };
+ A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stdlib.c; sourceTree = "<group>"; };
+ A7D8A8D923E2514000DCD162 /* SDL_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_malloc.c; sourceTree = "<group>"; };
+ A7D8A8DB23E2514000DCD162 /* SDL_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render.c; sourceTree = "<group>"; };
+ A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_d3dmath.h; sourceTree = "<group>"; };
+ A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_render_metal.m; sourceTree = "<group>"; };
+ A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_ios.h; sourceTree = "<group>"; };
+ A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = SDL_shaders_metal.metal; sourceTree = "<group>"; };
+ A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_osx.h; sourceTree = "<group>"; };
+ A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_tvos.h; sourceTree = "<group>"; };
+ A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_sw_c.h; sourceTree = "<group>"; };
+ A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_sw.c; sourceTree = "<group>"; };
+ A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysrender.h; sourceTree = "<group>"; };
+ A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = "<group>"; };
+ A7D8A8F123E2514000DCD162 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = "<group>"; };
+ A7D8A8F223E2514000DCD162 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = "<group>"; };
+ A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = "<group>"; };
+ A7D8A8F423E2514000DCD162 /* SDL_rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rotate.c; sourceTree = "<group>"; };
+ A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_render_sw_c.h; sourceTree = "<group>"; };
+ A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = "<group>"; };
+ A7D8A8F723E2514000DCD162 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = "<group>"; };
+ A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = "<group>"; };
+ A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_sw.c; sourceTree = "<group>"; };
+ A7D8A8FA23E2514000DCD162 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = "<group>"; };
+ A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = "<group>"; };
+ A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = "<group>"; };
+ A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = "<group>"; };
+ A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = "<group>"; };
+ A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_d3dmath.c; sourceTree = "<group>"; };
+ A7D8A90123E2514000DCD162 /* SDL_render_gles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles.c; sourceTree = "<group>"; };
+ A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glesfuncs.h; sourceTree = "<group>"; };
+ A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = "<group>"; };
+ A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = "<group>"; };
+ A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gles2funcs.h; sourceTree = "<group>"; };
+ A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gles2.c; sourceTree = "<group>"; };
+ A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gl.h; sourceTree = "<group>"; };
+ A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glfuncs.h; sourceTree = "<group>"; };
+ A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gl.c; sourceTree = "<group>"; };
+ A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gl.c; sourceTree = "<group>"; };
+ A7D8A91223E2514000DCD162 /* s_sin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_sin.c; sourceTree = "<group>"; };
+ A7D8A91323E2514000DCD162 /* s_cos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_cos.c; sourceTree = "<group>"; };
+ A7D8A91423E2514000DCD162 /* s_copysign.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_copysign.c; sourceTree = "<group>"; };
+ A7D8A91523E2514000DCD162 /* s_fabs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_fabs.c; sourceTree = "<group>"; };
+ A7D8A91623E2514000DCD162 /* k_rem_pio2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_rem_pio2.c; sourceTree = "<group>"; };
+ A7D8A91723E2514000DCD162 /* k_sin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_sin.c; sourceTree = "<group>"; };
+ A7D8A91823E2514000DCD162 /* s_atan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_atan.c; sourceTree = "<group>"; };
+ A7D8A91923E2514000DCD162 /* k_cos.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_cos.c; sourceTree = "<group>"; };
+ A7D8A91A23E2514000DCD162 /* s_scalbn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_scalbn.c; sourceTree = "<group>"; };
+ A7D8A91B23E2514000DCD162 /* math_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_private.h; sourceTree = "<group>"; };
+ A7D8A91C23E2514000DCD162 /* e_pow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_pow.c; sourceTree = "<group>"; };
+ A7D8A91D23E2514000DCD162 /* e_atan2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_atan2.c; sourceTree = "<group>"; };
+ A7D8A91E23E2514000DCD162 /* s_tan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_tan.c; sourceTree = "<group>"; };
+ A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_rem_pio2.c; sourceTree = "<group>"; };
+ A7D8A92023E2514000DCD162 /* e_fmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_fmod.c; sourceTree = "<group>"; };
+ A7D8A92123E2514000DCD162 /* e_exp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_exp.c; sourceTree = "<group>"; };
+ A7D8A92223E2514000DCD162 /* e_log10.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_log10.c; sourceTree = "<group>"; };
+ A7D8A92323E2514000DCD162 /* e_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_log.c; sourceTree = "<group>"; };
+ A7D8A92423E2514000DCD162 /* e_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = e_sqrt.c; sourceTree = "<group>"; };
+ A7D8A92523E2514000DCD162 /* s_floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = s_floor.c; sourceTree = "<group>"; };
+ A7D8A92623E2514000DCD162 /* math_libm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_libm.h; sourceTree = "<group>"; };
+ A7D8A92723E2514000DCD162 /* k_tan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = k_tan.c; sourceTree = "<group>"; };
+ A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dataqueue.c; sourceTree = "<group>"; };
+ A7D8A92A23E2514000DCD162 /* SDL_mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mouse.c; sourceTree = "<group>"; };
+ A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse_c.h; sourceTree = "<group>"; };
+ A7D8A92C23E2514000DCD162 /* scancodes_windows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_windows.h; sourceTree = "<group>"; };
+ A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_displayevents.c; sourceTree = "<group>"; };
+ A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dropevents_c.h; sourceTree = "<group>"; };
+ A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_windowevents.c; sourceTree = "<group>"; };
+ A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gesture_c.h; sourceTree = "<group>"; };
+ A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_displayevents_c.h; sourceTree = "<group>"; };
+ A7D8A93223E2514000DCD162 /* blank_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blank_cursor.h; sourceTree = "<group>"; };
+ A7D8A93323E2514000DCD162 /* default_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default_cursor.h; sourceTree = "<group>"; };
+ A7D8A93423E2514000DCD162 /* scancodes_darwin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_darwin.h; sourceTree = "<group>"; };
+ A7D8A93523E2514000DCD162 /* SDL_events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_events.c; sourceTree = "<group>"; };
+ A7D8A93623E2514000DCD162 /* scancodes_linux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_linux.h; sourceTree = "<group>"; };
+ A7D8A93723E2514000DCD162 /* SDL_touch_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch_c.h; sourceTree = "<group>"; };
+ A7D8A93823E2514000DCD162 /* SDL_keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_keyboard.c; sourceTree = "<group>"; };
+ A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboardevents_c.h; sourceTree = "<group>"; };
+ A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboardevents.c; sourceTree = "<group>"; };
+ A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dropevents.c; sourceTree = "<group>"; };
+ A7D8A93C23E2514000DCD162 /* SDL_quit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_quit.c; sourceTree = "<group>"; };
+ A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard_c.h; sourceTree = "<group>"; };
+ A7D8A93E23E2514000DCD162 /* SDL_touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_touch.c; sourceTree = "<group>"; };
+ A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysevents.h; sourceTree = "<group>"; };
+ A7D8A94023E2514000DCD162 /* SDL_gesture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gesture.c; sourceTree = "<group>"; };
+ A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_xfree86.h; sourceTree = "<group>"; };
+ A7D8A94223E2514000DCD162 /* SDL_events_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events_c.h; sourceTree = "<group>"; };
+ A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_windowevents_c.h; sourceTree = "<group>"; };
+ A7D8A94423E2514000DCD162 /* SDL_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_assert.c; sourceTree = "<group>"; };
AA7557C71595D4D800BBD41B /* begin_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = begin_code.h; sourceTree = "<group>"; };
AA7557C81595D4D800BBD41B /* close_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = close_code.h; sourceTree = "<group>"; };
AA7557C91595D4D800BBD41B /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert.h; sourceTree = "<group>"; };
@@ -1216,14 +4432,7 @@
AA7557F71595D4D800BBD41B /* SDL_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_version.h; sourceTree = "<group>"; };
AA7557F81595D4D800BBD41B /* SDL_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_video.h; sourceTree = "<group>"; };
AA7557F91595D4D800BBD41B /* SDL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = "<group>"; };
- AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_rgb.h; sourceTree = "<group>"; };
- AA9A7F101FB0206300FED37F /* yuv_rgb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_rgb.c; sourceTree = "<group>"; };
- AA9A7F131FB0209C00FED37F /* SDL_yuv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv.c; sourceTree = "<group>"; };
- AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_c.h; sourceTree = "<group>"; };
- AA9E4092163BE51E007A2AD0 /* SDL_x11messagebox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_x11messagebox.c; sourceTree = "<group>"; };
AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_messagebox.h; sourceTree = "<group>"; };
- AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamessagebox.h; sourceTree = "<group>"; };
- AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamessagebox.m; sourceTree = "<group>"; };
AAC070F4195606770073DCDF /* SDL_opengl_glext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengl_glext.h; sourceTree = "<group>"; };
AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2.h; sourceTree = "<group>"; };
AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2ext.h; sourceTree = "<group>"; };
@@ -1230,33 +4439,143 @@
AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2platform.h; sourceTree = "<group>"; };
AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_khrplatform.h; sourceTree = "<group>"; };
AADA5B8616CCAB3000107CF7 /* SDL_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_bits.h; sourceTree = "<group>"; };
- AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_osx.h; sourceTree = "<group>"; };
- AADC5A421FDA035D00960936 /* SDL_render_metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_render_metal.m; sourceTree = "<group>"; };
- BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = "<group>"; };
BECDF66B0761BA81005FE872 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = "<group>"; };
BECDF66C0761BA81005FE872 /* SDL2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BECDF6B30761BA81005FE872 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
- BECDF6BE0761BA81005FE872 /* Standard DMG */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Standard DMG"; sourceTree = BUILT_PRODUCTS_DIR; };
- D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamousetap.h; sourceTree = "<group>"; };
- D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamousetap.m; sourceTree = "<group>"; };
+ BECDF6BE0761BA81005FE872 /* SDL2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SDL2; sourceTree = BUILT_PRODUCTS_DIR; };
DB31407717554B71006C0E22 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
- DB89958518A1A5C50092407C /* SDL_syshaptic_c.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic_c.h; sourceTree = "<group>"; };
- F30D9C81212BC94E0047DF2E /* SDL_sensor_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor_c.h; sourceTree = "<group>"; };
- F30D9C82212BC94F0047DF2E /* SDL_syssensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syssensor.h; sourceTree = "<group>"; };
- F30D9C83212BC94F0047DF2E /* SDL_sensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sensor.c; sourceTree = "<group>"; };
- F30D9C8E212CABDB0047DF2E /* SDL_dummysensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummysensor.h; sourceTree = "<group>"; };
- F30D9C8F212CABDB0047DF2E /* SDL_dummysensor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummysensor.c; sourceTree = "<group>"; };
- F30D9CCB212EB4810047DF2E /* SDL_displayevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_displayevents_c.h; sourceTree = "<group>"; };
- F30D9CCC212EB4810047DF2E /* SDL_displayevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_displayevents.c; sourceTree = "<group>"; };
F3950CD7212BC88D00F51292 /* SDL_sensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sensor.h; sourceTree = "<group>"; };
F59C710300D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = "<group>"; };
F59C710600D5CB5801000001 /* SDL.info */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SDL.info; sourceTree = "<group>"; };
F5A2EF3900C6A39A01000001 /* BUGS.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = BUGS.txt; path = ../../BUGS.txt; sourceTree = SOURCE_ROOT; };
+ FA24348A21D41FFB00B8918A /* SDL_metal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_metal.h; sourceTree = "<group>"; };
FA73671C19A540EF004122E4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
- FABA34C61D8B5DB100915323 /* SDL_coreaudio.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_coreaudio.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ A75FCEA423E25AB700529352 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FCEAE23E25AB700529352 /* AudioToolbox.framework in Frameworks */,
+ A75FDABA23E28A7A00529352 /* AVFoundation.framework in Frameworks */,
+ A75FCEA723E25AB700529352 /* CoreAudio.framework in Frameworks */,
+ A75FDAC423E28BA700529352 /* CoreBluetooth.framework in Frameworks */,
+ A75FCEAB23E25AB700529352 /* CoreFoundation.framework in Frameworks */,
+ A75FDAC223E28B9600529352 /* CoreGraphics.framework in Frameworks */,
+ A75FDAC023E28B8000529352 /* CoreMotion.framework in Frameworks */,
+ A75FCEA823E25AB700529352 /* CoreVideo.framework in Frameworks */,
+ A75FDABE23E28B6200529352 /* GameController.framework in Frameworks */,
+ A75FCEAA23E25AB700529352 /* IOKit.framework in Frameworks */,
+ A75FCEA523E25AB700529352 /* Metal.framework in Frameworks */,
+ A75FDABC23E28B4000529352 /* OpenGLES.framework in Frameworks */,
+ A75FCEA623E25AB700529352 /* QuartzCore.framework in Frameworks */,
+ A75FDABB23E28B1D00529352 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FD05D23E25AC700529352 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDADF23E28D6600529352 /* AudioToolbox.framework in Frameworks */,
+ A75FDADD23E28D5500529352 /* AVFoundation.framework in Frameworks */,
+ A75FDADB23E28D4900529352 /* CoreAudio.framework in Frameworks */,
+ A75FDAD923E28D3F00529352 /* CoreBluetooth.framework in Frameworks */,
+ A75FDAD823E28D3B00529352 /* CoreFoundation.framework in Frameworks */,
+ A75FDAD623E28D3300529352 /* CoreGraphics.framework in Frameworks */,
+ A75FDAD423E28D2E00529352 /* CoreVideo.framework in Frameworks */,
+ A75FDAD223E28D2000529352 /* GameController.framework in Frameworks */,
+ A75FDAD023E28D1300529352 /* Metal.framework in Frameworks */,
+ A75FDACE23E28D0F00529352 /* OpenGLES.framework in Frameworks */,
+ A75FDACC23E28D0700529352 /* QuartzCore.framework in Frameworks */,
+ A75FDACA23E28D0200529352 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB4623E399AC00529352 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB5523E39DAC00529352 /* CoreBluetooth.framework in Frameworks */,
+ A75FDB5623E39DE900529352 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB6723E3A2C900529352 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB6823E3A2C900529352 /* CoreBluetooth.framework in Frameworks */,
+ A75FDB6923E3A2C900529352 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB8523E4C74400529352 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB9523E4C93600529352 /* CoreFoundation.framework in Frameworks */,
+ A75FDB9423E4C91300529352 /* IOKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A769B22E23E259AE00872273 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88B4623E2437C00DCD162 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D88BC423E24A9F00DCD162 /* AudioToolbox.framework in Frameworks */,
+ A7D88BC623E24ABA00DCD162 /* AVFoundation.framework in Frameworks */,
+ A7D88B4C23E2437C00DCD162 /* CoreAudio.framework in Frameworks */,
+ A75FDAB423E2797600529352 /* CoreBluetooth.framework in Frameworks */,
+ A7D88B4D23E2437C00DCD162 /* CoreFoundation.framework in Frameworks */,
+ A75FDB9D23E4CAFA00529352 /* hidapi.framework in Frameworks */,
+ A7D88BC823E24B0300DCD162 /* CoreGraphics.framework in Frameworks */,
+ A7D88BC223E24A8800DCD162 /* CoreMotion.framework in Frameworks */,
+ A7D88B4E23E2437C00DCD162 /* CoreVideo.framework in Frameworks */,
+ A7D88BBE23E24A6000DCD162 /* GameController.framework in Frameworks */,
+ A7D88B5023E2437C00DCD162 /* IOKit.framework in Frameworks */,
+ A7D88B4723E2437C00DCD162 /* Metal.framework in Frameworks */,
+ A7D88BC023E24A7700DCD162 /* OpenGLES.framework in Frameworks */,
+ A7D88B4823E2437C00DCD162 /* QuartzCore.framework in Frameworks */,
+ A7D88BBC23E24A2F00DCD162 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88D0423E24BED00DCD162 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D88D0523E24BED00DCD162 /* AudioToolbox.framework in Frameworks */,
+ A7D88D0623E24BED00DCD162 /* AVFoundation.framework in Frameworks */,
+ A7D88D0723E24BED00DCD162 /* CoreAudio.framework in Frameworks */,
+ A75FDAB623E2799700529352 /* CoreBluetooth.framework in Frameworks */,
+ A7D88D0823E24BED00DCD162 /* CoreFoundation.framework in Frameworks */,
+ A7D88D0923E24BED00DCD162 /* CoreGraphics.framework in Frameworks */,
+ A7D88D0B23E24BED00DCD162 /* CoreVideo.framework in Frameworks */,
+ A7D88D0C23E24BED00DCD162 /* GameController.framework in Frameworks */,
+ A7D88D0E23E24BED00DCD162 /* Metal.framework in Frameworks */,
+ A7D88D0F23E24BED00DCD162 /* OpenGLES.framework in Frameworks */,
+ A7D88D1023E24BED00DCD162 /* QuartzCore.framework in Frameworks */,
+ A75FDBA023E4CAFF00529352 /* hidapi.framework in Frameworks */,
+ A7D88D1123E24BED00DCD162 /* UIKit.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88E4523E24D3B00DCD162 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
BECDF6680761BA81005FE872 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -1264,6 +4583,7 @@
564624381FF821DA0074AC87 /* Metal.framework in Frameworks */,
564624361FF821C20074AC87 /* QuartzCore.framework in Frameworks */,
A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */,
+ A75FDB9A23E4CAEF00529352 /* hidapi.framework in Frameworks */,
00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */,
007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */,
A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */,
@@ -1278,16 +4598,6 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 5646243A1FF821FF0074AC87 /* Metal.framework in Frameworks */,
- 564624391FF821EF0074AC87 /* QuartzCore.framework in Frameworks */,
- 56C5237E1D8F4985001F2F30 /* CoreAudio.framework in Frameworks */,
- FA73671E19A54140004122E4 /* CoreVideo.framework in Frameworks */,
- 007317AB0858DECD00B2BC32 /* Cocoa.framework in Frameworks */,
- 007317AD0858DECD00B2BC32 /* IOKit.framework in Frameworks */,
- 56C523801D8F498B001F2F30 /* CoreFoundation.framework in Frameworks */,
- 007317C30858E15000B2BC32 /* Carbon.framework in Frameworks */,
- DB31408B17554D37006C0E22 /* ForceFeedback.framework in Frameworks */,
- 562C4AE91D8F496200AF9EBE /* AudioToolbox.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1322,6 +4632,7 @@
AADA5B8616CCAB3000107CF7 /* SDL_bits.h */,
AA7557CC1595D4D800BBD41B /* SDL_blendmode.h */,
AA7557CD1595D4D800BBD41B /* SDL_clipboard.h */,
+ A75FDAF523E35EC400529352 /* SDL_config_iphoneos.h */,
AA7557CE1595D4D800BBD41B /* SDL_config_macosx.h */,
AA7557CF1595D4D800BBD41B /* SDL_config.h */,
AA7557D01595D4D800BBD41B /* SDL_copying.h */,
@@ -1342,6 +4653,7 @@
AA7557DD1595D4D800BBD41B /* SDL_log.h */,
AA7557DE1595D4D800BBD41B /* SDL_main.h */,
AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */,
+ FA24348A21D41FFB00B8918A /* SDL_metal.h */,
AA7557DF1595D4D800BBD41B /* SDL_mouse.h */,
AA7557E01595D4D800BBD41B /* SDL_mutex.h */,
AA7557E11595D4D800BBD41B /* SDL_name.h */,
@@ -1386,605 +4698,956 @@
children = (
BECDF66C0761BA81005FE872 /* SDL2.framework */,
BECDF6B30761BA81005FE872 /* libSDL2.a */,
- BECDF6BE0761BA81005FE872 /* Standard DMG */,
+ BECDF6BE0761BA81005FE872 /* SDL2 */,
DB31407717554B71006C0E22 /* libSDL2.dylib */,
+ A7D88B5423E2437C00DCD162 /* SDL2.framework */,
+ A7D88D1523E24BED00DCD162 /* SDL2.framework */,
+ A7D88E5423E24D3B00DCD162 /* libSDL2.a */,
+ A769B23D23E259AE00872273 /* libSDL2.a */,
+ A75FCEB323E25AB700529352 /* libSDL2.dylib */,
+ A75FD06C23E25AC700529352 /* libSDL2.dylib */,
+ A75FDB4923E399AC00529352 /* hidapi.framework */,
+ A75FDB6E23E3A2C900529352 /* hidapi.framework */,
+ A75FDB8C23E4C74400529352 /* hidapi.framework */,
);
name = Products;
sourceTree = "<group>";
};
- 041B2C9712FA0D680087D585 /* render */ = {
+ 0867D691FE84028FC02AAC07 /* SDLFramework */ = {
isa = PBXGroup;
children = (
- AADC5A401FDA030E00960936 /* metal */,
- 5C2EF6921FC986D8003F5197 /* opengles2 */,
- 041B2C9A12FA0D680087D585 /* opengl */,
- 041B2CA012FA0D680087D585 /* software */,
- 041B2C9E12FA0D680087D585 /* SDL_render.c */,
- 041B2C9F12FA0D680087D585 /* SDL_sysrender.h */,
- 04409B8F12FA97ED00FB9AA8 /* SDL_yuv_sw_c.h */,
- 04409B9012FA97ED00FB9AA8 /* SDL_yuv_sw.c */,
+ F5A2EF3900C6A39A01000001 /* BUGS.txt */,
+ F59C70FC00D5CB5801000001 /* pkg-support */,
+ 0153844A006D81B07F000001 /* Public Headers */,
+ 08FB77ACFE841707C02AAC07 /* Library Source */,
+ A75FDB4A23E399AC00529352 /* hidapi */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ BECDF66B0761BA81005FE872 /* Info-Framework.plist */,
+ 564624341FF821B70074AC87 /* Frameworks */,
+ A75FDB8D23E4C74400529352 /* hidapi-iOS copy-Info.plist */,
);
- path = render;
+ comments = "To build Universal Binaries, we have experimented with a variety of different options.\nThe complication is that we must retain compatibility with at least 10.2. \nThe Universal Binary defaults only work for > 10.3.9\n\nSo far, we have found:\ngcc 4.0.0 with Xcode 2.1 always links against libgcc_s. gcc 4.0.1 from Xcode 2.2 fixes this problem.\n\nBut gcc 4.0 will not work with < 10.3.9 because we continue to get an undefined symbol to _fprintf$LDBL128.\nSo we must use gcc 3.3 on PPC to accomplish 10.2 support. (But 4.0 is required for i386.)\n\nSetting the deployment target to 10.4 will disable prebinding, so for PPC, we set it less than 10.4 to preserve prebinding for legacy support.\n\nSetting the PPC SDKROOT to /Developers/SDKs/MacOSX10.2.8.sdk will link to 63.0.0 libSystem.B.dylib. Leaving it at current or 10.4u links to 88.1.2. However, as long as we are using gcc 3.3, it doesn't seem to matter as testing has demonstrated both will run. We have decided not to invoke the 10.2.8 SDK because it is not a default installed component with Xcode which will probably cause most people problems. However, rather than deleting the SDKROOT_ppc entry entirely, we have mapped it to 10.4u in case we decide we need to change this setting.\n\nTo use Altivec or SSE, we needed architecture specific flags:\nOTHER_CFLAGS_ppc\nOTHER_CFLAGS_i386\nOTHER_CFLAGS=$(OTHER_CFLAGS_($CURRENT_ARCH))\n\nThe general OTHER_CFLAGS needed to be manually mapped to architecture specific options because Xcode didn't do this automatically for us.\n\n\n";
+ indentWidth = 4;
+ name = SDLFramework;
sourceTree = "<group>";
+ tabWidth = 4;
+ usesTabs = 0;
};
- 041B2C9A12FA0D680087D585 /* opengl */ = {
+ 08FB77ACFE841707C02AAC07 /* Library Source */ = {
isa = PBXGroup;
children = (
- 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */,
- 0442EC1712FE1BBA004C9285 /* SDL_render_gl.c */,
- 0435673C1303160F00BA5428 /* SDL_shaders_gl.c */,
- 0435673D1303160F00BA5428 /* SDL_shaders_gl.h */,
+ A7D8A57223E2513D00DCD162 /* atomic */,
+ A7D8A86423E2513F00DCD162 /* audio */,
+ A7D8A77423E2513E00DCD162 /* cpuinfo */,
+ A7D8A5D723E2513D00DCD162 /* dynapi */,
+ A7D8A92923E2514000DCD162 /* events */,
+ A7D8A7DA23E2513E00DCD162 /* file */,
+ A7D8A7F623E2513F00DCD162 /* filesystem */,
+ A7D8A5C223E2513D00DCD162 /* haptic */,
+ A7D8A80923E2513F00DCD162 /* hidapi */,
+ A7D8A79D23E2513E00DCD162 /* joystick */,
+ A7D8A91123E2514000DCD162 /* libm */,
+ A7D8A85D23E2513F00DCD162 /* loadso */,
+ A7D8A5AC23E2513D00DCD162 /* main */,
+ A7D8A7DF23E2513F00DCD162 /* power */,
+ A7D8A8DA23E2514000DCD162 /* render */,
+ A7D8A57623E2513D00DCD162 /* sensor */,
+ A7D8A8D223E2514000DCD162 /* stdlib */,
+ A7D8A77623E2513E00DCD162 /* thread */,
+ A7D8A5DE23E2513D00DCD162 /* timer */,
+ A7D8A5EB23E2513D00DCD162 /* video */,
+ A7D8A7F523E2513F00DCD162 /* SDL_assert_c.h */,
+ A7D8A94423E2514000DCD162 /* SDL_assert.c */,
+ A7D8A92823E2514000DCD162 /* SDL_dataqueue.c */,
+ A7D8A57023E2513D00DCD162 /* SDL_dataqueue.h */,
+ A7D8A57523E2513D00DCD162 /* SDL_error_c.h */,
+ A7D8A8BF23E2513F00DCD162 /* SDL_error.c */,
+ A7D8A8D123E2514000DCD162 /* SDL_hints_c.h */,
+ A7D8A5AB23E2513D00DCD162 /* SDL_hints.c */,
+ A7D8A58323E2513D00DCD162 /* SDL_internal.h */,
+ A7D8A5DD23E2513D00DCD162 /* SDL_log.c */,
+ A7D8A57123E2513D00DCD162 /* SDL.c */,
);
- path = opengl;
+ name = "Library Source";
+ path = ../../src;
sourceTree = "<group>";
};
- 041B2CA012FA0D680087D585 /* software */ = {
+ 564624341FF821B70074AC87 /* Frameworks */ = {
isa = PBXGroup;
children = (
- 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */,
- 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */,
- 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */,
- 04F7804012FB74A200FC43C0 /* SDL_blendline.h */,
- 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */,
- 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */,
- 04F7804312FB74A200FC43C0 /* SDL_draw.h */,
- 04F7804412FB74A200FC43C0 /* SDL_drawline.c */,
- 04F7804512FB74A200FC43C0 /* SDL_drawline.h */,
- 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */,
- 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */,
- 0442EC1B12FE1BCB004C9285 /* SDL_render_sw.c */,
- 0442EC1A12FE1BCB004C9285 /* SDL_render_sw_c.h */,
- AA628AC8159367B7005138DD /* SDL_rotate.c */,
- AA628AC9159367B7005138DD /* SDL_rotate.h */,
+ A75FDADE23E28D6600529352 /* AudioToolbox.framework */,
+ A75FDADC23E28D5500529352 /* AVFoundation.framework */,
+ A75FDADA23E28D4900529352 /* CoreAudio.framework */,
+ A75FDAD723E28D3B00529352 /* CoreFoundation.framework */,
+ A75FDAD523E28D3300529352 /* CoreGraphics.framework */,
+ A75FDAD323E28D2E00529352 /* CoreVideo.framework */,
+ A75FDAD123E28D2000529352 /* GameController.framework */,
+ A75FDACF23E28D1300529352 /* Metal.framework */,
+ A75FDACD23E28D0F00529352 /* OpenGLES.framework */,
+ A75FDACB23E28D0700529352 /* QuartzCore.framework */,
+ A75FDAC923E28D0100529352 /* UIKit.framework */,
+ A75FDAC323E28BA700529352 /* CoreBluetooth.framework */,
+ A75FDAC123E28B9600529352 /* CoreGraphics.framework */,
+ A75FDABF23E28B8000529352 /* CoreMotion.framework */,
+ A75FDABD23E28B6200529352 /* GameController.framework */,
+ A75FDAB923E28A7A00529352 /* AVFoundation.framework */,
+ A75FDAB323E2797600529352 /* CoreBluetooth.framework */,
+ A75FDAB523E2799700529352 /* CoreBluetooth.framework */,
+ A7D88BC723E24B0200DCD162 /* CoreGraphics.framework */,
+ A7D88BC523E24ABA00DCD162 /* AVFoundation.framework */,
+ A7D88BC323E24A9F00DCD162 /* AudioToolbox.framework */,
+ A7D88BC123E24A8800DCD162 /* CoreMotion.framework */,
+ A7D88BBF23E24A7700DCD162 /* OpenGLES.framework */,
+ A7D88BBD23E24A6000DCD162 /* GameController.framework */,
+ A7D88BBB23E24A2F00DCD162 /* UIKit.framework */,
+ A7381E931D8B69C300B177DD /* AudioToolbox.framework */,
+ 007317C10858E15000B2BC32 /* Carbon.framework */,
+ 0073179D0858DECD00B2BC32 /* Cocoa.framework */,
+ A7381E951D8B69D600B177DD /* CoreAudio.framework */,
+ 00D0D08310675DD9004B05EF /* CoreFoundation.framework */,
+ FA73671C19A540EF004122E4 /* CoreVideo.framework */,
+ 00CFA89C106B4BA100758660 /* ForceFeedback.framework */,
+ 0073179F0858DECD00B2BC32 /* IOKit.framework */,
+ 564624371FF821CB0074AC87 /* Metal.framework */,
+ 564624351FF821B80074AC87 /* QuartzCore.framework */,
);
- path = software;
+ name = Frameworks;
sourceTree = "<group>";
};
- 04BDFD7312E6671700899322 /* atomic */ = {
+ A75FDAA423E2790500529352 /* ios */ = {
isa = PBXGroup;
children = (
- 04BDFD7412E6671700899322 /* SDL_atomic.c */,
- 04BDFD7512E6671700899322 /* SDL_spinlock.c */,
+ A75FDAA523E2792500529352 /* hid.m */,
);
+ path = ios;
+ sourceTree = "<group>";
+ };
+ A75FDB4A23E399AC00529352 /* hidapi */ = {
+ isa = PBXGroup;
+ children = (
+ A75FDB4C23E399AC00529352 /* Info.plist */,
+ );
+ path = hidapi;
+ sourceTree = "<group>";
+ };
+ A75FDB9123E4C8B800529352 /* mac */ = {
+ isa = PBXGroup;
+ children = (
+ A75FDB9223E4C8DB00529352 /* hid.c */,
+ );
+ path = mac;
+ sourceTree = "<group>";
+ };
+ A7D8A57223E2513D00DCD162 /* atomic */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A57423E2513D00DCD162 /* SDL_atomic.c */,
+ A7D8A57323E2513D00DCD162 /* SDL_spinlock.c */,
+ );
path = atomic;
sourceTree = "<group>";
};
- 04BDFD7612E6671700899322 /* audio */ = {
+ A7D8A57623E2513D00DCD162 /* sensor */ = {
isa = PBXGroup;
children = (
- 04BDFD8712E6671700899322 /* disk */,
- 04BDFD9312E6671700899322 /* dummy */,
- 04BDFD9F12E6671700899322 /* coreaudio */,
- 04BDFDB412E6671700899322 /* SDL_audio.c */,
- 04BDFDB512E6671700899322 /* SDL_audio_c.h */,
- 04BDFDB612E6671700899322 /* SDL_audiocvt.c */,
- 04BDFDB712E6671700899322 /* SDL_audiodev.c */,
- 04BDFDB812E6671700899322 /* SDL_audiodev_c.h */,
- 04BDFDBA12E6671700899322 /* SDL_audiotypecvt.c */,
- 04BDFDBB12E6671700899322 /* SDL_mixer.c */,
- 04BDFDC212E6671700899322 /* SDL_sysaudio.h */,
- 04BDFDC312E6671700899322 /* SDL_wave.c */,
- 04BDFDC412E6671700899322 /* SDL_wave.h */,
+ A7D8A57A23E2513D00DCD162 /* coremotion */,
+ A7D8A57723E2513D00DCD162 /* dummy */,
+ A7D8A58123E2513D00DCD162 /* SDL_sensor_c.h */,
+ A7D8A58223E2513D00DCD162 /* SDL_sensor.c */,
+ A7D8A57D23E2513D00DCD162 /* SDL_syssensor.h */,
+ );
+ path = sensor;
+ sourceTree = "<group>";
+ };
+ A7D8A57723E2513D00DCD162 /* dummy */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A57923E2513D00DCD162 /* SDL_dummysensor.c */,
+ A7D8A57823E2513D00DCD162 /* SDL_dummysensor.h */,
+ );
+ path = dummy;
+ sourceTree = "<group>";
+ };
+ A7D8A57A23E2513D00DCD162 /* coremotion */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A57B23E2513D00DCD162 /* SDL_coremotionsensor.h */,
+ A7D8A57C23E2513D00DCD162 /* SDL_coremotionsensor.m */,
+ );
+ path = coremotion;
+ sourceTree = "<group>";
+ };
+ A7D8A5AC23E2513D00DCD162 /* main */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5AF23E2513D00DCD162 /* uikit */,
+ );
+ path = main;
+ sourceTree = "<group>";
+ };
+ A7D8A5AF23E2513D00DCD162 /* uikit */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5B023E2513D00DCD162 /* SDL_uikit_main.c */,
+ );
+ path = uikit;
+ sourceTree = "<group>";
+ };
+ A7D8A5C223E2513D00DCD162 /* haptic */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5CD23E2513D00DCD162 /* darwin */,
+ A7D8A5C323E2513D00DCD162 /* dummy */,
+ A7D8A5C623E2513D00DCD162 /* SDL_haptic_c.h */,
+ A7D8A5C523E2513D00DCD162 /* SDL_haptic.c */,
+ A7D8A5CC23E2513D00DCD162 /* SDL_syshaptic.h */,
+ );
+ path = haptic;
+ sourceTree = "<group>";
+ };
+ A7D8A5C323E2513D00DCD162 /* dummy */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5C423E2513D00DCD162 /* SDL_syshaptic.c */,
);
- path = audio;
+ path = dummy;
sourceTree = "<group>";
};
- 04BDFD8712E6671700899322 /* disk */ = {
+ A7D8A5CD23E2513D00DCD162 /* darwin */ = {
isa = PBXGroup;
children = (
- 04BDFD8812E6671700899322 /* SDL_diskaudio.c */,
- 04BDFD8912E6671700899322 /* SDL_diskaudio.h */,
+ A7D8A5CF23E2513D00DCD162 /* SDL_syshaptic_c.h */,
+ A7D8A5CE23E2513D00DCD162 /* SDL_syshaptic.c */,
);
- path = disk;
+ path = darwin;
sourceTree = "<group>";
};
- 04BDFD9312E6671700899322 /* dummy */ = {
+ A7D8A5D723E2513D00DCD162 /* dynapi */ = {
isa = PBXGroup;
children = (
- 04BDFD9412E6671700899322 /* SDL_dummyaudio.c */,
- 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */,
+ A7D8A5D923E2513D00DCD162 /* SDL_dynapi_overrides.h */,
+ A7D8A5DB23E2513D00DCD162 /* SDL_dynapi_procs.h */,
+ A7D8A5DA23E2513D00DCD162 /* SDL_dynapi.c */,
+ A7D8A5D823E2513D00DCD162 /* SDL_dynapi.h */,
);
+ path = dynapi;
+ sourceTree = "<group>";
+ };
+ A7D8A5DE23E2513D00DCD162 /* timer */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5E123E2513D00DCD162 /* dummy */,
+ A7D8A5E723E2513D00DCD162 /* unix */,
+ A7D8A5E023E2513D00DCD162 /* SDL_timer_c.h */,
+ A7D8A5DF23E2513D00DCD162 /* SDL_timer.c */,
+ );
+ path = timer;
+ sourceTree = "<group>";
+ };
+ A7D8A5E123E2513D00DCD162 /* dummy */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A5E223E2513D00DCD162 /* SDL_systimer.c */,
+ );
path = dummy;
sourceTree = "<group>";
};
- 04BDFD9F12E6671700899322 /* coreaudio */ = {
+ A7D8A5E723E2513D00DCD162 /* unix */ = {
isa = PBXGroup;
children = (
- 04BDFDA112E6671700899322 /* SDL_coreaudio.h */,
- FABA34C61D8B5DB100915323 /* SDL_coreaudio.m */,
+ A7D8A5E823E2513D00DCD162 /* SDL_systimer.c */,
);
- path = coreaudio;
+ path = unix;
sourceTree = "<group>";
};
- 04BDFDD312E6671700899322 /* cpuinfo */ = {
+ A7D8A5EB23E2513D00DCD162 /* video */ = {
isa = PBXGroup;
children = (
- 04BDFDD412E6671700899322 /* SDL_cpuinfo.c */,
+ A7D8A67D23E2513E00DCD162 /* cocoa */,
+ A7D8A60523E2513D00DCD162 /* dummy */,
+ A7D8A72123E2513E00DCD162 /* khronos */,
+ A7D8A5EC23E2513D00DCD162 /* offscreen */,
+ A7D8A61823E2513D00DCD162 /* uikit */,
+ A7D8A6FB23E2513E00DCD162 /* x11 */,
+ A7D8A76C23E2513E00DCD162 /* yuv2rgb */,
+ A7D8A66223E2513E00DCD162 /* SDL_blit_0.c */,
+ A7D8A6FA23E2513E00DCD162 /* SDL_blit_1.c */,
+ A7D8A66423E2513E00DCD162 /* SDL_blit_A.c */,
+ A7D8A63F23E2513D00DCD162 /* SDL_blit_auto.c */,
+ A7D8A73F23E2513E00DCD162 /* SDL_blit_auto.h */,
+ A7D8A61623E2513D00DCD162 /* SDL_blit_copy.c */,
+ A7D8A76623E2513E00DCD162 /* SDL_blit_copy.h */,
+ A7D8A64223E2513D00DCD162 /* SDL_blit_N.c */,
+ A7D8A60223E2513D00DCD162 /* SDL_blit_slow.c */,
+ A7D8A66323E2513E00DCD162 /* SDL_blit_slow.h */,
+ A7D8A64C23E2513D00DCD162 /* SDL_blit.c */,
+ A7D8A76B23E2513E00DCD162 /* SDL_blit.h */,
+ A7D8A77323E2513E00DCD162 /* SDL_bmp.c */,
+ A7D8A67B23E2513E00DCD162 /* SDL_clipboard.c */,
+ A7D8A60423E2513D00DCD162 /* SDL_egl_c.h */,
+ A7D8A6B623E2513E00DCD162 /* SDL_egl.c */,
+ A7D8A76823E2513E00DCD162 /* SDL_fillrect.c */,
+ A7D8A74023E2513E00DCD162 /* SDL_pixels_c.h */,
+ A7D8A64D23E2513D00DCD162 /* SDL_pixels.c */,
+ A7D8A60C23E2513D00DCD162 /* SDL_rect_c.h */,
+ A7D8A63423E2513D00DCD162 /* SDL_rect.c */,
+ A7D8A76723E2513E00DCD162 /* SDL_RLEaccel_c.h */,
+ A7D8A61523E2513D00DCD162 /* SDL_RLEaccel.c */,
+ A7D8A60D23E2513D00DCD162 /* SDL_shape_internals.h */,
+ A7D8A76923E2513E00DCD162 /* SDL_shape.c */,
+ A7D8A60323E2513D00DCD162 /* SDL_stretch.c */,
+ A7D8A61423E2513D00DCD162 /* SDL_surface.c */,
+ A7D8A61723E2513D00DCD162 /* SDL_sysvideo.h */,
+ A7D8A60E23E2513D00DCD162 /* SDL_video.c */,
+ A7D8A63E23E2513D00DCD162 /* SDL_vulkan_internal.h */,
+ A7D8A64023E2513D00DCD162 /* SDL_vulkan_utils.c */,
+ A7D8A76A23E2513E00DCD162 /* SDL_yuv_c.h */,
+ A7D8A67C23E2513E00DCD162 /* SDL_yuv.c */,
);
- path = cpuinfo;
+ path = video;
sourceTree = "<group>";
};
- 04BDFDD512E6671700899322 /* events */ = {
+ A7D8A5EC23E2513D00DCD162 /* offscreen */ = {
isa = PBXGroup;
children = (
- 04BDFDD612E6671700899322 /* blank_cursor.h */,
- 04BDFDD712E6671700899322 /* default_cursor.h */,
- 04BDFDD812E6671700899322 /* scancodes_darwin.h */,
- 04BDFDD912E6671700899322 /* scancodes_linux.h */,
- 04BDFDDB12E6671700899322 /* scancodes_xfree86.h */,
- 04BDFDDD12E6671700899322 /* SDL_clipboardevents_c.h */,
- 04BDFDDC12E6671700899322 /* SDL_clipboardevents.c */,
- F30D9CCB212EB4810047DF2E /* SDL_displayevents_c.h */,
- F30D9CCC212EB4810047DF2E /* SDL_displayevents.c */,
- 566CDE8D148F0AC200C5A9BB /* SDL_dropevents_c.h */,
- 566CDE8E148F0AC200C5A9BB /* SDL_dropevents.c */,
- 04BDFDDF12E6671700899322 /* SDL_events_c.h */,
- 04BDFDDE12E6671700899322 /* SDL_events.c */,
- 04BDFDE112E6671700899322 /* SDL_gesture_c.h */,
- 04BDFDE012E6671700899322 /* SDL_gesture.c */,
- 04BDFDE312E6671700899322 /* SDL_keyboard_c.h */,
- 04BDFDE212E6671700899322 /* SDL_keyboard.c */,
- 04BDFDE512E6671700899322 /* SDL_mouse_c.h */,
- 04BDFDE412E6671700899322 /* SDL_mouse.c */,
- 04BDFDE612E6671700899322 /* SDL_quit.c */,
- 04BDFDE712E6671700899322 /* SDL_sysevents.h */,
- 04BDFDE912E6671700899322 /* SDL_touch_c.h */,
- 04BDFDE812E6671700899322 /* SDL_touch.c */,
- 04BDFDEB12E6671700899322 /* SDL_windowevents_c.h */,
- 04BDFDEA12E6671700899322 /* SDL_windowevents.c */,
+ A7D8A5EE23E2513D00DCD162 /* SDL_offscreenevents_c.h */,
+ A7D8A5F023E2513D00DCD162 /* SDL_offscreenevents.c */,
+ A7D8A5F423E2513D00DCD162 /* SDL_offscreenframebuffer_c.h */,
+ A7D8A5F223E2513D00DCD162 /* SDL_offscreenframebuffer.c */,
+ A7D8A5ED23E2513D00DCD162 /* SDL_offscreenopengl.c */,
+ A7D8A5F323E2513D00DCD162 /* SDL_offscreenopengl.h */,
+ A7D8A5F623E2513D00DCD162 /* SDL_offscreenvideo.c */,
+ A7D8A5F123E2513D00DCD162 /* SDL_offscreenvideo.h */,
+ A7D8A5EF23E2513D00DCD162 /* SDL_offscreenwindow.c */,
+ A7D8A5F523E2513D00DCD162 /* SDL_offscreenwindow.h */,
);
- path = events;
+ path = offscreen;
sourceTree = "<group>";
};
- 04BDFDEC12E6671700899322 /* file */ = {
+ A7D8A60523E2513D00DCD162 /* dummy */ = {
isa = PBXGroup;
children = (
- 04BDFDED12E6671700899322 /* cocoa */,
- 04BDFDF012E6671700899322 /* SDL_rwops.c */,
+ A7D8A60B23E2513D00DCD162 /* SDL_nullevents_c.h */,
+ A7D8A60923E2513D00DCD162 /* SDL_nullevents.c */,
+ A7D8A60723E2513D00DCD162 /* SDL_nullframebuffer_c.h */,
+ A7D8A60623E2513D00DCD162 /* SDL_nullframebuffer.c */,
+ A7D8A60823E2513D00DCD162 /* SDL_nullvideo.c */,
+ A7D8A60A23E2513D00DCD162 /* SDL_nullvideo.h */,
);
- path = file;
+ path = dummy;
sourceTree = "<group>";
};
- 04BDFDED12E6671700899322 /* cocoa */ = {
+ A7D8A61823E2513D00DCD162 /* uikit */ = {
isa = PBXGroup;
children = (
- 04BDFDEE12E6671700899322 /* SDL_rwopsbundlesupport.h */,
- 04BDFDEF12E6671700899322 /* SDL_rwopsbundlesupport.m */,
+ A7D8A62823E2513D00DCD162 /* keyinfotable.h */,
+ A7D8A62F23E2513D00DCD162 /* SDL_uikitappdelegate.h */,
+ A7D8A61E23E2513D00DCD162 /* SDL_uikitappdelegate.m */,
+ A7D8A62123E2513D00DCD162 /* SDL_uikitclipboard.h */,
+ A7D8A62A23E2513D00DCD162 /* SDL_uikitclipboard.m */,
+ A7D8A62D23E2513D00DCD162 /* SDL_uikitevents.h */,
+ A7D8A61C23E2513D00DCD162 /* SDL_uikitevents.m */,
+ A7D8A62623E2513D00DCD162 /* SDL_uikitmessagebox.h */,
+ A7D8A61B23E2513D00DCD162 /* SDL_uikitmessagebox.m */,
+ A7D8A61D23E2513D00DCD162 /* SDL_uikitmetalview.h */,
+ A7D8A62E23E2513D00DCD162 /* SDL_uikitmetalview.m */,
+ A7D8A61F23E2513D00DCD162 /* SDL_uikitmodes.h */,
+ A7D8A62C23E2513D00DCD162 /* SDL_uikitmodes.m */,
+ A7D8A63123E2513D00DCD162 /* SDL_uikitopengles.h */,
+ A7D8A62323E2513D00DCD162 /* SDL_uikitopengles.m */,
+ A7D8A62B23E2513D00DCD162 /* SDL_uikitopenglview.h */,
+ A7D8A62023E2513D00DCD162 /* SDL_uikitopenglview.m */,
+ A7D8A62223E2513D00DCD162 /* SDL_uikitvideo.h */,
+ A7D8A63223E2513D00DCD162 /* SDL_uikitvideo.m */,
+ A7D8A61923E2513D00DCD162 /* SDL_uikitview.h */,
+ A7D8A62923E2513D00DCD162 /* SDL_uikitview.m */,
+ A7D8A62423E2513D00DCD162 /* SDL_uikitviewcontroller.h */,
+ A7D8A63023E2513D00DCD162 /* SDL_uikitviewcontroller.m */,
+ A7D8A63323E2513D00DCD162 /* SDL_uikitvulkan.h */,
+ A7D8A62523E2513D00DCD162 /* SDL_uikitvulkan.m */,
+ A7D8A62723E2513D00DCD162 /* SDL_uikitwindow.h */,
+ A7D8A61A23E2513D00DCD162 /* SDL_uikitwindow.m */,
);
- path = cocoa;
+ path = uikit;
sourceTree = "<group>";
};
- 04BDFDF112E6671700899322 /* haptic */ = {
+ A7D8A67D23E2513E00DCD162 /* cocoa */ = {
isa = PBXGroup;
children = (
- 04BDFDF212E6671700899322 /* darwin */,
- 04BDFDFA12E6671700899322 /* SDL_haptic.c */,
- 04BDFDFB12E6671700899322 /* SDL_haptic_c.h */,
- 04BDFDFC12E6671700899322 /* SDL_syshaptic.h */,
+ A7D8A68A23E2513E00DCD162 /* SDL_cocoaclipboard.h */,
+ A7D8A69523E2513E00DCD162 /* SDL_cocoaclipboard.m */,
+ A7D8A69623E2513E00DCD162 /* SDL_cocoaevents.h */,
+ A7D8A68923E2513E00DCD162 /* SDL_cocoaevents.m */,
+ A7D8A68023E2513E00DCD162 /* SDL_cocoakeyboard.h */,
+ A7D8A68C23E2513E00DCD162 /* SDL_cocoakeyboard.m */,
+ A7D8A69423E2513E00DCD162 /* SDL_cocoamessagebox.h */,
+ A7D8A68B23E2513E00DCD162 /* SDL_cocoamessagebox.m */,
+ A7D8A68623E2513E00DCD162 /* SDL_cocoametalview.h */,
+ A7D8A69923E2513E00DCD162 /* SDL_cocoametalview.m */,
+ A7D8A69123E2513E00DCD162 /* SDL_cocoamodes.h */,
+ A7D8A68123E2513E00DCD162 /* SDL_cocoamodes.m */,
+ A7D8A69823E2513E00DCD162 /* SDL_cocoamouse.h */,
+ A7D8A68723E2513E00DCD162 /* SDL_cocoamouse.m */,
+ A7D8A68823E2513E00DCD162 /* SDL_cocoamousetap.h */,
+ A7D8A69723E2513E00DCD162 /* SDL_cocoamousetap.m */,
+ A7D8A68D23E2513E00DCD162 /* SDL_cocoaopengl.h */,
+ A7D8A67F23E2513E00DCD162 /* SDL_cocoaopengl.m */,
+ A7D8A69023E2513E00DCD162 /* SDL_cocoaopengles.h */,
+ A7D8A68223E2513E00DCD162 /* SDL_cocoaopengles.m */,
+ A7D8A67E23E2513E00DCD162 /* SDL_cocoashape.h */,
+ A7D8A68E23E2513E00DCD162 /* SDL_cocoashape.m */,
+ A7D8A69323E2513E00DCD162 /* SDL_cocoavideo.h */,
+ A7D8A68523E2513E00DCD162 /* SDL_cocoavideo.m */,
+ A7D8A68F23E2513E00DCD162 /* SDL_cocoavulkan.h */,
+ A7D8A68323E2513E00DCD162 /* SDL_cocoavulkan.m */,
+ A7D8A69223E2513E00DCD162 /* SDL_cocoawindow.h */,
+ A7D8A68423E2513E00DCD162 /* SDL_cocoawindow.m */,
);
- path = haptic;
+ path = cocoa;
sourceTree = "<group>";
};
- 04BDFDF212E6671700899322 /* darwin */ = {
+ A7D8A6FB23E2513E00DCD162 /* x11 */ = {
isa = PBXGroup;
children = (
- 04BDFDF312E6671700899322 /* SDL_syshaptic.c */,
- DB89958518A1A5C50092407C /* SDL_syshaptic_c.h */,
+ A7D8A71223E2513E00DCD162 /* edid-parse.c */,
+ A7D8A71423E2513E00DCD162 /* edid.h */,
+ A7D8A70923E2513E00DCD162 /* imKStoUCS.c */,
+ A7D8A71F23E2513E00DCD162 /* imKStoUCS.h */,
+ A7D8A70B23E2513E00DCD162 /* SDL_x11clipboard.c */,
+ A7D8A71D23E2513E00DCD162 /* SDL_x11clipboard.h */,
+ A7D8A70523E2513E00DCD162 /* SDL_x11dyn.c */,
+ A7D8A71923E2513E00DCD162 /* SDL_x11dyn.h */,
+ A7D8A70A23E2513E00DCD162 /* SDL_x11events.c */,
+ A7D8A71E23E2513E00DCD162 /* SDL_x11events.h */,
+ A7D8A70623E2513E00DCD162 /* SDL_x11framebuffer.c */,
+ A7D8A71823E2513E00DCD162 /* SDL_x11framebuffer.h */,
+ A7D8A70C23E2513E00DCD162 /* SDL_x11keyboard.c */,
+ A7D8A71C23E2513E00DCD162 /* SDL_x11keyboard.h */,
+ A7D8A71023E2513E00DCD162 /* SDL_x11messagebox.c */,
+ A7D8A6FD23E2513E00DCD162 /* SDL_x11messagebox.h */,
+ A7D8A6FE23E2513E00DCD162 /* SDL_x11modes.c */,
+ A7D8A70F23E2513E00DCD162 /* SDL_x11modes.h */,
+ A7D8A70423E2513E00DCD162 /* SDL_x11mouse.c */,
+ A7D8A71A23E2513E00DCD162 /* SDL_x11mouse.h */,
+ A7D8A6FF23E2513E00DCD162 /* SDL_x11opengl.c */,
+ A7D8A70E23E2513E00DCD162 /* SDL_x11opengl.h */,
+ A7D8A71B23E2513E00DCD162 /* SDL_x11opengles.c */,
+ A7D8A70323E2513E00DCD162 /* SDL_x11opengles.h */,
+ A7D8A71623E2513E00DCD162 /* SDL_x11shape.c */,
+ A7D8A70123E2513E00DCD162 /* SDL_x11shape.h */,
+ A7D8A70D23E2513E00DCD162 /* SDL_x11sym.h */,
+ A7D8A71123E2513E00DCD162 /* SDL_x11touch.c */,
+ A7D8A6FC23E2513E00DCD162 /* SDL_x11touch.h */,
+ A7D8A70823E2513E00DCD162 /* SDL_x11video.c */,
+ A7D8A72023E2513E00DCD162 /* SDL_x11video.h */,
+ A7D8A70023E2513E00DCD162 /* SDL_x11vulkan.c */,
+ A7D8A71523E2513E00DCD162 /* SDL_x11vulkan.h */,
+ A7D8A70723E2513E00DCD162 /* SDL_x11window.c */,
+ A7D8A71723E2513E00DCD162 /* SDL_x11window.h */,
+ A7D8A70223E2513E00DCD162 /* SDL_x11xinput2.c */,
+ A7D8A71323E2513E00DCD162 /* SDL_x11xinput2.h */,
);
- path = darwin;
+ path = x11;
sourceTree = "<group>";
};
- 04BDFDFF12E6671700899322 /* joystick */ = {
+ A7D8A72123E2513E00DCD162 /* khronos */ = {
isa = PBXGroup;
children = (
- A704170C20F09AA600A82227 /* hidapi */,
- 04BDFE0612E6671700899322 /* darwin */,
- 04BDFE1612E6671700899322 /* SDL_joystick.c */,
- 04BDFE1712E6671700899322 /* SDL_joystick_c.h */,
- BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */,
- 04BDFE1812E6671700899322 /* SDL_sysjoystick.h */,
+ A7D8A72823E2513E00DCD162 /* EGL */,
+ A7D8A72223E2513E00DCD162 /* GLES2 */,
+ A7D8A72623E2513E00DCD162 /* KHR */,
+ A7D8A72C23E2513E00DCD162 /* vulkan */,
);
- path = joystick;
+ path = khronos;
sourceTree = "<group>";
};
- 04BDFE0612E6671700899322 /* darwin */ = {
+ A7D8A72223E2513E00DCD162 /* GLES2 */ = {
isa = PBXGroup;
children = (
- 04BDFE0712E6671700899322 /* SDL_sysjoystick.c */,
- 04BDFE0812E6671700899322 /* SDL_sysjoystick_c.h */,
+ A7D8A72423E2513E00DCD162 /* gl2.h */,
+ A7D8A72323E2513E00DCD162 /* gl2ext.h */,
+ A7D8A72523E2513E00DCD162 /* gl2platform.h */,
);
- path = darwin;
+ path = GLES2;
sourceTree = "<group>";
};
- 04BDFE2F12E6671700899322 /* loadso */ = {
+ A7D8A72623E2513E00DCD162 /* KHR */ = {
isa = PBXGroup;
children = (
- 04BDFE3212E6671700899322 /* dlopen */,
+ A7D8A72723E2513E00DCD162 /* khrplatform.h */,
);
- path = loadso;
+ path = KHR;
sourceTree = "<group>";
};
- 04BDFE3212E6671700899322 /* dlopen */ = {
+ A7D8A72823E2513E00DCD162 /* EGL */ = {
isa = PBXGroup;
children = (
- 04BDFE3312E6671700899322 /* SDL_sysloadso.c */,
+ A7D8A72923E2513E00DCD162 /* egl.h */,
+ A7D8A72A23E2513E00DCD162 /* eglext.h */,
+ A7D8A72B23E2513E00DCD162 /* eglplatform.h */,
);
- path = dlopen;
+ path = EGL;
sourceTree = "<group>";
};
- 04BDFE4512E6671700899322 /* power */ = {
+ A7D8A72C23E2513E00DCD162 /* vulkan */ = {
isa = PBXGroup;
children = (
- 04BDFE4A12E6671700899322 /* macosx */,
- 04BDFE4E12E6671700899322 /* SDL_power.c */,
+ A7D8A72E23E2513E00DCD162 /* vk_icd.h */,
+ A7D8A72D23E2513E00DCD162 /* vk_layer.h */,
+ A7D8A73123E2513E00DCD162 /* vk_platform.h */,
+ A7D8A73D23E2513E00DCD162 /* vk_sdk_platform.h */,
+ A7D8A73E23E2513E00DCD162 /* vulkan_android.h */,
+ A7D8A73C23E2513E00DCD162 /* vulkan_core.h */,
+ A7D8A73323E2513E00DCD162 /* vulkan_fuchsia.h */,
+ A7D8A73B23E2513E00DCD162 /* vulkan_ios.h */,
+ A7D8A73623E2513E00DCD162 /* vulkan_macos.h */,
+ A7D8A73923E2513E00DCD162 /* vulkan_mir.h */,
+ A7D8A72F23E2513E00DCD162 /* vulkan_vi.h */,
+ A7D8A73423E2513E00DCD162 /* vulkan_wayland.h */,
+ A7D8A73523E2513E00DCD162 /* vulkan_win32.h */,
+ A7D8A73823E2513E00DCD162 /* vulkan_xcb.h */,
+ A7D8A73723E2513E00DCD162 /* vulkan_xlib_xrandr.h */,
+ A7D8A73A23E2513E00DCD162 /* vulkan_xlib.h */,
+ A7D8A73023E2513E00DCD162 /* vulkan.h */,
+ A7D8A73223E2513E00DCD162 /* vulkan.hpp */,
);
- path = power;
+ path = vulkan;
sourceTree = "<group>";
};
- 04BDFE4A12E6671700899322 /* macosx */ = {
+ A7D8A76C23E2513E00DCD162 /* yuv2rgb */ = {
isa = PBXGroup;
children = (
- 04BDFE4B12E6671700899322 /* SDL_syspower.c */,
+ A7D8A77023E2513E00DCD162 /* yuv_rgb_sse_func.h */,
+ A7D8A77123E2513E00DCD162 /* yuv_rgb_std_func.h */,
+ A7D8A76E23E2513E00DCD162 /* yuv_rgb.c */,
+ A7D8A77223E2513E00DCD162 /* yuv_rgb.h */,
);
- path = macosx;
+ path = yuv2rgb;
sourceTree = "<group>";
};
- 04BDFE5D12E6671700899322 /* stdlib */ = {
+ A7D8A77423E2513E00DCD162 /* cpuinfo */ = {
isa = PBXGroup;
children = (
- 04BDFE5E12E6671700899322 /* SDL_getenv.c */,
- 04BDFE5F12E6671700899322 /* SDL_iconv.c */,
- 04BDFE6012E6671700899322 /* SDL_malloc.c */,
- 04BDFE6112E6671700899322 /* SDL_qsort.c */,
- 04BDFE6212E6671700899322 /* SDL_stdlib.c */,
- 04BDFE6312E6671700899322 /* SDL_string.c */,
+ A7D8A77523E2513E00DCD162 /* SDL_cpuinfo.c */,
);
- path = stdlib;
+ path = cpuinfo;
sourceTree = "<group>";
};
- 04BDFE6412E6671800899322 /* thread */ = {
+ A7D8A77623E2513E00DCD162 /* thread */ = {
isa = PBXGroup;
children = (
- 04BDFE7D12E6671800899322 /* pthread */,
- 04BDFE8B12E6671800899322 /* SDL_systhread.h */,
- 04BDFE8C12E6671800899322 /* SDL_thread.c */,
- 04BDFE8D12E6671800899322 /* SDL_thread_c.h */,
+ A7D8A78123E2513E00DCD162 /* pthread */,
+ A7D8A77723E2513E00DCD162 /* SDL_systhread.h */,
+ A7D8A77823E2513E00DCD162 /* SDL_thread_c.h */,
+ A7D8A77923E2513E00DCD162 /* SDL_thread.c */,
);
path = thread;
sourceTree = "<group>";
};
- 04BDFE7D12E6671800899322 /* pthread */ = {
+ A7D8A78123E2513E00DCD162 /* pthread */ = {
isa = PBXGroup;
children = (
- 04BDFE7E12E6671800899322 /* SDL_syscond.c */,
- 04BDFE7F12E6671800899322 /* SDL_sysmutex.c */,
- 04BDFE8012E6671800899322 /* SDL_sysmutex_c.h */,
- 04BDFE8112E6671800899322 /* SDL_syssem.c */,
- 04BDFE8212E6671800899322 /* SDL_systhread.c */,
- 04BDFE8312E6671800899322 /* SDL_systhread_c.h */,
- AA0F8490178D5ECC00823F9D /* SDL_systls.c */,
+ A7D8A78523E2513E00DCD162 /* SDL_syscond.c */,
+ A7D8A78823E2513E00DCD162 /* SDL_sysmutex_c.h */,
+ A7D8A78723E2513E00DCD162 /* SDL_sysmutex.c */,
+ A7D8A78323E2513E00DCD162 /* SDL_syssem.c */,
+ A7D8A78423E2513E00DCD162 /* SDL_systhread_c.h */,
+ A7D8A78623E2513E00DCD162 /* SDL_systhread.c */,
+ A7D8A78223E2513E00DCD162 /* SDL_systls.c */,
);
path = pthread;
sourceTree = "<group>";
};
- 04BDFE9512E6671800899322 /* timer */ = {
+ A7D8A79D23E2513E00DCD162 /* joystick */ = {
isa = PBXGroup;
children = (
- 04BDFEA112E6671800899322 /* unix */,
- 04BDFE9F12E6671800899322 /* SDL_timer.c */,
- 04BDFEA012E6671800899322 /* SDL_timer_c.h */,
+ A7D8A7CC23E2513E00DCD162 /* darwin */,
+ A7D8A79F23E2513E00DCD162 /* dummy */,
+ A7D8A7BE23E2513E00DCD162 /* hidapi */,
+ A7D8A7AA23E2513E00DCD162 /* iphoneos */,
+ A7D8A7A123E2513E00DCD162 /* steam */,
+ A7D8A7AD23E2513E00DCD162 /* SDL_gamecontroller.c */,
+ A7D8A7A923E2513E00DCD162 /* SDL_joystick.c */,
+ A7D8A7D923E2513E00DCD162 /* controller_type.h */,
+ A7D8A79E23E2513E00DCD162 /* SDL_gamecontrollerdb.h */,
+ A7D8A7D023E2513E00DCD162 /* SDL_joystick_c.h */,
+ A7D8A7CF23E2513E00DCD162 /* SDL_sysjoystick.h */,
+ A7D8A7CB23E2513E00DCD162 /* usb_ids.h */,
);
- path = timer;
+ path = joystick;
sourceTree = "<group>";
};
- 04BDFEA112E6671800899322 /* unix */ = {
+ A7D8A79F23E2513E00DCD162 /* dummy */ = {
isa = PBXGroup;
children = (
- 04BDFEA212E6671800899322 /* SDL_systimer.c */,
+ A7D8A7A023E2513E00DCD162 /* SDL_sysjoystick.c */,
);
- path = unix;
+ path = dummy;
sourceTree = "<group>";
};
- 04BDFEA712E6671800899322 /* video */ = {
+ A7D8A7A123E2513E00DCD162 /* steam */ = {
isa = PBXGroup;
children = (
- 04BDFEC112E6671800899322 /* cocoa */,
- 04BDFEE712E6671800899322 /* dummy */,
- 04BDFFB712E6671800899322 /* x11 */,
- AA9A7F0E1FB0200B00FED37F /* yuv2rgb */,
- 04BDFF5012E6671800899322 /* SDL_blit_0.c */,
- 04BDFF5112E6671800899322 /* SDL_blit_1.c */,
- 04BDFF5212E6671800899322 /* SDL_blit_A.c */,
- 04BDFF5312E6671800899322 /* SDL_blit_auto.c */,
- 04BDFF5412E6671800899322 /* SDL_blit_auto.h */,
- 04BDFF5512E6671800899322 /* SDL_blit_copy.c */,
- 04BDFF5612E6671800899322 /* SDL_blit_copy.h */,
- 04BDFF5712E6671800899322 /* SDL_blit_N.c */,
- 04BDFF5812E6671800899322 /* SDL_blit_slow.c */,
- 04BDFF5912E6671800899322 /* SDL_blit_slow.h */,
- 04BDFF4E12E6671800899322 /* SDL_blit.c */,
- 04BDFF4F12E6671800899322 /* SDL_blit.h */,
- 04BDFF5A12E6671800899322 /* SDL_bmp.c */,
- 04BDFF5B12E6671800899322 /* SDL_clipboard.c */,
- 5C2EF6F61FC9EE35003F5197 /* SDL_egl_c.h */,
- 5C2EF6F51FC9EE35003F5197 /* SDL_egl.c */,
- 04BDFF6012E6671800899322 /* SDL_fillrect.c */,
- 04BDFF6612E6671800899322 /* SDL_pixels_c.h */,
- 04BDFF6512E6671800899322 /* SDL_pixels.c */,
- 5C2EF6F41FC9EE34003F5197 /* SDL_rect_c.h */,
- 04BDFF6712E6671800899322 /* SDL_rect.c */,
- 04BDFF7012E6671800899322 /* SDL_RLEaccel_c.h */,
- 04BDFF6F12E6671800899322 /* SDL_RLEaccel.c */,
- 04BDFF7212E6671800899322 /* SDL_shape_internals.h */,
- 04BDFF7112E6671800899322 /* SDL_shape.c */,
- 04BDFF7312E6671800899322 /* SDL_stretch.c */,
- 04BDFF7412E6671800899322 /* SDL_surface.c */,
- 04BDFF7512E6671800899322 /* SDL_sysvideo.h */,
- 04BDFF7612E6671800899322 /* SDL_video.c */,
- 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */,
- 4D16644D1EDD6023003DE88E /* SDL_vulkan_utils.c */,
- AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */,
- AA9A7F131FB0209C00FED37F /* SDL_yuv.c */,
+ A7D8A7A723E2513E00DCD162 /* SDL_steamcontroller.c */,
+ A7D8A7A523E2513E00DCD162 /* SDL_steamcontroller.h */,
);
- path = video;
+ path = steam;
sourceTree = "<group>";
};
- 04BDFEC112E6671800899322 /* cocoa */ = {
+ A7D8A7AA23E2513E00DCD162 /* iphoneos */ = {
isa = PBXGroup;
children = (
- 04BDFEC212E6671800899322 /* SDL_cocoaclipboard.h */,
- 04BDFEC312E6671800899322 /* SDL_cocoaclipboard.m */,
- 04BDFEC412E6671800899322 /* SDL_cocoaevents.h */,
- 04BDFEC512E6671800899322 /* SDL_cocoaevents.m */,
- 04BDFEC612E6671800899322 /* SDL_cocoakeyboard.h */,
- 04BDFEC712E6671800899322 /* SDL_cocoakeyboard.m */,
- AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */,
- AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */,
- 4D7517281EE2562B00820EEA /* SDL_cocoametalview.h */,
- 4D1664501EDD60AD003DE88E /* SDL_cocoametalview.m */,
- 04BDFEC812E6671800899322 /* SDL_cocoamodes.h */,
- 04BDFEC912E6671800899322 /* SDL_cocoamodes.m */,
- 04BDFECA12E6671800899322 /* SDL_cocoamouse.h */,
- 04BDFECB12E6671800899322 /* SDL_cocoamouse.m */,
- D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */,
- D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */,
- 04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */,
- 04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */,
- 5C2EF6ED1FC9D0ED003F5197 /* SDL_cocoaopengles.h */,
- 5C2EF6EC1FC9D0EC003F5197 /* SDL_cocoaopengles.m */,
- 04BDFECE12E6671800899322 /* SDL_cocoashape.h */,
- 04BDFECF12E6671800899322 /* SDL_cocoashape.m */,
- 04BDFED012E6671800899322 /* SDL_cocoavideo.h */,
- 04BDFED112E6671800899322 /* SDL_cocoavideo.m */,
- 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */,
- 4D1664521EDD60AD003DE88E /* SDL_cocoavulkan.m */,
- 04BDFED212E6671800899322 /* SDL_cocoawindow.h */,
- 04BDFED312E6671800899322 /* SDL_cocoawindow.m */,
+ A7D8A7AC23E2513E00DCD162 /* SDL_sysjoystick_c.h */,
+ A7D8A7AB23E2513E00DCD162 /* SDL_sysjoystick.m */,
);
+ path = iphoneos;
+ sourceTree = "<group>";
+ };
+ A7D8A7BE23E2513E00DCD162 /* hidapi */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7C923E2513E00DCD162 /* SDL_hidapi_gamecube.c */,
+ A7D8A7C323E2513E00DCD162 /* SDL_hidapi_ps4.c */,
+ A75FDBC423EA380300529352 /* SDL_hidapi_rumble.c */,
+ A75FDBC323EA380300529352 /* SDL_hidapi_rumble.h */,
+ A75FDAAC23E2795C00529352 /* SDL_hidapi_steam.c */,
+ A7D8A7C623E2513E00DCD162 /* SDL_hidapi_switch.c */,
+ A7D8A7C223E2513E00DCD162 /* SDL_hidapi_xbox360.c */,
+ A7D8A7C823E2513E00DCD162 /* SDL_hidapi_xbox360w.c */,
+ A7D8A7C523E2513E00DCD162 /* SDL_hidapi_xboxone.c */,
+ A7D8A7C723E2513E00DCD162 /* SDL_hidapijoystick_c.h */,
+ A7D8A7C423E2513E00DCD162 /* SDL_hidapijoystick.c */,
+ );
+ path = hidapi;
+ sourceTree = "<group>";
+ };
+ A7D8A7CC23E2513E00DCD162 /* darwin */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7CE23E2513E00DCD162 /* SDL_sysjoystick_c.h */,
+ A7D8A7CD23E2513E00DCD162 /* SDL_sysjoystick.c */,
+ );
+ path = darwin;
+ sourceTree = "<group>";
+ };
+ A7D8A7DA23E2513E00DCD162 /* file */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7DC23E2513F00DCD162 /* cocoa */,
+ A7D8A7DB23E2513F00DCD162 /* SDL_rwops.c */,
+ );
+ path = file;
+ sourceTree = "<group>";
+ };
+ A7D8A7DC23E2513F00DCD162 /* cocoa */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7DD23E2513F00DCD162 /* SDL_rwopsbundlesupport.h */,
+ A7D8A7DE23E2513F00DCD162 /* SDL_rwopsbundlesupport.m */,
+ );
path = cocoa;
sourceTree = "<group>";
};
- 04BDFEE712E6671800899322 /* dummy */ = {
+ A7D8A7DF23E2513F00DCD162 /* power */ = {
isa = PBXGroup;
children = (
- 04BDFEE812E6671800899322 /* SDL_nullevents.c */,
- 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */,
- 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */,
- 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */,
- 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */,
- 04BDFEED12E6671800899322 /* SDL_nullvideo.h */,
+ A7D8A7EA23E2513F00DCD162 /* macosx */,
+ A7D8A7E023E2513F00DCD162 /* uikit */,
+ A7D8A7E723E2513F00DCD162 /* SDL_power.c */,
+ A7D8A7F423E2513F00DCD162 /* SDL_syspower.h */,
);
+ path = power;
+ sourceTree = "<group>";
+ };
+ A7D8A7E023E2513F00DCD162 /* uikit */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7E123E2513F00DCD162 /* SDL_syspower.m */,
+ A7D8A7E223E2513F00DCD162 /* SDL_syspower.h */,
+ );
+ path = uikit;
+ sourceTree = "<group>";
+ };
+ A7D8A7EA23E2513F00DCD162 /* macosx */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7EB23E2513F00DCD162 /* SDL_syspower.c */,
+ );
+ path = macosx;
+ sourceTree = "<group>";
+ };
+ A7D8A7F623E2513F00DCD162 /* filesystem */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7FD23E2513F00DCD162 /* cocoa */,
+ A7D8A7F723E2513F00DCD162 /* dummy */,
+ );
+ path = filesystem;
+ sourceTree = "<group>";
+ };
+ A7D8A7F723E2513F00DCD162 /* dummy */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A7F823E2513F00DCD162 /* SDL_sysfilesystem.c */,
+ );
path = dummy;
sourceTree = "<group>";
};
- 04BDFFB712E6671800899322 /* x11 */ = {
+ A7D8A7FD23E2513F00DCD162 /* cocoa */ = {
isa = PBXGroup;
children = (
- 04BDFFB812E6671800899322 /* imKStoUCS.c */,
- 04BDFFB912E6671800899322 /* imKStoUCS.h */,
- 04BDFFBA12E6671800899322 /* SDL_x11clipboard.c */,
- 04BDFFBB12E6671800899322 /* SDL_x11clipboard.h */,
- 04BDFFBC12E6671800899322 /* SDL_x11dyn.c */,
- 04BDFFBD12E6671800899322 /* SDL_x11dyn.h */,
- 04BDFFBE12E6671800899322 /* SDL_x11events.c */,
- 04BDFFBF12E6671800899322 /* SDL_x11events.h */,
- 0442EC5812FE1C60004C9285 /* SDL_x11framebuffer.c */,
- 0442EC5912FE1C60004C9285 /* SDL_x11framebuffer.h */,
- 04BDFFC212E6671800899322 /* SDL_x11keyboard.c */,
- 04BDFFC312E6671800899322 /* SDL_x11keyboard.h */,
- AA9E4092163BE51E007A2AD0 /* SDL_x11messagebox.c */,
- 04BDFFC412E6671800899322 /* SDL_x11modes.c */,
- 04BDFFC512E6671800899322 /* SDL_x11modes.h */,
- 04BDFFC612E6671800899322 /* SDL_x11mouse.c */,
- 04BDFFC712E6671800899322 /* SDL_x11mouse.h */,
- 04BDFFC812E6671800899322 /* SDL_x11opengl.c */,
- 04BDFFC912E6671800899322 /* SDL_x11opengl.h */,
- 04BDFFCA12E6671800899322 /* SDL_x11opengles.c */,
- 04BDFFCB12E6671800899322 /* SDL_x11opengles.h */,
- 04BDFFCE12E6671800899322 /* SDL_x11shape.c */,
- 04BDFFCF12E6671800899322 /* SDL_x11shape.h */,
- 04BDFFD012E6671800899322 /* SDL_x11sym.h */,
- 04BDFFD112E6671800899322 /* SDL_x11touch.c */,
- 04BDFFD212E6671800899322 /* SDL_x11touch.h */,
- 04BDFFD312E6671800899322 /* SDL_x11video.c */,
- 04BDFFD412E6671800899322 /* SDL_x11video.h */,
- 04BDFFD512E6671800899322 /* SDL_x11window.c */,
- 04BDFFD612E6671800899322 /* SDL_x11window.h */,
- AA628ACF159367F2005138DD /* SDL_x11xinput2.c */,
- AA628AD0159367F2005138DD /* SDL_x11xinput2.h */,
+ A7D8A7FE23E2513F00DCD162 /* SDL_sysfilesystem.m */,
);
- path = x11;
+ path = cocoa;
sourceTree = "<group>";
};
- 0867D691FE84028FC02AAC07 /* SDLFramework */ = {
+ A7D8A80923E2513F00DCD162 /* hidapi */ = {
isa = PBXGroup;
children = (
- F5A2EF3900C6A39A01000001 /* BUGS.txt */,
- F59C70FC00D5CB5801000001 /* pkg-support */,
- 0153844A006D81B07F000001 /* Public Headers */,
- 08FB77ACFE841707C02AAC07 /* Library Source */,
- 034768DDFF38A45A11DB9C8B /* Products */,
- BECDF66B0761BA81005FE872 /* Info-Framework.plist */,
- 564624341FF821B70074AC87 /* Frameworks */,
+ A75FDBA423E4CB6F00529352 /* AUTHORS.txt */,
+ A75FDBA323E4CB6F00529352 /* LICENSE-bsd.txt */,
+ A75FDBA623E4CB6F00529352 /* LICENSE-gpl3.txt */,
+ A75FDBA523E4CB6F00529352 /* LICENSE-orig.txt */,
+ A75FDBA723E4CB6F00529352 /* LICENSE.txt */,
+ A75FDB5723E39E6100529352 /* hidapi.h */,
+ A75FDB9123E4C8B800529352 /* mac */,
+ A75FDAA423E2790500529352 /* ios */,
+ A7D8A81423E2513F00DCD162 /* SDL_hidapi.c */,
);
- comments = "To build Universal Binaries, we have experimented with a variety of different options.\nThe complication is that we must retain compatibility with at least 10.2. \nThe Universal Binary defaults only work for > 10.3.9\n\nSo far, we have found:\ngcc 4.0.0 with Xcode 2.1 always links against libgcc_s. gcc 4.0.1 from Xcode 2.2 fixes this problem.\n\nBut gcc 4.0 will not work with < 10.3.9 because we continue to get an undefined symbol to _fprintf$LDBL128.\nSo we must use gcc 3.3 on PPC to accomplish 10.2 support. (But 4.0 is required for i386.)\n\nSetting the deployment target to 10.4 will disable prebinding, so for PPC, we set it less than 10.4 to preserve prebinding for legacy support.\n\nSetting the PPC SDKROOT to /Developers/SDKs/MacOSX10.2.8.sdk will link to 63.0.0 libSystem.B.dylib. Leaving it at current or 10.4u links to 88.1.2. However, as long as we are using gcc 3.3, it doesn't seem to matter as testing has demonstrated both will run. We have decided not to invoke the 10.2.8 SDK because it is not a default installed component with Xcode which will probably cause most people problems. However, rather than deleting the SDKROOT_ppc entry entirely, we have mapped it to 10.4u in case we decide we need to change this setting.\n\nTo use Altivec or SSE, we needed architecture specific flags:\nOTHER_CFLAGS_ppc\nOTHER_CFLAGS_i386\nOTHER_CFLAGS=$(OTHER_CFLAGS_($CURRENT_ARCH))\n\nThe general OTHER_CFLAGS needed to be manually mapped to architecture specific options because Xcode didn't do this automatically for us.\n\n\n";
- indentWidth = 4;
- name = SDLFramework;
+ path = hidapi;
sourceTree = "<group>";
- tabWidth = 4;
- usesTabs = 0;
};
- 08FB77ACFE841707C02AAC07 /* Library Source */ = {
+ A7D8A85D23E2513F00DCD162 /* loadso */ = {
isa = PBXGroup;
children = (
- 04BDFD7312E6671700899322 /* atomic */,
- 04BDFD7612E6671700899322 /* audio */,
- 04BDFDD312E6671700899322 /* cpuinfo */,
- 56A6701C1856549B0007D20F /* dynapi */,
- 04BDFDD512E6671700899322 /* events */,
- 567E2F1F17C44BBB005F1892 /* filesystem */,
- 04BDFDEC12E6671700899322 /* file */,
- 04BDFDF112E6671700899322 /* haptic */,
- A73EBCD520F099C10043B449 /* hidapi */,
- 04BDFDFF12E6671700899322 /* joystick */,
- 04BDFE2F12E6671700899322 /* loadso */,
- 04BDFE4512E6671700899322 /* power */,
- 041B2C9712FA0D680087D585 /* render */,
- F3950CDB212BC8BC00F51292 /* sensor */,
- 04BDFE5D12E6671700899322 /* stdlib */,
- 04BDFE6412E6671800899322 /* thread */,
- 04BDFE9512E6671800899322 /* timer */,
- 04BDFEA712E6671800899322 /* video */,
- 56A670081856545C0007D20F /* SDL_internal.h */,
- 04BDFE5512E6671700899322 /* SDL_assert_c.h */,
- 04BDFE5612E6671700899322 /* SDL_assert.c */,
- 56115BB91DF72C6D00F47E1E /* SDL_dataqueue.c */,
- 56115BBA1DF72C6D00F47E1E /* SDL_dataqueue.h */,
- 04BDFE5812E6671700899322 /* SDL_error_c.h */,
- 04BDFE5912E6671700899322 /* SDL_error.c */,
- 0442EC5E12FE1C75004C9285 /* SDL_hints.c */,
- 04BAC0C71300C2160055DE28 /* SDL_log.c */,
- 04BDFE5C12E6671700899322 /* SDL.c */,
+ A7D8A86223E2513F00DCD162 /* dlopen */,
+ A7D8A85E23E2513F00DCD162 /* dummy */,
);
- name = "Library Source";
- path = ../../src;
+ path = loadso;
sourceTree = "<group>";
};
- 564624341FF821B70074AC87 /* Frameworks */ = {
+ A7D8A85E23E2513F00DCD162 /* dummy */ = {
isa = PBXGroup;
children = (
- A7381E931D8B69C300B177DD /* AudioToolbox.framework */,
- 007317C10858E15000B2BC32 /* Carbon.framework */,
- 0073179D0858DECD00B2BC32 /* Cocoa.framework */,
- A7381E951D8B69D600B177DD /* CoreAudio.framework */,
- 00D0D08310675DD9004B05EF /* CoreFoundation.framework */,
- FA73671C19A540EF004122E4 /* CoreVideo.framework */,
- 00CFA89C106B4BA100758660 /* ForceFeedback.framework */,
- 0073179F0858DECD00B2BC32 /* IOKit.framework */,
- 564624371FF821CB0074AC87 /* Metal.framework */,
- 564624351FF821B80074AC87 /* QuartzCore.framework */,
+ A7D8A85F23E2513F00DCD162 /* SDL_sysloadso.c */,
);
- name = Frameworks;
+ path = dummy;
sourceTree = "<group>";
};
- 567E2F1F17C44BBB005F1892 /* filesystem */ = {
+ A7D8A86223E2513F00DCD162 /* dlopen */ = {
isa = PBXGroup;
children = (
- 567E2F1B17C44BB2005F1892 /* SDL_sysfilesystem.m */,
+ A7D8A86323E2513F00DCD162 /* SDL_sysloadso.c */,
);
- path = filesystem;
+ path = dlopen;
sourceTree = "<group>";
};
- 56A6701C1856549B0007D20F /* dynapi */ = {
+ A7D8A86423E2513F00DCD162 /* audio */ = {
isa = PBXGroup;
children = (
- 56A6701D185654B40007D20F /* SDL_dynapi_procs.h */,
- 56A6701E185654B40007D20F /* SDL_dynapi.c */,
- 56A6701F185654B40007D20F /* SDL_dynapi.h */,
- 56A67020185654B40007D20F /* SDL_dynapi_overrides.h */,
+ A7D8A8B923E2513F00DCD162 /* coreaudio */,
+ A7D8A8AF23E2513F00DCD162 /* disk */,
+ A7D8A87023E2513F00DCD162 /* dummy */,
+ A7D8A87323E2513F00DCD162 /* SDL_audio_c.h */,
+ A7D8A8B823E2513F00DCD162 /* SDL_audio.c */,
+ A7D8A8A123E2513F00DCD162 /* SDL_audiocvt.c */,
+ A7D8A87723E2513F00DCD162 /* SDL_audiodev_c.h */,
+ A7D8A88F23E2513F00DCD162 /* SDL_audiodev.c */,
+ A7D8A8A023E2513F00DCD162 /* SDL_audiotypecvt.c */,
+ A7D8A86523E2513F00DCD162 /* SDL_mixer.c */,
+ A7D8A89F23E2513F00DCD162 /* SDL_sysaudio.h */,
+ A7D8A86623E2513F00DCD162 /* SDL_wave.c */,
+ A7D8A8A223E2513F00DCD162 /* SDL_wave.h */,
);
- path = dynapi;
+ path = audio;
sourceTree = "<group>";
};
- 5C2EF6921FC986D8003F5197 /* opengles2 */ = {
+ A7D8A87023E2513F00DCD162 /* dummy */ = {
isa = PBXGroup;
children = (
- 5C2EF69B1FC987C6003F5197 /* SDL_gles2funcs.h */,
- 5C2EF69C1FC987C6003F5197 /* SDL_render_gles2.c */,
- 5C2EF69E1FC987C6003F5197 /* SDL_shaders_gles2.c */,
- 5C2EF69D1FC987C6003F5197 /* SDL_shaders_gles2.h */,
+ A7D8A87123E2513F00DCD162 /* SDL_dummyaudio.h */,
+ A7D8A87223E2513F00DCD162 /* SDL_dummyaudio.c */,
);
- path = opengles2;
+ path = dummy;
sourceTree = "<group>";
};
- A704170720F09A6700A82227 /* mac */ = {
+ A7D8A8AF23E2513F00DCD162 /* disk */ = {
isa = PBXGroup;
children = (
- A704170820F09A9800A82227 /* hid.c */,
+ A7D8A8B023E2513F00DCD162 /* SDL_diskaudio.h */,
+ A7D8A8B123E2513F00DCD162 /* SDL_diskaudio.c */,
);
- path = mac;
+ path = disk;
sourceTree = "<group>";
};
- A704170C20F09AA600A82227 /* hidapi */ = {
+ A7D8A8B923E2513F00DCD162 /* coreaudio */ = {
isa = PBXGroup;
children = (
- A704171120F09AC900A82227 /* SDL_hidapi_ps4.c */,
- A704170F20F09AC800A82227 /* SDL_hidapi_switch.c */,
- A704171320F09AC900A82227 /* SDL_hidapi_xbox360.c */,
- A704171220F09AC900A82227 /* SDL_hidapi_xboxone.c */,
- A704170E20F09AC800A82227 /* SDL_hidapijoystick_c.h */,
- A704170D20F09AC800A82227 /* SDL_hidapijoystick.c */,
+ A7D8A8BA23E2513F00DCD162 /* SDL_coreaudio.h */,
+ A7D8A8BB23E2513F00DCD162 /* SDL_coreaudio.m */,
);
- path = hidapi;
+ path = coreaudio;
sourceTree = "<group>";
};
- A73EBCD520F099C10043B449 /* hidapi */ = {
+ A7D8A8D223E2514000DCD162 /* stdlib */ = {
isa = PBXGroup;
children = (
- A704170720F09A6700A82227 /* mac */,
+ A7D8A8D423E2514000DCD162 /* SDL_getenv.c */,
+ A7D8A8D323E2514000DCD162 /* SDL_iconv.c */,
+ A7D8A8D923E2514000DCD162 /* SDL_malloc.c */,
+ A7D8A8D723E2514000DCD162 /* SDL_qsort.c */,
+ A7D8A8D823E2514000DCD162 /* SDL_stdlib.c */,
+ A7D8A8D523E2514000DCD162 /* SDL_string.c */,
+ A7D8A8D623E2514000DCD162 /* SDL_strtokr.c */,
);
- path = hidapi;
+ path = stdlib;
sourceTree = "<group>";
};
- AA9A7F0E1FB0200B00FED37F /* yuv2rgb */ = {
+ A7D8A8DA23E2514000DCD162 /* render */ = {
isa = PBXGroup;
children = (
- AA9A7F101FB0206300FED37F /* yuv_rgb.c */,
- AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */,
+ A7D8A8DD23E2514000DCD162 /* metal */,
+ A7D8A90C23E2514000DCD162 /* opengl */,
+ A7D8A90023E2514000DCD162 /* opengles */,
+ A7D8A90323E2514000DCD162 /* opengles2 */,
+ A7D8A8EF23E2514000DCD162 /* software */,
+ A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */,
+ A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */,
+ A7D8A8DB23E2514000DCD162 /* SDL_render.c */,
+ A7D8A8EE23E2514000DCD162 /* SDL_sysrender.h */,
+ A7D8A8EC23E2514000DCD162 /* SDL_yuv_sw_c.h */,
+ A7D8A8ED23E2514000DCD162 /* SDL_yuv_sw.c */,
);
- path = yuv2rgb;
+ path = render;
sourceTree = "<group>";
};
- AADC5A401FDA030E00960936 /* metal */ = {
+ A7D8A8DD23E2514000DCD162 /* metal */ = {
isa = PBXGroup;
children = (
- AADC5A421FDA035D00960936 /* SDL_render_metal.m */,
- AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */,
+ A7D8A8DE23E2514000DCD162 /* SDL_render_metal.m */,
+ A7D8A8DF23E2514000DCD162 /* SDL_shaders_metal_ios.h */,
+ A7D8A8E223E2514000DCD162 /* SDL_shaders_metal_osx.h */,
+ A7D8A8E323E2514000DCD162 /* SDL_shaders_metal_tvos.h */,
+ A7D8A8E023E2514000DCD162 /* SDL_shaders_metal.metal */,
);
path = metal;
sourceTree = "<group>";
};
- F30D9C8D212CABB40047DF2E /* dummy */ = {
+ A7D8A8EF23E2514000DCD162 /* software */ = {
isa = PBXGroup;
children = (
- F30D9C8F212CABDB0047DF2E /* SDL_dummysensor.c */,
- F30D9C8E212CABDB0047DF2E /* SDL_dummysensor.h */,
+ A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */,
+ A7D8A8F623E2514000DCD162 /* SDL_blendfillrect.h */,
+ A7D8A8FB23E2514000DCD162 /* SDL_blendline.c */,
+ A7D8A8F223E2514000DCD162 /* SDL_blendline.h */,
+ A7D8A8F023E2514000DCD162 /* SDL_blendpoint.c */,
+ A7D8A8F823E2514000DCD162 /* SDL_blendpoint.h */,
+ A7D8A8FA23E2514000DCD162 /* SDL_draw.h */,
+ A7D8A8F123E2514000DCD162 /* SDL_drawline.c */,
+ A7D8A8F723E2514000DCD162 /* SDL_drawline.h */,
+ A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */,
+ A7D8A8F323E2514000DCD162 /* SDL_drawpoint.h */,
+ A7D8A8F523E2514000DCD162 /* SDL_render_sw_c.h */,
+ A7D8A8F923E2514000DCD162 /* SDL_render_sw.c */,
+ A7D8A8F423E2514000DCD162 /* SDL_rotate.c */,
+ A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */,
);
- path = dummy;
+ path = software;
sourceTree = "<group>";
};
- F3950CDB212BC8BC00F51292 /* sensor */ = {
+ A7D8A90023E2514000DCD162 /* opengles */ = {
isa = PBXGroup;
children = (
- F30D9C8D212CABB40047DF2E /* dummy */,
- F30D9C81212BC94E0047DF2E /* SDL_sensor_c.h */,
- F30D9C83212BC94F0047DF2E /* SDL_sensor.c */,
- F30D9C82212BC94F0047DF2E /* SDL_syssensor.h */,
+ A7D8A90223E2514000DCD162 /* SDL_glesfuncs.h */,
+ A7D8A90123E2514000DCD162 /* SDL_render_gles.c */,
);
- name = sensor;
- path = ../../src/sensor;
- sourceTree = SOURCE_ROOT;
+ path = opengles;
+ sourceTree = "<group>";
};
+ A7D8A90323E2514000DCD162 /* opengles2 */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */,
+ A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */,
+ A7D8A90723E2514000DCD162 /* SDL_shaders_gles2.c */,
+ A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */,
+ );
+ path = opengles2;
+ sourceTree = "<group>";
+ };
+ A7D8A90C23E2514000DCD162 /* opengl */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A90E23E2514000DCD162 /* SDL_glfuncs.h */,
+ A7D8A90F23E2514000DCD162 /* SDL_render_gl.c */,
+ A7D8A91023E2514000DCD162 /* SDL_shaders_gl.c */,
+ A7D8A90D23E2514000DCD162 /* SDL_shaders_gl.h */,
+ );
+ path = opengl;
+ sourceTree = "<group>";
+ };
+ A7D8A91123E2514000DCD162 /* libm */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A91D23E2514000DCD162 /* e_atan2.c */,
+ A7D8A92123E2514000DCD162 /* e_exp.c */,
+ A7D8A92023E2514000DCD162 /* e_fmod.c */,
+ A7D8A92323E2514000DCD162 /* e_log.c */,
+ A7D8A92223E2514000DCD162 /* e_log10.c */,
+ A7D8A91C23E2514000DCD162 /* e_pow.c */,
+ A7D8A91F23E2514000DCD162 /* e_rem_pio2.c */,
+ A7D8A92423E2514000DCD162 /* e_sqrt.c */,
+ A7D8A91923E2514000DCD162 /* k_cos.c */,
+ A7D8A91623E2514000DCD162 /* k_rem_pio2.c */,
+ A7D8A91723E2514000DCD162 /* k_sin.c */,
+ A7D8A92723E2514000DCD162 /* k_tan.c */,
+ A7D8A92623E2514000DCD162 /* math_libm.h */,
+ A7D8A91B23E2514000DCD162 /* math_private.h */,
+ A7D8A91823E2514000DCD162 /* s_atan.c */,
+ A7D8A91423E2514000DCD162 /* s_copysign.c */,
+ A7D8A91323E2514000DCD162 /* s_cos.c */,
+ A7D8A91523E2514000DCD162 /* s_fabs.c */,
+ A7D8A92523E2514000DCD162 /* s_floor.c */,
+ A7D8A91A23E2514000DCD162 /* s_scalbn.c */,
+ A7D8A91223E2514000DCD162 /* s_sin.c */,
+ A7D8A91E23E2514000DCD162 /* s_tan.c */,
+ );
+ path = libm;
+ sourceTree = "<group>";
+ };
+ A7D8A92923E2514000DCD162 /* events */ = {
+ isa = PBXGroup;
+ children = (
+ A7D8A93223E2514000DCD162 /* blank_cursor.h */,
+ A7D8A93323E2514000DCD162 /* default_cursor.h */,
+ A7D8A93423E2514000DCD162 /* scancodes_darwin.h */,
+ A7D8A93623E2514000DCD162 /* scancodes_linux.h */,
+ A7D8A92C23E2514000DCD162 /* scancodes_windows.h */,
+ A7D8A94123E2514000DCD162 /* scancodes_xfree86.h */,
+ A7D8A93923E2514000DCD162 /* SDL_clipboardevents_c.h */,
+ A7D8A93A23E2514000DCD162 /* SDL_clipboardevents.c */,
+ A7D8A93123E2514000DCD162 /* SDL_displayevents_c.h */,
+ A7D8A92D23E2514000DCD162 /* SDL_displayevents.c */,
+ A7D8A92E23E2514000DCD162 /* SDL_dropevents_c.h */,
+ A7D8A93B23E2514000DCD162 /* SDL_dropevents.c */,
+ A7D8A94223E2514000DCD162 /* SDL_events_c.h */,
+ A7D8A93523E2514000DCD162 /* SDL_events.c */,
+ A7D8A93023E2514000DCD162 /* SDL_gesture_c.h */,
+ A7D8A94023E2514000DCD162 /* SDL_gesture.c */,
+ A7D8A93D23E2514000DCD162 /* SDL_keyboard_c.h */,
+ A7D8A93823E2514000DCD162 /* SDL_keyboard.c */,
+ A7D8A92B23E2514000DCD162 /* SDL_mouse_c.h */,
+ A7D8A92A23E2514000DCD162 /* SDL_mouse.c */,
+ A7D8A93C23E2514000DCD162 /* SDL_quit.c */,
+ A7D8A93F23E2514000DCD162 /* SDL_sysevents.h */,
+ A7D8A93723E2514000DCD162 /* SDL_touch_c.h */,
+ A7D8A93E23E2514000DCD162 /* SDL_touch.c */,
+ A7D8A94323E2514000DCD162 /* SDL_windowevents_c.h */,
+ A7D8A92F23E2514000DCD162 /* SDL_windowevents.c */,
+ );
+ path = events;
+ sourceTree = "<group>";
+ };
F59C70FC00D5CB5801000001 /* pkg-support */ = {
isa = PBXGroup;
children = (
@@ -2006,177 +5669,1715 @@
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
+ A75FCCFC23E25AB700529352 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FCCFD23E25AB700529352 /* SDL_shaders_metal_tvos.h in Headers */,
+ A75FCCFE23E25AB700529352 /* SDL_filesystem.h in Headers */,
+ A75FCD0023E25AB700529352 /* begin_code.h in Headers */,
+ A75FCD0123E25AB700529352 /* SDL_uikitopengles.h in Headers */,
+ A75FCD0223E25AB700529352 /* close_code.h in Headers */,
+ A75FCD0323E25AB700529352 /* SDL.h in Headers */,
+ A75FCD0423E25AB700529352 /* SDL_uikitmetalview.h in Headers */,
+ A75FCD0523E25AB700529352 /* SDL_assert.h in Headers */,
+ A75FCD0623E25AB700529352 /* SDL_shape_internals.h in Headers */,
+ A75FCD0723E25AB700529352 /* SDL_glfuncs.h in Headers */,
+ A75FCD0823E25AB700529352 /* SDL_atomic.h in Headers */,
+ A75FCD0923E25AB700529352 /* SDL_rect_c.h in Headers */,
+ A75FCD0A23E25AB700529352 /* SDL_x11xinput2.h in Headers */,
+ A75FCD0B23E25AB700529352 /* SDL_shaders_metal_osx.h in Headers */,
+ A75FCD0C23E25AB700529352 /* SDL_shaders_metal_ios.h in Headers */,
+ A75FCD0D23E25AB700529352 /* SDL_offscreenwindow.h in Headers */,
+ A75FCD0E23E25AB700529352 /* SDL_audio.h in Headers */,
+ A75FCD0F23E25AB700529352 /* SDL_coremotionsensor.h in Headers */,
+ A75FCD1023E25AB700529352 /* SDL_uikitview.h in Headers */,
+ A75FCD1123E25AB700529352 /* SDL_bits.h in Headers */,
+ A75FCD1223E25AB700529352 /* SDL_uikitappdelegate.h in Headers */,
+ A75FCD1323E25AB700529352 /* keyinfotable.h in Headers */,
+ A75FCD1423E25AB700529352 /* SDL_blendmode.h in Headers */,
+ A75FCD1523E25AB700529352 /* SDL_dropevents_c.h in Headers */,
+ A75FCD1623E25AB700529352 /* SDL_haptic_c.h in Headers */,
+ A75FCD1723E25AB700529352 /* SDL_clipboard.h in Headers */,
+ A75FCD1823E25AB700529352 /* SDL_dataqueue.h in Headers */,
+ A75FCD1923E25AB700529352 /* SDL_error_c.h in Headers */,
+ A75FCD1A23E25AB700529352 /* SDL_x11events.h in Headers */,
+ A75FCD1B23E25AB700529352 /* SDL_config.h in Headers */,
+ A75FCD1C23E25AB700529352 /* SDL_d3dmath.h in Headers */,
+ A75FCD1D23E25AB700529352 /* SDL_x11window.h in Headers */,
+ A75FCD1F23E25AB700529352 /* SDL_egl_c.h in Headers */,
+ A75FCD2023E25AB700529352 /* SDL_copying.h in Headers */,
+ A75FCD2123E25AB700529352 /* yuv_rgb.h in Headers */,
+ A75FCD2223E25AB700529352 /* SDL_dummyaudio.h in Headers */,
+ A75FCD2323E25AB700529352 /* SDL_uikitmessagebox.h in Headers */,
+ A75FCD2423E25AB700529352 /* SDL_x11messagebox.h in Headers */,
+ A75FCD2523E25AB700529352 /* SDL_thread_c.h in Headers */,
+ A75FCD2623E25AB700529352 /* SDL_cocoamessagebox.h in Headers */,
+ A75FCD2723E25AB700529352 /* SDL_x11shape.h in Headers */,
+ A75FCD2823E25AB700529352 /* SDL_cpuinfo.h in Headers */,
+ A75FCD2923E25AB700529352 /* SDL_endian.h in Headers */,
+ A75FCD2A23E25AB700529352 /* SDL_error.h in Headers */,
+ A75FCD2B23E25AB700529352 /* SDL_events.h in Headers */,
+ A75FCD2C23E25AB700529352 /* SDL_blendfillrect.h in Headers */,
+ A75FCD2D23E25AB700529352 /* SDL_gamecontroller.h in Headers */,
+ A75FCD2E23E25AB700529352 /* SDL_hidapijoystick_c.h in Headers */,
+ A75FCD3023E25AB700529352 /* SDL_pixels_c.h in Headers */,
+ A75FCD3123E25AB700529352 /* SDL_x11modes.h in Headers */,
+ A75FCD3223E25AB700529352 /* SDL_joystick_c.h in Headers */,
+ A75FCD3323E25AB700529352 /* vk_sdk_platform.h in Headers */,
+ A75FCD3423E25AB700529352 /* blank_cursor.h in Headers */,
+ A75FDB5F23E39E6100529352 /* hidapi.h in Headers */,
+ A75FCD3523E25AB700529352 /* SDL_gesture.h in Headers */,
+ A75FDBCC23EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A75FCD3623E25AB700529352 /* SDL_sysaudio.h in Headers */,
+ A75FCD3723E25AB700529352 /* SDL_haptic.h in Headers */,
+ A75FDAC523E28BD800529352 /* SDL_sysjoystick_c.h in Headers */,
+ A75FCD3823E25AB700529352 /* SDL_sysevents.h in Headers */,
+ A75FCD3923E25AB700529352 /* math_libm.h in Headers */,
+ A75FCD3A23E25AB700529352 /* SDL_uikitvideo.h in Headers */,
+ A75FCD3B23E25AB700529352 /* SDL_cocoamouse.h in Headers */,
+ A75FCD3C23E25AB700529352 /* SDL_hints.h in Headers */,
+ A75FCD3D23E25AB700529352 /* SDL_blit_slow.h in Headers */,
+ A75FCD3E23E25AB700529352 /* SDL_yuv_sw_c.h in Headers */,
+ A75FCD3F23E25AB700529352 /* SDL_x11opengl.h in Headers */,
+ A75FCD4023E25AB700529352 /* SDL_windowevents_c.h in Headers */,
+ A75FCD4123E25AB700529352 /* SDL_joystick.h in Headers */,
+ A75FCD4223E25AB700529352 /* SDL_cocoavideo.h in Headers */,
+ A75FCD4323E25AB700529352 /* SDL_keyboard.h in Headers */,
+ A75FCD4423E25AB700529352 /* SDL_uikitevents.h in Headers */,
+ A75FCD4523E25AB700529352 /* SDL_gesture_c.h in Headers */,
+ A75FCD4623E25AB700529352 /* SDL_shaders_gl.h in Headers */,
+ A75FCD4723E25AB700529352 /* SDL_systhread_c.h in Headers */,
+ A75FCD4823E25AB700529352 /* SDL_keycode.h in Headers */,
+ A75FCD4923E25AB700529352 /* SDL_x11keyboard.h in Headers */,
+ A75FCD4A23E25AB700529352 /* SDL_cocoakeyboard.h in Headers */,
+ A75FCD4B23E25AB700529352 /* SDL_uikitvulkan.h in Headers */,
+ A75FCD4C23E25AB700529352 /* SDL_x11framebuffer.h in Headers */,
+ A75FCD4D23E25AB700529352 /* SDL_x11video.h in Headers */,
+ A75FCD4E23E25AB700529352 /* vulkan.hpp in Headers */,
+ A75FCD4F23E25AB700529352 /* SDL_loadso.h in Headers */,
+ A75FCD5023E25AB700529352 /* gl2ext.h in Headers */,
+ A75FCD5123E25AB700529352 /* SDL_clipboardevents_c.h in Headers */,
+ A75FCD5223E25AB700529352 /* SDL_x11touch.h in Headers */,
+ A75FCD5323E25AB700529352 /* SDL_syshaptic_c.h in Headers */,
+ A75FCD5423E25AB700529352 /* SDL_hints_c.h in Headers */,
+ A75FCD5523E25AB700529352 /* SDL_audiodev_c.h in Headers */,
+ A75FCD5623E25AB700529352 /* SDL_audio_c.h in Headers */,
+ A75FCD5723E25AB700529352 /* SDL_uikitmodes.h in Headers */,
+ A75FCD5823E25AB700529352 /* egl.h in Headers */,
+ A75FCD5923E25AB700529352 /* khrplatform.h in Headers */,
+ A75FCD5A23E25AB700529352 /* SDL_log.h in Headers */,
+ A75FCD5B23E25AB700529352 /* SDL_uikitviewcontroller.h in Headers */,
+ A75FCD5C23E25AB700529352 /* SDL_dummysensor.h in Headers */,
+ A75FCD5D23E25AB700529352 /* vulkan_android.h in Headers */,
+ A75FCD5E23E25AB700529352 /* yuv_rgb_std_func.h in Headers */,
+ A75FCD5F23E25AB700529352 /* vulkan_core.h in Headers */,
+ A75FCD6023E25AB700529352 /* SDL_syssensor.h in Headers */,
+ A75FCD6123E25AB700529352 /* SDL_dynapi.h in Headers */,
+ A75FCD6223E25AB700529352 /* SDL_assert_c.h in Headers */,
+ A75FCD6323E25AB700529352 /* SDL_diskaudio.h in Headers */,
+ A75FCD6423E25AB700529352 /* SDL_main.h in Headers */,
+ A75FCD6523E25AB700529352 /* SDL_drawpoint.h in Headers */,
+ A75FCD6623E25AB700529352 /* SDL_opengles2_khrplatform.h in Headers */,
+ A75FCD6723E25AB700529352 /* SDL_wave.h in Headers */,
+ A75FCD6823E25AB700529352 /* SDL_cocoaopengl.h in Headers */,
+ A75FCD6923E25AB700529352 /* yuv_rgb_sse_func.h in Headers */,
+ A75FCD6A23E25AB700529352 /* imKStoUCS.h in Headers */,
+ A75FCD6B23E25AB700529352 /* SDL_offscreenevents_c.h in Headers */,
+ A75FCD6C23E25AB700529352 /* SDL_x11sym.h in Headers */,
+ A75FCD6D23E25AB700529352 /* SDL_coreaudio.h in Headers */,
+ A75FCD6E23E25AB700529352 /* SDL_draw.h in Headers */,
+ A75FCD6F23E25AB700529352 /* SDL_drawline.h in Headers */,
+ A75FCD7023E25AB700529352 /* SDL_messagebox.h in Headers */,
+ A75FCD7123E25AB700529352 /* SDL_mouse.h in Headers */,
+ A75FCD7223E25AB700529352 /* SDL_mutex.h in Headers */,
+ A75FCD7323E25AB700529352 /* SDL_yuv_c.h in Headers */,
+ A75FCD7423E25AB700529352 /* scancodes_xfree86.h in Headers */,
+ A75FCD7523E25AB700529352 /* SDL_syspower.h in Headers */,
+ A75FDAFA23E35ED600529352 /* SDL_config_iphoneos.h in Headers */,
+ A75FCD7623E25AB700529352 /* SDL_x11clipboard.h in Headers */,
+ A75FCD7723E25AB700529352 /* SDL_name.h in Headers */,
+ A75FCD7823E25AB700529352 /* eglext.h in Headers */,
+ A75FCD7923E25AB700529352 /* SDL_events_c.h in Headers */,
+ A75FCD7A23E25AB700529352 /* math_private.h in Headers */,
+ A75FCD7C23E25AB700529352 /* vulkan_wayland.h in Headers */,
+ A75FCD7D23E25AB700529352 /* SDL_opengl.h in Headers */,
+ A75FCD7E23E25AB700529352 /* SDL_cocoashape.h in Headers */,
+ A75FCD7F23E25AB700529352 /* SDL_opengles.h in Headers */,
+ A75FCD8023E25AB700529352 /* SDL_shaders_gles2.h in Headers */,
+ A75FCD8123E25AB700529352 /* SDL_opengles2.h in Headers */,
+ A75FCD8223E25AB700529352 /* SDL_glesfuncs.h in Headers */,
+ A75FCD8323E25AB700529352 /* SDL_blendpoint.h in Headers */,
+ A75FCD8423E25AB700529352 /* SDL_offscreenvideo.h in Headers */,
+ A75FCD8523E25AB700529352 /* SDL_nullevents_c.h in Headers */,
+ A75FCD8623E25AB700529352 /* SDL_sysjoystick.h in Headers */,
+ A75FCD8723E25AB700529352 /* SDL_steamcontroller.h in Headers */,
+ A75FCD8823E25AB700529352 /* scancodes_linux.h in Headers */,
+ A75FCD8923E25AB700529352 /* SDL_x11dyn.h in Headers */,
+ A75FCD8A23E25AB700529352 /* SDL_touch_c.h in Headers */,
+ A75FCD8B23E25AB700529352 /* SDL_gamecontrollerdb.h in Headers */,
+ A75FCD8C23E25AB700529352 /* SDL_cocoavulkan.h in Headers */,
+ A75FCD8D23E25AB700529352 /* gl2platform.h in Headers */,
+ A75FCD8E23E25AB700529352 /* SDL_pixels.h in Headers */,
+ A75FCD8F23E25AB700529352 /* vk_layer.h in Headers */,
+ A75FCD9023E25AB700529352 /* SDL_cocoamousetap.h in Headers */,
+ A75FCD9123E25AB700529352 /* vk_platform.h in Headers */,
+ A75FCD9223E25AB700529352 /* SDL_cocoametalview.h in Headers */,
+ A75FCD9323E25AB700529352 /* SDL_cocoaopengles.h in Headers */,
+ A75FCD9423E25AB700529352 /* SDL_blit.h in Headers */,
+ A75FCD9523E25AB700529352 /* vulkan_xlib_xrandr.h in Headers */,
+ A75FCD9623E25AB700529352 /* SDL_sensor_c.h in Headers */,
+ A75FCD9723E25AB700529352 /* SDL_sysrender.h in Headers */,
+ A75FCD9823E25AB700529352 /* SDL_rotate.h in Headers */,
+ A75FCD9923E25AB700529352 /* SDL_platform.h in Headers */,
+ A75FCD9A23E25AB700529352 /* SDL_power.h in Headers */,
+ A75FCD9B23E25AB700529352 /* SDL_offscreenopengl.h in Headers */,
+ A75FCD9D23E25AB700529352 /* scancodes_darwin.h in Headers */,
+ A75FCD9E23E25AB700529352 /* controller_type.h in Headers */,
+ A75FCD9F23E25AB700529352 /* SDL_x11opengles.h in Headers */,
+ A75FCDA023E25AB700529352 /* SDL_uikitclipboard.h in Headers */,
+ A75FCDA123E25AB700529352 /* vulkan_xlib.h in Headers */,
+ A75FCDA223E25AB700529352 /* SDL_uikitwindow.h in Headers */,
+ A75FCDA323E25AB700529352 /* vulkan_vi.h in Headers */,
+ A75FCDA423E25AB700529352 /* vulkan_mir.h in Headers */,
+ A75FCDA523E25AB700529352 /* SDL_quit.h in Headers */,
+ A75FCDA623E25AB700529352 /* default_cursor.h in Headers */,
+ A75FCDA723E25AB700529352 /* SDL_render_sw_c.h in Headers */,
+ A75FCDA823E25AB700529352 /* SDL_rect.h in Headers */,
+ A75FCDA923E25AB700529352 /* SDL_render.h in Headers */,
+ A75FCDAA23E25AB700529352 /* SDL_nullvideo.h in Headers */,
+ A75FCDAB23E25AB700529352 /* SDL_blit_copy.h in Headers */,
+ A75FCDAC23E25AB700529352 /* SDL_RLEaccel_c.h in Headers */,
+ A75FCDAD23E25AB700529352 /* eglplatform.h in Headers */,
+ A75FCDAE23E25AB700529352 /* edid.h in Headers */,
+ A75FCDAF23E25AB700529352 /* SDL_revision.h in Headers */,
+ A75FCDB023E25AB700529352 /* SDL_systhread.h in Headers */,
+ A75FCDB123E25AB700529352 /* SDL_rwops.h in Headers */,
+ A75FCDB223E25AB700529352 /* SDL_scancode.h in Headers */,
+ A75FCDB323E25AB700529352 /* SDL_cocoaclipboard.h in Headers */,
+ A75FCDB423E25AB700529352 /* SDL_cocoamodes.h in Headers */,
+ A75FCDB523E25AB700529352 /* SDL_uikitopenglview.h in Headers */,
+ A75FCDB623E25AB700529352 /* vulkan_win32.h in Headers */,
+ A75FCDB723E25AB700529352 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A75FCDB823E25AB700529352 /* SDL_displayevents_c.h in Headers */,
+ A75FCDBA23E25AB700529352 /* SDL_timer_c.h in Headers */,
+ A75FCDBB23E25AB700529352 /* gl2.h in Headers */,
+ A75FCDBC23E25AB700529352 /* SDL_sysmutex_c.h in Headers */,
+ A75FCDBD23E25AB700529352 /* scancodes_windows.h in Headers */,
+ A75FCDBE23E25AB700529352 /* SDL_rwopsbundlesupport.h in Headers */,
+ A75FCDBF23E25AB700529352 /* SDL_syspower.h in Headers */,
+ A75FCDC023E25AB700529352 /* vulkan_macos.h in Headers */,
+ A75FCDC123E25AB700529352 /* vulkan_xcb.h in Headers */,
+ A75FCDC223E25AB700529352 /* vulkan_ios.h in Headers */,
+ A75FCDC323E25AB700529352 /* SDL_internal.h in Headers */,
+ A75FCDC423E25AB700529352 /* SDL_shape.h in Headers */,
+ A75FCDC523E25AB700529352 /* SDL_stdinc.h in Headers */,
+ A75FCDC623E25AB700529352 /* SDL_surface.h in Headers */,
+ A75FCDC723E25AB700529352 /* vulkan.h in Headers */,
+ A75FCDC823E25AB700529352 /* SDL_keyboard_c.h in Headers */,
+ A75FCDC923E25AB700529352 /* SDL_system.h in Headers */,
+ A75FCDCA23E25AB700529352 /* SDL_syswm.h in Headers */,
+ A75FCDCB23E25AB700529352 /* SDL_opengl_glext.h in Headers */,
+ A75FCDCC23E25AB700529352 /* SDL_mouse_c.h in Headers */,
+ A75FCDCD23E25AB700529352 /* SDL_blit_auto.h in Headers */,
+ A75FCDCE23E25AB700529352 /* SDL_blendline.h in Headers */,
+ A75FCDCF23E25AB700529352 /* SDL_syshaptic.h in Headers */,
+ A75FCDD023E25AB700529352 /* SDL_vulkan_internal.h in Headers */,
+ A75FCDD123E25AB700529352 /* SDL_thread.h in Headers */,
+ A75FCDD223E25AB700529352 /* SDL_cocoaevents.h in Headers */,
+ A75FCDD323E25AB700529352 /* vk_icd.h in Headers */,
+ A75FCDD423E25AB700529352 /* SDL_nullframebuffer_c.h in Headers */,
+ A75FCDD523E25AB700529352 /* SDL_timer.h in Headers */,
+ A75FCDD623E25AB700529352 /* SDL_dynapi_procs.h in Headers */,
+ A75FCDD723E25AB700529352 /* vulkan_fuchsia.h in Headers */,
+ A75FCDD823E25AB700529352 /* SDL_touch.h in Headers */,
+ A75FCDD923E25AB700529352 /* SDL_types.h in Headers */,
+ A75FCDDA23E25AB700529352 /* usb_ids.h in Headers */,
+ A75FCDDB23E25AB700529352 /* SDL_gles2funcs.h in Headers */,
+ A75FCDDC23E25AB700529352 /* SDL_sysjoystick_c.h in Headers */,
+ A75FCDDD23E25AB700529352 /* SDL_version.h in Headers */,
+ A75FCDDE23E25AB700529352 /* SDL_video.h in Headers */,
+ A75FCDDF23E25AB700529352 /* SDL_opengles2_gl2.h in Headers */,
+ A75FCDE023E25AB700529352 /* SDL_sensor.h in Headers */,
+ A75FCDE123E25AB700529352 /* SDL_sysvideo.h in Headers */,
+ A75FCDE223E25AB700529352 /* SDL_opengles2_gl2platform.h in Headers */,
+ A75FCDE323E25AB700529352 /* SDL_opengles2_gl2ext.h in Headers */,
+ A75FCDE423E25AB700529352 /* SDL_x11mouse.h in Headers */,
+ A75FCDE523E25AB700529352 /* SDL_dynapi_overrides.h in Headers */,
+ A75FCDE623E25AB700529352 /* SDL_cocoawindow.h in Headers */,
+ A75FCDE723E25AB700529352 /* SDL_x11vulkan.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FCEB523E25AC700529352 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FCEB623E25AC700529352 /* SDL_shaders_metal_tvos.h in Headers */,
+ A75FCEB723E25AC700529352 /* SDL_filesystem.h in Headers */,
+ A75FCEB923E25AC700529352 /* begin_code.h in Headers */,
+ A75FCEBA23E25AC700529352 /* SDL_uikitopengles.h in Headers */,
+ A75FCEBB23E25AC700529352 /* close_code.h in Headers */,
+ A75FCEBC23E25AC700529352 /* SDL.h in Headers */,
+ A75FCEBD23E25AC700529352 /* SDL_uikitmetalview.h in Headers */,
+ A75FCEBE23E25AC700529352 /* SDL_assert.h in Headers */,
+ A75FCEBF23E25AC700529352 /* SDL_shape_internals.h in Headers */,
+ A75FCEC023E25AC700529352 /* SDL_glfuncs.h in Headers */,
+ A75FCEC123E25AC700529352 /* SDL_atomic.h in Headers */,
+ A75FCEC223E25AC700529352 /* SDL_rect_c.h in Headers */,
+ A75FCEC323E25AC700529352 /* SDL_x11xinput2.h in Headers */,
+ A75FCEC423E25AC700529352 /* SDL_shaders_metal_osx.h in Headers */,
+ A75FCEC523E25AC700529352 /* SDL_shaders_metal_ios.h in Headers */,
+ A75FCEC623E25AC700529352 /* SDL_offscreenwindow.h in Headers */,
+ A75FCEC723E25AC700529352 /* SDL_audio.h in Headers */,
+ A75FCEC823E25AC700529352 /* SDL_coremotionsensor.h in Headers */,
+ A75FCEC923E25AC700529352 /* SDL_uikitview.h in Headers */,
+ A75FCECA23E25AC700529352 /* SDL_bits.h in Headers */,
+ A75FCECB23E25AC700529352 /* SDL_uikitappdelegate.h in Headers */,
+ A75FCECC23E25AC700529352 /* keyinfotable.h in Headers */,
+ A75FCECD23E25AC700529352 /* SDL_blendmode.h in Headers */,
+ A75FCECE23E25AC700529352 /* SDL_dropevents_c.h in Headers */,
+ A75FCECF23E25AC700529352 /* SDL_haptic_c.h in Headers */,
+ A75FCED023E25AC700529352 /* SDL_clipboard.h in Headers */,
+ A75FCED123E25AC700529352 /* SDL_dataqueue.h in Headers */,
+ A75FCED223E25AC700529352 /* SDL_error_c.h in Headers */,
+ A75FCED323E25AC700529352 /* SDL_x11events.h in Headers */,
+ A75FCED423E25AC700529352 /* SDL_config.h in Headers */,
+ A75FCED523E25AC700529352 /* SDL_d3dmath.h in Headers */,
+ A75FCED623E25AC700529352 /* SDL_x11window.h in Headers */,
+ A75FCED823E25AC700529352 /* SDL_egl_c.h in Headers */,
+ A75FCED923E25AC700529352 /* SDL_copying.h in Headers */,
+ A75FCEDA23E25AC700529352 /* yuv_rgb.h in Headers */,
+ A75FCEDB23E25AC700529352 /* SDL_dummyaudio.h in Headers */,
+ A75FCEDC23E25AC700529352 /* SDL_uikitmessagebox.h in Headers */,
+ A75FCEDD23E25AC700529352 /* SDL_x11messagebox.h in Headers */,
+ A75FCEDE23E25AC700529352 /* SDL_thread_c.h in Headers */,
+ A75FCEDF23E25AC700529352 /* SDL_cocoamessagebox.h in Headers */,
+ A75FCEE023E25AC700529352 /* SDL_x11shape.h in Headers */,
+ A75FCEE123E25AC700529352 /* SDL_cpuinfo.h in Headers */,
+ A75FCEE223E25AC700529352 /* SDL_endian.h in Headers */,
+ A75FCEE323E25AC700529352 /* SDL_error.h in Headers */,
+ A75FCEE423E25AC700529352 /* SDL_events.h in Headers */,
+ A75FCEE523E25AC700529352 /* SDL_blendfillrect.h in Headers */,
+ A75FCEE623E25AC700529352 /* SDL_gamecontroller.h in Headers */,
+ A75FCEE723E25AC700529352 /* SDL_hidapijoystick_c.h in Headers */,
+ A75FCEE923E25AC700529352 /* SDL_pixels_c.h in Headers */,
+ A75FCEEA23E25AC700529352 /* SDL_x11modes.h in Headers */,
+ A75FCEEB23E25AC700529352 /* SDL_joystick_c.h in Headers */,
+ A75FCEEC23E25AC700529352 /* vk_sdk_platform.h in Headers */,
+ A75FCEED23E25AC700529352 /* blank_cursor.h in Headers */,
+ A75FDB6023E39E6100529352 /* hidapi.h in Headers */,
+ A75FCEEE23E25AC700529352 /* SDL_gesture.h in Headers */,
+ A75FDBCD23EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A75FCEEF23E25AC700529352 /* SDL_sysaudio.h in Headers */,
+ A75FCEF023E25AC700529352 /* SDL_haptic.h in Headers */,
+ A75FDAC723E28BD900529352 /* SDL_sysjoystick_c.h in Headers */,
+ A75FCEF123E25AC700529352 /* SDL_sysevents.h in Headers */,
+ A75FCEF223E25AC700529352 /* math_libm.h in Headers */,
+ A75FCEF323E25AC700529352 /* SDL_uikitvideo.h in Headers */,
+ A75FCEF423E25AC700529352 /* SDL_cocoamouse.h in Headers */,
+ A75FCEF523E25AC700529352 /* SDL_hints.h in Headers */,
+ A75FCEF623E25AC700529352 /* SDL_blit_slow.h in Headers */,
+ A75FCEF723E25AC700529352 /* SDL_yuv_sw_c.h in Headers */,
+ A75FCEF823E25AC700529352 /* SDL_x11opengl.h in Headers */,
+ A75FCEF923E25AC700529352 /* SDL_windowevents_c.h in Headers */,
+ A75FCEFA23E25AC700529352 /* SDL_joystick.h in Headers */,
+ A75FCEFB23E25AC700529352 /* SDL_cocoavideo.h in Headers */,
+ A75FCEFC23E25AC700529352 /* SDL_keyboard.h in Headers */,
+ A75FCEFD23E25AC700529352 /* SDL_uikitevents.h in Headers */,
+ A75FCEFE23E25AC700529352 /* SDL_gesture_c.h in Headers */,
+ A75FCEFF23E25AC700529352 /* SDL_shaders_gl.h in Headers */,
+ A75FCF0023E25AC700529352 /* SDL_systhread_c.h in Headers */,
+ A75FCF0123E25AC700529352 /* SDL_keycode.h in Headers */,
+ A75FCF0223E25AC700529352 /* SDL_x11keyboard.h in Headers */,
+ A75FCF0323E25AC700529352 /* SDL_cocoakeyboard.h in Headers */,
+ A75FCF0423E25AC700529352 /* SDL_uikitvulkan.h in Headers */,
+ A75FCF0523E25AC700529352 /* SDL_x11framebuffer.h in Headers */,
+ A75FCF0623E25AC700529352 /* SDL_x11video.h in Headers */,
+ A75FCF0723E25AC700529352 /* vulkan.hpp in Headers */,
+ A75FCF0823E25AC700529352 /* SDL_loadso.h in Headers */,
+ A75FCF0923E25AC700529352 /* gl2ext.h in Headers */,
+ A75FCF0A23E25AC700529352 /* SDL_clipboardevents_c.h in Headers */,
+ A75FCF0B23E25AC700529352 /* SDL_x11touch.h in Headers */,
+ A75FCF0C23E25AC700529352 /* SDL_syshaptic_c.h in Headers */,
+ A75FCF0D23E25AC700529352 /* SDL_hints_c.h in Headers */,
+ A75FCF0E23E25AC700529352 /* SDL_audiodev_c.h in Headers */,
+ A75FCF0F23E25AC700529352 /* SDL_audio_c.h in Headers */,
+ A75FCF1023E25AC700529352 /* SDL_uikitmodes.h in Headers */,
+ A75FCF1123E25AC700529352 /* egl.h in Headers */,
+ A75FCF1223E25AC700529352 /* khrplatform.h in Headers */,
+ A75FCF1323E25AC700529352 /* SDL_log.h in Headers */,
+ A75FCF1423E25AC700529352 /* SDL_uikitviewcontroller.h in Headers */,
+ A75FCF1523E25AC700529352 /* SDL_dummysensor.h in Headers */,
+ A75FCF1623E25AC700529352 /* vulkan_android.h in Headers */,
+ A75FCF1723E25AC700529352 /* yuv_rgb_std_func.h in Headers */,
+ A75FCF1823E25AC700529352 /* vulkan_core.h in Headers */,
+ A75FCF1923E25AC700529352 /* SDL_syssensor.h in Headers */,
+ A75FCF1A23E25AC700529352 /* SDL_dynapi.h in Headers */,
+ A75FCF1B23E25AC700529352 /* SDL_assert_c.h in Headers */,
+ A75FCF1C23E25AC700529352 /* SDL_diskaudio.h in Headers */,
+ A75FCF1D23E25AC700529352 /* SDL_main.h in Headers */,
+ A75FCF1E23E25AC700529352 /* SDL_drawpoint.h in Headers */,
+ A75FCF1F23E25AC700529352 /* SDL_opengles2_khrplatform.h in Headers */,
+ A75FCF2023E25AC700529352 /* SDL_wave.h in Headers */,
+ A75FCF2123E25AC700529352 /* SDL_cocoaopengl.h in Headers */,
+ A75FCF2223E25AC700529352 /* yuv_rgb_sse_func.h in Headers */,
+ A75FCF2323E25AC700529352 /* imKStoUCS.h in Headers */,
+ A75FCF2423E25AC700529352 /* SDL_offscreenevents_c.h in Headers */,
+ A75FCF2523E25AC700529352 /* SDL_x11sym.h in Headers */,
+ A75FCF2623E25AC700529352 /* SDL_coreaudio.h in Headers */,
+ A75FCF2723E25AC700529352 /* SDL_draw.h in Headers */,
+ A75FCF2823E25AC700529352 /* SDL_drawline.h in Headers */,
+ A75FCF2923E25AC700529352 /* SDL_messagebox.h in Headers */,
+ A75FCF2A23E25AC700529352 /* SDL_mouse.h in Headers */,
+ A75FCF2B23E25AC700529352 /* SDL_mutex.h in Headers */,
+ A75FCF2C23E25AC700529352 /* SDL_yuv_c.h in Headers */,
+ A75FCF2D23E25AC700529352 /* scancodes_xfree86.h in Headers */,
+ A75FCF2E23E25AC700529352 /* SDL_syspower.h in Headers */,
+ A75FDAFB23E35ED700529352 /* SDL_config_iphoneos.h in Headers */,
+ A75FCF2F23E25AC700529352 /* SDL_x11clipboard.h in Headers */,
+ A75FCF3023E25AC700529352 /* SDL_name.h in Headers */,
+ A75FCF3123E25AC700529352 /* eglext.h in Headers */,
+ A75FCF3223E25AC700529352 /* SDL_events_c.h in Headers */,
+ A75FCF3323E25AC700529352 /* math_private.h in Headers */,
+ A75FCF3523E25AC700529352 /* vulkan_wayland.h in Headers */,
+ A75FCF3623E25AC700529352 /* SDL_opengl.h in Headers */,
+ A75FCF3723E25AC700529352 /* SDL_cocoashape.h in Headers */,
+ A75FCF3823E25AC700529352 /* SDL_opengles.h in Headers */,
+ A75FCF3923E25AC700529352 /* SDL_shaders_gles2.h in Headers */,
+ A75FCF3A23E25AC700529352 /* SDL_opengles2.h in Headers */,
+ A75FCF3B23E25AC700529352 /* SDL_glesfuncs.h in Headers */,
+ A75FCF3C23E25AC700529352 /* SDL_blendpoint.h in Headers */,
+ A75FCF3D23E25AC700529352 /* SDL_offscreenvideo.h in Headers */,
+ A75FCF3E23E25AC700529352 /* SDL_nullevents_c.h in Headers */,
+ A75FCF3F23E25AC700529352 /* SDL_sysjoystick.h in Headers */,
+ A75FCF4023E25AC700529352 /* SDL_steamcontroller.h in Headers */,
+ A75FCF4123E25AC700529352 /* scancodes_linux.h in Headers */,
+ A75FCF4223E25AC700529352 /* SDL_x11dyn.h in Headers */,
+ A75FCF4323E25AC700529352 /* SDL_touch_c.h in Headers */,
+ A75FCF4423E25AC700529352 /* SDL_gamecontrollerdb.h in Headers */,
+ A75FCF4523E25AC700529352 /* SDL_cocoavulkan.h in Headers */,
+ A75FCF4623E25AC700529352 /* gl2platform.h in Headers */,
+ A75FCF4723E25AC700529352 /* SDL_pixels.h in Headers */,
+ A75FCF4823E25AC700529352 /* vk_layer.h in Headers */,
+ A75FCF4923E25AC700529352 /* SDL_cocoamousetap.h in Headers */,
+ A75FCF4A23E25AC700529352 /* vk_platform.h in Headers */,
+ A75FCF4B23E25AC700529352 /* SDL_cocoametalview.h in Headers */,
+ A75FCF4C23E25AC700529352 /* SDL_cocoaopengles.h in Headers */,
+ A75FCF4D23E25AC700529352 /* SDL_blit.h in Headers */,
+ A75FCF4E23E25AC700529352 /* vulkan_xlib_xrandr.h in Headers */,
+ A75FCF4F23E25AC700529352 /* SDL_sensor_c.h in Headers */,
+ A75FCF5023E25AC700529352 /* SDL_sysrender.h in Headers */,
+ A75FCF5123E25AC700529352 /* SDL_rotate.h in Headers */,
+ A75FCF5223E25AC700529352 /* SDL_platform.h in Headers */,
+ A75FCF5323E25AC700529352 /* SDL_power.h in Headers */,
+ A75FCF5423E25AC700529352 /* SDL_offscreenopengl.h in Headers */,
+ A75FCF5623E25AC700529352 /* scancodes_darwin.h in Headers */,
+ A75FCF5723E25AC700529352 /* controller_type.h in Headers */,
+ A75FCF5823E25AC700529352 /* SDL_x11opengles.h in Headers */,
+ A75FCF5923E25AC700529352 /* SDL_uikitclipboard.h in Headers */,
+ A75FCF5A23E25AC700529352 /* vulkan_xlib.h in Headers */,
+ A75FCF5B23E25AC700529352 /* SDL_uikitwindow.h in Headers */,
+ A75FCF5C23E25AC700529352 /* vulkan_vi.h in Headers */,
+ A75FCF5D23E25AC700529352 /* vulkan_mir.h in Headers */,
+ A75FCF5E23E25AC700529352 /* SDL_quit.h in Headers */,
+ A75FCF5F23E25AC700529352 /* default_cursor.h in Headers */,
+ A75FCF6023E25AC700529352 /* SDL_render_sw_c.h in Headers */,
+ A75FCF6123E25AC700529352 /* SDL_rect.h in Headers */,
+ A75FCF6223E25AC700529352 /* SDL_render.h in Headers */,
+ A75FCF6323E25AC700529352 /* SDL_nullvideo.h in Headers */,
+ A75FCF6423E25AC700529352 /* SDL_blit_copy.h in Headers */,
+ A75FCF6523E25AC700529352 /* SDL_RLEaccel_c.h in Headers */,
+ A75FCF6623E25AC700529352 /* eglplatform.h in Headers */,
+ A75FCF6723E25AC700529352 /* edid.h in Headers */,
+ A75FCF6823E25AC700529352 /* SDL_revision.h in Headers */,
+ A75FCF6923E25AC700529352 /* SDL_systhread.h in Headers */,
+ A75FCF6A23E25AC700529352 /* SDL_rwops.h in Headers */,
+ A75FCF6B23E25AC700529352 /* SDL_scancode.h in Headers */,
+ A75FCF6C23E25AC700529352 /* SDL_cocoaclipboard.h in Headers */,
+ A75FCF6D23E25AC700529352 /* SDL_cocoamodes.h in Headers */,
+ A75FCF6E23E25AC700529352 /* SDL_uikitopenglview.h in Headers */,
+ A75FCF6F23E25AC700529352 /* vulkan_win32.h in Headers */,
+ A75FCF7023E25AC700529352 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A75FCF7123E25AC700529352 /* SDL_displayevents_c.h in Headers */,
+ A75FCF7323E25AC700529352 /* SDL_timer_c.h in Headers */,
+ A75FCF7423E25AC700529352 /* gl2.h in Headers */,
+ A75FCF7523E25AC700529352 /* SDL_sysmutex_c.h in Headers */,
+ A75FCF7623E25AC700529352 /* scancodes_windows.h in Headers */,
+ A75FCF7723E25AC700529352 /* SDL_rwopsbundlesupport.h in Headers */,
+ A75FCF7823E25AC700529352 /* SDL_syspower.h in Headers */,
+ A75FCF7923E25AC700529352 /* vulkan_macos.h in Headers */,
+ A75FCF7A23E25AC700529352 /* vulkan_xcb.h in Headers */,
+ A75FCF7B23E25AC700529352 /* vulkan_ios.h in Headers */,
+ A75FCF7C23E25AC700529352 /* SDL_internal.h in Headers */,
+ A75FCF7D23E25AC700529352 /* SDL_shape.h in Headers */,
+ A75FCF7E23E25AC700529352 /* SDL_stdinc.h in Headers */,
+ A75FCF7F23E25AC700529352 /* SDL_surface.h in Headers */,
+ A75FCF8023E25AC700529352 /* vulkan.h in Headers */,
+ A75FCF8123E25AC700529352 /* SDL_keyboard_c.h in Headers */,
+ A75FCF8223E25AC700529352 /* SDL_system.h in Headers */,
+ A75FCF8323E25AC700529352 /* SDL_syswm.h in Headers */,
+ A75FCF8423E25AC700529352 /* SDL_opengl_glext.h in Headers */,
+ A75FCF8523E25AC700529352 /* SDL_mouse_c.h in Headers */,
+ A75FCF8623E25AC700529352 /* SDL_blit_auto.h in Headers */,
+ A75FCF8723E25AC700529352 /* SDL_blendline.h in Headers */,
+ A75FCF8823E25AC700529352 /* SDL_syshaptic.h in Headers */,
+ A75FCF8923E25AC700529352 /* SDL_vulkan_internal.h in Headers */,
+ A75FCF8A23E25AC700529352 /* SDL_thread.h in Headers */,
+ A75FCF8B23E25AC700529352 /* SDL_cocoaevents.h in Headers */,
+ A75FCF8C23E25AC700529352 /* vk_icd.h in Headers */,
+ A75FCF8D23E25AC700529352 /* SDL_nullframebuffer_c.h in Headers */,
+ A75FCF8E23E25AC700529352 /* SDL_timer.h in Headers */,
+ A75FCF8F23E25AC700529352 /* SDL_dynapi_procs.h in Headers */,
+ A75FCF9023E25AC700529352 /* vulkan_fuchsia.h in Headers */,
+ A75FCF9123E25AC700529352 /* SDL_touch.h in Headers */,
+ A75FCF9223E25AC700529352 /* SDL_types.h in Headers */,
+ A75FCF9323E25AC700529352 /* usb_ids.h in Headers */,
+ A75FCF9423E25AC700529352 /* SDL_gles2funcs.h in Headers */,
+ A75FCF9523E25AC700529352 /* SDL_sysjoystick_c.h in Headers */,
+ A75FCF9623E25AC700529352 /* SDL_version.h in Headers */,
+ A75FCF9723E25AC700529352 /* SDL_video.h in Headers */,
+ A75FCF9823E25AC700529352 /* SDL_opengles2_gl2.h in Headers */,
+ A75FCF9923E25AC700529352 /* SDL_sensor.h in Headers */,
+ A75FCF9A23E25AC700529352 /* SDL_sysvideo.h in Headers */,
+ A75FCF9B23E25AC700529352 /* SDL_opengles2_gl2platform.h in Headers */,
+ A75FCF9C23E25AC700529352 /* SDL_opengles2_gl2ext.h in Headers */,
+ A75FCF9D23E25AC700529352 /* SDL_x11mouse.h in Headers */,
+ A75FCF9E23E25AC700529352 /* SDL_dynapi_overrides.h in Headers */,
+ A75FCF9F23E25AC700529352 /* SDL_cocoawindow.h in Headers */,
+ A75FCFA023E25AC700529352 /* SDL_x11vulkan.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB4423E399AC00529352 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB6123E39E6100529352 /* hidapi.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB6323E3A2C900529352 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB6423E3A2C900529352 /* hidapi.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB8123E4C74400529352 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB8223E4C74400529352 /* hidapi.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A769B08323E259AE00872273 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A769B08423E259AE00872273 /* SDL_shaders_metal_tvos.h in Headers */,
+ A769B08523E259AE00872273 /* SDL_filesystem.h in Headers */,
+ A769B08723E259AE00872273 /* begin_code.h in Headers */,
+ A769B08823E259AE00872273 /* SDL_uikitopengles.h in Headers */,
+ A769B08923E259AE00872273 /* close_code.h in Headers */,
+ A769B08A23E259AE00872273 /* SDL.h in Headers */,
+ A769B08B23E259AE00872273 /* SDL_uikitmetalview.h in Headers */,
+ A769B08C23E259AE00872273 /* SDL_assert.h in Headers */,
+ A769B08D23E259AE00872273 /* SDL_shape_internals.h in Headers */,
+ A769B08E23E259AE00872273 /* SDL_glfuncs.h in Headers */,
+ A769B08F23E259AE00872273 /* SDL_atomic.h in Headers */,
+ A769B09023E259AE00872273 /* SDL_rect_c.h in Headers */,
+ A769B09123E259AE00872273 /* SDL_x11xinput2.h in Headers */,
+ A769B09223E259AE00872273 /* SDL_shaders_metal_osx.h in Headers */,
+ A769B09323E259AE00872273 /* SDL_shaders_metal_ios.h in Headers */,
+ A769B09423E259AE00872273 /* SDL_offscreenwindow.h in Headers */,
+ A769B09523E259AE00872273 /* SDL_audio.h in Headers */,
+ A769B09623E259AE00872273 /* SDL_coremotionsensor.h in Headers */,
+ A769B09723E259AE00872273 /* SDL_uikitview.h in Headers */,
+ A769B09823E259AE00872273 /* SDL_bits.h in Headers */,
+ A769B09923E259AE00872273 /* SDL_uikitappdelegate.h in Headers */,
+ A769B09A23E259AE00872273 /* keyinfotable.h in Headers */,
+ A769B09B23E259AE00872273 /* SDL_blendmode.h in Headers */,
+ A769B09C23E259AE00872273 /* SDL_dropevents_c.h in Headers */,
+ A769B09D23E259AE00872273 /* SDL_haptic_c.h in Headers */,
+ A769B09E23E259AE00872273 /* SDL_clipboard.h in Headers */,
+ A769B09F23E259AE00872273 /* SDL_dataqueue.h in Headers */,
+ A769B0A023E259AE00872273 /* SDL_error_c.h in Headers */,
+ A769B0A123E259AE00872273 /* SDL_x11events.h in Headers */,
+ A769B0A223E259AE00872273 /* SDL_config.h in Headers */,
+ A769B0A323E259AE00872273 /* SDL_d3dmath.h in Headers */,
+ A769B0A423E259AE00872273 /* SDL_x11window.h in Headers */,
+ A769B0A623E259AE00872273 /* SDL_egl_c.h in Headers */,
+ A769B0A723E259AE00872273 /* SDL_copying.h in Headers */,
+ A769B0A823E259AE00872273 /* yuv_rgb.h in Headers */,
+ A769B0A923E259AE00872273 /* SDL_dummyaudio.h in Headers */,
+ A769B0AA23E259AE00872273 /* SDL_uikitmessagebox.h in Headers */,
+ A769B0AB23E259AE00872273 /* SDL_x11messagebox.h in Headers */,
+ A769B0AC23E259AE00872273 /* SDL_thread_c.h in Headers */,
+ A769B0AD23E259AE00872273 /* SDL_cocoamessagebox.h in Headers */,
+ A769B0AE23E259AE00872273 /* SDL_x11shape.h in Headers */,
+ A769B0AF23E259AE00872273 /* SDL_cpuinfo.h in Headers */,
+ A769B0B023E259AE00872273 /* SDL_endian.h in Headers */,
+ A769B0B123E259AE00872273 /* SDL_error.h in Headers */,
+ A769B0B223E259AE00872273 /* SDL_events.h in Headers */,
+ A769B0B323E259AE00872273 /* SDL_blendfillrect.h in Headers */,
+ A769B0B423E259AE00872273 /* SDL_gamecontroller.h in Headers */,
+ A769B0B523E259AE00872273 /* SDL_hidapijoystick_c.h in Headers */,
+ A769B0B623E259AE00872273 /* SDL_pixels_c.h in Headers */,
+ A769B0B723E259AE00872273 /* SDL_x11modes.h in Headers */,
+ A769B0B823E259AE00872273 /* SDL_joystick_c.h in Headers */,
+ A769B0B923E259AE00872273 /* vk_sdk_platform.h in Headers */,
+ A769B0BA23E259AE00872273 /* blank_cursor.h in Headers */,
+ A75FDB5D23E39E6100529352 /* hidapi.h in Headers */,
+ A769B0BB23E259AE00872273 /* SDL_gesture.h in Headers */,
+ A75FDBCA23EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A769B0BC23E259AE00872273 /* SDL_sysaudio.h in Headers */,
+ A769B0BD23E259AE00872273 /* SDL_haptic.h in Headers */,
+ A769B0BE23E259AE00872273 /* SDL_sysevents.h in Headers */,
+ A769B0BF23E259AE00872273 /* math_libm.h in Headers */,
+ A769B0C023E259AE00872273 /* SDL_uikitvideo.h in Headers */,
+ A769B0C123E259AE00872273 /* SDL_cocoamouse.h in Headers */,
+ A769B0C223E259AE00872273 /* SDL_hints.h in Headers */,
+ A769B0C323E259AE00872273 /* SDL_blit_slow.h in Headers */,
+ A769B0C423E259AE00872273 /* SDL_yuv_sw_c.h in Headers */,
+ A769B0C523E259AE00872273 /* SDL_x11opengl.h in Headers */,
+ A769B0C623E259AE00872273 /* SDL_windowevents_c.h in Headers */,
+ A769B0C723E259AE00872273 /* SDL_joystick.h in Headers */,
+ A769B0C823E259AE00872273 /* SDL_cocoavideo.h in Headers */,
+ A769B0C923E259AE00872273 /* SDL_keyboard.h in Headers */,
+ A769B0CA23E259AE00872273 /* SDL_uikitevents.h in Headers */,
+ A769B0CB23E259AE00872273 /* SDL_gesture_c.h in Headers */,
+ A769B0CC23E259AE00872273 /* SDL_shaders_gl.h in Headers */,
+ A769B0CD23E259AE00872273 /* SDL_systhread_c.h in Headers */,
+ A769B0CE23E259AE00872273 /* SDL_keycode.h in Headers */,
+ A769B0CF23E259AE00872273 /* SDL_x11keyboard.h in Headers */,
+ A769B0D023E259AE00872273 /* SDL_cocoakeyboard.h in Headers */,
+ A769B0D123E259AE00872273 /* SDL_uikitvulkan.h in Headers */,
+ A769B0D223E259AE00872273 /* SDL_x11framebuffer.h in Headers */,
+ A769B0D323E259AE00872273 /* SDL_x11video.h in Headers */,
+ A769B0D423E259AE00872273 /* vulkan.hpp in Headers */,
+ A769B0D523E259AE00872273 /* SDL_loadso.h in Headers */,
+ A769B0D623E259AE00872273 /* gl2ext.h in Headers */,
+ A769B0D723E259AE00872273 /* SDL_clipboardevents_c.h in Headers */,
+ A769B0D823E259AE00872273 /* SDL_x11touch.h in Headers */,
+ A769B0D923E259AE00872273 /* SDL_syshaptic_c.h in Headers */,
+ A769B0DA23E259AE00872273 /* SDL_hints_c.h in Headers */,
+ A769B0DB23E259AE00872273 /* SDL_audiodev_c.h in Headers */,
+ A769B0DC23E259AE00872273 /* SDL_audio_c.h in Headers */,
+ A769B0DD23E259AE00872273 /* SDL_uikitmodes.h in Headers */,
+ A769B0DE23E259AE00872273 /* egl.h in Headers */,
+ A769B0DF23E259AE00872273 /* khrplatform.h in Headers */,
+ A769B0E023E259AE00872273 /* SDL_log.h in Headers */,
+ A769B0E123E259AE00872273 /* SDL_uikitviewcontroller.h in Headers */,
+ A769B0E223E259AE00872273 /* SDL_dummysensor.h in Headers */,
+ A769B0E423E259AE00872273 /* SDL_steamcontroller.h in Headers */,
+ A769B0E523E259AE00872273 /* vulkan_android.h in Headers */,
+ A769B0E623E259AE00872273 /* yuv_rgb_std_func.h in Headers */,
+ A769B0E723E259AE00872273 /* vulkan_core.h in Headers */,
+ A769B0E823E259AE00872273 /* SDL_syssensor.h in Headers */,
+ A769B0E923E259AE00872273 /* SDL_dynapi.h in Headers */,
+ A769B0EA23E259AE00872273 /* SDL_assert_c.h in Headers */,
+ A769B0EB23E259AE00872273 /* SDL_diskaudio.h in Headers */,
+ A769B0EC23E259AE00872273 /* SDL_main.h in Headers */,
+ A769B0ED23E259AE00872273 /* SDL_drawpoint.h in Headers */,
+ A769B0EE23E259AE00872273 /* SDL_opengles2_khrplatform.h in Headers */,
+ A769B0EF23E259AE00872273 /* SDL_wave.h in Headers */,
+ A769B0F023E259AE00872273 /* SDL_cocoaopengl.h in Headers */,
+ A769B0F123E259AE00872273 /* yuv_rgb_sse_func.h in Headers */,
+ A769B0F223E259AE00872273 /* imKStoUCS.h in Headers */,
+ A769B0F323E259AE00872273 /* SDL_offscreenevents_c.h in Headers */,
+ A769B0F423E259AE00872273 /* SDL_x11sym.h in Headers */,
+ A769B0F523E259AE00872273 /* SDL_coreaudio.h in Headers */,
+ A769B0F623E259AE00872273 /* SDL_draw.h in Headers */,
+ A769B0F723E259AE00872273 /* SDL_drawline.h in Headers */,
+ A769B0F823E259AE00872273 /* SDL_messagebox.h in Headers */,
+ A769B0F923E259AE00872273 /* SDL_mouse.h in Headers */,
+ A769B0FA23E259AE00872273 /* SDL_mutex.h in Headers */,
+ A769B0FB23E259AE00872273 /* SDL_yuv_c.h in Headers */,
+ A769B0FC23E259AE00872273 /* scancodes_xfree86.h in Headers */,
+ A769B0FD23E259AE00872273 /* SDL_syspower.h in Headers */,
+ A75FDAF923E35ED500529352 /* SDL_config_iphoneos.h in Headers */,
+ A769B0FE23E259AE00872273 /* SDL_x11clipboard.h in Headers */,
+ A769B0FF23E259AE00872273 /* SDL_name.h in Headers */,
+ A769B10023E259AE00872273 /* eglext.h in Headers */,
+ A769B10123E259AE00872273 /* SDL_events_c.h in Headers */,
+ A769B10223E259AE00872273 /* math_private.h in Headers */,
+ A769B10323E259AE00872273 /* vulkan_wayland.h in Headers */,
+ A769B10423E259AE00872273 /* SDL_opengl.h in Headers */,
+ A769B10523E259AE00872273 /* SDL_cocoashape.h in Headers */,
+ A769B10623E259AE00872273 /* SDL_opengles.h in Headers */,
+ A769B10723E259AE00872273 /* SDL_shaders_gles2.h in Headers */,
+ A769B10823E259AE00872273 /* SDL_opengles2.h in Headers */,
+ A769B10923E259AE00872273 /* SDL_glesfuncs.h in Headers */,
+ A769B10A23E259AE00872273 /* SDL_blendpoint.h in Headers */,
+ A769B10B23E259AE00872273 /* SDL_offscreenvideo.h in Headers */,
+ A769B10C23E259AE00872273 /* SDL_nullevents_c.h in Headers */,
+ A769B10D23E259AE00872273 /* SDL_sysjoystick.h in Headers */,
+ A769B10E23E259AE00872273 /* scancodes_linux.h in Headers */,
+ A769B10F23E259AE00872273 /* SDL_x11dyn.h in Headers */,
+ A769B11023E259AE00872273 /* SDL_touch_c.h in Headers */,
+ A769B11123E259AE00872273 /* SDL_gamecontrollerdb.h in Headers */,
+ A769B11223E259AE00872273 /* SDL_cocoavulkan.h in Headers */,
+ A769B11323E259AE00872273 /* gl2platform.h in Headers */,
+ A769B11423E259AE00872273 /* SDL_pixels.h in Headers */,
+ A769B11523E259AE00872273 /* vk_layer.h in Headers */,
+ A769B11723E259AE00872273 /* SDL_cocoamousetap.h in Headers */,
+ A769B11823E259AE00872273 /* vk_platform.h in Headers */,
+ A769B11A23E259AE00872273 /* SDL_cocoametalview.h in Headers */,
+ A769B11B23E259AE00872273 /* SDL_cocoaopengles.h in Headers */,
+ A769B11C23E259AE00872273 /* SDL_blit.h in Headers */,
+ A769B11D23E259AE00872273 /* vulkan_xlib_xrandr.h in Headers */,
+ A769B11E23E259AE00872273 /* SDL_sensor_c.h in Headers */,
+ A769B11F23E259AE00872273 /* SDL_sysrender.h in Headers */,
+ A769B12023E259AE00872273 /* SDL_rotate.h in Headers */,
+ A769B12123E259AE00872273 /* SDL_platform.h in Headers */,
+ A769B12223E259AE00872273 /* SDL_power.h in Headers */,
+ A769B12323E259AE00872273 /* SDL_offscreenopengl.h in Headers */,
+ A769B12523E259AE00872273 /* scancodes_darwin.h in Headers */,
+ A769B12623E259AE00872273 /* controller_type.h in Headers */,
+ A769B12723E259AE00872273 /* SDL_x11opengles.h in Headers */,
+ A769B12823E259AE00872273 /* SDL_uikitclipboard.h in Headers */,
+ A769B12923E259AE00872273 /* vulkan_xlib.h in Headers */,
+ A769B12A23E259AE00872273 /* SDL_uikitwindow.h in Headers */,
+ A769B12B23E259AE00872273 /* vulkan_vi.h in Headers */,
+ A769B12C23E259AE00872273 /* vulkan_mir.h in Headers */,
+ A769B12D23E259AE00872273 /* SDL_quit.h in Headers */,
+ A769B12E23E259AE00872273 /* default_cursor.h in Headers */,
+ A769B12F23E259AE00872273 /* SDL_render_sw_c.h in Headers */,
+ A769B13023E259AE00872273 /* SDL_rect.h in Headers */,
+ A769B13123E259AE00872273 /* SDL_render.h in Headers */,
+ A769B13223E259AE00872273 /* SDL_nullvideo.h in Headers */,
+ A769B13323E259AE00872273 /* SDL_blit_copy.h in Headers */,
+ A769B13423E259AE00872273 /* SDL_RLEaccel_c.h in Headers */,
+ A769B13523E259AE00872273 /* eglplatform.h in Headers */,
+ A769B13623E259AE00872273 /* edid.h in Headers */,
+ A769B13723E259AE00872273 /* SDL_revision.h in Headers */,
+ A769B13823E259AE00872273 /* SDL_systhread.h in Headers */,
+ A769B13923E259AE00872273 /* SDL_rwops.h in Headers */,
+ A769B13A23E259AE00872273 /* SDL_scancode.h in Headers */,
+ A769B13B23E259AE00872273 /* SDL_cocoaclipboard.h in Headers */,
+ A769B13C23E259AE00872273 /* SDL_cocoamodes.h in Headers */,
+ A769B13D23E259AE00872273 /* SDL_uikitopenglview.h in Headers */,
+ A769B13E23E259AE00872273 /* vulkan_win32.h in Headers */,
+ A769B13F23E259AE00872273 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A769B14023E259AE00872273 /* SDL_displayevents_c.h in Headers */,
+ A769B14123E259AE00872273 /* SDL_timer_c.h in Headers */,
+ A769B14223E259AE00872273 /* gl2.h in Headers */,
+ A769B14323E259AE00872273 /* SDL_sysmutex_c.h in Headers */,
+ A769B14423E259AE00872273 /* scancodes_windows.h in Headers */,
+ A769B14523E259AE00872273 /* SDL_rwopsbundlesupport.h in Headers */,
+ A769B14623E259AE00872273 /* SDL_syspower.h in Headers */,
+ A769B14723E259AE00872273 /* vulkan_macos.h in Headers */,
+ A769B14823E259AE00872273 /* vulkan_xcb.h in Headers */,
+ A769B14923E259AE00872273 /* vulkan_ios.h in Headers */,
+ A769B14A23E259AE00872273 /* SDL_internal.h in Headers */,
+ A769B14B23E259AE00872273 /* SDL_shape.h in Headers */,
+ A769B14C23E259AE00872273 /* SDL_stdinc.h in Headers */,
+ A769B14D23E259AE00872273 /* SDL_surface.h in Headers */,
+ A769B14E23E259AE00872273 /* vulkan.h in Headers */,
+ A769B14F23E259AE00872273 /* SDL_keyboard_c.h in Headers */,
+ A769B15023E259AE00872273 /* SDL_system.h in Headers */,
+ A769B15123E259AE00872273 /* SDL_syswm.h in Headers */,
+ A769B15223E259AE00872273 /* SDL_opengl_glext.h in Headers */,
+ A769B15323E259AE00872273 /* SDL_mouse_c.h in Headers */,
+ A769B15423E259AE00872273 /* SDL_blit_auto.h in Headers */,
+ A769B15523E259AE00872273 /* SDL_blendline.h in Headers */,
+ A769B15623E259AE00872273 /* SDL_syshaptic.h in Headers */,
+ A769B15723E259AE00872273 /* SDL_vulkan_internal.h in Headers */,
+ A769B15823E259AE00872273 /* SDL_thread.h in Headers */,
+ A769B15923E259AE00872273 /* SDL_cocoaevents.h in Headers */,
+ A769B15A23E259AE00872273 /* vk_icd.h in Headers */,
+ A769B15B23E259AE00872273 /* SDL_nullframebuffer_c.h in Headers */,
+ A769B15C23E259AE00872273 /* SDL_timer.h in Headers */,
+ A769B15D23E259AE00872273 /* SDL_dynapi_procs.h in Headers */,
+ A769B15E23E259AE00872273 /* vulkan_fuchsia.h in Headers */,
+ A769B15F23E259AE00872273 /* SDL_touch.h in Headers */,
+ A769B16023E259AE00872273 /* SDL_types.h in Headers */,
+ A769B16123E259AE00872273 /* usb_ids.h in Headers */,
+ A769B16223E259AE00872273 /* SDL_sysjoystick_c.h in Headers */,
+ A769B16323E259AE00872273 /* SDL_gles2funcs.h in Headers */,
+ A769B16423E259AE00872273 /* SDL_sysjoystick_c.h in Headers */,
+ A769B16523E259AE00872273 /* SDL_version.h in Headers */,
+ A769B16623E259AE00872273 /* SDL_video.h in Headers */,
+ A769B16723E259AE00872273 /* SDL_opengles2_gl2.h in Headers */,
+ A769B16823E259AE00872273 /* SDL_sensor.h in Headers */,
+ A769B16923E259AE00872273 /* SDL_sysvideo.h in Headers */,
+ A769B16A23E259AE00872273 /* SDL_opengles2_gl2platform.h in Headers */,
+ A769B16B23E259AE00872273 /* SDL_opengles2_gl2ext.h in Headers */,
+ A769B16C23E259AE00872273 /* SDL_x11mouse.h in Headers */,
+ A769B16D23E259AE00872273 /* SDL_dynapi_overrides.h in Headers */,
+ A769B16E23E259AE00872273 /* SDL_cocoawindow.h in Headers */,
+ A769B16F23E259AE00872273 /* SDL_x11vulkan.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88A1523E2437C00DCD162 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDAF623E35EC400529352 /* SDL_config_iphoneos.h in Headers */,
+ A7D88A1623E2437C00DCD162 /* begin_code.h in Headers */,
+ A75FDB5923E39E6100529352 /* hidapi.h in Headers */,
+ A7D8B24323E2514200DCD162 /* eglext.h in Headers */,
+ A7D8AABD23E2514100DCD162 /* SDL_haptic_c.h in Headers */,
+ A7D88A1823E2437C00DCD162 /* close_code.h in Headers */,
+ A7D8B85B23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
+ A7D8AB8623E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
+ A7D88A1923E2437C00DCD162 /* SDL.h in Headers */,
+ A7D8AC7623E2514100DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D88A1A23E2437C00DCD162 /* SDL_assert.h in Headers */,
+ A7D8B3B723E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8B4AD23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8B9F023E2514400DCD162 /* SDL_drawpoint.h in Headers */,
+ A7D8B39F23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B44123E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BA4423E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8AEDD23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8AF0123E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
+ A7D8B2BB23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8BBAC23E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
+ A7D8B2B523E2514200DCD162 /* vulkan_android.h in Headers */,
+ A7D88A1B23E2437C00DCD162 /* SDL_atomic.h in Headers */,
+ A7D8B9A223E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
+ A7D8BA0E23E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8B3E723E2514300DCD162 /* SDL_systhread.h in Headers */,
+ A7D8B1B923E2514200DCD162 /* SDL_x11modes.h in Headers */,
+ A7D88A1D23E2437C00DCD162 /* SDL_audio.h in Headers */,
+ A7D8B8CD23E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8AC4023E2514100DCD162 /* SDL_sysvideo.h in Headers */,
+ A7D8AEBF23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
+ A7D8B4C523E2514300DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D88A1E23E2437C00DCD162 /* SDL_bits.h in Headers */,
+ A7D8B21F23E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B9FC23E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
+ A7D8B14723E2514200DCD162 /* SDL_x11touch.h in Headers */,
+ A7D88A1F23E2437C00DCD162 /* SDL_blendmode.h in Headers */,
+ A7D88A2023E2437C00DCD162 /* SDL_egl.h in Headers */,
+ A7D88A2123E2437C00DCD162 /* SDL_clipboard.h in Headers */,
+ A7D8BAC223E2514500DCD162 /* math_private.h in Headers */,
+ A7D88A2323E2437C00DCD162 /* SDL_config.h in Headers */,
+ A7D8BB3A23E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8ACB223E2514100DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B9CC23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
+ A7D88A2523E2437C00DCD162 /* SDL_copying.h in Headers */,
+ A7D8AB8023E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8AEF523E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8ABFE23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
+ A7D8AC6A23E2514100DCD162 /* SDL_uikitmodes.h in Headers */,
+ A7D88A2623E2437C00DCD162 /* SDL_cpuinfo.h in Headers */,
+ A7D8BA5623E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B8A323E2514400DCD162 /* SDL_diskaudio.h in Headers */,
+ A7D8B9D823E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BB2223E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8ADED23E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B20D23E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
+ A7D8B61823E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8BA3223E2514400DCD162 /* SDL_rotate.h in Headers */,
+ A7D8BA0823E2514400DCD162 /* SDL_drawline.h in Headers */,
+ A7D8B1E923E2514200DCD162 /* SDL_x11window.h in Headers */,
+ A7D8AB7A23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8B1EF23E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8BB8823E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
+ A7D88A2723E2437C00DCD162 /* SDL_endian.h in Headers */,
+ A7D8AB0B23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8AB6E23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
+ A7D88A2823E2437C00DCD162 /* SDL_error.h in Headers */,
+ A7D8ACA023E2514100DCD162 /* keyinfotable.h in Headers */,
+ A7D8B26123E2514200DCD162 /* vulkan.h in Headers */,
+ A7D88A2923E2437C00DCD162 /* SDL_events.h in Headers */,
+ A7D8BBA623E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8B23D23E2514200DCD162 /* egl.h in Headers */,
+ A7D8ABDA23E2514100DCD162 /* SDL_egl_c.h in Headers */,
+ A7D8A98E23E2514000DCD162 /* SDL_sensor_c.h in Headers */,
+ A7D88A2A23E2437C00DCD162 /* SDL_filesystem.h in Headers */,
+ A7D8B27F23E2514200DCD162 /* vulkan_win32.h in Headers */,
+ A7D88A2B23E2437C00DCD162 /* SDL_gamecontroller.h in Headers */,
+ A7D8B79523E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8B26723E2514200DCD162 /* vk_platform.h in Headers */,
+ A7D88A2C23E2437C00DCD162 /* SDL_gesture.h in Headers */,
+ A7D88A2D23E2437C00DCD162 /* SDL_haptic.h in Headers */,
+ A7D8BB4623E2514500DCD162 /* blank_cursor.h in Headers */,
+ A7D8BB5E23E2514500DCD162 /* scancodes_linux.h in Headers */,
+ A7D88A2E23E2437C00DCD162 /* SDL_hints.h in Headers */,
+ A7D8B2A323E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8ACBE23E2514100DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8B98123E2514400DCD162 /* SDL_d3dmath.h in Headers */,
+ A7D88A2F23E2437C00DCD162 /* SDL_joystick.h in Headers */,
+ A7D8B5B823E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8AEEF23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8AECB23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEFB23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
+ A7D88A3023E2437C00DCD162 /* SDL_keyboard.h in Headers */,
+ A7D8B22523E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8B3CF23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
+ A7D88A3123E2437C00DCD162 /* SDL_sensor.h in Headers */,
+ A7D88A3223E2437C00DCD162 /* SDL_metal.h in Headers */,
+ A7D88A3323E2437C00DCD162 /* SDL_keycode.h in Headers */,
+ A7D8BB4023E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
+ A7D88A3523E2437C00DCD162 /* SDL_loadso.h in Headers */,
+ A7D8B23123E2514200DCD162 /* gl2platform.h in Headers */,
+ A7D8AAD523E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8B57C23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D8B1AD23E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B86D23E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8B1FB23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8B25B23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B14D23E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
+ A7D88A3623E2437C00DCD162 /* SDL_log.h in Headers */,
+ A7D8BB4C23E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8AEB323E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8B3D523E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B1D123E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B25523E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8B2AF23E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB2E23E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8B61223E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8ACE223E2514100DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8BB6423E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B29D23E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8AE8323E2514100DCD162 /* SDL_cocoashape.h in Headers */,
+ A7D88A3823E2437C00DCD162 /* SDL_main.h in Headers */,
+ A7D8ABE623E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
+ A7D8AC7C23E2514100DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D88A3923E2437C00DCD162 /* SDL_messagebox.h in Headers */,
+ A7D8B28523E2514200DCD162 /* vulkan_macos.h in Headers */,
+ A7D88A3A23E2437C00DCD162 /* SDL_mouse.h in Headers */,
+ A7D88A3B23E2437C00DCD162 /* SDL_mutex.h in Headers */,
+ A7D8AC5E23E2514100DCD162 /* SDL_uikitmetalview.h in Headers */,
+ A7D8B58823E2514300DCD162 /* SDL_joystick_c.h in Headers */,
+ A7D88A3C23E2437C00DCD162 /* SDL_name.h in Headers */,
+ A7D8A97023E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
+ A75FDBC623EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8B98D23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AF1323E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8BA7423E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
+ A7D8AC4623E2514100DCD162 /* SDL_uikitview.h in Headers */,
+ A7D88A3D23E2437C00DCD162 /* SDL_opengl.h in Headers */,
+ A7D8AC0423E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8A97C23E2514000DCD162 /* SDL_syssensor.h in Headers */,
+ A7D88A3E23E2437C00DCD162 /* SDL_opengl_glext.h in Headers */,
+ A7D88A3F23E2437C00DCD162 /* SDL_opengles.h in Headers */,
+ A7D8B58223E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
+ A7D88A4023E2437C00DCD162 /* SDL_opengles2.h in Headers */,
+ A7D8A94623E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8B24F23E2514200DCD162 /* vk_layer.h in Headers */,
+ A7D88A4123E2437C00DCD162 /* SDL_opengles2_gl2.h in Headers */,
+ A7D8BBA023E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8AF1F23E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
+ A7D8AE8F23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8BA5023E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
+ A7D88A4223E2437C00DCD162 /* SDL_opengles2_gl2ext.h in Headers */,
+ A7D8B29723E2514200DCD162 /* vulkan_mir.h in Headers */,
+ A7D88A4323E2437C00DCD162 /* SDL_opengles2_gl2platform.h in Headers */,
+ A7D8BA1A23E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BB5223E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8BB9423E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8B7A123E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8B17123E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8B29123E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8AAE123E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8BB1C23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8BA0223E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
+ A7D8B27923E2514200DCD162 /* vulkan_wayland.h in Headers */,
+ A7D8B5C423E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
+ A7D88A4423E2437C00DCD162 /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8B23723E2514200DCD162 /* khrplatform.h in Headers */,
+ A7D88A4523E2437C00DCD162 /* SDL_pixels.h in Headers */,
+ A7D8ABF823E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B57023E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8B7B323E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
+ A7D88A4623E2437C00DCD162 /* SDL_platform.h in Headers */,
+ A7D88A4723E2437C00DCD162 /* SDL_power.h in Headers */,
+ A7D8AC9A23E2514100DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D88A4823E2437C00DCD162 /* SDL_quit.h in Headers */,
+ A7D8AB1123E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
+ A7D88A4923E2437C00DCD162 /* SDL_rect.h in Headers */,
+ A7D8B27323E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
+ A7D8B28B23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8B5D623E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D88A4B23E2437C00DCD162 /* SDL_render.h in Headers */,
+ A7D8B26D23E2514200DCD162 /* vulkan.hpp in Headers */,
+ A7D88A4C23E2437C00DCD162 /* SDL_revision.h in Headers */,
+ A7D8AB3223E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B16523E2514200DCD162 /* SDL_x11shape.h in Headers */,
+ A7D8AB1D23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8BB0423E2514500DCD162 /* math_libm.h in Headers */,
+ A7D88A4D23E2437C00DCD162 /* SDL_rwops.h in Headers */,
+ A7D8B3C923E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8AF0723E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B1D723E2514200DCD162 /* edid.h in Headers */,
+ A7D88A4E23E2437C00DCD162 /* SDL_scancode.h in Headers */,
+ A7D8B39923E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B22B23E2514200DCD162 /* gl2.h in Headers */,
+ A7D88A5023E2437C00DCD162 /* SDL_shape.h in Headers */,
+ A7D88A5123E2437C00DCD162 /* SDL_stdinc.h in Headers */,
+ A7D8ACCA23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */,
+ A7D8BBB823E254E400DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D8B3B123E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8B1F523E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8AC8823E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */,
+ A7D8AC0A23E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8A95E23E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B2A923E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8B3ED23E2514300DCD162 /* SDL_thread_c.h in Headers */,
+ A7D88A5223E2437C00DCD162 /* SDL_surface.h in Headers */,
+ A7D8BB7023E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8AB5C23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8AEE923E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
+ A7D88A5323E2437C00DCD162 /* SDL_system.h in Headers */,
+ A7D8BA7A23E2514400DCD162 /* SDL_glfuncs.h in Headers */,
+ A7D8B2C123E2514200DCD162 /* SDL_pixels_c.h in Headers */,
+ A7D88A5423E2437C00DCD162 /* SDL_syswm.h in Headers */,
+ A7D88A5523E2437C00DCD162 /* SDL_thread.h in Headers */,
+ A7D8ACD623E2514100DCD162 /* SDL_uikitopengles.h in Headers */,
+ A7D88A5623E2437C00DCD162 /* SDL_timer.h in Headers */,
+ A7D8B21323E2514200DCD162 /* SDL_x11events.h in Headers */,
+ A7D88A5723E2437C00DCD162 /* SDL_touch.h in Headers */,
+ A7D8A96423E2514000DCD162 /* SDL_dummysensor.h in Headers */,
+ A7D88A5823E2437C00DCD162 /* SDL_types.h in Headers */,
+ A7D8B42923E2514300DCD162 /* SDL_systhread_c.h in Headers */,
+ A7D8B20723E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8B94B23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8AD1E23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
+ A7D8B9EA23E2514400DCD162 /* SDL_blendline.h in Headers */,
+ A7D88A5923E2437C00DCD162 /* SDL_version.h in Headers */,
+ A7D88A5A23E2437C00DCD162 /* SDL_video.h in Headers */,
+ A7D8B24923E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8AC9423E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */,
+ A7D8B1DD23E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
+ A7D8B55823E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B21923E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8B1B323E2514200DCD162 /* SDL_x11opengl.h in Headers */,
+ A7D88A5C23E2437C00DCD162 /* SDL_vulkan.h in Headers */,
+ A7D8B99C23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8A99A23E2514000DCD162 /* SDL_internal.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88BCA23E24BED00DCD162 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDAF723E35EC400529352 /* SDL_config_iphoneos.h in Headers */,
+ A7D88BCC23E24BED00DCD162 /* begin_code.h in Headers */,
+ A75FDB5A23E39E6100529352 /* hidapi.h in Headers */,
+ A7D8B24423E2514200DCD162 /* eglext.h in Headers */,
+ A7D8AABE23E2514100DCD162 /* SDL_haptic_c.h in Headers */,
+ A7D88BCE23E24BED00DCD162 /* close_code.h in Headers */,
+ A7D8B85C23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
+ A7D8AB8723E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
+ A7D88BCF23E24BED00DCD162 /* SDL.h in Headers */,
+ A7D8AC7723E2514100DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D88BD023E24BED00DCD162 /* SDL_assert.h in Headers */,
+ A7D8B3B823E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8B4AE23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8B9F123E2514400DCD162 /* SDL_drawpoint.h in Headers */,
+ A7D8B3A023E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B44223E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BA4523E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8AEDE23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8AF0223E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
+ A7D8B2BC23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8BBAD23E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
+ A7D8B2B623E2514200DCD162 /* vulkan_android.h in Headers */,
+ A7D88BD123E24BED00DCD162 /* SDL_atomic.h in Headers */,
+ A7D8B9A323E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
+ A7D8BA0F23E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8B3E823E2514300DCD162 /* SDL_systhread.h in Headers */,
+ A7D8B1BA23E2514200DCD162 /* SDL_x11modes.h in Headers */,
+ A7D88BD423E24BED00DCD162 /* SDL_audio.h in Headers */,
+ A7D8B8CE23E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8AC4123E2514100DCD162 /* SDL_sysvideo.h in Headers */,
+ A7D8AEC023E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
+ A7D8B4C623E2514300DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D88BD523E24BED00DCD162 /* SDL_bits.h in Headers */,
+ A7D8B22023E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B9FD23E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
+ A7D8B14823E2514200DCD162 /* SDL_x11touch.h in Headers */,
+ A7D88BD623E24BED00DCD162 /* SDL_blendmode.h in Headers */,
+ A7D88BD723E24BED00DCD162 /* SDL_egl.h in Headers */,
+ A7D88BD823E24BED00DCD162 /* SDL_clipboard.h in Headers */,
+ A7D8BAC323E2514500DCD162 /* math_private.h in Headers */,
+ A7D88BDA23E24BED00DCD162 /* SDL_config.h in Headers */,
+ A7D8BB3B23E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8ACB323E2514100DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B9CD23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
+ A7D88BDC23E24BED00DCD162 /* SDL_copying.h in Headers */,
+ A7D8AB8123E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8AEF623E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8ABFF23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
+ A7D8AC6B23E2514100DCD162 /* SDL_uikitmodes.h in Headers */,
+ A7D88BDD23E24BED00DCD162 /* SDL_cpuinfo.h in Headers */,
+ A7D8BA5723E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B8A423E2514400DCD162 /* SDL_diskaudio.h in Headers */,
+ A7D8B9D923E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BB2323E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8ADEE23E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B20E23E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
+ A7D8B61923E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8BA3323E2514400DCD162 /* SDL_rotate.h in Headers */,
+ A7D8BA0923E2514400DCD162 /* SDL_drawline.h in Headers */,
+ A7D8B1EA23E2514200DCD162 /* SDL_x11window.h in Headers */,
+ A7D8AB7B23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8B1F023E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8BB8923E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
+ A7D88BDE23E24BED00DCD162 /* SDL_endian.h in Headers */,
+ A7D8AB0C23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8AB6F23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
+ A7D88BDF23E24BED00DCD162 /* SDL_error.h in Headers */,
+ A7D8ACA123E2514100DCD162 /* keyinfotable.h in Headers */,
+ A7D8B26223E2514200DCD162 /* vulkan.h in Headers */,
+ A7D88BE023E24BED00DCD162 /* SDL_events.h in Headers */,
+ A7D8BBA723E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8B23E23E2514200DCD162 /* egl.h in Headers */,
+ A7D8ABDB23E2514100DCD162 /* SDL_egl_c.h in Headers */,
+ A7D8A98F23E2514000DCD162 /* SDL_sensor_c.h in Headers */,
+ A7D88BE123E24BED00DCD162 /* SDL_filesystem.h in Headers */,
+ A7D8B28023E2514200DCD162 /* vulkan_win32.h in Headers */,
+ A7D88BE223E24BED00DCD162 /* SDL_gamecontroller.h in Headers */,
+ A7D8B79623E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8B26823E2514200DCD162 /* vk_platform.h in Headers */,
+ A7D88BE323E24BED00DCD162 /* SDL_gesture.h in Headers */,
+ A7D88BE423E24BED00DCD162 /* SDL_haptic.h in Headers */,
+ A7D8BB4723E2514500DCD162 /* blank_cursor.h in Headers */,
+ A7D8BB5F23E2514500DCD162 /* scancodes_linux.h in Headers */,
+ A7D88BE523E24BED00DCD162 /* SDL_hints.h in Headers */,
+ A7D8B2A423E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8ACBF23E2514100DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8B98223E2514400DCD162 /* SDL_d3dmath.h in Headers */,
+ A7D8B4EA23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D88BE623E24BED00DCD162 /* SDL_joystick.h in Headers */,
+ A7D8B5B923E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8AEF023E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8AECC23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEFC23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
+ A7D88BE723E24BED00DCD162 /* SDL_keyboard.h in Headers */,
+ A7D8B22623E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8B3D023E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
+ A7D88BE923E24BED00DCD162 /* SDL_sensor.h in Headers */,
+ A7D88BEA23E24BED00DCD162 /* SDL_metal.h in Headers */,
+ A7D88BEB23E24BED00DCD162 /* SDL_keycode.h in Headers */,
+ A7D8BB4123E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
+ A7D88BED23E24BED00DCD162 /* SDL_loadso.h in Headers */,
+ A7D8B23223E2514200DCD162 /* gl2platform.h in Headers */,
+ A7D8AAD623E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8B57D23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D8B1AE23E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B86E23E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8B1FC23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8B25C23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B14E23E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
+ A7D88BEF23E24BED00DCD162 /* SDL_log.h in Headers */,
+ A7D8BB4D23E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8AEB423E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8B3D623E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B1D223E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B25623E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8B2B023E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB2F23E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8B61323E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8ACE323E2514100DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8BB6523E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B29E23E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8AE8423E2514100DCD162 /* SDL_cocoashape.h in Headers */,
+ A7D88BF123E24BED00DCD162 /* SDL_main.h in Headers */,
+ A7D8ABE723E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
+ A7D8AC7D23E2514100DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D88BF223E24BED00DCD162 /* SDL_messagebox.h in Headers */,
+ A7D8B28623E2514200DCD162 /* vulkan_macos.h in Headers */,
+ A7D88BF323E24BED00DCD162 /* SDL_mouse.h in Headers */,
+ A7D88BF423E24BED00DCD162 /* SDL_mutex.h in Headers */,
+ A7D8AC5F23E2514100DCD162 /* SDL_uikitmetalview.h in Headers */,
+ A7D8B58923E2514300DCD162 /* SDL_joystick_c.h in Headers */,
+ A7D88BF523E24BED00DCD162 /* SDL_name.h in Headers */,
+ A75FDBC723EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8A97123E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
+ A7D8B98E23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AF1423E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8BA7523E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
+ A7D8AC4723E2514100DCD162 /* SDL_uikitview.h in Headers */,
+ A7D88BF623E24BED00DCD162 /* SDL_opengl.h in Headers */,
+ A7D8AC0523E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8A97D23E2514000DCD162 /* SDL_syssensor.h in Headers */,
+ A7D88BF723E24BED00DCD162 /* SDL_opengl_glext.h in Headers */,
+ A7D88BF823E24BED00DCD162 /* SDL_opengles.h in Headers */,
+ A7D8B58323E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
+ A7D88BF923E24BED00DCD162 /* SDL_opengles2.h in Headers */,
+ A7D8A94723E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8B25023E2514200DCD162 /* vk_layer.h in Headers */,
+ A7D88BFA23E24BED00DCD162 /* SDL_opengles2_gl2.h in Headers */,
+ A7D8BBA123E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8AF2023E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
+ A7D8AE9023E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8BA5123E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
+ A7D88BFB23E24BED00DCD162 /* SDL_opengles2_gl2ext.h in Headers */,
+ A7D8B29823E2514200DCD162 /* vulkan_mir.h in Headers */,
+ A7D88BFC23E24BED00DCD162 /* SDL_opengles2_gl2platform.h in Headers */,
+ A7D8BA1B23E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BB5323E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8BB9523E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8B7A223E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8B17223E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8B29223E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8AAE223E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8BB1D23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8BA0323E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
+ A7D8B27A23E2514200DCD162 /* vulkan_wayland.h in Headers */,
+ A7D8B5C523E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
+ A7D88BFD23E24BED00DCD162 /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8B23823E2514200DCD162 /* khrplatform.h in Headers */,
+ A7D88BFE23E24BED00DCD162 /* SDL_pixels.h in Headers */,
+ A7D8ABF923E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B57123E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8B7B423E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
+ A7D88BFF23E24BED00DCD162 /* SDL_platform.h in Headers */,
+ A7D88C0023E24BED00DCD162 /* SDL_power.h in Headers */,
+ A7D8AC9B23E2514100DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D88C0123E24BED00DCD162 /* SDL_quit.h in Headers */,
+ A7D8AB1223E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
+ A7D88C0223E24BED00DCD162 /* SDL_rect.h in Headers */,
+ A7D8B27423E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
+ A7D8B28C23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8B5D723E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D88C0423E24BED00DCD162 /* SDL_render.h in Headers */,
+ A7D8B26E23E2514200DCD162 /* vulkan.hpp in Headers */,
+ A7D88C0523E24BED00DCD162 /* SDL_revision.h in Headers */,
+ A7D8AB3323E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B16623E2514200DCD162 /* SDL_x11shape.h in Headers */,
+ A7D8AB1E23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8BB0523E2514500DCD162 /* math_libm.h in Headers */,
+ A7D88C0723E24BED00DCD162 /* SDL_rwops.h in Headers */,
+ A7D8B3CA23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8AF0823E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B1D823E2514200DCD162 /* edid.h in Headers */,
+ A7D88C0823E24BED00DCD162 /* SDL_scancode.h in Headers */,
+ A7D8B39A23E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B22C23E2514200DCD162 /* gl2.h in Headers */,
+ A7D88C0A23E24BED00DCD162 /* SDL_shape.h in Headers */,
+ A7D88C0C23E24BED00DCD162 /* SDL_stdinc.h in Headers */,
+ A7D8ACCB23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */,
+ A7D8B3B223E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8B1F623E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8AC8923E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */,
+ A7D8AC0B23E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8A95F23E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B2AA23E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8B3EE23E2514300DCD162 /* SDL_thread_c.h in Headers */,
+ A7D88C0D23E24BED00DCD162 /* SDL_surface.h in Headers */,
+ A7D8BB7123E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8AB5D23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8AEEA23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
+ A7D88C0E23E24BED00DCD162 /* SDL_system.h in Headers */,
+ A7D8BA7B23E2514400DCD162 /* SDL_glfuncs.h in Headers */,
+ A7D8B2C223E2514200DCD162 /* SDL_pixels_c.h in Headers */,
+ A7D88C0F23E24BED00DCD162 /* SDL_syswm.h in Headers */,
+ A7D88C1123E24BED00DCD162 /* SDL_thread.h in Headers */,
+ A7D8ACD723E2514100DCD162 /* SDL_uikitopengles.h in Headers */,
+ A7D88C1223E24BED00DCD162 /* SDL_timer.h in Headers */,
+ A7D8B21423E2514200DCD162 /* SDL_x11events.h in Headers */,
+ A7D88C1423E24BED00DCD162 /* SDL_touch.h in Headers */,
+ A7D8A96523E2514000DCD162 /* SDL_dummysensor.h in Headers */,
+ A7D88C1523E24BED00DCD162 /* SDL_types.h in Headers */,
+ A7D8B42A23E2514300DCD162 /* SDL_systhread_c.h in Headers */,
+ A7D8B20823E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8B94C23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8AD1F23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
+ A7D8B9EB23E2514400DCD162 /* SDL_blendline.h in Headers */,
+ A7D88C1623E24BED00DCD162 /* SDL_version.h in Headers */,
+ A7D88C1723E24BED00DCD162 /* SDL_video.h in Headers */,
+ A7D8B24A23E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8AC9523E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */,
+ A7D8B1DE23E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
+ A7D8B55923E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B21A23E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8B1B423E2514200DCD162 /* SDL_x11opengl.h in Headers */,
+ A7D88C1923E24BED00DCD162 /* SDL_vulkan.h in Headers */,
+ A7D8B99D23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8A99B23E2514000DCD162 /* SDL_internal.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88D1823E24D3B00DCD162 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D8B9A523E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
+ A7D88D1923E24D3B00DCD162 /* SDL_filesystem.h in Headers */,
+ A7D88D1A23E24D3B00DCD162 /* begin_code.h in Headers */,
+ A7D8ACD923E2514100DCD162 /* SDL_uikitopengles.h in Headers */,
+ A7D88D1B23E24D3B00DCD162 /* close_code.h in Headers */,
+ A7D88D1C23E24D3B00DCD162 /* SDL.h in Headers */,
+ A7D8AC6123E2514100DCD162 /* SDL_uikitmetalview.h in Headers */,
+ A7D88D1D23E24D3B00DCD162 /* SDL_assert.h in Headers */,
+ A7D8AC0D23E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8BA7D23E2514400DCD162 /* SDL_glfuncs.h in Headers */,
+ A7D88D1E23E24D3B00DCD162 /* SDL_atomic.h in Headers */,
+ A7D8AC0723E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8B1D423E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B99F23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8B99023E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AB8923E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
+ A7D88D1F23E24D3B00DCD162 /* SDL_audio.h in Headers */,
+ A7D8A97323E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
+ A7D8AC4923E2514100DCD162 /* SDL_uikitview.h in Headers */,
+ A7D88D2023E24D3B00DCD162 /* SDL_bits.h in Headers */,
+ A7D8ACCD23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */,
+ A7D8ACA323E2514100DCD162 /* keyinfotable.h in Headers */,
+ A7D88D2123E24D3B00DCD162 /* SDL_blendmode.h in Headers */,
+ A7D8BB3123E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8AAC023E2514100DCD162 /* SDL_haptic_c.h in Headers */,
+ A7D88D2223E24D3B00DCD162 /* SDL_clipboard.h in Headers */,
+ A7D8A94923E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8A96123E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B21623E2514200DCD162 /* SDL_x11events.h in Headers */,
+ A7D88D2323E24D3B00DCD162 /* SDL_config.h in Headers */,
+ A7D8B98423E2514400DCD162 /* SDL_d3dmath.h in Headers */,
+ A7D8B1EC23E2514200DCD162 /* SDL_x11window.h in Headers */,
+ A7D8ABDD23E2514100DCD162 /* SDL_egl_c.h in Headers */,
+ A7D88D2623E24D3B00DCD162 /* SDL_copying.h in Headers */,
+ A7D8B3D823E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B79823E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8AC9723E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */,
+ A7D8B15023E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
+ A7D8B3F023E2514300DCD162 /* SDL_thread_c.h in Headers */,
+ A7D8AF0A23E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B16823E2514200DCD162 /* SDL_x11shape.h in Headers */,
+ A7D88D2723E24D3B00DCD162 /* SDL_cpuinfo.h in Headers */,
+ A7D88D2823E24D3B00DCD162 /* SDL_endian.h in Headers */,
+ A7D88D2923E24D3B00DCD162 /* SDL_error.h in Headers */,
+ A7D88D2A23E24D3B00DCD162 /* SDL_events.h in Headers */,
+ A7D8BA0523E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
+ A7D88D2B23E24D3B00DCD162 /* SDL_gamecontroller.h in Headers */,
+ A7D8B55B23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B2C423E2514200DCD162 /* SDL_pixels_c.h in Headers */,
+ A7D8B1BC23E2514200DCD162 /* SDL_x11modes.h in Headers */,
+ A7D8B58B23E2514300DCD162 /* SDL_joystick_c.h in Headers */,
+ A7D8B2B223E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB4923E2514500DCD162 /* blank_cursor.h in Headers */,
+ A75FDB5C23E39E6100529352 /* hidapi.h in Headers */,
+ A7D88D2C23E24D3B00DCD162 /* SDL_gesture.h in Headers */,
+ A75FDBC923EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8B85E23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
+ A7D88D2D23E24D3B00DCD162 /* SDL_haptic.h in Headers */,
+ A7D8BB9723E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8BB0723E2514500DCD162 /* math_libm.h in Headers */,
+ A7D8AC7F23E2514100DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D8AF2223E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
+ A7D88D2E23E24D3B00DCD162 /* SDL_hints.h in Headers */,
+ A7D8ADF023E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B9CF23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
+ A7D8B1B623E2514200DCD162 /* SDL_x11opengl.h in Headers */,
+ A7D8BBAF23E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
+ A7D88D2F23E24D3B00DCD162 /* SDL_joystick.h in Headers */,
+ A7D8AF0423E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
+ A7D88D3023E24D3B00DCD162 /* SDL_keyboard.h in Headers */,
+ A7D8ACC123E2514100DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8BB3D23E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8BA7723E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
+ A7D8B42C23E2514300DCD162 /* SDL_systhread_c.h in Headers */,
+ A7D88D3123E24D3B00DCD162 /* SDL_keycode.h in Headers */,
+ A7D8B20A23E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8AE9223E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8ACE523E2514100DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8B1F223E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8B22223E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B27023E2514200DCD162 /* vulkan.hpp in Headers */,
+ A7D88D3223E24D3B00DCD162 /* SDL_loadso.h in Headers */,
+ A7D8B22823E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8BB7323E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8B14A23E2514200DCD162 /* SDL_x11touch.h in Headers */,
+ A7D8AAE423E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8B94E23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8B7B623E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
+ A7D8B7A423E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8AC6D23E2514100DCD162 /* SDL_uikitmodes.h in Headers */,
+ A7D8B24023E2514200DCD162 /* egl.h in Headers */,
+ A7D8B23A23E2514200DCD162 /* khrplatform.h in Headers */,
+ A7D88D3323E24D3B00DCD162 /* SDL_log.h in Headers */,
+ A7D8AC8B23E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */,
+ A7D8A96723E2514000DCD162 /* SDL_dummysensor.h in Headers */,
+ A7D8B4C823E2514300DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D8B2B823E2514200DCD162 /* vulkan_android.h in Headers */,
+ A7D8B3D223E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
+ A7D8B2AC23E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8A97F23E2514000DCD162 /* SDL_syssensor.h in Headers */,
+ A7D8AB0E23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8B61B23E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8B8A623E2514400DCD162 /* SDL_diskaudio.h in Headers */,
+ A7D88D3423E24D3B00DCD162 /* SDL_main.h in Headers */,
+ A7D8B9F323E2514400DCD162 /* SDL_drawpoint.h in Headers */,
+ A7D88D3523E24D3B00DCD162 /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8B87023E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8AEE023E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8B3CC23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8B21C23E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8AB5F23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8B1B023E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B8D023E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8BA1D23E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BA0B23E2514400DCD162 /* SDL_drawline.h in Headers */,
+ A7D88D3623E24D3B00DCD162 /* SDL_messagebox.h in Headers */,
+ A7D88D3723E24D3B00DCD162 /* SDL_mouse.h in Headers */,
+ A7D88D3823E24D3B00DCD162 /* SDL_mutex.h in Headers */,
+ A7D8B3B423E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8BBA323E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8B5D923E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A75FDAF823E35ED500529352 /* SDL_config_iphoneos.h in Headers */,
+ A7D8B21023E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
+ A7D88D3923E24D3B00DCD162 /* SDL_name.h in Headers */,
+ A7D8B24623E2514200DCD162 /* eglext.h in Headers */,
+ A7D8BBA923E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8BAC523E2514500DCD162 /* math_private.h in Headers */,
+ A7D8B27C23E2514200DCD162 /* vulkan_wayland.h in Headers */,
+ A7D88D3A23E24D3B00DCD162 /* SDL_opengl.h in Headers */,
+ A7D8AE8623E2514100DCD162 /* SDL_cocoashape.h in Headers */,
+ A7D88D3B23E24D3B00DCD162 /* SDL_opengles.h in Headers */,
+ A7D8BA5323E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
+ A7D88D3D23E24D3B00DCD162 /* SDL_opengles2.h in Headers */,
+ A7D8BA4723E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8BA1123E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8AB7123E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
+ A7D8AC0123E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
+ A7D8B58523E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
+ A7D8BB6123E2514500DCD162 /* scancodes_linux.h in Headers */,
+ A7D8B1F823E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8BB6723E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B4B023E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8AEEC23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
+ A7D8B23423E2514200DCD162 /* gl2platform.h in Headers */,
+ A7D88D3E23E24D3B00DCD162 /* SDL_pixels.h in Headers */,
+ A7D8B25223E2514200DCD162 /* vk_layer.h in Headers */,
+ A7D8AEC223E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
+ A7D8B26A23E2514200DCD162 /* vk_platform.h in Headers */,
+ A7D8AEB623E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8AEF223E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8B3BA23E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8B28E23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8A99123E2514000DCD162 /* SDL_sensor_c.h in Headers */,
+ A7D8B9DB23E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BA3523E2514400DCD162 /* SDL_rotate.h in Headers */,
+ A7D88D3F23E24D3B00DCD162 /* SDL_platform.h in Headers */,
+ A7D88D4023E24D3B00DCD162 /* SDL_power.h in Headers */,
+ A7D8AB7D23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8BB5523E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8B5BB23E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8B17423E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8AC7923E2514100DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D8B2A023E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8AC9D23E2514100DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D8B25E23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B29A23E2514200DCD162 /* vulkan_mir.h in Headers */,
+ A7D88D4123E24D3B00DCD162 /* SDL_quit.h in Headers */,
+ A7D8BB4F23E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8B9FF23E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
+ A7D88D4223E24D3B00DCD162 /* SDL_rect.h in Headers */,
+ A7D88D4323E24D3B00DCD162 /* SDL_render.h in Headers */,
+ A7D8ABFB23E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B39C23E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B3A223E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B24C23E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8B1DA23E2514200DCD162 /* edid.h in Headers */,
+ A7D88D4423E24D3B00DCD162 /* SDL_revision.h in Headers */,
+ A7D8B3EA23E2514300DCD162 /* SDL_systhread.h in Headers */,
+ A7D88D4523E24D3B00DCD162 /* SDL_rwops.h in Headers */,
+ A7D88D4623E24D3B00DCD162 /* SDL_scancode.h in Headers */,
+ A7D8AECE23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEF823E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8ACB523E2514100DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B28223E2514200DCD162 /* vulkan_win32.h in Headers */,
+ A7D8AB8323E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8BB4323E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
+ A7D8AB3523E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B22E23E2514200DCD162 /* gl2.h in Headers */,
+ A7D8B44423E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BB2523E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8B5C723E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
+ A7D8B61523E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8B28823E2514200DCD162 /* vulkan_macos.h in Headers */,
+ A7D8B29423E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8B2A623E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8A99D23E2514000DCD162 /* SDL_internal.h in Headers */,
+ A7D88D4723E24D3B00DCD162 /* SDL_shape.h in Headers */,
+ A7D88D4B23E24D3B00DCD162 /* SDL_stdinc.h in Headers */,
+ A7D88D4C23E24D3B00DCD162 /* SDL_surface.h in Headers */,
+ A7D8B26423E2514200DCD162 /* vulkan.h in Headers */,
+ A7D8BB8B23E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
+ A7D88D4D23E24D3B00DCD162 /* SDL_system.h in Headers */,
+ A7D88D4E23E24D3B00DCD162 /* SDL_syswm.h in Headers */,
+ A7D88D4F23E24D3B00DCD162 /* SDL_opengl_glext.h in Headers */,
+ A7D8BB1F23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8B2BE23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8B9ED23E2514400DCD162 /* SDL_blendline.h in Headers */,
+ A7D8AAD823E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8AD2123E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
+ A7D88D5023E24D3B00DCD162 /* SDL_thread.h in Headers */,
+ A7D8AF1623E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8B25823E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8ABE923E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
+ A7D88D5223E24D3B00DCD162 /* SDL_timer.h in Headers */,
+ A7D8AB2023E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8B27623E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
+ A7D88D5323E24D3B00DCD162 /* SDL_touch.h in Headers */,
+ A7D88D5423E24D3B00DCD162 /* SDL_types.h in Headers */,
+ A7D8B57323E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8B4EC23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D8BA5923E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B57F23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D88D5523E24D3B00DCD162 /* SDL_version.h in Headers */,
+ A7D88D5623E24D3B00DCD162 /* SDL_video.h in Headers */,
+ A7D88D5D23E24D3B00DCD162 /* SDL_opengles2_gl2.h in Headers */,
+ A7D88D7A23E24D3B00DCD162 /* SDL_sensor.h in Headers */,
+ A7D8AC4323E2514100DCD162 /* SDL_sysvideo.h in Headers */,
+ A7D88D8A23E24D3B00DCD162 /* SDL_opengles2_gl2platform.h in Headers */,
+ A7D88DA623E24D3B00DCD162 /* SDL_opengles2_gl2ext.h in Headers */,
+ A7D8B1FE23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8AB1423E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
+ A7D8AEFE23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
+ A7D8B1E023E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
BECDF5FF0761BA81005FE872 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
AA7557FA1595D4D800BBD41B /* begin_code.h in Headers */,
- AADC5A431FDA035D00960936 /* SDL_shaders_metal_osx.h in Headers */,
+ A75FDB5823E39E6100529352 /* hidapi.h in Headers */,
+ A7D8B24223E2514200DCD162 /* eglext.h in Headers */,
+ A7D8AABC23E2514100DCD162 /* SDL_haptic_c.h in Headers */,
AA7557FC1595D4D800BBD41B /* close_code.h in Headers */,
+ A7D8B85A23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
+ A7D8BBE223E2574800DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D8AB8523E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
AA75585E1595D4D800BBD41B /* SDL.h in Headers */,
AA7557FE1595D4D800BBD41B /* SDL_assert.h in Headers */,
+ A7D8B3B623E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8BBE023E2574800DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B4AC23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8B9EF23E2514400DCD162 /* SDL_drawpoint.h in Headers */,
+ A7D8B39E23E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B44023E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BA4323E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8AEDC23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8AF0023E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
+ A7D8B2BA23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8BBAB23E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
+ A7D8B2B423E2514200DCD162 /* vulkan_android.h in Headers */,
AA7558001595D4D800BBD41B /* SDL_atomic.h in Headers */,
- F30D9C87212BC94F0047DF2E /* SDL_syssensor.h in Headers */,
+ A7D8B9A123E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
+ A7D8BA0D23E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8BBE423E2574800DCD162 /* SDL_uikitview.h in Headers */,
+ A7D8B3E623E2514300DCD162 /* SDL_systhread.h in Headers */,
+ A7D8B1B823E2514200DCD162 /* SDL_x11modes.h in Headers */,
AA7558021595D4D800BBD41B /* SDL_audio.h in Headers */,
+ A7D8B8CC23E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8AC3F23E2514100DCD162 /* SDL_sysvideo.h in Headers */,
+ A7D8AEBE23E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */,
+ A7D8B21E23E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B9FB23E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
+ A7D8B14623E2514200DCD162 /* SDL_x11touch.h in Headers */,
AA7558041595D4D800BBD41B /* SDL_blendmode.h in Headers */,
5C2EF7011FC9EF10003F5197 /* SDL_egl.h in Headers */,
AA7558061595D4D800BBD41B /* SDL_clipboard.h in Headers */,
+ A7D8BAC123E2514500DCD162 /* math_private.h in Headers */,
AA7558081595D4D800BBD41B /* SDL_config_macosx.h in Headers */,
AA75580A1595D4D800BBD41B /* SDL_config.h in Headers */,
- 56A670091856545C0007D20F /* SDL_internal.h in Headers */,
+ A7D8BB3923E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8B9CB23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
AA75580C1595D4D800BBD41B /* SDL_copying.h in Headers */,
+ A7D8AB7F23E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8AEF423E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8ABFD23E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
AA75580E1595D4D800BBD41B /* SDL_cpuinfo.h in Headers */,
+ A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B8A223E2514400DCD162 /* SDL_diskaudio.h in Headers */,
+ A7D8B9D723E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BB2123E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8ADEC23E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B20C23E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
+ A7D8B61723E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */,
+ A7D8BA0723E2514400DCD162 /* SDL_drawline.h in Headers */,
+ A7D8B1E823E2514200DCD162 /* SDL_x11window.h in Headers */,
+ A7D8AB7923E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8B1EE23E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8BB8723E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
AA7558101595D4D800BBD41B /* SDL_endian.h in Headers */,
+ A7D8AB0A23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8AB6D23E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
AA7558121595D4D800BBD41B /* SDL_error.h in Headers */,
+ A7D8B26023E2514200DCD162 /* vulkan.h in Headers */,
AA7558141595D4D800BBD41B /* SDL_events.h in Headers */,
+ A7D8BBA523E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8BBD623E2574800DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8B23C23E2514200DCD162 /* egl.h in Headers */,
+ A7D8ABD923E2514100DCD162 /* SDL_egl_c.h in Headers */,
+ A7D8A98D23E2514000DCD162 /* SDL_sensor_c.h in Headers */,
567E2F2117C44C35005F1892 /* SDL_filesystem.h in Headers */,
+ A7D8BBDC23E2574800DCD162 /* SDL_uikitmodes.h in Headers */,
+ A7D8B27E23E2514200DCD162 /* vulkan_win32.h in Headers */,
A77E6EB4167AB0A90010E40B /* SDL_gamecontroller.h in Headers */,
+ A7D8B79423E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8B26623E2514200DCD162 /* vk_platform.h in Headers */,
AA7558161595D4D800BBD41B /* SDL_gesture.h in Headers */,
AA7558181595D4D800BBD41B /* SDL_haptic.h in Headers */,
+ A7D8BB4523E2514500DCD162 /* blank_cursor.h in Headers */,
+ A7D8BB5D23E2514500DCD162 /* scancodes_linux.h in Headers */,
AA75581A1595D4D800BBD41B /* SDL_hints.h in Headers */,
+ A7D8B2A223E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8B98023E2514400DCD162 /* SDL_d3dmath.h in Headers */,
AA75581E1595D4D800BBD41B /* SDL_joystick.h in Headers */,
+ A7D8B5B723E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8AEEE23E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8AECA23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEFA23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
AA7558201595D4D800BBD41B /* SDL_keyboard.h in Headers */,
+ A7D8B22423E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8B3CE23E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
F3950CD8212BC88D00F51292 /* SDL_sensor.h in Headers */,
+ A7D8BBDE23E2574800DCD162 /* SDL_uikitopengles.h in Headers */,
+ FA24348B21D41FFB00B8918A /* SDL_metal.h in Headers */,
AA7558221595D4D800BBD41B /* SDL_keycode.h in Headers */,
- F30D9C84212BC94F0047DF2E /* SDL_sensor_c.h in Headers */,
+ A7D8BB3F23E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
AA7558241595D4D800BBD41B /* SDL_loadso.h in Headers */,
+ A7D8B23023E2514200DCD162 /* gl2platform.h in Headers */,
+ A7D8AAD423E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8B57B23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
+ A7D8BBC723E2561500DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D8B1AC23E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B86C23E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8B1FA23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8B25A23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B14C23E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
AA7558261595D4D800BBD41B /* SDL_log.h in Headers */,
- 5C2EF6F91FC9EE35003F5197 /* SDL_egl_c.h in Headers */,
+ A7D8BB4B23E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8AEB223E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8B3D423E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B1D023E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B25423E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8B2AE23E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB2D23E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8BBE823E2574800DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8B61123E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8BB6323E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B29C23E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8BBD123E2574800DCD162 /* keyinfotable.h in Headers */,
+ A7D8AE8223E2514100DCD162 /* SDL_cocoashape.h in Headers */,
AA7558281595D4D800BBD41B /* SDL_main.h in Headers */,
+ A7D8ABE523E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
AA9FF95A1637CBF9000DF050 /* SDL_messagebox.h in Headers */,
+ A7D8B28423E2514200DCD162 /* vulkan_macos.h in Headers */,
AA75582A1595D4D800BBD41B /* SDL_mouse.h in Headers */,
AA75582C1595D4D800BBD41B /* SDL_mutex.h in Headers */,
+ A7D8BBDA23E2574800DCD162 /* SDL_uikitmetalview.h in Headers */,
+ A7D8B58723E2514300DCD162 /* SDL_joystick_c.h in Headers */,
AA75582E1595D4D800BBD41B /* SDL_name.h in Headers */,
+ A7D8A96F23E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
+ A7D8B98C23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AF1223E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8BA7323E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
AA7558301595D4D800BBD41B /* SDL_opengl.h in Headers */,
+ A7D8AC0323E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8A97B23E2514000DCD162 /* SDL_syssensor.h in Headers */,
AAC070F9195606770073DCDF /* SDL_opengl_glext.h in Headers */,
AA7558321595D4D800BBD41B /* SDL_opengles.h in Headers */,
+ A7D8B58123E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
AA7558341595D4D800BBD41B /* SDL_opengles2.h in Headers */,
+ A7D8A94523E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8B24E23E2514200DCD162 /* vk_layer.h in Headers */,
AAC070FC195606770073DCDF /* SDL_opengles2_gl2.h in Headers */,
+ A7D8BB9F23E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8BBE623E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */,
+ A7D8AF1E23E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
+ A7D8BBEA23E2574800DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D8AE8E23E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
AAC070FF195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */,
+ A7D8B29623E2514200DCD162 /* vulkan_mir.h in Headers */,
AAC07102195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */,
+ A7D8BA1923E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BB5123E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8BB9323E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8B7A023E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8B17023E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8B29023E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8AAE023E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8BBD223E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */,
+ A7D8BB1B23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8BA0123E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
+ A7D8B27823E2514200DCD162 /* vulkan_wayland.h in Headers */,
+ A7D8B5C323E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
AAC07105195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8B23623E2514200DCD162 /* khrplatform.h in Headers */,
AA7558361595D4D800BBD41B /* SDL_pixels.h in Headers */,
+ A7D8ABF723E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B56F23E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8B7B223E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
AA7558381595D4D800BBD41B /* SDL_platform.h in Headers */,
AA75583A1595D4D800BBD41B /* SDL_power.h in Headers */,
AA75583C1595D4D800BBD41B /* SDL_quit.h in Headers */,
+ A7D8AB1023E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
AA75583E1595D4D800BBD41B /* SDL_rect.h in Headers */,
- 5C2EF69F1FC987C6003F5197 /* SDL_gles2funcs.h in Headers */,
+ A7D8B27223E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
+ A7D8B28A23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8B5D523E2514300DCD162 /* SDL_syspower.h in Headers */,
AA7558401595D4D800BBD41B /* SDL_render.h in Headers */,
+ A7D8B26C23E2514200DCD162 /* vulkan.hpp in Headers */,
AA7558421595D4D800BBD41B /* SDL_revision.h in Headers */,
+ A7D8AB3123E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B16423E2514200DCD162 /* SDL_x11shape.h in Headers */,
+ A7D8AB1C23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8BB0323E2514500DCD162 /* math_libm.h in Headers */,
AA7558441595D4D800BBD41B /* SDL_rwops.h in Headers */,
+ A7D8B3C823E2514200DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8AF0623E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B1D623E2514200DCD162 /* edid.h in Headers */,
AA7558461595D4D800BBD41B /* SDL_scancode.h in Headers */,
- A704171720F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B39823E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B22A23E2514200DCD162 /* gl2.h in Headers */,
+ A7D8BBD823E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */,
AA7558481595D4D800BBD41B /* SDL_shape.h in Headers */,
AA75584A1595D4D800BBD41B /* SDL_stdinc.h in Headers */,
+ A7D8B3B023E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8B1F423E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8AC0923E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8A95D23E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B2A823E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8B3EC23E2514300DCD162 /* SDL_thread_c.h in Headers */,
AA75584C1595D4D800BBD41B /* SDL_surface.h in Headers */,
+ A7D8BB6F23E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8BBD423E2574800DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D8AB5B23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8AEE823E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
AA75584E1595D4D800BBD41B /* SDL_system.h in Headers */,
+ A7D8BA7923E2514400DCD162 /* SDL_glfuncs.h in Headers */,
+ A7D8B2C023E2514200DCD162 /* SDL_pixels_c.h in Headers */,
AA7558501595D4D800BBD41B /* SDL_syswm.h in Headers */,
AA7558521595D4D800BBD41B /* SDL_thread.h in Headers */,
AA7558541595D4D800BBD41B /* SDL_timer.h in Headers */,
+ A75FDBC523EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8B21223E2514200DCD162 /* SDL_x11events.h in Headers */,
AA7558561595D4D800BBD41B /* SDL_touch.h in Headers */,
+ A7D8A96323E2514000DCD162 /* SDL_dummysensor.h in Headers */,
AA7558581595D4D800BBD41B /* SDL_types.h in Headers */,
+ A7D8B42823E2514300DCD162 /* SDL_systhread_c.h in Headers */,
+ A7D8B20623E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8B94A23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8AD1D23E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
+ A7D8B9E923E2514400DCD162 /* SDL_blendline.h in Headers */,
AA75585A1595D4D800BBD41B /* SDL_version.h in Headers */,
AA75585C1595D4D800BBD41B /* SDL_video.h in Headers */,
- 5C2EF6A11FC987C6003F5197 /* SDL_shaders_gles2.h in Headers */,
+ A7D8B24823E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8B1DC23E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
+ A7D8B55723E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B21823E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8B1B223E2514200DCD162 /* SDL_x11opengl.h in Headers */,
AA8167541F5E727800518735 /* SDL_vulkan.h in Headers */,
- 4D7517291EE2562B00820EEA /* SDL_cocoametalview.h in Headers */,
- 04BD000912E6671800899322 /* SDL_diskaudio.h in Headers */,
- 04BD001112E6671800899322 /* SDL_dummyaudio.h in Headers */,
- 04BD001912E6671800899322 /* SDL_coreaudio.h in Headers */,
- 04BD002712E6671800899322 /* SDL_audio_c.h in Headers */,
- 04BD002A12E6671800899322 /* SDL_audiodev_c.h in Headers */,
- 04BD003412E6671800899322 /* SDL_sysaudio.h in Headers */,
- 04BD003612E6671800899322 /* SDL_wave.h in Headers */,
- 04BD004212E6671800899322 /* blank_cursor.h in Headers */,
- 04BD004312E6671800899322 /* default_cursor.h in Headers */,
- 04BD004412E6671800899322 /* scancodes_darwin.h in Headers */,
- 04BD004512E6671800899322 /* scancodes_linux.h in Headers */,
- 04BD004712E6671800899322 /* scancodes_xfree86.h in Headers */,
- 04BD004912E6671800899322 /* SDL_clipboardevents_c.h in Headers */,
- 56A6702A185654B40007D20F /* SDL_dynapi_overrides.h in Headers */,
- 04BD004B12E6671800899322 /* SDL_events_c.h in Headers */,
- 04BD004D12E6671800899322 /* SDL_gesture_c.h in Headers */,
- 04BD004F12E6671800899322 /* SDL_keyboard_c.h in Headers */,
- AA9A7F111FB0206400FED37F /* yuv_rgb.h in Headers */,
- 04BD005112E6671800899322 /* SDL_mouse_c.h in Headers */,
- 04BD005312E6671800899322 /* SDL_sysevents.h in Headers */,
- 04BD005512E6671800899322 /* SDL_touch_c.h in Headers */,
- 04BD005712E6671800899322 /* SDL_windowevents_c.h in Headers */,
- 04BD005812E6671800899322 /* SDL_rwopsbundlesupport.h in Headers */,
- 04BD006012E6671800899322 /* SDL_haptic_c.h in Headers */,
- 04BD006112E6671800899322 /* SDL_syshaptic.h in Headers */,
- 04BD006712E6671800899322 /* SDL_sysjoystick_c.h in Headers */,
- 04BD007112E6671800899322 /* SDL_joystick_c.h in Headers */,
- 04BD007212E6671800899322 /* SDL_sysjoystick.h in Headers */,
- 04BD009B12E6671800899322 /* SDL_assert_c.h in Headers */,
- 04BD009E12E6671800899322 /* SDL_error_c.h in Headers */,
- 04BD00BF12E6671800899322 /* SDL_sysmutex_c.h in Headers */,
- 04BD00C212E6671800899322 /* SDL_systhread_c.h in Headers */,
- 04BD00C912E6671800899322 /* SDL_systhread.h in Headers */,
- 04BD00CB12E6671800899322 /* SDL_thread_c.h in Headers */,
- 04BD00D812E6671800899322 /* SDL_timer_c.h in Headers */,
- 04BD00F312E6671800899322 /* SDL_cocoaclipboard.h in Headers */,
- 4D1664541EDD60AD003DE88E /* SDL_cocoavulkan.h in Headers */,
- 04BD00F512E6671800899322 /* SDL_cocoaevents.h in Headers */,
- 04BD00F712E6671800899322 /* SDL_cocoakeyboard.h in Headers */,
- 5C2EF6EF1FC9D0ED003F5197 /* SDL_cocoaopengles.h in Headers */,
- 04BD00F912E6671800899322 /* SDL_cocoamodes.h in Headers */,
- 04BD00FB12E6671800899322 /* SDL_cocoamouse.h in Headers */,
- 04BD00FD12E6671800899322 /* SDL_cocoaopengl.h in Headers */,
- 04BD00FF12E6671800899322 /* SDL_cocoashape.h in Headers */,
- 56115BBC1DF72C6D00F47E1E /* SDL_dataqueue.h in Headers */,
- 04BD010112E6671800899322 /* SDL_cocoavideo.h in Headers */,
- 04BD010312E6671800899322 /* SDL_cocoawindow.h in Headers */,
- 5C2EF6F71FC9EE35003F5197 /* SDL_rect_c.h in Headers */,
- 04BD011812E6671800899322 /* SDL_nullevents_c.h in Headers */,
- 04BD011C12E6671800899322 /* SDL_nullvideo.h in Headers */,
- 04BD017612E6671800899322 /* SDL_blit.h in Headers */,
- 04BD017B12E6671800899322 /* SDL_blit_auto.h in Headers */,
- 04BD017D12E6671800899322 /* SDL_blit_copy.h in Headers */,
- 04BD018012E6671800899322 /* SDL_blit_slow.h in Headers */,
- 04BD018D12E6671800899322 /* SDL_pixels_c.h in Headers */,
- 04BD019712E6671800899322 /* SDL_RLEaccel_c.h in Headers */,
- 04BD019912E6671800899322 /* SDL_shape_internals.h in Headers */,
- 04BD019C12E6671800899322 /* SDL_sysvideo.h in Headers */,
- 04BD01DC12E6671800899322 /* imKStoUCS.h in Headers */,
- F30D9CCD212EB4810047DF2E /* SDL_displayevents_c.h in Headers */,
- 4D16644E1EDD6023003DE88E /* SDL_vulkan_internal.h in Headers */,
- 04BD01DE12E6671800899322 /* SDL_x11clipboard.h in Headers */,
- 04BD01E012E6671800899322 /* SDL_x11dyn.h in Headers */,
- 04BD01E212E6671800899322 /* SDL_x11events.h in Headers */,
- 04BD01E612E6671800899322 /* SDL_x11keyboard.h in Headers */,
- 04BD01E812E6671800899322 /* SDL_x11modes.h in Headers */,
- 04BD01EA12E6671800899322 /* SDL_x11mouse.h in Headers */,
- 04BD01EC12E6671800899322 /* SDL_x11opengl.h in Headers */,
- 04BD01EE12E6671800899322 /* SDL_x11opengles.h in Headers */,
- 04BD01F212E6671800899322 /* SDL_x11shape.h in Headers */,
- 04BD01F312E6671800899322 /* SDL_x11sym.h in Headers */,
- 56A67021185654B40007D20F /* SDL_dynapi_procs.h in Headers */,
- 04BD01F512E6671800899322 /* SDL_x11touch.h in Headers */,
- 04BD01F712E6671800899322 /* SDL_x11video.h in Headers */,
- 04BD01F912E6671800899322 /* SDL_x11window.h in Headers */,
- 041B2CA612FA0D680087D585 /* SDL_sysrender.h in Headers */,
- AA9A7F161FB0209D00FED37F /* SDL_yuv_c.h in Headers */,
- 04409B9312FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */,
- 04F7803912FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */,
- 04F7804A12FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */,
- 04F7804C12FB74A200FC43C0 /* SDL_blendline.h in Headers */,
- 04F7804E12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */,
- 56A67027185654B40007D20F /* SDL_dynapi.h in Headers */,
- 04F7804F12FB74A200FC43C0 /* SDL_draw.h in Headers */,
- F30D9C90212CABDC0047DF2E /* SDL_dummysensor.h in Headers */,
- 04F7805112FB74A200FC43C0 /* SDL_drawline.h in Headers */,
- 04F7805312FB74A200FC43C0 /* SDL_drawpoint.h in Headers */,
- 0442EC1C12FE1BCB004C9285 /* SDL_render_sw_c.h in Headers */,
- 0442EC5B12FE1C60004C9285 /* SDL_x11framebuffer.h in Headers */,
- 04043BBB12FEB1BE0076DB1F /* SDL_glfuncs.h in Headers */,
- 0435673F1303160F00BA5428 /* SDL_shaders_gl.h in Headers */,
- 566CDE8F148F0AC200C5A9BB /* SDL_dropevents_c.h in Headers */,
- AA628ACC159367B7005138DD /* SDL_rotate.h in Headers */,
- AA628AD3159367F2005138DD /* SDL_x11xinput2.h in Headers */,
- AABCC38D164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */,
- D55A1B81179F262300625D7C /* SDL_cocoamousetap.h in Headers */,
+ A7D8B99B23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8A99923E2514000DCD162 /* SDL_internal.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2184,169 +7385,238 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ A7D8B9A423E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
DB0F490B17CA57ED008798C5 /* SDL_filesystem.h in Headers */,
AA7557FB1595D4D800BBD41B /* begin_code.h in Headers */,
AA7557FD1595D4D800BBD41B /* close_code.h in Headers */,
AA75585F1595D4D800BBD41B /* SDL.h in Headers */,
AA7557FF1595D4D800BBD41B /* SDL_assert.h in Headers */,
+ A7D8AC0C23E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8BA7C23E2514400DCD162 /* SDL_glfuncs.h in Headers */,
AA7558011595D4D800BBD41B /* SDL_atomic.h in Headers */,
+ A7D8AC0623E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8B1D323E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B99E23E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8B98F23E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AB8823E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
AA7558031595D4D800BBD41B /* SDL_audio.h in Headers */,
+ A7D8A97223E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */,
AA7558051595D4D800BBD41B /* SDL_blendmode.h in Headers */,
+ A7D8BB3023E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8AABF23E2514100DCD162 /* SDL_haptic_c.h in Headers */,
AA7558071595D4D800BBD41B /* SDL_clipboard.h in Headers */,
+ A7D8A94823E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8A96023E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B21523E2514200DCD162 /* SDL_x11events.h in Headers */,
AA75580B1595D4D800BBD41B /* SDL_config.h in Headers */,
- F30D9C85212BC94F0047DF2E /* SDL_sensor_c.h in Headers */,
+ A7D8B98323E2514400DCD162 /* SDL_d3dmath.h in Headers */,
+ A7D8B1EB23E2514200DCD162 /* SDL_x11window.h in Headers */,
AA7558091595D4D800BBD41B /* SDL_config_macosx.h in Headers */,
+ A7D8ABDC23E2514100DCD162 /* SDL_egl_c.h in Headers */,
AA75580D1595D4D800BBD41B /* SDL_copying.h in Headers */,
+ A7D8B3D723E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B79723E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8B14F23E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
+ A7D8B3EF23E2514300DCD162 /* SDL_thread_c.h in Headers */,
+ A7D8AF0923E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B16723E2514200DCD162 /* SDL_x11shape.h in Headers */,
AA75580F1595D4D800BBD41B /* SDL_cpuinfo.h in Headers */,
AA7558111595D4D800BBD41B /* SDL_endian.h in Headers */,
AA7558131595D4D800BBD41B /* SDL_error.h in Headers */,
AA7558151595D4D800BBD41B /* SDL_events.h in Headers */,
+ A7D8BA0423E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
A77E6EB5167AB0A90010E40B /* SDL_gamecontroller.h in Headers */,
+ A7D8B55A23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B2C323E2514200DCD162 /* SDL_pixels_c.h in Headers */,
+ A7D8B1BB23E2514200DCD162 /* SDL_x11modes.h in Headers */,
+ A7D8B58A23E2514300DCD162 /* SDL_joystick_c.h in Headers */,
+ A75FDB5B23E39E6100529352 /* hidapi.h in Headers */,
+ A7D8B2B123E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB4823E2514500DCD162 /* blank_cursor.h in Headers */,
AA7558171595D4D800BBD41B /* SDL_gesture.h in Headers */,
+ A7D8B85D23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
AA7558191595D4D800BBD41B /* SDL_haptic.h in Headers */,
+ A7D8BB9623E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8BB0623E2514500DCD162 /* math_libm.h in Headers */,
+ A7D8AF2123E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
AA75581B1595D4D800BBD41B /* SDL_hints.h in Headers */,
+ A7D8ADEF23E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B9CE23E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
+ A7D8BBFD23E2574800DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D8B1B523E2514200DCD162 /* SDL_x11opengl.h in Headers */,
+ A7D8BBAE23E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
AA75581F1595D4D800BBD41B /* SDL_joystick.h in Headers */,
+ A7D8AF0323E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
AA7558211595D4D800BBD41B /* SDL_keyboard.h in Headers */,
+ A7D8BB3C23E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8BBEF23E2574800DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D8BA7623E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
+ A7D8B42B23E2514300DCD162 /* SDL_systhread_c.h in Headers */,
AA7558231595D4D800BBD41B /* SDL_keycode.h in Headers */,
+ A7D8B20923E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8AE9123E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8B1F123E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8B22123E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B26F23E2514200DCD162 /* vulkan.hpp in Headers */,
AA7558251595D4D800BBD41B /* SDL_loadso.h in Headers */,
+ A7D8B22723E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8BB7223E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8B14923E2514200DCD162 /* SDL_x11touch.h in Headers */,
+ A7D8AAE323E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8B94D23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8B7B523E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
+ A7D8B7A323E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8B23F23E2514200DCD162 /* egl.h in Headers */,
+ A7D8B23923E2514200DCD162 /* khrplatform.h in Headers */,
AA7558271595D4D800BBD41B /* SDL_log.h in Headers */,
+ A7D8A96623E2514000DCD162 /* SDL_dummysensor.h in Headers */,
+ A7D8B2B723E2514200DCD162 /* vulkan_android.h in Headers */,
+ A7D8B3D123E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
+ A7D8B2AB23E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8A97E23E2514000DCD162 /* SDL_syssensor.h in Headers */,
+ A7D8AB0D23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8B61A23E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8B8A523E2514400DCD162 /* SDL_diskaudio.h in Headers */,
AA7558291595D4D800BBD41B /* SDL_main.h in Headers */,
+ A7D8B9F223E2514400DCD162 /* SDL_drawpoint.h in Headers */,
AAC07106195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8BBFB23E2574800DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B86F23E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8AEDF23E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8B3CB23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8B21B23E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8AB5E23E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8B1AF23E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B8CF23E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8BA1C23E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BA0A23E2514400DCD162 /* SDL_drawline.h in Headers */,
+ A7D8BBF723E2574800DCD162 /* SDL_uikitmodes.h in Headers */,
DB0F489417C400ED008798C5 /* SDL_messagebox.h in Headers */,
AA75582B1595D4D800BBD41B /* SDL_mouse.h in Headers */,
AA75582D1595D4D800BBD41B /* SDL_mutex.h in Headers */,
+ A7D8B3B323E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8BBA223E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8B5D823E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8B20F23E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
AA75582F1595D4D800BBD41B /* SDL_name.h in Headers */,
+ A7D8BC0523E2574800DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D8B24523E2514200DCD162 /* eglext.h in Headers */,
+ A7D8BBF123E2574800DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8BBFF23E2574800DCD162 /* SDL_uikitview.h in Headers */,
+ A7D8BBA823E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8BAC423E2514500DCD162 /* math_private.h in Headers */,
+ A7D8B27B23E2514200DCD162 /* vulkan_wayland.h in Headers */,
+ A7D8BBF523E2574800DCD162 /* SDL_uikitmetalview.h in Headers */,
AA7558311595D4D800BBD41B /* SDL_opengl.h in Headers */,
+ A7D8AE8523E2514100DCD162 /* SDL_cocoashape.h in Headers */,
AA7558331595D4D800BBD41B /* SDL_opengles.h in Headers */,
- 56A67028185654B40007D20F /* SDL_dynapi.h in Headers */,
+ A7D8BA5223E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
AA7558351595D4D800BBD41B /* SDL_opengles2.h in Headers */,
+ A7D8BA4623E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8BA1023E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8BBEC23E2574800DCD162 /* keyinfotable.h in Headers */,
+ A7D8AB7023E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
+ A7D8AC0023E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
+ A7D8B58423E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
+ A7D8BB6023E2514500DCD162 /* scancodes_linux.h in Headers */,
+ A7D8B1F723E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8BB6623E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B4AF23E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8AEEB23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
+ A7D8B23323E2514200DCD162 /* gl2platform.h in Headers */,
AA7558371595D4D800BBD41B /* SDL_pixels.h in Headers */,
+ A7D8B25123E2514200DCD162 /* vk_layer.h in Headers */,
+ A7D8AEC123E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
+ A7D8B26923E2514200DCD162 /* vk_platform.h in Headers */,
+ A7D8BBF323E2574800DCD162 /* SDL_uikitmessagebox.h in Headers */,
+ A7D8AEB523E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8AEF123E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8B3B923E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8B28D23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8A99023E2514000DCD162 /* SDL_sensor_c.h in Headers */,
+ A7D8BC0323E2574800DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8B9DA23E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BA3423E2514400DCD162 /* SDL_rotate.h in Headers */,
AA7558391595D4D800BBD41B /* SDL_platform.h in Headers */,
AA75583B1595D4D800BBD41B /* SDL_power.h in Headers */,
+ A7D8AB7C23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8BBCB23E2561600DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D8BB5423E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8B5BA23E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8B17323E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8B29F23E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8B25D23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B29923E2514200DCD162 /* vulkan_mir.h in Headers */,
AA75583D1595D4D800BBD41B /* SDL_quit.h in Headers */,
+ A7D8BB4E23E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8B9FE23E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
+ A7D8BBED23E2574800DCD162 /* SDL_uikitappdelegate.h in Headers */,
AA75583F1595D4D800BBD41B /* SDL_rect.h in Headers */,
AA7558411595D4D800BBD41B /* SDL_render.h in Headers */,
+ A7D8BBF923E2574800DCD162 /* SDL_uikitopengles.h in Headers */,
+ A7D8ABFA23E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B39B23E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B3A123E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B24B23E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8B1D923E2514200DCD162 /* edid.h in Headers */,
+ A7D8BC0123E2574800DCD162 /* SDL_uikitviewcontroller.h in Headers */,
AA7558431595D4D800BBD41B /* SDL_revision.h in Headers */,
+ A7D8B3E923E2514300DCD162 /* SDL_systhread.h in Headers */,
AA7558451595D4D800BBD41B /* SDL_rwops.h in Headers */,
AA7558471595D4D800BBD41B /* SDL_scancode.h in Headers */,
+ A7D8AECD23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEF723E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8B28123E2514200DCD162 /* vulkan_win32.h in Headers */,
+ A7D8AB8223E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8BB4223E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
+ A7D8AB3423E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B22D23E2514200DCD162 /* gl2.h in Headers */,
+ A7D8B44323E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BB2423E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8B5C623E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
+ A7D8B61423E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8B28723E2514200DCD162 /* vulkan_macos.h in Headers */,
+ A7D8B29323E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8B2A523E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8A99C23E2514000DCD162 /* SDL_internal.h in Headers */,
AA7558491595D4D800BBD41B /* SDL_shape.h in Headers */,
- 56F9D55E1DF73B7C00C15B5D /* SDL_dataqueue.h in Headers */,
- 56A6702B185654B40007D20F /* SDL_dynapi_overrides.h in Headers */,
- F30D9CCE212EB4810047DF2E /* SDL_displayevents_c.h in Headers */,
AA75584B1595D4D800BBD41B /* SDL_stdinc.h in Headers */,
AA75584D1595D4D800BBD41B /* SDL_surface.h in Headers */,
+ A7D8B26323E2514200DCD162 /* vulkan.h in Headers */,
+ A7D8BB8A23E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
AA75584F1595D4D800BBD41B /* SDL_system.h in Headers */,
AA7558511595D4D800BBD41B /* SDL_syswm.h in Headers */,
AAC070FA195606770073DCDF /* SDL_opengl_glext.h in Headers */,
+ A7D8BB1E23E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8B2BD23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8B9EC23E2514400DCD162 /* SDL_blendline.h in Headers */,
+ A7D8AAD723E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8AD2023E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
AA7558531595D4D800BBD41B /* SDL_thread.h in Headers */,
- F30D9C88212BC94F0047DF2E /* SDL_syssensor.h in Headers */,
+ A7D8AF1523E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8B25723E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8ABE823E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
AA7558551595D4D800BBD41B /* SDL_timer.h in Headers */,
+ A7D8AB1F23E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8B27523E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
AA7558571595D4D800BBD41B /* SDL_touch.h in Headers */,
AA7558591595D4D800BBD41B /* SDL_types.h in Headers */,
+ A7D8B57223E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8BA5823E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B57E23E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
AA75585B1595D4D800BBD41B /* SDL_version.h in Headers */,
AA75585D1595D4D800BBD41B /* SDL_video.h in Headers */,
- 04BD022512E6671800899322 /* SDL_diskaudio.h in Headers */,
- 56A6700A1856545C0007D20F /* SDL_internal.h in Headers */,
- 04BD022D12E6671800899322 /* SDL_dummyaudio.h in Headers */,
- 04BD023512E6671800899322 /* SDL_coreaudio.h in Headers */,
- 04BD024312E6671800899322 /* SDL_audio_c.h in Headers */,
- 04BD024612E6671800899322 /* SDL_audiodev_c.h in Headers */,
AAC070FD195606770073DCDF /* SDL_opengles2_gl2.h in Headers */,
- 04BD025012E6671800899322 /* SDL_sysaudio.h in Headers */,
- 04BD025212E6671800899322 /* SDL_wave.h in Headers */,
- 04BD025D12E6671800899322 /* blank_cursor.h in Headers */,
- 04BD025E12E6671800899322 /* default_cursor.h in Headers */,
- 04BD025F12E6671800899322 /* scancodes_darwin.h in Headers */,
- AADC5A4F1FDA05E600960936 /* SDL_cocoavulkan.h in Headers */,
- 5C2EF6FA1FC9EE64003F5197 /* SDL_egl_c.h in Headers */,
- 04BD026012E6671800899322 /* scancodes_linux.h in Headers */,
- 04BD026212E6671800899322 /* scancodes_xfree86.h in Headers */,
- 04BD026412E6671800899322 /* SDL_clipboardevents_c.h in Headers */,
- 04BD026612E6671800899322 /* SDL_events_c.h in Headers */,
- 56A67022185654B40007D20F /* SDL_dynapi_procs.h in Headers */,
- 04BD026812E6671800899322 /* SDL_gesture_c.h in Headers */,
- AADC5A4D1FDA05D300960936 /* SDL_vulkan_internal.h in Headers */,
- 04BD026A12E6671800899322 /* SDL_keyboard_c.h in Headers */,
- AADC5A491FDA05C100960936 /* yuv_rgb.h in Headers */,
- 04BD026C12E6671800899322 /* SDL_mouse_c.h in Headers */,
- 04BD026E12E6671800899322 /* SDL_sysevents.h in Headers */,
- 04BD027012E6671800899322 /* SDL_touch_c.h in Headers */,
- 04BD027212E6671800899322 /* SDL_windowevents_c.h in Headers */,
- 04BD027312E6671800899322 /* SDL_rwopsbundlesupport.h in Headers */,
- 5C2EF6FC1FC9EE64003F5197 /* SDL_rect_c.h in Headers */,
- F30D9C91212CABDC0047DF2E /* SDL_dummysensor.h in Headers */,
- 04BD027B12E6671800899322 /* SDL_haptic_c.h in Headers */,
- 04BD027C12E6671800899322 /* SDL_syshaptic.h in Headers */,
- 04BD028212E6671800899322 /* SDL_sysjoystick_c.h in Headers */,
- 04BD028C12E6671800899322 /* SDL_joystick_c.h in Headers */,
- 04BD028D12E6671800899322 /* SDL_sysjoystick.h in Headers */,
F3950CD9212BC88D00F51292 /* SDL_sensor.h in Headers */,
- 04BD02B512E6671800899322 /* SDL_assert_c.h in Headers */,
- 04BD02B812E6671800899322 /* SDL_error_c.h in Headers */,
- 04BD02D912E6671800899322 /* SDL_sysmutex_c.h in Headers */,
- 04BD02DC12E6671800899322 /* SDL_systhread_c.h in Headers */,
- 04BD02E312E6671800899322 /* SDL_systhread.h in Headers */,
- 04BD02E512E6671800899322 /* SDL_thread_c.h in Headers */,
- A704171820F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */,
- 04BD02F212E6671800899322 /* SDL_timer_c.h in Headers */,
- 04BD030D12E6671800899322 /* SDL_cocoaclipboard.h in Headers */,
- 04BD030F12E6671800899322 /* SDL_cocoaevents.h in Headers */,
- 04BD031112E6671800899322 /* SDL_cocoakeyboard.h in Headers */,
- 04BD031312E6671800899322 /* SDL_cocoamodes.h in Headers */,
- 04BD031512E6671800899322 /* SDL_cocoamouse.h in Headers */,
- 04BD031712E6671800899322 /* SDL_cocoaopengl.h in Headers */,
- 04BD031912E6671800899322 /* SDL_cocoashape.h in Headers */,
+ A75FDBC823EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8AC4223E2514100DCD162 /* SDL_sysvideo.h in Headers */,
AAC07103195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */,
- 5C2EF6F01FC9D181003F5197 /* SDL_cocoaopengles.h in Headers */,
- 04BD031B12E6671800899322 /* SDL_cocoavideo.h in Headers */,
- 04BD031D12E6671800899322 /* SDL_cocoawindow.h in Headers */,
- 04BD033212E6671800899322 /* SDL_nullevents_c.h in Headers */,
- 04BD033612E6671800899322 /* SDL_nullvideo.h in Headers */,
- 04BD039012E6671800899322 /* SDL_blit.h in Headers */,
- 04BD039512E6671800899322 /* SDL_blit_auto.h in Headers */,
- 04BD039712E6671800899322 /* SDL_blit_copy.h in Headers */,
- 04BD039A12E6671800899322 /* SDL_blit_slow.h in Headers */,
- 04BD03A712E6671800899322 /* SDL_pixels_c.h in Headers */,
- 5C2EF6A71FC98D2D003F5197 /* SDL_gles2funcs.h in Headers */,
- 04BD03B112E6671800899322 /* SDL_RLEaccel_c.h in Headers */,
- 04BD03B312E6671800899322 /* SDL_shape_internals.h in Headers */,
- 04BD03B612E6671800899322 /* SDL_sysvideo.h in Headers */,
- 04BD03F412E6671800899322 /* imKStoUCS.h in Headers */,
- 04BD03F612E6671800899322 /* SDL_x11clipboard.h in Headers */,
- 04BD03F812E6671800899322 /* SDL_x11dyn.h in Headers */,
- 04BD03FA12E6671800899322 /* SDL_x11events.h in Headers */,
- 04BD03FE12E6671800899322 /* SDL_x11keyboard.h in Headers */,
- 04BD040012E6671800899322 /* SDL_x11modes.h in Headers */,
- 04BD040212E6671800899322 /* SDL_x11mouse.h in Headers */,
- 04BD040412E6671800899322 /* SDL_x11opengl.h in Headers */,
- 04BD040612E6671800899322 /* SDL_x11opengles.h in Headers */,
- 04BD040A12E6671800899322 /* SDL_x11shape.h in Headers */,
- 04BD040B12E6671800899322 /* SDL_x11sym.h in Headers */,
- 04BD040D12E6671800899322 /* SDL_x11touch.h in Headers */,
- 04BD040F12E6671800899322 /* SDL_x11video.h in Headers */,
AAC07100195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */,
- 04BD041112E6671800899322 /* SDL_x11window.h in Headers */,
- AADC5A4B1FDA05CF00960936 /* SDL_yuv_c.h in Headers */,
- 041B2CAC12FA0D680087D585 /* SDL_sysrender.h in Headers */,
- 04409B9712FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */,
- 04F7803B12FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */,
- 5C2EF6AA1FC98D2D003F5197 /* SDL_shaders_gles2.h in Headers */,
- 04F7805612FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */,
- 04F7805812FB74A200FC43C0 /* SDL_blendline.h in Headers */,
- 04F7805A12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */,
- AADC5A461FDA047B00960936 /* SDL_shaders_metal_osx.h in Headers */,
- 04F7805B12FB74A200FC43C0 /* SDL_draw.h in Headers */,
- 04F7805D12FB74A200FC43C0 /* SDL_drawline.h in Headers */,
- 04F7805F12FB74A200FC43C0 /* SDL_drawpoint.h in Headers */,
- 0442EC1E12FE1BCB004C9285 /* SDL_render_sw_c.h in Headers */,
- 0442EC5D12FE1C60004C9285 /* SDL_x11framebuffer.h in Headers */,
- 04043BBC12FEB1BE0076DB1F /* SDL_glfuncs.h in Headers */,
- 043567411303160F00BA5428 /* SDL_shaders_gl.h in Headers */,
- AA628ACD159367B7005138DD /* SDL_rotate.h in Headers */,
- AA628AD4159367F2005138DD /* SDL_x11xinput2.h in Headers */,
- AABCC38E164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */,
- D55A1B85179F278E00625D7C /* SDL_cocoamousetap.h in Headers */,
+ A7D8B1FD23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8AB1323E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
+ A7D8AEFD23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
+ A7D8B1DF23E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2354,169 +7624,238 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ A7D8B9A623E2514400DCD162 /* SDL_shaders_metal_tvos.h in Headers */,
DB0F490C17CA57ED008798C5 /* SDL_filesystem.h in Headers */,
DB313FC817554B71006C0E22 /* begin_code.h in Headers */,
+ A7D8ACDA23E2514100DCD162 /* SDL_uikitopengles.h in Headers */,
DB313FC917554B71006C0E22 /* close_code.h in Headers */,
DB313FF917554B71006C0E22 /* SDL.h in Headers */,
+ A7D8AC6223E2514100DCD162 /* SDL_uikitmetalview.h in Headers */,
DB313FCA17554B71006C0E22 /* SDL_assert.h in Headers */,
+ A7D8AC0E23E2514100DCD162 /* SDL_shape_internals.h in Headers */,
+ A7D8BA7E23E2514400DCD162 /* SDL_glfuncs.h in Headers */,
DB313FCB17554B71006C0E22 /* SDL_atomic.h in Headers */,
+ A7D8AC0823E2514100DCD162 /* SDL_rect_c.h in Headers */,
+ A7D8B1D523E2514200DCD162 /* SDL_x11xinput2.h in Headers */,
+ A7D8B9A023E2514400DCD162 /* SDL_shaders_metal_osx.h in Headers */,
+ A7D8B99123E2514400DCD162 /* SDL_shaders_metal_ios.h in Headers */,
+ A7D8AB8A23E2514100DCD162 /* SDL_offscreenwindow.h in Headers */,
DB313FCC17554B71006C0E22 /* SDL_audio.h in Headers */,
+ A7D8A97423E2514000DCD162 /* SDL_coremotionsensor.h in Headers */,
+ A7D8AC4A23E2514100DCD162 /* SDL_uikitview.h in Headers */,
DB313FFC17554B71006C0E22 /* SDL_bits.h in Headers */,
+ A7D8ACCE23E2514100DCD162 /* SDL_uikitappdelegate.h in Headers */,
+ A7D8ACA423E2514100DCD162 /* keyinfotable.h in Headers */,
DB313FCD17554B71006C0E22 /* SDL_blendmode.h in Headers */,
+ A7D8BB3223E2514500DCD162 /* SDL_dropevents_c.h in Headers */,
+ A7D8AAC123E2514100DCD162 /* SDL_haptic_c.h in Headers */,
DB313FCE17554B71006C0E22 /* SDL_clipboard.h in Headers */,
+ A7D8A94A23E2514000DCD162 /* SDL_dataqueue.h in Headers */,
+ A7D8A96223E2514000DCD162 /* SDL_error_c.h in Headers */,
+ A7D8B21723E2514200DCD162 /* SDL_x11events.h in Headers */,
DB313FD017554B71006C0E22 /* SDL_config.h in Headers */,
- F30D9C86212BC94F0047DF2E /* SDL_sensor_c.h in Headers */,
+ A7D8B98523E2514400DCD162 /* SDL_d3dmath.h in Headers */,
+ A7D8B1ED23E2514200DCD162 /* SDL_x11window.h in Headers */,
DB313FCF17554B71006C0E22 /* SDL_config_macosx.h in Headers */,
+ A7D8ABDE23E2514100DCD162 /* SDL_egl_c.h in Headers */,
DB313FD117554B71006C0E22 /* SDL_copying.h in Headers */,
+ A7D8B3D923E2514300DCD162 /* yuv_rgb.h in Headers */,
+ A7D8B79923E2514400DCD162 /* SDL_dummyaudio.h in Headers */,
+ A7D8AC9823E2514100DCD162 /* SDL_uikitmessagebox.h in Headers */,
+ A7D8B15123E2514200DCD162 /* SDL_x11messagebox.h in Headers */,
+ A7D8B3F123E2514300DCD162 /* SDL_thread_c.h in Headers */,
+ A7D8AF0B23E2514100DCD162 /* SDL_cocoamessagebox.h in Headers */,
+ A7D8B16923E2514200DCD162 /* SDL_x11shape.h in Headers */,
DB313FD217554B71006C0E22 /* SDL_cpuinfo.h in Headers */,
DB313FD317554B71006C0E22 /* SDL_endian.h in Headers */,
DB313FD417554B71006C0E22 /* SDL_error.h in Headers */,
DB313FD517554B71006C0E22 /* SDL_events.h in Headers */,
+ A75FDB5E23E39E6100529352 /* hidapi.h in Headers */,
+ A7D8BA0623E2514400DCD162 /* SDL_blendfillrect.h in Headers */,
DB313FFB17554B71006C0E22 /* SDL_gamecontroller.h in Headers */,
+ A7D8B55C23E2514300DCD162 /* SDL_hidapijoystick_c.h in Headers */,
+ A7D8B2C523E2514200DCD162 /* SDL_pixels_c.h in Headers */,
+ A7D8B1BD23E2514200DCD162 /* SDL_x11modes.h in Headers */,
+ A7D8B58C23E2514300DCD162 /* SDL_joystick_c.h in Headers */,
+ A7D8B2B323E2514200DCD162 /* vk_sdk_platform.h in Headers */,
+ A7D8BB4A23E2514500DCD162 /* blank_cursor.h in Headers */,
DB313FD617554B71006C0E22 /* SDL_gesture.h in Headers */,
+ A7D8B85F23E2514400DCD162 /* SDL_sysaudio.h in Headers */,
DB313FD717554B71006C0E22 /* SDL_haptic.h in Headers */,
+ A7D8BB9823E2514500DCD162 /* SDL_sysevents.h in Headers */,
+ A7D8BB0823E2514500DCD162 /* math_libm.h in Headers */,
+ A7D8AC8023E2514100DCD162 /* SDL_uikitvideo.h in Headers */,
+ A7D8AF2323E2514100DCD162 /* SDL_cocoamouse.h in Headers */,
DB313FD817554B71006C0E22 /* SDL_hints.h in Headers */,
+ A7D8ADF123E2514100DCD162 /* SDL_blit_slow.h in Headers */,
+ A7D8B9D023E2514400DCD162 /* SDL_yuv_sw_c.h in Headers */,
+ A7D8B1B723E2514200DCD162 /* SDL_x11opengl.h in Headers */,
+ A7D8BBB023E2514500DCD162 /* SDL_windowevents_c.h in Headers */,
DB313FD917554B71006C0E22 /* SDL_joystick.h in Headers */,
+ A7D8AF0523E2514100DCD162 /* SDL_cocoavideo.h in Headers */,
DB313FDA17554B71006C0E22 /* SDL_keyboard.h in Headers */,
+ A7D8ACC223E2514100DCD162 /* SDL_uikitevents.h in Headers */,
+ A7D8BB3E23E2514500DCD162 /* SDL_gesture_c.h in Headers */,
+ A7D8BA7823E2514400DCD162 /* SDL_shaders_gl.h in Headers */,
+ A7D8B42D23E2514300DCD162 /* SDL_systhread_c.h in Headers */,
DB313FDB17554B71006C0E22 /* SDL_keycode.h in Headers */,
+ A7D8B20B23E2514200DCD162 /* SDL_x11keyboard.h in Headers */,
+ A7D8AE9323E2514100DCD162 /* SDL_cocoakeyboard.h in Headers */,
+ A7D8ACE623E2514100DCD162 /* SDL_uikitvulkan.h in Headers */,
+ A7D8B1F323E2514200DCD162 /* SDL_x11framebuffer.h in Headers */,
+ A7D8B22323E2514200DCD162 /* SDL_x11video.h in Headers */,
+ A7D8B27123E2514200DCD162 /* vulkan.hpp in Headers */,
DB313FDC17554B71006C0E22 /* SDL_loadso.h in Headers */,
+ A7D8B22923E2514200DCD162 /* gl2ext.h in Headers */,
+ A7D8BB7423E2514500DCD162 /* SDL_clipboardevents_c.h in Headers */,
+ A7D8B14B23E2514200DCD162 /* SDL_x11touch.h in Headers */,
+ A7D8AAE523E2514100DCD162 /* SDL_syshaptic_c.h in Headers */,
+ A7D8B94F23E2514400DCD162 /* SDL_hints_c.h in Headers */,
+ A7D8B7B723E2514400DCD162 /* SDL_audiodev_c.h in Headers */,
+ A7D8B7A523E2514400DCD162 /* SDL_audio_c.h in Headers */,
+ A7D8AC6E23E2514100DCD162 /* SDL_uikitmodes.h in Headers */,
+ A7D8B24123E2514200DCD162 /* egl.h in Headers */,
+ A7D8B23B23E2514200DCD162 /* khrplatform.h in Headers */,
DB313FDD17554B71006C0E22 /* SDL_log.h in Headers */,
+ A7D8AC8C23E2514100DCD162 /* SDL_uikitviewcontroller.h in Headers */,
+ A7D8A96823E2514000DCD162 /* SDL_dummysensor.h in Headers */,
+ A7D8B2B923E2514200DCD162 /* vulkan_android.h in Headers */,
+ A7D8B3D323E2514300DCD162 /* yuv_rgb_std_func.h in Headers */,
+ A7D8B2AD23E2514200DCD162 /* vulkan_core.h in Headers */,
+ A7D8A98023E2514000DCD162 /* SDL_syssensor.h in Headers */,
+ A7D8AB0F23E2514100DCD162 /* SDL_dynapi.h in Headers */,
+ A7D8B61C23E2514300DCD162 /* SDL_assert_c.h in Headers */,
+ A7D8B8A723E2514400DCD162 /* SDL_diskaudio.h in Headers */,
DB313FDE17554B71006C0E22 /* SDL_main.h in Headers */,
+ A7D8B9F423E2514400DCD162 /* SDL_drawpoint.h in Headers */,
AAC07107195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */,
+ A7D8B87123E2514400DCD162 /* SDL_wave.h in Headers */,
+ A7D8AEE123E2514100DCD162 /* SDL_cocoaopengl.h in Headers */,
+ A7D8B3CD23E2514300DCD162 /* yuv_rgb_sse_func.h in Headers */,
+ A7D8B21D23E2514200DCD162 /* imKStoUCS.h in Headers */,
+ A7D8AB6023E2514100DCD162 /* SDL_offscreenevents_c.h in Headers */,
+ A7D8B1B123E2514200DCD162 /* SDL_x11sym.h in Headers */,
+ A7D8B8D123E2514400DCD162 /* SDL_coreaudio.h in Headers */,
+ A7D8BA1E23E2514400DCD162 /* SDL_draw.h in Headers */,
+ A7D8BA0C23E2514400DCD162 /* SDL_drawline.h in Headers */,
DB0F489317C400E6008798C5 /* SDL_messagebox.h in Headers */,
DB313FDF17554B71006C0E22 /* SDL_mouse.h in Headers */,
DB313FE017554B71006C0E22 /* SDL_mutex.h in Headers */,
+ A7D8B3B523E2514200DCD162 /* SDL_yuv_c.h in Headers */,
+ A7D8BBA423E2514500DCD162 /* scancodes_xfree86.h in Headers */,
+ A7D8B5DA23E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8B21123E2514200DCD162 /* SDL_x11clipboard.h in Headers */,
DB313FE117554B71006C0E22 /* SDL_name.h in Headers */,
+ A7D8B24723E2514200DCD162 /* eglext.h in Headers */,
+ A7D8BBAA23E2514500DCD162 /* SDL_events_c.h in Headers */,
+ A7D8BAC623E2514500DCD162 /* math_private.h in Headers */,
+ A7D8B27D23E2514200DCD162 /* vulkan_wayland.h in Headers */,
DB313FE217554B71006C0E22 /* SDL_opengl.h in Headers */,
+ A7D8AE8723E2514100DCD162 /* SDL_cocoashape.h in Headers */,
DB313FE317554B71006C0E22 /* SDL_opengles.h in Headers */,
- 56A67029185654B40007D20F /* SDL_dynapi.h in Headers */,
+ A7D8BA5423E2514400DCD162 /* SDL_shaders_gles2.h in Headers */,
DB313FE417554B71006C0E22 /* SDL_opengles2.h in Headers */,
+ A7D8BA4823E2514400DCD162 /* SDL_glesfuncs.h in Headers */,
+ A7D8BA1223E2514400DCD162 /* SDL_blendpoint.h in Headers */,
+ A7D8AB7223E2514100DCD162 /* SDL_offscreenvideo.h in Headers */,
+ A7D8AC0223E2514100DCD162 /* SDL_nullevents_c.h in Headers */,
+ A7D8B58623E2514300DCD162 /* SDL_sysjoystick.h in Headers */,
+ A7D8BBCF23E2561600DCD162 /* SDL_steamcontroller.h in Headers */,
+ A7D8BB6223E2514500DCD162 /* scancodes_linux.h in Headers */,
+ A7D8B1F923E2514200DCD162 /* SDL_x11dyn.h in Headers */,
+ A7D8BB6823E2514500DCD162 /* SDL_touch_c.h in Headers */,
+ A7D8B4B123E2514300DCD162 /* SDL_gamecontrollerdb.h in Headers */,
+ A7D8AEED23E2514100DCD162 /* SDL_cocoavulkan.h in Headers */,
+ A7D8B23523E2514200DCD162 /* gl2platform.h in Headers */,
DB313FE517554B71006C0E22 /* SDL_pixels.h in Headers */,
+ A7D8B25323E2514200DCD162 /* vk_layer.h in Headers */,
+ A7D8AEC323E2514100DCD162 /* SDL_cocoamousetap.h in Headers */,
+ A7D8B26B23E2514200DCD162 /* vk_platform.h in Headers */,
+ A7D8AEB723E2514100DCD162 /* SDL_cocoametalview.h in Headers */,
+ A7D8AEF323E2514100DCD162 /* SDL_cocoaopengles.h in Headers */,
+ A7D8B3BB23E2514200DCD162 /* SDL_blit.h in Headers */,
+ A7D8B28F23E2514200DCD162 /* vulkan_xlib_xrandr.h in Headers */,
+ A7D8A99223E2514000DCD162 /* SDL_sensor_c.h in Headers */,
+ A7D8B9DC23E2514400DCD162 /* SDL_sysrender.h in Headers */,
+ A7D8BA3623E2514400DCD162 /* SDL_rotate.h in Headers */,
DB313FE617554B71006C0E22 /* SDL_platform.h in Headers */,
DB313FE717554B71006C0E22 /* SDL_power.h in Headers */,
+ A7D8AB7E23E2514100DCD162 /* SDL_offscreenopengl.h in Headers */,
+ A7D8BB5623E2514500DCD162 /* scancodes_darwin.h in Headers */,
+ A7D8B5BC23E2514300DCD162 /* controller_type.h in Headers */,
+ A7D8B17523E2514200DCD162 /* SDL_x11opengles.h in Headers */,
+ A7D8AC7A23E2514100DCD162 /* SDL_uikitclipboard.h in Headers */,
+ A7D8B2A123E2514200DCD162 /* vulkan_xlib.h in Headers */,
+ A7D8AC9E23E2514100DCD162 /* SDL_uikitwindow.h in Headers */,
+ A7D8B25F23E2514200DCD162 /* vulkan_vi.h in Headers */,
+ A7D8B29B23E2514200DCD162 /* vulkan_mir.h in Headers */,
DB313FE817554B71006C0E22 /* SDL_quit.h in Headers */,
+ A7D8BB5023E2514500DCD162 /* default_cursor.h in Headers */,
+ A7D8BA0023E2514400DCD162 /* SDL_render_sw_c.h in Headers */,
DB313FE917554B71006C0E22 /* SDL_rect.h in Headers */,
DB313FEA17554B71006C0E22 /* SDL_render.h in Headers */,
+ A7D8ABFC23E2514100DCD162 /* SDL_nullvideo.h in Headers */,
+ A7D8B39D23E2514200DCD162 /* SDL_blit_copy.h in Headers */,
+ A7D8B3A323E2514200DCD162 /* SDL_RLEaccel_c.h in Headers */,
+ A7D8B24D23E2514200DCD162 /* eglplatform.h in Headers */,
+ A7D8B1DB23E2514200DCD162 /* edid.h in Headers */,
DB313FEB17554B71006C0E22 /* SDL_revision.h in Headers */,
+ A7D8B3EB23E2514300DCD162 /* SDL_systhread.h in Headers */,
DB313FEC17554B71006C0E22 /* SDL_rwops.h in Headers */,
DB313FED17554B71006C0E22 /* SDL_scancode.h in Headers */,
+ A7D8AECF23E2514100DCD162 /* SDL_cocoaclipboard.h in Headers */,
+ A7D8AEF923E2514100DCD162 /* SDL_cocoamodes.h in Headers */,
+ A7D8ACB623E2514100DCD162 /* SDL_uikitopenglview.h in Headers */,
+ A7D8B28323E2514200DCD162 /* vulkan_win32.h in Headers */,
+ A7D8AB8423E2514100DCD162 /* SDL_offscreenframebuffer_c.h in Headers */,
+ A7D8BB4423E2514500DCD162 /* SDL_displayevents_c.h in Headers */,
+ A7D8AB3623E2514100DCD162 /* SDL_timer_c.h in Headers */,
+ A7D8B22F23E2514200DCD162 /* gl2.h in Headers */,
+ A7D8B44523E2514300DCD162 /* SDL_sysmutex_c.h in Headers */,
+ A7D8BB2623E2514500DCD162 /* scancodes_windows.h in Headers */,
+ A7D8B5C823E2514300DCD162 /* SDL_rwopsbundlesupport.h in Headers */,
+ A7D8B61623E2514300DCD162 /* SDL_syspower.h in Headers */,
+ A7D8B28923E2514200DCD162 /* vulkan_macos.h in Headers */,
+ A7D8B29523E2514200DCD162 /* vulkan_xcb.h in Headers */,
+ A7D8B2A723E2514200DCD162 /* vulkan_ios.h in Headers */,
+ A7D8A99E23E2514000DCD162 /* SDL_internal.h in Headers */,
DB313FEE17554B71006C0E22 /* SDL_shape.h in Headers */,
- 56F9D55F1DF73B7D00C15B5D /* SDL_dataqueue.h in Headers */,
- 56A6702C185654B40007D20F /* SDL_dynapi_overrides.h in Headers */,
- F30D9CCF212EB4810047DF2E /* SDL_displayevents_c.h in Headers */,
DB313FEF17554B71006C0E22 /* SDL_stdinc.h in Headers */,
DB313FF017554B71006C0E22 /* SDL_surface.h in Headers */,
+ A7D8B26523E2514200DCD162 /* vulkan.h in Headers */,
+ A7D8BB8C23E2514500DCD162 /* SDL_keyboard_c.h in Headers */,
DB313FF117554B71006C0E22 /* SDL_system.h in Headers */,
DB313FF217554B71006C0E22 /* SDL_syswm.h in Headers */,
AAC070FB195606770073DCDF /* SDL_opengl_glext.h in Headers */,
+ A7D8BB2023E2514500DCD162 /* SDL_mouse_c.h in Headers */,
+ A7D8B2BF23E2514200DCD162 /* SDL_blit_auto.h in Headers */,
+ A7D8B9EE23E2514400DCD162 /* SDL_blendline.h in Headers */,
+ A7D8AAD923E2514100DCD162 /* SDL_syshaptic.h in Headers */,
+ A7D8AD2223E2514100DCD162 /* SDL_vulkan_internal.h in Headers */,
DB313FF317554B71006C0E22 /* SDL_thread.h in Headers */,
- F30D9C89212BC94F0047DF2E /* SDL_syssensor.h in Headers */,
+ A7D8AF1723E2514100DCD162 /* SDL_cocoaevents.h in Headers */,
+ A7D8B25923E2514200DCD162 /* vk_icd.h in Headers */,
+ A7D8ABEA23E2514100DCD162 /* SDL_nullframebuffer_c.h in Headers */,
DB313FF417554B71006C0E22 /* SDL_timer.h in Headers */,
+ A7D8AB2123E2514100DCD162 /* SDL_dynapi_procs.h in Headers */,
+ A7D8B27723E2514200DCD162 /* vulkan_fuchsia.h in Headers */,
DB313FF517554B71006C0E22 /* SDL_touch.h in Headers */,
DB313FF617554B71006C0E22 /* SDL_types.h in Headers */,
+ A7D8B57423E2514300DCD162 /* usb_ids.h in Headers */,
+ A7D8BA5A23E2514400DCD162 /* SDL_gles2funcs.h in Headers */,
+ A7D8B58023E2514300DCD162 /* SDL_sysjoystick_c.h in Headers */,
DB313FF717554B71006C0E22 /* SDL_version.h in Headers */,
DB313FF817554B71006C0E22 /* SDL_video.h in Headers */,
- DB313F7417554B71006C0E22 /* SDL_diskaudio.h in Headers */,
- 56A6700B1856545C0007D20F /* SDL_internal.h in Headers */,
- DB313F7517554B71006C0E22 /* SDL_dummyaudio.h in Headers */,
- DB313F7617554B71006C0E22 /* SDL_coreaudio.h in Headers */,
- DB313F7717554B71006C0E22 /* SDL_audio_c.h in Headers */,
- DB313F7817554B71006C0E22 /* SDL_audiodev_c.h in Headers */,
AAC070FE195606770073DCDF /* SDL_opengles2_gl2.h in Headers */,
- DB313F7A17554B71006C0E22 /* SDL_sysaudio.h in Headers */,
- DB313F7B17554B71006C0E22 /* SDL_wave.h in Headers */,
- DB313F7C17554B71006C0E22 /* blank_cursor.h in Headers */,
- DB313F7D17554B71006C0E22 /* default_cursor.h in Headers */,
- DB313F7E17554B71006C0E22 /* scancodes_darwin.h in Headers */,
- AADC5A501FDA05E600960936 /* SDL_cocoavulkan.h in Headers */,
- 5C2EF6FD1FC9EE65003F5197 /* SDL_egl_c.h in Headers */,
- DB313F7F17554B71006C0E22 /* scancodes_linux.h in Headers */,
- DB313F8017554B71006C0E22 /* scancodes_xfree86.h in Headers */,
- DB313F8117554B71006C0E22 /* SDL_clipboardevents_c.h in Headers */,
- DB313F8217554B71006C0E22 /* SDL_events_c.h in Headers */,
- 56A67023185654B40007D20F /* SDL_dynapi_procs.h in Headers */,
- DB313F8317554B71006C0E22 /* SDL_gesture_c.h in Headers */,
- AADC5A4E1FDA05D400960936 /* SDL_vulkan_internal.h in Headers */,
- DB313F8417554B71006C0E22 /* SDL_keyboard_c.h in Headers */,
- AADC5A4A1FDA05C200960936 /* yuv_rgb.h in Headers */,
- DB313F8517554B71006C0E22 /* SDL_mouse_c.h in Headers */,
- DB313F8617554B71006C0E22 /* SDL_sysevents.h in Headers */,
- DB313F8717554B71006C0E22 /* SDL_touch_c.h in Headers */,
- DB313F8817554B71006C0E22 /* SDL_windowevents_c.h in Headers */,
- DB313F8917554B71006C0E22 /* SDL_rwopsbundlesupport.h in Headers */,
- 5C2EF6FF1FC9EE65003F5197 /* SDL_rect_c.h in Headers */,
- F30D9C92212CABDC0047DF2E /* SDL_dummysensor.h in Headers */,
- DB313F8A17554B71006C0E22 /* SDL_haptic_c.h in Headers */,
- DB313F8B17554B71006C0E22 /* SDL_syshaptic.h in Headers */,
- DB313F8C17554B71006C0E22 /* SDL_sysjoystick_c.h in Headers */,
- DB313F8D17554B71006C0E22 /* SDL_joystick_c.h in Headers */,
- DB313F8E17554B71006C0E22 /* SDL_sysjoystick.h in Headers */,
F3950CDA212BC88D00F51292 /* SDL_sensor.h in Headers */,
- DB313F8F17554B71006C0E22 /* SDL_assert_c.h in Headers */,
- DB313F9017554B71006C0E22 /* SDL_error_c.h in Headers */,
- DB313F9217554B71006C0E22 /* SDL_sysmutex_c.h in Headers */,
- DB313F9317554B71006C0E22 /* SDL_systhread_c.h in Headers */,
- DB313F9417554B71006C0E22 /* SDL_systhread.h in Headers */,
- DB313F9517554B71006C0E22 /* SDL_thread_c.h in Headers */,
- A704171920F09AC900A82227 /* SDL_hidapijoystick_c.h in Headers */,
- DB313F9617554B71006C0E22 /* SDL_timer_c.h in Headers */,
- DB313F9717554B71006C0E22 /* SDL_cocoaclipboard.h in Headers */,
- DB313F9817554B71006C0E22 /* SDL_cocoaevents.h in Headers */,
- DB313F9917554B71006C0E22 /* SDL_cocoakeyboard.h in Headers */,
- DB313F9A17554B71006C0E22 /* SDL_cocoamodes.h in Headers */,
- DB313F9B17554B71006C0E22 /* SDL_cocoamouse.h in Headers */,
- DB313F9C17554B71006C0E22 /* SDL_cocoaopengl.h in Headers */,
- DB313F9D17554B71006C0E22 /* SDL_cocoashape.h in Headers */,
+ A75FDBCB23EA380300529352 /* SDL_hidapi_rumble.h in Headers */,
+ A7D8AC4423E2514100DCD162 /* SDL_sysvideo.h in Headers */,
AAC07104195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */,
- 5C2EF6F21FC9D182003F5197 /* SDL_cocoaopengles.h in Headers */,
- DB313F9E17554B71006C0E22 /* SDL_cocoavideo.h in Headers */,
- DB313F9F17554B71006C0E22 /* SDL_cocoawindow.h in Headers */,
- DB313FA017554B71006C0E22 /* SDL_nullevents_c.h in Headers */,
- DB313FA117554B71006C0E22 /* SDL_nullvideo.h in Headers */,
- DB313FA217554B71006C0E22 /* SDL_blit.h in Headers */,
- DB313FA317554B71006C0E22 /* SDL_blit_auto.h in Headers */,
- DB313FA417554B71006C0E22 /* SDL_blit_copy.h in Headers */,
- DB313FA517554B71006C0E22 /* SDL_blit_slow.h in Headers */,
- DB313FA617554B71006C0E22 /* SDL_pixels_c.h in Headers */,
- 5C2EF6AB1FC98D2E003F5197 /* SDL_gles2funcs.h in Headers */,
- DB313FA717554B71006C0E22 /* SDL_RLEaccel_c.h in Headers */,
- DB313FA817554B71006C0E22 /* SDL_shape_internals.h in Headers */,
- DB313FA917554B71006C0E22 /* SDL_sysvideo.h in Headers */,
- DB313FAA17554B71006C0E22 /* imKStoUCS.h in Headers */,
- DB313FAB17554B71006C0E22 /* SDL_x11clipboard.h in Headers */,
- DB313FAC17554B71006C0E22 /* SDL_x11dyn.h in Headers */,
- DB313FAD17554B71006C0E22 /* SDL_x11events.h in Headers */,
- DB313FAE17554B71006C0E22 /* SDL_x11keyboard.h in Headers */,
- DB313FAF17554B71006C0E22 /* SDL_x11modes.h in Headers */,
- DB313FB017554B71006C0E22 /* SDL_x11mouse.h in Headers */,
- DB313FB117554B71006C0E22 /* SDL_x11opengl.h in Headers */,
- DB313FB217554B71006C0E22 /* SDL_x11opengles.h in Headers */,
- DB313FB317554B71006C0E22 /* SDL_x11shape.h in Headers */,
- DB313FB417554B71006C0E22 /* SDL_x11sym.h in Headers */,
- DB313FB517554B71006C0E22 /* SDL_x11touch.h in Headers */,
- DB313FB617554B71006C0E22 /* SDL_x11video.h in Headers */,
AAC07101195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */,
- DB313FB717554B71006C0E22 /* SDL_x11window.h in Headers */,
- AADC5A4C1FDA05CF00960936 /* SDL_yuv_c.h in Headers */,
- DB313FB817554B71006C0E22 /* SDL_sysrender.h in Headers */,
- DB313FBA17554B71006C0E22 /* SDL_yuv_sw_c.h in Headers */,
- DB313FBB17554B71006C0E22 /* SDL_nullframebuffer_c.h in Headers */,
- 5C2EF6AE1FC98D2E003F5197 /* SDL_shaders_gles2.h in Headers */,
- DB313FBC17554B71006C0E22 /* SDL_blendfillrect.h in Headers */,
- DB313FBD17554B71006C0E22 /* SDL_blendline.h in Headers */,
- DB313FBE17554B71006C0E22 /* SDL_blendpoint.h in Headers */,
- AADC5A471FDA047E00960936 /* SDL_shaders_metal_osx.h in Headers */,
- DB313FBF17554B71006C0E22 /* SDL_draw.h in Headers */,
- DB313FC017554B71006C0E22 /* SDL_drawline.h in Headers */,
- DB313FC117554B71006C0E22 /* SDL_drawpoint.h in Headers */,
- DB313FC217554B71006C0E22 /* SDL_render_sw_c.h in Headers */,
- DB313FC317554B71006C0E22 /* SDL_x11framebuffer.h in Headers */,
- DB313FC417554B71006C0E22 /* SDL_glfuncs.h in Headers */,
- DB313FC517554B71006C0E22 /* SDL_shaders_gl.h in Headers */,
- DB313FC617554B71006C0E22 /* SDL_rotate.h in Headers */,
- DB313FC717554B71006C0E22 /* SDL_x11xinput2.h in Headers */,
- DB313FFA17554B71006C0E22 /* SDL_cocoamessagebox.h in Headers */,
- D55A1B86179F278F00625D7C /* SDL_cocoamousetap.h in Headers */,
+ A7D8B1FF23E2514200DCD162 /* SDL_x11mouse.h in Headers */,
+ A7D8AB1523E2514100DCD162 /* SDL_dynapi_overrides.h in Headers */,
+ A7D8AEFF23E2514100DCD162 /* SDL_cocoawindow.h in Headers */,
+ A7D8B1E123E2514200DCD162 /* SDL_x11vulkan.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2523,6 +7862,182 @@
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
+ A75FCCFB23E25AB700529352 /* Shared Library-iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A75FCEB023E25AB700529352 /* Build configuration list for PBXNativeTarget "Shared Library-iOS" */;
+ buildPhases = (
+ A75FCCFC23E25AB700529352 /* Headers */,
+ A75FCDE823E25AB700529352 /* Sources */,
+ A75FCEA423E25AB700529352 /* Frameworks */,
+ A75FCEAF23E25AB700529352 /* Rez */,
+ );
+ buildRules = (
+ );
+ comments = "This produces libSDL2.dylib, which is the shared build of SDL.";
+ dependencies = (
+ );
+ name = "Shared Library-iOS";
+ productInstallPath = /usr/local/lib;
+ productName = "Shared Library";
+ productReference = A75FCEB323E25AB700529352 /* libSDL2.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
+ };
+ A75FCEB423E25AC700529352 /* Shared Library-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A75FD06923E25AC700529352 /* Build configuration list for PBXNativeTarget "Shared Library-tvOS" */;
+ buildPhases = (
+ A75FCEB523E25AC700529352 /* Headers */,
+ A75FCFA123E25AC700529352 /* Sources */,
+ A75FD05D23E25AC700529352 /* Frameworks */,
+ A75FD06823E25AC700529352 /* Rez */,
+ );
+ buildRules = (
+ );
+ comments = "This produces libSDL2.dylib, which is the shared build of SDL.";
+ dependencies = (
+ );
+ name = "Shared Library-tvOS";
+ productInstallPath = /usr/local/lib;
+ productName = "Shared Library";
+ productReference = A75FD06C23E25AC700529352 /* libSDL2.dylib */;
+ productType = "com.apple.product-type.library.dynamic";
+ };
+ A75FDB4823E399AC00529352 /* hidapi-iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A75FDB5023E399AC00529352 /* Build configuration list for PBXNativeTarget "hidapi-iOS" */;
+ buildPhases = (
+ A75FDB4423E399AC00529352 /* Headers */,
+ A75FDB4523E399AC00529352 /* Sources */,
+ A75FDB4623E399AC00529352 /* Frameworks */,
+ A75FDB4723E399AC00529352 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "hidapi-iOS";
+ productName = hidapi;
+ productReference = A75FDB4923E399AC00529352 /* hidapi.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A75FDB6223E3A2C900529352 /* hidapi-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A75FDB6B23E3A2C900529352 /* Build configuration list for PBXNativeTarget "hidapi-tvOS" */;
+ buildPhases = (
+ A75FDB6323E3A2C900529352 /* Headers */,
+ A75FDB6523E3A2C900529352 /* Sources */,
+ A75FDB6723E3A2C900529352 /* Frameworks */,
+ A75FDB6A23E3A2C900529352 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "hidapi-tvOS";
+ productName = hidapi;
+ productReference = A75FDB6E23E3A2C900529352 /* hidapi.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A75FDB8023E4C74400529352 /* hidapi */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A75FDB8923E4C74400529352 /* Build configuration list for PBXNativeTarget "hidapi" */;
+ buildPhases = (
+ A75FDB8123E4C74400529352 /* Headers */,
+ A75FDB8323E4C74400529352 /* Sources */,
+ A75FDB8523E4C74400529352 /* Frameworks */,
+ A75FDB8823E4C74400529352 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = hidapi;
+ productName = hidapi;
+ productReference = A75FDB8C23E4C74400529352 /* hidapi.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A769B08223E259AE00872273 /* Static Library-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */;
+ buildPhases = (
+ A769B08323E259AE00872273 /* Headers */,
+ A769B17023E259AE00872273 /* Sources */,
+ A769B22E23E259AE00872273 /* Frameworks */,
+ A769B23923E259AE00872273 /* Rez */,
+ );
+ buildRules = (
+ );
+ comments = "This produces libsdl.a, which is the static build of SDL. You will have to link to the Cocoa and OpenGL frameworks in your application.";
+ dependencies = (
+ );
+ name = "Static Library-tvOS";
+ productInstallPath = /usr/local/lib;
+ productName = "Static Library";
+ productReference = A769B23D23E259AE00872273 /* libSDL2.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+ A7D88A1423E2437C00DCD162 /* Framework-iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A7D88B5123E2437C00DCD162 /* Build configuration list for PBXNativeTarget "Framework-iOS" */;
+ buildPhases = (
+ A7D88A1523E2437C00DCD162 /* Headers */,
+ A7D88ABE23E2437C00DCD162 /* Resources */,
+ A7D88ABF23E2437C00DCD162 /* Sources */,
+ A7D88B4623E2437C00DCD162 /* Frameworks */,
+ A75FDB9F23E4CAFA00529352 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ comments = "We recommend installing to /Library/Frameworks\nAn alternative is $(HOME)/Library/Frameworks for per-user if permissions are an issue.\n\nAdd the framework to the Groups & Files panel (under Linked Frameworks is a good place) and enable the check box for the targets that need to link to it. You can also manually add \"-framework SDL\" to your linker flags if you don't like the check box system.\n\nAdd /Library/Frameworks/SDL.framework/Headers to your header search path\nAdd /Library/Frameworks to your library search path\n(Adjust the two above if installed in $(HOME)/Library/Frameworks. You can also list both paths if you want robustness.)\n\nWe used to use an exports file. It was becoming a maintenance issue we kept neglecting, so we have removed it. If you need it back, set the \"Exported Symbols File\" option to:\n../../src/main/macosx/exports/SDL.x\n(You may need to regenerate the exports list. There is a Makefile in that directory that you can run from the command line to rebuild it.)\nLong term, we want to utilize gcc 4.0's new visibility feature (analogous to declspec on Windows). Other platforms would benefit from this change too. The downside is that we still use gcc 3.3 for the PowerPC build here so only our x86 builds will cull the symbols if we go down this route (and don't use the exports file).\n\n";
+ dependencies = (
+ );
+ name = "Framework-iOS";
+ productInstallPath = "@executable_path/../Frameworks";
+ productName = SDL;
+ productReference = A7D88B5423E2437C00DCD162 /* SDL2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A7D88BC923E24BED00DCD162 /* Framework-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A7D88D1223E24BED00DCD162 /* Build configuration list for PBXNativeTarget "Framework-tvOS" */;
+ buildPhases = (
+ A7D88BCA23E24BED00DCD162 /* Headers */,
+ A7D88C7723E24BED00DCD162 /* Resources */,
+ A7D88C7823E24BED00DCD162 /* Sources */,
+ A7D88D0423E24BED00DCD162 /* Frameworks */,
+ A75FDBA223E4CAFF00529352 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ comments = "We recommend installing to /Library/Frameworks\nAn alternative is $(HOME)/Library/Frameworks for per-user if permissions are an issue.\n\nAdd the framework to the Groups & Files panel (under Linked Frameworks is a good place) and enable the check box for the targets that need to link to it. You can also manually add \"-framework SDL\" to your linker flags if you don't like the check box system.\n\nAdd /Library/Frameworks/SDL.framework/Headers to your header search path\nAdd /Library/Frameworks to your library search path\n(Adjust the two above if installed in $(HOME)/Library/Frameworks. You can also list both paths if you want robustness.)\n\nWe used to use an exports file. It was becoming a maintenance issue we kept neglecting, so we have removed it. If you need it back, set the \"Exported Symbols File\" option to:\n../../src/main/macosx/exports/SDL.x\n(You may need to regenerate the exports list. There is a Makefile in that directory that you can run from the command line to rebuild it.)\nLong term, we want to utilize gcc 4.0's new visibility feature (analogous to declspec on Windows). Other platforms would benefit from this change too. The downside is that we still use gcc 3.3 for the PowerPC build here so only our x86 builds will cull the symbols if we go down this route (and don't use the exports file).\n\n";
+ dependencies = (
+ );
+ name = "Framework-tvOS";
+ productInstallPath = "@executable_path/../Frameworks";
+ productName = SDL;
+ productReference = A7D88D1523E24BED00DCD162 /* SDL2.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A7D88D1723E24D3B00DCD162 /* Static Library-iOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A7D88E5123E24D3B00DCD162 /* Build configuration list for PBXNativeTarget "Static Library-iOS" */;
+ buildPhases = (
+ A7D88D1823E24D3B00DCD162 /* Headers */,
+ A7D88DBC23E24D3B00DCD162 /* Sources */,
+ A7D88E4523E24D3B00DCD162 /* Frameworks */,
+ A7D88E5023E24D3B00DCD162 /* Rez */,
+ );
+ buildRules = (
+ );
+ comments = "This produces libsdl.a, which is the static build of SDL. You will have to link to the Cocoa and OpenGL frameworks in your application.";
+ dependencies = (
+ );
+ name = "Static Library-iOS";
+ productInstallPath = /usr/local/lib;
+ productName = "Static Library";
+ productReference = A7D88E5423E24D3B00DCD162 /* libSDL2.a */;
+ productType = "com.apple.product-type.library.static";
+ };
BECDF5FE0761BA81005FE872 /* Framework */ = {
isa = PBXNativeTarget;
buildConfigurationList = 0073177A0858DB0500B2BC32 /* Build configuration list for PBXNativeTarget "Framework" */;
@@ -2531,6 +8046,7 @@
BECDF62A0761BA81005FE872 /* Resources */,
BECDF62C0761BA81005FE872 /* Sources */,
BECDF6680761BA81005FE872 /* Frameworks */,
+ A75FDB9C23E4CAEF00529352 /* Embed Frameworks */,
);
buildRules = (
);
@@ -2572,12 +8088,13 @@
buildRules = (
);
dependencies = (
+ F3190017240CA3BA00ED104F /* PBXTargetDependency */,
BECDF6C60761BA81005FE872 /* PBXTargetDependency */,
);
name = "Standard DMG";
productInstallPath = /usr/local/bin;
productName = "Standard Package";
- productReference = BECDF6BE0761BA81005FE872 /* Standard DMG */;
+ productReference = BECDF6BE0761BA81005FE872 /* SDL2 */;
productType = "com.apple.product-type.tool";
};
DB313F7217554B71006C0E22 /* Shared Library */ = {
@@ -2606,7 +8123,12 @@
0867D690FE84028FC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1000;
+ LastUpgradeCheck = 1130;
+ TargetAttributes = {
+ A75FDB4823E399AC00529352 = {
+ CreatedOnToolsVersion = 11.3.1;
+ };
+ };
};
buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */;
compatibilityVersion = "Xcode 3.2";
@@ -2614,9 +8136,8 @@
hasScannedForEncodings = 1;
knownRegions = (
English,
- Japanese,
- French,
- German,
+ en,
+ Base,
);
mainGroup = 0867D691FE84028FC02AAC07 /* SDLFramework */;
productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
@@ -2624,18 +8145,83 @@
projectRoot = "";
targets = (
BECDF5FE0761BA81005FE872 /* Framework */,
+ A7D88A1423E2437C00DCD162 /* Framework-iOS */,
+ A7D88BC923E24BED00DCD162 /* Framework-tvOS */,
BECDF66D0761BA81005FE872 /* Static Library */,
+ A7D88D1723E24D3B00DCD162 /* Static Library-iOS */,
+ A769B08223E259AE00872273 /* Static Library-tvOS */,
DB313F7217554B71006C0E22 /* Shared Library */,
+ A75FCCFB23E25AB700529352 /* Shared Library-iOS */,
+ A75FCEB423E25AC700529352 /* Shared Library-tvOS */,
BECDF6BB0761BA81005FE872 /* Standard DMG */,
+ A75FDB8023E4C74400529352 /* hidapi */,
+ A75FDB4823E399AC00529352 /* hidapi-iOS */,
+ A75FDB6223E3A2C900529352 /* hidapi-tvOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ A75FDB4723E399AC00529352 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDBB223E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
+ A75FDBA923E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
+ A75FDBAC23E4CB7000529352 /* AUTHORS.txt in Resources */,
+ A75FDBB523E4CB7000529352 /* LICENSE.txt in Resources */,
+ A75FDBAF23E4CB7000529352 /* LICENSE-orig.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB6A23E3A2C900529352 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDBB323E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
+ A75FDBAA23E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
+ A75FDBAD23E4CB7000529352 /* AUTHORS.txt in Resources */,
+ A75FDBB623E4CB7000529352 /* LICENSE.txt in Resources */,
+ A75FDBB023E4CB7000529352 /* LICENSE-orig.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB8823E4C74400529352 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDBB123E4CB7000529352 /* LICENSE-gpl3.txt in Resources */,
+ A75FDBA823E4CB7000529352 /* LICENSE-bsd.txt in Resources */,
+ A75FDBAB23E4CB7000529352 /* AUTHORS.txt in Resources */,
+ A75FDBB423E4CB7000529352 /* LICENSE.txt in Resources */,
+ A75FDBAE23E4CB7000529352 /* LICENSE-orig.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88ABE23E2437C00DCD162 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDBBA23E4CBC700529352 /* ReadMe.txt in Resources */,
+ A75FDBB923E4CBC700529352 /* License.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88C7723E24BED00DCD162 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDBBC23E4CBC800529352 /* ReadMe.txt in Resources */,
+ A75FDBBB23E4CBC800529352 /* License.txt in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
BECDF62A0761BA81005FE872 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ A75FDBB823E4CBC700529352 /* ReadMe.txt in Resources */,
+ A75FDBB723E4CBC700529352 /* License.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2642,6 +8228,34 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXRezBuildPhase section */
+ A75FCEAF23E25AB700529352 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FD06823E25AC700529352 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A769B23923E259AE00872273 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88E5023E24D3B00DCD162 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
BECDF6B20761BA81005FE872 /* Rez */ = {
isa = PBXRezBuildPhase;
buildActionMask = 2147483647;
@@ -2666,425 +8280,1783 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "# Sign framework\nif [ \"$SDL_CODESIGN_IDENTITY\" != \"\" ]; then\n codesign --force --deep --sign \"$SDL_CODESIGN_IDENTITY\" $TARGET_BUILD_DIR/SDL2.framework/Versions/A || exit $?\nfi\n\n# clean up the framework, remove headers, extra files\nmkdir -p build/dmg-tmp\ncp -r $TARGET_BUILD_DIR/SDL2.framework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL2 -srcfolder build/dmg-tmp build/SDL2.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
+ shellScript = "# Sign framework\nif [ \"$SDL_CODESIGN_IDENTITY\" != \"\" ]; then\n codesign --force --deep --sign \"$SDL_CODESIGN_IDENTITY\" $TARGET_BUILD_DIR/SDL2.framework/Versions/A || exit $?\nfi\n\n# clean up the framework, remove headers, extra files\nmkdir -p build/dmg-tmp\ncp -a $TARGET_BUILD_DIR/SDL2.framework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL2 -srcfolder build/dmg-tmp build/SDL2.dmg\n\n# clean up\nrm -rf build/dmg-tmp\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- BECDF62C0761BA81005FE872 /* Sources */ = {
+ A75FCDE823E25AB700529352 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 04BDFFFB12E6671800899322 /* SDL_atomic.c in Sources */,
- 04BDFFFC12E6671800899322 /* SDL_spinlock.c in Sources */,
- 5C2EF6A21FC987C6003F5197 /* SDL_shaders_gles2.c in Sources */,
- 56115BBB1DF72C6D00F47E1E /* SDL_dataqueue.c in Sources */,
- 04BD000812E6671800899322 /* SDL_diskaudio.c in Sources */,
- 04BD001012E6671800899322 /* SDL_dummyaudio.c in Sources */,
- 04BD002612E6671800899322 /* SDL_audio.c in Sources */,
- 04BD002812E6671800899322 /* SDL_audiocvt.c in Sources */,
- 04BD002912E6671800899322 /* SDL_audiodev.c in Sources */,
- 04BD002C12E6671800899322 /* SDL_audiotypecvt.c in Sources */,
- 04BD002D12E6671800899322 /* SDL_mixer.c in Sources */,
- 04BD003512E6671800899322 /* SDL_wave.c in Sources */,
- 04BD004112E6671800899322 /* SDL_cpuinfo.c in Sources */,
- 04BD004812E6671800899322 /* SDL_clipboardevents.c in Sources */,
- 04BD004A12E6671800899322 /* SDL_events.c in Sources */,
- A704172620F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */,
- 04BD004C12E6671800899322 /* SDL_gesture.c in Sources */,
- 04BD004E12E6671800899322 /* SDL_keyboard.c in Sources */,
- 04BD005012E6671800899322 /* SDL_mouse.c in Sources */,
- 04BD005212E6671800899322 /* SDL_quit.c in Sources */,
- 04BD005412E6671800899322 /* SDL_touch.c in Sources */,
- 04BD005612E6671800899322 /* SDL_windowevents.c in Sources */,
- 04BD005912E6671800899322 /* SDL_rwopsbundlesupport.m in Sources */,
- 04BD005A12E6671800899322 /* SDL_rwops.c in Sources */,
- 04BD005B12E6671800899322 /* SDL_syshaptic.c in Sources */,
- 04BD005F12E6671800899322 /* SDL_haptic.c in Sources */,
- 4D1664551EDD60AD003DE88E /* SDL_cocoavulkan.m in Sources */,
- 04BD006612E6671800899322 /* SDL_sysjoystick.c in Sources */,
- 04BD007012E6671800899322 /* SDL_joystick.c in Sources */,
- 04BD008812E6671800899322 /* SDL_sysloadso.c in Sources */,
- 04BD009412E6671800899322 /* SDL_syspower.c in Sources */,
- 04BD009612E6671800899322 /* SDL_power.c in Sources */,
- 04BD009C12E6671800899322 /* SDL_assert.c in Sources */,
- 4D1664531EDD60AD003DE88E /* SDL_cocoametalview.m in Sources */,
- 04BD009F12E6671800899322 /* SDL_error.c in Sources */,
- 04BD00A212E6671800899322 /* SDL.c in Sources */,
- 04BD00A312E6671800899322 /* SDL_getenv.c in Sources */,
- 04BD00A412E6671800899322 /* SDL_iconv.c in Sources */,
- 04BD00A512E6671800899322 /* SDL_malloc.c in Sources */,
- 04BD00A612E6671800899322 /* SDL_qsort.c in Sources */,
- 04BD00A712E6671800899322 /* SDL_stdlib.c in Sources */,
- 04BD00A812E6671800899322 /* SDL_string.c in Sources */,
- 04BD00BD12E6671800899322 /* SDL_syscond.c in Sources */,
- 04BD00BE12E6671800899322 /* SDL_sysmutex.c in Sources */,
- FABA34C71D8B5DB100915323 /* SDL_coreaudio.m in Sources */,
- 04BD00C012E6671800899322 /* SDL_syssem.c in Sources */,
- 04BD00C112E6671800899322 /* SDL_systhread.c in Sources */,
- 04BD00CA12E6671800899322 /* SDL_thread.c in Sources */,
- 04BD00D712E6671800899322 /* SDL_timer.c in Sources */,
- 04BD00D912E6671800899322 /* SDL_systimer.c in Sources */,
- 04BD00F412E6671800899322 /* SDL_cocoaclipboard.m in Sources */,
- 04BD00F612E6671800899322 /* SDL_cocoaevents.m in Sources */,
- 04BD00F812E6671800899322 /* SDL_cocoakeyboard.m in Sources */,
- AA9A7F151FB0209D00FED37F /* SDL_yuv.c in Sources */,
- A704171A20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */,
- 04BD00FA12E6671800899322 /* SDL_cocoamodes.m in Sources */,
- 4D16644F1EDD6023003DE88E /* SDL_vulkan_utils.c in Sources */,
- 04BD00FC12E6671800899322 /* SDL_cocoamouse.m in Sources */,
- 04BD00FE12E6671800899322 /* SDL_cocoaopengl.m in Sources */,
- 04BD010012E6671800899322 /* SDL_cocoashape.m in Sources */,
- 04BD010212E6671800899322 /* SDL_cocoavideo.m in Sources */,
- 04BD010412E6671800899322 /* SDL_cocoawindow.m in Sources */,
- 04BD011712E6671800899322 /* SDL_nullevents.c in Sources */,
- A704172320F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */,
- 04BD011B12E6671800899322 /* SDL_nullvideo.c in Sources */,
- 04BD017512E6671800899322 /* SDL_blit.c in Sources */,
- 04BD017712E6671800899322 /* SDL_blit_0.c in Sources */,
- 04BD017812E6671800899322 /* SDL_blit_1.c in Sources */,
- AA9A7F121FB0206400FED37F /* yuv_rgb.c in Sources */,
- 04BD017912E6671800899322 /* SDL_blit_A.c in Sources */,
- 04BD017A12E6671800899322 /* SDL_blit_auto.c in Sources */,
- 04BD017C12E6671800899322 /* SDL_blit_copy.c in Sources */,
- A704172020F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */,
- A704170920F09A9800A82227 /* hid.c in Sources */,
- 04BD017E12E6671800899322 /* SDL_blit_N.c in Sources */,
- 04BD017F12E6671800899322 /* SDL_blit_slow.c in Sources */,
- 04BD018112E6671800899322 /* SDL_bmp.c in Sources */,
- 04BD018212E6671800899322 /* SDL_clipboard.c in Sources */,
- 04BD018712E6671800899322 /* SDL_fillrect.c in Sources */,
- 04BD018C12E6671800899322 /* SDL_pixels.c in Sources */,
- 04BD018E12E6671800899322 /* SDL_rect.c in Sources */,
- 04BD019612E6671800899322 /* SDL_RLEaccel.c in Sources */,
- A704171420F09AC900A82227 /* SDL_hidapijoystick.c in Sources */,
- 04BD019812E6671800899322 /* SDL_shape.c in Sources */,
- 04BD019A12E6671800899322 /* SDL_stretch.c in Sources */,
- 04BD019B12E6671800899322 /* SDL_surface.c in Sources */,
- 04BD019D12E6671800899322 /* SDL_video.c in Sources */,
- 04BD01DB12E6671800899322 /* imKStoUCS.c in Sources */,
- 04BD01DD12E6671800899322 /* SDL_x11clipboard.c in Sources */,
- 04BD01DF12E6671800899322 /* SDL_x11dyn.c in Sources */,
- 5C2EF6A01FC987C6003F5197 /* SDL_render_gles2.c in Sources */,
- 04BD01E112E6671800899322 /* SDL_x11events.c in Sources */,
- 04BD01E512E6671800899322 /* SDL_x11keyboard.c in Sources */,
- 04BD01E712E6671800899322 /* SDL_x11modes.c in Sources */,
- 04BD01E912E6671800899322 /* SDL_x11mouse.c in Sources */,
- 04BD01EB12E6671800899322 /* SDL_x11opengl.c in Sources */,
- 04BD01ED12E6671800899322 /* SDL_x11opengles.c in Sources */,
- 04BD01F112E6671800899322 /* SDL_x11shape.c in Sources */,
- 04BD01F412E6671800899322 /* SDL_x11touch.c in Sources */,
- 04BD01F612E6671800899322 /* SDL_x11video.c in Sources */,
- 04BD01F812E6671800899322 /* SDL_x11window.c in Sources */,
- 041B2CA512FA0D680087D585 /* SDL_render.c in Sources */,
- 04409B9412FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */,
- 04F7803A12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */,
- 04F7804912FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */,
- AADC5A441FDA035D00960936 /* SDL_render_metal.m in Sources */,
- 04F7804B12FB74A200FC43C0 /* SDL_blendline.c in Sources */,
- 04F7804D12FB74A200FC43C0 /* SDL_blendpoint.c in Sources */,
- F30D9C93212CABDC0047DF2E /* SDL_dummysensor.c in Sources */,
- 5C2EF6F81FC9EE35003F5197 /* SDL_egl.c in Sources */,
- 04F7805012FB74A200FC43C0 /* SDL_drawline.c in Sources */,
- 04F7805212FB74A200FC43C0 /* SDL_drawpoint.c in Sources */,
- 0442EC1812FE1BBA004C9285 /* SDL_render_gl.c in Sources */,
- F30D9CD0212EB4810047DF2E /* SDL_displayevents.c in Sources */,
- 0442EC1D12FE1BCB004C9285 /* SDL_render_sw.c in Sources */,
- 0442EC5A12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */,
- 0442EC5F12FE1C75004C9285 /* SDL_hints.c in Sources */,
- 56A67024185654B40007D20F /* SDL_dynapi.c in Sources */,
- F30D9C8A212BC94F0047DF2E /* SDL_sensor.c in Sources */,
- 04BAC0C81300C2160055DE28 /* SDL_log.c in Sources */,
- 5C2EF6EE1FC9D0ED003F5197 /* SDL_cocoaopengles.m in Sources */,
- 0435673E1303160F00BA5428 /* SDL_shaders_gl.c in Sources */,
- 566CDE90148F0AC200C5A9BB /* SDL_dropevents.c in Sources */,
- AA628ACA159367B7005138DD /* SDL_rotate.c in Sources */,
- AA628AD1159367F2005138DD /* SDL_x11xinput2.c in Sources */,
- AA9E4093163BE51E007A2AD0 /* SDL_x11messagebox.c in Sources */,
- AABCC38F164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */,
- AA0AD09D16648D1700CE5896 /* SDL_gamecontroller.c in Sources */,
- AA0F8491178D5ECC00823F9D /* SDL_systls.c in Sources */,
- D55A1B82179F262300625D7C /* SDL_cocoamousetap.m in Sources */,
- 567E2F1C17C44BB2005F1892 /* SDL_sysfilesystem.m in Sources */,
+ A75FCDE923E25AB700529352 /* SDL_drawline.c in Sources */,
+ A75FCDEA23E25AB700529352 /* SDL_yuv.c in Sources */,
+ A75FCDEB23E25AB700529352 /* SDL_sysfilesystem.m in Sources */,
+ A75FCDEC23E25AB700529352 /* e_pow.c in Sources */,
+ A75FCDED23E25AB700529352 /* SDL_systls.c in Sources */,
+ A75FCDEE23E25AB700529352 /* SDL_vulkan_utils.c in Sources */,
+ A75FCDEF23E25AB700529352 /* SDL_spinlock.c in Sources */,
+ A75FDBD523EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A75FCDF023E25AB700529352 /* s_atan.c in Sources */,
+ A75FCDF123E25AB700529352 /* SDL_sysloadso.c in Sources */,
+ A75FCDF223E25AB700529352 /* SDL_render_metal.m in Sources */,
+ A75FCDF323E25AB700529352 /* SDL_clipboard.c in Sources */,
+ A75FCDF423E25AB700529352 /* SDL_cocoaevents.m in Sources */,
+ A75FCDF523E25AB700529352 /* SDL_x11messagebox.c in Sources */,
+ A75FCDF623E25AB700529352 /* SDL_audiocvt.c in Sources */,
+ A75FCDF723E25AB700529352 /* SDL_shape.c in Sources */,
+ A75FCDF823E25AB700529352 /* SDL_rotate.c in Sources */,
+ A75FCDF923E25AB700529352 /* SDL_coremotionsensor.m in Sources */,
+ A75FDAB123E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A75FCDFA23E25AB700529352 /* SDL_touch.c in Sources */,
+ A75FCDFB23E25AB700529352 /* SDL_x11events.c in Sources */,
+ A75FCDFC23E25AB700529352 /* SDL_uikitmessagebox.m in Sources */,
+ A75FCDFD23E25AB700529352 /* SDL_thread.c in Sources */,
+ A75FCDFE23E25AB700529352 /* SDL_hidapi_xbox360w.c in Sources */,
+ A75FCDFF23E25AB700529352 /* SDL_atomic.c in Sources */,
+ A75FCE0023E25AB700529352 /* SDL_displayevents.c in Sources */,
+ A75FCE0123E25AB700529352 /* SDL_cocoamousetap.m in Sources */,
+ A75FCE0223E25AB700529352 /* SDL_log.c in Sources */,
+ A75FCE0323E25AB700529352 /* SDL_cocoaopengl.m in Sources */,
+ A75FCE0423E25AB700529352 /* SDL_offscreenframebuffer.c in Sources */,
+ A75FCE0523E25AB700529352 /* yuv_rgb.c in Sources */,
+ A75FCE0623E25AB700529352 /* SDL_render_gles.c in Sources */,
+ A75FCE0723E25AB700529352 /* SDL_systhread.c in Sources */,
+ A75FCE0823E25AB700529352 /* SDL_windowevents.c in Sources */,
+ A75FCE0923E25AB700529352 /* s_scalbn.c in Sources */,
+ A75FCE0A23E25AB700529352 /* SDL_timer.c in Sources */,
+ A75FCE0B23E25AB700529352 /* SDL_blendpoint.c in Sources */,
+ A75FCE0C23E25AB700529352 /* SDL_gamecontroller.c in Sources */,
+ A75FCE0D23E25AB700529352 /* SDL_systimer.c in Sources */,
+ A75FCE0E23E25AB700529352 /* SDL_uikitclipboard.m in Sources */,
+ A75FCE0F23E25AB700529352 /* SDL_render_sw.c in Sources */,
+ A75FCE1023E25AB700529352 /* SDL_x11video.c in Sources */,
+ A75FCE1123E25AB700529352 /* SDL_syssem.c in Sources */,
+ A75FCE1223E25AB700529352 /* SDL_hidapi_xbox360.c in Sources */,
+ A75FCE1323E25AB700529352 /* SDL_coreaudio.m in Sources */,
+ A75FCE1423E25AB700529352 /* SDL_blendline.c in Sources */,
+ A75FCE1523E25AB700529352 /* SDL_blit_A.c in Sources */,
+ A75FCE1623E25AB700529352 /* SDL_d3dmath.c in Sources */,
+ A75FCE1723E25AB700529352 /* SDL_x11mouse.c in Sources */,
+ A75FCE1823E25AB700529352 /* SDL_nullvideo.c in Sources */,
+ A75FCE1923E25AB700529352 /* SDL_offscreenevents.c in Sources */,
+ A75FCE1A23E25AB700529352 /* SDL_uikitview.m in Sources */,
+ A75FCE1B23E25AB700529352 /* SDL_nullevents.c in Sources */,
+ A75FCE1C23E25AB700529352 /* SDL_audiodev.c in Sources */,
+ A75FCE1D23E25AB700529352 /* SDL_cocoaclipboard.m in Sources */,
+ A75FCE1E23E25AB700529352 /* SDL_blit_slow.c in Sources */,
+ A75FCE1F23E25AB700529352 /* s_copysign.c in Sources */,
+ A75FCE2023E25AB700529352 /* SDL_haptic.c in Sources */,
+ A75FCE2123E25AB700529352 /* SDL_uikitvulkan.m in Sources */,
+ A75FCE2223E25AB700529352 /* SDL_x11modes.c in Sources */,
+ A75FCE2323E25AB700529352 /* SDL_cocoametalview.m in Sources */,
+ A75FCE2423E25AB700529352 /* SDL_audiotypecvt.c in Sources */,
+ A75FCE2523E25AB700529352 /* SDL_uikitevents.m in Sources */,
+ A75FCE2623E25AB700529352 /* SDL_uikitmodes.m in Sources */,
+ A75FCE2723E25AB700529352 /* SDL_blit_N.c in Sources */,
+ A75FCE2823E25AB700529352 /* SDL_dropevents.c in Sources */,
+ A75FCE2923E25AB700529352 /* e_atan2.c in Sources */,
+ A75FCE2A23E25AB700529352 /* s_sin.c in Sources */,
+ A75FCE2B23E25AB700529352 /* SDL_power.c in Sources */,
+ A75FCE2C23E25AB700529352 /* SDL_cocoakeyboard.m in Sources */,
+ A75FCE2D23E25AB700529352 /* SDL_dynapi.c in Sources */,
+ A75FCE2E23E25AB700529352 /* SDL_shaders_gl.c in Sources */,
+ A75FCE2F23E25AB700529352 /* e_log.c in Sources */,
+ A75FCE3023E25AB700529352 /* SDL_cocoamessagebox.m in Sources */,
+ A75FCE3123E25AB700529352 /* SDL_blendfillrect.c in Sources */,
+ A75FCE3223E25AB700529352 /* SDL_uikitvideo.m in Sources */,
+ A75FCE3323E25AB700529352 /* SDL_cocoashape.m in Sources */,
+ A75FCE3423E25AB700529352 /* SDL_cocoamouse.m in Sources */,
+ A75FCE3523E25AB700529352 /* SDL_error.c in Sources */,
+ A75FCE3623E25AB700529352 /* SDL_blit.c in Sources */,
+ A75FCE3723E25AB700529352 /* SDL_rwops.c in Sources */,
+ A75FCE3823E25AB700529352 /* SDL_uikitviewcontroller.m in Sources */,
+ A75FCE3923E25AB700529352 /* s_cos.c in Sources */,
+ A75FCE3A23E25AB700529352 /* SDL_yuv_sw.c in Sources */,
+ A75FCE3B23E25AB700529352 /* SDL_wave.c in Sources */,
+ A75FCE3C23E25AB700529352 /* s_tan.c in Sources */,
+ A75FCE3D23E25AB700529352 /* SDL_hints.c in Sources */,
+ A75FCE3E23E25AB700529352 /* SDL_hidapi_ps4.c in Sources */,
+ A75FCE3F23E25AB700529352 /* SDL_pixels.c in Sources */,
+ A75FCE4023E25AB700529352 /* SDL_x11clipboard.c in Sources */,
+ A75FCE4123E25AB700529352 /* SDL_sysloadso.c in Sources */,
+ A75FCE4223E25AB700529352 /* SDL_x11xinput2.c in Sources */,
+ A75FCE4323E25AB700529352 /* SDL_syspower.c in Sources */,
+ A75FCE4423E25AB700529352 /* SDL_x11touch.c in Sources */,
+ A75FCE4523E25AB700529352 /* SDL_iconv.c in Sources */,
+ A75FCE4623E25AB700529352 /* s_fabs.c in Sources */,
+ A75FCE4723E25AB700529352 /* SDL_x11shape.c in Sources */,
+ A75FCE4823E25AB700529352 /* imKStoUCS.c in Sources */,
+ A75FCE4923E25AB700529352 /* SDL_shaders_metal.metal in Sources */,
+ A75FCE4A23E25AB700529352 /* SDL_uikitwindow.m in Sources */,
+ A75FCE4B23E25AB700529352 /* SDL_render.c in Sources */,
+ A75FCE4C23E25AB700529352 /* SDL_stretch.c in Sources */,
+ A75FCE4D23E25AB700529352 /* s_floor.c in Sources */,
+ A75FCE4E23E25AB700529352 /* SDL_blit_copy.c in Sources */,
+ A75FCE4F23E25AB700529352 /* e_fmod.c in Sources */,
+ A75FCE5023E25AB700529352 /* SDL_syspower.m in Sources */,
+ A75FCE5123E25AB700529352 /* e_log10.c in Sources */,
+ A75FCE5223E25AB700529352 /* SDL_uikitopenglview.m in Sources */,
+ A75FCE5323E25AB700529352 /* SDL_mixer.c in Sources */,
+ A75FCE5423E25AB700529352 /* SDL_events.c in Sources */,
+ A75FCE5523E25AB700529352 /* SDL_blit_0.c in Sources */,
+ A75FCE5623E25AB700529352 /* k_tan.c in Sources */,
+ A75FCE5723E25AB700529352 /* SDL_x11vulkan.c in Sources */,
+ A75FCE5823E25AB700529352 /* SDL_diskaudio.c in Sources */,
+ A75FCE5923E25AB700529352 /* SDL_egl.c in Sources */,
+ A75FCE5A23E25AB700529352 /* SDL_RLEaccel.c in Sources */,
+ A75FCE5C23E25AB700529352 /* SDL_assert.c in Sources */,
+ A75FCE5D23E25AB700529352 /* SDL_bmp.c in Sources */,
+ A75FCE5E23E25AB700529352 /* SDL_stdlib.c in Sources */,
+ A75FCE5F23E25AB700529352 /* SDL_dummyaudio.c in Sources */,
+ A75FCE6023E25AB700529352 /* SDL_fillrect.c in Sources */,
+ A75FCE6123E25AB700529352 /* SDL_nullframebuffer.c in Sources */,
+ A75FCE6223E25AB700529352 /* SDL_dummysensor.c in Sources */,
+ A75FCE6323E25AB700529352 /* SDL_string.c in Sources */,
+ A75FCE6423E25AB700529352 /* SDL_render_gl.c in Sources */,
+ A75FCE6523E25AB700529352 /* SDL_uikitopengles.m in Sources */,
+ A75FCE6623E25AB700529352 /* SDL_x11opengles.c in Sources */,
+ A75FCE6723E25AB700529352 /* SDL_cocoamodes.m in Sources */,
+ A75FCE6823E25AB700529352 /* k_rem_pio2.c in Sources */,
+ A75FCE6923E25AB700529352 /* SDL_sysjoystick.c in Sources */,
+ A75FCE6A23E25AB700529352 /* SDL_gesture.c in Sources */,
+ A75FCE6B23E25AB700529352 /* SDL_getenv.c in Sources */,
+ A75FCE6C23E25AB700529352 /* SDL_hidapi_gamecube.c in Sources */,
+ A75FCE6D23E25AB700529352 /* SDL_joystick.c in Sources */,
+ A75FCE6E23E25AB700529352 /* SDL_render_gles2.c in Sources */,
+ A75FCE6F23E25AB700529352 /* SDL_surface.c in Sources */,
+ A75FDAAA23E2792500529352 /* hid.m in Sources */,
+ A75FCE7023E25AB700529352 /* SDL_hidapi_xboxone.c in Sources */,
+ A75FCE7123E25AB700529352 /* SDL_blit_auto.c in Sources */,
+ A75FCE7223E25AB700529352 /* SDL_x11keyboard.c in Sources */,
+ A75FCE7323E25AB700529352 /* SDL_keyboard.c in Sources */,
+ A75FCE7523E25AB700529352 /* SDL_rect.c in Sources */,
+ A75FCE7623E25AB700529352 /* SDL_cocoaopengles.m in Sources */,
+ A75FCE7723E25AB700529352 /* SDL_qsort.c in Sources */,
+ A75FCE7823E25AB700529352 /* SDL_hidapi_switch.c in Sources */,
+ A75FCE7923E25AB700529352 /* SDL_strtokr.c in Sources */,
+ A75FCE7A23E25AB700529352 /* SDL_clipboardevents.c in Sources */,
+ A75FCE7B23E25AB700529352 /* SDL_x11framebuffer.c in Sources */,
+ A75FCE7C23E25AB700529352 /* k_cos.c in Sources */,
+ A75FCE7D23E25AB700529352 /* SDL_hidapijoystick.c in Sources */,
+ A75FCE7E23E25AB700529352 /* SDL_malloc.c in Sources */,
+ A75FCE7F23E25AB700529352 /* SDL_audio.c in Sources */,
+ A75FCE8023E25AB700529352 /* SDL_sysfilesystem.c in Sources */,
+ A75FCE8123E25AB700529352 /* SDL_offscreenvideo.c in Sources */,
+ A75FCE8223E25AB700529352 /* SDL_syscond.c in Sources */,
+ A75FCE8323E25AB700529352 /* SDL_syshaptic.c in Sources */,
+ A75FCE8423E25AB700529352 /* e_exp.c in Sources */,
+ A75FCE8523E25AB700529352 /* SDL_quit.c in Sources */,
+ A75FCE8623E25AB700529352 /* SDL_cocoawindow.m in Sources */,
+ A75FCE8723E25AB700529352 /* SDL_sysmutex.c in Sources */,
+ A75FCE8823E25AB700529352 /* SDL_syshaptic.c in Sources */,
+ A75FCE8923E25AB700529352 /* SDL_rwopsbundlesupport.m in Sources */,
+ A75FCE8A23E25AB700529352 /* SDL_video.c in Sources */,
+ A75FCE8B23E25AB700529352 /* SDL_offscreenopengl.c in Sources */,
+ A75FCE8C23E25AB700529352 /* SDL_uikitmetalview.m in Sources */,
+ A75FCE8D23E25AB700529352 /* SDL_steamcontroller.c in Sources */,
+ A75FCE8E23E25AB700529352 /* SDL_shaders_gles2.c in Sources */,
+ A75FCE8F23E25AB700529352 /* SDL_blit_1.c in Sources */,
+ A75FDAC623E28BD900529352 /* SDL_sysjoystick.m in Sources */,
+ A75FCE9023E25AB700529352 /* SDL_x11dyn.c in Sources */,
+ A75FCE9123E25AB700529352 /* SDL_mouse.c in Sources */,
+ A75FCE9223E25AB700529352 /* e_rem_pio2.c in Sources */,
+ A75FCE9323E25AB700529352 /* SDL_dataqueue.c in Sources */,
+ A75FCE9423E25AB700529352 /* SDL_sysjoystick.c in Sources */,
+ A75FCE9523E25AB700529352 /* SDL_cpuinfo.c in Sources */,
+ A75FCE9623E25AB700529352 /* SDL_sensor.c in Sources */,
+ A75FCE9723E25AB700529352 /* SDL_x11window.c in Sources */,
+ A75FCE9823E25AB700529352 /* k_sin.c in Sources */,
+ A75FCE9923E25AB700529352 /* edid-parse.c in Sources */,
+ A75FCE9A23E25AB700529352 /* SDL_systimer.c in Sources */,
+ A75FCE9B23E25AB700529352 /* SDL_drawpoint.c in Sources */,
+ A75FCE9C23E25AB700529352 /* e_sqrt.c in Sources */,
+ A75FCE9D23E25AB700529352 /* SDL_cocoavideo.m in Sources */,
+ A75FCE9F23E25AB700529352 /* SDL.c in Sources */,
+ A75FCEA023E25AB700529352 /* SDL_x11opengl.c in Sources */,
+ A75FCEA123E25AB700529352 /* SDL_cocoavulkan.m in Sources */,
+ A75FCEA223E25AB700529352 /* SDL_uikitappdelegate.m in Sources */,
+ A75FCEA323E25AB700529352 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FCFA123E25AC700529352 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FCFA223E25AC700529352 /* SDL_drawline.c in Sources */,
+ A75FCFA323E25AC700529352 /* SDL_yuv.c in Sources */,
+ A75FCFA423E25AC700529352 /* SDL_sysfilesystem.m in Sources */,
+ A75FCFA523E25AC700529352 /* e_pow.c in Sources */,
+ A75FCFA623E25AC700529352 /* SDL_systls.c in Sources */,
+ A75FCFA723E25AC700529352 /* SDL_vulkan_utils.c in Sources */,
+ A75FCFA823E25AC700529352 /* SDL_spinlock.c in Sources */,
+ A75FDBD623EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A75FCFA923E25AC700529352 /* s_atan.c in Sources */,
+ A75FCFAA23E25AC700529352 /* SDL_sysloadso.c in Sources */,
+ A75FCFAB23E25AC700529352 /* SDL_render_metal.m in Sources */,
+ A75FCFAC23E25AC700529352 /* SDL_clipboard.c in Sources */,
+ A75FCFAD23E25AC700529352 /* SDL_cocoaevents.m in Sources */,
+ A75FCFAE23E25AC700529352 /* SDL_x11messagebox.c in Sources */,
+ A75FCFAF23E25AC700529352 /* SDL_audiocvt.c in Sources */,
+ A75FCFB023E25AC700529352 /* SDL_shape.c in Sources */,
+ A75FCFB123E25AC700529352 /* SDL_rotate.c in Sources */,
+ A75FCFB223E25AC700529352 /* SDL_coremotionsensor.m in Sources */,
+ A75FDAB223E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A75FCFB323E25AC700529352 /* SDL_touch.c in Sources */,
+ A75FCFB423E25AC700529352 /* SDL_x11events.c in Sources */,
+ A75FCFB523E25AC700529352 /* SDL_uikitmessagebox.m in Sources */,
+ A75FCFB623E25AC700529352 /* SDL_thread.c in Sources */,
+ A75FCFB723E25AC700529352 /* SDL_hidapi_xbox360w.c in Sources */,
+ A75FCFB823E25AC700529352 /* SDL_atomic.c in Sources */,
+ A75FCFB923E25AC700529352 /* SDL_displayevents.c in Sources */,
+ A75FCFBA23E25AC700529352 /* SDL_cocoamousetap.m in Sources */,
+ A75FCFBB23E25AC700529352 /* SDL_log.c in Sources */,
+ A75FCFBC23E25AC700529352 /* SDL_cocoaopengl.m in Sources */,
+ A75FCFBD23E25AC700529352 /* SDL_offscreenframebuffer.c in Sources */,
+ A75FCFBE23E25AC700529352 /* yuv_rgb.c in Sources */,
+ A75FCFBF23E25AC700529352 /* SDL_render_gles.c in Sources */,
+ A75FCFC023E25AC700529352 /* SDL_systhread.c in Sources */,
+ A75FCFC123E25AC700529352 /* SDL_windowevents.c in Sources */,
+ A75FCFC223E25AC700529352 /* s_scalbn.c in Sources */,
+ A75FCFC323E25AC700529352 /* SDL_timer.c in Sources */,
+ A75FCFC423E25AC700529352 /* SDL_blendpoint.c in Sources */,
+ A75FCFC523E25AC700529352 /* SDL_gamecontroller.c in Sources */,
+ A75FCFC623E25AC700529352 /* SDL_systimer.c in Sources */,
+ A75FCFC723E25AC700529352 /* SDL_uikitclipboard.m in Sources */,
+ A75FCFC823E25AC700529352 /* SDL_render_sw.c in Sources */,
+ A75FCFC923E25AC700529352 /* SDL_x11video.c in Sources */,
+ A75FCFCA23E25AC700529352 /* SDL_syssem.c in Sources */,
+ A75FCFCB23E25AC700529352 /* SDL_hidapi_xbox360.c in Sources */,
+ A75FCFCC23E25AC700529352 /* SDL_coreaudio.m in Sources */,
+ A75FCFCD23E25AC700529352 /* SDL_blendline.c in Sources */,
+ A75FCFCE23E25AC700529352 /* SDL_blit_A.c in Sources */,
+ A75FCFCF23E25AC700529352 /* SDL_d3dmath.c in Sources */,
+ A75FCFD023E25AC700529352 /* SDL_x11mouse.c in Sources */,
+ A75FCFD123E25AC700529352 /* SDL_nullvideo.c in Sources */,
+ A75FCFD223E25AC700529352 /* SDL_offscreenevents.c in Sources */,
+ A75FCFD323E25AC700529352 /* SDL_uikitview.m in Sources */,
+ A75FCFD423E25AC700529352 /* SDL_nullevents.c in Sources */,
+ A75FCFD523E25AC700529352 /* SDL_audiodev.c in Sources */,
+ A75FCFD623E25AC700529352 /* SDL_cocoaclipboard.m in Sources */,
+ A75FCFD723E25AC700529352 /* SDL_blit_slow.c in Sources */,
+ A75FCFD823E25AC700529352 /* s_copysign.c in Sources */,
+ A75FCFD923E25AC700529352 /* SDL_haptic.c in Sources */,
+ A75FCFDA23E25AC700529352 /* SDL_uikitvulkan.m in Sources */,
+ A75FCFDB23E25AC700529352 /* SDL_x11modes.c in Sources */,
+ A75FCFDC23E25AC700529352 /* SDL_cocoametalview.m in Sources */,
+ A75FCFDD23E25AC700529352 /* SDL_audiotypecvt.c in Sources */,
+ A75FCFDE23E25AC700529352 /* SDL_uikitevents.m in Sources */,
+ A75FCFDF23E25AC700529352 /* SDL_uikitmodes.m in Sources */,
+ A75FCFE023E25AC700529352 /* SDL_blit_N.c in Sources */,
+ A75FCFE123E25AC700529352 /* SDL_dropevents.c in Sources */,
+ A75FCFE223E25AC700529352 /* e_atan2.c in Sources */,
+ A75FCFE323E25AC700529352 /* s_sin.c in Sources */,
+ A75FCFE423E25AC700529352 /* SDL_power.c in Sources */,
+ A75FCFE523E25AC700529352 /* SDL_cocoakeyboard.m in Sources */,
+ A75FCFE623E25AC700529352 /* SDL_dynapi.c in Sources */,
+ A75FCFE723E25AC700529352 /* SDL_shaders_gl.c in Sources */,
+ A75FCFE823E25AC700529352 /* e_log.c in Sources */,
+ A75FCFE923E25AC700529352 /* SDL_cocoamessagebox.m in Sources */,
+ A75FCFEA23E25AC700529352 /* SDL_blendfillrect.c in Sources */,
+ A75FCFEB23E25AC700529352 /* SDL_uikitvideo.m in Sources */,
+ A75FCFEC23E25AC700529352 /* SDL_cocoashape.m in Sources */,
+ A75FCFED23E25AC700529352 /* SDL_cocoamouse.m in Sources */,
+ A75FCFEE23E25AC700529352 /* SDL_error.c in Sources */,
+ A75FCFEF23E25AC700529352 /* SDL_blit.c in Sources */,
+ A75FCFF023E25AC700529352 /* SDL_rwops.c in Sources */,
+ A75FCFF123E25AC700529352 /* SDL_uikitviewcontroller.m in Sources */,
+ A75FCFF223E25AC700529352 /* s_cos.c in Sources */,
+ A75FCFF323E25AC700529352 /* SDL_yuv_sw.c in Sources */,
+ A75FCFF423E25AC700529352 /* SDL_wave.c in Sources */,
+ A75FCFF523E25AC700529352 /* s_tan.c in Sources */,
+ A75FCFF623E25AC700529352 /* SDL_hints.c in Sources */,
+ A75FCFF723E25AC700529352 /* SDL_hidapi_ps4.c in Sources */,
+ A75FCFF823E25AC700529352 /* SDL_pixels.c in Sources */,
+ A75FCFF923E25AC700529352 /* SDL_x11clipboard.c in Sources */,
+ A75FCFFA23E25AC700529352 /* SDL_sysloadso.c in Sources */,
+ A75FCFFB23E25AC700529352 /* SDL_x11xinput2.c in Sources */,
+ A75FCFFC23E25AC700529352 /* SDL_syspower.c in Sources */,
+ A75FCFFD23E25AC700529352 /* SDL_x11touch.c in Sources */,
+ A75FCFFE23E25AC700529352 /* SDL_iconv.c in Sources */,
+ A75FCFFF23E25AC700529352 /* s_fabs.c in Sources */,
+ A75FD00023E25AC700529352 /* SDL_x11shape.c in Sources */,
+ A75FD00123E25AC700529352 /* imKStoUCS.c in Sources */,
+ A75FD00223E25AC700529352 /* SDL_shaders_metal.metal in Sources */,
+ A75FD00323E25AC700529352 /* SDL_uikitwindow.m in Sources */,
+ A75FD00423E25AC700529352 /* SDL_render.c in Sources */,
+ A75FD00523E25AC700529352 /* SDL_stretch.c in Sources */,
+ A75FD00623E25AC700529352 /* s_floor.c in Sources */,
+ A75FD00723E25AC700529352 /* SDL_blit_copy.c in Sources */,
+ A75FD00823E25AC700529352 /* e_fmod.c in Sources */,
+ A75FD00923E25AC700529352 /* SDL_syspower.m in Sources */,
+ A75FD00A23E25AC700529352 /* e_log10.c in Sources */,
+ A75FD00B23E25AC700529352 /* SDL_uikitopenglview.m in Sources */,
+ A75FD00C23E25AC700529352 /* SDL_mixer.c in Sources */,
+ A75FD00D23E25AC700529352 /* SDL_events.c in Sources */,
+ A75FD00E23E25AC700529352 /* SDL_blit_0.c in Sources */,
+ A75FD00F23E25AC700529352 /* k_tan.c in Sources */,
+ A75FD01023E25AC700529352 /* SDL_x11vulkan.c in Sources */,
+ A75FD01123E25AC700529352 /* SDL_diskaudio.c in Sources */,
+ A75FD01223E25AC700529352 /* SDL_egl.c in Sources */,
+ A75FD01323E25AC700529352 /* SDL_RLEaccel.c in Sources */,
+ A75FD01523E25AC700529352 /* SDL_assert.c in Sources */,
+ A75FD01623E25AC700529352 /* SDL_bmp.c in Sources */,
+ A75FD01723E25AC700529352 /* SDL_stdlib.c in Sources */,
+ A75FD01823E25AC700529352 /* SDL_dummyaudio.c in Sources */,
+ A75FD01923E25AC700529352 /* SDL_fillrect.c in Sources */,
+ A75FD01A23E25AC700529352 /* SDL_nullframebuffer.c in Sources */,
+ A75FD01B23E25AC700529352 /* SDL_dummysensor.c in Sources */,
+ A75FD01C23E25AC700529352 /* SDL_string.c in Sources */,
+ A75FD01D23E25AC700529352 /* SDL_render_gl.c in Sources */,
+ A75FD01E23E25AC700529352 /* SDL_uikitopengles.m in Sources */,
+ A75FD01F23E25AC700529352 /* SDL_x11opengles.c in Sources */,
+ A75FD02023E25AC700529352 /* SDL_cocoamodes.m in Sources */,
+ A75FD02123E25AC700529352 /* k_rem_pio2.c in Sources */,
+ A75FD02223E25AC700529352 /* SDL_sysjoystick.c in Sources */,
+ A75FD02323E25AC700529352 /* SDL_gesture.c in Sources */,
+ A75FD02423E25AC700529352 /* SDL_getenv.c in Sources */,
+ A75FD02523E25AC700529352 /* SDL_hidapi_gamecube.c in Sources */,
+ A75FD02623E25AC700529352 /* SDL_joystick.c in Sources */,
+ A75FD02723E25AC700529352 /* SDL_render_gles2.c in Sources */,
+ A75FD02823E25AC700529352 /* SDL_surface.c in Sources */,
+ A75FDAAB23E2792500529352 /* hid.m in Sources */,
+ A75FD02923E25AC700529352 /* SDL_hidapi_xboxone.c in Sources */,
+ A75FD02A23E25AC700529352 /* SDL_blit_auto.c in Sources */,
+ A75FD02B23E25AC700529352 /* SDL_x11keyboard.c in Sources */,
+ A75FD02C23E25AC700529352 /* SDL_keyboard.c in Sources */,
+ A75FD02E23E25AC700529352 /* SDL_rect.c in Sources */,
+ A75FD02F23E25AC700529352 /* SDL_cocoaopengles.m in Sources */,
+ A75FD03023E25AC700529352 /* SDL_qsort.c in Sources */,
+ A75FD03123E25AC700529352 /* SDL_hidapi_switch.c in Sources */,
+ A75FD03223E25AC700529352 /* SDL_strtokr.c in Sources */,
+ A75FD03323E25AC700529352 /* SDL_clipboardevents.c in Sources */,
+ A75FD03423E25AC700529352 /* SDL_x11framebuffer.c in Sources */,
+ A75FD03523E25AC700529352 /* k_cos.c in Sources */,
+ A75FD03623E25AC700529352 /* SDL_hidapijoystick.c in Sources */,
+ A75FD03723E25AC700529352 /* SDL_malloc.c in Sources */,
+ A75FD03823E25AC700529352 /* SDL_audio.c in Sources */,
+ A75FD03923E25AC700529352 /* SDL_sysfilesystem.c in Sources */,
+ A75FD03A23E25AC700529352 /* SDL_offscreenvideo.c in Sources */,
+ A75FD03B23E25AC700529352 /* SDL_syscond.c in Sources */,
+ A75FD03C23E25AC700529352 /* SDL_syshaptic.c in Sources */,
+ A75FD03D23E25AC700529352 /* e_exp.c in Sources */,
+ A75FD03E23E25AC700529352 /* SDL_quit.c in Sources */,
+ A75FD03F23E25AC700529352 /* SDL_cocoawindow.m in Sources */,
+ A75FD04023E25AC700529352 /* SDL_sysmutex.c in Sources */,
+ A75FD04123E25AC700529352 /* SDL_syshaptic.c in Sources */,
+ A75FD04223E25AC700529352 /* SDL_rwopsbundlesupport.m in Sources */,
+ A75FD04323E25AC700529352 /* SDL_video.c in Sources */,
+ A75FD04423E25AC700529352 /* SDL_offscreenopengl.c in Sources */,
+ A75FD04523E25AC700529352 /* SDL_uikitmetalview.m in Sources */,
+ A75FD04623E25AC700529352 /* SDL_steamcontroller.c in Sources */,
+ A75FD04723E25AC700529352 /* SDL_shaders_gles2.c in Sources */,
+ A75FD04823E25AC700529352 /* SDL_blit_1.c in Sources */,
+ A75FDAC823E28BD900529352 /* SDL_sysjoystick.m in Sources */,
+ A75FD04923E25AC700529352 /* SDL_x11dyn.c in Sources */,
+ A75FD04A23E25AC700529352 /* SDL_mouse.c in Sources */,
+ A75FD04B23E25AC700529352 /* e_rem_pio2.c in Sources */,
+ A75FD04C23E25AC700529352 /* SDL_dataqueue.c in Sources */,
+ A75FD04D23E25AC700529352 /* SDL_sysjoystick.c in Sources */,
+ A75FD04E23E25AC700529352 /* SDL_cpuinfo.c in Sources */,
+ A75FD04F23E25AC700529352 /* SDL_sensor.c in Sources */,
+ A75FD05023E25AC700529352 /* SDL_x11window.c in Sources */,
+ A75FD05123E25AC700529352 /* k_sin.c in Sources */,
+ A75FD05223E25AC700529352 /* edid-parse.c in Sources */,
+ A75FD05323E25AC700529352 /* SDL_systimer.c in Sources */,
+ A75FD05423E25AC700529352 /* SDL_drawpoint.c in Sources */,
+ A75FD05523E25AC700529352 /* e_sqrt.c in Sources */,
+ A75FD05623E25AC700529352 /* SDL_cocoavideo.m in Sources */,
+ A75FD05823E25AC700529352 /* SDL.c in Sources */,
+ A75FD05923E25AC700529352 /* SDL_x11opengl.c in Sources */,
+ A75FD05A23E25AC700529352 /* SDL_cocoavulkan.m in Sources */,
+ A75FD05B23E25AC700529352 /* SDL_uikitappdelegate.m in Sources */,
+ A75FD05C23E25AC700529352 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB4523E399AC00529352 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB5323E39D1C00529352 /* hid.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB6523E3A2C900529352 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB6623E3A2C900529352 /* hid.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A75FDB8323E4C74400529352 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A75FDB9323E4C8DB00529352 /* hid.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A769B17023E259AE00872273 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A769B17123E259AE00872273 /* SDL_drawline.c in Sources */,
+ A769B17223E259AE00872273 /* SDL_yuv.c in Sources */,
+ A769B17323E259AE00872273 /* SDL_sysfilesystem.m in Sources */,
+ A769B17423E259AE00872273 /* e_pow.c in Sources */,
+ A769B17523E259AE00872273 /* SDL_systls.c in Sources */,
+ A769B17623E259AE00872273 /* SDL_vulkan_utils.c in Sources */,
+ A769B17723E259AE00872273 /* SDL_spinlock.c in Sources */,
+ A769B17823E259AE00872273 /* s_atan.c in Sources */,
+ A769B17923E259AE00872273 /* SDL_sysloadso.c in Sources */,
+ A75FDAB023E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A769B17A23E259AE00872273 /* SDL_render_metal.m in Sources */,
+ A769B17B23E259AE00872273 /* SDL_clipboard.c in Sources */,
+ A769B17C23E259AE00872273 /* SDL_cocoaevents.m in Sources */,
+ A769B17D23E259AE00872273 /* SDL_x11messagebox.c in Sources */,
+ A769B17E23E259AE00872273 /* SDL_audiocvt.c in Sources */,
+ A769B17F23E259AE00872273 /* SDL_shape.c in Sources */,
+ A769B18023E259AE00872273 /* SDL_rotate.c in Sources */,
+ A769B18123E259AE00872273 /* SDL_coremotionsensor.m in Sources */,
+ A769B18223E259AE00872273 /* SDL_touch.c in Sources */,
+ A769B18423E259AE00872273 /* SDL_x11events.c in Sources */,
+ A769B18523E259AE00872273 /* SDL_uikitmessagebox.m in Sources */,
+ A769B18623E259AE00872273 /* SDL_thread.c in Sources */,
+ A769B18723E259AE00872273 /* SDL_hidapi_xbox360w.c in Sources */,
+ A769B18823E259AE00872273 /* SDL_atomic.c in Sources */,
+ A769B18923E259AE00872273 /* SDL_displayevents.c in Sources */,
+ A769B18A23E259AE00872273 /* SDL_cocoamousetap.m in Sources */,
+ A769B18B23E259AE00872273 /* SDL_log.c in Sources */,
+ A769B18C23E259AE00872273 /* SDL_cocoaopengl.m in Sources */,
+ A769B18D23E259AE00872273 /* SDL_offscreenframebuffer.c in Sources */,
+ A769B18E23E259AE00872273 /* yuv_rgb.c in Sources */,
+ A769B18F23E259AE00872273 /* SDL_render_gles.c in Sources */,
+ A769B19023E259AE00872273 /* SDL_systhread.c in Sources */,
+ A769B19123E259AE00872273 /* SDL_windowevents.c in Sources */,
+ A769B19223E259AE00872273 /* s_scalbn.c in Sources */,
+ A769B19323E259AE00872273 /* SDL_timer.c in Sources */,
+ A769B19423E259AE00872273 /* SDL_blendpoint.c in Sources */,
+ A769B19523E259AE00872273 /* SDL_gamecontroller.c in Sources */,
+ A769B19623E259AE00872273 /* SDL_systimer.c in Sources */,
+ A769B19723E259AE00872273 /* SDL_uikitclipboard.m in Sources */,
+ A769B19823E259AE00872273 /* SDL_render_sw.c in Sources */,
+ A769B19923E259AE00872273 /* SDL_x11video.c in Sources */,
+ A769B19A23E259AE00872273 /* SDL_syssem.c in Sources */,
+ A769B19B23E259AE00872273 /* SDL_hidapi_xbox360.c in Sources */,
+ A769B19C23E259AE00872273 /* SDL_coreaudio.m in Sources */,
+ A769B19D23E259AE00872273 /* SDL_blendline.c in Sources */,
+ A769B19E23E259AE00872273 /* SDL_blit_A.c in Sources */,
+ A769B19F23E259AE00872273 /* SDL_d3dmath.c in Sources */,
+ A769B1A023E259AE00872273 /* SDL_x11mouse.c in Sources */,
+ A769B1A123E259AE00872273 /* SDL_nullvideo.c in Sources */,
+ A769B1A223E259AE00872273 /* SDL_offscreenevents.c in Sources */,
+ A769B1A323E259AE00872273 /* SDL_uikitview.m in Sources */,
+ A769B1A423E259AE00872273 /* SDL_nullevents.c in Sources */,
+ A769B1A523E259AE00872273 /* SDL_audiodev.c in Sources */,
+ A769B1A623E259AE00872273 /* SDL_cocoaclipboard.m in Sources */,
+ A769B1A723E259AE00872273 /* SDL_blit_slow.c in Sources */,
+ A769B1A823E259AE00872273 /* s_copysign.c in Sources */,
+ A769B1A923E259AE00872273 /* SDL_haptic.c in Sources */,
+ A769B1AA23E259AE00872273 /* SDL_uikitvulkan.m in Sources */,
+ A769B1AB23E259AE00872273 /* SDL_x11modes.c in Sources */,
+ A769B1AC23E259AE00872273 /* SDL_cocoametalview.m in Sources */,
+ A769B1AD23E259AE00872273 /* SDL_audiotypecvt.c in Sources */,
+ A769B1AE23E259AE00872273 /* SDL_uikitevents.m in Sources */,
+ A769B1AF23E259AE00872273 /* SDL_uikitmodes.m in Sources */,
+ A769B1B023E259AE00872273 /* SDL_blit_N.c in Sources */,
+ A769B1B123E259AE00872273 /* SDL_dropevents.c in Sources */,
+ A769B1B223E259AE00872273 /* e_atan2.c in Sources */,
+ A769B1B323E259AE00872273 /* s_sin.c in Sources */,
+ A769B1B423E259AE00872273 /* SDL_power.c in Sources */,
+ A769B1B523E259AE00872273 /* SDL_cocoakeyboard.m in Sources */,
+ A769B1B623E259AE00872273 /* SDL_dynapi.c in Sources */,
+ A769B1B723E259AE00872273 /* SDL_shaders_gl.c in Sources */,
+ A769B1B823E259AE00872273 /* e_log.c in Sources */,
+ A769B1B923E259AE00872273 /* SDL_cocoamessagebox.m in Sources */,
+ A769B1BA23E259AE00872273 /* SDL_blendfillrect.c in Sources */,
+ A769B1BB23E259AE00872273 /* SDL_uikitvideo.m in Sources */,
+ A769B1BC23E259AE00872273 /* SDL_cocoashape.m in Sources */,
+ A769B1BD23E259AE00872273 /* SDL_cocoamouse.m in Sources */,
+ A769B1BE23E259AE00872273 /* SDL_error.c in Sources */,
+ A769B1BF23E259AE00872273 /* SDL_blit.c in Sources */,
+ A769B1C023E259AE00872273 /* SDL_rwops.c in Sources */,
+ A769B1C123E259AE00872273 /* SDL_uikitviewcontroller.m in Sources */,
+ A769B1C223E259AE00872273 /* s_cos.c in Sources */,
+ A769B1C323E259AE00872273 /* SDL_steamcontroller.c in Sources */,
+ A769B1C423E259AE00872273 /* SDL_yuv_sw.c in Sources */,
+ A769B1C523E259AE00872273 /* SDL_wave.c in Sources */,
+ A769B1C623E259AE00872273 /* s_tan.c in Sources */,
+ A769B1C723E259AE00872273 /* SDL_hints.c in Sources */,
+ A769B1C823E259AE00872273 /* SDL_hidapi_ps4.c in Sources */,
+ A769B1C923E259AE00872273 /* SDL_pixels.c in Sources */,
+ A769B1CA23E259AE00872273 /* SDL_x11clipboard.c in Sources */,
+ A769B1CB23E259AE00872273 /* SDL_sysloadso.c in Sources */,
+ A769B1CC23E259AE00872273 /* SDL_x11xinput2.c in Sources */,
+ A769B1CD23E259AE00872273 /* SDL_syspower.c in Sources */,
+ A769B1CE23E259AE00872273 /* SDL_x11touch.c in Sources */,
+ A769B1CF23E259AE00872273 /* SDL_iconv.c in Sources */,
+ A769B1D023E259AE00872273 /* s_fabs.c in Sources */,
+ A769B1D123E259AE00872273 /* SDL_x11shape.c in Sources */,
+ A769B1D223E259AE00872273 /* imKStoUCS.c in Sources */,
+ A769B1D323E259AE00872273 /* SDL_shaders_metal.metal in Sources */,
+ A769B1D423E259AE00872273 /* SDL_uikitwindow.m in Sources */,
+ A769B1D523E259AE00872273 /* SDL_render.c in Sources */,
+ A769B1D623E259AE00872273 /* SDL_stretch.c in Sources */,
+ A769B1D723E259AE00872273 /* s_floor.c in Sources */,
+ A769B1D823E259AE00872273 /* SDL_blit_copy.c in Sources */,
+ A769B1D923E259AE00872273 /* e_fmod.c in Sources */,
+ A769B1DA23E259AE00872273 /* SDL_syspower.m in Sources */,
+ A769B1DB23E259AE00872273 /* e_log10.c in Sources */,
+ A769B1DC23E259AE00872273 /* SDL_uikitopenglview.m in Sources */,
+ A769B1DD23E259AE00872273 /* SDL_mixer.c in Sources */,
+ A769B1DE23E259AE00872273 /* SDL_events.c in Sources */,
+ A769B1DF23E259AE00872273 /* SDL_blit_0.c in Sources */,
+ A769B1E023E259AE00872273 /* k_tan.c in Sources */,
+ A769B1E123E259AE00872273 /* SDL_x11vulkan.c in Sources */,
+ A769B1E223E259AE00872273 /* SDL_diskaudio.c in Sources */,
+ A769B1E323E259AE00872273 /* SDL_sysjoystick.m in Sources */,
+ A769B1E423E259AE00872273 /* SDL_egl.c in Sources */,
+ A769B1E523E259AE00872273 /* SDL_RLEaccel.c in Sources */,
+ A769B1E723E259AE00872273 /* SDL_assert.c in Sources */,
+ A769B1E823E259AE00872273 /* SDL_bmp.c in Sources */,
+ A769B1E923E259AE00872273 /* SDL_uikit_main.c in Sources */,
+ A769B1EA23E259AE00872273 /* SDL_stdlib.c in Sources */,
+ A769B1EB23E259AE00872273 /* SDL_dummyaudio.c in Sources */,
+ A769B1EC23E259AE00872273 /* SDL_fillrect.c in Sources */,
+ A769B1ED23E259AE00872273 /* SDL_nullframebuffer.c in Sources */,
+ A769B1EE23E259AE00872273 /* SDL_dummysensor.c in Sources */,
+ A769B1EF23E259AE00872273 /* SDL_string.c in Sources */,
+ A769B1F023E259AE00872273 /* SDL_render_gl.c in Sources */,
+ A769B1F123E259AE00872273 /* SDL_uikitopengles.m in Sources */,
+ A769B1F223E259AE00872273 /* SDL_x11opengles.c in Sources */,
+ A769B1F323E259AE00872273 /* SDL_cocoamodes.m in Sources */,
+ A769B1F423E259AE00872273 /* k_rem_pio2.c in Sources */,
+ A769B1F523E259AE00872273 /* SDL_sysjoystick.c in Sources */,
+ A769B1F623E259AE00872273 /* SDL_gesture.c in Sources */,
+ A769B1F723E259AE00872273 /* SDL_getenv.c in Sources */,
+ A769B1F823E259AE00872273 /* SDL_hidapi_gamecube.c in Sources */,
+ A769B1F923E259AE00872273 /* SDL_joystick.c in Sources */,
+ A769B1FA23E259AE00872273 /* SDL_render_gles2.c in Sources */,
+ A769B1FB23E259AE00872273 /* SDL_surface.c in Sources */,
+ A769B1FC23E259AE00872273 /* SDL_hidapi_xboxone.c in Sources */,
+ A769B1FD23E259AE00872273 /* SDL_blit_auto.c in Sources */,
+ A769B1FE23E259AE00872273 /* SDL_x11keyboard.c in Sources */,
+ A769B1FF23E259AE00872273 /* SDL_keyboard.c in Sources */,
+ A769B20123E259AE00872273 /* SDL_rect.c in Sources */,
+ A769B20223E259AE00872273 /* SDL_cocoaopengles.m in Sources */,
+ A769B20323E259AE00872273 /* SDL_qsort.c in Sources */,
+ A75FDB5223E39D1700529352 /* hid.m in Sources */,
+ A769B20423E259AE00872273 /* SDL_hidapi_switch.c in Sources */,
+ A769B20523E259AE00872273 /* SDL_strtokr.c in Sources */,
+ A769B20623E259AE00872273 /* SDL_clipboardevents.c in Sources */,
+ A769B20723E259AE00872273 /* SDL_x11framebuffer.c in Sources */,
+ A769B20823E259AE00872273 /* k_cos.c in Sources */,
+ A769B20923E259AE00872273 /* SDL_hidapijoystick.c in Sources */,
+ A769B20A23E259AE00872273 /* SDL_malloc.c in Sources */,
+ A769B20B23E259AE00872273 /* SDL_audio.c in Sources */,
+ A769B20C23E259AE00872273 /* SDL_sysfilesystem.c in Sources */,
+ A75FDBD323EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A769B20D23E259AE00872273 /* SDL_offscreenvideo.c in Sources */,
+ A769B20E23E259AE00872273 /* SDL_syscond.c in Sources */,
+ A769B20F23E259AE00872273 /* SDL_syshaptic.c in Sources */,
+ A769B21023E259AE00872273 /* e_exp.c in Sources */,
+ A769B21123E259AE00872273 /* SDL_quit.c in Sources */,
+ A769B21223E259AE00872273 /* SDL_cocoawindow.m in Sources */,
+ A769B21323E259AE00872273 /* SDL_sysmutex.c in Sources */,
+ A769B21423E259AE00872273 /* SDL_syshaptic.c in Sources */,
+ A769B21523E259AE00872273 /* SDL_rwopsbundlesupport.m in Sources */,
+ A769B21623E259AE00872273 /* SDL_video.c in Sources */,
+ A769B21723E259AE00872273 /* SDL_offscreenopengl.c in Sources */,
+ A769B21823E259AE00872273 /* SDL_uikitmetalview.m in Sources */,
+ A769B21923E259AE00872273 /* SDL_shaders_gles2.c in Sources */,
+ A769B21A23E259AE00872273 /* SDL_blit_1.c in Sources */,
+ A769B21B23E259AE00872273 /* SDL_x11dyn.c in Sources */,
+ A769B21C23E259AE00872273 /* SDL_mouse.c in Sources */,
+ A769B21D23E259AE00872273 /* e_rem_pio2.c in Sources */,
+ A769B21E23E259AE00872273 /* SDL_dataqueue.c in Sources */,
+ A769B21F23E259AE00872273 /* SDL_sysjoystick.c in Sources */,
+ A769B22023E259AE00872273 /* SDL_cpuinfo.c in Sources */,
+ A769B22123E259AE00872273 /* SDL_sensor.c in Sources */,
+ A769B22223E259AE00872273 /* SDL_x11window.c in Sources */,
+ A769B22323E259AE00872273 /* k_sin.c in Sources */,
+ A769B22423E259AE00872273 /* edid-parse.c in Sources */,
+ A769B22523E259AE00872273 /* SDL_systimer.c in Sources */,
+ A769B22623E259AE00872273 /* SDL_drawpoint.c in Sources */,
+ A769B22723E259AE00872273 /* e_sqrt.c in Sources */,
+ A769B22823E259AE00872273 /* SDL_cocoavideo.m in Sources */,
+ A769B22923E259AE00872273 /* SDL.c in Sources */,
+ A769B22A23E259AE00872273 /* SDL_x11opengl.c in Sources */,
+ A769B22B23E259AE00872273 /* SDL_cocoavulkan.m in Sources */,
+ A769B22C23E259AE00872273 /* SDL_uikitappdelegate.m in Sources */,
+ A769B22D23E259AE00872273 /* SDL_offscreenwindow.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- BECDF6790761BA81005FE872 /* Sources */ = {
+ A7D88ABF23E2437C00DCD162 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4D1664571EDD61F0003DE88E /* SDL_cocoametalview.m in Sources */,
- 4D1664581EDD61F0003DE88E /* SDL_cocoavulkan.m in Sources */,
- 5C2EF6A91FC98D2D003F5197 /* SDL_shaders_gles2.c in Sources */,
- 4D1664561EDD61DA003DE88E /* SDL_vulkan_utils.c in Sources */,
- 04BD021712E6671800899322 /* SDL_atomic.c in Sources */,
- 04BD021812E6671800899322 /* SDL_spinlock.c in Sources */,
- 56F9D55C1DF73B6B00C15B5D /* SDL_dataqueue.c in Sources */,
- 04BD022412E6671800899322 /* SDL_diskaudio.c in Sources */,
- 04BD022C12E6671800899322 /* SDL_dummyaudio.c in Sources */,
- 04BD024212E6671800899322 /* SDL_audio.c in Sources */,
- 04BD024412E6671800899322 /* SDL_audiocvt.c in Sources */,
- 04BD024512E6671800899322 /* SDL_audiodev.c in Sources */,
- 04BD024812E6671800899322 /* SDL_audiotypecvt.c in Sources */,
- 04BD024912E6671800899322 /* SDL_mixer.c in Sources */,
- 04BD025112E6671800899322 /* SDL_wave.c in Sources */,
- A704172720F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */,
- 04BD025C12E6671800899322 /* SDL_cpuinfo.c in Sources */,
- 04BD026312E6671800899322 /* SDL_clipboardevents.c in Sources */,
- 04BD026512E6671800899322 /* SDL_events.c in Sources */,
- 5C2EF6FB1FC9EE64003F5197 /* SDL_egl.c in Sources */,
- AA41F88014B8F1F500993C4F /* SDL_dropevents.c in Sources */,
- 04BD026712E6671800899322 /* SDL_gesture.c in Sources */,
- 04BD026912E6671800899322 /* SDL_keyboard.c in Sources */,
- 04BD026B12E6671800899322 /* SDL_mouse.c in Sources */,
- 04BD026D12E6671800899322 /* SDL_quit.c in Sources */,
- 04BD026F12E6671800899322 /* SDL_touch.c in Sources */,
- 04BD027112E6671800899322 /* SDL_windowevents.c in Sources */,
- 04BD027412E6671800899322 /* SDL_rwopsbundlesupport.m in Sources */,
- 04BD027512E6671800899322 /* SDL_rwops.c in Sources */,
- 04BD027612E6671800899322 /* SDL_syshaptic.c in Sources */,
- 04BD027A12E6671800899322 /* SDL_haptic.c in Sources */,
- 04BD028112E6671800899322 /* SDL_sysjoystick.c in Sources */,
- BBFC088D164C6647003E6A99 /* SDL_gamecontroller.c in Sources */,
- 04BD028B12E6671800899322 /* SDL_joystick.c in Sources */,
- 04BD02A312E6671800899322 /* SDL_sysloadso.c in Sources */,
- 04BD02AE12E6671800899322 /* SDL_syspower.c in Sources */,
- 04BD02B012E6671800899322 /* SDL_power.c in Sources */,
- 04BD02B612E6671800899322 /* SDL_assert.c in Sources */,
- 04BD02B912E6671800899322 /* SDL_error.c in Sources */,
- 04BD02BC12E6671800899322 /* SDL.c in Sources */,
- 04BD02BD12E6671800899322 /* SDL_getenv.c in Sources */,
- 04BD02BE12E6671800899322 /* SDL_iconv.c in Sources */,
- 04BD02BF12E6671800899322 /* SDL_malloc.c in Sources */,
- 04BD02C012E6671800899322 /* SDL_qsort.c in Sources */,
- 04BD02C112E6671800899322 /* SDL_stdlib.c in Sources */,
- 04BD02C212E6671800899322 /* SDL_string.c in Sources */,
- 562D3C7C1D8F4933003FEEE6 /* SDL_coreaudio.m in Sources */,
- 04BD02D712E6671800899322 /* SDL_syscond.c in Sources */,
- 04BD02D812E6671800899322 /* SDL_sysmutex.c in Sources */,
- 04BD02DA12E6671800899322 /* SDL_syssem.c in Sources */,
- 04BD02DB12E6671800899322 /* SDL_systhread.c in Sources */,
- 04BD02E412E6671800899322 /* SDL_thread.c in Sources */,
- 04BD02F112E6671800899322 /* SDL_timer.c in Sources */,
- 04BD02F312E6671800899322 /* SDL_systimer.c in Sources */,
- A704171B20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */,
- 04BD030E12E6671800899322 /* SDL_cocoaclipboard.m in Sources */,
- 04BD031012E6671800899322 /* SDL_cocoaevents.m in Sources */,
- 04BD031212E6671800899322 /* SDL_cocoakeyboard.m in Sources */,
- 04BD031412E6671800899322 /* SDL_cocoamodes.m in Sources */,
- 04BD031612E6671800899322 /* SDL_cocoamouse.m in Sources */,
- 5C2EF6A31FC98B38003F5197 /* SDL_yuv.c in Sources */,
- 5C2EF6F11FC9D181003F5197 /* SDL_cocoaopengles.m in Sources */,
- 04BD031812E6671800899322 /* SDL_cocoaopengl.m in Sources */,
- A704172420F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */,
- 04BD031A12E6671800899322 /* SDL_cocoashape.m in Sources */,
- 04BD031C12E6671800899322 /* SDL_cocoavideo.m in Sources */,
- 04BD031E12E6671800899322 /* SDL_cocoawindow.m in Sources */,
- 04BD033112E6671800899322 /* SDL_nullevents.c in Sources */,
- 04BD033512E6671800899322 /* SDL_nullvideo.c in Sources */,
- 5C2EF6A51FC98B6B003F5197 /* yuv_rgb.c in Sources */,
- 04BD038F12E6671800899322 /* SDL_blit.c in Sources */,
- 04BD039112E6671800899322 /* SDL_blit_0.c in Sources */,
- A704172120F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */,
- A704170A20F09A9800A82227 /* hid.c in Sources */,
- 04BD039212E6671800899322 /* SDL_blit_1.c in Sources */,
- 04BD039312E6671800899322 /* SDL_blit_A.c in Sources */,
- 04BD039412E6671800899322 /* SDL_blit_auto.c in Sources */,
- 04BD039612E6671800899322 /* SDL_blit_copy.c in Sources */,
- 04BD039812E6671800899322 /* SDL_blit_N.c in Sources */,
- 04BD039912E6671800899322 /* SDL_blit_slow.c in Sources */,
- 04BD039B12E6671800899322 /* SDL_bmp.c in Sources */,
- 04BD039C12E6671800899322 /* SDL_clipboard.c in Sources */,
- A704171520F09AC900A82227 /* SDL_hidapijoystick.c in Sources */,
- 04BD03A112E6671800899322 /* SDL_fillrect.c in Sources */,
- 04BD03A612E6671800899322 /* SDL_pixels.c in Sources */,
- 04BD03A812E6671800899322 /* SDL_rect.c in Sources */,
- 04BD03B012E6671800899322 /* SDL_RLEaccel.c in Sources */,
- 04BD03B212E6671800899322 /* SDL_shape.c in Sources */,
- 04BD03B412E6671800899322 /* SDL_stretch.c in Sources */,
- 04BD03B512E6671800899322 /* SDL_surface.c in Sources */,
- 04BD03B712E6671800899322 /* SDL_video.c in Sources */,
- 04BD03F312E6671800899322 /* imKStoUCS.c in Sources */,
- 5C2EF6A81FC98D2D003F5197 /* SDL_render_gles2.c in Sources */,
- 04BD03F512E6671800899322 /* SDL_x11clipboard.c in Sources */,
- 04BD03F712E6671800899322 /* SDL_x11dyn.c in Sources */,
- 04BD03F912E6671800899322 /* SDL_x11events.c in Sources */,
- 04BD03FD12E6671800899322 /* SDL_x11keyboard.c in Sources */,
- 04BD03FF12E6671800899322 /* SDL_x11modes.c in Sources */,
- 04BD040112E6671800899322 /* SDL_x11mouse.c in Sources */,
- 04BD040312E6671800899322 /* SDL_x11opengl.c in Sources */,
- 04BD040512E6671800899322 /* SDL_x11opengles.c in Sources */,
- 04BD040912E6671800899322 /* SDL_x11shape.c in Sources */,
- 04BD040C12E6671800899322 /* SDL_x11touch.c in Sources */,
- 04BD040E12E6671800899322 /* SDL_x11video.c in Sources */,
- 04BD041012E6671800899322 /* SDL_x11window.c in Sources */,
- AADC5A451FDA047900960936 /* SDL_render_metal.m in Sources */,
- 041B2CAB12FA0D680087D585 /* SDL_render.c in Sources */,
- 04409B9812FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */,
- F30D9C94212CABDC0047DF2E /* SDL_dummysensor.c in Sources */,
- 04F7803C12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */,
- 04F7805512FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */,
- 04F7805712FB74A200FC43C0 /* SDL_blendline.c in Sources */,
- 04F7805912FB74A200FC43C0 /* SDL_blendpoint.c in Sources */,
- F30D9CD1212EB4810047DF2E /* SDL_displayevents.c in Sources */,
- 04F7805C12FB74A200FC43C0 /* SDL_drawline.c in Sources */,
- 04F7805E12FB74A200FC43C0 /* SDL_drawpoint.c in Sources */,
- 0442EC1912FE1BBA004C9285 /* SDL_render_gl.c in Sources */,
- 0442EC1F12FE1BCB004C9285 /* SDL_render_sw.c in Sources */,
- F30D9C8B212BC94F0047DF2E /* SDL_sensor.c in Sources */,
- 56A67025185654B40007D20F /* SDL_dynapi.c in Sources */,
- 0442EC5C12FE1C60004C9285 /* SDL_x11framebuffer.c in Sources */,
- 0442EC6012FE1C75004C9285 /* SDL_hints.c in Sources */,
- 04BAC0C91300C2160055DE28 /* SDL_log.c in Sources */,
- 043567401303160F00BA5428 /* SDL_shaders_gl.c in Sources */,
- AA628ACB159367B7005138DD /* SDL_rotate.c in Sources */,
- AA628AD2159367F2005138DD /* SDL_x11xinput2.c in Sources */,
- AA9E4094163BE51E007A2AD0 /* SDL_x11messagebox.c in Sources */,
- AABCC390164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */,
- AA0F8492178D5ECC00823F9D /* SDL_systls.c in Sources */,
- D55A1B84179F263600625D7C /* SDL_cocoamousetap.m in Sources */,
- DB0F490817CA5292008798C5 /* SDL_sysfilesystem.m in Sources */,
+ A7D8B9E423E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8AE7D23E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B63023E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BAC823E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B41D23E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8AD2A23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95223E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAB023E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75323E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B98723E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7723E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC523E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1BF23E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86723E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AB23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9F623E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8A97623E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB8E23E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19B23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8AC5223E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8B3F323E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B55E23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95823E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A7D8BB2823E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8AF1923E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2623E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8AE8923E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7423E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3C023E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA3E23E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8BBB723E254E400DCD162 /* SDL_sysjoystick.m in Sources */,
+ A7D8B43523E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3423E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BABC23E2514400DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB2C23E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9DE23E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4EF23E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3823E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8ACAC23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8BA1423E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B18F23E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42323E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53A23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D323E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA2023E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8ADF323E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BA3823E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17723E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABEC23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6823E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ACA623E2514100DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8ABF223E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81923E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF0D23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8ABCE23E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9823E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AAB723E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8AC8E23E2514100DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8B15323E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2523E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86123E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8AC5823E2514100DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8ACB823E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8AD3323E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB7C23E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BACE23E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA8C23E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8B5E823E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AED723E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1723E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8623E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF223E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED123E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA2C23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8ACDC23E2514100DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8AEE323E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8AEB923E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E523E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6923E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5BE23E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8ACD023E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8BA9223E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B4D123E2514300DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8B9D223E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76B23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD423E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8AA6623E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B54023E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD6F23E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A123E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B75F23E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B16B23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F423E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C523E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95123E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BA9E23E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E323E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8B19523E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99323E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8AC4C23E2514100DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8B97B23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD423E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BAFE23E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3A23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BAE023E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5D023E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BAEC23E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8AC7023E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8B76523E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5823E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADE723E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0A23E2514500DCD162 /* k_tan.c in Sources */,
+ A75FDBCF23EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8B15F23E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A7D8B8A923E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8AFC123E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3423E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB223E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DB23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8B96F23E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8B79B23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A523E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABE023E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96A23E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B95D23E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA8023E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8AC8223E2514100DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8B20123E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9523E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A7D8BAA423E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A7D8B57623E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9A23E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95723E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56423E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4DD23E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4A23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC2E23E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B54C23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2423E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1A723E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6A23E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACE823E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8AE9B23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96923E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A7D8B55223E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96323E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7623E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18323E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BAB623E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54623E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97523E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8B8C723E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B61E23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A7D8AB8C23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B42F23E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADB23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAE623E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BB8223E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEA723E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43B23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB123E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8B5CA23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC1023E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5623E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8ACC423E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8BA5C23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14123E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8B17D23E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1623E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BADA23E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB1023E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B323E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E123E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99423E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18923E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A75FDAAD23E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A7D8BAAA23E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CB23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4A23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2623E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAF823E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEAD23E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A94C23E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15923E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8AEA123E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AC6423E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AB6223E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88C7823E24BED00DCD162 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D8B9E523E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8AE7E23E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B63123E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BAC923E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B41E23E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8AD2B23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95323E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAB123E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75423E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B98823E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7823E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC623E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1C023E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86823E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AC23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9F723E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8A97723E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB8F23E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19C23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8AC5323E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8B3F423E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B55F23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95923E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A7D8BB2923E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8AF1A23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2723E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8AE8A23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7523E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3C123E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA3F23E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8B43623E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3523E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BABD23E2514400DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB2D23E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9DF23E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4F023E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3923E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8ACAD23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8BA1523E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B19023E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42423E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53B23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D423E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA2123E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8ADF423E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BA3923E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17823E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABED23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6923E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ACA723E2514100DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8ABF323E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81A23E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF0E23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8ABCF23E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9923E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AAB823E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8AC8F23E2514100DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8B15423E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2623E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86223E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8AC5923E2514100DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8ACB923E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8AD3423E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB7D23E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BACF23E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA8D23E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8B5E923E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AED823E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1823E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8723E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF323E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED223E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA2D23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8ACDD23E2514100DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8AEE423E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8AEBA23E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E623E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6A23E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5BF23E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8ACD123E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8BA9323E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B4D223E2514300DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8B9D323E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76C23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD523E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8AA6723E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B54123E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD7023E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A223E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B76023E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B16C23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F523E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C623E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95223E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BA9F23E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E423E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8B19623E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99423E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8AC4D23E2514100DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8B97C23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD523E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BAFF23E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3B23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BAE123E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5D123E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BAED23E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8AC7123E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8B76623E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5923E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADE823E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0B23E2514500DCD162 /* k_tan.c in Sources */,
+ A7D8B16023E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A75FDBD023EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8B8AA23E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8B4E423E2514300DCD162 /* SDL_sysjoystick.m in Sources */,
+ A7D8AFC223E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3523E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB323E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DC23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8B97023E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8B79C23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A623E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABE123E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96B23E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B95E23E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA8123E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8AC8323E2514100DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8B20223E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9623E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A7D8BAA523E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A7D8B57723E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9B23E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95823E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56523E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4DE23E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4B23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC2F23E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B54D23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2523E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1A823E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6B23E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACE923E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8AE9C23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96A23E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A7D8B55323E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96423E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7723E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18423E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BAB723E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54723E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97623E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8B8C823E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B61F23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A7D8AB8D23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B43023E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADC23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAE723E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BB8323E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEA823E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43C23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB223E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8B5CB23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC1123E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5723E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8ACC523E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8BA5D23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14223E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8B17E23E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1723E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BADB23E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB1123E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B423E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E223E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99523E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18A23E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A75FDAAE23E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A7D8BAAB23E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CC23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4B23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2723E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAF923E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEAE23E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A94D23E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15A23E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8AEA223E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AC6523E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AB6323E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D88DBC23E24D3B00DCD162 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D8B9E723E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8AE8023E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B63323E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BACB23E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B42023E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8AD2D23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95523E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAB323E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75623E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A75FDAAF23E2795C00529352 /* SDL_hidapi_steam.c in Sources */,
+ A7D8B98A23E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7A23E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC823E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1C223E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86A23E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AE23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9F923E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8A97923E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB9123E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19E23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8AC5523E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8B3F623E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B56123E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95B23E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A7D8BB2B23E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8AF1C23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2923E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8AE8C23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7723E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3C323E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA4123E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8B43823E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3723E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BABF23E2514400DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB2F23E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9E123E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4F223E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3B23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8ACAF23E2514100DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8BA1723E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B19223E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42623E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53D23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D623E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA2323E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8ADF623E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BA3B23E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17A23E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABEF23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6B23E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ACA923E2514100DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8ABF523E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81C23E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF1023E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8ABD123E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9B23E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AABA23E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8AC9123E2514100DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8B15623E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2823E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86423E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8AC5B23E2514100DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8ACBB23E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8AD3623E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB7F23E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BAD123E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA8F23E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8B5EB23E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AEDA23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1A23E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8923E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF523E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED423E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA2F23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8ACDF23E2514100DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8AEE623E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8AEBC23E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E823E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6C23E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5C123E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8ACD323E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8BA9523E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B4D423E2514300DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8B9D523E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76E23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD723E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8AA6923E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B54323E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD7223E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A423E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B76223E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B16E23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F723E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C823E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95423E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BAA123E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E623E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8B19823E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99623E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8AC4F23E2514100DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8B97E23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD723E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BB0123E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3D23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BAE323E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5D323E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BAEF23E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8AC7323E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8B76823E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5B23E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADEA23E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0D23E2514500DCD162 /* k_tan.c in Sources */,
+ A7D8B16223E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A7D8B8AC23E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8B4E623E2514300DCD162 /* SDL_sysjoystick.m in Sources */,
+ A7D8AFC423E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3723E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB523E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DE23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8BC0723E2590800DCD162 /* SDL_uikit_main.c in Sources */,
+ A7D8B97223E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8B79E23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A823E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABE323E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96D23E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B96023E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA8323E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8AC8523E2514100DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8B20423E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9823E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A7D8BAA723E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A7D8B57923E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9D23E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95A23E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56723E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4E023E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4D23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC3123E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B54F23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2723E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1AA23E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6D23E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACEB23E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8AE9E23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96C23E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A75FDB5123E39D1700529352 /* hid.m in Sources */,
+ A7D8B55523E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96623E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7923E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18623E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BAB923E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54923E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97823E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8B8CA23E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B62123E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A75FDBD223EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8AB8F23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B43223E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADE23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAE923E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BB8523E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEAA23E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43E23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB423E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8B5CD23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC1323E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5923E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8ACC723E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8BA5F23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14423E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8B18023E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1923E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BADD23E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB1323E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B623E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E423E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99723E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18C23E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A7D8BAAD23E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CE23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4D23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2923E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAFB23E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEB023E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A94F23E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15C23E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8AEA423E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AC6723E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AB6523E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BECDF62C0761BA81005FE872 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D8B9E323E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8AE7C23E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B62F23E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BAC723E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B41C23E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8BBD923E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8AD2923E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95123E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAAF23E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75223E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8BBE123E2574800DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8B98623E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7623E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC423E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1BE23E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86623E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AA23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9F523E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8BBE323E2574800DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8A97523E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB8D23E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19A23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8B3F223E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B55D23E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95723E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A75FDBCE23EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8BB2723E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8AF1823E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2523E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8AE8823E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7323E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3BF23E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA3D23E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8B43423E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3323E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BABB23E2514400DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB2B23E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9DD23E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4EE23E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3723E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA1323E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B18E23E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42223E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53923E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D223E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA1F23E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17623E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABEB23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6723E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ABF123E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81823E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF0C23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8BBE523E2574800DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8BBE923E2574800DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8ABCD23E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9723E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AAB623E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8B15223E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2423E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86023E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8BBC523E2561500DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8AD3223E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB7B23E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BACD23E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA8B23E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8BBEB23E2574800DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8B5E723E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AED623E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1623E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8523E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF123E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED023E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8AEE223E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8BBD323E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AEB823E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E423E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6823E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5BD23E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8BA9123E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B9D123E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76A23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD323E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8AA6523E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B53F23E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD6E23E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A023E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B75E23E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8BBD723E2574800DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8B16A23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F323E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C423E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95023E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BA9D23E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E223E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8B19423E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99223E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8B97A23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD323E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BAFD23E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3923E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BADF23E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5CF23E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BAEB23E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8B76423E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5723E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADE623E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0923E2514500DCD162 /* k_tan.c in Sources */,
+ A7D8B15E23E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A7D8B8A823E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8AFC023E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3323E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB123E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DA23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8B96E23E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8BBDF23E2574800DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8B79A23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A423E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABDF23E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96923E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B95C23E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA7F23E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8B20023E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9423E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A7D8BAA323E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A7D8B57523E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9923E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95623E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56323E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4DC23E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC2D23E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B54B23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2323E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1A623E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6923E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACE723E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8AE9A23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96823E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A7D8B55123E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96223E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7523E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18223E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BAB523E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54523E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97423E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8B8C623E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B61D23E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A7D8AB8B23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B42E23E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADA23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAE523E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BB8123E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEA623E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43A23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB023E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BBD523E2574800DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8B5C923E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC0F23E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5523E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8BA5B23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14023E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8BBDB23E2574800DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8B17C23E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1523E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BAD923E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB0F23E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B223E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E023E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99323E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18823E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A7D8BAA923E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CA23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4923E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAF723E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEAC23E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A94B23E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15823E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8AEA023E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AB6123E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- DB313FFD17554B71006C0E22 /* Sources */ = {
+ BECDF6790761BA81005FE872 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4D16645A1EDD6235003DE88E /* SDL_cocoametalview.m in Sources */,
- 4D16645B1EDD6235003DE88E /* SDL_cocoavulkan.m in Sources */,
- 5C2EF6AD1FC98D2E003F5197 /* SDL_shaders_gles2.c in Sources */,
- 4D1664591EDD621B003DE88E /* SDL_vulkan_utils.c in Sources */,
- DB313FFE17554B71006C0E22 /* SDL_atomic.c in Sources */,
- DB313FFF17554B71006C0E22 /* SDL_spinlock.c in Sources */,
- 56F9D55D1DF73B6C00C15B5D /* SDL_dataqueue.c in Sources */,
- DB31400017554B71006C0E22 /* SDL_diskaudio.c in Sources */,
- DB31400117554B71006C0E22 /* SDL_dummyaudio.c in Sources */,
- DB31400317554B71006C0E22 /* SDL_audio.c in Sources */,
- DB31400417554B71006C0E22 /* SDL_audiocvt.c in Sources */,
- DB31400517554B71006C0E22 /* SDL_audiodev.c in Sources */,
- DB31400617554B71006C0E22 /* SDL_audiotypecvt.c in Sources */,
- DB31400717554B71006C0E22 /* SDL_mixer.c in Sources */,
- DB31400817554B71006C0E22 /* SDL_wave.c in Sources */,
- A704172820F09AC900A82227 /* SDL_hidapi_xbox360.c in Sources */,
- DB31400917554B71006C0E22 /* SDL_cpuinfo.c in Sources */,
- DB31400A17554B71006C0E22 /* SDL_clipboardevents.c in Sources */,
- DB31400B17554B71006C0E22 /* SDL_events.c in Sources */,
- 5C2EF6FE1FC9EE65003F5197 /* SDL_egl.c in Sources */,
- DB31400C17554B71006C0E22 /* SDL_dropevents.c in Sources */,
- DB31400D17554B71006C0E22 /* SDL_gesture.c in Sources */,
- DB31400E17554B71006C0E22 /* SDL_keyboard.c in Sources */,
- DB31400F17554B71006C0E22 /* SDL_mouse.c in Sources */,
- DB31401017554B71006C0E22 /* SDL_quit.c in Sources */,
- DB31401117554B71006C0E22 /* SDL_touch.c in Sources */,
- DB31401217554B71006C0E22 /* SDL_windowevents.c in Sources */,
- DB31401317554B71006C0E22 /* SDL_rwopsbundlesupport.m in Sources */,
- DB31401417554B71006C0E22 /* SDL_rwops.c in Sources */,
- DB31401517554B71006C0E22 /* SDL_syshaptic.c in Sources */,
- DB31401617554B71006C0E22 /* SDL_haptic.c in Sources */,
- DB31401717554B71006C0E22 /* SDL_sysjoystick.c in Sources */,
- DB31401817554B71006C0E22 /* SDL_gamecontroller.c in Sources */,
- DB31401917554B71006C0E22 /* SDL_joystick.c in Sources */,
- DB31401A17554B71006C0E22 /* SDL_sysloadso.c in Sources */,
- DB31401B17554B71006C0E22 /* SDL_syspower.c in Sources */,
- DB31401C17554B71006C0E22 /* SDL_power.c in Sources */,
- DB31401D17554B71006C0E22 /* SDL_assert.c in Sources */,
- DB31401E17554B71006C0E22 /* SDL_error.c in Sources */,
- DB31402017554B71006C0E22 /* SDL.c in Sources */,
- DB31402117554B71006C0E22 /* SDL_getenv.c in Sources */,
- DB31402217554B71006C0E22 /* SDL_iconv.c in Sources */,
- DB31402317554B71006C0E22 /* SDL_malloc.c in Sources */,
- DB31402417554B71006C0E22 /* SDL_qsort.c in Sources */,
- DB31402517554B71006C0E22 /* SDL_stdlib.c in Sources */,
- DB31402617554B71006C0E22 /* SDL_string.c in Sources */,
- 562D3C7D1D8F4933003FEEE6 /* SDL_coreaudio.m in Sources */,
- DB31402717554B71006C0E22 /* SDL_syscond.c in Sources */,
- DB31402817554B71006C0E22 /* SDL_sysmutex.c in Sources */,
- DB31402917554B71006C0E22 /* SDL_syssem.c in Sources */,
- DB31402A17554B71006C0E22 /* SDL_systhread.c in Sources */,
- DB31402B17554B71006C0E22 /* SDL_thread.c in Sources */,
- DB31402C17554B71006C0E22 /* SDL_timer.c in Sources */,
- DB31402D17554B71006C0E22 /* SDL_systimer.c in Sources */,
- A704171C20F09AC900A82227 /* SDL_hidapi_switch.c in Sources */,
- DB31402E17554B71006C0E22 /* SDL_cocoaclipboard.m in Sources */,
- DB31402F17554B71006C0E22 /* SDL_cocoaevents.m in Sources */,
- DB31403017554B71006C0E22 /* SDL_cocoakeyboard.m in Sources */,
- DB31403117554B71006C0E22 /* SDL_cocoamodes.m in Sources */,
- DB31403217554B71006C0E22 /* SDL_cocoamouse.m in Sources */,
- 5C2EF6A41FC98B39003F5197 /* SDL_yuv.c in Sources */,
- 5C2EF6F31FC9D182003F5197 /* SDL_cocoaopengles.m in Sources */,
- DB31403317554B71006C0E22 /* SDL_cocoaopengl.m in Sources */,
- A704172520F09AC900A82227 /* SDL_hidapi_xboxone.c in Sources */,
- DB31403417554B71006C0E22 /* SDL_cocoashape.m in Sources */,
- DB31403517554B71006C0E22 /* SDL_cocoavideo.m in Sources */,
- DB31403617554B71006C0E22 /* SDL_cocoawindow.m in Sources */,
- DB31403717554B71006C0E22 /* SDL_nullevents.c in Sources */,
- DB31403817554B71006C0E22 /* SDL_nullvideo.c in Sources */,
- 5C2EF6A61FC98B6C003F5197 /* yuv_rgb.c in Sources */,
- DB31403917554B71006C0E22 /* SDL_blit.c in Sources */,
- DB31403A17554B71006C0E22 /* SDL_blit_0.c in Sources */,
- A704172220F09AC900A82227 /* SDL_hidapi_ps4.c in Sources */,
- A704170B20F09A9800A82227 /* hid.c in Sources */,
- DB31403B17554B71006C0E22 /* SDL_blit_1.c in Sources */,
- DB31403C17554B71006C0E22 /* SDL_blit_A.c in Sources */,
- DB31403D17554B71006C0E22 /* SDL_blit_auto.c in Sources */,
- DB31403E17554B71006C0E22 /* SDL_blit_copy.c in Sources */,
- DB31403F17554B71006C0E22 /* SDL_blit_N.c in Sources */,
- DB31404017554B71006C0E22 /* SDL_blit_slow.c in Sources */,
- DB31404117554B71006C0E22 /* SDL_bmp.c in Sources */,
- DB31404217554B71006C0E22 /* SDL_clipboard.c in Sources */,
- A704171620F09AC900A82227 /* SDL_hidapijoystick.c in Sources */,
- DB31404317554B71006C0E22 /* SDL_fillrect.c in Sources */,
- DB31404417554B71006C0E22 /* SDL_pixels.c in Sources */,
- DB31404517554B71006C0E22 /* SDL_rect.c in Sources */,
- DB31404617554B71006C0E22 /* SDL_RLEaccel.c in Sources */,
- DB31404717554B71006C0E22 /* SDL_shape.c in Sources */,
- DB31404817554B71006C0E22 /* SDL_stretch.c in Sources */,
- DB31404917554B71006C0E22 /* SDL_surface.c in Sources */,
- DB31404A17554B71006C0E22 /* SDL_video.c in Sources */,
- DB31404B17554B71006C0E22 /* imKStoUCS.c in Sources */,
- 5C2EF6AC1FC98D2E003F5197 /* SDL_render_gles2.c in Sources */,
- DB31404C17554B71006C0E22 /* SDL_x11clipboard.c in Sources */,
- DB31404D17554B71006C0E22 /* SDL_x11dyn.c in Sources */,
- DB31404E17554B71006C0E22 /* SDL_x11events.c in Sources */,
- DB31404F17554B71006C0E22 /* SDL_x11keyboard.c in Sources */,
- DB31405017554B71006C0E22 /* SDL_x11modes.c in Sources */,
- DB31405117554B71006C0E22 /* SDL_x11mouse.c in Sources */,
- DB31405217554B71006C0E22 /* SDL_x11opengl.c in Sources */,
- DB31405317554B71006C0E22 /* SDL_x11opengles.c in Sources */,
- DB31405417554B71006C0E22 /* SDL_x11shape.c in Sources */,
- DB31405517554B71006C0E22 /* SDL_x11touch.c in Sources */,
- DB31405617554B71006C0E22 /* SDL_x11video.c in Sources */,
- DB31405717554B71006C0E22 /* SDL_x11window.c in Sources */,
- AADC5A481FDA048100960936 /* SDL_render_metal.m in Sources */,
- DB31405817554B71006C0E22 /* SDL_render.c in Sources */,
- DB31405A17554B71006C0E22 /* SDL_yuv_sw.c in Sources */,
- F30D9C95212CABDC0047DF2E /* SDL_dummysensor.c in Sources */,
- DB31405B17554B71006C0E22 /* SDL_nullframebuffer.c in Sources */,
- DB31405C17554B71006C0E22 /* SDL_blendfillrect.c in Sources */,
- DB31405D17554B71006C0E22 /* SDL_blendline.c in Sources */,
- DB31405E17554B71006C0E22 /* SDL_blendpoint.c in Sources */,
- F30D9CD2212EB4810047DF2E /* SDL_displayevents.c in Sources */,
- DB31405F17554B71006C0E22 /* SDL_drawline.c in Sources */,
- DB31406017554B71006C0E22 /* SDL_drawpoint.c in Sources */,
- DB31406117554B71006C0E22 /* SDL_render_gl.c in Sources */,
- DB31406217554B71006C0E22 /* SDL_render_sw.c in Sources */,
- F30D9C8C212BC94F0047DF2E /* SDL_sensor.c in Sources */,
- 56A67026185654B40007D20F /* SDL_dynapi.c in Sources */,
- DB31406317554B71006C0E22 /* SDL_x11framebuffer.c in Sources */,
- DB31406417554B71006C0E22 /* SDL_hints.c in Sources */,
- DB31406517554B71006C0E22 /* SDL_log.c in Sources */,
- DB31406617554B71006C0E22 /* SDL_shaders_gl.c in Sources */,
- DB31406717554B71006C0E22 /* SDL_rotate.c in Sources */,
- DB31406817554B71006C0E22 /* SDL_x11xinput2.c in Sources */,
- DB31406917554B71006C0E22 /* SDL_x11messagebox.c in Sources */,
- DB31406A17554B71006C0E22 /* SDL_cocoamessagebox.m in Sources */,
- AA0F8493178D5ECC00823F9D /* SDL_systls.c in Sources */,
- D55A1B83179F263500625D7C /* SDL_cocoamousetap.m in Sources */,
- DB0F490A17CA5293008798C5 /* SDL_sysfilesystem.m in Sources */,
+ A7D8B9E623E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8BBEE23E2574800DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AE7F23E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B63223E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BACA23E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B41F23E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8AD2C23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95423E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAB223E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75523E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B98923E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7923E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC723E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1C123E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86923E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AD23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9F823E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8A97823E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB9023E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19D23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8B3F523E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B56023E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95A23E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A75FDBD123EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8BB2A23E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8BBFC23E2574800DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8AF1B23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2823E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8BC0223E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8AE8B23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7623E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3C223E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA4023E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8B43723E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3623E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BABE23E2514400DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB2E23E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9E023E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4F123E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3A23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA1623E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B19123E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42523E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53C23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D523E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA2223E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8BC0623E2574800DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8ADF523E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BA3A23E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17923E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABEE23E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6A23E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ABF423E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81B23E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF0F23E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8ABD023E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9A23E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AAB923E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8B15523E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2723E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86323E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8AD3523E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB7E23E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BBFA23E2574800DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8BAD023E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA8E23E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8B5EA23E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AED923E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1923E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8823E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF423E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED323E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA2E23E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8AEE523E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8AEBB23E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E723E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6B23E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5C023E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8BA9423E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B9D423E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76D23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD623E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8BBF423E2574800DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8AA6823E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B54223E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD7123E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A323E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B76123E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B16D23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F623E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C723E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95323E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BAA023E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E523E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8BC0423E2574800DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8B19723E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99523E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8B97D23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD623E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BB0023E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3C23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BAE223E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5D223E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BBF623E2574800DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8BAEE23E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8B76723E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5A23E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADE923E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0C23E2514500DCD162 /* k_tan.c in Sources */,
+ A7D8BBF223E2574800DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8B16123E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A7D8BBB923E2560500DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8B8AB23E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8AFC323E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3623E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB423E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DD23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8B97123E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8B79D23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A723E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABE223E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96C23E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B95F23E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA8223E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8B20323E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9723E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A7D8BAA623E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A75FDB9023E4C80D00529352 /* SDL_hidapi.c in Sources */,
+ A7D8B57823E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9C23E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95923E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56623E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4DF23E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4C23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC3023E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B54E23E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2623E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1A923E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6C23E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACEA23E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8BC0023E2574800DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8AE9D23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96B23E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A7D8B55423E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96523E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7823E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18523E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BAB823E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54823E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97723E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8BBF023E2574800DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8B8C923E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B62023E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A7D8AB8E23E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B43123E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADD23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAE823E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BBFE23E2574800DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8BB8423E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEA923E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43D23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB323E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8B5CC23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC1223E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5823E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8BA5E23E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14323E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8B17F23E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1823E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BADC23E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB1223E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B523E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E323E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99623E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18B23E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A7D8BAAC23E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CD23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4C23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2823E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAFA23E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEAF23E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A94E23E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15B23E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8BBF823E2574800DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8AEA323E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AB6423E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DB313FFD17554B71006C0E22 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7D8B9E823E2514400DCD162 /* SDL_drawline.c in Sources */,
+ A7D8AE8123E2514100DCD162 /* SDL_yuv.c in Sources */,
+ A7D8B63423E2514300DCD162 /* SDL_sysfilesystem.m in Sources */,
+ A7D8BACC23E2514500DCD162 /* e_pow.c in Sources */,
+ A7D8B42123E2514300DCD162 /* SDL_systls.c in Sources */,
+ A7D8AD2E23E2514100DCD162 /* SDL_vulkan_utils.c in Sources */,
+ A7D8A95623E2514000DCD162 /* SDL_spinlock.c in Sources */,
+ A7D8BAB423E2514400DCD162 /* s_atan.c in Sources */,
+ A7D8B75723E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B98B23E2514400DCD162 /* SDL_render_metal.m in Sources */,
+ A7D8AE7B23E2514100DCD162 /* SDL_clipboard.c in Sources */,
+ A7D8AEC923E2514100DCD162 /* SDL_cocoaevents.m in Sources */,
+ A7D8B1C323E2514200DCD162 /* SDL_x11messagebox.c in Sources */,
+ A7D8B86B23E2514400DCD162 /* SDL_audiocvt.c in Sources */,
+ A7D8B3AF23E2514200DCD162 /* SDL_shape.c in Sources */,
+ A7D8B9FA23E2514400DCD162 /* SDL_rotate.c in Sources */,
+ A7D8A97A23E2514000DCD162 /* SDL_coremotionsensor.m in Sources */,
+ A7D8BB9223E2514500DCD162 /* SDL_touch.c in Sources */,
+ A7D8B19F23E2514200DCD162 /* SDL_x11events.c in Sources */,
+ A7D8AC5623E2514100DCD162 /* SDL_uikitmessagebox.m in Sources */,
+ A7D8B3F723E2514300DCD162 /* SDL_thread.c in Sources */,
+ A7D8B56223E2514300DCD162 /* SDL_hidapi_xbox360w.c in Sources */,
+ A7D8A95C23E2514000DCD162 /* SDL_atomic.c in Sources */,
+ A75FDBD423EA380300529352 /* SDL_hidapi_rumble.c in Sources */,
+ A7D8BB2C23E2514500DCD162 /* SDL_displayevents.c in Sources */,
+ A7D8AF1D23E2514100DCD162 /* SDL_cocoamousetap.m in Sources */,
+ A7D8AB2A23E2514100DCD162 /* SDL_log.c in Sources */,
+ A7D8AE8D23E2514100DCD162 /* SDL_cocoaopengl.m in Sources */,
+ A7D8AB7823E2514100DCD162 /* SDL_offscreenframebuffer.c in Sources */,
+ A7D8B3C423E2514200DCD162 /* yuv_rgb.c in Sources */,
+ A7D8BA4223E2514400DCD162 /* SDL_render_gles.c in Sources */,
+ A7D8B43923E2514300DCD162 /* SDL_systhread.c in Sources */,
+ A7D8BB3823E2514500DCD162 /* SDL_windowevents.c in Sources */,
+ A7D8BAC023E2514500DCD162 /* s_scalbn.c in Sources */,
+ A7D8AB3023E2514100DCD162 /* SDL_timer.c in Sources */,
+ A7D8B9E223E2514400DCD162 /* SDL_blendpoint.c in Sources */,
+ A7D8B4F323E2514300DCD162 /* SDL_gamecontroller.c in Sources */,
+ A7D8AB3C23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8ACB023E2514100DCD162 /* SDL_uikitclipboard.m in Sources */,
+ A7D8BA1823E2514400DCD162 /* SDL_render_sw.c in Sources */,
+ A7D8B19323E2514200DCD162 /* SDL_x11video.c in Sources */,
+ A7D8B42723E2514300DCD162 /* SDL_syssem.c in Sources */,
+ A7D8B53E23E2514300DCD162 /* SDL_hidapi_xbox360.c in Sources */,
+ A7D8B8D723E2514400DCD162 /* SDL_coreaudio.m in Sources */,
+ A7D8BA2423E2514400DCD162 /* SDL_blendline.c in Sources */,
+ A7D8ADF723E2514100DCD162 /* SDL_blit_A.c in Sources */,
+ A7D8BA3C23E2514400DCD162 /* SDL_d3dmath.c in Sources */,
+ A7D8B17B23E2514200DCD162 /* SDL_x11mouse.c in Sources */,
+ A7D8ABF023E2514100DCD162 /* SDL_nullvideo.c in Sources */,
+ A7D8AB6C23E2514100DCD162 /* SDL_offscreenevents.c in Sources */,
+ A7D8ACAA23E2514100DCD162 /* SDL_uikitview.m in Sources */,
+ A7D8ABF623E2514100DCD162 /* SDL_nullevents.c in Sources */,
+ A7D8B81D23E2514400DCD162 /* SDL_audiodev.c in Sources */,
+ A7D8AF1123E2514100DCD162 /* SDL_cocoaclipboard.m in Sources */,
+ A7D8ABD223E2514100DCD162 /* SDL_blit_slow.c in Sources */,
+ A7D8BA9C23E2514400DCD162 /* s_copysign.c in Sources */,
+ A7D8AABB23E2514100DCD162 /* SDL_haptic.c in Sources */,
+ A7D8AC9223E2514100DCD162 /* SDL_uikitvulkan.m in Sources */,
+ A7D8B15723E2514200DCD162 /* SDL_x11modes.c in Sources */,
+ A7D8AF2923E2514100DCD162 /* SDL_cocoametalview.m in Sources */,
+ A7D8B86523E2514400DCD162 /* SDL_audiotypecvt.c in Sources */,
+ A7D8AC5C23E2514100DCD162 /* SDL_uikitevents.m in Sources */,
+ A7D8ACBC23E2514100DCD162 /* SDL_uikitmodes.m in Sources */,
+ A7D8AD3723E2514100DCD162 /* SDL_blit_N.c in Sources */,
+ A7D8BB8023E2514500DCD162 /* SDL_dropevents.c in Sources */,
+ A7D8BAD223E2514500DCD162 /* e_atan2.c in Sources */,
+ A7D8BA9023E2514400DCD162 /* s_sin.c in Sources */,
+ A7D8B5EC23E2514300DCD162 /* SDL_power.c in Sources */,
+ A7D8AEDB23E2514100DCD162 /* SDL_cocoakeyboard.m in Sources */,
+ A7D8AB1B23E2514100DCD162 /* SDL_dynapi.c in Sources */,
+ A7D8BA8A23E2514400DCD162 /* SDL_shaders_gl.c in Sources */,
+ A7D8BAF623E2514500DCD162 /* e_log.c in Sources */,
+ A7D8AED523E2514100DCD162 /* SDL_cocoamessagebox.m in Sources */,
+ A7D8BA3023E2514400DCD162 /* SDL_blendfillrect.c in Sources */,
+ A7D8ACE023E2514100DCD162 /* SDL_uikitvideo.m in Sources */,
+ A7D8AEE723E2514100DCD162 /* SDL_cocoashape.m in Sources */,
+ A7D8AEBD23E2514100DCD162 /* SDL_cocoamouse.m in Sources */,
+ A7D8B8E923E2514400DCD162 /* SDL_error.c in Sources */,
+ A7D8AD6D23E2514100DCD162 /* SDL_blit.c in Sources */,
+ A7D8B5C223E2514300DCD162 /* SDL_rwops.c in Sources */,
+ A7D8ACD423E2514100DCD162 /* SDL_uikitviewcontroller.m in Sources */,
+ A7D8BA9623E2514400DCD162 /* s_cos.c in Sources */,
+ A7D8B9D623E2514400DCD162 /* SDL_yuv_sw.c in Sources */,
+ A7D8B76F23E2514300DCD162 /* SDL_wave.c in Sources */,
+ A7D8BAD823E2514500DCD162 /* s_tan.c in Sources */,
+ A7D8AA6A23E2514000DCD162 /* SDL_hints.c in Sources */,
+ A7D8B54423E2514300DCD162 /* SDL_hidapi_ps4.c in Sources */,
+ A7D8AD7323E2514100DCD162 /* SDL_pixels.c in Sources */,
+ A7D8B1A523E2514200DCD162 /* SDL_x11clipboard.c in Sources */,
+ A7D8B76323E2514300DCD162 /* SDL_sysloadso.c in Sources */,
+ A7D8B16F23E2514200DCD162 /* SDL_x11xinput2.c in Sources */,
+ A7D8B5F823E2514300DCD162 /* SDL_syspower.c in Sources */,
+ A7D8B1C923E2514200DCD162 /* SDL_x11touch.c in Sources */,
+ A7D8B95523E2514400DCD162 /* SDL_iconv.c in Sources */,
+ A7D8BAA223E2514400DCD162 /* s_fabs.c in Sources */,
+ A7D8B1E723E2514200DCD162 /* SDL_x11shape.c in Sources */,
+ A7D8B19923E2514200DCD162 /* imKStoUCS.c in Sources */,
+ A7D8B99723E2514400DCD162 /* SDL_shaders_metal.metal in Sources */,
+ A7D8AC5023E2514100DCD162 /* SDL_uikitwindow.m in Sources */,
+ A7D8B97F23E2514400DCD162 /* SDL_render.c in Sources */,
+ A7D8ABD823E2514100DCD162 /* SDL_stretch.c in Sources */,
+ A7D8BB0223E2514500DCD162 /* s_floor.c in Sources */,
+ A7D8AC3E23E2514100DCD162 /* SDL_blit_copy.c in Sources */,
+ A7D8BAE423E2514500DCD162 /* e_fmod.c in Sources */,
+ A7D8B5D423E2514300DCD162 /* SDL_syspower.m in Sources */,
+ A7D8BAF023E2514500DCD162 /* e_log10.c in Sources */,
+ A7D8AC7423E2514100DCD162 /* SDL_uikitopenglview.m in Sources */,
+ A7D8B76923E2514300DCD162 /* SDL_mixer.c in Sources */,
+ A7D8BB5C23E2514500DCD162 /* SDL_events.c in Sources */,
+ A7D8ADEB23E2514100DCD162 /* SDL_blit_0.c in Sources */,
+ A7D8BB0E23E2514500DCD162 /* k_tan.c in Sources */,
+ A7D8B16323E2514200DCD162 /* SDL_x11vulkan.c in Sources */,
+ A7D8B8AD23E2514400DCD162 /* SDL_diskaudio.c in Sources */,
+ A7D8AFC523E2514200DCD162 /* SDL_egl.c in Sources */,
+ A7D8AC3823E2514100DCD162 /* SDL_RLEaccel.c in Sources */,
+ A7D8BBB623E2514500DCD162 /* SDL_assert.c in Sources */,
+ A7D8B3DF23E2514300DCD162 /* SDL_bmp.c in Sources */,
+ A7D8B97323E2514400DCD162 /* SDL_stdlib.c in Sources */,
+ A7D8B79F23E2514400DCD162 /* SDL_dummyaudio.c in Sources */,
+ A7D8B3A923E2514200DCD162 /* SDL_fillrect.c in Sources */,
+ A7D8ABE423E2514100DCD162 /* SDL_nullframebuffer.c in Sources */,
+ A7D8A96E23E2514000DCD162 /* SDL_dummysensor.c in Sources */,
+ A7D8B96123E2514400DCD162 /* SDL_string.c in Sources */,
+ A7D8BA8423E2514400DCD162 /* SDL_render_gl.c in Sources */,
+ A7D8AC8623E2514100DCD162 /* SDL_uikitopengles.m in Sources */,
+ A7D8B20523E2514200DCD162 /* SDL_x11opengles.c in Sources */,
+ A7D8AE9923E2514100DCD162 /* SDL_cocoamodes.m in Sources */,
+ A75FDB8F23E4C80B00529352 /* SDL_hidapi.c in Sources */,
+ A7D8BAA823E2514400DCD162 /* k_rem_pio2.c in Sources */,
+ A7D8B57A23E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8BB9E23E2514500DCD162 /* SDL_gesture.c in Sources */,
+ A7D8B95B23E2514400DCD162 /* SDL_getenv.c in Sources */,
+ A7D8B56823E2514300DCD162 /* SDL_hidapi_gamecube.c in Sources */,
+ A7D8B4E123E2514300DCD162 /* SDL_joystick.c in Sources */,
+ A7D8BA4E23E2514400DCD162 /* SDL_render_gles2.c in Sources */,
+ A7D8AC3223E2514100DCD162 /* SDL_surface.c in Sources */,
+ A7D8B55023E2514300DCD162 /* SDL_hidapi_xboxone.c in Sources */,
+ A7D8AD2823E2514100DCD162 /* SDL_blit_auto.c in Sources */,
+ A7D8B1AB23E2514200DCD162 /* SDL_x11keyboard.c in Sources */,
+ A7D8BB6E23E2514500DCD162 /* SDL_keyboard.c in Sources */,
+ A7D8ACEC23E2514100DCD162 /* SDL_rect.c in Sources */,
+ A7D8AE9F23E2514100DCD162 /* SDL_cocoaopengles.m in Sources */,
+ A7D8B96D23E2514400DCD162 /* SDL_qsort.c in Sources */,
+ A7D8B55623E2514300DCD162 /* SDL_hidapi_switch.c in Sources */,
+ A7D8B96723E2514400DCD162 /* SDL_strtokr.c in Sources */,
+ A7D8BB7A23E2514500DCD162 /* SDL_clipboardevents.c in Sources */,
+ A7D8B18723E2514200DCD162 /* SDL_x11framebuffer.c in Sources */,
+ A7D8BABA23E2514400DCD162 /* k_cos.c in Sources */,
+ A7D8B54A23E2514300DCD162 /* SDL_hidapijoystick.c in Sources */,
+ A7D8B97923E2514400DCD162 /* SDL_malloc.c in Sources */,
+ A7D8B8CB23E2514400DCD162 /* SDL_audio.c in Sources */,
+ A7D8B62223E2514300DCD162 /* SDL_sysfilesystem.c in Sources */,
+ A7D8AB9023E2514100DCD162 /* SDL_offscreenvideo.c in Sources */,
+ A7D8B43323E2514300DCD162 /* SDL_syscond.c in Sources */,
+ A7D8AADF23E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8BAEA23E2514500DCD162 /* e_exp.c in Sources */,
+ A7D8BB8623E2514500DCD162 /* SDL_quit.c in Sources */,
+ A7D8AEAB23E2514100DCD162 /* SDL_cocoawindow.m in Sources */,
+ A7D8B43F23E2514300DCD162 /* SDL_sysmutex.c in Sources */,
+ A7D8AAB523E2514100DCD162 /* SDL_syshaptic.c in Sources */,
+ A7D8B5CE23E2514300DCD162 /* SDL_rwopsbundlesupport.m in Sources */,
+ A7D8AC1423E2514100DCD162 /* SDL_video.c in Sources */,
+ A7D8AB5A23E2514100DCD162 /* SDL_offscreenopengl.c in Sources */,
+ A7D8ACC823E2514100DCD162 /* SDL_uikitmetalview.m in Sources */,
+ A7D8BBBA23E2560600DCD162 /* SDL_steamcontroller.c in Sources */,
+ A7D8BA6023E2514400DCD162 /* SDL_shaders_gles2.c in Sources */,
+ A7D8B14523E2514200DCD162 /* SDL_blit_1.c in Sources */,
+ A7D8B18123E2514200DCD162 /* SDL_x11dyn.c in Sources */,
+ A7D8BB1A23E2514500DCD162 /* SDL_mouse.c in Sources */,
+ A7D8BADE23E2514500DCD162 /* e_rem_pio2.c in Sources */,
+ A7D8BB1423E2514500DCD162 /* SDL_dataqueue.c in Sources */,
+ A7D8B4B723E2514300DCD162 /* SDL_sysjoystick.c in Sources */,
+ A7D8B3E523E2514300DCD162 /* SDL_cpuinfo.c in Sources */,
+ A7D8A99823E2514000DCD162 /* SDL_sensor.c in Sources */,
+ A7D8B18D23E2514200DCD162 /* SDL_x11window.c in Sources */,
+ A7D8BAAE23E2514400DCD162 /* k_sin.c in Sources */,
+ A7D8B1CF23E2514200DCD162 /* edid-parse.c in Sources */,
+ A7D8AB4E23E2514100DCD162 /* SDL_systimer.c in Sources */,
+ A7D8BA2A23E2514400DCD162 /* SDL_drawpoint.c in Sources */,
+ A7D8BAFC23E2514500DCD162 /* e_sqrt.c in Sources */,
+ A7D8AEB123E2514100DCD162 /* SDL_cocoavideo.m in Sources */,
+ A7D8A95023E2514000DCD162 /* SDL.c in Sources */,
+ A7D8B15D23E2514200DCD162 /* SDL_x11opengl.c in Sources */,
+ A7D8AEA523E2514100DCD162 /* SDL_cocoavulkan.m in Sources */,
+ A7D8AC6823E2514100DCD162 /* SDL_uikitappdelegate.m in Sources */,
+ A7D8AB6623E2514100DCD162 /* SDL_offscreenwindow.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@@ -3093,6 +10065,11 @@
target = BECDF5FE0761BA81005FE872 /* Framework */;
targetProxy = BECDF6C50761BA81005FE872 /* PBXContainerItemProxy */;
};
+ F3190017240CA3BA00ED104F /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = A75FDB8023E4C74400529352 /* hidapi */;
+ targetProxy = F3190016240CA3BA00ED104F /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -3118,7 +10095,11 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEPLOYMENT_POSTPROCESSING = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1.0.0;
+ DYLIB_CURRENT_VERSION = 12.0.0;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_ALTIVEC_EXTENSIONS = YES;
GCC_AUTO_VECTORIZATION = YES;
@@ -3139,9 +10120,14 @@
../../src/video/khronos,
../../src/hidapi/hidapi,
);
+ INFOPLIST_FILE = "Info-Framework.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6;
- SDKROOT = macosx;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2;
+ PRODUCT_NAME = SDL2;
STRIP_STYLE = "non-global";
+ TVOS_DEPLOYMENT_TARGET = 9.0;
};
name = Release;
};
@@ -3148,23 +10134,8 @@
00CFA622106A567900758660 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_LINK_OBJC_RUNTIME = NO;
- COMBINE_HIDPI_IMAGES = YES;
- DYLIB_COMPATIBILITY_VERSION = 1.0.0;
- DYLIB_CURRENT_VERSION = 11.0.0;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)",
- );
- FRAMEWORK_VERSION = A;
- INFOPLIST_FILE = "Info-Framework.plist";
- INSTALL_PATH = "@rpath";
OTHER_LDFLAGS = "-liconv";
- PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2;
- PRODUCT_NAME = SDL2;
- PROVISIONING_PROFILE = "";
- WRAPPER_EXTENSION = framework;
};
name = Release;
};
@@ -3171,17 +10142,7 @@
00CFA623106A567900758660 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COMBINE_HIDPI_IMAGES = YES;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(GCC_PREPROCESSOR_DEFINITIONS)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_2)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_3)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_4)",
- );
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
- PRODUCT_NAME = SDL2;
SKIP_INSTALL = YES;
};
name = Release;
@@ -3189,9 +10150,6 @@
00CFA625106A567900758660 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- PRODUCT_NAME = "Standard DMG";
- PROVISIONING_PROFILE = "";
};
name = Release;
};
@@ -3217,6 +10175,10 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DYLIB_COMPATIBILITY_VERSION = 1.0.0;
+ DYLIB_CURRENT_VERSION = 12.0.0;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_ALTIVEC_EXTENSIONS = YES;
@@ -3237,10 +10199,15 @@
../../src/video/khronos,
../../src/hidapi/hidapi,
);
+ INFOPLIST_FILE = "Info-Framework.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.6;
ONLY_ACTIVE_ARCH = YES;
- SDKROOT = macosx;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2;
+ PRODUCT_NAME = SDL2;
STRIP_INSTALLED_PRODUCT = NO;
+ TVOS_DEPLOYMENT_TARGET = 9.0;
};
name = Debug;
};
@@ -3247,23 +10214,8 @@
00CFA628106A568900758660 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_LINK_OBJC_RUNTIME = NO;
- COMBINE_HIDPI_IMAGES = YES;
- DYLIB_COMPATIBILITY_VERSION = 1.0.0;
- DYLIB_CURRENT_VERSION = 11.0.0;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)",
- );
- FRAMEWORK_VERSION = A;
- INFOPLIST_FILE = "Info-Framework.plist";
- INSTALL_PATH = "@rpath";
OTHER_LDFLAGS = "-liconv";
- PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2;
- PRODUCT_NAME = SDL2;
- PROVISIONING_PROFILE = "";
- WRAPPER_EXTENSION = framework;
};
name = Debug;
};
@@ -3270,17 +10222,7 @@
00CFA629106A568900758660 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COMBINE_HIDPI_IMAGES = YES;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(GCC_PREPROCESSOR_DEFINITIONS)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_2)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_3)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_4)",
- );
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
- PRODUCT_NAME = SDL2;
SKIP_INSTALL = YES;
};
name = Debug;
@@ -3288,49 +10230,256 @@
00CFA62B106A568900758660 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- PRODUCT_NAME = "Standard DMG";
- PROVISIONING_PROFILE = "";
};
name = Debug;
};
- DB31407517554B71006C0E22 /* Debug */ = {
+ A75FCEB123E25AB700529352 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COMBINE_HIDPI_IMAGES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
EXECUTABLE_PREFIX = lib;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(GCC_PREPROCESSOR_DEFINITIONS)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_2)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_3)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_4)",
- );
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
INSTALL_PATH = "@rpath";
- PRODUCT_NAME = SDL2;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ A75FCEB223E25AB700529352 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ EXECUTABLE_PREFIX = lib;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ INSTALL_PATH = "@rpath";
+ SDKROOT = iphoneos;
+ };
+ name = Release;
+ };
+ A75FD06A23E25AC700529352 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ EXECUTABLE_PREFIX = lib;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ INSTALL_PATH = "@rpath";
+ SDKROOT = appletvos;
+ };
+ name = Debug;
+ };
+ A75FD06B23E25AC700529352 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ EXECUTABLE_PREFIX = lib;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ INSTALL_PATH = "@rpath";
+ SDKROOT = appletvos;
+ };
+ name = Release;
+ };
+ A75FDB4E23E399AC00529352 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = hidapi;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ A75FDB4F23E399AC00529352 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = hidapi;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ A75FDB6C23E3A2C900529352 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = hidapi;
+ SDKROOT = appletvos;
+ };
+ name = Debug;
+ };
+ A75FDB6D23E3A2C900529352 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = hidapi;
+ SDKROOT = appletvos;
+ };
+ name = Release;
+ };
+ A75FDB8A23E4C74400529352 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ A75FDB8B23E4C74400529352 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CURRENT_PROJECT_VERSION = 1.0;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ GCC_PREPROCESSOR_DEFINITIONS = "HID_API_EXPORT=\"__attribute__ ((visibility(\\\"default\\\")))\"";
+ INFOPLIST_FILE = hidapi/Info.plist;
+ PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.hidapi;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ A769B23B23E259AE00872273 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
};
name = Debug;
};
+ A769B23C23E259AE00872273 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "appletvsimulator appletvos";
+ };
+ name = Release;
+ };
+ A7D88B5223E2437C00DCD162 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ OTHER_LDFLAGS = "-liconv";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ A7D88B5323E2437C00DCD162 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ OTHER_LDFLAGS = "-liconv";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+ A7D88D1323E24BED00DCD162 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ OTHER_LDFLAGS = "-liconv";
+ SDKROOT = appletvos;
+ };
+ name = Debug;
+ };
+ A7D88D1423E24BED00DCD162 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = "IOS_DYLIB=1";
+ OTHER_LDFLAGS = "-liconv";
+ SDKROOT = appletvos;
+ };
+ name = Release;
+ };
+ A7D88E5223E24D3B00DCD162 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+ };
+ name = Debug;
+ };
+ A7D88E5323E24D3B00DCD162 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_LINK_OBJC_RUNTIME = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ SKIP_INSTALL = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+ };
+ name = Release;
+ };
+ DB31407517554B71006C0E22 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ EXECUTABLE_PREFIX = lib;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ INSTALL_PATH = "@rpath";
+ };
+ name = Debug;
+ };
DB31407617554B71006C0E22 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- COMBINE_HIDPI_IMAGES = YES;
EXECUTABLE_PREFIX = lib;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(GCC_PREPROCESSOR_DEFINITIONS)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_2)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_3)",
- "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_4)",
- );
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
INSTALL_PATH = "@rpath";
- PRODUCT_NAME = SDL2;
- SKIP_INSTALL = YES;
};
name = Release;
};
@@ -3369,6 +10518,87 @@
buildConfigurations = (
00CFA627106A568900758660 /* Debug */,
00CFA621106A567900758660 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A75FCEB023E25AB700529352 /* Build configuration list for PBXNativeTarget "Shared Library-iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A75FCEB123E25AB700529352 /* Debug */,
+ A75FCEB223E25AB700529352 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A75FD06923E25AC700529352 /* Build configuration list for PBXNativeTarget "Shared Library-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A75FD06A23E25AC700529352 /* Debug */,
+ A75FD06B23E25AC700529352 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A75FDB5023E399AC00529352 /* Build configuration list for PBXNativeTarget "hidapi-iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A75FDB4E23E399AC00529352 /* Debug */,
+ A75FDB4F23E399AC00529352 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A75FDB6B23E3A2C900529352 /* Build configuration list for PBXNativeTarget "hidapi-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A75FDB6C23E3A2C900529352 /* Debug */,
+ A75FDB6D23E3A2C900529352 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A75FDB8923E4C74400529352 /* Build configuration list for PBXNativeTarget "hidapi" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A75FDB8A23E4C74400529352 /* Debug */,
+ A75FDB8B23E4C74400529352 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A769B23A23E259AE00872273 /* Build configuration list for PBXNativeTarget "Static Library-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A769B23B23E259AE00872273 /* Debug */,
+ A769B23C23E259AE00872273 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A7D88B5123E2437C00DCD162 /* Build configuration list for PBXNativeTarget "Framework-iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A7D88B5223E2437C00DCD162 /* Debug */,
+ A7D88B5323E2437C00DCD162 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A7D88D1223E24BED00DCD162 /* Build configuration list for PBXNativeTarget "Framework-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A7D88D1323E24BED00DCD162 /* Debug */,
+ A7D88D1423E24BED00DCD162 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ A7D88E5123E24D3B00DCD162 /* Build configuration list for PBXNativeTarget "Static Library-iOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A7D88E5223E24D3B00DCD162 /* Debug */,
+ A7D88E5323E24D3B00DCD162 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
--- /dev/null
+++ b/external/SDL2/Xcode/SDL/hidapi/Info.plist
@@ -1,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>$(DEVELOPMENT_LANGUAGE)</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
+ <key>CFBundleShortVersionString</key>
+ <string>$(CURRENT_PROJECT_VERSION)</string>
+ <key>CFBundleVersion</key>
+ <string>$(CURRENT_PROJECT_VERSION)</string>
+</dict>
+</plist>
--- a/external/SDL2/Xcode/SDL/pkg-support/resources/License.txt
+++ b/external/SDL2/Xcode/SDL/pkg-support/resources/License.txt
@@ -1,6 +1,6 @@
Simple DirectMedia Layer
-Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/android-project/app/build.gradle
+++ b/external/SDL2/android-project/app/build.gradle
@@ -22,6 +22,11 @@
arguments "APP_PLATFORM=android-16"
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
+ // cmake {
+ // arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
+ // // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
+ // abiFilters 'arm64-v8a'
+ // }
}
}
buildTypes {
@@ -38,6 +43,9 @@
ndkBuild {
path 'jni/Android.mk'
}
+ // cmake {
+ // path 'jni/CMakeLists.txt'
+ // }
}
}
--- /dev/null
+++ b/external/SDL2/android-project/app/jni/CMakeLists.txt
@@ -1,0 +1,20 @@
+cmake_minimum_required(VERSION 3.6)
+
+project(GAME)
+
+# armeabi-v7a requires cpufeatures library
+# include(AndroidNdkModules)
+# android_ndk_import_module_cpufeatures()
+
+
+# SDL sources are in a subfolder named "SDL"
+add_subdirectory(SDL)
+
+# Compilation of companion libraries
+#add_subdirectory(SDL_image)
+#add_subdirectory(SDL_mixer)
+#add_subdirectory(SDL_ttf)
+
+# Your game and its CMakeLists.txt are in a subfolder named "src"
+add_subdirectory(src)
+
--- /dev/null
+++ b/external/SDL2/android-project/app/jni/src/CMakeLists.txt
@@ -1,0 +1,13 @@
+cmake_minimum_required(VERSION 3.6)
+
+project(MY_APP)
+
+find_library(SDL2 SDL2)
+
+add_library(main SHARED)
+
+target_sources(main PRIVATE YourSourceHere.c)
+
+target_link_libraries(main SDL2)
+
+
--- a/external/SDL2/android-project/app/src/main/AndroidManifest.xml
+++ b/external/SDL2/android-project/app/src/main/AndroidManifest.xml
@@ -18,8 +18,14 @@
<!-- Game controller support -->
<uses-feature
+ android:name="android.hardware.bluetooth"
+ android:required="false" />
+ <uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
+ <uses-feature
+ android:name="android.hardware.usb.host"
+ android:required="false" />
<!-- External mouse input events -->
<uses-feature
@@ -26,8 +32,16 @@
android:name="android.hardware.type.pc"
android:required="false" />
+ <!-- Audio recording support -->
+ <!-- if you want to capture audio, uncomment this. -->
+ <!-- <uses-feature
+ android:name="android.hardware.microphone"
+ android:required="false" /> -->
+
<!-- Allow writing to external storage -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <!-- Allow access to Bluetooth devices -->
+ <uses-permission android:name="android.permission.BLUETOOTH" />
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
--- a/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java
+++ b/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDevice.java
@@ -1,5 +1,7 @@
package org.libsdl.app;
+import android.hardware.usb.UsbDevice;
+
interface HIDDevice
{
public int getId();
@@ -9,6 +11,7 @@
public int getVersion();
public String getManufacturerName();
public String getProductName();
+ public UsbDevice getDevice();
public boolean open();
public int sendFeatureReport(byte[] report);
public int sendOutputReport(byte[] report);
--- a/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
+++ b/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
@@ -9,6 +9,7 @@
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothGattService;
+import android.hardware.usb.UsbDevice;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
@@ -165,13 +166,13 @@
mHandler = new Handler(Looper.getMainLooper());
mGatt = connectGatt();
- final HIDDeviceBLESteamController finalThis = this;
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- finalThis.checkConnectionForChromebookIssue();
- }
- }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
+ // final HIDDeviceBLESteamController finalThis = this;
+ // mHandler.postDelayed(new Runnable() {
+ // @Override
+ // public void run() {
+ // finalThis.checkConnectionForChromebookIssue();
+ // }
+ // }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
}
public String getIdentifier() {
@@ -469,7 +470,7 @@
// Only register controller with the native side once it has been fully configured
if (!isRegistered()) {
Log.v(TAG, "Registering Steam Controller with ID: " + getId());
- mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0);
+ mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0);
setRegistered();
}
}
@@ -562,6 +563,11 @@
public String getProductName() {
return "Steam Controller";
}
+
+ @Override
+ public UsbDevice getDevice() {
+ return null;
+ }
@Override
public boolean open() {
--- a/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
+++ b/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
@@ -19,8 +19,9 @@
import android.os.Handler;
import android.os.Looper;
-import java.util.HashMap;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
public class HIDDeviceManager {
@@ -50,7 +51,6 @@
private Context mContext;
private HashMap<Integer, HIDDevice> mDevicesById = new HashMap<Integer, HIDDevice>();
- private HashMap<UsbDevice, HIDDeviceUSB> mUSBDevices = new HashMap<UsbDevice, HIDDeviceUSB>();
private HashMap<BluetoothDevice, HIDDeviceBLESteamController> mBluetoothDevices = new HashMap<BluetoothDevice, HIDDeviceBLESteamController>();
private int mNextDeviceId = 0;
private SharedPreferences mSharedPreferences = null;
@@ -241,24 +241,12 @@
}
}
- private boolean isHIDDeviceUSB(UsbDevice usbDevice) {
- for (int interface_number = 0; interface_number < usbDevice.getInterfaceCount(); ++interface_number) {
- if (isHIDDeviceInterface(usbDevice, interface_number)) {
- return true;
- }
- }
- return false;
- }
-
- private boolean isHIDDeviceInterface(UsbDevice usbDevice, int interface_number) {
- UsbInterface usbInterface = usbDevice.getInterface(interface_number);
+ private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) {
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) {
return true;
}
- if (interface_number == 0) {
- if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
- return true;
- }
+ if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
+ return true;
}
return false;
}
@@ -265,7 +253,8 @@
private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) {
final int XB360_IFACE_SUBCLASS = 93;
- final int XB360_IFACE_PROTOCOL = 1; // Wired only
+ final int XB360_IFACE_PROTOCOL = 1; // Wired
+ final int XB360W_IFACE_PROTOCOL = 129; // Wireless
final int[] SUPPORTED_VENDORS = {
0x0079, // GPD Win 2
0x044f, // Thrustmaster
@@ -275,8 +264,9 @@
0x06a3, // Saitek
0x0738, // Mad Catz
0x07ff, // Mad Catz
- 0x0e6f, // Unknown
+ 0x0e6f, // PDP
0x0f0d, // Hori
+ 0x1038, // SteelSeries
0x11c9, // Nacon
0x12ab, // Unknown
0x1430, // RedOctane
@@ -291,7 +281,8 @@
if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS &&
- usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL) {
+ (usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL ||
+ usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) {
int vendor_id = usbDevice.getVendorId();
for (int supportedVid : SUPPORTED_VENDORS) {
if (vendor_id == supportedVid) {
@@ -308,13 +299,15 @@
final int[] SUPPORTED_VENDORS = {
0x045e, // Microsoft
0x0738, // Mad Catz
- 0x0e6f, // Unknown
+ 0x0e6f, // PDP
0x0f0d, // Hori
0x1532, // Razer Wildcat
0x24c6, // PowerA
+ 0x2e24, // Hyperkin
};
- if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
+ if (usbInterface.getId() == 0 &&
+ usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
usbInterface.getInterfaceSubclass() == XB1_IFACE_SUBCLASS &&
usbInterface.getInterfaceProtocol() == XB1_IFACE_PROTOCOL) {
int vendor_id = usbDevice.getVendorId();
@@ -328,45 +321,45 @@
}
private void handleUsbDeviceAttached(UsbDevice usbDevice) {
- if (isHIDDeviceUSB(usbDevice)) {
- connectHIDDeviceUSB(usbDevice);
- }
+ connectHIDDeviceUSB(usbDevice);
}
private void handleUsbDeviceDetached(UsbDevice usbDevice) {
- HIDDeviceUSB device = mUSBDevices.get(usbDevice);
- if (device == null)
- return;
-
- int id = device.getId();
- mUSBDevices.remove(usbDevice);
- mDevicesById.remove(id);
- device.shutdown();
- HIDDeviceDisconnected(id);
+ List<Integer> devices = new ArrayList<Integer>();
+ for (HIDDevice device : mDevicesById.values()) {
+ if (usbDevice.equals(device.getDevice())) {
+ devices.add(device.getId());
+ }
+ }
+ for (int id : devices) {
+ HIDDevice device = mDevicesById.get(id);
+ mDevicesById.remove(id);
+ device.shutdown();
+ HIDDeviceDisconnected(id);
+ }
}
private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) {
- HIDDeviceUSB device = mUSBDevices.get(usbDevice);
- if (device == null)
- return;
-
- boolean opened = false;
- if (permission_granted) {
- opened = device.open();
+ for (HIDDevice device : mDevicesById.values()) {
+ if (usbDevice.equals(device.getDevice())) {
+ boolean opened = false;
+ if (permission_granted) {
+ opened = device.open();
+ }
+ HIDDeviceOpenResult(device.getId(), opened);
+ }
}
- HIDDeviceOpenResult(device.getId(), opened);
}
private void connectHIDDeviceUSB(UsbDevice usbDevice) {
synchronized (this) {
- for (int interface_number = 0; interface_number < usbDevice.getInterfaceCount(); interface_number++) {
- if (isHIDDeviceInterface(usbDevice, interface_number)) {
- HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_number);
+ for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) {
+ UsbInterface usbInterface = usbDevice.getInterface(interface_index);
+ if (isHIDDeviceInterface(usbDevice, usbInterface)) {
+ HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index);
int id = device.getId();
- mUSBDevices.put(usbDevice, device);
mDevicesById.put(id, device);
- HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), interface_number);
- break;
+ HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol());
}
}
}
@@ -563,33 +556,27 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean openDevice(int deviceID) {
+ Log.v(TAG, "openDevice deviceID=" + deviceID);
+ HIDDevice device = getDevice(deviceID);
+ if (device == null) {
+ HIDDeviceDisconnected(deviceID);
+ return false;
+ }
+
// Look to see if this is a USB device and we have permission to access it
- for (HIDDeviceUSB device : mUSBDevices.values()) {
- if (deviceID == device.getId()) {
- UsbDevice usbDevice = device.getDevice();
- if (!mUsbManager.hasPermission(usbDevice)) {
- HIDDeviceOpenPending(deviceID);
- try {
- mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
- } catch (Exception e) {
- Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
- HIDDeviceOpenResult(deviceID, false);
- }
- return false;
- }
- break;
+ UsbDevice usbDevice = device.getDevice();
+ if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) {
+ HIDDeviceOpenPending(deviceID);
+ try {
+ mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
+ } catch (Exception e) {
+ Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
+ HIDDeviceOpenResult(deviceID, false);
}
+ return false;
}
try {
- Log.v(TAG, "openDevice deviceID=" + deviceID);
- HIDDevice device;
- device = getDevice(deviceID);
- if (device == null) {
- HIDDeviceDisconnected(deviceID);
- return false;
- }
-
return device.open();
} catch (Exception e) {
Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
@@ -599,7 +586,7 @@
public int sendOutputReport(int deviceID, byte[] report) {
try {
- Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
+ //Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -616,7 +603,7 @@
public int sendFeatureReport(int deviceID, byte[] report) {
try {
- Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
+ //Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -633,7 +620,7 @@
public boolean getFeatureReport(int deviceID, byte[] report) {
try {
- Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
+ //Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
HIDDevice device;
device = getDevice(deviceID);
if (device == null) {
@@ -672,7 +659,7 @@
private native void HIDDeviceRegisterCallback();
private native void HIDDeviceReleaseCallback();
- native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number);
+ native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
native void HIDDeviceOpenPending(int deviceID);
native void HIDDeviceOpenResult(int deviceID, boolean opened);
native void HIDDeviceDisconnected(int deviceID);
--- a/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
+++ b/external/SDL2/android-project/app/src/main/java/org/libsdl/app/HIDDeviceUSB.java
@@ -11,6 +11,7 @@
protected HIDDeviceManager mManager;
protected UsbDevice mDevice;
+ protected int mInterfaceIndex;
protected int mInterface;
protected int mDeviceId;
protected UsbDeviceConnection mConnection;
@@ -20,16 +21,17 @@
protected boolean mRunning;
protected boolean mFrozen;
- public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_number) {
+ public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) {
mManager = manager;
mDevice = usbDevice;
- mInterface = interface_number;
+ mInterfaceIndex = interface_index;
+ mInterface = mDevice.getInterface(mInterfaceIndex).getId();
mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier());
mRunning = false;
}
public String getIdentifier() {
- return String.format("%s/%x/%x", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId());
+ return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex);
}
@Override
@@ -88,6 +90,7 @@
return result;
}
+ @Override
public UsbDevice getDevice() {
return mDevice;
}
@@ -104,19 +107,15 @@
return false;
}
- // Force claim all interfaces
- for (int i = 0; i < mDevice.getInterfaceCount(); i++) {
- UsbInterface iface = mDevice.getInterface(i);
-
- if (!mConnection.claimInterface(iface, true)) {
- Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
- close();
- return false;
- }
+ // Force claim our interface
+ UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
+ if (!mConnection.claimInterface(iface, true)) {
+ Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
+ close();
+ return false;
}
// Find the endpoints
- UsbInterface iface = mDevice.getInterface(mInterface);
for (int j = 0; j < iface.getEndpointCount(); j++) {
UsbEndpoint endpt = iface.getEndpoint(j);
switch (endpt.getDirection()) {
@@ -166,7 +165,7 @@
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT,
0x09/*HID set_report*/,
(3/*HID feature*/ << 8) | report_number,
- 0,
+ mInterface,
report, offset, length,
1000/*timeout millis*/);
@@ -210,7 +209,7 @@
UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN,
0x01/*HID get_report*/,
(3/*HID feature*/ << 8) | report_number,
- 0,
+ mInterface,
report, offset, length,
1000/*timeout millis*/);
@@ -250,10 +249,8 @@
mInputThread = null;
}
if (mConnection != null) {
- for (int i = 0; i < mDevice.getInterfaceCount(); i++) {
- UsbInterface iface = mDevice.getInterface(i);
- mConnection.releaseInterface(iface);
- }
+ UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
+ mConnection.releaseInterface(iface);
mConnection.close();
mConnection = null;
}
--- a/external/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/external/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -283,10 +283,6 @@
return;
}
- if (mHIDDeviceManager != null) {
- mHIDDeviceManager.setFrozen(true);
- }
-
SDLActivity.handleNativeState();
}
@@ -298,10 +294,6 @@
return;
}
- if (mHIDDeviceManager != null) {
- mHIDDeviceManager.setFrozen(false);
- }
-
SDLActivity.handleNativeState();
}
@@ -310,6 +302,10 @@
protected void onPause() {
Log.v(TAG, "onPause()");
super.onPause();
+
+ if (mHIDDeviceManager != null) {
+ mHIDDeviceManager.setFrozen(true);
+ }
if (!mHasMultiWindow) {
pauseNativeThread();
}
@@ -319,6 +315,10 @@
protected void onResume() {
Log.v(TAG, "onResume()");
super.onResume();
+
+ if (mHIDDeviceManager != null) {
+ mHIDDeviceManager.setFrozen(false);
+ }
if (!mHasMultiWindow) {
resumeNativeThread();
}
@@ -453,7 +453,9 @@
}
// Default system back button behavior.
- super.onBackPressed();
+ if (!isFinishing()) {
+ super.onBackPressed();
+ }
}
// Called by JNI from SDL.
@@ -466,7 +468,9 @@
runOnUiThread(new Runnable() {
@Override
public void run() {
- SDLActivity.this.superOnBackPressed();
+ if (!SDLActivity.this.isFinishing()) {
+ SDLActivity.this.superOnBackPressed();
+ }
}
});
}
@@ -633,6 +637,8 @@
imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
mScreenKeyboardShown = false;
+
+ mSurface.requestFocus();
}
break;
case COMMAND_SET_KEEP_SCREEN_ON:
@@ -724,7 +730,7 @@
}
}
- if (bShouldWait) {
+ if (bShouldWait && (SDLActivity.getContext() != null)) {
// We'll wait for the surfaceChanged() method, which will notify us
// when called. That way, we know our current size is really the
// size we need, instead of grabbing a size that's still got
@@ -777,6 +783,7 @@
public static native void nativeSetenv(String name, String value);
public static native void onNativeOrientationChanged(int orientation);
public static native void nativeAddTouch(int touchId, String name);
+ public static native void nativePermissionResult(int requestCode, boolean result);
/**
* This method is called by SDL using JNI.
@@ -811,39 +818,62 @@
*/
public void setOrientationBis(int w, int h, boolean resizable, String hint)
{
- int orientation = -1;
+ int orientation_landscape = -1;
+ int orientation_portrait = -1;
+ /* If set, hint "explicitly controls which UI orientations are allowed". */
if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
+ orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
} else if (hint.contains("LandscapeRight")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+ orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
} else if (hint.contains("LandscapeLeft")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
- } else if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
+ orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
+ }
+
+ if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
+ orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
} else if (hint.contains("Portrait")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
+ orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
} else if (hint.contains("PortraitUpsideDown")) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
+ orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
}
- /* no valid hint */
- if (orientation == -1) {
+ boolean is_landscape_allowed = (orientation_landscape == -1 ? false : true);
+ boolean is_portrait_allowed = (orientation_portrait == -1 ? false : true);
+ int req = -1; /* Requested orientation */
+
+ /* No valid hint, nothing is explicitly allowed */
+ if (!is_portrait_allowed && !is_landscape_allowed) {
if (resizable) {
- /* no fixed orientation */
+ /* All orientations are allowed */
+ req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
} else {
- if (w > h) {
- orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
+ /* Fixed window and nothing specified. Get orientation from w/h of created window */
+ req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
+ }
+ } else {
+ /* At least one orientation is allowed */
+ if (resizable) {
+ if (is_portrait_allowed && is_landscape_allowed) {
+ /* hint allows both landscape and portrait, promote to full sensor */
+ req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
} else {
- orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
+ /* Use the only one allowed "orientation" */
+ req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
}
+ } else {
+ /* Fixed window and both orientations are allowed. Choose one. */
+ if (is_portrait_allowed && is_landscape_allowed) {
+ req = (w > h ? orientation_landscape : orientation_portrait);
+ } else {
+ /* Use the only one allowed "orientation" */
+ req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
+ }
}
}
- Log.v("SDL", "setOrientation() orientation=" + orientation + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
- if (orientation != -1) {
- mSingleton.setRequestedOrientation(orientation);
- }
+ Log.v("SDL", "setOrientation() requestedOrientation=" + req + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
+ mSingleton.setRequestedOrientation(req);
}
/**
@@ -970,6 +1000,9 @@
if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.equals("X96-W")) {
return true;
}
+ if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.startsWith("TV")) {
+ return true;
+ }
return false;
}
@@ -979,6 +1012,9 @@
public static boolean isTablet() {
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity)getContext();
+ if (activity == null) {
+ return false;
+ }
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
double dWidthInches = metrics.widthPixels / (double)metrics.xdpi;
@@ -994,6 +1030,9 @@
* This method is called by SDL using JNI.
*/
public static boolean isChromebook() {
+ if (getContext() == null) {
+ return false;
+ }
return getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
}
@@ -1565,6 +1604,32 @@
}
return true;
}
+
+ /**
+ * This method is called by SDL using JNI.
+ */
+ public static void requestPermission(String permission, int requestCode) {
+ if (Build.VERSION.SDK_INT < 23) {
+ nativePermissionResult(requestCode, true);
+ return;
+ }
+
+ Activity activity = (Activity)getContext();
+ if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
+ activity.requestPermissions(new String[]{permission}, requestCode);
+ } else {
+ nativePermissionResult(requestCode, true);
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ nativePermissionResult(requestCode, true);
+ } else {
+ nativePermissionResult(requestCode, false);
+ }
+ }
}
/**
@@ -1590,7 +1655,7 @@
Log.v("SDL", "Finished main function");
- if (SDLActivity.mSingleton.isFinishing()) {
+ if (SDLActivity.mSingleton == null || SDLActivity.mSingleton.isFinishing()) {
// Activity is already being destroyed
} else {
// Let's finish the Activity
@@ -1825,7 +1890,9 @@
if (source == InputDevice.SOURCE_UNKNOWN) {
InputDevice device = InputDevice.getDevice(deviceId);
- source = device.getSources();
+ if (device != null) {
+ source = device.getSources();
+ }
}
if ((source & InputDevice.SOURCE_KEYBOARD) != 0) {
--- a/external/SDL2/build-scripts/winrtbuild.ps1
+++ b/external/SDL2/build-scripts/winrtbuild.ps1
@@ -39,7 +39,7 @@
#
# Base version of SDL, used for packaging purposes
-$SDLVersion = "2.0.10"
+$SDLVersion = "2.0.12"
# Gets the .bat file that sets up an MSBuild environment, given one of
# Visual Studio's, "PlatformToolset"s.
--- a/external/SDL2/cmake/sdlchecks.cmake
+++ b/external/SDL2/cmake/sdlchecks.cmake
@@ -757,8 +757,10 @@
endmacro()
# Requires:
-# - nada
+# - PkgCheckModules
macro(CheckOpenGLESX11)
+ pkg_check_modules(EGL egl)
+ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${EGL_CFLAGS}")
if(VIDEO_OPENGLES)
check_c_source_compiles("
#define EGL_API_FB
@@ -1074,7 +1076,7 @@
set(HAVE_HIDAPI FALSE)
pkg_check_modules(LIBUSB libusb)
if (LIBUSB_FOUND)
- check_include_file(libusb.h HAVE_LIBUSB_H)
+ check_include_file(libusb.h HAVE_LIBUSB_H ${LIBUSB_CFLAGS})
if (HAVE_LIBUSB_H)
set(HAVE_HIDAPI TRUE)
endif()
@@ -1086,10 +1088,17 @@
set(HAVE_SDL_JOYSTICK TRUE)
file(GLOB HIDAPI_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/hidapi/*.c)
set(SOURCE_FILES ${SOURCE_FILES} ${HIDAPI_SOURCES})
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBUSB_CFLAGS} \"-I${SDL2_SOURCE_DIR}/src/hidapi/hidapi\"")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBUSB_CFLAGS} -I${SDL2_SOURCE_DIR}/src/hidapi/hidapi")
if(NOT HIDAPI_SKIP_LIBUSB)
- set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/libusb/hid.c)
- list(APPEND EXTRA_LIBS ${LIBUSB_LIBS})
+ if(HIDAPI_ONLY_LIBUSB)
+ set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/libusb/hid.c)
+ list(APPEND EXTRA_LIBS ${LIBUSB_LIBS})
+ else()
+ set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/hidapi/SDL_hidapi.c)
+ # libusb is loaded dynamically, so don't add it to EXTRA_LIBS
+ FindLibraryAndSONAME("usb-1.0")
+ set(SDL_LIBUSB_DYNAMIC "\"${USB_LIB_SONAME}\"")
+ endif()
endif()
endif()
endif()
--- a/external/SDL2/configure
+++ b/external/SDL2/configure
@@ -852,6 +852,8 @@
enable_dummyaudio
enable_libsamplerate
enable_libsamplerate_shared
+enable_arm_simd
+enable_arm_neon
enable_video_wayland
enable_video_wayland_qt_touch
enable_wayland_shared
@@ -869,6 +871,7 @@
enable_video_x11_vm
enable_video_vivante
enable_video_cocoa
+enable_video_metal
enable_render_metal
enable_video_directfb
enable_directfb_shared
@@ -1621,6 +1624,8 @@
[[default=yes]]
--enable-libsamplerate-shared
dynamically load libsamplerate [[default=yes]]
+ --enable-arm-simd use SIMD assembly blitters on ARM [[default=yes]]
+ --enable-arm-neon use NEON assembly blitters on ARM [[default=no]]
--enable-video-wayland use Wayland video driver [[default=yes]]
--enable-video-wayland-qt-touch
QtWayland server support for Wayland video driver
@@ -1647,6 +1652,7 @@
--enable-video-x11-vm use X11 VM extension for fullscreen [[default=yes]]
--enable-video-vivante use Vivante EGL video driver [[default=yes]]
--enable-video-cocoa use Cocoa video driver [[default=yes]]
+ --enable-video-metal include Metal support [[default=yes]]
--enable-render-metal enable the Metal render driver [[default=yes]]
--enable-video-directfb use DirectFB video driver [[default=no]]
--enable-directfb-shared
@@ -1675,7 +1681,7 @@
--enable-wasapi use the Windows WASAPI audio driver [[default=yes]]
--enable-sdl-dlopen use dlopen for shared object loading [[default=yes]]
--enable-hidapi use HIDAPI for low level joystick drivers
- [[default=maybe]]
+ [[default=no]]
--enable-clock_gettime use clock_gettime() instead of gettimeofday() on
UNIX [[default=yes]]
--enable-rpath use an rpath when linking SDL [[default=yes]]
@@ -2811,9 +2817,9 @@
#
SDL_MAJOR_VERSION=2
SDL_MINOR_VERSION=0
-SDL_MICRO_VERSION=10
+SDL_MICRO_VERSION=12
SDL_INTERFACE_AGE=0
-SDL_BINARY_AGE=10
+SDL_BINARY_AGE=12
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
@@ -16972,7 +16978,7 @@
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
- for ac_func in malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove wcslen wcscmp strlen strlcpy strlcat _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname getauxval poll _Exit
+ for ac_func in malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove wcslen wcslcpy wcslcat wcsdup wcsstr wcscmp wcsncmp strlen strlcpy strlcat _strrev _strupr _strlwr strchr strrchr strstr strtok_r itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname getauxval poll _Exit
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -19356,6 +19362,106 @@
fi
}
+CheckARM()
+{
+ # Check whether --enable-arm-simd was given.
+if test "${enable_arm_simd+set}" = set; then :
+ enableval=$enable_arm_simd; enable_arm_simd=$enableval
+else
+ enable_arm_simd=yes
+fi
+
+ if test x$enable_video = xyes -a x$enable_assembly = xyes -a x$enable_arm_simd = xyes; then
+ save_CFLAGS="$CFLAGS"
+ have_arm_simd=no
+ CFLAGS="-x assembler-with-cpp $CFLAGS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM SIMD" >&5
+$as_echo_n "checking for ARM SIMD... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ .text
+ .arch armv6
+ .object_arch armv4
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ uqadd8 r0, r0, r0
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ have_arm_simd=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_arm_simd" >&5
+$as_echo "$have_arm_simd" >&6; }
+
+ CFLAGS="$save_CFLAGS"
+
+ if test x$have_arm_simd = xyes; then
+ $as_echo "#define SDL_ARM_SIMD_BLITTERS 1" >>confdefs.h
+
+ SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-simd*.S"
+ WARN_ABOUT_ARM_SIMD_ASM_MIT="yes"
+ fi
+ fi
+}
+
+CheckNEON()
+{
+ # Check whether --enable-arm-neon was given.
+if test "${enable_arm_neon+set}" = set; then :
+ enableval=$enable_arm_neon; enable_arm_neon=$enableval
+else
+ enable_arm_neon=no
+fi
+
+ if test x$enable_video = xyes -a x$enable_assembly = xyes -a x$enable_arm_neon = xyes; then
+ save_CFLAGS="$CFLAGS"
+ have_arm_neon=no
+ CFLAGS="-x assembler-with-cpp $CFLAGS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ARM NEON" >&5
+$as_echo_n "checking for ARM NEON... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ .text
+ .fpu neon
+ .arch armv7a
+ .object_arch armv4
+ .eabi_attribute 10, 0
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ vmovn.u16 d0, q0
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ have_arm_neon=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_arm_neon" >&5
+$as_echo "$have_arm_neon" >&6; }
+
+ CFLAGS="$save_CFLAGS"
+
+ if test x$have_arm_neon = xyes; then
+ $as_echo "#define SDL_ARM_NEON_BLITTERS 1" >>confdefs.h
+
+ SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-neon*.S"
+ WARN_ABOUT_ARM_NEON_ASM_MIT="yes"
+ fi
+ fi
+}
+
CheckVisibilityHidden()
{
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -fvisibility=hidden option" >&5
@@ -19884,10 +19990,10 @@
# This isn't necessary for X11, but fixes GLX detection
if test "x$x_includes" = xNONE && \
test "x$x_libraries" = xNONE && \
- test -d /usr/X11R6/include && \
- test -d /usr/X11R6/lib; then
- x_includes="/usr/X11R6/include"
- x_libraries="/usr/X11R6/lib"
+ test -d /opt/X11/include && \
+ test -d /opt/X11/lib; then
+ x_includes="/opt/X11/include"
+ x_libraries="/opt/X11/lib"
fi
;;
esac
@@ -20585,15 +20691,16 @@
case "$host" in
*-*-darwin*)
- x11_lib='/usr/X11R6/lib/libX11.6.dylib'
- x11ext_lib='/usr/X11R6/lib/libXext.6.dylib'
- xcursor_lib='/usr/X11R6/lib/libXcursor.1.dylib'
- xinerama_lib='/usr/X11R6/lib/libXinerama.1.dylib'
- xinput_lib='/usr/X11R6/lib/libXi.6.dylib'
- xrandr_lib='/usr/X11R6/lib/libXrandr.2.dylib'
- xrender_lib='/usr/X11R6/lib/libXrender.1.dylib'
- xss_lib='/usr/X11R6/lib/libXss.1.dylib'
- xvidmode_lib='/usr/X11R6/lib/libXxf86vm.1.dylib'
+ # Apple now puts this in /opt/X11
+ x11_lib='/opt/X11/lib/libX11.6.dylib'
+ x11ext_lib='/opt/X11/lib/libXext.6.dylib'
+ xcursor_lib='/opt/X11/lib/libXcursor.1.dylib'
+ xinerama_lib='/opt/X11/lib/libXinerama.1.dylib'
+ xinput_lib='/opt/X11/lib/libXi.6.dylib'
+ xrandr_lib='/opt/X11/lib/libXrandr.2.dylib'
+ xrender_lib='/opt/X11/lib/libXrender.1.dylib'
+ xss_lib='/opt/X11/lib/libXss.1.dylib'
+ xvidmode_lib='/opt/X11/lib/libXxf86vm.1.dylib'
;;
*-*-openbsd*)
x11_lib='libX11.so'
@@ -21380,6 +21487,9 @@
SUMMARY_video_x11="${SUMMARY_video_x11} xvidmode"
fi
fi
+ else
+ # Prevent Mesa from including X11 headers
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -DMESA_EGL_NO_X11_HEADERS -DEGL_NO_X11"
fi
}
@@ -21530,6 +21640,13 @@
CheckMETAL()
{
+ # Check whether --enable-video-metal was given.
+if test "${enable_video_metal+set}" = set; then :
+ enableval=$enable_video_metal;
+else
+ enable_video_metal=yes
+fi
+
# Check whether --enable-render-metal was given.
if test "${enable_render_metal+set}" = set; then :
enableval=$enable_render_metal;
@@ -21537,7 +21654,7 @@
enable_render_metal=yes
fi
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video = xyes -a x$enable_video_metal = xyes; then
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -x objective-c"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Metal framework" >&5
@@ -21574,11 +21691,17 @@
$as_echo "$have_metal" >&6; }
if test x$have_metal = xyes; then
+$as_echo "#define SDL_VIDEO_METAL 1" >>confdefs.h
+
+ if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+
$as_echo "#define SDL_VIDEO_RENDER_METAL 1" >>confdefs.h
- SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+ SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+ fi
SUMMARY_video="${SUMMARY_video} metal"
else
+ enable_video_metal=no
enable_render_metal=no
fi
fi
@@ -22716,7 +22839,7 @@
$as_echo "#define SDL_USE_IME 1" >>confdefs.h
- SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ime.c"
+ SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ime.c"
fi
}
@@ -23608,14 +23731,6 @@
fi
- ac_fn_c_check_header_mongrel "$LINENO" "endpointvolume.h" "ac_cv_header_endpointvolume_h" "$ac_includes_default"
-if test "x$ac_cv_header_endpointvolume_h" = xyes; then :
- $as_echo "#define HAVE_ENDPOINTVOLUME_H 1" >>confdefs.h
-
-fi
-
-
-
# Check whether --enable-wasapi was given.
if test "${enable_wasapi+set}" = set; then :
enableval=$enable_wasapi;
@@ -24105,15 +24220,15 @@
{
# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
# so we'll just use libusb when it's available.
- #
- # Except that libusb requires root permissions to open devices, so that's not generally useful, and we'll disable this by default.
- #
- # On macOS and Windows, where you don't need libusb or root, we default to yes.
- skiplibusb=no
case "$host" in
- *-*-cygwin* | *-*-mingw32* | *-*-darwin* )
+ # libusb does not support iOS
+ arm*-apple-darwin* | *-ios-* )
skiplibusb=yes
;;
+ # On the other hand, *BSD specifically uses libusb only
+ *-*-*bsd* )
+ onlylibusb=yes
+ ;;
esac
# Check whether --enable-hidapi was given.
@@ -24120,15 +24235,9 @@
if test "${enable_hidapi+set}" = set; then :
enableval=$enable_hidapi;
else
- enable_hidapi=maybe
+ enable_hidapi=no
fi
- hidapi_support=no
-
- if test x$enable_hidapi = xmaybe; then
- enable_hidapi=$skiplibusb
- fi
-
if test x$enable_joystick = xyes -a x$enable_hidapi = xyes; then
if test x$skiplibusb = xyes; then
hidapi_support=yes
@@ -24213,6 +24322,10 @@
CFLAGS="$save_CFLAGS"
if test x$have_libusb_h = xyes; then
hidapi_support=yes
+ elif test x$onlylibusb = xyes; then
+ hidapi_support=no
+ else
+ hidapi_support=yes
fi
fi
@@ -24222,11 +24335,37 @@
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$srcdir/src/hidapi/hidapi"
SOURCES="$SOURCES $srcdir/src/joystick/hidapi/*.c"
+ SOURCES="$SOURCES $srcdir/src/hidapi/SDL_hidapi.c"
- if test x$skiplibusb = xno; then
- SOURCES="$SOURCES $srcdir/src/hidapi/libusb/hid.c"
+ if test x$have_libusb_h = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS $LIBUSB_CFLAGS"
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LIBUSB_LIBS"
+ if test x$onlylibusb = xyes; then
+ SOURCES="$SOURCES $srcdir/src/hidapi/libusb/hid.c"
+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LIBUSB_LIBS"
+ else
+ if test x$have_loadso != xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You must have SDL_LoadObject() support for dynamic libusb loading" >&5
+$as_echo "$as_me: WARNING: You must have SDL_LoadObject() support for dynamic libusb loading" >&2;}
+ fi
+ # libusb is loaded dynamically, so don't add it to LDFLAGS
+ libusb_lib=""
+ case "$host" in
+ *-*-darwin* )
+ libusb_lib="libusb-1.0.0.dylib"
+ ;;
+ *-*-cygwin* | *-*-mingw32* )
+ libusb_lib="libusb-1.0.dll"
+ ;;
+ esac
+ if test x$libusb_lib = x; then
+ libusb_lib=`find_lib "libusb-1.0.so.*" "" | sed 's/.*\/\(.*\)/\1/; q'`
+ fi
+
+cat >>confdefs.h <<_ACEOF
+#define SDL_LIBUSB_DYNAMIC "$libusb_lib"
+_ACEOF
+
+ fi
fi
fi
@@ -24445,6 +24584,8 @@
CheckDiskAudio
CheckDummyAudio
CheckDLOPEN
+ CheckARM
+ CheckNEON
CheckOSS
CheckALSA
CheckPulseAudio
@@ -24732,9 +24873,6 @@
fi
SOURCES="$SOURCES $srcdir/src/joystick/windows/*.c"
have_joystick=yes
- if test x$hidapi_support = xyes; then
- SOURCES="$SOURCES $srcdir/src/hidapi/windows/hid.c"
- fi
fi
if test x$enable_haptic = xyes; then
if test x$have_dinput = xyes -o x$have_xinput = xyes; then
@@ -24971,6 +25109,14 @@
# have_haptic=yes
# EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,ForceFeedback"
#fi
+ # Set up files for the sensor library
+ if test x$enable_sensor = xyes; then
+
+$as_echo "#define SDL_SENSOR_COREMOTION 1" >>confdefs.h
+
+ SOURCES="$SOURCES $srcdir/src/sensor/coremotion/*.m"
+ have_sensor=yes
+ fi
# Set up files for the power library
if test x$enable_power = xyes; then
@@ -25030,7 +25176,7 @@
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,UIKit"
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video_metal = xyes -o x$enable_video_vulkan = xyes; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Metal"
fi
;;
@@ -25077,9 +25223,6 @@
SOURCES="$SOURCES $srcdir/src/joystick/darwin/*.c"
have_joystick=yes
- if test x$hidapi_support = xyes; then
- SOURCES="$SOURCES $srcdir/src/hidapi/mac/hid.c"
- fi
fi
# Set up files for the haptic library
if test x$enable_haptic = xyes; then
@@ -25127,7 +25270,7 @@
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit"
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video_metal = xyes -o x$enable_video_vulkan = xyes; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal"
fi
;;
@@ -25219,6 +25362,27 @@
have_timers=yes
fi
;;
+ *-*-riscos*)
+ ARCH=riscos
+ CheckVisibilityHidden
+ CheckDeclarationAfterStatement
+ CheckDummyVideo
+ CheckDiskAudio
+ CheckDummyAudio
+ CheckDLOPEN
+ CheckOSS
+ CheckPTHREAD
+ CheckClockGettime
+
+ # Set up files for the timer library
+ if test x$enable_timers = xyes; then
+
+$as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h
+
+ SOURCES="$SOURCES $srcdir/src/timer/unix/*.c"
+ have_timers=yes
+ fi
+ ;;
*)
as_fn_error $? "
*** Unsupported host: Please add to configure.ac
@@ -25352,7 +25516,7 @@
VERSION_DEPENDS=`echo $VERSION_SOURCES`
VERSION_OBJECTS=`echo "$VERSION_OBJECTS" | sed 's,[^ ]*/\([^ ]*\)\.rc,$(objects)/\1.o,g'`
VERSION_DEPENDS=`echo "$VERSION_DEPENDS" | sed "s,\\([^ ]*\\)/\\([^ ]*\\)\\.rc,\\\\
-\\$(objects)/\\2.o: \\1/\\2.rc\\\\
+\\$(objects)/\\2.o: \\1/\\2.rc \\$(objects)/.created\\\\
\\$(WINDRES) \\$< \\$@,g"`
SDLMAIN_OBJECTS=`echo $SDLMAIN_SOURCES`
@@ -25466,7 +25630,7 @@
$WAYLAND_PROTOCOLS_DEPENDS
__EOF__
-ac_config_files="$ac_config_files Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake SDL2.spec sdl2.pc"
+ac_config_files="$ac_config_files Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake sdl2-config-version.cmake SDL2.spec sdl2.pc"
ac_config_commands="$ac_config_commands sdl2_config"
@@ -25516,6 +25680,23 @@
else
SUMMARY="${SUMMARY}Using fcitx : NO\n"
fi
+
+if test x$WARN_ABOUT_ARM_SIMD_ASM_MIT = xyes; then
+ SUMMARY="${SUMMARY}\nSDL is being built with ARM SIMD optimizations, which\n"
+ SUMMARY="${SUMMARY}uses code licensed under the MIT license. If this is a\n"
+ SUMMARY="${SUMMARY}problem, please disable that code by rerunning the\n"
+ SUMMARY="${SUMMARY}configure script with:\n"
+ SUMMARY="${SUMMARY}\n --disable-arm-simd\n"
+fi
+
+if test x$WARN_ABOUT_ARM_NEON_ASM_MIT = xyes; then
+ SUMMARY="${SUMMARY}\nSDL is being built with ARM NEON optimizations, which\n"
+ SUMMARY="${SUMMARY}uses code licensed under the MIT license. If this is a\n"
+ SUMMARY="${SUMMARY}problem, please disable that code by rerunning the\n"
+ SUMMARY="${SUMMARY}configure script with:\n"
+ SUMMARY="${SUMMARY}\n --disable-arm-neon\n"
+fi
+
ac_config_commands="$ac_config_commands summary"
@@ -26601,6 +26782,7 @@
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in:Makefile.rules" ;;
"sdl2-config") CONFIG_FILES="$CONFIG_FILES sdl2-config" ;;
"sdl2-config.cmake") CONFIG_FILES="$CONFIG_FILES sdl2-config.cmake" ;;
+ "sdl2-config-version.cmake") CONFIG_FILES="$CONFIG_FILES sdl2-config-version.cmake" ;;
"SDL2.spec") CONFIG_FILES="$CONFIG_FILES SDL2.spec" ;;
"sdl2.pc") CONFIG_FILES="$CONFIG_FILES sdl2.pc" ;;
"sdl2_config") CONFIG_COMMANDS="$CONFIG_COMMANDS sdl2_config" ;;
--- a/external/SDL2/configure.ac
+++ b/external/SDL2/configure.ac
@@ -20,9 +20,9 @@
#
SDL_MAJOR_VERSION=2
SDL_MINOR_VERSION=0
-SDL_MICRO_VERSION=10
+SDL_MICRO_VERSION=12
SDL_INTERFACE_AGE=0
-SDL_BINARY_AGE=10
+SDL_BINARY_AGE=12
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
AC_SUBST(SDL_MAJOR_VERSION)
@@ -335,7 +335,7 @@
AC_DEFINE(HAVE_MPROTECT, 1, [ ])
]),
)
- AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove wcslen wcscmp strlen strlcpy strlcat _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname getauxval poll _Exit)
+ AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove wcslen wcslcpy wcslcat wcsdup wcsstr wcscmp wcsncmp strlen strlcpy strlcat _strrev _strupr _strlwr strchr strrchr strstr strtok_r itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fopen64 fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname getauxval poll _Exit)
AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm"])
AC_CHECK_FUNCS(acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf log logf log10 log10f pow powf scalbn scalbnf sin sinf sqrt sqrtf tan tanf)
@@ -1303,6 +1303,82 @@
fi
}
+dnl Check for ARM instruction support using gas syntax
+CheckARM()
+{
+ AC_ARG_ENABLE(arm-simd,
+AC_HELP_STRING([--enable-arm-simd], [use SIMD assembly blitters on ARM [[default=yes]]]),
+ enable_arm_simd=$enableval, enable_arm_simd=yes)
+ if test x$enable_video = xyes -a x$enable_assembly = xyes -a x$enable_arm_simd = xyes; then
+ save_CFLAGS="$CFLAGS"
+ have_arm_simd=no
+ CFLAGS="-x assembler-with-cpp $CFLAGS"
+
+ AC_MSG_CHECKING(for ARM SIMD)
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ .text
+ .arch armv6
+ .object_arch armv4
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ uqadd8 r0, r0, r0
+ ]])], have_arm_simd=yes)
+ AC_MSG_RESULT($have_arm_simd)
+
+ CFLAGS="$save_CFLAGS"
+
+ if test x$have_arm_simd = xyes; then
+ AC_DEFINE(SDL_ARM_SIMD_BLITTERS)
+dnl SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-simd*.c"
+ SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-simd*.S"
+ WARN_ABOUT_ARM_SIMD_ASM_MIT="yes"
+ fi
+ fi
+}
+
+dnl Check for ARM NEON instruction support using gas syntax
+CheckNEON()
+{
+ AC_ARG_ENABLE(arm-neon,
+AC_HELP_STRING([--enable-arm-neon], [use NEON assembly blitters on ARM [[default=no]]]),
+ enable_arm_neon=$enableval, enable_arm_neon=no)
+ if test x$enable_video = xyes -a x$enable_assembly = xyes -a x$enable_arm_neon = xyes; then
+ save_CFLAGS="$CFLAGS"
+ have_arm_neon=no
+ CFLAGS="-x assembler-with-cpp $CFLAGS"
+
+ AC_MSG_CHECKING(for ARM NEON)
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ .text
+ .fpu neon
+ .arch armv7a
+ .object_arch armv4
+ .eabi_attribute 10, 0
+ .arm
+ .altmacro
+ #ifndef __ARM_EABI__
+ #error EABI is required (to be sure that calling conventions are compatible)
+ #endif
+ pld [r0]
+ vmovn.u16 d0, q0
+ ]])], have_arm_neon=yes)
+ AC_MSG_RESULT($have_arm_neon)
+
+ CFLAGS="$save_CFLAGS"
+
+ if test x$have_arm_neon = xyes; then
+ AC_DEFINE(SDL_ARM_NEON_BLITTERS)
+dnl SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-neon*.c"
+ SOURCES="$SOURCES $srcdir/src/video/arm/pixman-arm-neon*.S"
+ WARN_ABOUT_ARM_NEON_ASM_MIT="yes"
+ fi
+ fi
+}
+
dnl See if GCC's -fvisibility=hidden is supported (gcc4 and later, usually).
dnl Details of this flag are here: http://gcc.gnu.org/wiki/Visibility
CheckVisibilityHidden()
@@ -1610,10 +1686,10 @@
# This isn't necessary for X11, but fixes GLX detection
if test "x$x_includes" = xNONE && \
test "x$x_libraries" = xNONE && \
- test -d /usr/X11R6/include && \
- test -d /usr/X11R6/lib; then
- x_includes="/usr/X11R6/include"
- x_libraries="/usr/X11R6/lib"
+ test -d /opt/X11/include && \
+ test -d /opt/X11/lib; then
+ x_includes="/opt/X11/include"
+ x_libraries="/opt/X11/lib"
fi
;;
esac
@@ -1626,15 +1702,16 @@
case "$host" in
*-*-darwin*)
- x11_lib='/usr/X11R6/lib/libX11.6.dylib'
- x11ext_lib='/usr/X11R6/lib/libXext.6.dylib'
- xcursor_lib='/usr/X11R6/lib/libXcursor.1.dylib'
- xinerama_lib='/usr/X11R6/lib/libXinerama.1.dylib'
- xinput_lib='/usr/X11R6/lib/libXi.6.dylib'
- xrandr_lib='/usr/X11R6/lib/libXrandr.2.dylib'
- xrender_lib='/usr/X11R6/lib/libXrender.1.dylib'
- xss_lib='/usr/X11R6/lib/libXss.1.dylib'
- xvidmode_lib='/usr/X11R6/lib/libXxf86vm.1.dylib'
+ # Apple now puts this in /opt/X11
+ x11_lib='/opt/X11/lib/libX11.6.dylib'
+ x11ext_lib='/opt/X11/lib/libXext.6.dylib'
+ xcursor_lib='/opt/X11/lib/libXcursor.1.dylib'
+ xinerama_lib='/opt/X11/lib/libXinerama.1.dylib'
+ xinput_lib='/opt/X11/lib/libXi.6.dylib'
+ xrandr_lib='/opt/X11/lib/libXrandr.2.dylib'
+ xrender_lib='/opt/X11/lib/libXrender.1.dylib'
+ xss_lib='/opt/X11/lib/libXss.1.dylib'
+ xvidmode_lib='/opt/X11/lib/libXxf86vm.1.dylib'
;;
*-*-openbsd*)
x11_lib='libX11.so'
@@ -1958,6 +2035,9 @@
SUMMARY_video_x11="${SUMMARY_video_x11} xvidmode"
fi
fi
+ else
+ # Prevent Mesa from including X11 headers
+ EXTRA_CFLAGS="$EXTRA_CFLAGS -DMESA_EGL_NO_X11_HEADERS -DEGL_NO_X11"
fi
}
@@ -2048,10 +2128,13 @@
CheckMETAL()
{
+ AC_ARG_ENABLE(video-metal,
+AC_HELP_STRING([--enable-video-metal], [include Metal support [[default=yes]]]),
+ , enable_video_metal=yes)
AC_ARG_ENABLE(render-metal,
AS_HELP_STRING([--enable-render-metal], [enable the Metal render driver [[default=yes]]]),
, enable_render_metal=yes)
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video = xyes -a x$enable_video_metal = xyes; then
save_CFLAGS="$CFLAGS"
dnl Work around that we don't have Objective-C support in autoconf
CFLAGS="$CFLAGS -x objective-c"
@@ -2072,10 +2155,14 @@
CFLAGS="$save_CFLAGS"
AC_MSG_RESULT($have_metal)
if test x$have_metal = xyes; then
- AC_DEFINE(SDL_VIDEO_RENDER_METAL, 1, [ ])
- SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+ AC_DEFINE(SDL_VIDEO_METAL, 1, [ ])
+ if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ AC_DEFINE(SDL_VIDEO_RENDER_METAL, 1, [ ])
+ SOURCES="$SOURCES $srcdir/src/render/metal/*.m"
+ fi
SUMMARY_video="${SUMMARY_video} metal"
else
+ enable_video_metal=no
enable_render_metal=no
fi
fi
@@ -2284,7 +2371,7 @@
if test x$video_opengl_egl = xyes; then
AC_DEFINE(SDL_VIDEO_OPENGL_EGL, 1, [ ])
fi
-
+
if test x$enable_video_opengles1 = xyes; then
AC_MSG_CHECKING(for OpenGL ES v1 headers)
video_opengles_v1=no
@@ -2595,7 +2682,7 @@
, enable_ime=yes)
if test x$enable_ime = xyes; then
AC_DEFINE(SDL_USE_IME, 1, [ ])
- SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ime.c"
+ SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ime.c"
fi
}
@@ -3014,8 +3101,6 @@
AC_DEFINE(HAVE_AUDIOCLIENT_H,1,[])
fi
- AC_CHECK_HEADER(endpointvolume.h,AC_DEFINE(HAVE_ENDPOINTVOLUME_H,1,[]))
-
AC_ARG_ENABLE(wasapi,
AS_HELP_STRING([--enable-wasapi], [use the Windows WASAPI audio driver [[default=yes]]]),
, enable_wasapi=yes)
@@ -3067,7 +3152,7 @@
AC_CHECK_HEADER(libusb.h, [USB_CFLAGS="-DHAVE_LIBUSB_H"])
AC_CHECK_LIB(usb, hid_init, [USB_LIBS="$USB_LIBS -lusb"])
fi
-
+
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $USB_CFLAGS"
@@ -3197,26 +3282,20 @@
{
# The hidraw support doesn't catch Xbox, PS4 and Nintendo controllers,
# so we'll just use libusb when it's available.
- #
- # Except that libusb requires root permissions to open devices, so that's not generally useful, and we'll disable this by default.
- #
- # On macOS and Windows, where you don't need libusb or root, we default to yes.
- skiplibusb=no
case "$host" in
- *-*-cygwin* | *-*-mingw32* | *-*-darwin* )
+ # libusb does not support iOS
+ arm*-apple-darwin* | *-ios-* )
skiplibusb=yes
;;
+ # On the other hand, *BSD specifically uses libusb only
+ *-*-*bsd* )
+ onlylibusb=yes
+ ;;
esac
AC_ARG_ENABLE(hidapi,
-AS_HELP_STRING([--enable-hidapi], [use HIDAPI for low level joystick drivers [[default=maybe]]]),
- , enable_hidapi=maybe)
- hidapi_support=no
-
- if test x$enable_hidapi = xmaybe; then
- enable_hidapi=$skiplibusb
- fi
-
+AS_HELP_STRING([--enable-hidapi], [use HIDAPI for low level joystick drivers [[default=no]]]),
+ , enable_hidapi=no)
if test x$enable_joystick = xyes -a x$enable_hidapi = xyes; then
if test x$skiplibusb = xyes; then
hidapi_support=yes
@@ -3228,6 +3307,10 @@
CFLAGS="$save_CFLAGS"
if test x$have_libusb_h = xyes; then
hidapi_support=yes
+ elif test x$onlylibusb = xyes; then
+ hidapi_support=no
+ else
+ hidapi_support=yes
fi
fi
@@ -3235,11 +3318,32 @@
AC_DEFINE(SDL_JOYSTICK_HIDAPI, 1, [ ])
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$srcdir/src/hidapi/hidapi"
SOURCES="$SOURCES $srcdir/src/joystick/hidapi/*.c"
+ SOURCES="$SOURCES $srcdir/src/hidapi/SDL_hidapi.c"
- if test x$skiplibusb = xno; then
- SOURCES="$SOURCES $srcdir/src/hidapi/libusb/hid.c"
+ if test x$have_libusb_h = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS $LIBUSB_CFLAGS"
- EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LIBUSB_LIBS"
+ if test x$onlylibusb = xyes; then
+ SOURCES="$SOURCES $srcdir/src/hidapi/libusb/hid.c"
+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS $LIBUSB_LIBS"
+ else
+ if test x$have_loadso != xyes; then
+ AC_MSG_WARN([You must have SDL_LoadObject() support for dynamic libusb loading])
+ fi
+ # libusb is loaded dynamically, so don't add it to LDFLAGS
+ libusb_lib=""
+ case "$host" in
+ *-*-darwin* )
+ libusb_lib="libusb-1.0.0.dylib"
+ ;;
+ *-*-cygwin* | *-*-mingw32* )
+ libusb_lib="libusb-1.0.dll"
+ ;;
+ esac
+ if test x$libusb_lib = x; then
+ libusb_lib=[`find_lib "libusb-1.0.so.*" "" | sed 's/.*\/\(.*\)/\1/; q'`]
+ fi
+ AC_DEFINE_UNQUOTED(SDL_LIBUSB_DYNAMIC, "$libusb_lib", [ ])
+ fi
fi
fi
@@ -3362,6 +3466,8 @@
CheckDiskAudio
CheckDummyAudio
CheckDLOPEN
+ CheckARM
+ CheckNEON
CheckOSS
CheckALSA
CheckPulseAudio
@@ -3599,9 +3705,6 @@
fi
SOURCES="$SOURCES $srcdir/src/joystick/windows/*.c"
have_joystick=yes
- if test x$hidapi_support = xyes; then
- SOURCES="$SOURCES $srcdir/src/hidapi/windows/hid.c"
- fi
fi
if test x$enable_haptic = xyes; then
if test x$have_dinput = xyes -o x$have_xinput = xyes; then
@@ -3756,6 +3859,12 @@
# have_haptic=yes
# EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,ForceFeedback"
#fi
+ # Set up files for the sensor library
+ if test x$enable_sensor = xyes; then
+ AC_DEFINE(SDL_SENSOR_COREMOTION, 1, [ ])
+ SOURCES="$SOURCES $srcdir/src/sensor/coremotion/*.m"
+ have_sensor=yes
+ fi
# Set up files for the power library
if test x$enable_power = xyes; then
AC_DEFINE(SDL_POWER_UIKIT, 1, [ ])
@@ -3799,7 +3908,7 @@
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,UIKit"
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video_metal = xyes -o x$enable_video_vulkan = xyes; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Metal"
fi
;;
@@ -3842,9 +3951,6 @@
AC_DEFINE(SDL_JOYSTICK_IOKIT, 1, [ ])
SOURCES="$SOURCES $srcdir/src/joystick/darwin/*.c"
have_joystick=yes
- if test x$hidapi_support = xyes; then
- SOURCES="$SOURCES $srcdir/src/hidapi/mac/hid.c"
- fi
fi
# Set up files for the haptic library
if test x$enable_haptic = xyes; then
@@ -3884,7 +3990,7 @@
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit"
- if test x$enable_render = xyes -a x$enable_render_metal = xyes; then
+ if test x$enable_video_metal = xyes -o x$enable_video_vulkan = xyes; then
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal"
fi
;;
@@ -3960,6 +4066,25 @@
have_timers=yes
fi
;;
+ *-*-riscos*)
+ ARCH=riscos
+ CheckVisibilityHidden
+ CheckDeclarationAfterStatement
+ CheckDummyVideo
+ CheckDiskAudio
+ CheckDummyAudio
+ CheckDLOPEN
+ CheckOSS
+ CheckPTHREAD
+ CheckClockGettime
+
+ # Set up files for the timer library
+ if test x$enable_timers = xyes; then
+ AC_DEFINE(SDL_TIMER_UNIX, 1, [ ])
+ SOURCES="$SOURCES $srcdir/src/timer/unix/*.c"
+ have_timers=yes
+ fi
+ ;;
*)
AC_MSG_ERROR([
*** Unsupported host: Please add to configure.ac
@@ -4071,7 +4196,7 @@
VERSION_DEPENDS=`echo $VERSION_SOURCES`
VERSION_OBJECTS=`echo "$VERSION_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.rc,$(objects)/\1.o,g'`
VERSION_DEPENDS=`echo "$VERSION_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.rc,\\\\
-\\$(objects)/\\2.o: \\1/\\2.rc\\\\
+\\$(objects)/\\2.o: \\1/\\2.rc \\$(objects)/.created\\\\
\\$(WINDRES) \\$< \\$@,g"`
SDLMAIN_OBJECTS=`echo $SDLMAIN_SOURCES`
@@ -4171,7 +4296,7 @@
__EOF__
AC_CONFIG_FILES([
- Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake SDL2.spec sdl2.pc
+ Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake sdl2-config-version.cmake SDL2.spec sdl2.pc
])
AC_CONFIG_COMMANDS([sdl2_config],[chmod a+x sdl2-config])
@@ -4220,6 +4345,23 @@
else
SUMMARY="${SUMMARY}Using fcitx : NO\n"
fi
+
+if test x$WARN_ABOUT_ARM_SIMD_ASM_MIT = xyes; then
+ SUMMARY="${SUMMARY}\nSDL is being built with ARM SIMD optimizations, which\n"
+ SUMMARY="${SUMMARY}uses code licensed under the MIT license. If this is a\n"
+ SUMMARY="${SUMMARY}problem, please disable that code by rerunning the\n"
+ SUMMARY="${SUMMARY}configure script with:\n"
+ SUMMARY="${SUMMARY}\n --disable-arm-simd\n"
+fi
+
+if test x$WARN_ABOUT_ARM_NEON_ASM_MIT = xyes; then
+ SUMMARY="${SUMMARY}\nSDL is being built with ARM NEON optimizations, which\n"
+ SUMMARY="${SUMMARY}uses code licensed under the MIT license. If this is a\n"
+ SUMMARY="${SUMMARY}problem, please disable that code by rerunning the\n"
+ SUMMARY="${SUMMARY}configure script with:\n"
+ SUMMARY="${SUMMARY}\n --disable-arm-neon\n"
+fi
+
AC_CONFIG_COMMANDS([summary], [echo -en "$SUMMARY"], [SUMMARY="$SUMMARY"])
AC_OUTPUT
--- a/external/SDL2/debian/changelog
+++ b/external/SDL2/debian/changelog
@@ -1,8 +1,20 @@
+libsdl2 (2.0.12) UNRELEASED; urgency=low
+
+ * Updated SDL to version 2.0.12 for development builds
+
+ -- Sam Lantinga <slouken@libsdl.org> Sun, 1 Mar 2020 14:57:07 -0800
+
+libsdl2 (2.0.11) UNRELEASED; urgency=low
+
+ * Updated SDL to version 2.0.11 for development builds
+
+ -- Sam Lantinga <slouken@libsdl.org> Sun, 22 Sep 2019 10:33:03 -0800
+
libsdl2 (2.0.10) UNRELEASED; urgency=low
* Updated SDL to version 2.0.10
- -- Sam Lantinga <slouken@libsdl.org> Mon, 17 Jun 2018 08:48:47 -0800
+ -- Sam Lantinga <slouken@libsdl.org> Mon, 17 Jun 2019 08:48:47 -0800
libsdl2 (2.0.9) UNRELEASED; urgency=low
--- a/external/SDL2/debian/copyright
+++ b/external/SDL2/debian/copyright
@@ -4,7 +4,7 @@
Source: http://www.libsdl.org/
Files: *
-Copyright: 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright: 1997-2020 Sam Lantinga <slouken@libsdl.org>
License: zlib/libpng
Files: src/libm/*
@@ -12,7 +12,7 @@
License: SunPro
Files: src/main/windows/SDL_windows_main.c
-Copyright: 2019 Sam Lantinga
+Copyright: 2020 Sam Lantinga
License: PublicDomain_Sam_Lantinga
Comment: SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98
@@ -32,7 +32,7 @@
License: BrownUn_UnCalifornia_ErikCorry
Files: src/test/SDL_test_md5.c
-Copyright: 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright: 1997-2020 Sam Lantinga <slouken@libsdl.org>
1990 RSA Data Security, Inc.
License: zlib/libpng and RSA_Data_Security
@@ -46,12 +46,12 @@
License: MIT/X11
Files: test/testhaptic.c
-Copyright: 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright: 1997-2020 Sam Lantinga <slouken@libsdl.org>
2008 Edgar Simo Serra
License: BSD_3_clause
Files: test/testrumble.c
-Copyright: 1997-2019 Sam Lantinga <slouken@libsdl.org>
+Copyright: 1997-2020 Sam Lantinga <slouken@libsdl.org>
2011 Edgar Simo Serra
License: BSD_3_clause
@@ -169,7 +169,7 @@
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Comment:
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
.
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/debian/libsdl2-dev.install
+++ b/external/SDL2/debian/libsdl2-dev.install
@@ -5,4 +5,5 @@
usr/lib/*/*.so
usr/lib/*/pkgconfig/sdl2.pc
usr/lib/*/cmake/SDL2/sdl2-config.cmake
+usr/lib/*/cmake/SDL2/sdl2-config-version.cmake
usr/share/aclocal/sdl2.m4
--- a/external/SDL2/docs/README-android.md
+++ b/external/SDL2/docs/README-android.md
@@ -82,6 +82,23 @@
4b. If you want to build manually, run './gradlew installDebug' in the project directory. This compiles the .java, creates an .apk with the native code embedded, and installs it on any connected Android device
+
+If you already have a project that uses CMake, the instructions change somewhat:
+
+1. Do points 1 and 2 from the instruction above.
+2. Edit "<project>/app/build.gradle" to comment out or remove sections containing ndk-build
+ and uncomment the cmake sections. Add arguments to the CMake invocation as needed.
+3. Edit "<project>/app/jni/CMakeLists.txt" to include your project (it defaults to
+ adding the "src" subdirectory). Note that you'll have SDL2, SDL2main and SDL2-static
+ as targets in your project, so you should have "target_link_libraries(yourgame SDL2 SDL2main)"
+ in your CMakeLists.txt file. Also be aware that you should use add_library() instead of
+ add_executable() for the target containing your "main" function.
+
+If you wish to use Android Studio, you can skip the last step.
+
+4. Run './gradlew installDebug' or './gradlew installRelease' in the project directory. It will build and install your .apk on any
+ connected Android device
+
Here's an explanation of the files in the Android project, so you can customize them:
android-project/app
@@ -90,10 +107,12 @@
jni/ - directory holding native code
jni/Application.mk - Application JNI settings, including target platform and STL library
jni/Android.mk - Android makefile that can call recursively the Android.mk files in all subdirectories
+ jni/CMakeLists.txt - Top-level CMake project that adds SDL as a subproject
jni/SDL/ - (symlink to) directory holding the SDL library files
jni/SDL/Android.mk - Android makefile for creating the SDL shared library
jni/src/ - directory holding your C/C++ source
jni/src/Android.mk - Android makefile that you should customize to include your source code and any library references
+ jni/src/CMakeLists.txt - CMake file that you may customize to include your source code and any library references
src/main/assets/ - directory holding asset files for your application
src/main/res/ - directory holding resources for your application
src/main/res/mipmap-* - directories holding icons for different phone hardware
--- a/external/SDL2/docs/README-cmake.md
+++ b/external/SDL2/docs/README-cmake.md
@@ -15,7 +15,7 @@
* Linux
* VS.NET 2010
* MinGW and Msys
-* OS X with support for XCode
+* macOS, iOS, and tvOS, with support for XCode
================================================================================
@@ -30,3 +30,55 @@
cmake ../sdl
This will build the static and dynamic versions of SDL in the ~/build directory.
+
+
+================================================================================
+Usage, iOS/tvOS
+================================================================================
+
+CMake 3.14+ natively includes support for iOS and tvOS. SDL binaries may be built
+using Xcode or Make, possibly among other build-systems.
+
+When using a recent version of CMake (3.14+), it should be possible to:
+
+- build SDL for iOS, both static and dynamic
+- build SDL test apps (as iOS/tvOS .app bundles)
+- generate a working SDL_config.h for iOS (using SDL_config.h.cmake as a basis)
+
+To use, set the following CMake variables when running CMake's configuration stage:
+
+- `CMAKE_SYSTEM_NAME=<OS>` (either `iOS` or `tvOS`)
+- `CMAKE_OSX_SYSROOT=<SDK>` (examples: `iphoneos`, `iphonesimulator`, `iphoneos12.4`, `/full/path/to/iPhoneOS.sdk`,
+ `appletvos`, `appletvsimulator`, `appletvos12.4`, `/full/path/to/AppleTVOS.sdk`, etc.)
+- `CMAKE_OSX_ARCHITECTURES=<semicolon-separated list of CPU architectures>` (example: "arm64;armv7s;x86_64")
+
+
+### Examples (for iOS/tvOS):
+
+- for iOS-Simulator, using the latest, installed SDK:
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
+
+- for iOS-Device, using the latest, installed SDK, 64-bit only
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64`
+
+- for iOS-Device, using the latest, installed SDK, mixed 32/64 bit
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES="arm64;armv7s"`
+
+- for iOS-Device, using a specific SDK revision (iOS 12.4, in this example):
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos12.4 -DCMAKE_OSX_ARCHITECTURES=arm64`
+
+- for iOS-Simulator, using the latest, installed SDK, and building SDL test apps (as .app bundles):
+
+ `cmake ~/sdl -DSDL_TEST=1 -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
+
+- for tvOS-Simulator, using the latest, installed SDK:
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvsimulator -DCMAKE_OSX_ARCHITECTURES=x86_64`
+
+- for tvOS-Device, using the latest, installed SDK:
+
+ `cmake ~/sdl -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64`
--- a/external/SDL2/include/SDL.h
+++ b/external/SDL2/include/SDL.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -47,6 +47,7 @@
#include "SDL_loadso.h"
#include "SDL_log.h"
#include "SDL_messagebox.h"
+#include "SDL_metal.h"
#include "SDL_mutex.h"
#include "SDL_power.h"
#include "SDL_render.h"
--- a/external/SDL2/include/SDL_assert.h
+++ b/external/SDL2/include/SDL_assert.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_atomic.h
+++ b/external/SDL2/include/SDL_atomic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_audio.h
+++ b/external/SDL2/include/SDL_audio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_bits.h
+++ b/external/SDL2/include/SDL_bits.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_blendmode.h
+++ b/external/SDL2/include/SDL_blendmode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -50,6 +50,9 @@
SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate
dstRGB = srcRGB * dstRGB
dstA = dstA */
+ SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply
+ dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA))
+ dstA = (srcA * dstA) + (dstA * (1-srcA)) */
SDL_BLENDMODE_INVALID = 0x7FFFFFFF
/* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */
--- a/external/SDL2/include/SDL_clipboard.h
+++ b/external/SDL2/include/SDL_clipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_config.h
+++ b/external/SDL2/include/SDL_config.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_config.h.cmake
+++ b/external/SDL2/include/SDL_config.h.cmake
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -96,7 +96,10 @@
#cmakedefine HAVE_WCSLEN 1
#cmakedefine HAVE_WCSLCPY 1
#cmakedefine HAVE_WCSLCAT 1
+#cmakedefine HAVE_WCSDUP 1
+#cmakedefine HAVE_WCSSTR 1
#cmakedefine HAVE_WCSCMP 1
+#cmakedefine HAVE_WCSNCMP 1
#cmakedefine HAVE_STRLEN 1
#cmakedefine HAVE_STRLCPY 1
#cmakedefine HAVE_STRLCAT 1
@@ -108,6 +111,8 @@
#cmakedefine HAVE_STRCHR 1
#cmakedefine HAVE_STRRCHR 1
#cmakedefine HAVE_STRSTR 1
+#cmakedefine HAVE_STRTOK_R 1
+#cmakedefine HAVE_STRTOK_S 1
#cmakedefine HAVE_ITOA 1
#cmakedefine HAVE__LTOA 1
#cmakedefine HAVE__UITOA 1
@@ -127,6 +132,7 @@
#cmakedefine HAVE_STRCASECMP 1
#cmakedefine HAVE__STRNICMP 1
#cmakedefine HAVE_STRNCASECMP 1
+#cmakedefine HAVE_SSCANF 1
#cmakedefine HAVE_VSSCANF 1
#cmakedefine HAVE_VSNPRINTF 1
#cmakedefine HAVE_M_PI 1
@@ -211,7 +217,6 @@
#cmakedefine HAVE_XINPUT_H @HAVE_XINPUT_H@
#cmakedefine HAVE_DXGI_H @HAVE_DXGI_H@
-#cmakedefine HAVE_ENDPOINTVOLUME_H @HAVE_ENDPOINTVOLUME_H@
#cmakedefine HAVE_MMDEVICEAPI_H @HAVE_MMDEVICEAPI_H@
#cmakedefine HAVE_AUDIOCLIENT_H @HAVE_AUDIOCLIENT_H@
@@ -294,9 +299,11 @@
#cmakedefine SDL_HAPTIC_DINPUT @SDL_HAPTIC_DINPUT@
#cmakedefine SDL_HAPTIC_XINPUT @SDL_HAPTIC_XINPUT@
#cmakedefine SDL_HAPTIC_ANDROID @SDL_HAPTIC_ANDROID@
+#cmakedefine SDL_LIBUSB_DYNAMIC @SDL_LIBUSB_DYNAMIC@
/* Enable various sensor drivers */
#cmakedefine SDL_SENSOR_ANDROID @SDL_SENSOR_ANDROID@
+#cmakedefine SDL_SENSOR_COREMOTION @SDL_SENSOR_COREMOTION@
#cmakedefine SDL_SENSOR_DUMMY @SDL_SENSOR_DUMMY@
/* Enable various shared object loading systems */
@@ -322,9 +329,11 @@
#cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@
#cmakedefine SDL_VIDEO_DRIVER_HAIKU @SDL_VIDEO_DRIVER_HAIKU@
#cmakedefine SDL_VIDEO_DRIVER_COCOA @SDL_VIDEO_DRIVER_COCOA@
+#cmakedefine SDL_VIDEO_DRIVER_UIKIT @SDL_VIDEO_DRIVER_UIKIT@
#cmakedefine SDL_VIDEO_DRIVER_DIRECTFB @SDL_VIDEO_DRIVER_DIRECTFB@
#cmakedefine SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC @SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC@
#cmakedefine SDL_VIDEO_DRIVER_DUMMY @SDL_VIDEO_DRIVER_DUMMY@
+#cmakedefine SDL_VIDEO_DRIVER_OFFSCREEN @SDL_VIDEO_DRIVER_OFFSCREEN@
#cmakedefine SDL_VIDEO_DRIVER_WINDOWS @SDL_VIDEO_DRIVER_WINDOWS@
#cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@
#cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@
@@ -387,11 +396,15 @@
/* Enable Vulkan support */
#cmakedefine SDL_VIDEO_VULKAN @SDL_VIDEO_VULKAN@
+/* Enable Metal support */
+#cmakedefine SDL_VIDEO_METAL @SDL_VIDEO_METAL@
+
/* Enable system power support */
#cmakedefine SDL_POWER_ANDROID @SDL_POWER_ANDROID@
#cmakedefine SDL_POWER_LINUX @SDL_POWER_LINUX@
#cmakedefine SDL_POWER_WINDOWS @SDL_POWER_WINDOWS@
#cmakedefine SDL_POWER_MACOSX @SDL_POWER_MACOSX@
+#cmakedefine SDL_POWER_UIKIT @SDL_POWER_UIKIT@
#cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@
#cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@
#cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@
@@ -408,11 +421,16 @@
/* Enable assembly routines */
#cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@
#cmakedefine SDL_ALTIVEC_BLITTERS @SDL_ALTIVEC_BLITTERS@
+#cmakedefine SDL_ARM_SIMD_BLITTERS @SDL_ARM_SIMD_BLITTERS@
+#cmakedefine SDL_ARM_NEON_BLITTERS @SDL_ARM_NEON_BLITTERS@
/* Enable dynamic libsamplerate support */
#cmakedefine SDL_LIBSAMPLERATE_DYNAMIC @SDL_LIBSAMPLERATE_DYNAMIC@
/* Platform specific definitions */
+#cmakedefine SDL_IPHONE_KEYBOARD @SDL_IPHONE_KEYBOARD@
+#cmakedefine SDL_IPHONE_LAUNCHSCREEN @SDL_IPHONE_LAUNCHSCREEN@
+
#if !defined(__WIN32__)
# if !defined(_STDINT_H_) && !defined(_STDINT_H) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H)
typedef unsigned int size_t;
--- a/external/SDL2/include/SDL_config.h.in
+++ b/external/SDL2/include/SDL_config.h.in
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -33,7 +33,7 @@
/* Make sure that this isn't included by Visual C++ */
#ifdef _MSC_VER
-#error You should run hg revert SDL_config.h
+#error You should run hg revert SDL_config.h
#endif
/* C language features */
@@ -99,7 +99,10 @@
#undef HAVE_WCSLEN
#undef HAVE_WCSLCPY
#undef HAVE_WCSLCAT
+#undef HAVE_WCSDUP
+#undef HAVE_WCSSTR
#undef HAVE_WCSCMP
+#undef HAVE_WCSNCMP
#undef HAVE_STRLEN
#undef HAVE_STRLCPY
#undef HAVE_STRLCAT
@@ -111,6 +114,8 @@
#undef HAVE_STRCHR
#undef HAVE_STRRCHR
#undef HAVE_STRSTR
+#undef HAVE_STRTOK_R
+#undef HAVE_STRTOK_S
#undef HAVE_ITOA
#undef HAVE__LTOA
#undef HAVE__UITOA
@@ -192,9 +197,9 @@
#undef HAVE__EXIT
#else
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_STDINT_H 1
+#define HAVE_STDARG_H 1
+#define HAVE_STDDEF_H 1
+#define HAVE_STDINT_H 1
#endif /* HAVE_LIBC */
#undef HAVE_ALTIVEC_H
@@ -210,7 +215,6 @@
#undef HAVE_DSOUND_H
#undef HAVE_DXGI_H
#undef HAVE_XINPUT_H
-#undef HAVE_ENDPOINTVOLUME_H
#undef HAVE_MMDEVICEAPI_H
#undef HAVE_AUDIOCLIENT_H
#undef HAVE_XINPUT_GAMEPAD_EX
@@ -383,6 +387,9 @@
/* Enable Vulkan support */
#undef SDL_VIDEO_VULKAN
+/* Enable Metal support */
+#undef SDL_VIDEO_METAL
+
/* Enable system power support */
#undef SDL_POWER_LINUX
#undef SDL_POWER_WINDOWS
@@ -405,6 +412,8 @@
/* Enable assembly routines */
#undef SDL_ASSEMBLY_ROUTINES
#undef SDL_ALTIVEC_BLITTERS
+#undef SDL_ARM_SIMD_BLITTERS
+#undef SDL_ARM_NEON_BLITTERS
/* Enable ime support */
#undef SDL_USE_IME
@@ -411,6 +420,9 @@
/* Enable dynamic udev support */
#undef SDL_UDEV_DYNAMIC
+
+/* Enable dynamic libusb support */
+#undef SDL_LIBUSB_DYNAMIC
/* Enable dynamic libsamplerate support */
#undef SDL_LIBSAMPLERATE_DYNAMIC
--- a/external/SDL2/include/SDL_config_android.h
+++ b/external/SDL2/include/SDL_config_android.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -71,6 +71,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+#define HAVE_STRTOK_R 1
#define HAVE_STRTOL 1
#define HAVE_STRTOUL 1
#define HAVE_STRTOLL 1
--- a/external/SDL2/include/SDL_config_iphoneos.h
+++ b/external/SDL2/include/SDL_config_iphoneos.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -71,6 +71,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+#define HAVE_STRTOK_R 1
#define HAVE_STRTOL 1
#define HAVE_STRTOUL 1
#define HAVE_STRTOLL 1
@@ -137,7 +138,7 @@
/* Enable MFi joystick support */
#define SDL_JOYSTICK_MFI 1
-/*#define SDL_JOYSTICK_HIDAPI 1*/
+#define SDL_JOYSTICK_HIDAPI 1
#ifdef __TVOS__
#define SDL_SENSOR_DUMMY 1
@@ -179,6 +180,10 @@
#if SDL_PLATFORM_SUPPORTS_METAL
#define SDL_VIDEO_VULKAN 1
+#endif
+
+#if SDL_PLATFORM_SUPPORTS_METAL
+#define SDL_VIDEO_METAL 1
#endif
/* Enable system power support */
--- a/external/SDL2/include/SDL_config_macosx.h
+++ b/external/SDL2/include/SDL_config_macosx.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -74,6 +74,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+#define HAVE_STRTOK_R 1
#define HAVE_STRTOL 1
#define HAVE_STRTOUL 1
#define HAVE_STRTOLL 1
@@ -130,6 +131,8 @@
#define HAVE_SYSCONF 1
#define HAVE_SYSCTLBYNAME 1
+#define HAVE_GCC_ATOMICS 1
+
/* Enable various audio drivers */
#define SDL_AUDIO_DRIVER_COREAUDIO 1
#define SDL_AUDIO_DRIVER_DISK 1
@@ -157,13 +160,13 @@
#define SDL_VIDEO_DRIVER_COCOA 1
#define SDL_VIDEO_DRIVER_DUMMY 1
#undef SDL_VIDEO_DRIVER_X11
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/usr/X11R6/lib/libX11.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/usr/X11R6/lib/libXext.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/usr/X11R6/lib/libXinerama.1.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/usr/X11R6/lib/libXi.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/usr/X11R6/lib/libXss.1.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/usr/X11R6/lib/libXxf86vm.1.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/opt/X11/lib/libX11.6.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/opt/X11/lib/libXext.6.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/opt/X11/lib/libXinerama.1.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/opt/X11/lib/libXi.6.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/opt/X11/lib/libXrandr.2.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/opt/X11/lib/libXss.1.dylib"
+#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/opt/X11/lib/libXxf86vm.1.dylib"
#define SDL_VIDEO_DRIVER_X11_XDBE 1
#define SDL_VIDEO_DRIVER_X11_XINERAMA 1
#define SDL_VIDEO_DRIVER_X11_XRANDR 1
@@ -191,9 +194,15 @@
#define SDL_VIDEO_RENDER_OGL_ES2 1
#endif
-#ifndef SDL_VIDEO_RENDER_METAL
/* Metal only supported on 64-bit architectures with 10.11+ */
#if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100)
+#define SDL_PLATFORM_SUPPORTS_METAL 1
+#else
+#define SDL_PLATFORM_SUPPORTS_METAL 0
+#endif
+
+#ifndef SDL_VIDEO_RENDER_METAL
+#if SDL_PLATFORM_SUPPORTS_METAL
#define SDL_VIDEO_RENDER_METAL 1
#else
#define SDL_VIDEO_RENDER_METAL 0
@@ -217,12 +226,21 @@
#define SDL_VIDEO_OPENGL_GLX 1
#endif
-/* Enable Vulkan support */
-/* Metal/Vulkan Portability only supported on 64-bit architectures with 10.11+ */
-#if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100)
+/* Enable Vulkan and Metal support */
+#ifndef SDL_VIDEO_VULKAN
+#if SDL_PLATFORM_SUPPORTS_METAL
#define SDL_VIDEO_VULKAN 1
#else
#define SDL_VIDEO_VULKAN 0
+#endif
+#endif
+
+#ifndef SDL_VIDEO_METAL
+#if SDL_PLATFORM_SUPPORTS_METAL
+#define SDL_VIDEO_METAL 1
+#else
+#define SDL_VIDEO_METAL 0
+#endif
#endif
/* Enable system power support */
--- a/external/SDL2/include/SDL_config_minimal.h
+++ b/external/SDL2/include/SDL_config_minimal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_config_os2.h
+++ b/external/SDL2/include/SDL_config_os2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -110,6 +110,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+/* #undef HAVE_STRTOK_R */
#define HAVE_ITOA 1
#define HAVE__LTOA 1
#define HAVE__ULTOA 1
@@ -122,12 +123,21 @@
#define HAVE_STRTOD 1
#define HAVE_ATOI 1
#define HAVE_ATOF 1
+#define HAVE_WCSLEN 1
+#define HAVE_WCSLCPY 1
+#define HAVE_WCSLCAT 1
+/* #define HAVE_WCSDUP 1 */
+/* #define wcsdup _wcsdup */
+#define HAVE_WCSSTR 1
+#define HAVE_WCSCMP 1
+#define HAVE_WCSNCMP 1
#define HAVE_STRCMP 1
#define HAVE_STRNCMP 1
#define HAVE_STRICMP 1
#define HAVE_STRCASECMP 1
#define HAVE_STRNCASECMP 1
-#define HAVE_SSCANF 1
+#define HAVE_SSCANF 1
+#define HAVE_VSSCANF 1
#define HAVE_SNPRINTF 1
#define HAVE_VSNPRINTF 1
#define HAVE_SETJMP 1
--- a/external/SDL2/include/SDL_config_pandora.h
+++ b/external/SDL2/include/SDL_config_pandora.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_config_psp.h
+++ b/external/SDL2/include/SDL_config_psp.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_config_windows.h
+++ b/external/SDL2/include/SDL_config_windows.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -84,7 +84,6 @@
#define HAVE_XINPUT_H 1
#define HAVE_MMDEVICEAPI_H 1
#define HAVE_AUDIOCLIENT_H 1
-#define HAVE_ENDPOINTVOLUME_H 1
/* This is disabled by default to avoid C runtime dependencies and manifest requirements */
#ifdef HAVE_LIBC
@@ -118,6 +117,10 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+/* #undef HAVE_STRTOK_R */
+#if defined(_MSC_VER)
+#define HAVE_STRTOK_S 1
+#endif
/* These functions have security warnings, so we won't use them */
/* #undef HAVE__LTOA */
/* #undef HAVE__ULTOA */
@@ -139,7 +142,7 @@
#define HAVE_ATAN2 1
#define HAVE_ATAN2F 1
#define HAVE_CEILF 1
-#define HAVE__COPYSIGN 1
+#define HAVE__COPYSIGN 1
#define HAVE_COS 1
#define HAVE_COSF 1
#define HAVE_EXP 1
@@ -168,7 +171,7 @@
#define HAVE_STRTOLL 1
#define HAVE_VSSCANF 1
#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
+#define HAVE_SCALBNF 1
#endif
/* This function is available with at least the VC++ 2008 C runtime library */
#if _MSC_VER >= 1400
--- a/external/SDL2/include/SDL_config_winrt.h
+++ b/external/SDL2/include/SDL_config_winrt.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -100,7 +100,6 @@
#define HAVE_MMDEVICEAPI_H 1
#define HAVE_AUDIOCLIENT_H 1
-#define HAVE_ENDPOINTVOLUME_H 1
#define HAVE_LIBC 1
#define STDC_HEADERS 1
@@ -131,6 +130,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+#define HAVE_STRTOK_S 1
//#define HAVE_ITOA 1 // TODO, WinRT: consider using _itoa_s instead
//#define HAVE__LTOA 1 // TODO, WinRT: consider using _ltoa_s instead
//#define HAVE__ULTOA 1 // TODO, WinRT: consider using _ultoa_s instead
--- a/external/SDL2/include/SDL_config_wiz.h
+++ b/external/SDL2/include/SDL_config_wiz.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -67,6 +67,7 @@
#define HAVE_STRCHR 1
#define HAVE_STRRCHR 1
#define HAVE_STRSTR 1
+#define HAVE_STRTOK_R 1
#define HAVE_STRTOL 1
#define HAVE_STRTOUL 1
#define HAVE_STRTOLL 1
--- a/external/SDL2/include/SDL_copying.h
+++ b/external/SDL2/include/SDL_copying.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_cpuinfo.h
+++ b/external/SDL2/include/SDL_cpuinfo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -73,8 +73,8 @@
# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
# endif
# if defined (_M_ARM64)
-# include <armintr.h>
-# include <arm_neon.h>
+# include <arm64intr.h>
+# include <arm64_neon.h>
# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */
# endif
# endif
@@ -185,6 +185,11 @@
* This function returns true if the CPU has AVX-512F (foundation) features.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void);
+
+/**
+ * This function returns true if the CPU has ARM SIMD (ARMv6) features.
+ */
+extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void);
/**
* This function returns true if the CPU has NEON (ARM SIMD) features.
--- a/external/SDL2/include/SDL_egl.h
+++ b/external/SDL2/include/SDL_egl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -389,6 +389,9 @@
#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
+#endif
+#ifndef NOMINMAX /* don't define min() and max(). */
+#define NOMINMAX
#endif
#include <windows.h>
--- a/external/SDL2/include/SDL_endian.h
+++ b/external/SDL2/include/SDL_endian.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -42,10 +42,13 @@
#ifdef __linux__
#include <endian.h>
#define SDL_BYTEORDER __BYTE_ORDER
-#else /* __linux__ */
+#elif defined(__OpenBSD__)
+#include <endian.h>
+#define SDL_BYTEORDER BYTE_ORDER
+#else
#if defined(__hppa__) || \
defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \
- (defined(__MIPS__) && defined(__MISPEB__)) || \
+ (defined(__MIPS__) && defined(__MIPSEB__)) || \
defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \
defined(__sparc__)
#define SDL_BYTEORDER SDL_BIG_ENDIAN
--- a/external/SDL2/include/SDL_error.h
+++ b/external/SDL2/include/SDL_error.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_events.h
+++ b/external/SDL2/include/SDL_events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -442,6 +442,7 @@
float dx; /**< Normalized in the range -1...1 */
float dy; /**< Normalized in the range -1...1 */
float pressure; /**< Normalized in the range 0...1 */
+ Uint32 windowID; /**< The window underneath the finger, if any */
} SDL_TouchFingerEvent;
@@ -558,7 +559,7 @@
{
Uint32 type; /**< Event type, shared with all events */
SDL_CommonEvent common; /**< Common event data */
- SDL_DisplayEvent display; /**< Window event data */
+ SDL_DisplayEvent display; /**< Display event data */
SDL_WindowEvent window; /**< Window event data */
SDL_KeyboardEvent key; /**< Keyboard event data */
SDL_TextEditingEvent edit; /**< Text editing event data */
--- a/external/SDL2/include/SDL_filesystem.h
+++ b/external/SDL2/include/SDL_filesystem.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_gamecontroller.h
+++ b/external/SDL2/include/SDL_gamecontroller.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -57,6 +57,15 @@
struct _SDL_GameController;
typedef struct _SDL_GameController SDL_GameController;
+typedef enum
+{
+ SDL_CONTROLLER_TYPE_UNKNOWN = 0,
+ SDL_CONTROLLER_TYPE_XBOX360,
+ SDL_CONTROLLER_TYPE_XBOXONE,
+ SDL_CONTROLLER_TYPE_PS3,
+ SDL_CONTROLLER_TYPE_PS4,
+ SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO
+} SDL_GameControllerType;
typedef enum
{
@@ -176,6 +185,12 @@
extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index);
/**
+ * Get the type of a game controller.
+ * This can be called before any controllers are opened.
+ */
+extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index);
+
+/**
* Get the mapping of a game controller.
* This can be called before any controllers are opened.
*
@@ -200,16 +215,31 @@
extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid);
/**
+ * Return the SDL_GameController associated with a player index.
+ */
+extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index);
+
+/**
* Return the name for this currently opened controller
*/
extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller);
/**
+ * Return the type of this currently opened controller
+ */
+extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller);
+
+/**
* Get the player index of an opened game controller, or -1 if it's not available
*
* For XInput controllers this returns the XInput user index.
*/
extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller);
+
+/**
+ * Set the player index of an opened game controller
+ */
+extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index);
/**
* Get the USB vendor ID of an opened controller, if available.
--- a/external/SDL2/include/SDL_gesture.h
+++ b/external/SDL2/include/SDL_gesture.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_haptic.h
+++ b/external/SDL2/include/SDL_haptic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_hints.h
+++ b/external/SDL2/include/SDL_hints.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -165,6 +165,21 @@
#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER"
/**
+ * \brief A variable controlling whether the graphics context is externally managed.
+ *
+ * This variable can be set to the following values:
+ * "0" - SDL will manage graphics contexts that are attached to windows.
+ * "1" - Disable graphics context management on windows.
+ *
+ * By default SDL will manage OpenGL contexts in certain situations. For example, on Android the
+ * context will be automatically saved and restored when pausing the application. Additionally, some
+ * platforms will assume usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this
+ * behavior, which is desireable when the application manages the graphics context, such as
+ * an externally managed OpenGL context or attaching a Vulkan surface to the window.
+ */
+#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT"
+
+/**
* \brief A variable controlling whether the X11 VidMode extension should be used.
*
* This variable can be set to the following values:
@@ -198,6 +213,12 @@
#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR"
/**
+ * \brief A variable forcing the visual ID chosen for new X11 windows
+ *
+ */
+#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
+
+/**
* \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
*
* This variable can be set to the following values:
@@ -224,6 +245,17 @@
#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR"
/**
+ * \brief A variable controlling whether X11 should use GLX or EGL by default
+ *
+ * This variable can be set to the following values:
+ * "0" - Use GLX
+ * "1" - Use EGL
+ *
+ * By default SDL will use GLX when both are present.
+ */
+#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL"
+
+/**
* \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
*
* This variable can be set to the following values:
@@ -437,6 +469,24 @@
#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
/**
+ * \brief A variable that overrides the automatic controller type detection
+ *
+ * The variable should be comma separated entries, in the form: VID/PID=type
+ *
+ * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd
+ *
+ * The type should be one of:
+ * Xbox360
+ * XboxOne
+ * PS3
+ * PS4
+ * SwitchPro
+ *
+ * This hint affects what driver is used, and must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
+ */
+#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE"
+
+/**
* \brief A variable that lets you manually hint extra gamecontroller db entries.
*
* The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
@@ -483,6 +533,29 @@
#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
/**
+ * \brief If set, game controller face buttons report their values according to their labels instead of their positional layout.
+ *
+ * For example, on Nintendo Switch controllers, normally you'd get:
+ *
+ * (Y)
+ * (X) (B)
+ * (A)
+ *
+ * but if this hint is set, you'll get:
+ *
+ * (X)
+ * (Y) (A)
+ * (B)
+ *
+ * The variable can be set to the following values:
+ * "0" - Report the face buttons by position, as though they were on an Xbox controller.
+ * "1" - Report the face buttons by label instead of position
+ *
+ * The default value is "1". This hint may be set at any time.
+ */
+#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS"
+
+/**
* \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
*
* The variable can be set to the following values:
@@ -566,6 +639,17 @@
#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX"
/**
+ * \brief A variable controlling whether the HIDAPI driver for Nintendo GameCube controllers should be used.
+ *
+ * This variable can be set to the following values:
+ * "0" - HIDAPI driver is not used
+ * "1" - HIDAPI driver is used
+ *
+ * The default is the value of SDL_HINT_JOYSTICK_HIDAPI
+ */
+#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE"
+
+/**
* \brief A variable that controls whether Steam Controllers should be exposed using the SDL joystick and game controller APIs
*
* The variable can be set to the following values:
@@ -1173,6 +1257,20 @@
* "ignore" - Ignore fact chunk entirely (default)
*/
#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK"
+
+/*
+ * \brief Override for SDL_GetDisplayUsableBounds()
+ *
+ * If set, this hint will override the expected results for
+ * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want
+ * to do this, but this allows an embedded system to request that some of the
+ * screen be reserved for other uses when paired with a well-behaved
+ * application.
+ *
+ * The contents of this hint must be 4 comma-separated integers, the first
+ * is the bounds x, then y, width and height, in that order.
+ */
+#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS"
/**
* \brief An enumeration of hint priorities
--- a/external/SDL2/include/SDL_joystick.h
+++ b/external/SDL2/include/SDL_joystick.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -192,9 +192,14 @@
/**
* Return the SDL_Joystick associated with an instance id.
*/
-extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID joyid);
+extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id);
/**
+ * Return the SDL_Joystick associated with a player index.
+ */
+extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index);
+
+/**
* Return the name for this currently opened joystick.
* If no name can be found, this function returns NULL.
*/
@@ -206,6 +211,11 @@
* For XInput controllers this returns the XInput user index.
*/
extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick * joystick);
+
+/**
+ * Set the player index of an opened joystick
+ */
+extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick * joystick, int player_index);
/**
* Return the GUID for this opened joystick
--- a/external/SDL2/include/SDL_keyboard.h
+++ b/external/SDL2/include/SDL_keyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_keycode.h
+++ b/external/SDL2/include/SDL_keycode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -47,7 +47,7 @@
#define SDLK_SCANCODE_MASK (1<<30)
#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK)
-enum
+typedef enum
{
SDLK_UNKNOWN = 0,
@@ -317,7 +317,7 @@
SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND),
SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD)
-};
+} SDL_KeyCode;
/**
* \brief Enumeration of valid key mods (possibly OR'd together).
--- a/external/SDL2/include/SDL_loadso.h
+++ b/external/SDL2/include/SDL_loadso.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_log.h
+++ b/external/SDL2/include/SDL_log.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -61,7 +61,7 @@
* at the VERBOSE level and all other categories are enabled at the
* CRITICAL level.
*/
-enum
+typedef enum
{
SDL_LOG_CATEGORY_APPLICATION,
SDL_LOG_CATEGORY_ERROR,
@@ -94,7 +94,7 @@
};
*/
SDL_LOG_CATEGORY_CUSTOM
-};
+} SDL_LogCategory;
/**
* \brief The predefined log priorities
--- a/external/SDL2/include/SDL_main.h
+++ b/external/SDL2/include/SDL_main.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_messagebox.h
+++ b/external/SDL2/include/SDL_messagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,9 +36,11 @@
*/
typedef enum
{
- SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */
- SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */
- SDL_MESSAGEBOX_INFORMATION = 0x00000040 /**< informational dialog */
+ SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */
+ SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */
+ SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */
+ SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */
+ SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */
} SDL_MessageBoxFlags;
/**
--- /dev/null
+++ b/external/SDL2/include/SDL_metal.h
@@ -1,0 +1,91 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/**
+ * \file SDL_metal.h
+ *
+ * Header file for functions to creating Metal layers and views on SDL windows.
+ */
+
+#ifndef SDL_metal_h_
+#define SDL_metal_h_
+
+#include "SDL_video.h"
+
+#include "begin_code.h"
+/* Set up for C function definitions, even when using C++ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \brief A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS).
+ *
+ * \note This can be cast directly to an NSView or UIView.
+ */
+typedef void *SDL_MetalView;
+
+/**
+ * \name Metal support functions
+ */
+/* @{ */
+
+/**
+ * \brief Create a CAMetalLayer-backed NSView/UIView and attach it to the
+ * specified window.
+ *
+ * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on its
+ * own. It is up to user code to do that.
+ *
+ * The returned handle can be casted directly to a NSView or UIView, and the
+ * CAMetalLayer can be accessed from the view's 'layer' property.
+ *
+ * \code
+ * SDL_MetalView metalview = SDL_Metal_CreateView(window);
+ * UIView *uiview = (__bridge UIView *)metalview;
+ * CAMetalLayer *metallayer = (CAMetalLayer *)uiview.layer;
+ * // [...]
+ * SDL_Metal_DestroyView(metalview);
+ * \endcode
+ *
+ * \sa SDL_Metal_DestroyView
+ */
+extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window);
+
+/**
+ * \brief Destroy an existing SDL_MetalView object.
+ *
+ * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was
+ * called after SDL_CreateWindow.
+ *
+ * \sa SDL_Metal_CreateView
+ */
+extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view);
+
+/* @} *//* Metal support functions */
+
+/* Ends C function definitions when using C++ */
+#ifdef __cplusplus
+}
+#endif
+#include "close_code.h"
+
+#endif /* SDL_metal_h_ */
--- a/external/SDL2/include/SDL_mouse.h
+++ b/external/SDL2/include/SDL_mouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_mutex.h
+++ b/external/SDL2/include/SDL_mutex.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_name.h
+++ b/external/SDL2/include/SDL_name.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_opengl.h
+++ b/external/SDL2/include/SDL_opengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_opengl_glext.h
+++ b/external/SDL2/include/SDL_opengl_glext.h
@@ -40,6 +40,9 @@
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
+#ifndef NOMINMAX /* don't define min() and max(). */
+#define NOMINMAX
+#endif
#include <windows.h>
#endif
--- a/external/SDL2/include/SDL_opengles.h
+++ b/external/SDL2/include/SDL_opengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_opengles2.h
+++ b/external/SDL2/include/SDL_opengles2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_pixels.h
+++ b/external/SDL2/include/SDL_pixels.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,7 +48,7 @@
/* @} */
/** Pixel type. */
-enum
+typedef enum
{
SDL_PIXELTYPE_UNKNOWN,
SDL_PIXELTYPE_INDEX1,
@@ -62,18 +62,18 @@
SDL_PIXELTYPE_ARRAYU32,
SDL_PIXELTYPE_ARRAYF16,
SDL_PIXELTYPE_ARRAYF32
-};
+} SDL_PixelType;
/** Bitmap pixel order, high bit -> low bit. */
-enum
+typedef enum
{
SDL_BITMAPORDER_NONE,
SDL_BITMAPORDER_4321,
SDL_BITMAPORDER_1234
-};
+} SDL_BitmapOrder;
/** Packed component order, high bit -> low bit. */
-enum
+typedef enum
{
SDL_PACKEDORDER_NONE,
SDL_PACKEDORDER_XRGB,
@@ -84,12 +84,12 @@
SDL_PACKEDORDER_BGRX,
SDL_PACKEDORDER_ABGR,
SDL_PACKEDORDER_BGRA
-};
+} SDL_PackedOrder;
/** Array component order, low byte -> high byte. */
/* !!! FIXME: in 2.1, make these not overlap differently with
!!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */
-enum
+typedef enum
{
SDL_ARRAYORDER_NONE,
SDL_ARRAYORDER_RGB,
@@ -98,10 +98,10 @@
SDL_ARRAYORDER_BGR,
SDL_ARRAYORDER_BGRA,
SDL_ARRAYORDER_ABGR
-};
+} SDL_ArrayOrder;
/** Packed component layout. */
-enum
+typedef enum
{
SDL_PACKEDLAYOUT_NONE,
SDL_PACKEDLAYOUT_332,
@@ -112,7 +112,7 @@
SDL_PACKEDLAYOUT_8888,
SDL_PACKEDLAYOUT_2101010,
SDL_PACKEDLAYOUT_1010102
-};
+} SDL_PackedLayout;
#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D)
@@ -190,6 +190,9 @@
SDL_PACKEDLAYOUT_332, 8, 1),
SDL_PIXELFORMAT_RGB444 =
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
+ SDL_PACKEDLAYOUT_4444, 12, 2),
+ SDL_PIXELFORMAT_BGR444 =
+ SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR,
SDL_PACKEDLAYOUT_4444, 12, 2),
SDL_PIXELFORMAT_RGB555 =
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB,
--- a/external/SDL2/include/SDL_platform.h
+++ b/external/SDL2/include/SDL_platform.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_power.h
+++ b/external/SDL2/include/SDL_power.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_quit.h
+++ b/external/SDL2/include/SDL_quit.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_rect.h
+++ b/external/SDL2/include/SDL_rect.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_render.h
+++ b/external/SDL2/include/SDL_render.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -86,6 +86,16 @@
} SDL_RendererInfo;
/**
+ * \brief The scaling mode for a texture.
+ */
+typedef enum
+{
+ SDL_ScaleModeNearest, /**< nearest pixel sampling */
+ SDL_ScaleModeLinear, /**< linear filtering */
+ SDL_ScaleModeBest /**< anisotropic filtering */
+} SDL_ScaleMode;
+
+/**
* \brief The access pattern allowed for a texture.
*/
typedef enum
@@ -367,6 +377,35 @@
SDL_BlendMode *blendMode);
/**
+ * \brief Set the scale mode used for texture scale operations.
+ *
+ * \param texture The texture to update.
+ * \param scaleMode ::SDL_ScaleMode to use for texture scaling.
+ *
+ * \return 0 on success, or -1 if the texture is not valid.
+ *
+ * \note If the scale mode is not supported, the closest supported mode is
+ * chosen.
+ *
+ * \sa SDL_GetTextureScaleMode()
+ */
+extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture,
+ SDL_ScaleMode scaleMode);
+
+/**
+ * \brief Get the scale mode used for texture scale operations.
+ *
+ * \param texture The texture to query.
+ * \param scaleMode A pointer filled in with the current scale mode.
+ *
+ * \return 0 on success, or -1 if the texture is not valid.
+ *
+ * \sa SDL_SetTextureScaleMode()
+ */
+extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture,
+ SDL_ScaleMode *scaleMode);
+
+/**
* \brief Update the given texture rectangle with new pixel data.
*
* \param texture The texture to update
@@ -431,9 +470,30 @@
void **pixels, int *pitch);
/**
+ * \brief Lock a portion of the texture for write-only pixel access.
+ * Expose it as a SDL surface.
+ *
+ * \param texture The texture to lock for access, which was created with
+ * ::SDL_TEXTUREACCESS_STREAMING.
+ * \param rect A pointer to the rectangle to lock for access. If the rect
+ * is NULL, the entire texture will be locked.
+ * \param surface This is filled in with a SDL surface representing the locked area
+ * Surface is freed internally after calling SDL_UnlockTexture or SDL_DestroyTexture.
+ *
+ * \return 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING.
+ *
+ * \sa SDL_UnlockTexture()
+ */
+extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture,
+ const SDL_Rect *rect,
+ SDL_Surface **surface);
+
+/**
* \brief Unlock a texture, uploading the changes to video memory, if needed.
+ * If SDL_LockTextureToSurface() was called for locking, the SDL surface is freed.
*
* \sa SDL_LockTexture()
+ * \sa SDL_LockTextureToSurface()
*/
extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture);
@@ -558,8 +618,8 @@
* \brief Set the clip rectangle for the current target.
*
* \param renderer The renderer for which clip rectangle should be set.
- * \param rect A pointer to the rectangle to set as the clip rectangle, or
- * NULL to disable clipping.
+ * \param rect A pointer to the rectangle to set as the clip rectangle,
+ * relative to the viewport, or NULL to disable clipping.
*
* \return 0 on success, or -1 on error
*
--- a/external/SDL2/include/SDL_revision.h
+++ b/external/SDL2/include/SDL_revision.h
@@ -1,2 +1,2 @@
-#define SDL_REVISION "hg-12952:bc90ce38f1e2"
-#define SDL_REVISION_NUMBER 12952
+#define SDL_REVISION "hg-13609:34cc7d3b69d3"
+#define SDL_REVISION_NUMBER 13609
--- a/external/SDL2/include/SDL_rwops.h
+++ b/external/SDL2/include/SDL_rwops.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_scancode.h
+++ b/external/SDL2/include/SDL_scancode.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_sensor.h
+++ b/external/SDL2/include/SDL_sensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_shape.h
+++ b/external/SDL2/include/SDL_shape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_stdinc.h
+++ b/external/SDL2/include/SDL_stdinc.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -408,6 +408,8 @@
extern DECLSPEC int SDLCALL SDL_isdigit(int x);
extern DECLSPEC int SDLCALL SDL_isspace(int x);
+extern DECLSPEC int SDLCALL SDL_isupper(int x);
+extern DECLSPEC int SDLCALL SDL_islower(int x);
extern DECLSPEC int SDLCALL SDL_toupper(int x);
extern DECLSPEC int SDLCALL SDL_tolower(int x);
@@ -415,11 +417,14 @@
#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x)))
#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x)))
+#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */
SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords)
{
-#if defined(__GNUC__) && defined(i386)
+#ifdef __APPLE__
+ memset_pattern4(dst, &val, dwords * 4);
+#elif defined(__GNUC__) && defined(i386)
int u0, u1, u2;
__asm__ __volatile__ (
"cld \n\t"
@@ -450,11 +455,14 @@
extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len);
extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len);
-extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr);
extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr);
extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
+extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr);
+extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle);
+
extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2);
+extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
@@ -467,6 +475,7 @@
extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c);
extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c);
extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle);
+extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr);
extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str);
extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix);
@@ -581,6 +590,7 @@
#define SDL_strchr strchr
#define SDL_strrchr strrchr
#define SDL_strstr strstr
+#define SDL_strtokr strtok_r
#define SDL_strcmp strcmp
#define SDL_strncmp strncmp
#define SDL_strcasecmp strcasecmp
--- a/external/SDL2/include/SDL_surface.h
+++ b/external/SDL2/include/SDL_surface.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_system.h
+++ b/external/SDL2/include/SDL_system.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -89,7 +89,7 @@
#endif /* __LINUX__ */
/* Platform specific functions for iOS */
-#if defined(__IPHONEOS__) && __IPHONEOS__
+#ifdef __IPHONEOS__
#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam)
extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam);
@@ -101,7 +101,7 @@
/* Platform specific functions for Android */
-#if defined(__ANDROID__) && __ANDROID__
+#ifdef __ANDROID__
/**
\brief Get the JNI environment for the current thread
@@ -121,6 +121,32 @@
extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void);
/**
+ \brief Return API level of the current device
+
+ API level 29: Android 10
+ API level 28: Android 9
+ API level 27: Android 8.1
+ API level 26: Android 8.0
+ API level 25: Android 7.1
+ API level 24: Android 7.0
+ API level 23: Android 6.0
+ API level 22: Android 5.1
+ API level 21: Android 5.0
+ API level 20: Android 4.4W
+ API level 19: Android 4.4
+ API level 18: Android 4.3
+ API level 17: Android 4.2
+ API level 16: Android 4.1
+ API level 15: Android 4.0.3
+ API level 14: Android 4.0
+ API level 13: Android 3.2
+ API level 12: Android 3.1
+ API level 11: Android 3.0
+ API level 10: Android 2.3.3
+ */
+extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void);
+
+/**
\brief Return true if the application is running on Android TV
*/
extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void);
@@ -175,7 +201,7 @@
#endif /* __ANDROID__ */
/* Platform specific functions for WinRT */
-#if defined(__WINRT__) && __WINRT__
+#ifdef __WINRT__
/**
* \brief WinRT / Windows Phone path types
@@ -267,6 +293,17 @@
\brief Return true if the current device is a tablet.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void);
+
+/* Functions used by iOS application delegates to notify SDL about state changes */
+extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void);
+extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void);
+extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void);
+extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void);
+extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void);
+extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void);
+#ifdef __IPHONEOS__
+extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void);
+#endif
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
--- a/external/SDL2/include/SDL_syswm.h
+++ b/external/SDL2/include/SDL_syswm.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -49,6 +49,9 @@
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
+#ifndef NOMINMAX /* don't define min() and max(). */
+#define NOMINMAX
+#endif
#include <windows.h>
#endif
@@ -129,7 +132,8 @@
SDL_SYSWM_WINRT,
SDL_SYSWM_ANDROID,
SDL_SYSWM_VIVANTE,
- SDL_SYSWM_OS2
+ SDL_SYSWM_OS2,
+ SDL_SYSWM_HAIKU
} SDL_SYSWM_TYPE;
/**
--- a/external/SDL2/include/SDL_test.h
+++ b/external/SDL2/include/SDL_test.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_assert.h
+++ b/external/SDL2/include/SDL_test_assert.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_common.h
+++ b/external/SDL2/include/SDL_test_common.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -154,6 +154,19 @@
* \param options an array of strings for application specific options. The last element of the array should be NULL.
*/
void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options);
+
+/**
+ * \brief Returns common usage information
+ *
+ * You should (probably) be using SDLTest_CommonLogUsage() instead, but this
+ * function remains for binary compatibility. Strings returned from this
+ * function are valid until SDLTest_CommonQuit() is called, in which case
+ * those strings' memory is freed and can no longer be used.
+ *
+ * \param state The common state describing the test window to create.
+ * \returns String with usage information
+ */
+const char *SDLTest_CommonUsage(SDLTest_CommonState * state);
/**
* \brief Open test window.
--- a/external/SDL2/include/SDL_test_compare.h
+++ b/external/SDL2/include/SDL_test_compare.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_crc32.h
+++ b/external/SDL2/include/SDL_test_crc32.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_font.h
+++ b/external/SDL2/include/SDL_test_font.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_fuzzer.h
+++ b/external/SDL2/include/SDL_test_fuzzer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_harness.h
+++ b/external/SDL2/include/SDL_test_harness.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_images.h
+++ b/external/SDL2/include/SDL_test_images.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_log.h
+++ b/external/SDL2/include/SDL_test_log.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_md5.h
+++ b/external/SDL2/include/SDL_test_md5.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_memory.h
+++ b/external/SDL2/include/SDL_test_memory.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_test_random.h
+++ b/external/SDL2/include/SDL_test_random.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_thread.h
+++ b/external/SDL2/include/SDL_thread.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -69,7 +69,7 @@
*/
typedef int (SDLCALL * SDL_ThreadFunction) (void *data);
-#if defined(__WIN32__) && !defined(HAVE_LIBC)
+#if defined(__WIN32__)
/**
* \file SDL_thread.h
*
@@ -93,11 +93,18 @@
#define SDL_PASSED_BEGINTHREAD_ENDTHREAD
#include <process.h> /* _beginthreadex() and _endthreadex() */
-typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread)
+typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread)
(void *, unsigned, unsigned (__stdcall *func)(void *),
void * /*arg*/, unsigned, unsigned * /* threadID */);
typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code);
+#ifndef SDL_beginthread
+#define SDL_beginthread _beginthreadex
+#endif
+#ifndef SDL_endthread
+#define SDL_endthread _endthreadex
+#endif
+
/**
* Create a thread.
*/
@@ -118,12 +125,12 @@
*/
#if defined(SDL_CreateThread) && SDL_DYNAMIC_API
#undef SDL_CreateThread
-#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex)
+#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
#undef SDL_CreateThreadWithStackSize
-#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex)
+#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
#else
-#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex)
-#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex)
+#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
+#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)SDL_endthread)
#endif
#elif defined(__OS2__)
@@ -132,13 +139,23 @@
* into a dll with Watcom's runtime statically linked.
*/
#define SDL_PASSED_BEGINTHREAD_ENDTHREAD
+
#ifndef __EMX__
#include <process.h>
#else
#include <stdlib.h>
#endif
+
typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/);
typedef void (*pfnSDL_CurrentEndThread)(void);
+
+#ifndef SDL_beginthread
+#define SDL_beginthread _beginthread
+#endif
+#ifndef SDL_endthread
+#define SDL_endthread _endthread
+#endif
+
extern DECLSPEC SDL_Thread *SDLCALL
SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data,
pfnSDL_CurrentBeginThread pfnBeginThread,
@@ -147,14 +164,15 @@
SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data,
pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread);
+
#if defined(SDL_CreateThread) && SDL_DYNAMIC_API
#undef SDL_CreateThread
-#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
+#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
#undef SDL_CreateThreadWithStackSize
-#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
+#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
#else
-#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
-#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
+#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
+#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread)
#endif
#else
--- a/external/SDL2/include/SDL_timer.h
+++ b/external/SDL2/include/SDL_timer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_touch.h
+++ b/external/SDL2/include/SDL_touch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_types.h
+++ b/external/SDL2/include/SDL_types.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/include/SDL_version.h
+++ b/external/SDL2/include/SDL_version.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -59,7 +59,7 @@
*/
#define SDL_MAJOR_VERSION 2
#define SDL_MINOR_VERSION 0
-#define SDL_PATCHLEVEL 10
+#define SDL_PATCHLEVEL 12
/**
* \brief Macro to determine SDL version program was compiled against.
--- a/external/SDL2/include/SDL_video.h
+++ b/external/SDL2/include/SDL_video.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -96,7 +96,6 @@
*/
typedef enum
{
- /* !!! FIXME: change this to name = (1<<x). */
SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */
SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */
SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */
--- a/external/SDL2/include/begin_code.h
+++ b/external/SDL2/include/begin_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -58,8 +58,6 @@
# else
# define DECLSPEC __declspec(dllimport)
# endif
-# elif defined(SDL_STATIC)
-# define DECLSPEC
# else
# define DECLSPEC __declspec(dllexport)
# endif
--- a/external/SDL2/include/close_code.h
+++ b/external/SDL2/include/close_code.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- /dev/null
+++ b/external/SDL2/sdl2-config-version.cmake.in
@@ -1,0 +1,11 @@
+set(PACKAGE_VERSION "@SDL_VERSION@")
+
+if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION)
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+else()
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ set(PACKAGE_VERSION_EXACT TRUE)
+ endif()
+endif()
+
--- a/external/SDL2/sdl2-config.cmake.in
+++ b/external/SDL2/sdl2-config.cmake.in
@@ -9,3 +9,31 @@
set(SDL2_INCLUDE_DIRS "@includedir@/SDL2")
set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} @SDL_RLD_FLAGS@ @SDL_LIBS@")
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
+
+if(NOT TARGET SDL2::SDL2)
+ # Remove -lSDL2 as that is handled by CMake, note the space at the end so it does not replace e.g. -lSDL2main
+ # This may require "libdir" beeing set (from above)
+ string(REPLACE "-lSDL2 " "" SDL2_EXTRA_LINK_FLAGS "@SDL_RLD_FLAGS@ @SDL_LIBS@ ")
+ string(STRIP "${SDL2_EXTRA_LINK_FLAGS}" SDL2_EXTRA_LINK_FLAGS)
+ string(REPLACE "-lSDL2 " "" SDL2_EXTRA_LINK_FLAGS_STATIC "@SDL_RLD_FLAGS@ @SDL_STATIC_LIBS@ ")
+ string(STRIP "${SDL2_EXTRA_LINK_FLAGS_STATIC}" SDL2_EXTRA_LINK_FLAGS_STATIC)
+
+ add_library(SDL2::SDL2 SHARED IMPORTED)
+ set_target_properties(SDL2::SDL2 PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "@includedir@/SDL2"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "@libdir@/libSDL2.so"
+ INTERFACE_LINK_LIBRARIES "${SDL2_EXTRA_LINK_FLAGS}")
+
+ add_library(SDL2::SDL2-static STATIC IMPORTED)
+ set_target_properties(SDL2::SDL2-static PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "@includedir@/SDL2"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "@libdir@/libSDL2.a"
+ INTERFACE_LINK_LIBRARIES "${SDL2_EXTRA_LINK_FLAGS_STATIC}")
+
+ add_library(SDL2::SDL2main STATIC IMPORTED)
+ set_target_properties(SDL2::SDL2main PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+ IMPORTED_LOCATION "@libdir@/libSDL2main.a")
+endif()
--- a/external/SDL2/src/SDL.c
+++ b/external/SDL2/src/SDL.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,8 +22,16 @@
#if defined(__WIN32__)
#include "core/windows/SDL_windows.h"
+#elif defined(__OS2__)
+#include <stdlib.h> /* For _exit() */
+#elif !defined(__WINRT__)
+#include <unistd.h> /* For _exit(), etc. */
#endif
+#if defined(__EMSCRIPTEN__)
+#include <emscripten.h>
+#endif
+
/* Initialization code for SDL */
#include "SDL.h"
@@ -43,6 +51,34 @@
extern int SDL_HelperWindowCreate(void);
extern int SDL_HelperWindowDestroy(void);
#endif
+
+
+/* This is not declared in any header, although it is shared between some
+ parts of SDL, because we don't want anything calling it without an
+ extremely good reason. */
+extern SDL_NORETURN void SDL_ExitProcess(int exitcode);
+SDL_NORETURN void SDL_ExitProcess(int exitcode)
+{
+#ifdef __WIN32__
+ /* "if you do not know the state of all threads in your process, it is
+ better to call TerminateProcess than ExitProcess"
+ https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx */
+ TerminateProcess(GetCurrentProcess(), exitcode);
+ /* MingW doesn't have TerminateProcess marked as noreturn, so add an
+ ExitProcess here that will never be reached but make MingW happy. */
+ ExitProcess(exitcode);
+#elif defined(__EMSCRIPTEN__)
+ emscripten_cancel_main_loop(); /* this should "kill" the app. */
+ emscripten_force_exit(exitcode); /* this should "kill" the app. */
+ exit(exitcode);
+#elif defined(__HAIKU__) /* Haiku has _Exit, but it's not marked noreturn. */
+ _exit(exitcode);
+#elif defined(HAVE__EXIT) /* Upper case _Exit() */
+ _Exit(exitcode);
+#else
+ _exit(exitcode);
+#endif
+}
/* The initialized subsystems */
--- a/external/SDL2/src/SDL_assert.c
+++ b/external/SDL2/src/SDL_assert.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,13 +36,10 @@
#ifndef WS_OVERLAPPEDWINDOW
#define WS_OVERLAPPEDWINDOW 0
#endif
-#else /* fprintf, _exit(), etc. */
+#else /* fprintf, etc. */
#include <stdio.h>
#include <stdlib.h>
-#if ! defined(__WINRT__)
-#include <unistd.h>
#endif
-#endif
#if defined(__EMSCRIPTEN__)
#include <emscripten.h>
@@ -120,34 +117,18 @@
}
+/* This is not declared in any header, although it is shared between some
+ parts of SDL, because we don't want anything calling it without an
+ extremely good reason. */
#if defined(__WATCOMC__)
+extern void SDL_ExitProcess(int exitcode);
#pragma aux SDL_ExitProcess aborts;
#endif
-static SDL_NORETURN void SDL_ExitProcess(int exitcode)
-{
-#ifdef __WIN32__
- /* "if you do not know the state of all threads in your process, it is
- better to call TerminateProcess than ExitProcess"
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms682658(v=vs.85).aspx */
- TerminateProcess(GetCurrentProcess(), exitcode);
- /* MingW doesn't have TerminateProcess marked as noreturn, so add an
- ExitProcess here that will never be reached but make MingW happy. */
- ExitProcess(exitcode);
-#elif defined(__EMSCRIPTEN__)
- emscripten_cancel_main_loop(); /* this should "kill" the app. */
- emscripten_force_exit(exitcode); /* this should "kill" the app. */
- exit(exitcode);
-#elif defined(__HAIKU__) /* Haiku has _Exit, but it's not marked noreturn. */
- _exit(exitcode);
-#elif defined(HAVE__EXIT) /* Upper case _Exit() */
- _Exit(exitcode);
-#else
- _exit(exitcode);
-#endif
-}
+extern SDL_NORETURN void SDL_ExitProcess(int exitcode);
#if defined(__WATCOMC__)
+static void SDL_AbortAssertion (void);
#pragma aux SDL_AbortAssertion aborts;
#endif
static SDL_NORETURN void SDL_AbortAssertion(void)
--- a/external/SDL2/src/SDL_assert_c.h
+++ b/external/SDL2/src/SDL_assert_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/SDL_dataqueue.c
+++ b/external/SDL2/src/SDL_dataqueue.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/SDL_dataqueue.h
+++ b/external/SDL2/src/SDL_dataqueue.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/SDL_error.c
+++ b/external/SDL2/src/SDL_error.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -25,16 +25,6 @@
#include "SDL_log.h"
#include "SDL_error.h"
#include "SDL_error_c.h"
-
-
-/* Routine to get the thread-specific error variable */
-#if SDL_THREADS_DISABLED
-/* The default (non-thread-safe) global error variable */
-static SDL_error SDL_global_error;
-#define SDL_GetErrBuf() (&SDL_global_error)
-#else
-extern SDL_error *SDL_GetErrBuf(void);
-#endif /* SDL_THREADS_DISABLED */
#define SDL_ERRBUFIZE 1024
--- a/external/SDL2/src/SDL_error_c.h
+++ b/external/SDL2/src/SDL_error_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/SDL_hints.c
+++ b/external/SDL2/src/SDL_hints.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,7 @@
#include "SDL_hints.h"
#include "SDL_error.h"
+#include "SDL_hints_c.h"
/* Assuming there aren't many hints set and they aren't being queried in
@@ -119,16 +120,22 @@
}
SDL_bool
-SDL_GetHintBoolean(const char *name, SDL_bool default_value)
+SDL_GetStringBoolean(const char *value, SDL_bool default_value)
{
- const char *hint = SDL_GetHint(name);
- if (!hint || !*hint) {
+ if (!value || !*value) {
return default_value;
}
- if (*hint == '0' || SDL_strcasecmp(hint, "false") == 0) {
+ if (*value == '0' || SDL_strcasecmp(value, "false") == 0) {
return SDL_FALSE;
}
return SDL_TRUE;
+}
+
+SDL_bool
+SDL_GetHintBoolean(const char *name, SDL_bool default_value)
+{
+ const char *hint = SDL_GetHint(name);
+ return SDL_GetStringBoolean(hint, default_value);
}
void
--- /dev/null
+++ b/external/SDL2/src/SDL_hints_c.h
@@ -1,0 +1,32 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "./SDL_internal.h"
+
+/* This file defines useful function for working with SDL hints */
+
+#ifndef SDL_hints_c_h_
+#define SDL_hints_c_h_
+
+extern SDL_bool SDL_GetStringBoolean(const char *value, SDL_bool default_value);
+
+#endif /* SDL_hints_c_h_ */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/SDL_internal.h
+++ b/external/SDL2/src/SDL_internal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -50,6 +50,71 @@
#endif
#include "SDL_config.h"
+
+/* A few #defines to reduce SDL2 footprint.
+ Only effective when library is statically linked.
+ You have to manually edit this file. */
+#ifndef SDL_LEAN_AND_MEAN
+#define SDL_LEAN_AND_MEAN 0
+#endif
+
+/* Optimized functions from 'SDL_blit_0.c'
+ - blit with source BitsPerPixel < 8, palette */
+#ifndef SDL_HAVE_BLIT_0
+#define SDL_HAVE_BLIT_0 !SDL_LEAN_AND_MEAN
+#endif
+
+/* Optimized functions from 'SDL_blit_1.c'
+ - blit with source BytesPerPixel == 1, palette */
+#ifndef SDL_HAVE_BLIT_1
+#define SDL_HAVE_BLIT_1 !SDL_LEAN_AND_MEAN
+#endif
+
+/* Optimized functions from 'SDL_blit_A.c'
+ - blit with 'SDL_BLENDMODE_BLEND' blending mode */
+#ifndef SDL_HAVE_BLIT_A
+#define SDL_HAVE_BLIT_A !SDL_LEAN_AND_MEAN
+#endif
+
+/* Optimized functions from 'SDL_blit_N.c'
+ - blit with COLORKEY mode, or nothing */
+#ifndef SDL_HAVE_BLIT_N
+#define SDL_HAVE_BLIT_N !SDL_LEAN_AND_MEAN
+#endif
+
+/* Optimized functions from 'SDL_blit_N.c'
+ - RGB565 conversion with Lookup tables */
+#ifndef SDL_HAVE_BLIT_N_RGB565
+#define SDL_HAVE_BLIT_N_RGB565 !SDL_LEAN_AND_MEAN
+#endif
+
+/* Optimized functions from 'SDL_blit_AUTO.c'
+ - blit with modulate color, modulate alpha, any blending mode
+ - scaling or not */
+#ifndef SDL_HAVE_BLIT_AUTO
+#define SDL_HAVE_BLIT_AUTO !SDL_LEAN_AND_MEAN
+#endif
+
+/* Run-Length-Encoding
+ - SDL_SetColorKey() called with SDL_RLEACCEL flag */
+#ifndef SDL_HAVE_RLE
+#define SDL_HAVE_RLE !SDL_LEAN_AND_MEAN
+#endif
+
+/* Software SDL_Renderer
+ - creation of software renderer
+ - *not* general blitting functions
+ - {blend,draw}{fillrect,line,point} internal functions */
+#ifndef SDL_VIDEO_RENDER_SW
+#define SDL_VIDEO_RENDER_SW !SDL_LEAN_AND_MEAN
+#endif
+
+/* YUV formats
+ - handling of YUV surfaces
+ - blitting and conversion functions */
+#ifndef SDL_HAVE_YUV
+#define SDL_HAVE_YUV !SDL_LEAN_AND_MEAN
+#endif
#endif /* SDL_internal_h_ */
--- a/external/SDL2/src/SDL_log.c
+++ b/external/SDL2/src/SDL_log.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/atomic/SDL_atomic.c
+++ b/external/SDL2/src/atomic/SDL_atomic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/atomic/SDL_spinlock.c
+++ b/external/SDL2/src/atomic/SDL_spinlock.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -32,6 +32,10 @@
#include <atomic.h>
#endif
+#if !defined(HAVE_GCC_ATOMICS) && defined(__RISCOS__)
+#include <unixlib/local.h>
+#endif
+
#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
#include <xmmintrin.h>
#endif
@@ -79,10 +83,21 @@
return (__sync_lock_test_and_set(lock, 1) == 0);
#elif defined(__GNUC__) && defined(__arm__) && \
- (defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || \
+ (defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) || \
+ defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || \
defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5TE__) || \
defined(__ARM_ARCH_5TEJ__))
int result;
+
+#if defined(__RISCOS__)
+ if (__cpucap_have_rex()) {
+ __asm__ __volatile__ (
+ "ldrex %0, [%2]\nteq %0, #0\nstrexeq %0, %1, [%2]"
+ : "=&r" (result) : "r" (1), "r" (lock) : "cc", "memory");
+ return (result == 0);
+ }
+#endif
+
__asm__ __volatile__ (
"swp %0, %1, [%2]\n"
: "=&r,&r" (result) : "r,0" (1), "r,r" (lock) : "memory");
--- a/external/SDL2/src/audio/SDL_audio.c
+++ b/external/SDL2/src/audio/SDL_audio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -948,7 +948,7 @@
}
SDL_zero(current_audio);
- SDL_zero(open_devices);
+ SDL_zeroa(open_devices);
/* Select the proper audio driver */
if (driver_name == NULL) {
@@ -1076,7 +1076,7 @@
return NULL;
}
- if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) {
+ if (iscapture && !current_audio.impl.HasCaptureSupport) {
SDL_SetError("No capture support");
return NULL;
}
@@ -1230,7 +1230,7 @@
return 0;
}
- if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) {
+ if (iscapture && !current_audio.impl.HasCaptureSupport) {
SDL_SetError("No capture support");
return 0;
}
@@ -1608,7 +1608,7 @@
SDL_DestroyMutex(current_audio.detectionLock);
SDL_zero(current_audio);
- SDL_zero(open_devices);
+ SDL_zeroa(open_devices);
#ifdef HAVE_LIBSAMPLERATE_H
UnloadLibSampleRate();
@@ -1664,17 +1664,28 @@
return format_list[format_idx][format_idx_sub++];
}
+Uint8
+SDL_SilenceValueForFormat(const SDL_AudioFormat format)
+{
+ switch (format) {
+ /* !!! FIXME: 0x80 isn't perfect for U16, but we can't fit 0x8000 in a
+ !!! FIXME: byte for memset() use. This is actually 0.1953 percent
+ !!! FIXME: off from silence. Maybe just don't use U16. */
+ case AUDIO_U16LSB:
+ case AUDIO_U16MSB:
+ case AUDIO_U8:
+ return 0x80;
+
+ default: break;
+ }
+
+ return 0x00;
+}
+
void
SDL_CalculateAudioSpec(SDL_AudioSpec * spec)
{
- switch (spec->format) {
- case AUDIO_U8:
- spec->silence = 0x80;
- break;
- default:
- spec->silence = 0x00;
- break;
- }
+ spec->silence = SDL_SilenceValueForFormat(spec->format);
spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8;
spec->size *= spec->channels;
spec->size *= spec->samples;
--- a/external/SDL2/src/audio/SDL_audio_c.h
+++ b/external/SDL2/src/audio/SDL_audio_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -52,6 +52,7 @@
extern SDL_AudioFormat SDL_NextAudioFormat(void);
/* Function to calculate the size and silence for a SDL_AudioSpec */
+extern Uint8 SDL_SilenceValueForFormat(const SDL_AudioFormat format);
extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec);
/* Choose the audio filter functions below */
--- a/external/SDL2/src/audio/SDL_audiocvt.c
+++ b/external/SDL2/src/audio/SDL_audiocvt.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -677,7 +677,7 @@
}
if (!filter) {
- return SDL_SetError("No conversion from float to destination format available");
+ return SDL_SetError("No conversion from float to format 0x%.4x available", dst_fmt);
}
if (SDL_AddAudioCVTFilter(cvt, filter) < 0) {
@@ -915,7 +915,7 @@
cvt->dst_format = dst_fmt;
cvt->needed = 0;
cvt->filter_index = 0;
- SDL_zero(cvt->filters);
+ SDL_zeroa(cvt->filters);
cvt->len_mult = 1;
cvt->len_ratio = 1.0;
cvt->rate_incr = ((double) dst_rate) / ((double) src_rate);
--- a/external/SDL2/src/audio/SDL_audiodev.c
+++ b/external/SDL2/src/audio/SDL_audiodev.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/SDL_audiodev_c.h
+++ b/external/SDL2/src/audio/SDL_audiodev_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/SDL_audiotypecvt.c
+++ b/external/SDL2/src/audio/SDL_audiotypecvt.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -482,7 +482,7 @@
if ((((size_t) src) & 15) == 0) {
/* Aligned! Do SSE blocks as long as we have 16 bytes available. */
const __m128 divby32768 = _mm_set1_ps(DIVBY32768);
- const __m128 minus1 = _mm_set1_ps(1.0f);
+ const __m128 minus1 = _mm_set1_ps(-1.0f);
while (i >= 8) { /* 8 * 16-bit */
const __m128i ints = _mm_load_si128((__m128i const *) src); /* get 8 sint16 into an XMM register. */
/* treat as int32, shift left to clear every other sint16, then back right with zero-extend. Now sint32. */
@@ -614,7 +614,7 @@
SDL_Convert_F32_to_U8_SSE2(SDL_AudioCVT *cvt, SDL_AudioFormat format)
{
const float *src = (const float *) cvt->buf;
- Uint8 *dst = (Uint8 *) cvt->buf;
+ Uint8 *dst = cvt->buf;
int i;
LOG_DEBUG_CONVERT("AUDIO_F32", "AUDIO_U8 (using SSE2)");
@@ -879,10 +879,10 @@
const int16x8_t int16hi = vmovl_s8(vget_high_s8(bytes)); /* convert top 8 bytes to 8 int16 */
const int16x8_t int16lo = vmovl_s8(vget_low_s8(bytes)); /* convert bottom 8 bytes to 8 int16 */
/* split int16 to two int32, then convert to float, then multiply to normalize, store. */
- vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16hi))), divby128));
- vst1q_f32(dst+4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16hi))), divby128));
- vst1q_f32(dst+8, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16lo))), divby128));
- vst1q_f32(dst+12, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16lo))), divby128));
+ vst1q_f32(dst, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16lo))), divby128));
+ vst1q_f32(dst+4, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16lo))), divby128));
+ vst1q_f32(dst+8, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_low_s16(int16hi))), divby128));
+ vst1q_f32(dst+12, vmulq_f32(vcvtq_f32_s32(vmovl_s16(vget_high_s16(int16hi))), divby128));
i -= 16; mmsrc -= 16; dst -= 16;
}
@@ -931,10 +931,10 @@
const uint16x8_t uint16hi = vmovl_u8(vget_high_u8(bytes)); /* convert top 8 bytes to 8 uint16 */
const uint16x8_t uint16lo = vmovl_u8(vget_low_u8(bytes)); /* convert bottom 8 bytes to 8 uint16 */
/* split uint16 to two uint32, then convert to float, then multiply to normalize, subtract to adjust for sign, store. */
- vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16hi))), divby128));
- vst1q_f32(dst+4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16hi))), divby128));
- vst1q_f32(dst+8, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16lo))), divby128));
- vst1q_f32(dst+12, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16lo))), divby128));
+ vst1q_f32(dst, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16lo))), divby128));
+ vst1q_f32(dst+4, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16lo))), divby128));
+ vst1q_f32(dst+8, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_low_u16(uint16hi))), divby128));
+ vst1q_f32(dst+12, vmlaq_f32(negone, vcvtq_f32_u32(vmovl_u16(vget_high_u16(uint16hi))), divby128));
i -= 16; mmsrc -= 16; dst -= 16;
}
--- a/external/SDL2/src/audio/SDL_mixer.c
+++ b/external/SDL2/src/audio/SDL_mixer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/SDL_sysaudio.h
+++ b/external/SDL2/src/audio/SDL_sysaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/SDL_wave.c
+++ b/external/SDL2/src/audio/SDL_wave.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -38,6 +38,7 @@
#include "SDL_hints.h"
#include "SDL_audio.h"
#include "SDL_wave.h"
+#include "SDL_audio_c.h"
/* Reads the value stored at the location of the f1 pointer, multiplies it
* with the second argument and then stores the result to f1.
@@ -112,7 +113,7 @@
Uint32 wavebps = format->byterate;
char channelstr[64];
- SDL_zero(channelstr);
+ SDL_zeroa(channelstr);
switch (format->encoding) {
case PCM_CODE:
@@ -647,7 +648,7 @@
MS_ADPCM_ChannelState cstate[2];
SDL_zero(state);
- SDL_zero(cstate);
+ SDL_zeroa(cstate);
if (chunk->size != chunk->length) {
/* Could not read everything. Recalculate number of sample frames. */
@@ -691,7 +692,7 @@
return SDL_OutOfMemory();
}
- state.cstate = &cstate;
+ state.cstate = cstate;
/* Decode block by block. A truncated block will stop the decoding. */
bytesleft = state.input.size - state.input.pos;
@@ -717,7 +718,7 @@
result = MS_ADPCM_DecodeBlockData(&state);
if (result == -1) {
/* Unexpected end. Stop decoding and return partial data if necessary. */
- if (file->trunchint == TruncVeryStrict || file->trunchint == TruncVeryStrict) {
+ if (file->trunchint == TruncVeryStrict || file->trunchint == TruncStrict) {
SDL_free(state.output.data);
return SDL_SetError("Truncated data chunk");
} else if (file->trunchint != TruncDropFrame) {
@@ -1114,7 +1115,7 @@
if (result == -1) {
/* Unexpected end. Stop decoding and return partial data if necessary. */
- if (file->trunchint == TruncVeryStrict || file->trunchint == TruncVeryStrict) {
+ if (file->trunchint == TruncVeryStrict || file->trunchint == TruncStrict) {
SDL_free(state.output.data);
SDL_free(cstate);
return SDL_SetError("Truncated data chunk");
@@ -2080,6 +2081,8 @@
}
break;
}
+
+ spec->silence = SDL_SilenceValueForFormat(spec->format);
/* Report the end position back to the cleanup code. */
if (RIFFlengthknown) {
--- a/external/SDL2/src/audio/SDL_wave.h
+++ b/external/SDL2/src/audio/SDL_wave.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/alsa/SDL_alsa_audio.c
+++ b/external/SDL2/src/audio/alsa/SDL_alsa_audio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -340,7 +340,6 @@
static void
no_swizzle(_THIS, void *buffer, Uint32 bufferlen)
{
- return;
}
#endif /* SND_CHMAP_API_VERSION */
@@ -349,7 +348,7 @@
ALSA_PlayDevice(_THIS)
{
const Uint8 *sample_buf = (const Uint8 *) this->hidden->mixbuf;
- const int frame_size = (((int) SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
+ const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
this->spec.channels;
snd_pcm_uframes_t frames_left = ((snd_pcm_uframes_t) this->spec.samples);
@@ -398,7 +397,7 @@
ALSA_CaptureFromDevice(_THIS, void *buffer, int buflen)
{
Uint8 *sample_buf = (Uint8 *) buffer;
- const int frame_size = (((int) SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
+ const int frame_size = ((SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
this->spec.channels;
const int total_frames = buflen / frame_size;
snd_pcm_uframes_t frames_left = total_frames;
--- a/external/SDL2/src/audio/alsa/SDL_alsa_audio.h
+++ b/external/SDL2/src/audio/alsa/SDL_alsa_audio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/android/SDL_androidaudio.c
+++ b/external/SDL2/src/audio/android/SDL_androidaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/android/SDL_androidaudio.h
+++ b/external/SDL2/src/audio/android/SDL_androidaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/arts/SDL_artsaudio.c
+++ b/external/SDL2/src/audio/arts/SDL_artsaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/arts/SDL_artsaudio.h
+++ b/external/SDL2/src/audio/arts/SDL_artsaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/coreaudio/SDL_coreaudio.h
+++ b/external/SDL2/src/audio/coreaudio/SDL_coreaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/coreaudio/SDL_coreaudio.m
+++ b/external/SDL2/src/audio/coreaudio/SDL_coreaudio.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -326,12 +326,18 @@
@autoreleasepool {
AVAudioSession *session = [AVAudioSession sharedInstance];
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
+
/* Set category to ambient by default so that other music continues playing. */
NSString *category = AVAudioSessionCategoryAmbient;
+ NSString *mode = AVAudioSessionModeDefault;
+ NSUInteger options = 0;
NSError *err = nil;
if (open_playback_devices && open_capture_devices) {
category = AVAudioSessionCategoryPlayAndRecord;
+#if !TARGET_OS_TV
+ options = AVAudioSessionCategoryOptionDefaultToSpeaker;
+#endif
} else if (open_capture_devices) {
category = AVAudioSessionCategoryRecord;
} else {
@@ -348,10 +354,18 @@
}
}
- if (![session setCategory:category error:&err]) {
- NSString *desc = err.description;
- SDL_SetError("Could not set Audio Session category: %s", desc.UTF8String);
- return NO;
+ if ([session respondsToSelector:@selector(setCategory:mode:options:error:)]) {
+ if (![session setCategory:category mode:mode options:options error:&err]) {
+ NSString *desc = err.description;
+ SDL_SetError("Could not set Audio Session category: %s", desc.UTF8String);
+ return NO;
+ }
+ } else {
+ if (![session setCategory:category error:&err]) {
+ NSString *desc = err.description;
+ SDL_SetError("Could not set Audio Session category: %s", desc.UTF8String);
+ return NO;
+ }
}
if (open && (open_playback_devices + open_capture_devices) == 1) {
@@ -376,7 +390,7 @@
/* An interruption end notification is not guaranteed to be sent if
we were previously interrupted... resuming if needed when the app
becomes active seems to be the way to go. */
- // Note: object: below needs to be nil, as otherwise it filters by the object, and session doesn't send foreground / active notifications. johna
+ // Note: object: below needs to be nil, as otherwise it filters by the object, and session doesn't send foreground / active notifications. johna
[center addObserver:listener
selector:@selector(applicationBecameActive:)
name:UIApplicationDidBecomeActiveNotification
@@ -417,6 +431,34 @@
if (!SDL_AtomicGet(&this->enabled) || SDL_AtomicGet(&this->paused)) {
/* Supply silence if audio is not enabled or paused */
SDL_memset(inBuffer->mAudioData, this->spec.silence, inBuffer->mAudioDataBytesCapacity);
+ } else if (this->stream ) {
+ UInt32 remaining = inBuffer->mAudioDataBytesCapacity;
+ Uint8 *ptr = (Uint8 *) inBuffer->mAudioData;
+
+ while (remaining > 0) {
+ if ( SDL_AudioStreamAvailable(this->stream) == 0 ) {
+ /* Generate the data */
+ SDL_LockMutex(this->mixer_lock);
+ (*this->callbackspec.callback)(this->callbackspec.userdata,
+ this->hidden->buffer, this->hidden->bufferSize);
+ SDL_UnlockMutex(this->mixer_lock);
+ this->hidden->bufferOffset = 0;
+ SDL_AudioStreamPut(this->stream, this->hidden->buffer, this->hidden->bufferSize);
+ }
+ if ( SDL_AudioStreamAvailable(this->stream) > 0 ) {
+ int got;
+ UInt32 len = SDL_AudioStreamAvailable(this->stream);
+ if ( len > remaining )
+ len = remaining;
+ got = SDL_AudioStreamGet(this->stream, ptr, len);
+ SDL_assert((got < 0) || (got == len));
+ if (got != len) {
+ SDL_memset(ptr, this->spec.silence, len);
+ }
+ ptr = ptr + len;
+ remaining -= len;
+ }
+ }
} else {
UInt32 remaining = inBuffer->mAudioDataBytesCapacity;
Uint8 *ptr = (Uint8 *) inBuffer->mAudioData;
@@ -538,6 +580,12 @@
AudioObjectRemovePropertyListener(this->hidden->deviceID, &alive_address, device_unplugged, this);
#endif
+ if (iscapture) {
+ open_capture_devices--;
+ } else {
+ open_playback_devices--;
+ }
+
#if !MACOSX_COREAUDIO
update_audio_session(this, SDL_FALSE);
#endif
@@ -563,12 +611,6 @@
SDL_free(this->hidden->thread_error);
SDL_free(this->hidden->buffer);
SDL_free(this->hidden);
-
- if (iscapture) {
- open_capture_devices--;
- } else {
- open_playback_devices--;
- }
}
#if MACOSX_COREAUDIO
@@ -668,6 +710,41 @@
/* Calculate the final parameters for this audio specification */
SDL_CalculateAudioSpec(&this->spec);
+ /* Set the channel layout for the audio queue */
+ AudioChannelLayout layout;
+ SDL_zero(layout);
+ switch (this->spec.channels) {
+ case 1:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
+ break;
+ case 2:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
+ break;
+ case 3:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_DVD_4;
+ break;
+ case 4:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_Quadraphonic;
+ break;
+ case 5:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_0_A;
+ break;
+ case 6:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_5_1_A;
+ break;
+ case 7:
+ /* FIXME: Need to move channel[4] (BC) to channel[6] */
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_6_1_A;
+ break;
+ case 8:
+ layout.mChannelLayoutTag = kAudioChannelLayoutTag_MPEG_7_1_A;
+ break;
+ }
+ if (layout.mChannelLayoutTag != 0) {
+ result = AudioQueueSetProperty(this->hidden->audioQueue, kAudioQueueProperty_ChannelLayout, &layout, sizeof(layout));
+ CHECK_RESULT("AudioQueueSetProperty(kAudioQueueProperty_ChannelLayout)");
+ }
+
/* Allocate a sample buffer */
this->hidden->bufferSize = this->spec.size;
this->hidden->bufferOffset = iscapture ? 0 : this->hidden->bufferSize;
@@ -778,6 +855,17 @@
AVAudioSession* session = [AVAudioSession sharedInstance];
[session setPreferredSampleRate:this->spec.freq error:nil];
this->spec.freq = (int)session.sampleRate;
+#if TARGET_OS_TV
+ if (iscapture) {
+ [session setPreferredInputNumberOfChannels:this->spec.channels error:nil];
+ this->spec.channels = session.preferredInputNumberOfChannels;
+ } else {
+ [session setPreferredOutputNumberOfChannels:this->spec.channels error:nil];
+ this->spec.channels = session.preferredOutputNumberOfChannels;
+ }
+#else
+ /* Calling setPreferredOutputNumberOfChannels seems to break audio output on iOS */
+#endif /* TARGET_OS_TV */
}
#endif
@@ -791,13 +879,11 @@
while ((!valid_datatype) && (test_format)) {
this->spec.format = test_format;
- /* Just a list of valid SDL formats, so people don't pass junk here. */
+ /* CoreAudio handles most of SDL's formats natively, but not U16, apparently. */
switch (test_format) {
case AUDIO_U8:
case AUDIO_S8:
- case AUDIO_U16LSB:
case AUDIO_S16LSB:
- case AUDIO_U16MSB:
case AUDIO_S16MSB:
case AUDIO_S32LSB:
case AUDIO_S32MSB:
@@ -813,6 +899,10 @@
else if (SDL_AUDIO_ISSIGNED(this->spec.format))
strdesc->mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
break;
+
+ default:
+ test_format = SDL_NextAudioFormat();
+ break;
}
}
@@ -820,7 +910,7 @@
return SDL_SetError("Unsupported audio format");
}
- strdesc->mBytesPerFrame = strdesc->mBitsPerChannel * strdesc->mChannelsPerFrame / 8;
+ strdesc->mBytesPerFrame = strdesc->mChannelsPerFrame * strdesc->mBitsPerChannel / 8;
strdesc->mBytesPerPacket = strdesc->mBytesPerFrame * strdesc->mFramesPerPacket;
#if MACOSX_COREAUDIO
--- a/external/SDL2/src/audio/directsound/SDL_directsound.c
+++ b/external/SDL2/src/audio/directsound/SDL_directsound.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/directsound/SDL_directsound.h
+++ b/external/SDL2/src/audio/directsound/SDL_directsound.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/disk/SDL_diskaudio.c
+++ b/external/SDL2/src/audio/disk/SDL_diskaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/disk/SDL_diskaudio.h
+++ b/external/SDL2/src/audio/disk/SDL_diskaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/dsp/SDL_dspaudio.c
+++ b/external/SDL2/src/audio/dsp/SDL_dspaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/dsp/SDL_dspaudio.h
+++ b/external/SDL2/src/audio/dsp/SDL_dspaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/dummy/SDL_dummyaudio.c
+++ b/external/SDL2/src/audio/dummy/SDL_dummyaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/dummy/SDL_dummyaudio.h
+++ b/external/SDL2/src/audio/dummy/SDL_dummyaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/emscripten/SDL_emscriptenaudio.c
+++ b/external/SDL2/src/audio/emscripten/SDL_emscriptenaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/emscripten/SDL_emscriptenaudio.h
+++ b/external/SDL2/src/audio/emscripten/SDL_emscriptenaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/esd/SDL_esdaudio.c
+++ b/external/SDL2/src/audio/esd/SDL_esdaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/esd/SDL_esdaudio.h
+++ b/external/SDL2/src/audio/esd/SDL_esdaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/fusionsound/SDL_fsaudio.c
+++ b/external/SDL2/src/audio/fusionsound/SDL_fsaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/fusionsound/SDL_fsaudio.h
+++ b/external/SDL2/src/audio/fusionsound/SDL_fsaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/haiku/SDL_haikuaudio.cc
+++ b/external/SDL2/src/audio/haiku/SDL_haikuaudio.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/haiku/SDL_haikuaudio.h
+++ b/external/SDL2/src/audio/haiku/SDL_haikuaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/jack/SDL_jackaudio.c
+++ b/external/SDL2/src/audio/jack/SDL_jackaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/jack/SDL_jackaudio.h
+++ b/external/SDL2/src/audio/jack/SDL_jackaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/nacl/SDL_naclaudio.c
+++ b/external/SDL2/src/audio/nacl/SDL_naclaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/nacl/SDL_naclaudio.h
+++ b/external/SDL2/src/audio/nacl/SDL_naclaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/nas/SDL_nasaudio.c
+++ b/external/SDL2/src/audio/nas/SDL_nasaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/nas/SDL_nasaudio.h
+++ b/external/SDL2/src/audio/nas/SDL_nasaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/netbsd/SDL_netbsdaudio.c
+++ b/external/SDL2/src/audio/netbsd/SDL_netbsdaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/netbsd/SDL_netbsdaudio.h
+++ b/external/SDL2/src/audio/netbsd/SDL_netbsdaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/openslES/SDL_openslES.c
+++ b/external/SDL2/src/audio/openslES/SDL_openslES.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,8 +26,10 @@
https://googlesamples.github.io/android-audio-high-performance/guides/opensl_es.html
*/
+#include "SDL_assert.h"
#include "SDL_audio.h"
#include "../SDL_audio_c.h"
+#include "../../core/android/SDL_android.h"
#include "SDL_openslES.h"
/* for native audio */
@@ -36,9 +38,8 @@
#include <android/log.h>
-#define LOG_TAG "SDL_openslES"
-
#if 0
+#define LOG_TAG "SDL_openslES"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
//#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)
@@ -49,44 +50,52 @@
#define LOGV(...)
#endif
+/*
+#define SL_SPEAKER_FRONT_LEFT ((SLuint32) 0x00000001)
+#define SL_SPEAKER_FRONT_RIGHT ((SLuint32) 0x00000002)
+#define SL_SPEAKER_FRONT_CENTER ((SLuint32) 0x00000004)
+#define SL_SPEAKER_LOW_FREQUENCY ((SLuint32) 0x00000008)
+#define SL_SPEAKER_BACK_LEFT ((SLuint32) 0x00000010)
+#define SL_SPEAKER_BACK_RIGHT ((SLuint32) 0x00000020)
+#define SL_SPEAKER_FRONT_LEFT_OF_CENTER ((SLuint32) 0x00000040)
+#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER ((SLuint32) 0x00000080)
+#define SL_SPEAKER_BACK_CENTER ((SLuint32) 0x00000100)
+#define SL_SPEAKER_SIDE_LEFT ((SLuint32) 0x00000200)
+#define SL_SPEAKER_SIDE_RIGHT ((SLuint32) 0x00000400)
+#define SL_SPEAKER_TOP_CENTER ((SLuint32) 0x00000800)
+#define SL_SPEAKER_TOP_FRONT_LEFT ((SLuint32) 0x00001000)
+#define SL_SPEAKER_TOP_FRONT_CENTER ((SLuint32) 0x00002000)
+#define SL_SPEAKER_TOP_FRONT_RIGHT ((SLuint32) 0x00004000)
+#define SL_SPEAKER_TOP_BACK_LEFT ((SLuint32) 0x00008000)
+#define SL_SPEAKER_TOP_BACK_CENTER ((SLuint32) 0x00010000)
+#define SL_SPEAKER_TOP_BACK_RIGHT ((SLuint32) 0x00020000)
+*/
+#define SL_ANDROID_SPEAKER_STEREO (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT)
+#define SL_ANDROID_SPEAKER_QUAD (SL_ANDROID_SPEAKER_STEREO | SL_SPEAKER_BACK_LEFT | SL_SPEAKER_BACK_RIGHT)
+#define SL_ANDROID_SPEAKER_5DOT1 (SL_ANDROID_SPEAKER_QUAD | SL_SPEAKER_FRONT_CENTER | SL_SPEAKER_LOW_FREQUENCY)
+#define SL_ANDROID_SPEAKER_7DOT1 (SL_ANDROID_SPEAKER_5DOT1 | SL_SPEAKER_SIDE_LEFT | SL_SPEAKER_SIDE_RIGHT)
+
/* engine interfaces */
-static SLObjectItf engineObject = NULL;
-static SLEngineItf engineEngine = NULL;
+static SLObjectItf engineObject;
+static SLEngineItf engineEngine;
/* output mix interfaces */
-static SLObjectItf outputMixObject = NULL;
-// static SLEnvironmentalReverbItf outputMixEnvironmentalReverb = NULL;
+static SLObjectItf outputMixObject;
-/* aux effect on the output mix, used by the buffer queue player */
-/* static const SLEnvironmentalReverbSettings reverbSettings = SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR; */
-
/* buffer queue player interfaces */
-static SLObjectItf bqPlayerObject = NULL;
-static SLPlayItf bqPlayerPlay = NULL;
-static SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue = NULL;
+static SLObjectItf bqPlayerObject;
+static SLPlayItf bqPlayerPlay;
+static SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue;
#if 0
-static SLEffectSendItf bqPlayerEffectSend = NULL;
-static SLMuteSoloItf bqPlayerMuteSolo = NULL;
-static SLVolumeItf bqPlayerVolume = NULL;
+static SLVolumeItf bqPlayerVolume;
#endif
-#if 0
-/* recorder interfaces TODO */
-static SLObjectItf recorderObject = NULL;
-static SLRecordItf recorderRecord;
+/* recorder interfaces */
+static SLObjectItf recorderObject;
+static SLRecordItf recorderRecord;
static SLAndroidSimpleBufferQueueItf recorderBufferQueue;
-#endif
-/* pointer and size of the next player buffer to enqueue, and number of remaining buffers */
#if 0
-static short *nextBuffer;
-static unsigned nextSize;
-static int nextCount;
-#endif
-
-// static SDL_AudioDevice* audioDevice = NULL;
-
-#if 0
static const char *sldevaudiorecorderstr = "SLES Audio Recorder";
static const char *sldevaudioplayerstr = "SLES Audio Player";
@@ -94,19 +103,34 @@
#define SLES_DEV_AUDIO_PLAYER sldevaudioplayerstr
static void openslES_DetectDevices( int iscapture )
{
- LOGI( "openSLES_DetectDevices()" );
+ LOGI( "openSLES_DetectDevices()" );
if ( iscapture )
addfn( SLES_DEV_AUDIO_RECORDER );
- else
+ else
addfn( SLES_DEV_AUDIO_PLAYER );
- return;
}
#endif
-static void openslES_DestroyEngine();
+static void openslES_DestroyEngine(void)
+{
+ LOGI("openslES_DestroyEngine()");
+ /* destroy output mix object, and invalidate all associated interfaces */
+ if (outputMixObject != NULL) {
+ (*outputMixObject)->Destroy(outputMixObject);
+ outputMixObject = NULL;
+ }
+
+ /* destroy engine object, and invalidate all associated interfaces */
+ if (engineObject != NULL) {
+ (*engineObject)->Destroy(engineObject);
+ engineObject = NULL;
+ engineEngine = NULL;
+ }
+}
+
static int
-openslES_CreateEngine()
+openslES_CreateEngine(void)
{
SLresult result;
@@ -115,40 +139,33 @@
/* create engine */
result = slCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
if (SL_RESULT_SUCCESS != result) {
- LOGE("slCreateEngine failed");
+ LOGE("slCreateEngine failed: %d", result);
goto error;
}
-
LOGI("slCreateEngine OK");
/* realize the engine */
result = (*engineObject)->Realize(engineObject, SL_BOOLEAN_FALSE);
if (SL_RESULT_SUCCESS != result) {
- LOGE("RealizeEngine failed");
+ LOGE("RealizeEngine failed: %d", result);
goto error;
}
-
LOGI("RealizeEngine OK");
/* get the engine interface, which is needed in order to create other objects */
result = (*engineObject)->GetInterface(engineObject, SL_IID_ENGINE, &engineEngine);
if (SL_RESULT_SUCCESS != result) {
- LOGE("EngineGetInterface failed");
+ LOGE("EngineGetInterface failed: %d", result);
goto error;
}
-
LOGI("EngineGetInterface OK");
- /* create output mix, with environmental reverb specified as a non-required interface */
- /* const SLInterfaceID ids[1] = { SL_IID_ENVIRONMENTALREVERB }; */
- /* const SLboolean req[1] = { SL_BOOLEAN_FALSE }; */
-
+ /* create output mix */
const SLInterfaceID ids[1] = { SL_IID_VOLUME };
const SLboolean req[1] = { SL_BOOLEAN_FALSE };
result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 1, ids, req);
-
if (SL_RESULT_SUCCESS != result) {
- LOGE("CreateOutputMix failed");
+ LOGE("CreateOutputMix failed: %d", result);
goto error;
}
LOGI("CreateOutputMix OK");
@@ -156,7 +173,7 @@
/* realize the output mix */
result = (*outputMixObject)->Realize(outputMixObject, SL_BOOLEAN_FALSE);
if (SL_RESULT_SUCCESS != result) {
- LOGE("RealizeOutputMix failed");
+ LOGE("RealizeOutputMix failed: %d", result);
goto error;
}
return 1;
@@ -166,64 +183,232 @@
return 0;
}
-static void openslES_DestroyPCMPlayer(_THIS);
-static void openslES_DestroyPCMRecorder(_THIS);
+/* this callback handler is called every time a buffer finishes recording */
+static void
+bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+{
+ struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) context;
-static void openslES_DestroyEngine()
+ LOGV("SLES: Recording Callback");
+ SDL_SemPost(audiodata->playsem);
+}
+
+static void
+openslES_DestroyPCMRecorder(_THIS)
{
- LOGI("openslES_DestroyEngine()");
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
+ SLresult result;
-// openslES_DestroyPCMPlayer(this);
-// openslES_DestroyPCMRecorder(this);
+ /* stop recording */
+ if (recorderRecord != NULL) {
+ result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_STOPPED);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("SetRecordState stopped: %d", result);
+ }
+ }
- /* destroy output mix object, and invalidate all associated interfaces */
- if (outputMixObject != NULL) {
- (*outputMixObject)->Destroy(outputMixObject);
- outputMixObject = NULL;
- /* outputMixEnvironmentalReverb = NULL; */
+ /* destroy audio recorder object, and invalidate all associated interfaces */
+ if (recorderObject != NULL) {
+ (*recorderObject)->Destroy(recorderObject);
+ recorderObject = NULL;
+ recorderRecord = NULL;
+ recorderBufferQueue = NULL;
}
- /* destroy engine object, and invalidate all associated interfaces */
- if (engineObject != NULL) {
- (*engineObject)->Destroy(engineObject);
- engineObject = NULL;
- engineEngine = NULL;
+ if (audiodata->playsem) {
+ SDL_DestroySemaphore(audiodata->playsem);
+ audiodata->playsem = NULL;
}
- return;
+ if (audiodata->mixbuff) {
+ SDL_free(audiodata->mixbuff);
+ }
}
+static int
+openslES_CreatePCMRecorder(_THIS)
+{
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
+ SLDataFormat_PCM format_pcm;
+ SLresult result;
+ int i;
+
+ if (!Android_JNI_RequestPermission("android.permission.RECORD_AUDIO")) {
+ LOGE("This app doesn't have RECORD_AUDIO permission");
+ return SDL_SetError("This app doesn't have RECORD_AUDIO permission");
+ }
+
+ /* Just go with signed 16-bit audio as it's the most compatible */
+ this->spec.format = AUDIO_S16SYS;
+ this->spec.channels = 1;
+ /*this->spec.freq = SL_SAMPLINGRATE_16 / 1000;*/
+
+ /* Update the fragment size as size in bytes */
+ SDL_CalculateAudioSpec(&this->spec);
+
+ LOGI("Try to open %u hz %u bit chan %u %s samples %u",
+ this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format),
+ this->spec.channels, (this->spec.format & 0x1000) ? "BE" : "LE", this->spec.samples);
+
+ /* configure audio source */
+ SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
+ SLDataSource audioSrc = {&loc_dev, NULL};
+
+ /* configure audio sink */
+ SLDataLocator_AndroidSimpleBufferQueue loc_bufq = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, NUM_BUFFERS };
+
+ format_pcm.formatType = SL_DATAFORMAT_PCM;
+ format_pcm.numChannels = this->spec.channels;
+ format_pcm.samplesPerSec = this->spec.freq * 1000; /* / kilo Hz to milli Hz */
+ format_pcm.bitsPerSample = SDL_AUDIO_BITSIZE(this->spec.format);
+ format_pcm.containerSize = SDL_AUDIO_BITSIZE(this->spec.format);
+ format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;
+ format_pcm.channelMask = SL_SPEAKER_FRONT_CENTER;
+
+ SLDataSink audioSnk = { &loc_bufq, &format_pcm };
+
+ /* create audio recorder */
+ /* (requires the RECORD_AUDIO permission) */
+ const SLInterfaceID ids[1] = {
+ SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
+ };
+ const SLboolean req[1] = {
+ SL_BOOLEAN_TRUE,
+ };
+
+ result = (*engineEngine)->CreateAudioRecorder(engineEngine, &recorderObject, &audioSrc, &audioSnk, 1, ids, req);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("CreateAudioRecorder failed: %d", result);
+ goto failed;
+ }
+
+ /* realize the recorder */
+ result = (*recorderObject)->Realize(recorderObject, SL_BOOLEAN_FALSE);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("RealizeAudioPlayer failed: %d", result);
+ goto failed;
+ }
+
+ /* get the record interface */
+ result = (*recorderObject)->GetInterface(recorderObject, SL_IID_RECORD, &recorderRecord);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("SL_IID_RECORD interface get failed: %d", result);
+ goto failed;
+ }
+
+ /* get the buffer queue interface */
+ result = (*recorderObject)->GetInterface(recorderObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &recorderBufferQueue);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("SL_IID_BUFFERQUEUE interface get failed: %d", result);
+ goto failed;
+ }
+
+ /* register callback on the buffer queue */
+ /* context is '(SDL_PrivateAudioData *)this->hidden' */
+ result = (*recorderBufferQueue)->RegisterCallback(recorderBufferQueue, bqRecorderCallback, this->hidden);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("RegisterCallback failed: %d", result);
+ goto failed;
+ }
+
+ /* Create the audio buffer semaphore */
+ audiodata->playsem = SDL_CreateSemaphore(0);
+ if (!audiodata->playsem) {
+ LOGE("cannot create Semaphore!");
+ goto failed;
+ }
+
+ /* Create the sound buffers */
+ audiodata->mixbuff = (Uint8 *) SDL_malloc(NUM_BUFFERS * this->spec.size);
+ if (audiodata->mixbuff == NULL) {
+ LOGE("mixbuffer allocate - out of memory");
+ goto failed;
+ }
+
+ for (i = 0; i < NUM_BUFFERS; i++) {
+ audiodata->pmixbuff[i] = audiodata->mixbuff + i * this->spec.size;
+ }
+
+ /* in case already recording, stop recording and clear buffer queue */
+ result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_STOPPED);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("Record set state failed: %d", result);
+ goto failed;
+ }
+
+ /* enqueue empty buffers to be filled by the recorder */
+ for (i = 0; i < NUM_BUFFERS; i++) {
+ result = (*recorderBufferQueue)->Enqueue(recorderBufferQueue, audiodata->pmixbuff[i], this->spec.size);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("Record enqueue buffers failed: %d", result);
+ goto failed;
+ }
+ }
+
+ /* start recording */
+ result = (*recorderRecord)->SetRecordState(recorderRecord, SL_RECORDSTATE_RECORDING);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("Record set state failed: %d", result);
+ goto failed;
+ }
+
+ return 0;
+
+failed:
+
+ openslES_DestroyPCMRecorder(this);
+
+ return SDL_SetError("Open device failed!");
+}
+
/* this callback handler is called every time a buffer finishes playing */
static void
bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
{
struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) context;
- LOGV("SLES: Playback Callmeback");
+
+ LOGV("SLES: Playback Callback");
SDL_SemPost(audiodata->playsem);
- return;
}
-static int
-openslES_CreatePCMRecorder(_THIS)
+static void
+openslES_DestroyPCMPlayer(_THIS)
{
-/* struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden; */
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
+ SLresult result;
- LOGE("openslES_CreatePCMRecorder not implimented yet!");
- return SDL_SetError("openslES_CreatePCMRecorder not implimented yet!");
-}
+ /* set the player's state to 'stopped' */
+ if (bqPlayerPlay != NULL) {
+ result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_STOPPED);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("SetPlayState stopped failed: %d", result);
+ }
+ }
-static void
-openslES_DestroyPCMRecorder(_THIS)
-{
-/* struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden; */
+ /* destroy buffer queue audio player object, and invalidate all associated interfaces */
+ if (bqPlayerObject != NULL) {
- return;
+ (*bqPlayerObject)->Destroy(bqPlayerObject);
+
+ bqPlayerObject = NULL;
+ bqPlayerPlay = NULL;
+ bqPlayerBufferQueue = NULL;
+ }
+
+ if (audiodata->playsem) {
+ SDL_DestroySemaphore(audiodata->playsem);
+ audiodata->playsem = NULL;
+ }
+
+ if (audiodata->mixbuff) {
+ SDL_free(audiodata->mixbuff);
+ }
}
static int
openslES_CreatePCMPlayer(_THIS)
{
- struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden;
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
SLDataFormat_PCM format_pcm;
SLresult result;
int i;
@@ -274,31 +459,6 @@
format_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;
}
-/*
-#define SL_SPEAKER_FRONT_LEFT ((SLuint32) 0x00000001)
-#define SL_SPEAKER_FRONT_RIGHT ((SLuint32) 0x00000002)
-#define SL_SPEAKER_FRONT_CENTER ((SLuint32) 0x00000004)
-#define SL_SPEAKER_LOW_FREQUENCY ((SLuint32) 0x00000008)
-#define SL_SPEAKER_BACK_LEFT ((SLuint32) 0x00000010)
-#define SL_SPEAKER_BACK_RIGHT ((SLuint32) 0x00000020)
-#define SL_SPEAKER_FRONT_LEFT_OF_CENTER ((SLuint32) 0x00000040)
-#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER ((SLuint32) 0x00000080)
-#define SL_SPEAKER_BACK_CENTER ((SLuint32) 0x00000100)
-#define SL_SPEAKER_SIDE_LEFT ((SLuint32) 0x00000200)
-#define SL_SPEAKER_SIDE_RIGHT ((SLuint32) 0x00000400)
-#define SL_SPEAKER_TOP_CENTER ((SLuint32) 0x00000800)
-#define SL_SPEAKER_TOP_FRONT_LEFT ((SLuint32) 0x00001000)
-#define SL_SPEAKER_TOP_FRONT_CENTER ((SLuint32) 0x00002000)
-#define SL_SPEAKER_TOP_FRONT_RIGHT ((SLuint32) 0x00004000)
-#define SL_SPEAKER_TOP_BACK_LEFT ((SLuint32) 0x00008000)
-#define SL_SPEAKER_TOP_BACK_CENTER ((SLuint32) 0x00010000)
-#define SL_SPEAKER_TOP_BACK_RIGHT ((SLuint32) 0x00020000)
-*/
-#define SL_ANDROID_SPEAKER_STEREO (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT)
-#define SL_ANDROID_SPEAKER_QUAD (SL_ANDROID_SPEAKER_STEREO | SL_SPEAKER_BACK_LEFT | SL_SPEAKER_BACK_RIGHT)
-#define SL_ANDROID_SPEAKER_5DOT1 (SL_ANDROID_SPEAKER_QUAD | SL_SPEAKER_FRONT_CENTER | SL_SPEAKER_LOW_FREQUENCY)
-#define SL_ANDROID_SPEAKER_7DOT1 (SL_ANDROID_SPEAKER_5DOT1 | SL_SPEAKER_SIDE_LEFT | SL_SPEAKER_SIDE_RIGHT)
-
switch (this->spec.channels)
{
case 1:
@@ -351,7 +511,7 @@
result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk, 2, ids, req);
if (SL_RESULT_SUCCESS != result) {
- LOGE("CreateAudioPlayer failed");
+ LOGE("CreateAudioPlayer failed: %d", result);
goto failed;
}
@@ -358,7 +518,7 @@
/* realize the player */
result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE);
if (SL_RESULT_SUCCESS != result) {
- LOGE("RealizeAudioPlayer failed");
+ LOGE("RealizeAudioPlayer failed: %d", result);
goto failed;
}
@@ -365,7 +525,7 @@
/* get the play interface */
result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_PLAY, &bqPlayerPlay);
if (SL_RESULT_SUCCESS != result) {
- LOGE("SL_IID_PLAY interface get failed");
+ LOGE("SL_IID_PLAY interface get failed: %d", result);
goto failed;
}
@@ -372,7 +532,7 @@
/* get the buffer queue interface */
result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &bqPlayerBufferQueue);
if (SL_RESULT_SUCCESS != result) {
- LOGE("SL_IID_BUFFERQUEUE interface get failed");
+ LOGE("SL_IID_BUFFERQUEUE interface get failed: %d", result);
goto failed;
}
@@ -380,33 +540,15 @@
/* context is '(SDL_PrivateAudioData *)this->hidden' */
result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback, this->hidden);
if (SL_RESULT_SUCCESS != result) {
- LOGE("RegisterCallback failed");
+ LOGE("RegisterCallback failed: %d", result);
goto failed;
}
#if 0
- /* get the effect send interface */
- result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_EFFECTSEND, &bqPlayerEffectSend);
- if (SL_RESULT_SUCCESS != result)
- {
-
- LOGE("SL_IID_EFFECTSEND interface get failed");
- goto failed;
- }
-#endif
-
-#if 0 /* mute/solo is not supported for sources that are known to be mono, as this is */
- /* get the mute/solo interface */
- result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_MUTESOLO, &bqPlayerMuteSolo);
- assert(SL_RESULT_SUCCESS == result);
- (void) result;
-#endif
-
-#if 0
/* get the volume interface */
result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_VOLUME, &bqPlayerVolume);
if (SL_RESULT_SUCCESS != result) {
- LOGE("SL_IID_VOLUME interface get failed");
+ LOGE("SL_IID_VOLUME interface get failed: %d", result);
/* goto failed; */
}
#endif
@@ -432,7 +574,7 @@
/* set the player's state to playing */
result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PLAYING);
if (SL_RESULT_SUCCESS != result) {
- LOGE("Play set state failed");
+ LOGE("Play set state failed: %d", result);
goto failed;
}
@@ -445,47 +587,6 @@
return SDL_SetError("Open device failed!");
}
-static void
-openslES_DestroyPCMPlayer(_THIS)
-{
- struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden;
- SLresult result;
-
- /* set the player's state to 'stopped' */
- if (bqPlayerPlay != NULL) {
- result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_STOPPED);
- if (SL_RESULT_SUCCESS != result) {
- SDL_SetError("Stopped set state failed");
- }
- }
-
- /* destroy buffer queue audio player object, and invalidate all associated interfaces */
- if (bqPlayerObject != NULL) {
-
- (*bqPlayerObject)->Destroy(bqPlayerObject);
-
- bqPlayerObject = NULL;
- bqPlayerPlay = NULL;
- bqPlayerBufferQueue = NULL;
-#if 0
- bqPlayerEffectSend = NULL;
- bqPlayerMuteSolo = NULL;
- bqPlayerVolume = NULL;
-#endif
- }
-
- if (audiodata->playsem) {
- SDL_DestroySemaphore(audiodata->playsem);
- audiodata->playsem = NULL;
- }
-
- if (audiodata->mixbuff) {
- SDL_free(audiodata->mixbuff);
- }
-
- return;
-}
-
static int
openslES_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
{
@@ -495,44 +596,46 @@
}
if (iscapture) {
- LOGI("openslES_OpenDevice( ) %s for capture", devname);
+ LOGI("openslES_OpenDevice() %s for capture", devname);
return openslES_CreatePCMRecorder(this);
} else {
- LOGI("openslES_OpenDevice( ) %s for playing", devname);
+ LOGI("openslES_OpenDevice() %s for playing", devname);
return openslES_CreatePCMPlayer(this);
}
}
static void
-openslES_CloseDevice(_THIS)
+openslES_WaitDevice(_THIS)
{
- /* struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden; */
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
- if (this->iscapture) {
- LOGI("openslES_CloseDevice( ) for capture");
- openslES_DestroyPCMRecorder(this);
- } else {
- LOGI("openslES_CloseDevice( ) for playing");
- openslES_DestroyPCMPlayer(this);
- }
+ LOGV("openslES_WaitDevice()");
- SDL_free(this->hidden);
-
- return;
+ /* Wait for an audio chunk to finish */
+ SDL_SemWait(audiodata->playsem);
}
static void
-openslES_WaitDevice(_THIS)
+openslES_PlayDevice(_THIS)
{
- struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden;
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
+ SLresult result;
- LOGV("openslES_WaitDevice( )");
+ LOGV("======openslES_PlayDevice()======");
- /* Wait for an audio chunk to finish */
- /* WaitForSingleObject(this->hidden->audio_sem, INFINITE); */
- SDL_SemWait(audiodata->playsem);
+ /* Queue it up */
+ result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, audiodata->pmixbuff[audiodata->next_buffer], this->spec.size);
- return;
+ audiodata->next_buffer++;
+ if (audiodata->next_buffer >= NUM_BUFFERS) {
+ audiodata->next_buffer = 0;
+ }
+
+ /* If Enqueue fails, callback won't be called.
+ * Post the semphore, not to run out of buffer */
+ if (SL_RESULT_SUCCESS != result) {
+ SDL_SemPost(audiodata->playsem);
+ }
}
/*/ n playn sem */
@@ -550,35 +653,54 @@
static Uint8 *
openslES_GetDeviceBuf(_THIS)
{
- struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden;
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
- LOGV("openslES_GetDeviceBuf( )");
+ LOGV("openslES_GetDeviceBuf()");
return audiodata->pmixbuff[audiodata->next_buffer];
}
-static void
-openslES_PlayDevice(_THIS)
+static int
+openslES_CaptureFromDevice(_THIS, void *buffer, int buflen)
{
- struct SDL_PrivateAudioData *audiodata = (struct SDL_PrivateAudioData *) this->hidden;
+ struct SDL_PrivateAudioData *audiodata = this->hidden;
SLresult result;
- LOGV("======openslES_PlayDevice( )======");
+ /* Wait for new recorded data */
+ SDL_SemWait(audiodata->playsem);
- /* Queue it up */
- result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, audiodata->pmixbuff[audiodata->next_buffer], this->spec.size);
+ /* Copy it to the output buffer */
+ SDL_assert(buflen == this->spec.size);
+ SDL_memcpy(buffer, audiodata->pmixbuff[audiodata->next_buffer], this->spec.size);
+ /* Re-enqueue the buffer */
+ result = (*recorderBufferQueue)->Enqueue(recorderBufferQueue, audiodata->pmixbuff[audiodata->next_buffer], this->spec.size);
+ if (SL_RESULT_SUCCESS != result) {
+ LOGE("Record enqueue buffers failed: %d", result);
+ return -1;
+ }
+
audiodata->next_buffer++;
if (audiodata->next_buffer >= NUM_BUFFERS) {
audiodata->next_buffer = 0;
}
- /* If Enqueue fails, callback won't be called.
- * Post the semphore, not to run out of buffer */
- if (SL_RESULT_SUCCESS != result) {
- SDL_SemPost(audiodata->playsem);
+ return this->spec.size;
+}
+
+static void
+openslES_CloseDevice(_THIS)
+{
+ /* struct SDL_PrivateAudioData *audiodata = this->hidden; */
+
+ if (this->iscapture) {
+ LOGI("openslES_CloseDevice() for capture");
+ openslES_DestroyPCMRecorder(this);
+ } else {
+ LOGI("openslES_CloseDevice() for playing");
+ openslES_DestroyPCMPlayer(this);
}
- return;
+ SDL_free(this->hidden);
}
static int
@@ -595,18 +717,19 @@
/* Set the function pointers */
/* impl->DetectDevices = openslES_DetectDevices; */
impl->OpenDevice = openslES_OpenDevice;
- impl->CloseDevice = openslES_CloseDevice;
+ impl->WaitDevice = openslES_WaitDevice;
impl->PlayDevice = openslES_PlayDevice;
impl->GetDeviceBuf = openslES_GetDeviceBuf;
+ impl->CaptureFromDevice = openslES_CaptureFromDevice;
+ impl->CloseDevice = openslES_CloseDevice;
impl->Deinitialize = openslES_DestroyEngine;
- impl->WaitDevice = openslES_WaitDevice;
/* and the capabilities */
- impl->HasCaptureSupport = 0; /* TODO */
- impl->OnlyHasDefaultOutputDevice = 1;
- /* impl->OnlyHasDefaultInputDevice = 1; */
+ impl->HasCaptureSupport = 1;
+ impl->OnlyHasDefaultOutputDevice = 1;
+ impl->OnlyHasDefaultCaptureDevice = 1;
- LOGI("openslES_Init() - succes");
+ LOGI("openslES_Init() - success");
/* this audio target is available. */
return 1;
@@ -616,24 +739,24 @@
"openslES", "opensl ES audio driver", openslES_Init, 0
};
-void openslES_ResumeDevices()
+void openslES_ResumeDevices(void)
{
if (bqPlayerPlay != NULL) {
/* set the player's state to 'playing' */
SLresult result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PLAYING);
if (SL_RESULT_SUCCESS != result) {
- SDL_SetError("openslES_ResumeDevices failed");
+ LOGE("openslES_ResumeDevices failed: %d", result);
}
}
}
-void openslES_PauseDevices()
+void openslES_PauseDevices(void)
{
if (bqPlayerPlay != NULL) {
/* set the player's state to 'paused' */
SLresult result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_PAUSED);
if (SL_RESULT_SUCCESS != result) {
- SDL_SetError("openslES_PauseDevices failed");
+ LOGE("openslES_PauseDevices failed: %d", result);
}
}
}
--- a/external/SDL2/src/audio/openslES/SDL_openslES.h
+++ b/external/SDL2/src/audio/openslES/SDL_openslES.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -32,14 +32,10 @@
struct SDL_PrivateAudioData
{
- /* The file descriptor for the audio device */
Uint8 *mixbuff;
int next_buffer;
Uint8 *pmixbuff[NUM_BUFFERS];
SDL_sem *playsem;
-#if 0
- SDL_sem *recsem;
-#endif
};
void openslES_ResumeDevices(void);
--- a/external/SDL2/src/audio/paudio/SDL_paudio.c
+++ b/external/SDL2/src/audio/paudio/SDL_paudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/paudio/SDL_paudio.h
+++ b/external/SDL2/src/audio/paudio/SDL_paudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/psp/SDL_pspaudio.c
+++ b/external/SDL2/src/audio/psp/SDL_pspaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/psp/SDL_pspaudio.h
+++ b/external/SDL2/src/audio/psp/SDL_pspaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/pulseaudio/SDL_pulseaudio.c
+++ b/external/SDL2/src/audio/pulseaudio/SDL_pulseaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -429,7 +429,7 @@
h->capturelen = 0;
}
- while (SDL_TRUE) {
+ while (SDL_AtomicGet(&this->enabled)) {
if (PULSEAUDIO_pa_context_get_state(h->context) != PA_CONTEXT_READY ||
PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY ||
PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) {
--- a/external/SDL2/src/audio/pulseaudio/SDL_pulseaudio.h
+++ b/external/SDL2/src/audio/pulseaudio/SDL_pulseaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/qsa/SDL_qsa_audio.c
+++ b/external/SDL2/src/audio/qsa/SDL_qsa_audio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -619,8 +619,8 @@
{
/* Clear devices array on shutdown */
/* !!! FIXME: we zero these on init...any reason to do it here? */
- SDL_zero(qsa_playback_device);
- SDL_zero(qsa_capture_device);
+ SDL_zeroa(qsa_playback_device);
+ SDL_zeroa(qsa_capture_device);
qsa_playback_devices = 0;
qsa_capture_devices = 0;
}
@@ -629,8 +629,8 @@
QSA_Init(SDL_AudioDriverImpl * impl)
{
/* Clear devices array */
- SDL_zero(qsa_playback_device);
- SDL_zero(qsa_capture_device);
+ SDL_zeroa(qsa_playback_device);
+ SDL_zeroa(qsa_capture_device);
qsa_playback_devices = 0;
qsa_capture_devices = 0;
--- a/external/SDL2/src/audio/qsa/SDL_qsa_audio.h
+++ b/external/SDL2/src/audio/qsa/SDL_qsa_audio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/sndio/SDL_sndioaudio.c
+++ b/external/SDL2/src/audio/sndio/SDL_sndioaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/sndio/SDL_sndioaudio.h
+++ b/external/SDL2/src/audio/sndio/SDL_sndioaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/sun/SDL_sunaudio.c
+++ b/external/SDL2/src/audio/sun/SDL_sunaudio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/sun/SDL_sunaudio.h
+++ b/external/SDL2/src/audio/sun/SDL_sunaudio.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/wasapi/SDL_wasapi.c
+++ b/external/SDL2/src/audio/wasapi/SDL_wasapi.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/wasapi/SDL_wasapi.h
+++ b/external/SDL2/src/audio/wasapi/SDL_wasapi.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/wasapi/SDL_wasapi_win32.c
+++ b/external/SDL2/src/audio/wasapi/SDL_wasapi_win32.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/audio/wasapi/SDL_wasapi_winrt.cpp
+++ b/external/SDL2/src/audio/wasapi/SDL_wasapi_winrt.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -63,8 +63,10 @@
void OnDeviceAdded(DeviceWatcher^ sender, DeviceInformation^ args);
void OnDeviceRemoved(DeviceWatcher^ sender, DeviceInformationUpdate^ args);
void OnDeviceUpdated(DeviceWatcher^ sender, DeviceInformationUpdate^ args);
+ void OnEnumerationCompleted(DeviceWatcher^ sender, Platform::Object^ args);
void OnDefaultRenderDeviceChanged(Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args);
void OnDefaultCaptureDeviceChanged(Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args);
+ SDL_semaphore* completed;
private:
const SDL_bool iscapture;
@@ -72,14 +74,16 @@
Windows::Foundation::EventRegistrationToken added_handler;
Windows::Foundation::EventRegistrationToken removed_handler;
Windows::Foundation::EventRegistrationToken updated_handler;
+ Windows::Foundation::EventRegistrationToken completed_handler;
Windows::Foundation::EventRegistrationToken default_changed_handler;
};
SDL_WasapiDeviceEventHandler::SDL_WasapiDeviceEventHandler(const SDL_bool _iscapture)
: iscapture(_iscapture)
+ , completed(SDL_CreateSemaphore(0))
, watcher(DeviceInformation::CreateWatcher(_iscapture ? DeviceClass::AudioCapture : DeviceClass::AudioRender))
{
- if (!watcher)
+ if (!watcher || !completed)
return; // uhoh.
// !!! FIXME: this doesn't need a lambda here, I think, if I make SDL_WasapiDeviceEventHandler a proper C++/CX class. --ryan.
@@ -86,6 +90,7 @@
added_handler = watcher->Added += ref new TypedEventHandler<DeviceWatcher^, DeviceInformation^>([this](DeviceWatcher^ sender, DeviceInformation^ args) { OnDeviceAdded(sender, args); } );
removed_handler = watcher->Removed += ref new TypedEventHandler<DeviceWatcher^, DeviceInformationUpdate^>([this](DeviceWatcher^ sender, DeviceInformationUpdate^ args) { OnDeviceRemoved(sender, args); } );
updated_handler = watcher->Updated += ref new TypedEventHandler<DeviceWatcher^, DeviceInformationUpdate^>([this](DeviceWatcher^ sender, DeviceInformationUpdate^ args) { OnDeviceUpdated(sender, args); } );
+ completed_handler = watcher->EnumerationCompleted += ref new TypedEventHandler<DeviceWatcher^, Platform::Object^>([this](DeviceWatcher^ sender, Platform::Object^ args) { OnEnumerationCompleted(sender, args); } );
if (iscapture) {
default_changed_handler = MediaDevice::DefaultAudioCaptureDeviceChanged += ref new TypedEventHandler<Platform::Object^, DefaultAudioCaptureDeviceChangedEventArgs^>([this](Platform::Object^ sender, DefaultAudioCaptureDeviceChangedEventArgs^ args) { OnDefaultCaptureDeviceChanged(sender, args); } );
} else {
@@ -100,9 +105,14 @@
watcher->Added -= added_handler;
watcher->Removed -= removed_handler;
watcher->Updated -= updated_handler;
+ watcher->EnumerationCompleted -= completed_handler;
watcher->Stop();
watcher = nullptr;
}
+ if (completed) {
+ SDL_DestroySemaphore(completed);
+ completed = nullptr;
+ }
if (iscapture) {
MediaDevice::DefaultAudioCaptureDeviceChanged -= default_changed_handler;
@@ -136,6 +146,13 @@
}
void
+SDL_WasapiDeviceEventHandler::OnEnumerationCompleted(DeviceWatcher^ sender, Platform::Object^ args)
+{
+ SDL_assert(sender == this->watcher);
+ SDL_SemPost(this->completed);
+}
+
+void
SDL_WasapiDeviceEventHandler::OnDefaultRenderDeviceChanged(Platform::Object^ sender, DefaultAudioRenderDeviceChangedEventArgs^ args)
{
SDL_assert(this->iscapture);
@@ -173,6 +190,8 @@
// listening for updates.
playback_device_event_handler = new SDL_WasapiDeviceEventHandler(SDL_FALSE);
capture_device_event_handler = new SDL_WasapiDeviceEventHandler(SDL_TRUE);
+ SDL_SemWait(playback_device_event_handler->completed);
+ SDL_SemWait(capture_device_event_handler->completed);
}
struct SDL_WasapiActivationHandler : public RuntimeClass< RuntimeClassFlags< ClassicCom >, FtmBase, IActivateAudioInterfaceCompletionHandler >
--- a/external/SDL2/src/audio/winmm/SDL_winmm.c
+++ b/external/SDL2/src/audio/winmm/SDL_winmm.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -387,7 +387,7 @@
return SDL_OutOfMemory();
}
- SDL_zero(this->hidden->wavebuf);
+ SDL_zeroa(this->hidden->wavebuf);
for (i = 0; i < NUM_BUFFERS; ++i) {
this->hidden->wavebuf[i].dwBufferLength = this->spec.size;
this->hidden->wavebuf[i].dwFlags = WHDR_DONE;
--- a/external/SDL2/src/audio/winmm/SDL_winmm.h
+++ b/external/SDL2/src/audio/winmm/SDL_winmm.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/android/SDL_android.c
+++ b/external/SDL2/src/core/android/SDL_android.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,6 +21,7 @@
#include "../../SDL_internal.h"
#include "SDL_stdinc.h"
#include "SDL_assert.h"
+#include "SDL_atomic.h"
#include "SDL_hints.h"
#include "SDL_log.h"
#include "SDL_main.h"
@@ -147,9 +148,6 @@
JNIEnv *env, jclass cls,
jstring name, jstring value);
-JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeEnvironmentVariablesSet)(
- JNIEnv *env, jclass cls);
-
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeOrientationChanged)(
JNIEnv *env, jclass cls,
jint orientation);
@@ -158,6 +156,40 @@
JNIEnv* env, jclass cls,
jint touchId, jstring name);
+JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePermissionResult)(
+ JNIEnv* env, jclass cls,
+ jint requestCode, jboolean result);
+
+static JNINativeMethod SDLActivity_tab[] = {
+ { "nativeSetupJNI", "()I", SDL_JAVA_INTERFACE(nativeSetupJNI) },
+ { "nativeRunMain", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)I", SDL_JAVA_INTERFACE(nativeRunMain) },
+ { "onNativeDropFile", "(Ljava/lang/String;)V", SDL_JAVA_INTERFACE(onNativeDropFile) },
+ { "nativeSetScreenResolution", "(IIIIIF)V", SDL_JAVA_INTERFACE(nativeSetScreenResolution) },
+ { "onNativeResize", "()V", SDL_JAVA_INTERFACE(onNativeResize) },
+ { "onNativeSurfaceCreated", "()V", SDL_JAVA_INTERFACE(onNativeSurfaceCreated) },
+ { "onNativeSurfaceChanged", "()V", SDL_JAVA_INTERFACE(onNativeSurfaceChanged) },
+ { "onNativeSurfaceDestroyed", "()V", SDL_JAVA_INTERFACE(onNativeSurfaceDestroyed) },
+ { "onNativeKeyDown", "(I)V", SDL_JAVA_INTERFACE(onNativeKeyDown) },
+ { "onNativeKeyUp", "(I)V", SDL_JAVA_INTERFACE(onNativeKeyUp) },
+ { "onNativeSoftReturnKey", "()Z", SDL_JAVA_INTERFACE(onNativeSoftReturnKey) },
+ { "onNativeKeyboardFocusLost", "()V", SDL_JAVA_INTERFACE(onNativeKeyboardFocusLost) },
+ { "onNativeTouch", "(IIIFFF)V", SDL_JAVA_INTERFACE(onNativeTouch) },
+ { "onNativeMouse", "(IIFFZ)V", SDL_JAVA_INTERFACE(onNativeMouse) },
+ { "onNativeAccel", "(FFF)V", SDL_JAVA_INTERFACE(onNativeAccel) },
+ { "onNativeClipboardChanged", "()V", SDL_JAVA_INTERFACE(onNativeClipboardChanged) },
+ { "nativeLowMemory", "()V", SDL_JAVA_INTERFACE(nativeLowMemory) },
+ { "nativeSendQuit", "()V", SDL_JAVA_INTERFACE(nativeSendQuit) },
+ { "nativeQuit", "()V", SDL_JAVA_INTERFACE(nativeQuit) },
+ { "nativePause", "()V", SDL_JAVA_INTERFACE(nativePause) },
+ { "nativeResume", "()V", SDL_JAVA_INTERFACE(nativeResume) },
+ { "nativeFocusChanged", "(Z)V", SDL_JAVA_INTERFACE(nativeFocusChanged) },
+ { "nativeGetHint", "(Ljava/lang/String;)Ljava/lang/String;", SDL_JAVA_INTERFACE(nativeGetHint) },
+ { "nativeSetenv", "(Ljava/lang/String;Ljava/lang/String;)V", SDL_JAVA_INTERFACE(nativeSetenv) },
+ { "onNativeOrientationChanged", "(I)V", SDL_JAVA_INTERFACE(onNativeOrientationChanged) },
+ { "nativeAddTouch", "(ILjava/lang/String;)V", SDL_JAVA_INTERFACE(nativeAddTouch) },
+ { "nativePermissionResult", "(IZ)V", SDL_JAVA_INTERFACE(nativePermissionResult) }
+};
+
/* Java class SDLInputConnection */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeCommitText)(
JNIEnv *env, jclass cls,
@@ -171,10 +203,20 @@
JNIEnv *env, jclass cls,
jstring text, jint newCursorPosition);
+static JNINativeMethod SDLInputConnection_tab[] = {
+ { "nativeCommitText", "(Ljava/lang/String;I)V", SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeCommitText) },
+ { "nativeGenerateScancodeForUnichar", "(C)V", SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeGenerateScancodeForUnichar) },
+ { "nativeSetComposingText", "(Ljava/lang/String;I)V", SDL_JAVA_INTERFACE_INPUT_CONNECTION(nativeSetComposingText) }
+};
+
/* Java class SDLAudioManager */
JNIEXPORT void JNICALL SDL_JAVA_AUDIO_INTERFACE(nativeSetupJNI)(
JNIEnv *env, jclass jcls);
+static JNINativeMethod SDLAudioManager_tab[] = {
+ { "nativeSetupJNI", "()I", SDL_JAVA_AUDIO_INTERFACE(nativeSetupJNI) }
+};
+
/* Java class SDLControllerManager */
JNIEXPORT void JNICALL SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI)(
JNIEnv *env, jclass jcls);
@@ -212,6 +254,17 @@
JNIEnv *env, jclass jcls,
jint device_id);
+static JNINativeMethod SDLControllerManager_tab[] = {
+ { "nativeSetupJNI", "()I", SDL_JAVA_CONTROLLER_INTERFACE(nativeSetupJNI) },
+ { "onNativePadDown", "(II)I", SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown) },
+ { "onNativePadUp", "(II)I", SDL_JAVA_CONTROLLER_INTERFACE(onNativePadUp) },
+ { "onNativeJoy", "(IIF)V", SDL_JAVA_CONTROLLER_INTERFACE(onNativeJoy) },
+ { "onNativeHat", "(IIII)V", SDL_JAVA_CONTROLLER_INTERFACE(onNativeHat) },
+ { "nativeAddJoystick", "(ILjava/lang/String;Ljava/lang/String;IIZIIII)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeAddJoystick) },
+ { "nativeRemoveJoystick", "(I)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveJoystick) },
+ { "nativeAddHaptic", "(ILjava/lang/String;)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeAddHaptic) },
+ { "nativeRemoveHaptic", "(I)I", SDL_JAVA_CONTROLLER_INTERFACE(nativeRemoveHaptic) }
+};
/* Uncomment this to log messages entering and exiting methods in this file */
@@ -236,34 +289,35 @@
static jclass mActivityClass;
/* method signatures */
-static jmethodID midGetNativeSurface;
-static jmethodID midSetSurfaceViewFormat;
-static jmethodID midSetActivityTitle;
-static jmethodID midSetWindowStyle;
-static jmethodID midSetOrientation;
-static jmethodID midMinimizeWindow;
-static jmethodID midShouldMinimizeOnFocusLoss;
+static jmethodID midClipboardGetText;
+static jmethodID midClipboardHasText;
+static jmethodID midClipboardSetText;
+static jmethodID midCreateCustomCursor;
static jmethodID midGetContext;
-static jmethodID midIsTablet;
+static jmethodID midGetDisplayDPI;
+static jmethodID midGetManifestEnvironmentVariables;
+static jmethodID midGetNativeSurface;
+static jmethodID midInitTouch;
static jmethodID midIsAndroidTV;
static jmethodID midIsChromebook;
static jmethodID midIsDeXMode;
-static jmethodID midManualBackButton;
-static jmethodID midInitTouch;
-static jmethodID midSendMessage;
-static jmethodID midShowTextInput;
static jmethodID midIsScreenKeyboardShown;
-static jmethodID midClipboardSetText;
-static jmethodID midClipboardGetText;
-static jmethodID midClipboardHasText;
+static jmethodID midIsTablet;
+static jmethodID midManualBackButton;
+static jmethodID midMinimizeWindow;
static jmethodID midOpenAPKExpansionInputStream;
-static jmethodID midGetManifestEnvironmentVariables;
-static jmethodID midGetDisplayDPI;
-static jmethodID midCreateCustomCursor;
+static jmethodID midRequestPermission;
+static jmethodID midSendMessage;
+static jmethodID midSetActivityTitle;
static jmethodID midSetCustomCursor;
+static jmethodID midSetOrientation;
+static jmethodID midSetRelativeMouseEnabled;
+static jmethodID midSetSurfaceViewFormat;
static jmethodID midSetSystemCursor;
+static jmethodID midSetWindowStyle;
+static jmethodID midShouldMinimizeOnFocusLoss;
+static jmethodID midShowTextInput;
static jmethodID midSupportsRelativeMouse;
-static jmethodID midSetRelativeMouseEnabled;
/* audio manager */
static jclass mAudioManagerClass;
@@ -295,8 +349,11 @@
static float fLastAccelerometer[3];
static SDL_bool bHasNewData;
-static SDL_bool bHasEnvironmentVariables = SDL_FALSE;
+static SDL_bool bHasEnvironmentVariables;
+static SDL_atomic_t bPermissionRequestPending;
+static SDL_bool bPermissionRequestResult;
+
/*******************************************************************************
Functions called by JNI
*******************************************************************************/
@@ -424,10 +481,32 @@
}
}
+static void
+register_methods(JNIEnv *env, const char *classname, JNINativeMethod *methods, int nb)
+{
+ jclass clazz = (*env)->FindClass(env, classname);
+ if (clazz == NULL || (*env)->RegisterNatives(env, clazz, methods, nb) < 0) {
+ __android_log_print(ANDROID_LOG_ERROR, "SDL", "Failed to register methods of %s", classname);
+ return;
+ }
+}
+
/* Library init */
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
{
mJavaVM = vm;
+ JNIEnv *env = NULL;
+
+ if ((*mJavaVM)->GetEnv(mJavaVM, (void **)&env, JNI_VERSION_1_4) != JNI_OK) {
+ __android_log_print(ANDROID_LOG_ERROR, "SDL", "Failed to get JNI Env");
+ return JNI_VERSION_1_4;
+ }
+
+ register_methods(env, "org/libsdl/app/SDLActivity", SDLActivity_tab, SDL_arraysize(SDLActivity_tab));
+ register_methods(env, "org/libsdl/app/SDLInputConnection", SDLInputConnection_tab, SDL_arraysize(SDLInputConnection_tab));
+ register_methods(env, "org/libsdl/app/SDLAudioManager", SDLAudioManager_tab, SDL_arraysize(SDLAudioManager_tab));
+ register_methods(env, "org/libsdl/app/SDLControllerManager", SDLControllerManager_tab, SDL_arraysize(SDLControllerManager_tab));
+
return JNI_VERSION_1_4;
}
@@ -483,68 +562,65 @@
mActivityClass = (jclass)((*env)->NewGlobalRef(env, cls));
- midGetNativeSurface = (*env)->GetStaticMethodID(env, mActivityClass,
- "getNativeSurface","()Landroid/view/Surface;");
- midSetSurfaceViewFormat = (*env)->GetStaticMethodID(env, mActivityClass,
- "setSurfaceViewFormat","(I)V");
- midSetActivityTitle = (*env)->GetStaticMethodID(env, mActivityClass,
- "setActivityTitle","(Ljava/lang/String;)Z");
- midSetWindowStyle = (*env)->GetStaticMethodID(env, mActivityClass,
- "setWindowStyle","(Z)V");
- midSetOrientation = (*env)->GetStaticMethodID(env, mActivityClass,
- "setOrientation","(IIZLjava/lang/String;)V");
- midMinimizeWindow = (*env)->GetStaticMethodID(env, mActivityClass,
- "minimizeWindow","()V");
- midShouldMinimizeOnFocusLoss = (*env)->GetStaticMethodID(env, mActivityClass,
- "shouldMinimizeOnFocusLoss","()Z");
- midGetContext = (*env)->GetStaticMethodID(env, mActivityClass,
- "getContext","()Landroid/content/Context;");
- midIsTablet = (*env)->GetStaticMethodID(env, mActivityClass,
- "isTablet", "()Z");
- midIsAndroidTV = (*env)->GetStaticMethodID(env, mActivityClass,
- "isAndroidTV","()Z");
- midIsChromebook = (*env)->GetStaticMethodID(env, mActivityClass,
- "isChromebook", "()Z");
- midIsDeXMode = (*env)->GetStaticMethodID(env, mActivityClass,
- "isDeXMode", "()Z");
- midManualBackButton = (*env)->GetStaticMethodID(env, mActivityClass,
- "manualBackButton", "()V");
- midInitTouch = (*env)->GetStaticMethodID(env, mActivityClass,
- "initTouch", "()V");
- midSendMessage = (*env)->GetStaticMethodID(env, mActivityClass,
- "sendMessage", "(II)Z");
- midShowTextInput = (*env)->GetStaticMethodID(env, mActivityClass,
- "showTextInput", "(IIII)Z");
- midIsScreenKeyboardShown = (*env)->GetStaticMethodID(env, mActivityClass,
- "isScreenKeyboardShown","()Z");
- midClipboardSetText = (*env)->GetStaticMethodID(env, mActivityClass,
- "clipboardSetText", "(Ljava/lang/String;)V");
- midClipboardGetText = (*env)->GetStaticMethodID(env, mActivityClass,
- "clipboardGetText", "()Ljava/lang/String;");
- midClipboardHasText = (*env)->GetStaticMethodID(env, mActivityClass,
- "clipboardHasText", "()Z");
- midOpenAPKExpansionInputStream = (*env)->GetStaticMethodID(env, mActivityClass,
- "openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;");
-
- midGetManifestEnvironmentVariables = (*env)->GetStaticMethodID(env, mActivityClass,
- "getManifestEnvironmentVariables", "()Z");
-
- midGetDisplayDPI = (*env)->GetStaticMethodID(env, mActivityClass, "getDisplayDPI", "()Landroid/util/DisplayMetrics;");
+ midClipboardGetText = (*env)->GetStaticMethodID(env, mActivityClass, "clipboardGetText", "()Ljava/lang/String;");
+ midClipboardHasText = (*env)->GetStaticMethodID(env, mActivityClass, "clipboardHasText", "()Z");
+ midClipboardSetText = (*env)->GetStaticMethodID(env, mActivityClass, "clipboardSetText", "(Ljava/lang/String;)V");
midCreateCustomCursor = (*env)->GetStaticMethodID(env, mActivityClass, "createCustomCursor", "([IIIII)I");
+ midGetContext = (*env)->GetStaticMethodID(env, mActivityClass, "getContext","()Landroid/content/Context;");
+ midGetDisplayDPI = (*env)->GetStaticMethodID(env, mActivityClass, "getDisplayDPI", "()Landroid/util/DisplayMetrics;");
+ midGetManifestEnvironmentVariables = (*env)->GetStaticMethodID(env, mActivityClass, "getManifestEnvironmentVariables", "()Z");
+ midGetNativeSurface = (*env)->GetStaticMethodID(env, mActivityClass, "getNativeSurface","()Landroid/view/Surface;");
+ midInitTouch = (*env)->GetStaticMethodID(env, mActivityClass, "initTouch", "()V");
+ midIsAndroidTV = (*env)->GetStaticMethodID(env, mActivityClass, "isAndroidTV","()Z");
+ midIsChromebook = (*env)->GetStaticMethodID(env, mActivityClass, "isChromebook", "()Z");
+ midIsDeXMode = (*env)->GetStaticMethodID(env, mActivityClass, "isDeXMode", "()Z");
+ midIsScreenKeyboardShown = (*env)->GetStaticMethodID(env, mActivityClass, "isScreenKeyboardShown","()Z");
+ midIsTablet = (*env)->GetStaticMethodID(env, mActivityClass, "isTablet", "()Z");
+ midManualBackButton = (*env)->GetStaticMethodID(env, mActivityClass, "manualBackButton", "()V");
+ midMinimizeWindow = (*env)->GetStaticMethodID(env, mActivityClass, "minimizeWindow","()V");
+ midOpenAPKExpansionInputStream = (*env)->GetStaticMethodID(env, mActivityClass, "openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;");
+ midRequestPermission = (*env)->GetStaticMethodID(env, mActivityClass, "requestPermission", "(Ljava/lang/String;I)V");
+ midSendMessage = (*env)->GetStaticMethodID(env, mActivityClass, "sendMessage", "(II)Z");
+ midSetActivityTitle = (*env)->GetStaticMethodID(env, mActivityClass, "setActivityTitle","(Ljava/lang/String;)Z");
midSetCustomCursor = (*env)->GetStaticMethodID(env, mActivityClass, "setCustomCursor", "(I)Z");
+ midSetOrientation = (*env)->GetStaticMethodID(env, mActivityClass, "setOrientation","(IIZLjava/lang/String;)V");
+ midSetRelativeMouseEnabled = (*env)->GetStaticMethodID(env, mActivityClass, "setRelativeMouseEnabled", "(Z)Z");
+ midSetSurfaceViewFormat = (*env)->GetStaticMethodID(env, mActivityClass, "setSurfaceViewFormat","(I)V");
midSetSystemCursor = (*env)->GetStaticMethodID(env, mActivityClass, "setSystemCursor", "(I)Z");
-
+ midSetWindowStyle = (*env)->GetStaticMethodID(env, mActivityClass, "setWindowStyle","(Z)V");
+ midShouldMinimizeOnFocusLoss = (*env)->GetStaticMethodID(env, mActivityClass, "shouldMinimizeOnFocusLoss","()Z");
+ midShowTextInput = (*env)->GetStaticMethodID(env, mActivityClass, "showTextInput", "(IIII)Z");
midSupportsRelativeMouse = (*env)->GetStaticMethodID(env, mActivityClass, "supportsRelativeMouse", "()Z");
- midSetRelativeMouseEnabled = (*env)->GetStaticMethodID(env, mActivityClass, "setRelativeMouseEnabled", "(Z)Z");
-
- if (!midGetNativeSurface || !midSetSurfaceViewFormat ||
- !midSetActivityTitle || !midSetWindowStyle || !midSetOrientation || !midMinimizeWindow || !midShouldMinimizeOnFocusLoss || !midGetContext || !midIsTablet || !midIsAndroidTV || !midInitTouch ||
- !midSendMessage || !midShowTextInput || !midIsScreenKeyboardShown ||
- !midClipboardSetText || !midClipboardGetText || !midClipboardHasText ||
- !midOpenAPKExpansionInputStream || !midGetManifestEnvironmentVariables || !midGetDisplayDPI ||
- !midCreateCustomCursor || !midSetCustomCursor || !midSetSystemCursor || !midSupportsRelativeMouse || !midSetRelativeMouseEnabled ||
- !midIsChromebook || !midIsDeXMode || !midManualBackButton) {
+ if (!midClipboardGetText ||
+ !midClipboardHasText ||
+ !midClipboardSetText ||
+ !midCreateCustomCursor ||
+ !midGetContext ||
+ !midGetDisplayDPI ||
+ !midGetManifestEnvironmentVariables ||
+ !midGetNativeSurface ||
+ !midInitTouch ||
+ !midIsAndroidTV ||
+ !midIsChromebook ||
+ !midIsDeXMode ||
+ !midIsScreenKeyboardShown ||
+ !midIsTablet ||
+ !midManualBackButton ||
+ !midMinimizeWindow ||
+ !midOpenAPKExpansionInputStream ||
+ !midRequestPermission ||
+ !midSendMessage ||
+ !midSetActivityTitle ||
+ !midSetCustomCursor ||
+ !midSetOrientation ||
+ !midSetRelativeMouseEnabled ||
+ !midSetSurfaceViewFormat ||
+ !midSetSystemCursor ||
+ !midSetWindowStyle ||
+ !midShouldMinimizeOnFocusLoss ||
+ !midShowTextInput ||
+ !midSupportsRelativeMouse) {
__android_log_print(ANDROID_LOG_WARN, "SDL", "Missing some Java callbacks, do you have the latest version of SDLActivity.java?");
}
@@ -629,6 +705,17 @@
library_file = (*env)->GetStringUTFChars(env, library, NULL);
library_handle = dlopen(library_file, RTLD_GLOBAL);
+
+ if (!library_handle) {
+ /* When deploying android app bundle format uncompressed native libs may not extract from apk to filesystem.
+ In this case we should use lib name without path. https://bugzilla.libsdl.org/show_bug.cgi?id=4739 */
+ const char *library_name = SDL_strrchr(library_file, '/');
+ if (library_name && *library_name) {
+ library_name += 1;
+ library_handle = dlopen(library_name, RTLD_GLOBAL);
+ }
+ }
+
if (library_handle) {
const char *function_name;
SDL_main_func SDL_main;
@@ -795,6 +882,14 @@
(*env)->ReleaseStringUTFChars(env, name, utfname);
}
+JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePermissionResult)(
+ JNIEnv* env, jclass cls,
+ jint requestCode, jboolean result)
+{
+ bPermissionRequestResult = result;
+ SDL_AtomicSet(&bPermissionRequestPending, SDL_FALSE);
+}
+
/* Paddown */
JNIEXPORT jint JNICALL SDL_JAVA_CONTROLLER_INTERFACE(onNativePadDown)(
JNIEnv *env, jclass jcls,
@@ -914,6 +1009,10 @@
/* Called from surfaceDestroyed() */
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceDestroyed)(JNIEnv *env, jclass jcls)
{
+ int nb_attempt = 50;
+
+retry:
+
SDL_LockMutex(Android_ActivityMutex);
if (Android_Window)
@@ -921,13 +1020,19 @@
SDL_VideoDevice *_this = SDL_GetVideoDevice();
SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata;
- /* We have to clear the current context and destroy the egl surface here
- * Otherwise there's BAD_NATIVE_WINDOW errors coming from eglCreateWindowSurface on resume
- * Ref: http://stackoverflow.com/questions/8762589/eglcreatewindowsurface-on-ics-and-switching-from-2d-to-3d
- */
+ /* Wait for Main thread being paused and context un-activated to release 'egl_surface' */
+ if (! data->backup_done) {
+ nb_attempt -= 1;
+ if (nb_attempt == 0) {
+ SDL_SetError("Try to release egl_surface with context probably still active");
+ } else {
+ SDL_UnlockMutex(Android_ActivityMutex);
+ SDL_Delay(10);
+ goto retry;
+ }
+ }
if (data->egl_surface != EGL_NO_SURFACE) {
- SDL_EGL_MakeCurrent(_this, NULL, NULL);
SDL_EGL_DestroySurface(_this, data->egl_surface);
data->egl_surface = EGL_NO_SURFACE;
}
@@ -934,8 +1039,8 @@
if (data->native_window) {
ANativeWindow_release(data->native_window);
+ data->native_window = NULL;
}
- data->native_window = NULL;
/* GL Context handling is done in the event loop because this function is run from the Java thread */
}
@@ -1082,23 +1187,11 @@
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePause)(
JNIEnv *env, jclass cls)
{
- SDL_LockMutex(Android_ActivityMutex);
-
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()");
- if (Android_Window) {
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
- SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
- SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
- }
-
- /* *After* sending the relevant events, signal the pause semaphore
- * so the event loop knows to pause and (optionally) block itself.
- * Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's
- * always increased. */
+ /* Signal the pause semaphore so the event loop knows to pause and (optionally) block itself.
+ * Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's always increased. */
SDL_SemPost(Android_PauseSem);
-
- SDL_UnlockMutex(Android_ActivityMutex);
}
/* Resume */
@@ -1105,23 +1198,13 @@
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeResume)(
JNIEnv *env, jclass cls)
{
- SDL_LockMutex(Android_ActivityMutex);
-
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeResume()");
- if (Android_Window) {
- SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND);
- SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
- SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0);
- }
-
/* Signal the resume semaphore so the event loop knows to resume and restore the GL Context
* We can't restore the GL Context here because it needs to be done on the SDL main thread
* and this function will be called from the Java thread instead.
*/
SDL_SemPost(Android_ResumeSem);
-
- SDL_UnlockMutex(Android_ActivityMutex);
}
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeFocusChanged)(
@@ -1132,7 +1215,7 @@
if (Android_Window) {
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeFocusChanged()");
SDL_SendWindowEvent(Android_Window, (hasFocus ? SDL_WINDOWEVENT_FOCUS_GAINED : SDL_WINDOWEVENT_FOCUS_LOST), 0, 0);
- }
+ }
SDL_UnlockMutex(Android_ActivityMutex);
}
@@ -1300,7 +1383,7 @@
{
JNIEnv *env = Android_JNI_GetEnv();
- jstring jtitle = (jstring)((*env)->NewStringUTF(env, title));
+ jstring jtitle = (*env)->NewStringUTF(env, title);
(*env)->CallStaticBooleanMethod(env, mActivityClass, midSetActivityTitle, jtitle);
(*env)->DeleteLocalRef(env, jtitle);
}
@@ -1315,7 +1398,7 @@
{
JNIEnv *env = Android_JNI_GetEnv();
- jstring jhint = (jstring)((*env)->NewStringUTF(env, (hint ? hint : "")));
+ jstring jhint = (*env)->NewStringUTF(env, (hint ? hint : ""));
(*env)->CallStaticVoidMethod(env, mActivityClass, midSetOrientation, w, h, (resizable? 1 : 0), jhint);
(*env)->DeleteLocalRef(env, jhint);
}
@@ -1360,7 +1443,6 @@
int Android_JNI_OpenAudioDevice(int iscapture, SDL_AudioSpec *spec)
{
int audioformat;
- int numBufferFrames;
jobject jbufobj = NULL;
jobject result;
int *resultElements;
@@ -1465,7 +1547,6 @@
audioBufferFormat = audioformat;
audioBuffer = jbufobj;
}
- numBufferFrames = (*env)->GetArrayLength(env, (jarray)jbufobj);
if (!iscapture) {
isCopy = JNI_FALSE;
@@ -1567,7 +1648,7 @@
if (br > 0) {
jbyte *ptr = (*env)->GetByteArrayElements(env, (jbyteArray)captureBuffer, &isCopy);
SDL_memcpy(buffer, ptr, br);
- (*env)->ReleaseByteArrayElements(env, (jbyteArray)captureBuffer, (jbyte *)ptr, JNI_ABORT);
+ (*env)->ReleaseByteArrayElements(env, (jbyteArray)captureBuffer, ptr, JNI_ABORT);
}
break;
case ENCODING_PCM_16BIT:
@@ -1577,7 +1658,7 @@
jshort *ptr = (*env)->GetShortArrayElements(env, (jshortArray)captureBuffer, &isCopy);
br *= sizeof(Sint16);
SDL_memcpy(buffer, ptr, br);
- (*env)->ReleaseShortArrayElements(env, (jshortArray)captureBuffer, (jshort *)ptr, JNI_ABORT);
+ (*env)->ReleaseShortArrayElements(env, (jshortArray)captureBuffer, ptr, JNI_ABORT);
}
break;
case ENCODING_PCM_FLOAT:
@@ -1587,7 +1668,7 @@
jfloat *ptr = (*env)->GetFloatArrayElements(env, (jfloatArray)captureBuffer, &isCopy);
br *= sizeof(float);
SDL_memcpy(buffer, ptr, br);
- (*env)->ReleaseFloatArrayElements(env, (jfloatArray)captureBuffer, (jfloat *)ptr, JNI_ABORT);
+ (*env)->ReleaseFloatArrayElements(env, (jfloatArray)captureBuffer, ptr, JNI_ABORT);
}
break;
default:
@@ -2041,7 +2122,6 @@
default:
return SDL_SetError("Unknown value for 'whence'");
}
- whence = SEEK_SET;
ret = lseek(ctx->hidden.androidio.fd, (off_t)offset, SEEK_SET);
if (ret == -1) return -1;
@@ -2194,7 +2274,7 @@
#define GET_INT_EXTRA(var, key) \
int var; \
iname = (*env)->NewStringUTF(env, key); \
- var = (*env)->CallIntMethod(env, intent, imid, iname, -1); \
+ (var) = (*env)->CallIntMethod(env, intent, imid, iname, -1); \
(*env)->DeleteLocalRef(env, iname);
bmid = (*env)->GetMethodID(env, cls, "getBooleanExtra", "(Ljava/lang/String;Z)Z");
@@ -2203,7 +2283,7 @@
#define GET_BOOL_EXTRA(var, key) \
int var; \
bname = (*env)->NewStringUTF(env, key); \
- var = (*env)->CallBooleanMethod(env, intent, bmid, bname, JNI_FALSE); \
+ (var) = (*env)->CallBooleanMethod(env, intent, bmid, bname, JNI_FALSE); \
(*env)->DeleteLocalRef(env, bname);
if (plugged) {
@@ -2369,11 +2449,19 @@
button_texts = (*env)->NewObjectArray(env, messageboxdata->numbuttons,
clazz, NULL);
for (i = 0; i < messageboxdata->numbuttons; ++i) {
- temp = messageboxdata->buttons[i].flags;
+ const SDL_MessageBoxButtonData *sdlButton;
+
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ } else {
+ sdlButton = &messageboxdata->buttons[i];
+ }
+
+ temp = sdlButton->flags;
(*env)->SetIntArrayRegion(env, button_flags, i, 1, &temp);
- temp = messageboxdata->buttons[i].buttonid;
+ temp = sdlButton->buttonid;
(*env)->SetIntArrayRegion(env, button_ids, i, 1, &temp);
- text = (*env)->NewStringUTF(env, messageboxdata->buttons[i].text);
+ text = (*env)->NewStringUTF(env, sdlButton->text);
(*env)->SetObjectArrayElement(env, button_texts, i, text);
(*env)->DeleteLocalRef(env, text);
}
@@ -2381,7 +2469,7 @@
if (messageboxdata->colorScheme) {
colors = (*env)->NewIntArray(env, SDL_MESSAGEBOX_COLOR_MAX);
for (i = 0; i < SDL_MESSAGEBOX_COLOR_MAX; ++i) {
- temp = (0xFF << 24) |
+ temp = (0xFFU << 24) |
(messageboxdata->colorScheme->colors[i].r << 16) |
(messageboxdata->colorScheme->colors[i].g << 8) |
(messageboxdata->colorScheme->colors[i].b << 0);
@@ -2488,7 +2576,7 @@
void SDL_AndroidBackButton(void)
{
JNIEnv *env = Android_JNI_GetEnv();
- return (*env)->CallStaticVoidMethod(env, mActivityClass, midManualBackButton);
+ (*env)->CallStaticVoidMethod(env, mActivityClass, midManualBackButton);
}
const char * SDL_AndroidGetInternalStoragePath(void)
@@ -2686,6 +2774,27 @@
return (*env)->CallStaticBooleanMethod(env, mActivityClass, midSetRelativeMouseEnabled, (enabled == 1));
}
+SDL_bool Android_JNI_RequestPermission(const char *permission)
+{
+ JNIEnv *env = Android_JNI_GetEnv();
+ const int requestCode = 1;
+
+ /* Wait for any pending request on another thread */
+ while (SDL_AtomicGet(&bPermissionRequestPending) == SDL_TRUE) {
+ SDL_Delay(10);
+ }
+ SDL_AtomicSet(&bPermissionRequestPending, SDL_TRUE);
+
+ jstring jpermission = (*env)->NewStringUTF(env, permission);
+ (*env)->CallStaticVoidMethod(env, mActivityClass, midRequestPermission, jpermission, requestCode);
+ (*env)->DeleteLocalRef(env, jpermission);
+
+ /* Wait for the request to complete */
+ while (SDL_AtomicGet(&bPermissionRequestPending) == SDL_TRUE) {
+ SDL_Delay(10);
+ }
+ return bPermissionRequestResult;
+}
#endif /* __ANDROID__ */
--- a/external/SDL2/src/core/android/SDL_android.h
+++ b/external/SDL2/src/core/android/SDL_android.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -123,6 +123,8 @@
SDL_bool Android_JNI_SupportsRelativeMouse(void);
SDL_bool Android_JNI_SetRelativeMouseEnabled(SDL_bool enabled);
+/* Request permission */
+SDL_bool Android_JNI_RequestPermission(const char *permission);
int SDL_GetAndroidSDKVersion(void);
--- a/external/SDL2/src/core/android/keyinfotable.h
+++ b/external/SDL2/src/core/android/keyinfotable.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_dbus.c
+++ b/external/SDL2/src/core/linux/SDL_dbus.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -111,8 +111,19 @@
void
SDL_DBus_Init(void)
{
- if (!dbus.session_conn && LoadDBUSLibrary() != -1) {
+ static SDL_bool is_dbus_available = SDL_TRUE;
+ if (!is_dbus_available) {
+ return; /* don't keep trying if this fails. */
+ }
+
+ if (!dbus.session_conn) {
DBusError err;
+
+ if (LoadDBUSLibrary() == -1) {
+ is_dbus_available = SDL_FALSE; /* can't load at all? Don't keep trying. */
+ return; /* oh well */
+ }
+
dbus.error_init(&err);
dbus.session_conn = dbus.bus_get_private(DBUS_BUS_SESSION, &err);
if (!dbus.error_is_set(&err)) {
@@ -121,6 +132,7 @@
if (dbus.error_is_set(&err)) {
dbus.error_free(&err);
SDL_DBus_Quit();
+ is_dbus_available = SDL_FALSE;
return; /* oh well */
}
dbus.connection_set_exit_on_disconnect(dbus.system_conn, 0);
@@ -154,15 +166,11 @@
SDL_DBusContext *
SDL_DBus_GetContext(void)
{
- if(!dbus_handle || !dbus.session_conn){
+ if (!dbus_handle || !dbus.session_conn) {
SDL_DBus_Init();
}
- if(dbus_handle && dbus.session_conn){
- return &dbus;
- } else {
- return NULL;
- }
+ return (dbus_handle && dbus.session_conn) ? &dbus : NULL;
}
static SDL_bool
--- a/external/SDL2/src/core/linux/SDL_dbus.h
+++ b/external/SDL2/src/core/linux/SDL_dbus.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_evdev.c
+++ b/external/SDL2/src/core/linux/SDL_evdev.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -401,18 +401,21 @@
norm_pressure = 1.0f;
}
+ /* FIXME: the touch's window shouldn't be null, but
+ * the coordinate space of touch positions needs to
+ * be window-relative in that case. */
switch(item->touchscreen_data->slots[j].delta) {
case EVDEV_TOUCH_SLOTDELTA_DOWN:
- SDL_SendTouch(item->fd, item->touchscreen_data->slots[j].tracking_id, SDL_TRUE, norm_x, norm_y, norm_pressure);
+ SDL_SendTouch(item->fd, item->touchscreen_data->slots[j].tracking_id, NULL, SDL_TRUE, norm_x, norm_y, norm_pressure);
item->touchscreen_data->slots[j].delta = EVDEV_TOUCH_SLOTDELTA_NONE;
break;
case EVDEV_TOUCH_SLOTDELTA_UP:
- SDL_SendTouch(item->fd, item->touchscreen_data->slots[j].tracking_id, SDL_FALSE, norm_x, norm_y, norm_pressure);
+ SDL_SendTouch(item->fd, item->touchscreen_data->slots[j].tracking_id, NULL, SDL_FALSE, norm_x, norm_y, norm_pressure);
item->touchscreen_data->slots[j].tracking_id = -1;
item->touchscreen_data->slots[j].delta = EVDEV_TOUCH_SLOTDELTA_NONE;
break;
case EVDEV_TOUCH_SLOTDELTA_MOVE:
- SDL_SendTouchMotion(item->fd, item->touchscreen_data->slots[j].tracking_id, norm_x, norm_y, norm_pressure);
+ SDL_SendTouchMotion(item->fd, item->touchscreen_data->slots[j].tracking_id, NULL, norm_x, norm_y, norm_pressure);
item->touchscreen_data->slots[j].delta = EVDEV_TOUCH_SLOTDELTA_NONE;
break;
default:
@@ -443,18 +446,19 @@
{
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
- if (keycode < SDL_arraysize(linux_scancode_table))
+ if (keycode < SDL_arraysize(linux_scancode_table)) {
scancode = linux_scancode_table[keycode];
- if (scancode == SDL_SCANCODE_UNKNOWN) {
- /* BTN_TOUCH is handled elsewhere, but we might still end up here if
- you get an unexpected BTN_TOUCH from something SDL believes is not
- a touch device. In this case, we'd rather not get a misleading
- SDL_Log message about an unknown key. */
- if (keycode != BTN_TOUCH) {
- SDL_Log("The key you just pressed is not recognized by SDL. To help "
- "get this fixed, please report this to the SDL forums/mailing list "
- "<https://discourse.libsdl.org/> EVDEV KeyCode %d", keycode);
+ if (scancode == SDL_SCANCODE_UNKNOWN) {
+ /* BTN_TOUCH is handled elsewhere, but we might still end up here if
+ you get an unexpected BTN_TOUCH from something SDL believes is not
+ a touch device. In this case, we'd rather not get a misleading
+ SDL_Log message about an unknown key. */
+ if (keycode != BTN_TOUCH) {
+ SDL_Log("The key you just pressed is not recognized by SDL. To help "
+ "get this fixed, please report this to the SDL forums/mailing list "
+ "<https://discourse.libsdl.org/> EVDEV KeyCode %d", keycode);
+ }
}
}
--- a/external/SDL2/src/core/linux/SDL_evdev.h
+++ b/external/SDL2/src/core/linux/SDL_evdev.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_evdev_kbd.c
+++ b/external/SDL2/src/core/linux/SDL_evdev_kbd.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_evdev_kbd.h
+++ b/external/SDL2/src/core/linux/SDL_evdev_kbd.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_evdev_kbd_default_accents.h
+++ b/external/SDL2/src/core/linux/SDL_evdev_kbd_default_accents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_evdev_kbd_default_keymap.h
+++ b/external/SDL2/src/core/linux/SDL_evdev_kbd_default_keymap.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_fcitx.c
+++ b/external/SDL2/src/core/linux/SDL_fcitx.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_fcitx.h
+++ b/external/SDL2/src/core/linux/SDL_fcitx.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_ibus.c
+++ b/external/SDL2/src/core/linux/SDL_ibus.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_ibus.h
+++ b/external/SDL2/src/core/linux/SDL_ibus.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_ime.c
+++ b/external/SDL2/src/core/linux/SDL_ime.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_ime.h
+++ b/external/SDL2/src/core/linux/SDL_ime.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/linux/SDL_threadprio.c
+++ b/external/SDL2/src/core/linux/SDL_threadprio.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,7 @@
#ifdef __LINUX__
+#include "SDL_error.h"
#include "SDL_stdinc.h"
#if !SDL_THREADS_DISABLED
@@ -30,8 +31,9 @@
#include <pthread.h>
#include "SDL_system.h"
-#if SDL_USE_LIBDBUS
#include "SDL_dbus.h"
+
+#if SDL_USE_LIBDBUS
/* d-bus queries to org.freedesktop.RealtimeKit1. */
#define RTKIT_DBUS_NODE "org.freedesktop.RealtimeKit1"
#define RTKIT_DBUS_PATH "/org/freedesktop/RealtimeKit1"
@@ -88,14 +90,15 @@
}
#if SDL_USE_LIBDBUS
- /* Note that this fails if you're trying to set high priority
- and you don't have root permission. BUT DON'T RUN AS ROOT!
-
- You can grant the ability to increase thread priority by
- running the following command on your application binary:
- sudo setcap 'cap_sys_nice=eip' <application>
-
- Let's try setting priority with RealtimeKit...
+ /* Note that this fails you most likely:
+ * Have your process's scheduler incorrectly configured.
+ See the requirements at:
+ http://git.0pointer.net/rtkit.git/tree/README#n16
+ * Encountered dbus/polkit security restrictions. Note
+ that the RealtimeKit1 dbus endpoint is inaccessible
+ over ssh connections for most common distro configs.
+ You might want to check your local config for details:
+ /usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
README and sample code at: http://git.0pointer.net/rtkit.git
*/
--- a/external/SDL2/src/core/linux/SDL_udev.c
+++ b/external/SDL2/src/core/linux/SDL_udev.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -34,6 +34,7 @@
#include "SDL_assert.h"
#include "SDL_loadso.h"
#include "SDL_timer.h"
+#include "SDL_hints.h"
#include "../unix/SDL_poll.h"
static const char *SDL_UDEV_LIBS[] = { "libudev.so.1", "libudev.so.0" };
@@ -420,6 +421,12 @@
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass |= SDL_UDEV_DEVICE_JOYSTICK;
}
+
+ val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_ACCELEROMETER");
+ if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE) &&
+ val != NULL && SDL_strcmp(val, "1") == 0 ) {
+ devclass |= SDL_UDEV_DEVICE_JOYSTICK;
+ }
val = _this->syms.udev_device_get_property_value(dev, "ID_INPUT_MOUSE");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
--- a/external/SDL2/src/core/linux/SDL_udev.h
+++ b/external/SDL2/src/core/linux/SDL_udev.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/unix/SDL_poll.c
+++ b/external/SDL2/src/core/unix/SDL_poll.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/unix/SDL_poll.h
+++ b/external/SDL2/src/core/unix/SDL_poll.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/windows/SDL_directx.h
+++ b/external/SDL2/src/core/windows/SDL_directx.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/windows/SDL_windows.c
+++ b/external/SDL2/src/core/windows/SDL_windows.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/windows/SDL_windows.h
+++ b/external/SDL2/src/core/windows/SDL_windows.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/windows/SDL_xinput.c
+++ b/external/SDL2/src/core/windows/SDL_xinput.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/windows/SDL_xinput.h
+++ b/external/SDL2/src/core/windows/SDL_xinput.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_common.cpp
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_common.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_common.h
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_common.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_direct3d.cpp
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_direct3d.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_direct3d.h
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_direct3d.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_xaml.cpp
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_xaml.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/core/winrt/SDL_winrtapp_xaml.h
+++ b/external/SDL2/src/core/winrt/SDL_winrtapp_xaml.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/cpuinfo/SDL_cpuinfo.c
+++ b/external/SDL2/src/cpuinfo/SDL_cpuinfo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -67,6 +67,13 @@
#ifndef AT_HWCAP
#define AT_HWCAP 16
#endif
+#ifndef AT_PLATFORM
+#define AT_PLATFORM 15
+#endif
+/* Prevent compilation error when including elf.h would also try to define AT_* as an enum */
+#ifndef AT_NULL
+#define AT_NULL 0
+#endif
#ifndef HWCAP_NEON
#define HWCAP_NEON (1 << 12)
#endif
@@ -83,6 +90,11 @@
#endif
#endif
+#ifdef __RISCOS__
+#include <kernel.h>
+#include <swis.h>
+#endif
+
#define CPU_HAS_RDTSC (1 << 0)
#define CPU_HAS_ALTIVEC (1 << 1)
#define CPU_HAS_MMX (1 << 2)
@@ -96,6 +108,7 @@
#define CPU_HAS_AVX2 (1 << 10)
#define CPU_HAS_NEON (1 << 11)
#define CPU_HAS_AVX512F (1 << 12)
+#define CPU_HAS_ARM_SIMD (1 << 13)
#if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__ && !__OpenBSD__
/* This is the brute force way of detecting instruction sets...
@@ -325,6 +338,83 @@
return altivec;
}
+#if defined(__ARM_ARCH) && (__ARM_ARCH >= 6)
+static int
+CPU_haveARMSIMD(void)
+{
+ return 1;
+}
+
+#elif !defined(__arm__)
+static int
+CPU_haveARMSIMD(void)
+{
+ return 0;
+}
+
+#elif defined(__LINUX__)
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <elf.h>
+
+static int
+CPU_haveARMSIMD(void)
+{
+ int arm_simd = 0;
+ int fd;
+
+ fd = open("/proc/self/auxv", O_RDONLY);
+ if (fd >= 0)
+ {
+ Elf32_auxv_t aux;
+ while (read(fd, &aux, sizeof aux) == sizeof aux)
+ {
+ if (aux.a_type == AT_PLATFORM)
+ {
+ const char *plat = (const char *) aux.a_un.a_val;
+ if (plat) {
+ arm_simd = strncmp(plat, "v6l", 3) == 0 ||
+ strncmp(plat, "v7l", 3) == 0;
+ }
+ }
+ }
+ close(fd);
+ }
+ return arm_simd;
+}
+
+#elif defined(__RISCOS__)
+
+static int
+CPU_haveARMSIMD(void)
+{
+ _kernel_swi_regs regs;
+ regs.r[0] = 0;
+ if (_kernel_swi(OS_PlatformFeatures, ®s, ®s) != NULL)
+ return 0;
+
+ if (!(regs.r[0] & (1<<31)))
+ return 0;
+
+ regs.r[0] = 34;
+ regs.r[1] = 29;
+ if (_kernel_swi(OS_PlatformFeatures, ®s, ®s) != NULL)
+ return 0;
+
+ return regs.r[0];
+}
+
+#else
+static int
+CPU_haveARMSIMD(void)
+{
+#warning SDL_HasARMSIMD is not implemented for this ARM platform. Write me.
+ return 0;
+}
+#endif
+
#if defined(__LINUX__) && defined(__ARM_ARCH) && !defined(HAVE_GETAUXVAL)
static int
readProcAuxvForNeon(void)
@@ -345,7 +435,6 @@
}
#endif
-
static int
CPU_haveNEON(void)
{
@@ -361,15 +450,15 @@
# endif
/* All WinRT ARM devices are required to support NEON, but just in case. */
return IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) != 0;
-#elif !defined(__ARM_ARCH)
- return 0; /* not an ARM CPU at all. */
-#elif __ARM_ARCH >= 8
+#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8)
return 1; /* ARMv8 always has non-optional NEON support. */
-#elif defined(__APPLE__) && (__ARM_ARCH >= 7)
+#elif defined(__APPLE__) && defined(__ARM_ARCH) && (__ARM_ARCH >= 7)
/* (note that sysctlbyname("hw.optional.neon") doesn't work!) */
return 1; /* all Apple ARMv7 chips and later have NEON. */
#elif defined(__APPLE__)
return 0; /* assume anything else from Apple doesn't have NEON. */
+#elif !defined(__arm__)
+ return 0; /* not an ARM CPU at all. */
#elif defined(__QNXNTO__)
return SYSPAGE_ENTRY(cpuinfo)->flags & ARM_CPU_FLAG_NEON;
#elif (defined(__LINUX__) || defined(__ANDROID__)) && defined(HAVE_GETAUXVAL)
@@ -388,6 +477,18 @@
}
return 0;
}
+#elif defined(__RISCOS__)
+ /* Use the VFPSupport_Features SWI to access the MVFR registers */
+ {
+ _kernel_swi_regs regs;
+ regs.r[0] = 0;
+ if (_kernel_swi(VFPSupport_Features, ®s, ®s) == NULL) {
+ if ((regs.r[2] & 0xFFF000) == 0x111000) {
+ return 1;
+ }
+ }
+ return 0;
+ }
#else
#warning SDL_HasNEON is not implemented for this ARM platform. Write me.
return 0;
@@ -602,7 +703,7 @@
if (SDL_strcmp(cpuType, "GenuineIntel") == 0) {
cpuid(0x00000001, a, b, c, d);
return (((b >> 8) & 0xff) * 8);
- } else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0) {
+ } else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0 || SDL_strcmp(cpuType, "HygonGenuine") == 0) {
cpuid(0x80000005, a, b, c, d);
return (c & 0xff);
} else {
@@ -620,7 +721,7 @@
if (SDL_CPUFeatures == 0xFFFFFFFF) {
CPU_calcCPUIDFeatures();
SDL_CPUFeatures = 0;
- SDL_SIMDAlignment = 4; /* a good safe base value */
+ SDL_SIMDAlignment = sizeof(void *); /* a good safe base value */
if (CPU_haveRDTSC()) {
SDL_CPUFeatures |= CPU_HAS_RDTSC;
}
@@ -668,6 +769,10 @@
SDL_CPUFeatures |= CPU_HAS_AVX512F;
SDL_SIMDAlignment = SDL_max(SDL_SIMDAlignment, 64);
}
+ if (CPU_haveARMSIMD()) {
+ SDL_CPUFeatures |= CPU_HAS_ARM_SIMD;
+ SDL_SIMDAlignment = SDL_max(SDL_SIMDAlignment, 16);
+ }
if (CPU_haveNEON()) {
SDL_CPUFeatures |= CPU_HAS_NEON;
SDL_SIMDAlignment = SDL_max(SDL_SIMDAlignment, 16);
@@ -750,6 +855,12 @@
}
SDL_bool
+SDL_HasARMSIMD(void)
+{
+ return CPU_FEATURE_AVAILABLE(CPU_HAS_ARM_SIMD);
+}
+
+SDL_bool
SDL_HasNEON(void)
{
return CPU_FEATURE_AVAILABLE(CPU_HAS_NEON);
@@ -803,7 +914,16 @@
SDL_SystemRAM = (int) (sysram / 0x100000U);
}
#endif
+#ifdef __RISCOS__
+ if (SDL_SystemRAM <= 0) {
+ _kernel_swi_regs regs;
+ regs.r[0] = 0x108;
+ if (_kernel_swi(OS_Memory, ®s, ®s) == NULL) {
+ SDL_SystemRAM = (int)(regs.r[1] * regs.r[2] / (1024 * 1024));
+ }
+ }
#endif
+#endif
}
return SDL_SystemRAM;
}
@@ -870,6 +990,7 @@
printf("AVX: %d\n", SDL_HasAVX());
printf("AVX2: %d\n", SDL_HasAVX2());
printf("AVX-512F: %d\n", SDL_HasAVX512F());
+ printf("ARM SIMD: %d\n", SDL_HasARMSIMD());
printf("NEON: %d\n", SDL_HasNEON());
printf("RAM: %d MB\n", SDL_GetSystemRAM());
return 0;
--- a/external/SDL2/src/dynapi/SDL_dynapi.c
+++ b/external/SDL2/src/dynapi/SDL_dynapi.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -251,12 +251,12 @@
HMODULE hmodule;
PFN retval = NULL;
char error[256];
- if (DosLoadModule(&error, sizeof(error), fname, &hmodule) == NO_ERROR) {
+ if (DosLoadModule(error, sizeof(error), fname, &hmodule) == NO_ERROR) {
if (DosQueryProcAddr(hmodule, 0, sym, &retval) != NO_ERROR) {
DosFreeModule(hmodule);
}
}
- return (void *) retval;
+ return (void *)retval;
}
#else
@@ -264,29 +264,58 @@
#endif
+static void dynapi_warn(const char *msg)
+{
+ const char *caption = "SDL Dynamic API Failure!";
+ /* SDL_ShowSimpleMessageBox() is a too heavy for here. */
+ #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+ MessageBoxA(NULL, msg, caption, MB_OK | MB_ICONERROR);
+ #else
+ fprintf(stderr, "\n\n%s\n%s\n\n", caption, msg);
+ fflush(stderr);
+ #endif
+}
+
+/* This is not declared in any header, although it is shared between some
+ parts of SDL, because we don't want anything calling it without an
+ extremely good reason. */
+#if defined(__WATCOMC__)
+void SDL_ExitProcess(int exitcode);
+#pragma aux SDL_ExitProcess aborts;
+#endif
+SDL_NORETURN void SDL_ExitProcess(int exitcode);
+
+
static void
SDL_InitDynamicAPILocked(void)
{
const char *libname = SDL_getenv_REAL("SDL_DYNAMIC_API");
SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */
+ SDL_bool use_internal = SDL_TRUE;
if (libname) {
entry = (SDL_DYNAPI_ENTRYFN) get_sdlapi_entry(libname, "SDL_DYNAPI_entry");
if (!entry) {
- /* !!! FIXME: fail to startup here instead? */
- /* !!! FIXME: definitely warn user. */
- /* Just fill in the function pointers from this library. */
+ dynapi_warn("Couldn't load overriding SDL library. Please fix or remove the SDL_DYNAMIC_API environment variable. Using the default SDL.");
+ /* Just fill in the function pointers from this library, later. */
}
}
- if (!entry || (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0)) {
- /* !!! FIXME: fail to startup here instead? */
- /* !!! FIXME: definitely warn user. */
- /* Just fill in the function pointers from this library. */
- if (!entry) {
- if (!initialize_jumptable(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table))) {
- /* !!! FIXME: now we're screwed. Should definitely abort now. */
- }
+ if (entry) {
+ if (entry(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0) {
+ dynapi_warn("Couldn't override SDL library. Using a newer SDL build might help. Please fix or remove the SDL_DYNAMIC_API environment variable. Using the default SDL.");
+ /* Just fill in the function pointers from this library, later. */
+ } else {
+ use_internal = SDL_FALSE; /* We overrode SDL! Don't use the internal version! */
+ }
+ }
+
+ /* Just fill in the function pointers from this library. */
+ if (use_internal) {
+ if (initialize_jumptable(SDL_DYNAPI_VERSION, &jump_table, sizeof (jump_table)) < 0) {
+ /* Now we're screwed. Should definitely abort now. */
+ dynapi_warn("Failed to initialize internal SDL dynapi. As this would otherwise crash, we have to abort now.");
+ SDL_ExitProcess(86);
}
}
--- a/external/SDL2/src/dynapi/SDL_dynapi.h
+++ b/external/SDL2/src/dynapi/SDL_dynapi.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -52,6 +52,8 @@
#elif defined(SDL_BUILDING_WINRT) && SDL_BUILDING_WINRT /* probably not useful on WinRT, given current .dll loading restrictions */
#define SDL_DYNAMIC_API 0
#elif defined(__PSP__) && __PSP__
+#define SDL_DYNAMIC_API 0
+#elif defined(__riscos__) && __riscos__ /* probably not useful on RISC OS, since dlopen() can't be used when using static linking. */
#define SDL_DYNAMIC_API 0
#elif defined(__clang_analyzer__)
#define SDL_DYNAMIC_API 0 /* Turn off for static analysis, so reports are more clear. */
--- a/external/SDL2/src/dynapi/SDL_dynapi_overrides.h
+++ b/external/SDL2/src/dynapi/SDL_dynapi_overrides.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -724,3 +724,28 @@
#define SDL_RWwrite SDL_RWwrite_REAL
#define SDL_RWclose SDL_RWclose_REAL
#define SDL_LoadFile SDL_LoadFile_REAL
+#define SDL_Metal_CreateView SDL_Metal_CreateView_REAL
+#define SDL_Metal_DestroyView SDL_Metal_DestroyView_REAL
+#define SDL_LockTextureToSurface SDL_LockTextureToSurface_REAL
+#define SDL_HasARMSIMD SDL_HasARMSIMD_REAL
+#define SDL_strtokr SDL_strtokr_REAL
+#define SDL_wcsstr SDL_wcsstr_REAL
+#define SDL_wcsncmp SDL_wcsncmp_REAL
+#define SDL_GameControllerTypeForIndex SDL_GameControllerTypeForIndex_REAL
+#define SDL_GameControllerGetType SDL_GameControllerGetType_REAL
+#define SDL_GameControllerFromPlayerIndex SDL_GameControllerFromPlayerIndex_REAL
+#define SDL_GameControllerSetPlayerIndex SDL_GameControllerSetPlayerIndex_REAL
+#define SDL_JoystickFromPlayerIndex SDL_JoystickFromPlayerIndex_REAL
+#define SDL_JoystickSetPlayerIndex SDL_JoystickSetPlayerIndex_REAL
+#define SDL_SetTextureScaleMode SDL_SetTextureScaleMode_REAL
+#define SDL_GetTextureScaleMode SDL_GetTextureScaleMode_REAL
+#define SDL_OnApplicationWillTerminate SDL_OnApplicationWillTerminate_REAL
+#define SDL_OnApplicationDidReceiveMemoryWarning SDL_OnApplicationDidReceiveMemoryWarning_REAL
+#define SDL_OnApplicationWillResignActive SDL_OnApplicationWillResignActive_REAL
+#define SDL_OnApplicationDidEnterBackground SDL_OnApplicationDidEnterBackground_REAL
+#define SDL_OnApplicationWillEnterForeground SDL_OnApplicationWillEnterForeground_REAL
+#define SDL_OnApplicationDidBecomeActive SDL_OnApplicationDidBecomeActive_REAL
+#define SDL_OnApplicationDidChangeStatusBarOrientation SDL_OnApplicationDidChangeStatusBarOrientation_REAL
+#define SDL_GetAndroidSDKVersion SDL_GetAndroidSDKVersion_REAL
+#define SDL_isupper SDL_isupper_REAL
+#define SDL_islower SDL_islower_REAL
--- a/external/SDL2/src/dynapi/SDL_dynapi_procs.h
+++ b/external/SDL2/src/dynapi/SDL_dynapi_procs.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,7 +48,7 @@
#undef SDL_CreateThread
#endif
-#if defined(__WIN32__) && !defined(HAVE_LIBC)
+#if defined(__WIN32__)
SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e),(a,b,c,d,e),return)
#elif defined(__OS2__)
SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e),(a,b,c,d,e),return)
@@ -715,7 +715,7 @@
#ifdef __ANDROID__
SDL_DYNAPI_PROC(SDL_bool,SDL_IsChromebook,(void),(),return)
SDL_DYNAPI_PROC(SDL_bool,SDL_IsDeXMode,(void),(),return)
-SDL_DYNAPI_PROC(void,SDL_AndroidBackButton,(void),(),return)
+SDL_DYNAPI_PROC(void,SDL_AndroidBackButton,(void),(),)
#endif
SDL_DYNAPI_PROC(double,SDL_exp,(double a),(a),return)
SDL_DYNAPI_PROC(float,SDL_expf,(float a),(a),return)
@@ -744,7 +744,7 @@
#undef SDL_CreateThreadWithStackSize
#endif
-#if defined(__WIN32__) && !defined(HAVE_LIBC)
+#if defined(__WIN32__)
SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadWithStackSize,(SDL_ThreadFunction a, const char *b, const size_t c, void *d, pfnSDL_CurrentBeginThread e, pfnSDL_CurrentEndThread f),(a,b,c,d,e,f),return)
#elif defined(__OS2__)
SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThreadWithStackSize,(SDL_ThreadFunction a, const char *b, const size_t c, void *d, pfnSDL_CurrentBeginThread e, pfnSDL_CurrentEndThread f),(a,b,c,d,e,f),return)
@@ -780,3 +780,32 @@
SDL_DYNAPI_PROC(size_t,SDL_RWwrite,(SDL_RWops *a, const void *b, size_t c, size_t d),(a,b,c,d),return)
SDL_DYNAPI_PROC(int,SDL_RWclose,(SDL_RWops *a),(a),return)
SDL_DYNAPI_PROC(void*,SDL_LoadFile,(const char *a, size_t *b),(a,b),return)
+SDL_DYNAPI_PROC(SDL_MetalView,SDL_Metal_CreateView,(SDL_Window *a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_Metal_DestroyView,(SDL_MetalView a),(a),)
+SDL_DYNAPI_PROC(int,SDL_LockTextureToSurface,(SDL_Texture *a, const SDL_Rect *b, SDL_Surface **c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_bool,SDL_HasARMSIMD,(void),(),return)
+SDL_DYNAPI_PROC(char*,SDL_strtokr,(char *a, const char *b, char **c),(a,b,c),return)
+SDL_DYNAPI_PROC(wchar_t*,SDL_wcsstr,(const wchar_t *a, const wchar_t *b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_wcsncmp,(const wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return)
+SDL_DYNAPI_PROC(SDL_GameControllerType,SDL_GameControllerTypeForIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameControllerType,SDL_GameControllerGetType,(SDL_GameController *a),(a),return)
+SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromPlayerIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_GameControllerSetPlayerIndex,(SDL_GameController *a, int b),(a,b),)
+SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromPlayerIndex,(int a),(a),return)
+SDL_DYNAPI_PROC(void,SDL_JoystickSetPlayerIndex,(SDL_Joystick *a, int b),(a,b),)
+SDL_DYNAPI_PROC(int,SDL_SetTextureScaleMode,(SDL_Texture *a, SDL_ScaleMode b),(a,b),return)
+SDL_DYNAPI_PROC(int,SDL_GetTextureScaleMode,(SDL_Texture *a, SDL_ScaleMode *b),(a,b),return)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationWillTerminate,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationDidReceiveMemoryWarning,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationWillResignActive,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationDidEnterBackground,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationWillEnterForeground,(void),(),)
+SDL_DYNAPI_PROC(void,SDL_OnApplicationDidBecomeActive,(void),(),)
+#ifdef __IPHONEOS__
+SDL_DYNAPI_PROC(void,SDL_OnApplicationDidChangeStatusBarOrientation,(void),(),)
+#endif
+#ifdef __ANDROID__
+SDL_DYNAPI_PROC(int,SDL_GetAndroidSDKVersion,(void),(),return)
+#endif
+SDL_DYNAPI_PROC(int,SDL_isupper,(int a),(a),return)
+SDL_DYNAPI_PROC(int,SDL_islower,(int a),(a),return)
--- a/external/SDL2/src/dynapi/gendynapi.pl
+++ b/external/SDL2/src/dynapi/gendynapi.pl
@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
# Simple DirectMedia Layer
-# Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+# Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
@@ -49,9 +49,9 @@
open(SDL_DYNAPI_OVERRIDES_H, '>>', $sdl_dynapi_overrides_h) or die("Can't open $sdl_dynapi_overrides_h: $!\n");
opendir(HEADERS, 'include') or die("Can't open include dir: $!\n");
-while (readdir(HEADERS)) {
- next if not /\.h\Z/;
- my $header = "include/$_";
+while (my $d = readdir(HEADERS)) {
+ next if not $d =~ /\.h\Z/;
+ my $header = "include/$d";
open(HEADER, '<', $header) or die("Can't open $header: $!\n");
while (<HEADER>) {
chomp;
--- a/external/SDL2/src/events/SDL_clipboardevents.c
+++ b/external/SDL2/src/events/SDL_clipboardevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_clipboardevents_c.h
+++ b/external/SDL2/src/events/SDL_clipboardevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_displayevents.c
+++ b/external/SDL2/src/events/SDL_displayevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_displayevents_c.h
+++ b/external/SDL2/src/events/SDL_displayevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_dropevents.c
+++ b/external/SDL2/src/events/SDL_dropevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_dropevents_c.h
+++ b/external/SDL2/src/events/SDL_dropevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_events.c
+++ b/external/SDL2/src/events/SDL_events.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -33,6 +33,13 @@
#include "../video/SDL_sysvideo.h"
#include "SDL_syswm.h"
+#undef SDL_PRIs64
+#ifdef __WIN32__
+#define SDL_PRIs64 "I64d"
+#else
+#define SDL_PRIs64 "lld"
+#endif
+
/* An arbitrary limit so we don't have unbounded growth */
#define SDL_MAX_QUEUED_EVENTS 65535
@@ -279,8 +286,8 @@
#define PRINT_FINGER_EVENT(event) \
SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" fingerid=%"SDL_PRIs64" x=%f y=%f dx=%f dy=%f pressure=%f)", \
- (uint) event->tfinger.timestamp, event->tfinger.touchId, \
- event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
+ (uint) event->tfinger.timestamp, (long long)event->tfinger.touchId, \
+ (long long)event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)
SDL_EVENT_CASE(SDL_FINGERDOWN) PRINT_FINGER_EVENT(event); break;
SDL_EVENT_CASE(SDL_FINGERUP) PRINT_FINGER_EVENT(event); break;
@@ -289,8 +296,8 @@
#define PRINT_DOLLAR_EVENT(event) \
SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" gestureid=%"SDL_PRIs64" numfingers=%u error=%f x=%f y=%f)", \
- (uint) event->dgesture.timestamp, event->dgesture.touchId, \
- event->dgesture.gestureId, (uint) event->dgesture.numFingers, \
+ (uint) event->dgesture.timestamp, (long long)event->dgesture.touchId, \
+ (long long)event->dgesture.gestureId, (uint) event->dgesture.numFingers, \
event->dgesture.error, event->dgesture.x, event->dgesture.y);
SDL_EVENT_CASE(SDL_DOLLARGESTURE) PRINT_DOLLAR_EVENT(event); break;
SDL_EVENT_CASE(SDL_DOLLARRECORD) PRINT_DOLLAR_EVENT(event); break;
@@ -298,7 +305,7 @@
SDL_EVENT_CASE(SDL_MULTIGESTURE)
SDL_snprintf(details, sizeof (details), " (timestamp=%u touchid=%"SDL_PRIs64" dtheta=%f ddist=%f x=%f y=%f numfingers=%u)",
- (uint) event->mgesture.timestamp, event->mgesture.touchId,
+ (uint) event->mgesture.timestamp, (long long)event->mgesture.touchId,
event->mgesture.dTheta, event->mgesture.dDist,
event->mgesture.x, event->mgesture.y, (uint) event->mgesture.numFingers);
break;
@@ -728,7 +735,7 @@
/* Timeout expired and no events */
return 0;
}
- SDL_Delay(10);
+ SDL_Delay(1);
break;
default:
/* Has events */
--- a/external/SDL2/src/events/SDL_events_c.h
+++ b/external/SDL2/src/events/SDL_events_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_gesture.c
+++ b/external/SDL2/src/events/SDL_gesture.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,13 +36,15 @@
#define MAXPATHSIZE 1024
-#define DOLLARNPOINTS 64
-#define DOLLARSIZE 256
-
#define ENABLE_DOLLAR
-#define PHI 0.618033989
+#define DOLLARNPOINTS 64
+#if defined(ENABLE_DOLLAR)
+# define DOLLARSIZE 256
+# define PHI 0.618033989
+#endif
+
typedef struct {
float x,y;
} SDL_FloatPoint;
@@ -335,7 +337,7 @@
}
/* DollarPath contains raw points, plus (possibly) the calculated length */
-static int dollarNormalize(const SDL_DollarPath *path,SDL_FloatPoint *points)
+static int dollarNormalize(const SDL_DollarPath *path,SDL_FloatPoint *points, SDL_bool is_recording)
{
int i;
float interval;
@@ -381,7 +383,9 @@
dist += d;
}
if (numPoints < DOLLARNPOINTS-1) {
- SDL_SetError("ERROR: NumPoints = %i", numPoints);
+ if (is_recording) {
+ SDL_SetError("ERROR: NumPoints = %i", numPoints);
+ }
return 0;
}
/* copy the last point */
@@ -435,7 +439,7 @@
SDL_memset(points, 0, sizeof(points));
- dollarNormalize(path,points);
+ dollarNormalize(path, points, SDL_FALSE);
/* PrintPath(points); */
*bestTempl = -1;
@@ -498,43 +502,48 @@
return NULL;
}
-static int SDL_SendGestureMulti(SDL_GestureTouch* touch,float dTheta,float dDist)
+static void SDL_SendGestureMulti(SDL_GestureTouch* touch,float dTheta,float dDist)
{
- SDL_Event event;
- event.mgesture.type = SDL_MULTIGESTURE;
- event.mgesture.touchId = touch->id;
- event.mgesture.x = touch->centroid.x;
- event.mgesture.y = touch->centroid.y;
- event.mgesture.dTheta = dTheta;
- event.mgesture.dDist = dDist;
- event.mgesture.numFingers = touch->numDownFingers;
- return SDL_PushEvent(&event) > 0;
+ if (SDL_GetEventState(SDL_MULTIGESTURE) == SDL_ENABLE) {
+ SDL_Event event;
+ event.mgesture.type = SDL_MULTIGESTURE;
+ event.mgesture.touchId = touch->id;
+ event.mgesture.x = touch->centroid.x;
+ event.mgesture.y = touch->centroid.y;
+ event.mgesture.dTheta = dTheta;
+ event.mgesture.dDist = dDist;
+ event.mgesture.numFingers = touch->numDownFingers;
+ SDL_PushEvent(&event);
+ }
}
#if defined(ENABLE_DOLLAR)
-static int SDL_SendGestureDollar(SDL_GestureTouch* touch,
+static void SDL_SendGestureDollar(SDL_GestureTouch* touch,
SDL_GestureID gestureId,float error)
{
- SDL_Event event;
- event.dgesture.type = SDL_DOLLARGESTURE;
- event.dgesture.touchId = touch->id;
- event.dgesture.x = touch->centroid.x;
- event.dgesture.y = touch->centroid.y;
- event.dgesture.gestureId = gestureId;
- event.dgesture.error = error;
- /* A finger came up to trigger this event. */
- event.dgesture.numFingers = touch->numDownFingers + 1;
- return SDL_PushEvent(&event) > 0;
+ if (SDL_GetEventState(SDL_DOLLARGESTURE) == SDL_ENABLE) {
+ SDL_Event event;
+ event.dgesture.type = SDL_DOLLARGESTURE;
+ event.dgesture.touchId = touch->id;
+ event.dgesture.x = touch->centroid.x;
+ event.dgesture.y = touch->centroid.y;
+ event.dgesture.gestureId = gestureId;
+ event.dgesture.error = error;
+ /* A finger came up to trigger this event. */
+ event.dgesture.numFingers = touch->numDownFingers + 1;
+ SDL_PushEvent(&event);
+ }
}
-
-static int SDL_SendDollarRecord(SDL_GestureTouch* touch,SDL_GestureID gestureId)
+static void SDL_SendDollarRecord(SDL_GestureTouch* touch,SDL_GestureID gestureId)
{
- SDL_Event event;
- event.dgesture.type = SDL_DOLLARRECORD;
- event.dgesture.touchId = touch->id;
- event.dgesture.gestureId = gestureId;
- return SDL_PushEvent(&event) > 0;
+ if (SDL_GetEventState(SDL_DOLLARRECORD) == SDL_ENABLE) {
+ SDL_Event event;
+ event.dgesture.type = SDL_DOLLARRECORD;
+ event.dgesture.touchId = touch->id;
+ event.dgesture.gestureId = gestureId;
+ SDL_PushEvent(&event);
+ }
}
#endif
@@ -576,7 +585,7 @@
#if defined(ENABLE_DOLLAR)
if (inTouch->recording) {
inTouch->recording = SDL_FALSE;
- dollarNormalize(&inTouch->dollarPath,path);
+ dollarNormalize(&inTouch->dollarPath, path, SDL_TRUE);
/* PrintPath(path); */
if (recordAll) {
index = SDL_AddDollarGesture(NULL,path);
--- a/external/SDL2/src/events/SDL_gesture_c.h
+++ b/external/SDL2/src/events/SDL_gesture_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_keyboard.c
+++ b/external/SDL2/src/events/SDL_keyboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -878,7 +878,7 @@
{
SDL_Keyboard *keyboard = &SDL_keyboard;
- if (((int)scancode) < ((int)SDL_SCANCODE_UNKNOWN) || scancode >= SDL_NUM_SCANCODES) {
+ if (((int)scancode) < SDL_SCANCODE_UNKNOWN || scancode >= SDL_NUM_SCANCODES) {
SDL_InvalidParamError("scancode");
return 0;
}
@@ -905,7 +905,7 @@
SDL_GetScancodeName(SDL_Scancode scancode)
{
const char *name;
- if (((int)scancode) < ((int)SDL_SCANCODE_UNKNOWN) || scancode >= SDL_NUM_SCANCODES) {
+ if (((int)scancode) < SDL_SCANCODE_UNKNOWN || scancode >= SDL_NUM_SCANCODES) {
SDL_InvalidParamError("scancode");
return "";
}
--- a/external/SDL2/src/events/SDL_keyboard_c.h
+++ b/external/SDL2/src/events/SDL_keyboard_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_mouse.c
+++ b/external/SDL2/src/events/SDL_mouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,6 +27,7 @@
#include "SDL_timer.h"
#include "SDL_events.h"
#include "SDL_events_c.h"
+#include "../SDL_hints_c.h"
#include "../video/SDL_sysvideo.h"
#ifdef __WIN32__
#include "../core/windows/SDL_windows.h" // For GetDoubleClickTime()
@@ -100,11 +101,7 @@
{
SDL_Mouse *mouse = (SDL_Mouse *)userdata;
- if (hint && (*hint == '0' || SDL_strcasecmp(hint, "false") == 0)) {
- mouse->touch_mouse_events = SDL_FALSE;
- } else {
- mouse->touch_mouse_events = SDL_TRUE;
- }
+ mouse->touch_mouse_events = SDL_GetStringBoolean(hint, SDL_TRUE);
}
static void SDLCALL
@@ -111,19 +108,14 @@
SDL_MouseTouchEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
SDL_Mouse *mouse = (SDL_Mouse *)userdata;
+ SDL_bool default_value;
- if (hint == NULL || *hint == '\0') {
- /* Default */
#if defined(__ANDROID__) || (defined(__IPHONEOS__) && !defined(__TVOS__))
- mouse->mouse_touch_events = SDL_TRUE;
+ default_value = SDL_TRUE;
#else
- mouse->mouse_touch_events = SDL_FALSE;
+ default_value = SDL_FALSE;
#endif
- } else if (*hint == '1' || SDL_strcasecmp(hint, "true") == 0) {
- mouse->mouse_touch_events = SDL_TRUE;
- } else {
- mouse->mouse_touch_events = SDL_FALSE;
- }
+ mouse->mouse_touch_events = SDL_GetStringBoolean(hint, default_value);
if (mouse->mouse_touch_events) {
SDL_AddTouch(SDL_MOUSE_TOUCHID, SDL_TOUCH_DEVICE_DIRECT, "mouse_input");
@@ -339,7 +331,7 @@
if (window) {
float fx = (float)x / (float)window->w;
float fy = (float)y / (float)window->h;
- SDL_SendTouchMotion(SDL_MOUSE_TOUCHID, 0, fx, fy, 1.0f);
+ SDL_SendTouchMotion(SDL_MOUSE_TOUCHID, 0, window, fx, fy, 1.0f);
}
}
}
@@ -381,19 +373,16 @@
yrel = y - mouse->last_y;
}
- /* Drop events that don't change state */
- if (!xrel && !yrel) {
-#ifdef DEBUG_MOUSE
- printf("Mouse event didn't change state - dropped!\n");
-#endif
- return 0;
- }
-
/* Ignore relative motion when first positioning the mouse */
if (!mouse->has_position) {
xrel = 0;
yrel = 0;
mouse->has_position = SDL_TRUE;
+ } else if (!xrel && !yrel) { /* Drop events that don't change state */
+#ifdef DEBUG_MOUSE
+ printf("Mouse event didn't change state - dropped!\n");
+#endif
+ return 0;
}
/* Ignore relative motion positioning the first touch */
@@ -509,7 +498,7 @@
if (window) {
float fx = (float)mouse->x / (float)window->w;
float fy = (float)mouse->y / (float)window->h;
- SDL_SendTouch(SDL_MOUSE_TOUCHID, 0, track_mouse_down, fx, fy, 1.0f);
+ SDL_SendTouch(SDL_MOUSE_TOUCHID, 0, window, track_mouse_down, fx, fy, 1.0f);
}
}
}
--- a/external/SDL2/src/events/SDL_mouse_c.h
+++ b/external/SDL2/src/events/SDL_mouse_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_quit.c
+++ b/external/SDL2/src/events/SDL_quit.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_sysevents.h
+++ b/external/SDL2/src/events/SDL_sysevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_touch.c
+++ b/external/SDL2/src/events/SDL_touch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -239,7 +239,7 @@
}
int
-SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid,
+SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
SDL_bool down, float x, float y, float pressure)
{
int posted;
@@ -259,16 +259,6 @@
if (mouse->touch_mouse_events) {
/* FIXME: maybe we should only restrict to a few SDL_TouchDeviceType */
if (id != SDL_MOUSE_TOUCHID) {
- SDL_Window *window = SDL_GetMouseFocus();
- if (window == NULL) {
- /* Mouse focus may have been lost by e.g. the window resizing
- * due to device orientation change while the mouse state is
- * pressed (because its position is now out of the window).
- * SendMouse* will update mouse focus again after that, but
- * if those are never called then SDL might think the
- * 'mouse' has no focus at all. */
- window = SDL_GetKeyboardFocus();
- }
if (window) {
if (down) {
if (finger_touching == SDL_FALSE) {
@@ -332,6 +322,7 @@
event.tfinger.dx = 0;
event.tfinger.dy = 0;
event.tfinger.pressure = pressure;
+ event.tfinger.windowID = window ? SDL_GetWindowID(window) : 0;
posted = (SDL_PushEvent(&event) > 0);
}
} else {
@@ -344,7 +335,7 @@
if (SDL_GetEventState(SDL_FINGERUP) == SDL_ENABLE) {
SDL_Event event;
event.tfinger.type = SDL_FINGERUP;
- event.tfinger.touchId = id;
+ event.tfinger.touchId = id;
event.tfinger.fingerId = fingerid;
/* I don't trust the coordinates passed on fingerUp */
event.tfinger.x = finger->x;
@@ -352,6 +343,7 @@
event.tfinger.dx = 0;
event.tfinger.dy = 0;
event.tfinger.pressure = pressure;
+ event.tfinger.windowID = window ? SDL_GetWindowID(window) : 0;
posted = (SDL_PushEvent(&event) > 0);
}
@@ -361,7 +353,7 @@
}
int
-SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid,
+SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
float x, float y, float pressure)
{
SDL_Touch *touch;
@@ -382,7 +374,6 @@
{
if (mouse->touch_mouse_events) {
if (id != SDL_MOUSE_TOUCHID) {
- SDL_Window *window = SDL_GetMouseFocus();
if (window) {
if (finger_touching == SDL_TRUE && track_touchid == id && track_fingerid == fingerid) {
int pos_x = (int)(x * (float)window->w);
@@ -408,7 +399,7 @@
finger = SDL_GetFinger(touch,fingerid);
if (!finger) {
- return SDL_SendTouch(id, fingerid, SDL_TRUE, x, y, pressure);
+ return SDL_SendTouch(id, fingerid, window, SDL_TRUE, x, y, pressure);
}
xrel = x - finger->x;
@@ -440,6 +431,7 @@
event.tfinger.dx = xrel;
event.tfinger.dy = yrel;
event.tfinger.pressure = pressure;
+ event.tfinger.windowID = window ? SDL_GetWindowID(window) : 0;
posted = (SDL_PushEvent(&event) > 0);
}
return posted;
--- a/external/SDL2/src/events/SDL_touch_c.h
+++ b/external/SDL2/src/events/SDL_touch_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -44,11 +44,11 @@
extern SDL_Touch *SDL_GetTouch(SDL_TouchID id);
/* Send a touch down/up event for a touch */
-extern int SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid,
+extern int SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
SDL_bool down, float x, float y, float pressure);
/* Send a touch motion event for a touch */
-extern int SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid,
+extern int SDL_SendTouchMotion(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
float x, float y, float pressure);
/* Remove a touch */
--- a/external/SDL2/src/events/SDL_windowevents.c
+++ b/external/SDL2/src/events/SDL_windowevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/SDL_windowevents_c.h
+++ b/external/SDL2/src/events/SDL_windowevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/blank_cursor.h
+++ b/external/SDL2/src/events/blank_cursor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/default_cursor.h
+++ b/external/SDL2/src/events/default_cursor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/scancodes_darwin.h
+++ b/external/SDL2/src/events/scancodes_darwin.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/scancodes_linux.h
+++ b/external/SDL2/src/events/scancodes_linux.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/scancodes_windows.h
+++ b/external/SDL2/src/events/scancodes_windows.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/events/scancodes_xfree86.h
+++ b/external/SDL2/src/events/scancodes_xfree86.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -299,12 +299,12 @@
/* 115 */ SDL_SCANCODE_VOLUMEUP,
/* 116 */ SDL_SCANCODE_POWER,
/* 117 */ SDL_SCANCODE_KP_EQUALS,
- /* 118 */ SDL_SCANCODE_UNKNOWN, /* plusminus */
+ /* 118 */ SDL_SCANCODE_KP_PLUSMINUS, /* plusminus */
/* 119 */ SDL_SCANCODE_PAUSE,
/* 120 */ SDL_SCANCODE_UNKNOWN, /* XF86LaunchA */
- /* 121 */ SDL_SCANCODE_UNKNOWN, /* KP_Decimal */
- /* 122 */ SDL_SCANCODE_UNKNOWN, /* Hangul */
- /* 123 */ SDL_SCANCODE_UNKNOWN, /* Hangul_Hanja */
+ /* 121 */ SDL_SCANCODE_KP_COMMA, /* KP_Decimal */
+ /* 122 */ SDL_SCANCODE_LANG1, /* Hangul */
+ /* 123 */ SDL_SCANCODE_LANG2, /* Hangul_Hanja */
/* 124 */ SDL_SCANCODE_INTERNATIONAL3, /* Yen */
/* 125 */ SDL_SCANCODE_LGUI,
/* 126 */ SDL_SCANCODE_RGUI,
@@ -320,7 +320,7 @@
/* 136 */ SDL_SCANCODE_FIND,
/* 137 */ SDL_SCANCODE_CUT,
/* 138 */ SDL_SCANCODE_HELP,
- /* 139 */ SDL_SCANCODE_UNKNOWN, /* XF86MenuKB */
+ /* 139 */ SDL_SCANCODE_MENU, /* XF86MenuKB */
/* 140 */ SDL_SCANCODE_CALCULATOR,
/* 141 */ SDL_SCANCODE_UNKNOWN,
/* 142 */ SDL_SCANCODE_SLEEP,
@@ -360,8 +360,8 @@
/* 176 */ SDL_SCANCODE_UNKNOWN,
/* 177 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollUp */
/* 178 */ SDL_SCANCODE_UNKNOWN, /* XF86ScrollDown */
- /* 179 */ SDL_SCANCODE_UNKNOWN, /* parenleft */
- /* 180 */ SDL_SCANCODE_UNKNOWN, /* parenright */
+ /* 179 */ SDL_SCANCODE_KP_LEFTPAREN, /* parenleft */
+ /* 180 */ SDL_SCANCODE_KP_RIGHTPAREN, /* parenright */
/* 181 */ SDL_SCANCODE_UNKNOWN, /* XF86New */
/* 182 */ SDL_SCANCODE_AGAIN,
/* 183 */ SDL_SCANCODE_F13, /* XF86Tools */
@@ -371,7 +371,7 @@
/* 187 */ SDL_SCANCODE_F17, /* XF86Launch8 */
/* 188 */ SDL_SCANCODE_F18, /* XF86Launch9 */
/* 189 */ SDL_SCANCODE_F19, /* null keysym */
- /* 190 */ SDL_SCANCODE_UNKNOWN,
+ /* 190 */ SDL_SCANCODE_F20,
/* 191 */ SDL_SCANCODE_UNKNOWN,
/* 192 */ SDL_SCANCODE_UNKNOWN, /* XF86TouchpadToggle */
/* 193 */ SDL_SCANCODE_UNKNOWN,
@@ -389,7 +389,7 @@
/* 205 */ SDL_SCANCODE_UNKNOWN, /* XF86Suspend */
/* 206 */ SDL_SCANCODE_UNKNOWN, /* XF86Close */
/* 207 */ SDL_SCANCODE_AUDIOPLAY,
- /* 208 */ SDL_SCANCODE_AUDIONEXT,
+ /* 208 */ SDL_SCANCODE_AUDIOFASTFORWARD,
/* 209 */ SDL_SCANCODE_UNKNOWN,
/* 210 */ SDL_SCANCODE_PRINTSCREEN,
/* 211 */ SDL_SCANCODE_UNKNOWN,
--- a/external/SDL2/src/file/SDL_rwops.c
+++ b/external/SDL2/src/file/SDL_rwops.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -23,8 +23,10 @@
configure script knows the C runtime has it and enables it. */
#ifndef __QNXNTO__
/* Need this so Linux systems define fseek64o, ftell64o and off64_t */
+#ifndef _LARGEFILE64_SOURCE
#define _LARGEFILE64_SOURCE
#endif
+#endif
#include "../SDL_internal.h"
@@ -361,6 +363,22 @@
static Sint64 SDLCALL
stdio_seek(SDL_RWops * context, Sint64 offset, int whence)
{
+ int stdiowhence;
+
+ switch (whence) {
+ case RW_SEEK_SET:
+ stdiowhence = SEEK_SET;
+ break;
+ case RW_SEEK_CUR:
+ stdiowhence = SEEK_CUR;
+ break;
+ case RW_SEEK_END:
+ stdiowhence = SEEK_END;
+ break;
+ default:
+ return SDL_SetError("Unknown value for 'whence'");
+ }
+
#if defined(FSEEK_OFF_MIN) && defined(FSEEK_OFF_MAX)
if (offset < (Sint64)(FSEEK_OFF_MIN) || offset > (Sint64)(FSEEK_OFF_MAX)) {
return SDL_SetError("Seek offset out of range");
@@ -367,7 +385,7 @@
}
#endif
- if (fseek(context->hidden.stdio.fp, (fseek_off_t)offset, whence) == 0) {
+ if (fseek(context->hidden.stdio.fp, (fseek_off_t)offset, stdiowhence) == 0) {
Sint64 pos = ftell(context->hidden.stdio.fp);
if (pos < 0) {
return SDL_SetError("Couldn't get stream offset");
@@ -462,7 +480,7 @@
total_bytes = (maxnum * size);
if ((maxnum <= 0) || (size <= 0)
- || ((total_bytes / maxnum) != (size_t) size)) {
+ || ((total_bytes / maxnum) != size)) {
return 0;
}
@@ -585,7 +603,7 @@
if (fp == NULL) {
SDL_SetError("Couldn't open %s", file);
} else {
- rwops = SDL_RWFromFP(fp, 1);
+ rwops = SDL_RWFromFP(fp, SDL_TRUE);
}
}
#else
--- a/external/SDL2/src/file/cocoa/SDL_rwopsbundlesupport.h
+++ b/external/SDL2/src/file/cocoa/SDL_rwopsbundlesupport.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/file/cocoa/SDL_rwopsbundlesupport.m
+++ b/external/SDL2/src/file/cocoa/SDL_rwopsbundlesupport.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/android/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/android/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/cocoa/SDL_sysfilesystem.m
+++ b/external/SDL2/src/filesystem/cocoa/SDL_sysfilesystem.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/dummy/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/dummy/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/haiku/SDL_sysfilesystem.cc
+++ b/external/SDL2/src/filesystem/haiku/SDL_sysfilesystem.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/unix/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/unix/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -140,7 +140,7 @@
if (retval == NULL) {
/* older kernels don't have /proc/self ... try PID version... */
char path[64];
- const int rc = (int) SDL_snprintf(path, sizeof(path),
+ const int rc = SDL_snprintf(path, sizeof(path),
"/proc/%llu/exe",
(unsigned long long) getpid());
if ( (rc > 0) && (rc < sizeof(path)) ) {
--- a/external/SDL2/src/filesystem/windows/SDL_sysfilesystem.c
+++ b/external/SDL2/src/filesystem/windows/SDL_sysfilesystem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/filesystem/winrt/SDL_sysfilesystem.cpp
+++ b/external/SDL2/src/filesystem/winrt/SDL_sysfilesystem.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/SDL_haptic.c
+++ b/external/SDL2/src/haptic/SDL_haptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/SDL_haptic_c.h
+++ b/external/SDL2/src/haptic/SDL_haptic_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/SDL_syshaptic.h
+++ b/external/SDL2/src/haptic/SDL_syshaptic.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/android/SDL_syshaptic.c
+++ b/external/SDL2/src/haptic/android/SDL_syshaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/darwin/SDL_syshaptic.c
+++ b/external/SDL2/src/haptic/darwin/SDL_syshaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -599,6 +599,9 @@
int
SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick)
{
+ if (joystick->driver != &SDL_DARWIN_JoystickDriver) {
+ return SDL_FALSE;
+ }
if (joystick->hwdata->ffservice != 0) {
return SDL_TRUE;
}
@@ -612,6 +615,9 @@
int
SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick)
{
+ if (joystick->driver != &SDL_DARWIN_JoystickDriver) {
+ return 0;
+ }
if (IOObjectIsEqualTo((io_object_t) ((size_t)haptic->hwdata->device),
joystick->hwdata->ffservice)) {
return 1;
@@ -628,7 +634,10 @@
{
int device_index = 0;
SDL_hapticlist_item *item;
-
+
+ if (joystick->driver != &SDL_DARWIN_JoystickDriver) {
+ return -1;
+ }
for (item = SDL_hapticlist; item; item = item->next) {
if (IOObjectIsEqualTo((io_object_t) item->dev,
joystick->hwdata->ffservice)) {
--- a/external/SDL2/src/haptic/darwin/SDL_syshaptic_c.h
+++ b/external/SDL2/src/haptic/darwin/SDL_syshaptic_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/dummy/SDL_syshaptic.c
+++ b/external/SDL2/src/haptic/dummy/SDL_syshaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/linux/SDL_syshaptic.c
+++ b/external/SDL2/src/haptic/linux/SDL_syshaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -512,6 +512,9 @@
int
SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick)
{
+ if (joystick->driver != &SDL_LINUX_JoystickDriver) {
+ return 0;
+ }
return EV_IsHaptic(joystick->hwdata->fd);
}
@@ -522,6 +525,9 @@
int
SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick)
{
+ if (joystick->driver != &SDL_LINUX_JoystickDriver) {
+ return 0;
+ }
/* We are assuming Linux is using evdev which should trump the old
* joystick methods. */
if (SDL_strcmp(joystick->hwdata->fname, haptic->hwdata->fname) == 0) {
@@ -541,7 +547,10 @@
int fd;
int ret;
SDL_hapticlist_item *item;
-
+
+ if (joystick->driver != &SDL_LINUX_JoystickDriver) {
+ return -1;
+ }
/* Find the joystick in the haptic list. */
for (item = SDL_hapticlist; item; item = item->next) {
if (SDL_strcmp(item->fname, joystick->hwdata->fname) == 0) {
--- a/external/SDL2/src/haptic/windows/SDL_dinputhaptic.c
+++ b/external/SDL2/src/haptic/windows/SDL_dinputhaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/windows/SDL_dinputhaptic_c.h
+++ b/external/SDL2/src/haptic/windows/SDL_dinputhaptic_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/windows/SDL_windowshaptic.c
+++ b/external/SDL2/src/haptic/windows/SDL_windowshaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/windows/SDL_windowshaptic_c.h
+++ b/external/SDL2/src/haptic/windows/SDL_windowshaptic_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/windows/SDL_xinputhaptic.c
+++ b/external/SDL2/src/haptic/windows/SDL_xinputhaptic.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/haptic/windows/SDL_xinputhaptic_c.h
+++ b/external/SDL2/src/haptic/windows/SDL_xinputhaptic_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/hidapi/AUTHORS.txt
+++ b/external/SDL2/src/hidapi/AUTHORS.txt
@@ -12,5 +12,5 @@
For a comprehensive list of contributions, see the commit list at github:
- http://github.com/signal11/hidapi/commits/master
+ https://github.com/libusb/hidapi/commits/master
--- a/external/SDL2/src/hidapi/README.txt
+++ b/external/SDL2/src/hidapi/README.txt
@@ -122,7 +122,7 @@
Download
=========
HIDAPI can be downloaded from github
- git clone git://github.com/signal11/hidapi.git
+ git clone git://github.com/libusb/hidapi.git
Build Instructions
===================
--- /dev/null
+++ b/external/SDL2/src/hidapi/SDL_hidapi.c
@@ -1,0 +1,752 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/* Original hybrid wrapper for Linux by Valve Software. Their original notes:
+ *
+ * The libusb version doesn't support Bluetooth, but not all Linux
+ * distributions allow access to /dev/hidraw*
+ *
+ * This merges the two, at a small performance cost, until distributions
+ * have granted access to /dev/hidraw*
+ */
+
+#include "../SDL_internal.h"
+#include "SDL_loadso.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+/* Platform HIDAPI Implementation */
+
+#define hid_device_ PLATFORM_hid_device_
+#define hid_device PLATFORM_hid_device
+#define hid_device_info PLATFORM_hid_device_info
+#define hid_init PLATFORM_hid_init
+#define hid_exit PLATFORM_hid_exit
+#define hid_enumerate PLATFORM_hid_enumerate
+#define hid_free_enumeration PLATFORM_hid_free_enumeration
+#define hid_open PLATFORM_hid_open
+#define hid_open_path PLATFORM_hid_open_path
+#define hid_write PLATFORM_hid_write
+#define hid_read_timeout PLATFORM_hid_read_timeout
+#define hid_read PLATFORM_hid_read
+#define hid_set_nonblocking PLATFORM_hid_set_nonblocking
+#define hid_send_feature_report PLATFORM_hid_send_feature_report
+#define hid_get_feature_report PLATFORM_hid_get_feature_report
+#define hid_close PLATFORM_hid_close
+#define hid_get_manufacturer_string PLATFORM_hid_get_manufacturer_string
+#define hid_get_product_string PLATFORM_hid_get_product_string
+#define hid_get_serial_number_string PLATFORM_hid_get_serial_number_string
+#define hid_get_indexed_string PLATFORM_hid_get_indexed_string
+#define hid_error PLATFORM_hid_error
+#define new_hid_device PLATFORM_new_hid_device
+#define free_hid_device PLATFORM_free_hid_device
+#define input_report PLATFORM_input_report
+#define return_data PLATFORM_return_data
+#define make_path PLATFORM_make_path
+#define read_thread PLATFORM_read_thread
+
+#if __LINUX__
+
+#include "../../core/linux/SDL_udev.h"
+#if SDL_USE_LIBUDEV
+static const SDL_UDEV_Symbols *udev_ctx = NULL;
+
+#define udev_device_get_sysattr_value udev_ctx->udev_device_get_sysattr_value
+#define udev_new udev_ctx->udev_new
+#define udev_unref udev_ctx->udev_unref
+#define udev_device_new_from_devnum udev_ctx->udev_device_new_from_devnum
+#define udev_device_get_parent_with_subsystem_devtype udev_ctx->udev_device_get_parent_with_subsystem_devtype
+#define udev_device_unref udev_ctx->udev_device_unref
+#define udev_enumerate_new udev_ctx->udev_enumerate_new
+#define udev_enumerate_add_match_subsystem udev_ctx->udev_enumerate_add_match_subsystem
+#define udev_enumerate_scan_devices udev_ctx->udev_enumerate_scan_devices
+#define udev_enumerate_get_list_entry udev_ctx->udev_enumerate_get_list_entry
+#define udev_list_entry_get_name udev_ctx->udev_list_entry_get_name
+#define udev_device_new_from_syspath udev_ctx->udev_device_new_from_syspath
+#define udev_device_get_devnode udev_ctx->udev_device_get_devnode
+#define udev_list_entry_get_next udev_ctx->udev_list_entry_get_next
+#define udev_enumerate_unref udev_ctx->udev_enumerate_unref
+
+#include "linux/hid.c"
+#define HAVE_PLATFORM_BACKEND 1
+#endif /* SDL_USE_LIBUDEV */
+
+#elif __MACOSX__
+#include "mac/hid.c"
+#define HAVE_PLATFORM_BACKEND 1
+#define udev_ctx 1
+#elif __WINDOWS__
+#include "windows/hid.c"
+#define HAVE_PLATFORM_BACKEND 1
+#define udev_ctx 1
+#else
+#error Need a hid.c for this platform!
+#endif
+
+#undef hid_device_
+#undef hid_device
+#undef hid_device_info
+#undef hid_init
+#undef hid_exit
+#undef hid_enumerate
+#undef hid_free_enumeration
+#undef hid_open
+#undef hid_open_path
+#undef hid_write
+#undef hid_read_timeout
+#undef hid_read
+#undef hid_set_nonblocking
+#undef hid_send_feature_report
+#undef hid_get_feature_report
+#undef hid_close
+#undef hid_get_manufacturer_string
+#undef hid_get_product_string
+#undef hid_get_serial_number_string
+#undef hid_get_indexed_string
+#undef hid_error
+#undef new_hid_device
+#undef free_hid_device
+#undef input_report
+#undef return_data
+#undef make_path
+#undef read_thread
+
+#ifdef SDL_LIBUSB_DYNAMIC
+/* libusb HIDAPI Implementation */
+
+/* Include this now, for our dynamically-loaded libusb context */
+#include <libusb.h>
+
+static struct
+{
+ void* libhandle;
+
+ int (*init)(libusb_context **ctx);
+ void (*exit)(libusb_context *ctx);
+ ssize_t (*get_device_list)(libusb_context *ctx, libusb_device ***list);
+ void (*free_device_list)(libusb_device **list, int unref_devices);
+ int (*get_device_descriptor)(libusb_device *dev, struct libusb_device_descriptor *desc);
+ int (*get_active_config_descriptor)(libusb_device *dev, struct libusb_config_descriptor **config);
+ int (*get_config_descriptor)(
+ libusb_device *dev,
+ uint8_t config_index,
+ struct libusb_config_descriptor **config
+ );
+ void (*free_config_descriptor)(struct libusb_config_descriptor *config);
+ uint8_t (*get_bus_number)(libusb_device *dev);
+ uint8_t (*get_device_address)(libusb_device *dev);
+ int (*open)(libusb_device *dev, libusb_device_handle **dev_handle);
+ void (*close)(libusb_device_handle *dev_handle);
+ int (*claim_interface)(libusb_device_handle *dev_handle, int interface_number);
+ int (*release_interface)(libusb_device_handle *dev_handle, int interface_number);
+ int (*kernel_driver_active)(libusb_device_handle *dev_handle, int interface_number);
+ int (*detach_kernel_driver)(libusb_device_handle *dev_handle, int interface_number);
+ int (*attach_kernel_driver)(libusb_device_handle *dev_handle, int interface_number);
+ int (*set_interface_alt_setting)(libusb_device_handle *dev, int interface_number, int alternate_setting);
+ struct libusb_transfer * (*alloc_transfer)(int iso_packets);
+ int (*submit_transfer)(struct libusb_transfer *transfer);
+ int (*cancel_transfer)(struct libusb_transfer *transfer);
+ void (*free_transfer)(struct libusb_transfer *transfer);
+ int (*control_transfer)(
+ libusb_device_handle *dev_handle,
+ uint8_t request_type,
+ uint8_t bRequest,
+ uint16_t wValue,
+ uint16_t wIndex,
+ unsigned char *data,
+ uint16_t wLength,
+ unsigned int timeout
+ );
+ int (*interrupt_transfer)(
+ libusb_device_handle *dev_handle,
+ unsigned char endpoint,
+ unsigned char *data,
+ int length,
+ int *actual_length,
+ unsigned int timeout
+ );
+ int (*handle_events)(libusb_context *ctx);
+ int (*handle_events_completed)(libusb_context *ctx, int *completed);
+} libusb_ctx;
+
+#define libusb_init libusb_ctx.init
+#define libusb_exit libusb_ctx.exit
+#define libusb_get_device_list libusb_ctx.get_device_list
+#define libusb_free_device_list libusb_ctx.free_device_list
+#define libusb_get_device_descriptor libusb_ctx.get_device_descriptor
+#define libusb_get_active_config_descriptor libusb_ctx.get_active_config_descriptor
+#define libusb_get_config_descriptor libusb_ctx.get_config_descriptor
+#define libusb_free_config_descriptor libusb_ctx.free_config_descriptor
+#define libusb_get_bus_number libusb_ctx.get_bus_number
+#define libusb_get_device_address libusb_ctx.get_device_address
+#define libusb_open libusb_ctx.open
+#define libusb_close libusb_ctx.close
+#define libusb_claim_interface libusb_ctx.claim_interface
+#define libusb_release_interface libusb_ctx.release_interface
+#define libusb_kernel_driver_active libusb_ctx.kernel_driver_active
+#define libusb_detach_kernel_driver libusb_ctx.detach_kernel_driver
+#define libusb_attach_kernel_driver libusb_ctx.attach_kernel_driver
+#define libusb_set_interface_alt_setting libusb_ctx.set_interface_alt_setting
+#define libusb_alloc_transfer libusb_ctx.alloc_transfer
+#define libusb_submit_transfer libusb_ctx.submit_transfer
+#define libusb_cancel_transfer libusb_ctx.cancel_transfer
+#define libusb_free_transfer libusb_ctx.free_transfer
+#define libusb_control_transfer libusb_ctx.control_transfer
+#define libusb_interrupt_transfer libusb_ctx.interrupt_transfer
+#define libusb_handle_events libusb_ctx.handle_events
+#define libusb_handle_events_completed libusb_ctx.handle_events_completed
+
+#define hid_device_ LIBUSB_hid_device_
+#define hid_device LIBUSB_hid_device
+#define hid_device_info LIBUSB_hid_device_info
+#define hid_init LIBUSB_hid_init
+#define hid_exit LIBUSB_hid_exit
+#define hid_enumerate LIBUSB_hid_enumerate
+#define hid_free_enumeration LIBUSB_hid_free_enumeration
+#define hid_open LIBUSB_hid_open
+#define hid_open_path LIBUSB_hid_open_path
+#define hid_write LIBUSB_hid_write
+#define hid_read_timeout LIBUSB_hid_read_timeout
+#define hid_read LIBUSB_hid_read
+#define hid_set_nonblocking LIBUSB_hid_set_nonblocking
+#define hid_send_feature_report LIBUSB_hid_send_feature_report
+#define hid_get_feature_report LIBUSB_hid_get_feature_report
+#define hid_close LIBUSB_hid_close
+#define hid_get_manufacturer_string LIBUSB_hid_get_manufacturer_string
+#define hid_get_product_string LIBUSB_hid_get_product_string
+#define hid_get_serial_number_string LIBUSB_hid_get_serial_number_string
+#define hid_get_indexed_string LIBUSB_hid_get_indexed_string
+#define hid_error LIBUSB_hid_error
+#define new_hid_device LIBUSB_new_hid_device
+#define free_hid_device LIBUSB_free_hid_device
+#define input_report LIBUSB_input_report
+#define return_data LIBUSB_return_data
+#define make_path LIBUSB_make_path
+#define read_thread LIBUSB_read_thread
+
+#ifndef __FreeBSD__
+/* this is awkwardly inlined, so we need to re-implement it here
+ * so we can override the libusb_control_transfer call */
+static int
+SDL_libusb_get_string_descriptor(libusb_device_handle *dev,
+ uint8_t descriptor_index, uint16_t lang_id,
+ unsigned char *data, int length)
+{
+ return libusb_control_transfer(dev,
+ LIBUSB_ENDPOINT_IN | 0x0, /* Endpoint 0 IN */
+ LIBUSB_REQUEST_GET_DESCRIPTOR,
+ (LIBUSB_DT_STRING << 8) | descriptor_index,
+ lang_id,
+ data,
+ (uint16_t) length,
+ 1000);
+}
+#define libusb_get_string_descriptor SDL_libusb_get_string_descriptor
+#endif /* __FreeBSD__ */
+
+#undef HIDAPI_H__
+#include "libusb/hid.c"
+
+#undef hid_device_
+#undef hid_device
+#undef hid_device_info
+#undef hid_init
+#undef hid_exit
+#undef hid_enumerate
+#undef hid_free_enumeration
+#undef hid_open
+#undef hid_open_path
+#undef hid_write
+#undef hid_read_timeout
+#undef hid_read
+#undef hid_set_nonblocking
+#undef hid_send_feature_report
+#undef hid_get_feature_report
+#undef hid_close
+#undef hid_get_manufacturer_string
+#undef hid_get_product_string
+#undef hid_get_serial_number_string
+#undef hid_get_indexed_string
+#undef hid_error
+#undef new_hid_device
+#undef free_hid_device
+#undef input_report
+#undef return_data
+#undef make_path
+#undef read_thread
+
+#endif /* SDL_LIBUSB_DYNAMIC */
+
+/* Shared HIDAPI Implementation */
+
+#undef HIDAPI_H__
+#include "hidapi.h"
+
+struct hidapi_backend {
+#define F(x) typeof(x) *x
+ F(hid_write);
+ F(hid_read_timeout);
+ F(hid_read);
+ F(hid_set_nonblocking);
+ F(hid_send_feature_report);
+ F(hid_get_feature_report);
+ F(hid_close);
+ F(hid_get_manufacturer_string);
+ F(hid_get_product_string);
+ F(hid_get_serial_number_string);
+ F(hid_get_indexed_string);
+ F(hid_error);
+#undef F
+};
+
+#if HAVE_PLATFORM_BACKEND
+static const struct hidapi_backend PLATFORM_Backend = {
+ (void*)PLATFORM_hid_write,
+ (void*)PLATFORM_hid_read_timeout,
+ (void*)PLATFORM_hid_read,
+ (void*)PLATFORM_hid_set_nonblocking,
+ (void*)PLATFORM_hid_send_feature_report,
+ (void*)PLATFORM_hid_get_feature_report,
+ (void*)PLATFORM_hid_close,
+ (void*)PLATFORM_hid_get_manufacturer_string,
+ (void*)PLATFORM_hid_get_product_string,
+ (void*)PLATFORM_hid_get_serial_number_string,
+ (void*)PLATFORM_hid_get_indexed_string,
+ (void*)PLATFORM_hid_error
+};
+#endif /* HAVE_PLATFORM_BACKEND */
+
+#ifdef SDL_LIBUSB_DYNAMIC
+static const struct hidapi_backend LIBUSB_Backend = {
+ (void*)LIBUSB_hid_write,
+ (void*)LIBUSB_hid_read_timeout,
+ (void*)LIBUSB_hid_read,
+ (void*)LIBUSB_hid_set_nonblocking,
+ (void*)LIBUSB_hid_send_feature_report,
+ (void*)LIBUSB_hid_get_feature_report,
+ (void*)LIBUSB_hid_close,
+ (void*)LIBUSB_hid_get_manufacturer_string,
+ (void*)LIBUSB_hid_get_product_string,
+ (void*)LIBUSB_hid_get_serial_number_string,
+ (void*)LIBUSB_hid_get_indexed_string,
+ (void*)LIBUSB_hid_error
+};
+#endif /* SDL_LIBUSB_DYNAMIC */
+
+typedef struct _HIDDeviceWrapper HIDDeviceWrapper;
+struct _HIDDeviceWrapper
+{
+ hid_device *device; /* must be first field */
+ const struct hidapi_backend *backend;
+};
+
+static HIDDeviceWrapper *
+CreateHIDDeviceWrapper(hid_device *device, const struct hidapi_backend *backend)
+{
+ HIDDeviceWrapper *ret = SDL_malloc(sizeof(*ret));
+ ret->device = device;
+ ret->backend = backend;
+ return ret;
+}
+
+static hid_device *
+WrapHIDDevice(HIDDeviceWrapper *wrapper)
+{
+ return (hid_device *)wrapper;
+}
+
+static HIDDeviceWrapper *
+UnwrapHIDDevice(hid_device *device)
+{
+ return (HIDDeviceWrapper *)device;
+}
+
+static void
+DeleteHIDDeviceWrapper(HIDDeviceWrapper *device)
+{
+ SDL_free(device);
+}
+
+#define COPY_IF_EXISTS(var) \
+ if (pSrc->var != NULL) { \
+ pDst->var = SDL_strdup(pSrc->var); \
+ } else { \
+ pDst->var = NULL; \
+ }
+#define WCOPY_IF_EXISTS(var) \
+ if (pSrc->var != NULL) { \
+ pDst->var = SDL_wcsdup(pSrc->var); \
+ } else { \
+ pDst->var = NULL; \
+ }
+
+#ifdef SDL_LIBUSB_DYNAMIC
+static void
+LIBUSB_CopyHIDDeviceInfo(struct LIBUSB_hid_device_info *pSrc,
+ struct hid_device_info *pDst)
+{
+ COPY_IF_EXISTS(path)
+ pDst->vendor_id = pSrc->vendor_id;
+ pDst->product_id = pSrc->product_id;
+ WCOPY_IF_EXISTS(serial_number)
+ pDst->release_number = pSrc->release_number;
+ WCOPY_IF_EXISTS(manufacturer_string)
+ WCOPY_IF_EXISTS(product_string)
+ pDst->usage_page = pSrc->usage_page;
+ pDst->usage = pSrc->usage;
+ pDst->interface_number = pSrc->interface_number;
+ pDst->interface_class = pSrc->interface_class;
+ pDst->interface_subclass = pSrc->interface_subclass;
+ pDst->interface_protocol = pSrc->interface_protocol;
+ pDst->next = NULL;
+}
+#endif /* SDL_LIBUSB_DYNAMIC */
+
+#if HAVE_PLATFORM_BACKEND
+static void
+PLATFORM_CopyHIDDeviceInfo(struct PLATFORM_hid_device_info *pSrc,
+ struct hid_device_info *pDst)
+{
+ COPY_IF_EXISTS(path)
+ pDst->vendor_id = pSrc->vendor_id;
+ pDst->product_id = pSrc->product_id;
+ WCOPY_IF_EXISTS(serial_number)
+ pDst->release_number = pSrc->release_number;
+ WCOPY_IF_EXISTS(manufacturer_string)
+ WCOPY_IF_EXISTS(product_string)
+ pDst->usage_page = pSrc->usage_page;
+ pDst->usage = pSrc->usage;
+ pDst->interface_number = pSrc->interface_number;
+ pDst->interface_class = pSrc->interface_class;
+ pDst->interface_subclass = pSrc->interface_subclass;
+ pDst->interface_protocol = pSrc->interface_protocol;
+ pDst->next = NULL;
+}
+#endif /* HAVE_PLATFORM_BACKEND */
+
+#undef COPY_IF_EXISTS
+#undef WCOPY_IF_EXISTS
+
+static SDL_bool SDL_hidapi_wasinit = SDL_FALSE;
+
+int HID_API_EXPORT HID_API_CALL hid_init(void)
+{
+ int err;
+
+ if (SDL_hidapi_wasinit == SDL_TRUE) {
+ return 0;
+ }
+
+#ifdef SDL_LIBUSB_DYNAMIC
+ libusb_ctx.libhandle = SDL_LoadObject(SDL_LIBUSB_DYNAMIC);
+ if (libusb_ctx.libhandle != NULL) {
+ #define LOAD_LIBUSB_SYMBOL(func) \
+ libusb_ctx.func = SDL_LoadFunction(libusb_ctx.libhandle, "libusb_" #func);
+ LOAD_LIBUSB_SYMBOL(init)
+ LOAD_LIBUSB_SYMBOL(exit)
+ LOAD_LIBUSB_SYMBOL(get_device_list)
+ LOAD_LIBUSB_SYMBOL(free_device_list)
+ LOAD_LIBUSB_SYMBOL(get_device_descriptor)
+ LOAD_LIBUSB_SYMBOL(get_active_config_descriptor)
+ LOAD_LIBUSB_SYMBOL(get_config_descriptor)
+ LOAD_LIBUSB_SYMBOL(free_config_descriptor)
+ LOAD_LIBUSB_SYMBOL(get_bus_number)
+ LOAD_LIBUSB_SYMBOL(get_device_address)
+ LOAD_LIBUSB_SYMBOL(open)
+ LOAD_LIBUSB_SYMBOL(close)
+ LOAD_LIBUSB_SYMBOL(claim_interface)
+ LOAD_LIBUSB_SYMBOL(release_interface)
+ LOAD_LIBUSB_SYMBOL(kernel_driver_active)
+ LOAD_LIBUSB_SYMBOL(detach_kernel_driver)
+ LOAD_LIBUSB_SYMBOL(attach_kernel_driver)
+ LOAD_LIBUSB_SYMBOL(set_interface_alt_setting)
+ LOAD_LIBUSB_SYMBOL(alloc_transfer)
+ LOAD_LIBUSB_SYMBOL(submit_transfer)
+ LOAD_LIBUSB_SYMBOL(cancel_transfer)
+ LOAD_LIBUSB_SYMBOL(free_transfer)
+ LOAD_LIBUSB_SYMBOL(control_transfer)
+ LOAD_LIBUSB_SYMBOL(interrupt_transfer)
+ LOAD_LIBUSB_SYMBOL(handle_events)
+ LOAD_LIBUSB_SYMBOL(handle_events_completed)
+ #undef LOAD_LIBUSB_SYMBOL
+
+ if ((err = LIBUSB_hid_init()) < 0) {
+ SDL_UnloadObject(libusb_ctx.libhandle);
+ return err;
+ }
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+
+#if HAVE_PLATFORM_BACKEND
+#if __LINUX__
+ udev_ctx = SDL_UDEV_GetUdevSyms();
+#endif /* __LINUX __ */
+ if (udev_ctx && (err = PLATFORM_hid_init()) < 0) {
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
+ SDL_UnloadObject(libusb_ctx.libhandle);
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+ return err;
+ }
+#endif /* HAVE_PLATFORM_BACKEND */
+
+ return 0;
+}
+
+int HID_API_EXPORT HID_API_CALL hid_exit(void)
+{
+ int err = 0;
+
+ if (SDL_hidapi_wasinit == SDL_FALSE) {
+ return 0;
+ }
+
+#if HAVE_PLATFORM_BACKEND
+ if (udev_ctx) {
+ err = PLATFORM_hid_exit();
+ }
+#endif /* HAVE_PLATFORM_BACKEND */
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
+ err |= LIBUSB_hid_exit(); /* Ehhhhh */
+ SDL_UnloadObject(libusb_ctx.libhandle);
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+ return err;
+}
+
+struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id)
+{
+#ifdef SDL_LIBUSB_DYNAMIC
+ struct LIBUSB_hid_device_info *usb_devs = NULL;
+ struct LIBUSB_hid_device_info *usb_dev;
+#endif
+#if HAVE_PLATFORM_BACKEND
+ struct PLATFORM_hid_device_info *raw_devs = NULL;
+ struct PLATFORM_hid_device_info *raw_dev;
+#endif
+ struct hid_device_info *devs = NULL, *last = NULL, *new_dev;
+
+ if (SDL_hidapi_wasinit == SDL_FALSE) {
+ hid_init();
+ }
+
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
+ usb_devs = LIBUSB_hid_enumerate(vendor_id, product_id);
+ for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
+ new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info));
+ LIBUSB_CopyHIDDeviceInfo(usb_dev, new_dev);
+
+ if (last != NULL) {
+ last->next = new_dev;
+ } else {
+ devs = new_dev;
+ }
+ last = new_dev;
+ }
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+
+#if HAVE_PLATFORM_BACKEND
+ if (udev_ctx) {
+ raw_devs = PLATFORM_hid_enumerate(vendor_id, product_id);
+ for (raw_dev = raw_devs; raw_dev; raw_dev = raw_dev->next) {
+ SDL_bool bFound = SDL_FALSE;
+#ifdef SDL_LIBUSB_DYNAMIC
+ for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
+ if (raw_dev->vendor_id == usb_dev->vendor_id &&
+ raw_dev->product_id == usb_dev->product_id &&
+ (raw_dev->interface_number < 0 || raw_dev->interface_number == usb_dev->interface_number)) {
+ bFound = SDL_TRUE;
+ break;
+ }
+ }
+#endif
+ if (!bFound) {
+ new_dev = (struct hid_device_info*) SDL_malloc(sizeof(struct hid_device_info));
+ PLATFORM_CopyHIDDeviceInfo(raw_dev, new_dev);
+ new_dev->next = NULL;
+
+ if (last != NULL) {
+ last->next = new_dev;
+ } else {
+ devs = new_dev;
+ }
+ last = new_dev;
+ }
+ }
+ PLATFORM_hid_free_enumeration(raw_devs);
+ }
+#endif /* HAVE_PLATFORM_BACKEND */
+
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle) {
+ LIBUSB_hid_free_enumeration(usb_devs);
+ }
+#endif
+ return devs;
+}
+
+void HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *devs)
+{
+ while (devs) {
+ struct hid_device_info *next = devs->next;
+ SDL_free(devs->path);
+ SDL_free(devs->serial_number);
+ SDL_free(devs->manufacturer_string);
+ SDL_free(devs->product_string);
+ SDL_free(devs);
+ devs = next;
+ }
+}
+
+HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
+{
+ hid_device *pDevice = NULL;
+
+ if (SDL_hidapi_wasinit == SDL_FALSE) {
+ hid_init();
+ }
+
+#if HAVE_PLATFORM_BACKEND
+ if (udev_ctx &&
+ (pDevice = (hid_device*) PLATFORM_hid_open(vendor_id, product_id, serial_number)) != NULL) {
+
+ HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend);
+ return WrapHIDDevice(wrapper);
+ }
+#endif /* HAVE_PLATFORM_BACKEND */
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle &&
+ (pDevice = (hid_device*) LIBUSB_hid_open(vendor_id, product_id, serial_number)) != NULL) {
+
+ HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend);
+ return WrapHIDDevice(wrapper);
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+ return NULL;
+}
+
+HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path, int bExclusive /* = false */)
+{
+ hid_device *pDevice = NULL;
+
+ if (SDL_hidapi_wasinit == SDL_FALSE) {
+ hid_init();
+ }
+
+#if HAVE_PLATFORM_BACKEND
+ if (udev_ctx &&
+ (pDevice = (hid_device*) PLATFORM_hid_open_path(path, bExclusive)) != NULL) {
+
+ HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &PLATFORM_Backend);
+ return WrapHIDDevice(wrapper);
+ }
+#endif /* HAVE_PLATFORM_BACKEND */
+#ifdef SDL_LIBUSB_DYNAMIC
+ if (libusb_ctx.libhandle &&
+ (pDevice = (hid_device*) LIBUSB_hid_open_path(path, bExclusive)) != NULL) {
+
+ HIDDeviceWrapper *wrapper = CreateHIDDeviceWrapper(pDevice, &LIBUSB_Backend);
+ return WrapHIDDevice(wrapper);
+ }
+#endif /* SDL_LIBUSB_DYNAMIC */
+ return NULL;
+}
+
+int HID_API_EXPORT HID_API_CALL hid_write(hid_device *device, const unsigned char *data, size_t length)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_write(wrapper->device, data, length);
+}
+
+int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *device, unsigned char *data, size_t length, int milliseconds)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_read_timeout(wrapper->device, data, length, milliseconds);
+}
+
+int HID_API_EXPORT HID_API_CALL hid_read(hid_device *device, unsigned char *data, size_t length)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_read(wrapper->device, data, length);
+}
+
+int HID_API_EXPORT HID_API_CALL hid_set_nonblocking(hid_device *device, int nonblock)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_set_nonblocking(wrapper->device, nonblock);
+}
+
+int HID_API_EXPORT HID_API_CALL hid_send_feature_report(hid_device *device, const unsigned char *data, size_t length)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_send_feature_report(wrapper->device, data, length);
+}
+
+int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *device, unsigned char *data, size_t length)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_get_feature_report(wrapper->device, data, length);
+}
+
+void HID_API_EXPORT HID_API_CALL hid_close(hid_device *device)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ wrapper->backend->hid_close(wrapper->device);
+ DeleteHIDDeviceWrapper(wrapper);
+}
+
+int HID_API_EXPORT_CALL hid_get_manufacturer_string(hid_device *device, wchar_t *string, size_t maxlen)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_get_manufacturer_string(wrapper->device, string, maxlen);
+}
+
+int HID_API_EXPORT_CALL hid_get_product_string(hid_device *device, wchar_t *string, size_t maxlen)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_get_product_string(wrapper->device, string, maxlen);
+}
+
+int HID_API_EXPORT_CALL hid_get_serial_number_string(hid_device *device, wchar_t *string, size_t maxlen)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_get_serial_number_string(wrapper->device, string, maxlen);
+}
+
+int HID_API_EXPORT_CALL hid_get_indexed_string(hid_device *device, int string_index, wchar_t *string, size_t maxlen)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_get_indexed_string(wrapper->device, string_index, string, maxlen);
+}
+
+HID_API_EXPORT const wchar_t* HID_API_CALL hid_error(hid_device *device)
+{
+ HIDDeviceWrapper *wrapper = UnwrapHIDDevice(device);
+ return wrapper->backend->hid_error(wrapper->device);
+}
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set sts=4 ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/hidapi/android/hid.cpp
+++ b/external/SDL2/src/hidapi/android/hid.cpp
@@ -739,7 +739,7 @@
JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceReleaseCallback)(JNIEnv *env, jobject thiz);
extern "C"
-JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface );
+JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface, int nInterfaceClass, int nInterfaceSubclass, int nInterfaceProtocol );
extern "C"
JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceOpenPending)(JNIEnv *env, jobject thiz, int nDeviceID);
@@ -828,7 +828,7 @@
}
extern "C"
-JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface )
+JNIEXPORT void JNICALL HID_DEVICE_MANAGER_JAVA_INTERFACE(HIDDeviceConnected)(JNIEnv *env, jobject thiz, int nDeviceID, jstring sIdentifier, int nVendorId, int nProductId, jstring sSerialNumber, int nReleaseNumber, jstring sManufacturer, jstring sProduct, int nInterface, int nInterfaceClass, int nInterfaceSubclass, int nInterfaceProtocol )
{
LOGV( "HIDDeviceConnected() id=%d VID/PID = %.4x/%.4x, interface %d\n", nDeviceID, nVendorId, nProductId, nInterface );
@@ -842,6 +842,9 @@
pInfo->manufacturer_string = CreateWStringFromJString( env, sManufacturer );
pInfo->product_string = CreateWStringFromJString( env, sProduct );
pInfo->interface_number = nInterface;
+ pInfo->interface_class = nInterfaceClass;
+ pInfo->interface_subclass = nInterfaceSubclass;
+ pInfo->interface_protocol = nInterfaceProtocol;
hid_device_ref<CHIDDevice> pDevice( new CHIDDevice( nDeviceID, pInfo ) );
--- a/external/SDL2/src/hidapi/hidapi/hidapi.h
+++ b/external/SDL2/src/hidapi/hidapi/hidapi.h
@@ -17,7 +17,7 @@
files located at the root of the source distribution.
These files may also be found in the public source
code repository located at:
- http://github.com/signal11/hidapi .
+ https://github.com/libusb/hidapi .
********************************************************/
/** @file
@@ -33,9 +33,13 @@
#define HID_API_EXPORT __declspec(dllexport)
#define HID_API_CALL
#else
+#ifndef HID_API_EXPORT
#define HID_API_EXPORT /**< API export macro */
+#endif
+#ifndef HID_API_CALL
#define HID_API_CALL /**< API call macro */
#endif
+#endif
#define HID_API_EXPORT_CALL HID_API_EXPORT HID_API_CALL /**< API export and call macro*/
@@ -77,6 +81,12 @@
in all cases, and valid on the Windows implementation
only if the device contains more than one interface. */
int interface_number;
+
+ /** Additional information about the USB interface.
+ Valid on libusb and Android implementations. */
+ int interface_class;
+ int interface_subclass;
+ int interface_protocol;
/** Pointer to the next device */
struct hid_device_info *next;
binary files a/external/SDL2/src/hidapi/ios/hid.m b/external/SDL2/src/hidapi/ios/hid.m differ
--- a/external/SDL2/src/hidapi/libusb/hid.c
+++ b/external/SDL2/src/hidapi/libusb/hid.c
@@ -20,39 +20,21 @@
files located at the root of the source distribution.
These files may also be found in the public source
code repository located at:
- http://github.com/signal11/hidapi .
+ https://github.com/libusb/hidapi .
********************************************************/
+
+/* This file is heavily modified from the original libusb.c, for portability.
+ * Last upstream update was from July 25, 2019, Git commit 93dca807.
+ */
+
#include "../../SDL_internal.h"
+#include "SDL_thread.h"
+#include "SDL_mutex.h"
#ifdef SDL_JOYSTICK_HIDAPI
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE /* needed for wcsdup() before glibc 2.10 */
-#endif
-
-/* C */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <locale.h>
-#include <errno.h>
-
-/* Unix */
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <sys/utsname.h>
-#include <fcntl.h>
-#include <pthread.h>
-#include <wchar.h>
-
-/* GNU / LibUSB */
#include <libusb.h>
-#ifndef __ANDROID__
-#include <iconv.h>
-#endif
+#include <locale.h> /* setlocale */
#include "hidapi.h"
@@ -61,33 +43,36 @@
{
#endif
-#ifdef __ANDROID__
-
/* Barrier implementation because Android/Bionic don't have pthread_barrier.
This implementation came from Brent Priddy and was posted on
StackOverflow. It is used with his permission. */
-typedef int pthread_barrierattr_t;
-typedef struct pthread_barrier {
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- int count;
- int trip_count;
-} pthread_barrier_t;
-static int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
+typedef struct _SDL_ThreadBarrier
{
- if(count == 0) {
- errno = EINVAL;
- return -1;
+ SDL_mutex *mutex;
+ SDL_cond *cond;
+ Uint32 count;
+ Uint32 trip_count;
+} SDL_ThreadBarrier;
+
+static int SDL_CreateThreadBarrier(SDL_ThreadBarrier *barrier, Uint32 count)
+{
+ if (barrier == NULL) {
+ return SDL_SetError("barrier must be non-NULL");
}
+ if (count == 0) {
+ return SDL_SetError("count must be > 0");
+ }
- if(pthread_mutex_init(&barrier->mutex, 0) < 0) {
- return -1;
+ barrier->mutex = SDL_CreateMutex();
+ if (barrier->mutex == NULL) {
+ return -1; /* Error set by CreateMutex */
}
- if(pthread_cond_init(&barrier->cond, 0) < 0) {
- pthread_mutex_destroy(&barrier->mutex);
- return -1;
+ barrier->cond = SDL_CreateCond();
+ if (barrier->cond == NULL) {
+ return -1; /* Error set by CreateCond */
}
+
barrier->trip_count = count;
barrier->count = 0;
@@ -94,34 +79,27 @@
return 0;
}
-static int pthread_barrier_destroy(pthread_barrier_t *barrier)
+static void SDL_DestroyThreadBarrier(SDL_ThreadBarrier *barrier)
{
- pthread_cond_destroy(&barrier->cond);
- pthread_mutex_destroy(&barrier->mutex);
- return 0;
+ SDL_DestroyCond(barrier->cond);
+ SDL_DestroyMutex(barrier->mutex);
}
-static int pthread_barrier_wait(pthread_barrier_t *barrier)
+static int SDL_WaitThreadBarrier(SDL_ThreadBarrier *barrier)
{
- pthread_mutex_lock(&barrier->mutex);
- ++(barrier->count);
- if(barrier->count >= barrier->trip_count)
- {
+ SDL_LockMutex(barrier->mutex);
+ barrier->count += 1;
+ if (barrier->count >= barrier->trip_count) {
barrier->count = 0;
- pthread_cond_broadcast(&barrier->cond);
- pthread_mutex_unlock(&barrier->mutex);
+ SDL_CondBroadcast(barrier->cond);
+ SDL_UnlockMutex(barrier->mutex);
return 1;
}
- else
- {
- pthread_cond_wait(&barrier->cond, &(barrier->mutex));
- pthread_mutex_unlock(&barrier->mutex);
- return 0;
- }
+ SDL_CondWait(barrier->cond, barrier->mutex);
+ SDL_UnlockMutex(barrier->mutex);
+ return 0;
}
-#endif
-
#if defined(__cplusplus) && !defined(NAMESPACE)
extern "C" {
#endif
@@ -163,6 +141,7 @@
/* The interface number of the HID */
int interface;
+ int detached_driver;
/* Indexes of Strings */
int manufacturer_index;
@@ -173,10 +152,10 @@
int blocking; /* boolean */
/* Read thread objects */
- pthread_t thread;
- pthread_mutex_t mutex; /* Protects input_reports */
- pthread_cond_t condition;
- pthread_barrier_t barrier; /* Ensures correct startup sequence */
+ SDL_Thread *thread;
+ SDL_mutex *mutex; /* Protects input_reports */
+ SDL_cond *condition;
+ SDL_ThreadBarrier barrier; /* Ensures correct startup sequence */
int shutdown_thread;
int cancelled;
struct libusb_transfer *transfer;
@@ -192,12 +171,12 @@
static hid_device *new_hid_device(void)
{
- hid_device *dev = (hid_device *)calloc(1, sizeof(hid_device));
+ hid_device *dev = (hid_device*) calloc(1, sizeof(hid_device));
dev->blocking = 1;
- pthread_mutex_init(&dev->mutex, NULL);
- pthread_cond_init(&dev->condition, NULL);
- pthread_barrier_init(&dev->barrier, NULL, 2);
+ dev->mutex = SDL_CreateMutex();
+ dev->condition = SDL_CreateCond();
+ SDL_CreateThreadBarrier(&dev->barrier, 2);
return dev;
}
@@ -205,9 +184,9 @@
static void free_hid_device(hid_device *dev)
{
/* Clean up the thread objects */
- pthread_barrier_destroy(&dev->barrier);
- pthread_cond_destroy(&dev->condition);
- pthread_mutex_destroy(&dev->mutex);
+ SDL_DestroyThreadBarrier(&dev->barrier);
+ SDL_DestroyCond(dev->condition);
+ SDL_DestroyMutex(dev->mutex);
/* Free the device itself */
free(dev);
@@ -214,8 +193,8 @@
}
#if 0
-/*TODO: Implement this funciton on hidapi/libusb.. */
-static void register_error(hid_device *device, const char *op)
+/*TODO: Implement this function on hidapi/libusb.. */
+static void register_error(hid_device *dev, const char *op)
{
}
@@ -400,20 +379,13 @@
int len;
wchar_t *str = NULL;
-#ifndef __ANDROID__ /* we don't use iconv on Android */
wchar_t wbuf[256];
- /* iconv variables */
- iconv_t ic;
+ SDL_iconv_t ic;
size_t inbytes;
size_t outbytes;
size_t res;
-#ifdef __FreeBSD__
const char *inptr;
-#else
- char *inptr;
-#endif
char *outptr;
-#endif
/* Determine which language to use. */
uint16_t lang;
@@ -430,32 +402,13 @@
if (len < 0)
return NULL;
-#ifdef __ANDROID__
-
- /* Bionic does not have iconv support nor wcsdup() function, so it
- has to be done manually. The following code will only work for
- code points that can be represented as a single UTF-16 character,
- and will incorrectly convert any code points which require more
- than one UTF-16 character.
-
- Skip over the first character (2-bytes). */
- len -= 2;
- str = malloc((len / 2 + 1) * sizeof(wchar_t));
- int i;
- for (i = 0; i < len / 2; i++) {
- str[i] = buf[i * 2 + 2] | (buf[i * 2 + 3] << 8);
- }
- str[len / 2] = 0x00000000;
-
-#else
-
/* buf does not need to be explicitly NULL-terminated because
it is only passed into iconv() which does not need it. */
/* Initialize iconv. */
- ic = iconv_open("WCHAR_T", "UTF-16LE");
- if (ic == (iconv_t)-1) {
- LOG("iconv_open() failed\n");
+ ic = SDL_iconv_open("WCHAR_T", "UTF-16LE");
+ if (ic == (SDL_iconv_t)-1) {
+ LOG("SDL_iconv_open() failed\n");
return NULL;
}
@@ -465,9 +418,9 @@
inbytes = len-2;
outptr = (char*) wbuf;
outbytes = sizeof(wbuf);
- res = iconv(ic, &inptr, &inbytes, &outptr, &outbytes);
+ res = SDL_iconv(ic, &inptr, &inbytes, &outptr, &outbytes);
if (res == (size_t)-1) {
- LOG("iconv() failed\n");
+ LOG("SDL_iconv() failed\n");
goto err;
}
@@ -480,10 +433,8 @@
str = wcsdup(wbuf);
err:
- iconv_close(ic);
+ SDL_iconv_close(ic);
-#endif
-
return str;
}
@@ -531,7 +482,8 @@
static int is_xbox360(unsigned short vendor_id, const struct libusb_interface_descriptor *intf_desc)
{
static const int XB360_IFACE_SUBCLASS = 93;
- static const int XB360_IFACE_PROTOCOL = 1; /* Wired only */
+ static const int XB360_IFACE_PROTOCOL = 1; /* Wired */
+ static const int XB360W_IFACE_PROTOCOL = 129; /* Wireless */
static const int SUPPORTED_VENDORS[] = {
0x0079, /* GPD Win 2 */
0x044f, /* Thrustmaster */
@@ -541,8 +493,9 @@
0x06a3, /* Saitek */
0x0738, /* Mad Catz */
0x07ff, /* Mad Catz */
- 0x0e6f, /* Unknown */
+ 0x0e6f, /* PDP */
0x0f0d, /* Hori */
+ 0x1038, /* SteelSeries */
0x11c9, /* Nacon */
0x12ab, /* Unknown */
0x1430, /* RedOctane */
@@ -555,10 +508,10 @@
0x24c6, /* PowerA */
};
- if (intf_desc->bInterfaceNumber == 0 &&
- intf_desc->bInterfaceClass == LIBUSB_CLASS_VENDOR_SPEC &&
+ if (intf_desc->bInterfaceClass == LIBUSB_CLASS_VENDOR_SPEC &&
intf_desc->bInterfaceSubClass == XB360_IFACE_SUBCLASS &&
- intf_desc->bInterfaceProtocol == XB360_IFACE_PROTOCOL) {
+ (intf_desc->bInterfaceProtocol == XB360_IFACE_PROTOCOL ||
+ intf_desc->bInterfaceProtocol == XB360W_IFACE_PROTOCOL)) {
int i;
for (i = 0; i < sizeof(SUPPORTED_VENDORS)/sizeof(SUPPORTED_VENDORS[0]); ++i) {
if (vendor_id == SUPPORTED_VENDORS[i]) {
@@ -576,10 +529,11 @@
static const int SUPPORTED_VENDORS[] = {
0x045e, /* Microsoft */
0x0738, /* Mad Catz */
- 0x0e6f, /* Unknown */
+ 0x0e6f, /* PDP */
0x0f0d, /* Hori */
0x1532, /* Razer Wildcat */
0x24c6, /* PowerA */
+ 0x2e24, /* Hyperkin */
};
if (intf_desc->bInterfaceNumber == 0 &&
@@ -603,13 +557,7 @@
/* Also enumerate Xbox 360 controllers */
if (is_xbox360(vendor_id, intf_desc))
- {
- /* hid_write() to Xbox 360 controllers doesn't seem to work on Linux:
- - xpad 1-2:1.0: xpad_try_sending_next_out_packet - usb_submit_urb failed with result -2
- Xbox 360 controller support is good on Linux anyway, so we'll ignore this for now.
return 1;
- */
- }
/* Also enumerate Xbox One controllers */
if (is_xboxone(vendor_id, intf_desc))
@@ -660,25 +608,25 @@
/* Check the VID/PID against the arguments */
if ((vendor_id == 0x0 || vendor_id == dev_vid) &&
(product_id == 0x0 || product_id == dev_pid)) {
- struct hid_device_info *tmp;
+ res = libusb_open(dev, &handle);
- /* VID/PID match. Create the record. */
- tmp = (struct hid_device_info *)calloc(1, sizeof(struct hid_device_info));
- if (cur_dev) {
- cur_dev->next = tmp;
- }
- else {
- root = tmp;
- }
- cur_dev = tmp;
+ if (res >= 0) {
+ struct hid_device_info *tmp;
- /* Fill out the record */
- cur_dev->next = NULL;
- cur_dev->path = make_path(dev, interface_num);
+ /* VID/PID match. Create the record. */
+ tmp = (struct hid_device_info*) calloc(1, sizeof(struct hid_device_info));
+ if (cur_dev) {
+ cur_dev->next = tmp;
+ }
+ else {
+ root = tmp;
+ }
+ cur_dev = tmp;
- res = libusb_open(dev, &handle);
+ /* Fill out the record */
+ cur_dev->next = NULL;
+ cur_dev->path = make_path(dev, interface_num);
- if (res >= 0) {
/* Serial Number */
if (desc.iSerialNumber > 0)
cur_dev->serial_number =
@@ -756,16 +704,22 @@
#endif /* INVASIVE_GET_USAGE */
libusb_close(handle);
- }
- /* VID/PID */
- cur_dev->vendor_id = dev_vid;
- cur_dev->product_id = dev_pid;
- /* Release Number */
- cur_dev->release_number = desc.bcdDevice;
+ /* VID/PID */
+ cur_dev->vendor_id = dev_vid;
+ cur_dev->product_id = dev_pid;
- /* Interface Number */
- cur_dev->interface_number = interface_num;
+ /* Release Number */
+ cur_dev->release_number = desc.bcdDevice;
+
+ /* Interface Number */
+ cur_dev->interface_number = interface_num;
+ cur_dev->interface_class = intf_desc->bInterfaceClass;
+ cur_dev->interface_subclass = intf_desc->bInterfaceSubClass;
+ cur_dev->interface_protocol = intf_desc->bInterfaceProtocol;
+
+ } else
+ LOG("Can't open device 0x%.4x/0x%.4x during enumeration: %d\n", dev_vid, dev_pid, res);
}
}
} /* altsettings */
@@ -836,19 +790,19 @@
if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
- struct input_report *rpt = (struct input_report *)malloc(sizeof(*rpt));
- rpt->data = (uint8_t *)malloc(transfer->actual_length);
+ struct input_report *rpt = (struct input_report*) malloc(sizeof(*rpt));
+ rpt->data = (uint8_t*) malloc(transfer->actual_length);
memcpy(rpt->data, transfer->buffer, transfer->actual_length);
rpt->len = transfer->actual_length;
rpt->next = NULL;
- pthread_mutex_lock(&dev->mutex);
+ SDL_LockMutex(dev->mutex);
/* Attach the new report object to the end of the list. */
if (dev->input_reports == NULL) {
/* The list is empty. Put it at the root. */
dev->input_reports = rpt;
- pthread_cond_signal(&dev->condition);
+ SDL_CondSignal(dev->condition);
}
else {
/* Find the end of the list and attach. */
@@ -867,7 +821,7 @@
return_data(dev, NULL, 0);
}
}
- pthread_mutex_unlock(&dev->mutex);
+ SDL_UnlockMutex(dev->mutex);
}
else if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
dev->shutdown_thread = 1;
@@ -896,14 +850,14 @@
}
-static void *read_thread(void *param)
+static int read_thread(void *param)
{
hid_device *dev = (hid_device *)param;
- unsigned char *buf;
+ uint8_t *buf;
const size_t length = dev->input_ep_max_packet_size;
/* Set up the transfer object. */
- buf = (unsigned char *)malloc(length);
+ buf = (uint8_t*) malloc(length);
dev->transfer = libusb_alloc_transfer(0);
libusb_fill_interrupt_transfer(dev->transfer,
dev->device_handle,
@@ -919,7 +873,7 @@
libusb_submit_transfer(dev->transfer);
/* Notify the main thread that the read thread is up and running. */
- pthread_barrier_wait(&dev->barrier);
+ SDL_WaitThreadBarrier(&dev->barrier);
/* Handle all the events. */
while (!dev->shutdown_thread) {
@@ -951,9 +905,9 @@
make sure that a thread which is about to go to sleep waiting on
the condition actually will go to sleep before the condition is
signaled. */
- pthread_mutex_lock(&dev->mutex);
- pthread_cond_broadcast(&dev->condition);
- pthread_mutex_unlock(&dev->mutex);
+ SDL_LockMutex(dev->mutex);
+ SDL_CondBroadcast(dev->condition);
+ SDL_UnlockMutex(dev->mutex);
/* The dev->transfer->buffer and dev->transfer objects are cleaned up
in hid_close(). They are not cleaned up here because this thread
@@ -963,10 +917,43 @@
since hid_close() calls libusb_cancel_transfer(), on these objects,
they can not be cleaned up here. */
- return NULL;
+ return 0;
}
+static void init_xboxone(libusb_device_handle *device_handle, struct libusb_config_descriptor *conf_desc)
+{
+ static const int XB1_IFACE_SUBCLASS = 71;
+ static const int XB1_IFACE_PROTOCOL = 208;
+ int j, k, res;
+ for (j = 0; j < conf_desc->bNumInterfaces; j++) {
+ const struct libusb_interface *intf = &conf_desc->interface[j];
+ for (k = 0; k < intf->num_altsetting; k++) {
+ const struct libusb_interface_descriptor *intf_desc;
+ intf_desc = &intf->altsetting[k];
+
+ if (intf_desc->bInterfaceNumber != 0 &&
+ intf_desc->bAlternateSetting == 0 &&
+ intf_desc->bInterfaceClass == LIBUSB_CLASS_VENDOR_SPEC &&
+ intf_desc->bInterfaceSubClass == XB1_IFACE_SUBCLASS &&
+ intf_desc->bInterfaceProtocol == XB1_IFACE_PROTOCOL) {
+ res = libusb_claim_interface(device_handle, intf_desc->bInterfaceNumber);
+ if (res < 0) {
+ LOG("can't claim interface %d: %d\n", intf_desc->bInterfaceNumber, res);
+ continue;
+ }
+
+ res = libusb_set_interface_alt_setting(device_handle, intf_desc->bInterfaceNumber, intf_desc->bAlternateSetting);
+ if (res < 0) {
+ LOG("xbox init: can't set alt setting %d: %d\n", intf_desc->bInterfaceNumber, res);
+ }
+
+ libusb_release_interface(device_handle, intf_desc->bInterfaceNumber);
+ }
+ }
+ }
+}
+
hid_device * HID_API_EXPORT hid_open_path(const char *path, int bExclusive)
{
hid_device *dev = NULL;
@@ -987,9 +974,13 @@
struct libusb_device_descriptor desc;
struct libusb_config_descriptor *conf_desc = NULL;
int i,j,k;
+
libusb_get_device_descriptor(usb_dev, &desc);
- if (libusb_get_active_config_descriptor(usb_dev, &conf_desc) < 0)
+ res = libusb_get_active_config_descriptor(usb_dev, &conf_desc);
+ if (res < 0)
+ libusb_get_config_descriptor(usb_dev, 0, &conf_desc);
+ if (!conf_desc)
continue;
for (j = 0; j < conf_desc->bNumInterfaces; j++) {
const struct libusb_interface *intf = &conf_desc->interface[j];
@@ -999,6 +990,8 @@
if (should_enumerate_interface(desc.idVendor, intf_desc)) {
char *dev_path = make_path(usb_dev, intf_desc->bInterfaceNumber);
if (!strcmp(dev_path, path)) {
+ int detached_driver = 0;
+
/* Matched Paths. Open this device */
/* OPEN HERE */
@@ -1009,6 +1002,7 @@
break;
}
good_open = 1;
+
#ifdef DETACH_KERNEL_DRIVER
/* Detach the kernel driver, but only if the
device is managed by the kernel */
@@ -1021,8 +1015,10 @@
good_open = 0;
break;
}
+ detached_driver = 1;
}
#endif
+
res = libusb_claim_interface(dev->device_handle, intf_desc->bInterfaceNumber);
if (res < 0) {
LOG("can't claim interface %d: %d\n", intf_desc->bInterfaceNumber, res);
@@ -1032,6 +1028,11 @@
break;
}
+ /* Initialize XBox One controllers */
+ if (is_xboxone(desc.idVendor, intf_desc)) {
+ init_xboxone(dev->device_handle, conf_desc);
+ }
+
/* Store off the string descriptor indexes */
dev->manufacturer_index = desc.iManufacturer;
dev->product_index = desc.iProduct;
@@ -1039,6 +1040,7 @@
/* Store off the interface number */
dev->interface = intf_desc->bInterfaceNumber;
+ dev->detached_driver = detached_driver;
/* Find the INPUT and OUTPUT endpoints. An
OUTPUT endpoint is not required. */
@@ -1072,10 +1074,10 @@
}
}
- pthread_create(&dev->thread, NULL, read_thread, dev);
+ dev->thread = SDL_CreateThread(read_thread, NULL, dev);
/* Wait here for the read thread to be initialized. */
- pthread_barrier_wait(&dev->barrier);
+ SDL_WaitThreadBarrier(&dev->barrier);
}
free(dev_path);
@@ -1103,17 +1105,17 @@
int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length)
{
int res;
- int report_number = data[0];
- int skipped_report_id = 0;
- if (report_number == 0x0) {
- data++;
- length--;
- skipped_report_id = 1;
- }
+ if (dev->output_endpoint <= 0) {
+ int report_number = data[0];
+ int skipped_report_id = 0;
+ if (report_number == 0x0) {
+ data++;
+ length--;
+ skipped_report_id = 1;
+ }
- if (dev->output_endpoint <= 0) {
/* No interrupt out endpoint. Use the Control Endpoint */
res = libusb_control_transfer(dev->device_handle,
LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE|LIBUSB_ENDPOINT_OUT,
@@ -1143,9 +1145,6 @@
if (res < 0)
return -1;
- if (skipped_report_id)
- actual_length++;
-
return actual_length;
}
}
@@ -1166,11 +1165,13 @@
return len;
}
+#if 0 /* TODO: pthread_cleanup SDL? */
static void cleanup_mutex(void *param)
{
hid_device *dev = (hid_device *)param;
- pthread_mutex_unlock(&dev->mutex);
+ SDL_UnlockMutex(dev->mutex);
}
+#endif
int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
@@ -1184,8 +1185,8 @@
return transferred;
#endif
- pthread_mutex_lock(&dev->mutex);
- pthread_cleanup_push(&cleanup_mutex, dev);
+ SDL_LockMutex(dev->mutex);
+ /* TODO: pthread_cleanup SDL? */
/* There's an input report queued up. Return it. */
if (dev->input_reports) {
@@ -1204,7 +1205,7 @@
if (milliseconds == -1) {
/* Blocking */
while (!dev->input_reports && !dev->shutdown_thread) {
- pthread_cond_wait(&dev->condition, &dev->mutex);
+ SDL_CondWait(dev->condition, dev->mutex);
}
if (dev->input_reports) {
bytes_read = return_data(dev, data, length);
@@ -1213,17 +1214,9 @@
else if (milliseconds > 0) {
/* Non-blocking, but called with timeout. */
int res;
- struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- ts.tv_sec += milliseconds / 1000;
- ts.tv_nsec += (milliseconds % 1000) * 1000000;
- if (ts.tv_nsec >= 1000000000L) {
- ts.tv_sec++;
- ts.tv_nsec -= 1000000000L;
- }
while (!dev->input_reports && !dev->shutdown_thread) {
- res = pthread_cond_timedwait(&dev->condition, &dev->mutex, &ts);
+ res = SDL_CondWaitTimeout(dev->condition, dev->mutex, milliseconds);
if (res == 0) {
if (dev->input_reports) {
bytes_read = return_data(dev, data, length);
@@ -1234,7 +1227,7 @@
or the read thread was shutdown. Run the
loop again (ie: don't break). */
}
- else if (res == ETIMEDOUT) {
+ else if (res == SDL_MUTEX_TIMEDOUT) {
/* Timed out. */
bytes_read = 0;
break;
@@ -1252,8 +1245,8 @@
}
ret:
- pthread_mutex_unlock(&dev->mutex);
- pthread_cleanup_pop(0);
+ SDL_UnlockMutex(dev->mutex);
+ /* TODO: pthread_cleanup SDL? */
return bytes_read;
}
@@ -1334,6 +1327,8 @@
void HID_API_EXPORT hid_close(hid_device *dev)
{
+ int status;
+
if (!dev)
return;
@@ -1342,7 +1337,7 @@
libusb_cancel_transfer(dev->transfer);
/* Wait for read_thread() to end. */
- pthread_join(dev->thread, NULL);
+ SDL_WaitThread(dev->thread, &status);
/* Clean up the Transfer objects allocated in read_thread(). */
free(dev->transfer->buffer);
@@ -1351,15 +1346,24 @@
/* release the interface */
libusb_release_interface(dev->device_handle, dev->interface);
+#ifdef DETACH_KERNEL_DRIVER
+ /* Re-attach kernel driver if necessary. */
+ if (dev->detached_driver) {
+ int res = libusb_attach_kernel_driver(dev->device_handle, dev->interface);
+ if (res < 0)
+ LOG("Couldn't re-attach kernel driver.\n");
+ }
+#endif
+
/* Close the handle */
libusb_close(dev->device_handle);
/* Clear out the queue of received reports. */
- pthread_mutex_lock(&dev->mutex);
+ SDL_LockMutex(dev->mutex);
while (dev->input_reports) {
return_data(dev, NULL, 0);
}
- pthread_mutex_unlock(&dev->mutex);
+ SDL_UnlockMutex(dev->mutex);
free_hid_device(dev);
}
@@ -1452,7 +1456,7 @@
LANG("English - Ireland", "en_ie", 0x1809),
LANG("English - Jamaica", "en_jm", 0x2009),
LANG("English - New Zealand", "en_nz", 0x1409),
- LANG("English - Phillippines", "en_ph", 0x3409),
+ LANG("English - Philippines", "en_ph", 0x3409),
LANG("English - Southern Africa", "en_za", 0x1C09),
LANG("English - Trinidad", "en_tt", 0x2C09),
LANG("English - Great Britain", "en_gb", 0x0809),
@@ -1487,7 +1491,7 @@
LANG("Lithuanian", "lt", 0x0427),
LANG("F.Y.R.O. Macedonia", "mk", 0x042F),
LANG("Malay - Malaysia", "ms_my", 0x043E),
- LANG("Malay – Brunei", "ms_bn", 0x083E),
+ LANG("Malay ??? Brunei", "ms_bn", 0x083E),
LANG("Maltese", "mt", 0x043A),
LANG("Marathi", "mr", 0x044E),
LANG("Norwegian - Bokml", "no_no", 0x0414),
@@ -1538,7 +1542,7 @@
LANG("Ukrainian", "uk", 0x0422),
LANG("Urdu", "ur", 0x0420),
LANG("Uzbek - Cyrillic", "uz_uz", 0x0843),
- LANG("Uzbek – Latin", "uz_uz", 0x0443),
+ LANG("Uzbek ??? Latin", "uz_uz", 0x0443),
LANG("Vietnamese", "vi", 0x042A),
LANG("Xhosa", "xh", 0x0434),
LANG("Yiddish", "yi", 0x043D),
--- a/external/SDL2/src/hidapi/linux/hid.c
+++ b/external/SDL2/src/hidapi/linux/hid.c
@@ -18,7 +18,7 @@
files located at the root of the source distribution.
These files may also be found in the public source
code repository located at:
- http://github.com/signal11/hidapi .
+ https://github.com/libusb/hidapi .
********************************************************/
#include "../../SDL_internal.h"
--- a/external/SDL2/src/hidapi/mac/hid.c
+++ b/external/SDL2/src/hidapi/mac/hid.c
@@ -17,7 +17,7 @@
files located at the root of the source distribution.
These files may also be found in the public source
code repository located at:
- http://github.com/signal11/hidapi .
+ https://github.com/libusb/hidapi .
********************************************************/
#include "../../SDL_internal.h"
@@ -29,7 +29,6 @@
#include <IOKit/hid/IOHIDKeys.h>
#include <CoreFoundation/CoreFoundation.h>
#include <wchar.h>
-#include <locale.h>
#include <pthread.h>
#include <sys/time.h>
#include <unistd.h>
@@ -42,10 +41,10 @@
StackOverflow. It is used with his permission. */
typedef int pthread_barrierattr_t;
typedef struct pthread_barrier {
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- int count;
- int trip_count;
+ pthread_mutex_t mutex;
+ pthread_cond_t cond;
+ int count;
+ int trip_count;
} pthread_barrier_t;
static int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
@@ -179,22 +178,22 @@
free(dev->input_report_buf);
if (device_list) {
- if (device_list->dev == dev) {
- device_list = device_list->next;
- }
- else {
- struct hid_device_list_node *node = device_list;
- while (node) {
- if (node->next && node->next->dev == dev) {
- struct hid_device_list_node *new_next = node->next->next;
- free(node->next);
- node->next = new_next;
- break;
- }
+ if (device_list->dev == dev) {
+ device_list = device_list->next;
+ }
+ else {
+ struct hid_device_list_node *node = device_list;
+ while (node) {
+ if (node->next && node->next->dev == dev) {
+ struct hid_device_list_node *new_next = node->next->next;
+ free(node->next);
+ node->next = new_next;
+ break;
+ }
- node = node->next;
- }
- }
+ node = node->next;
+ }
+ }
}
/* Clean up the thread objects */
@@ -372,6 +371,27 @@
return res+1;
}
+static void hid_device_removal_callback(void *context, IOReturn result,
+ void *sender, IOHIDDeviceRef hid_ref)
+{
+ // The device removal callback is sometimes called even after being
+ // unregistered, leading to a crash when trying to access fields in
+ // the already freed hid_device. We keep a linked list of all created
+ // hid_device's so that the one being removed can be checked against
+ // the list to see if it really hasn't been closed yet and needs to
+ // be dealt with here.
+ struct hid_device_list_node *node = device_list;
+ while (node) {
+ if (node->dev->device_handle == hid_ref) {
+ node->dev->disconnected = 1;
+ CFRunLoopStop(node->dev->run_loop);
+ break;
+ }
+
+ node = node->next;
+ }
+}
+
/* Initialize the IOHIDManager. Return 0 for success and -1 for failure. */
static int init_hid_manager(void)
{
@@ -381,6 +401,7 @@
if (hid_mgr) {
IOHIDManagerSetDeviceMatching(hid_mgr, NULL);
IOHIDManagerScheduleWithRunLoop(hid_mgr, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
+ IOHIDManagerRegisterDeviceRemovalCallback(hid_mgr, hid_device_removal_callback, NULL);
return 0;
}
@@ -426,8 +447,6 @@
CFIndex num_devices;
int i;
- setlocale(LC_ALL,"");
-
/* Set up the HID Manager if it hasn't been done */
if (hid_init() < 0)
return NULL;
@@ -459,9 +478,10 @@
IOHIDDeviceRef dev = device_array[i];
- if (!dev) {
- continue;
- }
+ if (!dev) {
+ continue;
+ }
+
dev_vid = get_vendor_id(dev);
dev_pid = get_product_id(dev);
@@ -569,30 +589,6 @@
return handle;
}
-static void hid_device_removal_callback(void *context, IOReturn result,
- void *sender)
-{
- /* Stop the Run Loop for this device. */
- hid_device *dev = (hid_device *)context;
-
- // The device removal callback is sometimes called even after being
- // unregistered, leading to a crash when trying to access fields in
- // the already freed hid_device. We keep a linked list of all created
- // hid_device's so that the one being removed can be checked against
- // the list to see if it really hasn't been closed yet and needs to
- // be dealt with here.
- struct hid_device_list_node *node = device_list;
- while (node) {
- if (node->dev == dev) {
- dev->disconnected = 1;
- CFRunLoopStop(dev->run_loop);
- break;
- }
-
- node = node->next;
- }
-}
-
/* The Run Loop calls this function for each input report received.
This function puts the data into a linked list to be picked up by
hid_read(). */
@@ -766,7 +762,6 @@
IOHIDDeviceRegisterInputReportCallback(
os_dev, dev->input_report_buf, dev->max_input_report_len,
&hid_report_callback, dev);
- IOHIDDeviceRegisterRemovalCallback(dev->device_handle, hid_device_removal_callback, dev);
struct hid_device_list_node *node = (struct hid_device_list_node *)calloc(1, sizeof(struct hid_device_list_node));
node->dev = dev;
@@ -1042,7 +1037,6 @@
IOHIDDeviceRegisterInputReportCallback(
dev->device_handle, dev->input_report_buf, dev->max_input_report_len,
NULL, dev);
- IOHIDDeviceRegisterRemovalCallback(dev->device_handle, NULL, dev);
IOHIDDeviceUnscheduleFromRunLoop(dev->device_handle, dev->run_loop, dev->run_loop_mode);
IOHIDDeviceScheduleWithRunLoop(dev->device_handle, CFRunLoopGetMain(), kCFRunLoopDefaultMode);
}
@@ -1156,8 +1150,6 @@
CFIndex num_devices = CFSetGetCount(device_set);
IOHIDDeviceRef *device_array = calloc(num_devices, sizeof(IOHIDDeviceRef));
CFSetGetValues(device_set, (const void **) device_array);
-
- setlocale(LC_ALL, "");
for (i = 0; i < num_devices; i++) {
IOHIDDeviceRef dev = device_array[i];
--- a/external/SDL2/src/hidapi/windows/hid.c
+++ b/external/SDL2/src/hidapi/windows/hid.c
@@ -17,7 +17,7 @@
files located at the root of the source distribution.
These files may also be found in the public source
code repository located at:
- http://github.com/signal11/hidapi .
+ https://github.com/libusb/hidapi .
********************************************************/
#include "../../SDL_internal.h"
@@ -63,6 +63,11 @@
/*#define HIDAPI_USE_DDK*/
+/* The timeout in milliseconds for waiting on WriteFile to
+ complete in hid_write. The longest observed time to do a output
+ report that we've seen is ~200-250ms so let's double that */
+#define HID_WRITE_TIMEOUT_MILLISECONDS 500
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -163,6 +168,7 @@
BOOL read_pending;
char *read_buf;
OVERLAPPED ol;
+ OVERLAPPED write_ol;
};
static hid_device *new_hid_device()
@@ -178,6 +184,8 @@
dev->read_buf = NULL;
memset(&dev->ol, 0, sizeof(dev->ol));
dev->ol.hEvent = CreateEvent(NULL, FALSE, FALSE /*initial state f=nonsignaled*/, NULL);
+ memset(&dev->write_ol, 0, sizeof(dev->write_ol));
+ dev->write_ol.hEvent = CreateEvent(NULL, FALSE, FALSE /*initial state f=nonsignaled*/, NULL);
return dev;
}
@@ -185,6 +193,7 @@
static void free_hid_device(hid_device *dev)
{
CloseHandle(dev->ol.hEvent);
+ CloseHandle(dev->write_ol.hEvent);
CloseHandle(dev->device_handle);
LocalFree(dev->last_error_str);
free(dev->read_buf);
@@ -298,8 +307,25 @@
int hid_blacklist(unsigned short vendor_id, unsigned short product_id)
{
- return vendor_id == 0x1B1C && // (Corsair)
- product_id == 0x1B3D; // Gaming keyboard? Causes deadlock when asking for device details
+ // Corsair Gaming keyboard - Causes deadlock when asking for device details
+ if ( vendor_id == 0x1B1C && product_id == 0x1B3D )
+ {
+ return 1;
+ }
+
+ // SPEEDLINK COMPETITION PRO - turns into an Android controller when enumerated
+ if ( vendor_id == 0x0738 && product_id == 0x2217 )
+ {
+ return 1;
+ }
+
+ // Sound BlasterX G1 - Causes 10 second stalls when asking for manufacturer's string
+ if ( vendor_id == 0x041E && product_id == 0x3249 )
+ {
+ return 1;
+ }
+
+ return 0;
}
struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id)
@@ -661,14 +687,12 @@
return -1;
}
-int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *data, size_t length)
+static int hid_write_timeout(hid_device *dev, const unsigned char *data, size_t length, int milliseconds)
{
DWORD bytes_written;
BOOL res;
size_t stashed_length = length;
- OVERLAPPED ol;
unsigned char *buf;
- memset(&ol, 0, sizeof(ol));
/* Make sure the right number of bytes are passed to WriteFile. Windows
expects the number of bytes which are in the _longest_ report (plus
@@ -693,7 +717,7 @@
}
else
{
- res = WriteFile( dev->device_handle, buf, ( DWORD ) length, NULL, &ol );
+ res = WriteFile( dev->device_handle, buf, ( DWORD ) length, NULL, &dev->write_ol );
if (!res) {
if (GetLastError() != ERROR_IO_PENDING) {
/* WriteFile() failed. Return error. */
@@ -705,7 +729,16 @@
/* Wait here until the write is done. This makes
hid_write() synchronous. */
- res = GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/);
+ res = WaitForSingleObject(dev->write_ol.hEvent, milliseconds);
+ if (res != WAIT_OBJECT_0)
+ {
+ // There was a Timeout.
+ bytes_written = (DWORD) -1;
+ register_error(dev, "WriteFile/WaitForSingleObject Timeout");
+ goto end_of_function;
+ }
+
+ res = GetOverlappedResult(dev->device_handle, &dev->write_ol, &bytes_written, FALSE/*F=don't_wait*/);
if (!res) {
/* The Write operation failed. */
register_error(dev, "WriteFile");
@@ -720,6 +753,10 @@
return bytes_written;
}
+int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *data, size_t length)
+{
+ return hid_write_timeout(dev, data, length, HID_WRITE_TIMEOUT_MILLISECONDS);
+}
int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
{
--- a/external/SDL2/src/joystick/SDL_gamecontroller.c
+++ b/external/SDL2/src/joystick/SDL_gamecontroller.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -42,7 +42,9 @@
/* Many controllers turn the center button into an instantaneous button press */
#define SDL_MINIMUM_GUIDE_BUTTON_DELAY_MS 250
-#define SDL_CONTROLLER_PLATFORM_FIELD "platform:"
+#define SDL_CONTROLLER_PLATFORM_FIELD "platform:"
+#define SDL_CONTROLLER_SDKGE_FIELD "sdk>=:"
+#define SDL_CONTROLLER_SDKLE_FIELD "sdk<=:"
/* a list of currently opened game controllers */
static SDL_GameController *SDL_gamecontrollers = NULL;
@@ -642,8 +644,8 @@
int i = 0;
const char *pchPos = pchString;
- SDL_zero(szGameButton);
- SDL_zero(szJoystickButton);
+ SDL_zeroa(szGameButton);
+ SDL_zeroa(szJoystickButton);
while (pchPos && *pchPos) {
if (*pchPos == ':') {
@@ -655,8 +657,8 @@
i = 0;
bGameButton = SDL_TRUE;
SDL_PrivateGameControllerParseElement(gamecontroller, szGameButton, szJoystickButton);
- SDL_zero(szGameButton);
- SDL_zero(szJoystickButton);
+ SDL_zeroa(szGameButton);
+ SDL_zeroa(szJoystickButton);
} else if (bGameButton) {
if (i >= sizeof(szGameButton)) {
@@ -691,7 +693,9 @@
gamecontroller->name = pchName;
gamecontroller->num_bindings = 0;
- SDL_memset(gamecontroller->last_match_axis, 0, gamecontroller->joystick->naxes * sizeof(*gamecontroller->last_match_axis));
+ if (gamecontroller->joystick->naxes) {
+ SDL_memset(gamecontroller->last_match_axis, 0, gamecontroller->joystick->naxes * sizeof(*gamecontroller->last_match_axis));
+ }
SDL_PrivateGameControllerParseControllerConfigString(gamecontroller, pchMapping);
@@ -879,7 +883,7 @@
for ( pPrevMapping = s_pSupportedControllers, pCurrMapping = pPrevMapping->next;
pCurrMapping;
pPrevMapping = pCurrMapping, pCurrMapping = pCurrMapping->next ) {
- continue;
+ /* continue; */
}
pPrevMapping->next = pControllerMapping;
} else {
@@ -1134,7 +1138,7 @@
}
}
}
-
+
line = line_end + 1;
}
@@ -1160,6 +1164,27 @@
return SDL_InvalidParamError("mappingString");
}
+#ifdef ANDROID
+ { /* Extract and verify the SDK version */
+ const char *tmp;
+
+ tmp = SDL_strstr(mappingString, SDL_CONTROLLER_SDKGE_FIELD);
+ if (tmp != NULL) {
+ tmp += SDL_strlen(SDL_CONTROLLER_SDKGE_FIELD);
+ if (!(SDL_GetAndroidSDKVersion() >= SDL_atoi(tmp))) {
+ return SDL_SetError("SDK version %d < minimum version %d", SDL_GetAndroidSDKVersion(), SDL_atoi(tmp));
+ }
+ }
+ tmp = SDL_strstr(mappingString, SDL_CONTROLLER_SDKLE_FIELD);
+ if (tmp != NULL) {
+ tmp += SDL_strlen(SDL_CONTROLLER_SDKLE_FIELD);
+ if (!(SDL_GetAndroidSDKVersion() <= SDL_atoi(tmp))) {
+ return SDL_SetError("SDK version %d > maximum version %d", SDL_GetAndroidSDKVersion(), SDL_atoi(tmp));
+ }
+ }
+ }
+#endif
+
pchGUID = SDL_PrivateGetControllerGUIDFromMappingString(mappingString);
if (!pchGUID) {
return SDL_SetError("Couldn't parse GUID from %s", mappingString);
@@ -1411,6 +1436,16 @@
/**
+ * Get the type of a game controller.
+ */
+SDL_GameControllerType
+SDL_GameControllerTypeForIndex(int joystick_index)
+{
+ return SDL_GetJoystickGameControllerTypeFromGUID(SDL_JoystickGetDeviceGUID(joystick_index), SDL_JoystickNameForIndex(joystick_index));
+}
+
+
+/**
* Get the mapping of a game controller.
* This can be called before any controllers are opened.
* If no mapping can be found, this function returns NULL.
@@ -1482,8 +1517,8 @@
Uint32 vidpid;
#if defined(__LINUX__)
- if (name && SDL_strstr(name, "Wireless Controller Motion Sensors")) {
- /* Don't treat the PS4 motion controls as a separate game controller */
+ if (name && SDL_strstr(name, "Controller Motion Sensors")) {
+ /* Don't treat the PS3 and PS4 motion controls as a separate game controller */
return SDL_TRUE;
}
#endif
@@ -1741,6 +1776,12 @@
}
}
+SDL_GameControllerType
+SDL_GameControllerGetType(SDL_GameController *gamecontroller)
+{
+ return SDL_GetJoystickGameControllerTypeFromGUID(SDL_JoystickGetGUID(SDL_GameControllerGetJoystick(gamecontroller)), SDL_JoystickName(SDL_GameControllerGetJoystick(gamecontroller)));
+}
+
int
SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller)
{
@@ -1747,6 +1788,15 @@
return SDL_JoystickGetPlayerIndex(SDL_GameControllerGetJoystick(gamecontroller));
}
+/**
+ * Set the player index of an opened game controller
+ */
+void
+SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index)
+{
+ SDL_JoystickSetPlayerIndex(SDL_GameControllerGetJoystick(gamecontroller), player_index);
+}
+
Uint16
SDL_GameControllerGetVendor(SDL_GameController * gamecontroller)
{
@@ -1791,7 +1841,7 @@
/*
- * Find the SDL_GameController that owns this instance id
+ * Return the SDL_GameController associated with an instance id.
*/
SDL_GameController *
SDL_GameControllerFromInstanceID(SDL_JoystickID joyid)
@@ -1808,6 +1858,19 @@
gamecontroller = gamecontroller->next;
}
SDL_UnlockJoysticks();
+ return NULL;
+}
+
+
+/**
+ * Return the SDL_GameController associated with a player index.
+ */
+SDL_GameController *SDL_GameControllerFromPlayerIndex(int player_index)
+{
+ SDL_Joystick *joystick = SDL_JoystickFromPlayerIndex(player_index);
+ if (joystick) {
+ return SDL_GameControllerFromInstanceID(joystick->instance_id);
+ }
return NULL;
}
--- a/external/SDL2/src/joystick/SDL_gamecontrollerdb.h
+++ b/external/SDL2/src/joystick/SDL_gamecontrollerdb.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,13 +36,19 @@
#endif
#if SDL_JOYSTICK_DINPUT
"03000000fa2d00000100000000000000,3DRUDDER,leftx:a0,lefty:a1,rightx:a5,righty:a2,",
- "03000000022000000090000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
- "03000000203800000900000000000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
- "03000000c82d00000060000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
- "03000000c82d00000061000000000000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
- "03000000102800000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
- "03000000a00500003232000000000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
- "03000000c82d00002038000000000000,8bitdo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000c82d00000090000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000c82d00001038000000000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000c82d00000650000000000000,8BitDo M30 GamePad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,",
+ "03000000c82d00005106000000000000,8BitDo M30 GamePad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,start:b11,x:b3,y:b4,",
+ "030000003512000012ab000000000000,8BitDo NES30 GamePad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000022000000090000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000203800000900000000000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000c82d00000060000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000c82d00000061000000000000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000102800000900000000000000,8BitDo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000c82d00000160000000000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
+ "03000000a00500003232000000000000,8BitDo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a2,dpleft:-a0,dpright:+a0,dpup:-a2,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "03000000c82d00002038000000000000,8BitDo,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b4,y:b3,",
"030000008f0e00001200000000000000,Acme GA-02,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b2,y:b3,",
"03000000fa190000f0ff000000000000,Acteck AGJ-3200,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"03000000341a00003608000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -53,6 +59,7 @@
"030000006f0e00001901000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000006f0e00001a01000000000000,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000d62000001d57000000000000,Airflo PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
+ "03000000d62000002a79000000000000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000d81d00000b00000000000000,BUFFALO BSGP1601 Series ,a:b5,b:b3,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b8,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b13,x:b4,y:b2,",
"03000000d6200000e557000000000000,Batarang,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000c01100001352000000000000,Battalife Joystick,a:b6,b:b7,back:b2,leftshoulder:b0,leftx:a0,lefty:a1,rightshoulder:b1,start:b3,x:b4,y:b5,",
@@ -81,8 +88,6 @@
"03000000b80500000610000000000000,Elecom Gamepad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b1,",
"03000000852100000201000000000000,FF-GP1,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00002700000000000000,FIGHTING STICK V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
- "030000000d0f00008500000000000000,Fighting Commander 2016 PS3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
- "030000000d0f00008400000000000000,Fighting Commander 5,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000000d0f00008700000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"030000000d0f00008800000000000000,Fighting Stick mini 4,a:b1,b:b2,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b8,x:b0,y:b3,",
"78696e70757403000000000000000000,Fightstick TES,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,start:b7,x:b2,y:b3,",
@@ -105,6 +110,8 @@
"03000000f0250000c483000000000000,Gioteck VX2 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"03000000f0250000c283000000000000,Gioteck,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"03000000632500002605000000000000,HJD-X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
+ "030000000d0f00008400000000000000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "030000000d0f00008500000000000000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00006e00000000000000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00006600000000000000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000000d0f0000ee00000000000000,HORIPAD mini4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
@@ -136,6 +143,8 @@
"030000006d04000019c2000000000000,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */
"03000000380700008081000000000000,MADCATZ SFV Arcade FightStick Alpha PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000380700006382000000000000,MLG GamePad PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
+ "03000000c62400002a89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
+ "03000000c62400002b89000000000000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
"03000000250900006688000000000000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,",
"03000000380700006652000000000000,Mad Catz C.T.R.L.R,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b0,y:b3,",
"03000000380700005032000000000000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -158,6 +167,7 @@
"0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,",
"03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000efbe0000edfe000000000000,Monect Virtual Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b0,",
+ "030000006b140000010c000000000000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"030000001008000001e5000000000000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,",
"03000000152000000182000000000000,NGDS,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,",
"030000004b120000014d000000000000,NYKO AIRFLO,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:a3,leftstick:a0,lefttrigger:b6,rightshoulder:b5,rightstick:a2,righttrigger:b7,start:b9,x:b2,y:b3,",
@@ -169,6 +179,7 @@
"03000000782300000a10000000000000,Onlive Wireless Controller,a:b15,b:b14,back:b7,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b11,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b13,y:b12,",
"030000006b14000001a1000000000000,Orange Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b2,y:b3,",
"03000000120c0000f60e000000000000,P4 Wired Gamepad,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b7,rightshoulder:b4,righttrigger:b6,start:b9,x:b0,y:b3,",
+ "030000006f0e00000901000000000000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"03000000632500002306000000000000,PS Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"03000000e30500009605000000000000,PS to USB convert cable,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,",
"03000000100800000100000000000000,PS1 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b3,y:b0,",
@@ -208,6 +219,8 @@
"03000000321500000104000000000000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000321500000507000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
"03000000321500000707000000000000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
+ "03000000321500000011000000000000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "03000000321500000009000000000000,Razer Serval,+lefty:+a2,-lefty:-a1,a:b0,b:b1,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,leftx:a0,rightshoulder:b5,rightstick:b9,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000000d0f00006a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000000d0f00006b00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00008a00000000000000,Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
@@ -240,6 +253,8 @@
"030000009b2800000500000000000000,Saturn_Adapter_2.0,a:b1,b:b2,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b0,y:b3,",
"030000008f0e00000800000000000000,SpeedLink Strike FX,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"03000000c01100000591000000000000,Speedlink Torid,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
+ "03000000d11800000094000000000000,Stadia Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b11,rightx:a3,righty:a4,start:b9,x:b2,y:b3,",
+ "03000000110100003114000000000000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
"03000000381000001814000000000000,SteelSeries Stratus XL,a:b0,b:b1,back:b18,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b19,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b2,y:b3,",
"03000000110100001914000000000000,SteelSeries,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:,leftstick:b13,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:,rightstick:b14,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
"03000000d620000011a7000000000000,Switch,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -265,6 +280,7 @@
"03000000ff1100004133000000000000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a4,righty:a2,start:b9,x:b3,y:b0,",
"03000000790000001b18000000000000,Venom Arcade Joystick,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"030000006f0e00000302000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
+ "030000006f0e00000702000000000000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"03000000450c00002043000000000000,XEOX Gamepad SL-6556-BK,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"03000000341a00000608000000000000,Xeox,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"03000000172700004431000000000000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a7,rightx:a2,righty:a5,start:b11,x:b3,y:b4,",
@@ -276,14 +292,23 @@
"03000000101c0000171c000000000000,uRage Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
#endif
#if defined(__MACOSX__)
- "03000000022000000090000001000000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "03000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "03000000102800000900000000000000,8Bitdo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
- "03000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
- "03000000a00500003232000009010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "03000000c82d00000090000001000000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000c82d00000650000001000000,8BitDo M30 GamePad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a5,start:b11,x:b3,y:b4,",
+ "03000000c82d00005106000000010000,8BitDo M30 GamePad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b3,y:b4,",
+ "030000003512000012ab000001000000,8BitDo NES30 GamePad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000022000000090000001000000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000102800000900000000000000,8BitDo SFC30 GamePad Joystick,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000c82d00000160000001000000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000a00500003232000008010000,8BitDo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "03000000a00500003232000009010000,8BitDo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "03000000d62000002a79000000010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000008305000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000260900008888000088020000,Cyber Gadget GameCube Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b6,righttrigger:a5,rightx:a2,righty:a3~,start:b7,x:b2,y:b3,",
"03000000a306000022f6000001030000,Cyborg V.3 Rumble Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:-a3,rightx:a2,righty:a4,start:b9,x:b0,y:b3,",
+ "030000000d0f00008400000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "030000000d0f00008500000000010000,Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000790000000600000000000000,G-Shark GP-702,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,",
"0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"03000000ad1b000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
@@ -304,6 +329,8 @@
"030000006d0400001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"030000006d04000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* This includes F710 in DInput mode and the "Logitech Cordless RumblePad 2", at the very least. */
"03000000d8140000cecf000000000000,MC Cthulhu,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
+ "03000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "03000000c62400002b89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"03000000380700005032000000010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000380700005082000000010000,Mad Catz FightPad PRO (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000380700008433000000010000,Mad Catz FightStick TE S+ (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -312,7 +339,9 @@
"0300000025090000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,back:b8,dpdown:b13,dpleft:b12,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,",
"03000000790000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,back:b32,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b16,leftstick:b40,lefttrigger:b24,leftx:a0,lefty:a4,rightshoulder:b20,rightstick:b44,righttrigger:b28,rightx:a8,righty:a12,start:b36,x:b0,y:b12,",
"030000001008000001e5000006010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,",
+ "03000000550900001472000025050000,NVIDIA Controller v01.04,a:b0,b:b1,back:b17,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b15,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,",
"030000007e0500000920000000000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
+ "030000006f0e00000901000002010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"030000004c0500006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
"030000004c0500006802000000010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
"030000004c050000a00b000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
@@ -325,6 +354,8 @@
"03000000321500000104000000010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000321500000010000000010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000321500000507000001010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "03000000321500000011000000010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "03000000321500000009000000020000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,",
"0300000032150000030a000000000000,Razer Wildcat,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"03000000790000001100000000000000,Retrolink Classic Controller,a:b2,b:b1,back:b8,leftshoulder:b4,leftx:a3,lefty:a4,rightshoulder:b5,start:b9,x:b3,y:b0,",
"03000000790000001100000006010000,Retrolink SNES Controller,a:b2,b:b1,back:b8,dpdown:+a4,dpleft:-a3,dpright:+a3,dpup:-a4,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,",
@@ -334,6 +365,7 @@
"03000000811700007e05000000000000,Sega Saturn,a:b2,b:b4,dpdown:b16,dpleft:b15,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,leftx:a0,lefty:a2,rightshoulder:b9,righttrigger:a4,start:b13,x:b0,y:b6,",
"030000004c050000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000004c050000a00b000000000000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,back:b13,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "03000000d11800000094000000010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,",
"030000005e0400008e02000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"03000000110100002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,",
"03000000110100002014000001000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1~,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3~,x:b2,y:b3,",
@@ -346,10 +378,12 @@
"03000000bd12000015d0000000010000,Tomee SNES USB Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b5,start:b9,x:b3,y:b0,",
"03000000100800000100000000000000,Twin USB Joystick,a:b4,b:b2,back:b16,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b12,leftstick:b20,lefttrigger:b8,leftx:a0,lefty:a2,rightshoulder:b14,rightstick:b22,righttrigger:b10,rightx:a6,righty:a4,start:b18,x:b6,y:b0,",
"030000006f0e00000302000025040000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
+ "030000006f0e00000702000003060000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,back:b7,dpdown:b3,dpleft:b0,dpright:b1,dpup:b2,guide:b8,leftshoulder:b11,lefttrigger:b12,leftx:a0,lefty:a1,start:b6,x:b10,y:b9,",
"050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,back:b7,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b8,leftshoulder:b19,leftstick:b23,lefttrigger:b21,leftx:a0,lefty:a1,rightshoulder:b20,rightstick:b24,righttrigger:b22,rightx:a2,righty:a3,start:b6,x:b18,y:b17,",
"030000005e0400008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"03000000c6240000045d000000000000,Xbox 360 Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
+ "030000005e040000050b000003090000,Xbox Elite Wireless Controller,a:b0,b:b1,back:b38,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"030000005e040000d102000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"030000005e040000dd02000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
"030000005e040000e302000000000000,Xbox One Wired Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
@@ -363,15 +397,21 @@
"03000000830500006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,back:b6,leftshoulder:b4,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b3,y:b2,",
#endif
#if defined(__LINUX__)
- "03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "03000000022000000090000011010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "05000000203800000900000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "05000000c82d00002038000000010000,8Bitdo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "05000000c82d00000061000000010000,8Bitdo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
- "05000000102800000900000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
- "05000000c82d00003028000000010000,8Bitdo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
- "05000000a00500003232000001000000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b3,y:b4,",
- "05000000a00500003232000008010000,8Bitdo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "03000000c82d00000090000011010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000c82d00001038000000010000,8BitDo FC30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000c82d00000650000011010000,8BitDo M30 GamePad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a5,start:b11,x:b3,y:b4,",
+ "05000000c82d00005106000000010000,8BitDo M30 gamepad,a:b0,b:b1,back:b10,guide:b2,leftshoulder:b6,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,start:b11,x:b3,y:b4,",
+ "030000003512000012ab000010010000,8BitDo NES30 GamePad,a:b1,b:b0,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000022000000090000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "03000000c82d00000190000011010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000203800000900000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000c82d00002038000000010000,8BitDo NES30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000c82d00000061000000010000,8BitDo SF30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b2,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000102800000900000000010000,8BitDo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "05000000c82d00003028000000010000,8BitDo SFC30 GamePad,a:b1,b:b0,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b11,x:b4,y:b3,",
+ "03000000c82d00000160000011010000,8BitDo SN30 Pro,a:b1,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b4,y:b3,",
+ "05000000a00500003232000001000000,8BitDo Zero GamePad,a:b0,b:b1,back:b10,dpdown:b122,dpleft:b119,dpright:b120,dpup:b117,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
+ "05000000a00500003232000008010000,8BitDo Zero GamePad,a:b0,b:b1,back:b10,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b11,x:b3,y:b4,",
"05000000050b00000045000031000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,",
"05000000050b00000045000040000000,ASUS Gamepad,a:b0,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b10,x:b2,y:b3,",
"030000006f0e00003901000020060000,Afterglow Controller for Xbox One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
@@ -378,6 +418,7 @@
"030000006f0e00003901000000430000,Afterglow Prismatic Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000006f0e00001302000000010000,Afterglow,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000100000008200000011010000,Akishop Customs PS360+ v1.66,a:b1,b:b2,back:b12,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
+ "03000000d62000002a79000011010000,BDA PS4 Fightpad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000b40400000a01000000010000,CYPRESS USB Gamepad,a:b0,b:b1,back:b5,guide:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b8,x:b3,y:b4,",
"03000000ffff0000ffff000000010000,Chinese-made Xbox Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,",
"03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
@@ -391,6 +432,7 @@
"03000000bc2000000055000011010000,GameSir G3w,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "030000008f0e00000800000010010000,Gasia Co. Ltd PS(R) Gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"030000006f0e00001304000000010000,Generic X-Box pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000280400000140000000010000,Gravis GamePad Pro USB ,a:b1,b:b2,back:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
@@ -401,6 +443,8 @@
"030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"030000000d0f00006a00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000000d0f00006b00000011010000,HORI CO. LTD. Real Arcade Pro.4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
+ "030000000d0f00008400000011010000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "030000000d0f00008500000010010000,HORI Fighting Commander,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00006e00000011010000,HORIPAD 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00006600000011010000,HORIPAD 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000000d0f00006700000001010000,HORIPAD ONE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
@@ -408,9 +452,11 @@
"03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,back:b8,guide:b9,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,start:b12,x:b0,y:b3,",
"030000000d0f00005f00000011010000,Hori Fighting Commander 4 (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000000d0f00005e00000011010000,Hori Fighting Commander 4 (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
+ "030000000d0f00008600000002010000,Hori Fighting Commander,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000008f0e00001330000010010000,HuiJia SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b6,rightshoulder:b7,start:b9,x:b3,y:b0,",
- "03000000d80400008200000003000000,IMS PCU#0 Gamepad Interface,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,platform:Linux,start:b5,x:b3,y:b2,",
+ "03000000242e00008816000001010000,Hyperkin X91,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "03000000d80400008200000003000000,IMS PCU#0 Gamepad Interface,a:b1,b:b0,back:b4,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,start:b5,x:b3,y:b2,",
"03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),a:b3,b:b4,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,start:b7,x:b0,y:b1,",
"030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,a:b2,b:b3,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b8,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:b7,rightx:a2,righty:a3,start:b11,x:b0,y:b1,",
"03000000300f00001001000010010000,Jess Tech Dual Analog Rumble Pad,a:b2,b:b3,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b5,leftx:a0,lefty:a1,rightshoulder:b6,rightstick:b11,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b0,y:b1,",
@@ -426,6 +472,8 @@
"030000006d04000015c2000010010000,Logitech Logitech Extreme 3D,a:b0,b:b4,back:b6,guide:b8,leftshoulder:b9,leftstick:h0.8,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:h0.2,start:b7,x:b2,y:b5,",
"030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,back:b2,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b6,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b10,rightx:a3,righty:a4,start:b8,x:b3,y:b4,",
+ "03000000c62400002b89000011010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "05000000c62400002a89000000010000,MOGA XP5-A Plus,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b22,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"03000000250900006688000000010000,MP-8866 Super Dual Box,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,",
"05000000380700006652000025010000,Mad Catz C.T.R.L.R ,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"03000000380700005032000011010000,Mad Catz FightPad PRO (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -450,10 +498,13 @@
"030000005e0400008502000000010000,Microsoft X-Box pad (Japan),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,",
"030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,",
"05000000d6200000ad0d000001000000,Moga Pro,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
+ "030000006b140000010c000010010000,NACON GC-400ES,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"030000001008000001e5000010010000,NEXT SNES Controller,a:b2,b:b1,back:b8,dpdown:+a1,dpleft:-a0,dpright:+a0,dpup:-a1,leftshoulder:b4,rightshoulder:b6,start:b9,x:b3,y:b0,",
+ "03000000550900001472000011010000,NVIDIA Controller v01.04,a:b0,b:b1,back:b14,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b17,leftshoulder:b4,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,",
"03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b13,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,",
"03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
- "030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,platform:Linux,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,",
+ "03000000790000004318000010010000,Nintendo GameCube Controller,a:b1,b:b2,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:a4,rightx:a5,righty:a2,start:b9,x:b0,y:b3,",
+ "030000007e0500003703000000016800,Nintendo GameCube Controller,a:b0,b:b2,dpdown:b6,dpleft:b4,dpright:b5,dpup:b7,lefttrigger:a4,leftx:a0,lefty:a1~,rightshoulder:b9,righttrigger:a5,rightx:a2,righty:a3~,start:b8,x:b1,y:b3,",
"050000007e0500000920000001000000,Nintendo Switch Pro Controller,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b2,",
"05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
@@ -463,11 +514,12 @@
"030000005e0400000202000000010000,Old Xbox pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b5,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b2,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b3,y:b4,",
"03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
"030000006f0e00006401000001010000,PDP Battlefield One,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "030000006f0e00000901000011010000,PDP Versus Fighting Pad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"03000000ff1100004133000010010000,PS2 Controller,a:b2,b:b1,back:b8,leftshoulder:b6,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b5,start:b9,x:b3,y:b0,",
"03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000004c0500006802000010010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
"030000004c0500006802000010810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,",
- "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
+ "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:a12,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:a13,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
"030000004c0500006802000011810000,PS3 Controller,a:b0,b:b1,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,",
"030000006f0e00001402000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"030000008f0e00000300000010010000,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,",
@@ -497,6 +549,7 @@
"03000000321500000104000011010000,Razer Panthera (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000321500000010000011010000,Razer RAIJU,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"03000000321500000507000000010000,Razer Raiju Mobile,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b21,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "03000000321500000011000011010000,Razer Raion Fightpad for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"030000008916000000fe000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000c6240000045d000024010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
@@ -523,14 +576,16 @@
"03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,a:b2,b:b1,back:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,",
"030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
- "03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
- "03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
- "03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
- "03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
- "05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
- "05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
- "05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "03000000d11800000094000011010000,Stadia Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,",
+ "03000000de2800000112000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "03000000de2800000211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "03000000de2800004211000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "05000000de2800000212000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
+ "05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
"03000000de280000ff11000001000000,Steam Virtual Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "0500000011010000311400001b010000,SteelSeries Stratus Duo,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b32,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"03000000ad1b000038f0000090040000,Street Fighter IV FightStick TE,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000666600000488000000010000,Super Joy Box 5 Pro,a:b2,b:b1,back:b9,dpdown:b14,dpleft:b15,dpright:b13,dpup:b12,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b3,y:b0,",
"0300000000f00000f100000000010000,Super RetroPort,a:b1,b:b5,back:b2,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,start:b3,x:b0,y:b4,",
@@ -548,6 +603,7 @@
"03000000790000000600000007010000,USB gamepad,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a3,righty:a4,start:b9,x:b3,y:b0,",
"05000000ac0500003232000001000000,VR-BOX,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a3,righty:a2,start:b9,x:b2,y:b3,",
"030000006f0e00000302000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
+ "030000006f0e00000702000011010000,Victrix Pro Fight Stick for PS4,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,start:b9,x:b0,y:b3,",
"030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
@@ -559,9 +615,12 @@
"0000000058626f782033363020576900,Xbox 360 Wireless Controller,a:b0,b:b1,back:b14,dpdown:b11,dpleft:b12,dpright:b13,dpup:b10,guide:b7,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,",
"030000005e040000a102000014010000,Xbox 360 Wireless Receiver (XBOX),a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,",
- "030000005e040000ea02000001030000,Xbox One Wireless Controller (Model 1708),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "050000005e040000050b000002090000,Xbox One Elite Series 2,a:b0,b:b1,back:b136,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:a6,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a5,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "050000005e040000050b000003090000,Xbox One Elite Series 2,a:b0,b:b1,back:b121,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "030000005e040000ea02000000000000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "030000005e040000ea02000001030000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"050000005e040000e002000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
- "050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
+ "050000005e040000fd02000003090000,Xbox One Wireless Controller,a:b0,b:b1,back:b15,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,guide:b16,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,",
"05000000172700004431000029010000,XiaoMi Game Controller,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b20,leftshoulder:b6,leftstick:b13,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:a6,rightx:a2,righty:a5,start:b11,x:b3,y:b4,",
"03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,",
"03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
@@ -574,13 +633,18 @@
#endif
#if defined(__ANDROID__)
"05000000d6020000e5890000dfff3f00,GPD XD Plus,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,",
+ "0500000031366332860c44aadfff0f00,GS Gamepad,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"05000000bc20000000550000ffff3f00,GameSir G3w,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000005509000003720000cf7f3f00,NVIDIA Controller v01.01,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000005509000010720000ffff3f00,NVIDIA Controller v01.03,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
- "050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,start:b16,x:b17,y:b2,", /* Extremely slow in Bluetooth mode on Android */
+ "050000005509000014720000df7f3f00,NVIDIA Controller v01.04,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a5,start:b6,x:b2,y:b3,",
+ "050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b1,b:b0,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:b15,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:b16,rightx:a2,righty:a3,sdk>=:29,start:b6,x:b3,y:b2,",
+ "050000007e05000009200000ffff0f00,Nintendo Switch Pro Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:b9,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:b10,rightx:a2,righty:a3,sdk<=:28,start:b16,x:b17,y:b2,", /* Extremely slow in Bluetooth mode on Android */
"050000004c05000068020000dfff3f00,PS3 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
+ "030000004c050000cc09000000006800,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000004c050000c4050000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:+a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:+a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,",
"050000004c050000cc090000fffe3f00,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a4,rightx:a2,righty:a5,start:b16,x:b0,y:b2,",
+ "050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000003215000007070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000003215000000090000bf7f3f00,Razer Serval,a:b0,b:b1,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,x:b2,y:b3,",
@@ -587,8 +651,10 @@
"05000000de2800000511000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
"05000000de2800000611000001000000,Steam Controller,a:b0,b:b1,back:b6,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a3,start:b7,x:b2,y:b3,",
"050000005e040000e00200000ffe3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b3,leftstick:b15,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b16,righttrigger:a5,rightx:a3,righty:a4,start:b10,x:b17,y:b2,",
- "050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a4,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
+ "050000005e040000fd020000ffff3f00,Xbox One Wireless Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
"050000005e04000091020000ff073f00,Xbox Wireless Controller,a:b0,b:b1,back:b4,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,", /* The DPAD doesn't seem to work on this controller on Android TV? */
+ "050000001727000044310000ffff3f00,XiaoMi Game Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a7,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a6,rightx:a2,righty:a5,start:b6,x:b2,y:b3,",
+ "0500000083050000602000000ffe0000,iBuffalo USB 2-axis 8-button Gamepad,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b15,rightshoulder:b16,start:b10,x:b2,y:b3,",
#endif
#if defined(SDL_JOYSTICK_MFI)
"05000000ac050000010000004f066d01,*,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b6,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,x:b2,y:b3,",
--- a/external/SDL2/src/joystick/SDL_joystick.c
+++ b/external/SDL2/src/joystick/SDL_joystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -33,6 +33,7 @@
#include "../events/SDL_events_c.h"
#endif
#include "../video/SDL_sysvideo.h"
+#include "hidapi/SDL_hidapijoystick_c.h"
/* This is included in only one place because it has a large static list of controllers */
#include "controller_type.h"
@@ -82,6 +83,8 @@
static SDL_bool SDL_updating_joystick = SDL_FALSE;
static SDL_mutex *SDL_joystick_lock = NULL; /* This needs to support recursive locks */
static SDL_atomic_t SDL_next_joystick_instance_id;
+static int SDL_joystick_player_count = 0;
+static SDL_JoystickID *SDL_joystick_players = NULL;
void
SDL_LockJoysticks(void)
@@ -99,7 +102,91 @@
}
}
+static int
+SDL_FindFreePlayerIndex()
+{
+ int player_index;
+ for (player_index = 0; player_index < SDL_joystick_player_count; ++player_index) {
+ if (SDL_joystick_players[player_index] == -1) {
+ return player_index;
+ }
+ }
+ return player_index;
+}
+
+static int
+SDL_GetPlayerIndexForJoystickID(SDL_JoystickID instance_id)
+{
+ int player_index;
+
+ for (player_index = 0; player_index < SDL_joystick_player_count; ++player_index) {
+ if (instance_id == SDL_joystick_players[player_index]) {
+ break;
+ }
+ }
+ if (player_index == SDL_joystick_player_count) {
+ player_index = -1;
+ }
+ return player_index;
+}
+
+static SDL_JoystickID
+SDL_GetJoystickIDForPlayerIndex(int player_index)
+{
+ if (player_index < 0 || player_index >= SDL_joystick_player_count) {
+ return -1;
+ }
+ return SDL_joystick_players[player_index];
+}
+
+static SDL_bool
+SDL_SetJoystickIDForPlayerIndex(int player_index, SDL_JoystickID instance_id)
+{
+ SDL_JoystickID existing_instance = SDL_GetJoystickIDForPlayerIndex(player_index);
+ SDL_JoystickDriver *driver;
+ int device_index;
+ int existing_player_index;
+
+ if (player_index < 0) {
+ return SDL_FALSE;
+ }
+ if (player_index >= SDL_joystick_player_count) {
+ SDL_JoystickID *new_players = (SDL_JoystickID *)SDL_realloc(SDL_joystick_players, (player_index + 1)*sizeof(*SDL_joystick_players));
+ if (!new_players) {
+ SDL_OutOfMemory();
+ return SDL_FALSE;
+ }
+
+ SDL_joystick_players = new_players;
+ SDL_memset(&SDL_joystick_players[SDL_joystick_player_count], 0xFF, (player_index - SDL_joystick_player_count + 1) * sizeof(SDL_joystick_players[0]));
+ SDL_joystick_player_count = player_index + 1;
+ } else if (SDL_joystick_players[player_index] == instance_id) {
+ /* Joystick is already assigned the requested player index */
+ return SDL_TRUE;
+ }
+
+ /* Clear the old player index */
+ existing_player_index = SDL_GetPlayerIndexForJoystickID(instance_id);
+ if (existing_player_index >= 0) {
+ SDL_joystick_players[existing_player_index] = -1;
+ }
+
+ SDL_joystick_players[player_index] = instance_id;
+
+ /* Update the driver with the new index */
+ device_index = SDL_JoystickGetDeviceIndexFromInstanceID(instance_id);
+ if (SDL_GetDriverAndJoystickIndex(device_index, &driver, &device_index)) {
+ driver->SetDevicePlayerIndex(device_index, player_index);
+ }
+
+ /* Move any existing joystick to another slot */
+ if (existing_instance >= 0) {
+ SDL_SetJoystickIDForPlayerIndex(SDL_FindFreePlayerIndex(), existing_instance);
+ }
+ return SDL_TRUE;
+}
+
static void SDLCALL
SDL_JoystickAllowBackgroundEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
@@ -227,16 +314,16 @@
return name;
}
+/*
+ * Get the player index of a joystick, or -1 if it's not available
+ */
int
SDL_JoystickGetDevicePlayerIndex(int device_index)
{
- SDL_JoystickDriver *driver;
- int player_index = -1;
+ int player_index;
SDL_LockJoysticks();
- if (SDL_GetDriverAndJoystickIndex(device_index, &driver, &device_index)) {
- player_index = driver->GetDevicePlayerIndex(device_index);
- }
+ player_index = SDL_GetPlayerIndexForJoystickID(SDL_JoystickGetDeviceInstanceID(device_index));
SDL_UnlockJoysticks();
return player_index;
@@ -322,7 +409,6 @@
joystick->driver = driver;
joystick->instance_id = instance_id;
joystick->attached = SDL_TRUE;
- joystick->player_index = -1;
joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
if (driver->Open(joystick, device_index) < 0) {
@@ -390,16 +476,16 @@
/*
* Checks to make sure the joystick is valid.
*/
-int
+SDL_bool
SDL_PrivateJoystickValid(SDL_Joystick * joystick)
{
- int valid;
+ SDL_bool valid;
if (joystick == NULL) {
SDL_SetError("Joystick hasn't been opened yet");
- valid = 0;
+ valid = SDL_FALSE;
} else {
- valid = 1;
+ valid = SDL_TRUE;
}
return valid;
@@ -588,16 +674,16 @@
}
/*
- * Find the SDL_Joystick that owns this instance id
+ * Return the SDL_Joystick associated with an instance id.
*/
SDL_Joystick *
-SDL_JoystickFromInstanceID(SDL_JoystickID joyid)
+SDL_JoystickFromInstanceID(SDL_JoystickID instance_id)
{
SDL_Joystick *joystick;
SDL_LockJoysticks();
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
- if (joystick->instance_id == joyid) {
+ if (joystick->instance_id == instance_id) {
break;
}
}
@@ -605,6 +691,26 @@
return joystick;
}
+/**
+ * Return the SDL_Joystick associated with a player index.
+ */
+SDL_Joystick *
+SDL_JoystickFromPlayerIndex(int player_index)
+{
+ SDL_JoystickID instance_id;
+ SDL_Joystick *joystick;
+
+ SDL_LockJoysticks();
+ instance_id = SDL_GetJoystickIDForPlayerIndex(player_index);
+ for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
+ if (joystick->instance_id == instance_id) {
+ break;
+ }
+ }
+ SDL_UnlockJoysticks();
+ return joystick;
+}
+
/*
* Get the friendly name of this joystick
*/
@@ -618,22 +724,73 @@
return SDL_FixupJoystickName(joystick->name);
}
+/**
+ * Get the player index of an opened joystick, or -1 if it's not available
+ */
int
SDL_JoystickGetPlayerIndex(SDL_Joystick * joystick)
{
+ int player_index;
+
if (!SDL_PrivateJoystickValid(joystick)) {
return -1;
}
- return joystick->player_index;
+
+ SDL_LockJoysticks();
+ player_index = SDL_GetPlayerIndexForJoystickID(joystick->instance_id);
+ SDL_UnlockJoysticks();
+
+ return player_index;
}
+/**
+ * Set the player index of an opened joystick
+ */
+void
+SDL_JoystickSetPlayerIndex(SDL_Joystick * joystick, int player_index)
+{
+ if (!SDL_PrivateJoystickValid(joystick)) {
+ return;
+ }
+
+ SDL_LockJoysticks();
+ SDL_SetJoystickIDForPlayerIndex(player_index, joystick->instance_id);
+ SDL_UnlockJoysticks();
+}
+
int
SDL_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
{
+ int result;
+
if (!SDL_PrivateJoystickValid(joystick)) {
return -1;
}
- return joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble, duration_ms);
+
+ SDL_LockJoysticks();
+ if (low_frequency_rumble == joystick->low_frequency_rumble &&
+ high_frequency_rumble == joystick->high_frequency_rumble) {
+ /* Just update the expiration */
+ result = 0;
+ } else {
+ result = joystick->driver->Rumble(joystick, low_frequency_rumble, high_frequency_rumble);
+ }
+
+ /* Save the rumble value regardless of success, so we don't spam the driver */
+ joystick->low_frequency_rumble = low_frequency_rumble;
+ joystick->high_frequency_rumble = high_frequency_rumble;
+
+ if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
+ joystick->rumble_expiration = SDL_GetTicks() + SDL_min(duration_ms, SDL_MAX_RUMBLE_DURATION_MS);
+ if (!joystick->rumble_expiration) {
+ joystick->rumble_expiration = 1;
+ }
+ } else {
+ joystick->rumble_expiration = 0;
+ }
+ SDL_UnlockJoysticks();
+
+ return result;
}
/*
@@ -662,6 +819,10 @@
return;
}
+ if (joystick->rumble_expiration) {
+ SDL_JoystickRumble(joystick, 0, 0, 0);
+ }
+
joystick->driver->Close(joystick);
joystick->hwdata = NULL;
@@ -717,6 +878,11 @@
SDL_joystick_drivers[i]->Quit();
}
+ if (SDL_joystick_players) {
+ SDL_free(SDL_joystick_players);
+ SDL_joystick_players = NULL;
+ SDL_joystick_player_count = 0;
+ }
SDL_UnlockJoysticks();
#if !SDL_EVENTS_DISABLED
@@ -754,20 +920,36 @@
void SDL_PrivateJoystickAdded(SDL_JoystickID device_instance)
{
-#if !SDL_EVENTS_DISABLED
- SDL_Event event;
- int device_index;
-
- device_index = SDL_JoystickGetDeviceIndexFromInstanceID(device_instance);
+ SDL_JoystickDriver *driver;
+ int driver_device_index;
+ int player_index = -1;
+ int device_index = SDL_JoystickGetDeviceIndexFromInstanceID(device_instance);
if (device_index < 0) {
return;
}
- event.type = SDL_JOYDEVICEADDED;
+ SDL_LockJoysticks();
+ if (SDL_GetDriverAndJoystickIndex(device_index, &driver, &driver_device_index)) {
+ player_index = driver->GetDevicePlayerIndex(driver_device_index);
+ }
+ if (player_index < 0 && SDL_IsGameController(device_index)) {
+ player_index = SDL_FindFreePlayerIndex();
+ }
+ if (player_index >= 0) {
+ SDL_SetJoystickIDForPlayerIndex(player_index, device_instance);
+ }
+ SDL_UnlockJoysticks();
- if (SDL_GetEventState(event.type) == SDL_ENABLE) {
- event.jdevice.which = device_index;
- SDL_PushEvent(&event);
+#if !SDL_EVENTS_DISABLED
+ {
+ SDL_Event event;
+
+ event.type = SDL_JOYDEVICEADDED;
+
+ if (SDL_GetEventState(event.type) == SDL_ENABLE) {
+ event.jdevice.which = device_index;
+ SDL_PushEvent(&event);
+ }
}
#endif /* !SDL_EVENTS_DISABLED */
}
@@ -805,6 +987,7 @@
void SDL_PrivateJoystickRemoved(SDL_JoystickID device_instance)
{
SDL_Joystick *joystick;
+ int player_index;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
@@ -827,6 +1010,13 @@
break;
}
}
+
+ SDL_LockJoysticks();
+ player_index = SDL_GetPlayerIndexForJoystickID(device_instance);
+ if (player_index >= 0) {
+ SDL_joystick_players[player_index] = -1;
+ }
+ SDL_UnlockJoysticks();
}
int
@@ -833,29 +1023,35 @@
SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value)
{
int posted;
+ SDL_JoystickAxisInfo *info;
/* Make sure we're not getting garbage or duplicate events */
if (axis >= joystick->naxes) {
return 0;
}
- if (!joystick->axes[axis].has_initial_value) {
- joystick->axes[axis].initial_value = value;
- joystick->axes[axis].value = value;
- joystick->axes[axis].zero = value;
- joystick->axes[axis].has_initial_value = SDL_TRUE;
+
+ info = &joystick->axes[axis];
+ if (!info->has_initial_value ||
+ (!info->has_second_value && (info->initial_value == -32768 || info->initial_value == 32767) && SDL_abs(value) < (SDL_JOYSTICK_AXIS_MAX / 4))) {
+ info->initial_value = value;
+ info->value = value;
+ info->zero = value;
+ info->has_initial_value = SDL_TRUE;
+ } else {
+ info->has_second_value = SDL_TRUE;
}
- if (value == joystick->axes[axis].value) {
+ if (value == info->value) {
return 0;
}
- if (!joystick->axes[axis].sent_initial_value) {
+ if (!info->sent_initial_value) {
/* Make sure we don't send motion until there's real activity on this axis */
const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 controller needed 96 */
- if (SDL_abs(value - joystick->axes[axis].value) <= MAX_ALLOWED_JITTER) {
+ if (SDL_abs(value - info->value) <= MAX_ALLOWED_JITTER) {
return 0;
}
- joystick->axes[axis].sent_initial_value = SDL_TRUE;
- joystick->axes[axis].value = value; /* Just so we pass the check above */
- SDL_PrivateJoystickAxis(joystick, axis, joystick->axes[axis].initial_value);
+ info->sent_initial_value = SDL_TRUE;
+ info->value = value; /* Just so we pass the check above */
+ SDL_PrivateJoystickAxis(joystick, axis, info->initial_value);
}
/* We ignore events if we don't have keyboard focus, except for centering
@@ -862,14 +1058,14 @@
* events.
*/
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
- if ((value > joystick->axes[axis].zero && value >= joystick->axes[axis].value) ||
- (value < joystick->axes[axis].zero && value <= joystick->axes[axis].value)) {
+ if ((value > info->zero && value >= info->value) ||
+ (value < info->zero && value <= info->value)) {
return 0;
}
}
/* Update internal joystick state */
- joystick->axes[axis].value = value;
+ info->value = value;
/* Post the event, if desired */
posted = 0;
@@ -1018,7 +1214,7 @@
SDL_JoystickUpdate(void)
{
int i;
- SDL_Joystick *joystick;
+ SDL_Joystick *joystick, *next;
if (!SDL_WasInit(SDL_INIT_JOYSTICK)) {
return;
@@ -1037,6 +1233,11 @@
/* Make sure the list is unlocked while dispatching events to prevent application deadlocks */
SDL_UnlockJoysticks();
+#ifdef SDL_JOYSTICK_HIDAPI
+ /* Special function for HIDAPI devices, as a single device can provide multiple SDL_Joysticks */
+ HIDAPI_UpdateDevices();
+#endif /* SDL_JOYSTICK_HIDAPI */
+
for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
if (joystick->attached) {
/* This should always be true, but seeing a crash in the wild...? */
@@ -1049,6 +1250,16 @@
}
}
+ if (joystick->rumble_expiration) {
+ SDL_LockJoysticks();
+ /* Double check now that the lock is held */
+ if (joystick->rumble_expiration &&
+ SDL_TICKS_PASSED(SDL_GetTicks(), joystick->rumble_expiration)) {
+ SDL_JoystickRumble(joystick, 0, 0, 0);
+ }
+ SDL_UnlockJoysticks();
+ }
+
if (joystick->force_recentering) {
/* Tell the app that everything is centered/unpressed... */
for (i = 0; i < joystick->naxes; i++) {
@@ -1074,7 +1285,8 @@
SDL_updating_joystick = SDL_FALSE;
/* If any joysticks were closed while updating, free them here */
- for (joystick = SDL_joysticks; joystick; joystick = joystick->next) {
+ for (joystick = SDL_joysticks; joystick; joystick = next) {
+ next = joystick->next;
if (joystick->ref_count <= 0) {
SDL_JoystickClose(joystick);
}
@@ -1157,48 +1369,175 @@
}
}
-SDL_bool
-SDL_IsJoystickPS4(Uint16 vendor, Uint16 product)
+const char *
+SDL_GetCustomJoystickManufacturer(const char *manufacturer)
{
- return (GuessControllerType(vendor, product) == k_eControllerType_PS4Controller);
+ if (manufacturer) {
+ if (SDL_strcmp(manufacturer, "Performance Designed Products") == 0) {
+ return "PDP";
+ } else if (SDL_strcmp(manufacturer, "HORI CO.,LTD") == 0) {
+ return "HORI";
+ }
+ }
+ return manufacturer;
}
-SDL_bool
-SDL_IsJoystickNintendoSwitchPro(Uint16 vendor, Uint16 product)
+const char *
+SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product)
{
- EControllerType eType = GuessControllerType(vendor, product);
- return (eType == k_eControllerType_SwitchProController ||
- eType == k_eControllerType_SwitchInputOnlyController);
+ return GuessControllerName(vendor, product);
}
-SDL_bool
-SDL_IsJoystickSteamController(Uint16 vendor, Uint16 product)
+SDL_GameControllerType
+SDL_GetJoystickGameControllerTypeFromGUID(SDL_JoystickGUID guid, const char *name)
{
- EControllerType eType = GuessControllerType(vendor, product);
- return (eType == k_eControllerType_SteamController ||
- eType == k_eControllerType_SteamControllerV2);
+ SDL_GameControllerType type;
+ Uint16 vendor, product;
+
+ SDL_GetJoystickGUIDInfo(guid, &vendor, &product, NULL);
+ type = SDL_GetJoystickGameControllerType(name, vendor, product, -1, 0, 0, 0);
+ if (type == SDL_CONTROLLER_TYPE_UNKNOWN) {
+ if (SDL_IsJoystickXInput(guid)) {
+ /* This is probably an Xbox One controller */
+ return SDL_CONTROLLER_TYPE_XBOXONE;
+ }
+ }
+ return type;
}
-SDL_bool
-SDL_IsJoystickXbox360(Uint16 vendor, Uint16 product)
+SDL_GameControllerType
+SDL_GetJoystickGameControllerType(const char *name, Uint16 vendor, Uint16 product, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
{
- /* Filter out some bogus values here */
- if (vendor == 0x0000 && product == 0x0000) {
- return SDL_FALSE;
+ static const int LIBUSB_CLASS_VENDOR_SPEC = 0xFF;
+ static const int XB360_IFACE_SUBCLASS = 93;
+ static const int XB360_IFACE_PROTOCOL = 1; /* Wired */
+ static const int XB360W_IFACE_PROTOCOL = 129; /* Wireless */
+ static const int XBONE_IFACE_SUBCLASS = 71;
+ static const int XBONE_IFACE_PROTOCOL = 208;
+
+ SDL_GameControllerType type = SDL_CONTROLLER_TYPE_UNKNOWN;
+
+ /* This code should match the checks in libusb/hid.c and HIDDeviceManager.java */
+ if (interface_class == LIBUSB_CLASS_VENDOR_SPEC &&
+ interface_subclass == XB360_IFACE_SUBCLASS &&
+ (interface_protocol == XB360_IFACE_PROTOCOL ||
+ interface_protocol == XB360W_IFACE_PROTOCOL)) {
+
+ static const int SUPPORTED_VENDORS[] = {
+ 0x0079, /* GPD Win 2 */
+ 0x044f, /* Thrustmaster */
+ 0x045e, /* Microsoft */
+ 0x046d, /* Logitech */
+ 0x056e, /* Elecom */
+ 0x06a3, /* Saitek */
+ 0x0738, /* Mad Catz */
+ 0x07ff, /* Mad Catz */
+ 0x0e6f, /* PDP */
+ 0x0f0d, /* Hori */
+ 0x1038, /* SteelSeries */
+ 0x11c9, /* Nacon */
+ 0x12ab, /* Unknown */
+ 0x1430, /* RedOctane */
+ 0x146b, /* BigBen */
+ 0x1532, /* Razer Sabertooth */
+ 0x15e4, /* Numark */
+ 0x162e, /* Joytech */
+ 0x1689, /* Razer Onza */
+ 0x1bad, /* Harmonix */
+ 0x24c6, /* PowerA */
+ };
+
+ int i;
+ for (i = 0; i < SDL_arraysize(SUPPORTED_VENDORS); ++i) {
+ if (vendor == SUPPORTED_VENDORS[i]) {
+ type = SDL_CONTROLLER_TYPE_XBOX360;
+ break;
+ }
+ }
}
- if (vendor == 0x0001 && product == 0x0001) {
- return SDL_FALSE;
+
+ if (interface_number == 0 &&
+ interface_class == LIBUSB_CLASS_VENDOR_SPEC &&
+ interface_subclass == XBONE_IFACE_SUBCLASS &&
+ interface_protocol == XBONE_IFACE_PROTOCOL) {
+
+ static const int SUPPORTED_VENDORS[] = {
+ 0x045e, /* Microsoft */
+ 0x0738, /* Mad Catz */
+ 0x0e6f, /* PDP */
+ 0x0f0d, /* Hori */
+ 0x1532, /* Razer Wildcat */
+ 0x24c6, /* PowerA */
+ 0x2e24, /* Hyperkin */
+ };
+
+ int i;
+ for (i = 0; i < SDL_arraysize(SUPPORTED_VENDORS); ++i) {
+ if (vendor == SUPPORTED_VENDORS[i]) {
+ type = SDL_CONTROLLER_TYPE_XBOXONE;
+ break;
+ }
+ }
}
- return (GuessControllerType(vendor, product) == k_eControllerType_XBox360Controller);
+
+ if (type == SDL_CONTROLLER_TYPE_UNKNOWN) {
+ if (vendor == 0x0000 && product == 0x0000) {
+ /* Some devices are only identifiable by their name */
+ if (SDL_strcmp(name, "Lic Pro Controller") == 0 ||
+ SDL_strcmp(name, "Nintendo Wireless Gamepad") == 0 ||
+ SDL_strcmp(name, "Wireless Gamepad") == 0) {
+ /* HORI or PowerA Switch Pro Controller clone */
+ type = SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO;
+ } else {
+ type = SDL_CONTROLLER_TYPE_UNKNOWN;
+ }
+
+ } else if (vendor == 0x0001 && product == 0x0001) {
+ type = SDL_CONTROLLER_TYPE_UNKNOWN;
+
+ } else {
+ switch (GuessControllerType(vendor, product)) {
+ case k_eControllerType_XBox360Controller:
+ type = SDL_CONTROLLER_TYPE_XBOX360;
+ break;
+ case k_eControllerType_XBoxOneController:
+ type = SDL_CONTROLLER_TYPE_XBOXONE;
+ break;
+ case k_eControllerType_PS3Controller:
+ type = SDL_CONTROLLER_TYPE_PS3;
+ break;
+ case k_eControllerType_PS4Controller:
+ type = SDL_CONTROLLER_TYPE_PS4;
+ break;
+ case k_eControllerType_SwitchProController:
+ case k_eControllerType_SwitchInputOnlyController:
+ type = SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO;
+ break;
+ default:
+ type = SDL_CONTROLLER_TYPE_UNKNOWN;
+ break;
+ }
+ }
+ }
+ return type;
}
SDL_bool
-SDL_IsJoystickXboxOne(Uint16 vendor, Uint16 product)
+SDL_IsJoystickNintendoSwitchProInputOnly(Uint16 vendor, Uint16 product)
{
- return (GuessControllerType(vendor, product) == k_eControllerType_XBoxOneController);
+ EControllerType eType = GuessControllerType(vendor, product);
+ return (eType == k_eControllerType_SwitchInputOnlyController);
}
SDL_bool
+SDL_IsJoystickSteamController(Uint16 vendor, Uint16 product)
+{
+ EControllerType eType = GuessControllerType(vendor, product);
+ return (eType == k_eControllerType_SteamController ||
+ eType == k_eControllerType_SteamControllerV2);
+}
+
+SDL_bool
SDL_IsJoystickXInput(SDL_JoystickGUID guid)
{
return (guid.data[14] == 'x') ? SDL_TRUE : SDL_FALSE;
@@ -1473,7 +1812,7 @@
}
}
- if (SDL_IsJoystickPS4(vendor, product) && SDL_IsPS4RemapperRunning()) {
+ if (SDL_GetJoystickGameControllerType(name, vendor, product, -1, 0, 0, 0) == SDL_CONTROLLER_TYPE_PS4 && SDL_IsPS4RemapperRunning()) {
return SDL_TRUE;
}
--- a/external/SDL2/src/joystick/SDL_joystick_c.h
+++ b/external/SDL2/src/joystick/SDL_joystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -25,6 +25,7 @@
#include "../SDL_internal.h"
/* Useful functions and variables from SDL_joystick.c */
+#include "SDL_gamecontroller.h"
#include "SDL_joystick.h"
struct _SDL_JoystickDriver;
@@ -51,21 +52,22 @@
/* Function to extract information from an SDL joystick GUID */
extern void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version);
-/* Function to return whether a joystick is a PS4 controller */
-extern SDL_bool SDL_IsJoystickPS4(Uint16 vendor_id, Uint16 product_id);
+/* Function to get a custom name for a controller manufacturer, if it's available */
+extern const char *SDL_GetCustomJoystickManufacturer(const char *manufacturer);
+/* Function to get a custom name for a controller, if it's available */
+extern const char *SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product);
+
+/* Function to return the type of a controller */
+extern SDL_GameControllerType SDL_GetJoystickGameControllerTypeFromGUID(SDL_JoystickGUID guid, const char *name);
+extern SDL_GameControllerType SDL_GetJoystickGameControllerType(const char *name, Uint16 vendor, Uint16 product, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
+
/* Function to return whether a joystick is a Nintendo Switch Pro controller */
-extern SDL_bool SDL_IsJoystickNintendoSwitchPro(Uint16 vendor_id, Uint16 product_id);
+extern SDL_bool SDL_IsJoystickNintendoSwitchProInputOnly(Uint16 vendor_id, Uint16 product_id);
/* Function to return whether a joystick is a Steam Controller */
extern SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id);
-/* Function to return whether a joystick is an Xbox 360 controller */
-extern SDL_bool SDL_IsJoystickXbox360(Uint16 vendor_id, Uint16 product_id);
-
-/* Function to return whether a joystick is an Xbox One controller */
-extern SDL_bool SDL_IsJoystickXboxOne(Uint16 vendor_id, Uint16 product_id);
-
/* Function to return whether a joystick guid comes from the XInput driver */
extern SDL_bool SDL_IsJoystickXInput(SDL_JoystickGUID guid);
@@ -99,7 +101,7 @@
SDL_JoystickPowerLevel ePowerLevel);
/* Internal sanity checking functions */
-extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick);
+extern SDL_bool SDL_PrivateJoystickValid(SDL_Joystick * joystick);
#endif /* SDL_joystick_c_h_ */
--- a/external/SDL2/src/joystick/SDL_sysjoystick.h
+++ b/external/SDL2/src/joystick/SDL_sysjoystick.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -35,6 +35,7 @@
Sint16 value; /* Current axis state */
Sint16 zero; /* Zero point on the axis (-32768 for triggers) */
SDL_bool has_initial_value; /* Whether we've seen a value on the axis yet */
+ SDL_bool has_second_value; /* Whether we've seen a second value on the axis yet */
SDL_bool sent_initial_value; /* Whether we've sent the initial axis value */
} SDL_JoystickAxisInfo;
@@ -42,7 +43,6 @@
{
SDL_JoystickID instance_id; /* Device instance, monotonically increasing from 0 */
char *name; /* Joystick name - system dependent */
- int player_index; /* Joystick player index, or -1 if unavailable */
SDL_JoystickGUID guid; /* Joystick guid */
int naxes; /* Number of axis controls on the joystick */
@@ -60,6 +60,10 @@
int nbuttons; /* Number of buttons on the joystick */
Uint8 *buttons; /* Current button states */
+ Uint16 low_frequency_rumble;
+ Uint16 high_frequency_rumble;
+ Uint32 rumble_expiration;
+
SDL_bool attached;
SDL_bool is_game_controller;
SDL_bool delayed_guide_button; /* SDL_TRUE if this device has the guide button event delayed */
@@ -74,14 +78,6 @@
struct _SDL_Joystick *next; /* pointer to next joystick we have allocated */
};
-#if defined(__IPHONEOS__) || defined(__ANDROID__)
-#define HAVE_STEAMCONTROLLERS
-#define USE_STEAMCONTROLLER_HIDAPI
-#elif defined(__LINUX__)
-#define HAVE_STEAMCONTROLLERS
-#define USE_STEAMCONTROLLER_LINUX
-#endif
-
/* Device bus definitions */
#define SDL_HARDWARE_BUS_USB 0x03
#define SDL_HARDWARE_BUS_BLUETOOTH 0x05
@@ -109,6 +105,9 @@
/* Function to get the player index of a joystick */
int (*GetDevicePlayerIndex)(int device_index);
+ /* Function to get the player index of a joystick */
+ void (*SetDevicePlayerIndex)(int device_index, int player_index);
+
/* Function to return the stable GUID for a plugged in device */
SDL_JoystickGUID (*GetDeviceGUID)(int device_index);
@@ -123,7 +122,7 @@
int (*Open)(SDL_Joystick * joystick, int device_index);
/* Rumble functionality */
- int (*Rumble)(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
+ int (*Rumble)(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble);
/* Function to update the state of a joystick - called as a device poll.
* This function shouldn't update the joystick structure directly,
@@ -139,6 +138,9 @@
void (*Quit)(void);
} SDL_JoystickDriver;
+
+/* Windows and Mac OSX has a limit of MAX_DWORD / 1000, Linux kernel has a limit of 0xFFFF */
+#define SDL_MAX_RUMBLE_DURATION_MS 0xFFFF
/* The available joystick drivers */
extern SDL_JoystickDriver SDL_ANDROID_JoystickDriver;
--- a/external/SDL2/src/joystick/android/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/android/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -344,7 +344,7 @@
}
#ifdef SDL_JOYSTICK_HIDAPI
- if (HIDAPI_IsDevicePresent(vendor_id, product_id, 0)) {
+ if (HIDAPI_IsDevicePresent(vendor_id, product_id, 0, name)) {
/* The HIDAPI driver is taking care of this device */
return -1;
}
@@ -497,7 +497,7 @@
}
-static void ANDROID_JoystickDetect();
+static void ANDROID_JoystickDetect(void);
static int
ANDROID_JoystickInit(void)
@@ -587,6 +587,11 @@
return -1;
}
+static void
+ANDROID_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
static SDL_JoystickGUID
ANDROID_JoystickGetDeviceGUID(int device_index)
{
@@ -624,7 +629,7 @@
}
static int
-ANDROID_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+ANDROID_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -696,6 +701,7 @@
ANDROID_JoystickDetect,
ANDROID_JoystickGetDeviceName,
ANDROID_JoystickGetDevicePlayerIndex,
+ ANDROID_JoystickSetDevicePlayerIndex,
ANDROID_JoystickGetDeviceGUID,
ANDROID_JoystickGetDeviceInstanceID,
ANDROID_JoystickOpen,
--- a/external/SDL2/src/joystick/android/SDL_sysjoystick_c.h
+++ b/external/SDL2/src/joystick/android/SDL_sysjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/bsd/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/bsd/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -276,6 +276,11 @@
return -1;
}
+static void
+BSD_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
/* Function to perform the mapping from device index to the instance id for this index */
static SDL_JoystickID
BSD_JoystickGetDeviceInstanceID(int device_index)
@@ -752,7 +757,7 @@
}
static int
-BSD_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+BSD_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -764,6 +769,7 @@
BSD_JoystickDetect,
BSD_JoystickGetDeviceName,
BSD_JoystickGetDevicePlayerIndex,
+ BSD_JoystickSetDevicePlayerIndex,
BSD_JoystickGetDeviceGUID,
BSD_JoystickGetDeviceInstanceID,
BSD_JoystickOpen,
--- a/external/SDL2/src/joystick/controller_type.h
+++ b/external/SDL2/src/joystick/controller_type.h
@@ -24,10 +24,6 @@
#pragma once
#endif
-#ifndef __cplusplus
-#define inline SDL_INLINE
-#endif
-
//-----------------------------------------------------------------------------
// Purpose: Steam Controller models
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN A DATABASE
@@ -65,335 +61,454 @@
k_eControllertype_GenericMouse = 800,
} EControllerType;
-#define MAKE_CONTROLLER_ID( nVID, nPID ) (unsigned int)( nVID << 16 | nPID )
+#define MAKE_CONTROLLER_ID( nVID, nPID ) (unsigned int)( (unsigned int)nVID << 16 | (unsigned int)nPID )
typedef struct
{
unsigned int m_unDeviceID;
EControllerType m_eControllerType;
+ const char *m_pszName;
} ControllerDescription_t;
static const ControllerDescription_t arrControllers[] = {
- { MAKE_CONTROLLER_ID( 0x0079, 0x18d4 ), k_eControllerType_XBox360Controller }, // GPD Win 2 X-Box Controller
- { MAKE_CONTROLLER_ID( 0x044f, 0xb326 ), k_eControllerType_XBox360Controller }, // Thrustmaster Gamepad GP XID
- { MAKE_CONTROLLER_ID( 0x045e, 0x028e ), k_eControllerType_XBox360Controller }, // Microsoft X-Box 360 pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x028f ), k_eControllerType_XBox360Controller }, // Microsoft X-Box 360 pad v2
- { MAKE_CONTROLLER_ID( 0x045e, 0x0291 ), k_eControllerType_XBox360Controller }, // Xbox 360 Wireless Receiver (XBOX)
- { MAKE_CONTROLLER_ID( 0x045e, 0x02a0 ), k_eControllerType_XBox360Controller }, // Microsoft X-Box 360 Big Button IR
- { MAKE_CONTROLLER_ID( 0x045e, 0x02a1 ), k_eControllerType_XBox360Controller }, // Microsoft X-Box 360 pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x02d1 ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x02dd ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One pad (Firmware 2015)
- { MAKE_CONTROLLER_ID( 0x045e, 0x02e0 ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One S pad (Bluetooth)
- { MAKE_CONTROLLER_ID( 0x045e, 0x02e3 ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One Elite pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x02ea ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One S pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x02fd ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One S pad (Bluetooth)
- { MAKE_CONTROLLER_ID( 0x045e, 0x02ff ), k_eControllerType_XBoxOneController }, // Microsoft X-Box One Elite pad
- { MAKE_CONTROLLER_ID( 0x045e, 0x0719 ), k_eControllerType_XBox360Controller }, // Xbox 360 Wireless Receiver
- { MAKE_CONTROLLER_ID( 0x046d, 0xc21d ), k_eControllerType_XBox360Controller }, // Logitech Gamepad F310
- { MAKE_CONTROLLER_ID( 0x046d, 0xc21e ), k_eControllerType_XBox360Controller }, // Logitech Gamepad F510
- { MAKE_CONTROLLER_ID( 0x046d, 0xc21f ), k_eControllerType_XBox360Controller }, // Logitech Gamepad F710
- { MAKE_CONTROLLER_ID( 0x046d, 0xc242 ), k_eControllerType_XBox360Controller }, // Logitech Chillstream Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x181a ), k_eControllerType_PS3Controller, NULL }, // Venom Arcade Stick
+ { MAKE_CONTROLLER_ID( 0x0079, 0x1844 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x044f, 0xb315 ), k_eControllerType_PS3Controller, NULL }, // Firestorm Dual Analog 3
+ { MAKE_CONTROLLER_ID( 0x044f, 0xd007 ), k_eControllerType_PS3Controller, NULL }, // Thrustmaster wireless 3-1
+ { MAKE_CONTROLLER_ID( 0x054c, 0x0268 ), k_eControllerType_PS3Controller, NULL }, // Sony PS3 Controller
+ { MAKE_CONTROLLER_ID( 0x056e, 0x200f ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x056e, 0x2013 ), k_eControllerType_PS3Controller, NULL }, // JC-U4113SBK
+ { MAKE_CONTROLLER_ID( 0x05b8, 0x1004 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x05b8, 0x1006 ), k_eControllerType_PS3Controller, NULL }, // JC-U3412SBK
+ { MAKE_CONTROLLER_ID( 0x06a3, 0xf622 ), k_eControllerType_PS3Controller, NULL }, // Cyborg V3
+ { MAKE_CONTROLLER_ID( 0x0738, 0x3180 ), k_eControllerType_PS3Controller, NULL }, // Mad Catz Alpha PS3 mode
+ { MAKE_CONTROLLER_ID( 0x0738, 0x3250 ), k_eControllerType_PS3Controller, NULL }, // madcats fightpad pro ps3
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8180 ), k_eControllerType_PS3Controller, NULL }, // Mad Catz Alpha PS4 mode (no touchpad on device)
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8838 ), k_eControllerType_PS3Controller, NULL }, // Madcatz Fightstick Pro
+ { MAKE_CONTROLLER_ID( 0x0810, 0x0001 ), k_eControllerType_PS3Controller, NULL }, // actually ps2 - maybe break out later
+ { MAKE_CONTROLLER_ID( 0x0810, 0x0003 ), k_eControllerType_PS3Controller, NULL }, // actually ps2 - maybe break out later
+ { MAKE_CONTROLLER_ID( 0x0925, 0x0005 ), k_eControllerType_PS3Controller, NULL }, // Sony PS3 Controller
+ { MAKE_CONTROLLER_ID( 0x0925, 0x8866 ), k_eControllerType_PS3Controller, NULL }, // PS2 maybe break out later
+ { MAKE_CONTROLLER_ID( 0x0925, 0x8888 ), k_eControllerType_PS3Controller, NULL }, // Actually ps2 -maybe break out later Lakeview Research WiseGroup Ltd, MP-8866 Dual Joypad
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0109 ), k_eControllerType_PS3Controller, NULL }, // PDP Versus Fighting Pad
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x011e ), k_eControllerType_PS3Controller, NULL }, // Rock Candy PS4
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0128 ), k_eControllerType_PS3Controller, NULL }, // Rock Candy PS3
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0203 ), k_eControllerType_PS3Controller, NULL }, // Victrix Pro FS (PS4 peripheral but no trackpad/lightbar)
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0214 ), k_eControllerType_PS3Controller, NULL }, // afterglow ps3
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x1314 ), k_eControllerType_PS3Controller, NULL }, // PDP Afterglow Wireless PS3 controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x6302 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x0e8f, 0x0008 ), k_eControllerType_PS3Controller, NULL }, // Green Asia
+ { MAKE_CONTROLLER_ID( 0x0e8f, 0x3075 ), k_eControllerType_PS3Controller, NULL }, // SpeedLink Strike FX
+ { MAKE_CONTROLLER_ID( 0x0e8f, 0x310d ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0009 ), k_eControllerType_PS3Controller, NULL }, // HORI BDA GP1
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x004d ), k_eControllerType_PS3Controller, NULL }, // Horipad 3
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x005e ), k_eControllerType_PS3Controller, NULL }, // HORI Fighting commander ps4
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x005f ), k_eControllerType_PS3Controller, NULL }, // HORI Fighting commander ps3
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x006a ), k_eControllerType_PS3Controller, NULL }, // Real Arcade Pro 4
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x006e ), k_eControllerType_PS3Controller, NULL }, // HORI horipad4 ps3
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0085 ), k_eControllerType_PS3Controller, NULL }, // HORI Fighting Commander PS3
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0086 ), k_eControllerType_PS3Controller, NULL }, // HORI Fighting Commander PC (Uses the Xbox 360 protocol, but has PS3 buttons)
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0087 ), k_eControllerType_PS3Controller, NULL }, // HORI fighting mini stick
+ { MAKE_CONTROLLER_ID( 0x0f30, 0x1100 ), k_eControllerType_PS3Controller, NULL }, // Quanba Q1 fight stick
+ { MAKE_CONTROLLER_ID( 0x11ff, 0x3331 ), k_eControllerType_PS3Controller, NULL }, // SRXJ-PH2400
+ { MAKE_CONTROLLER_ID( 0x1345, 0x1000 ), k_eControllerType_PS3Controller, NULL }, // PS2 ACME GA-D5
+ { MAKE_CONTROLLER_ID( 0x1345, 0x6005 ), k_eControllerType_PS3Controller, NULL }, // ps2 maybe break out later
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0603 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x146b, 0x5500 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x1a34, 0x0836 ), k_eControllerType_PS3Controller, NULL }, // Afterglow PS3
+ { MAKE_CONTROLLER_ID( 0x20bc, 0x5500 ), k_eControllerType_PS3Controller, NULL }, // ShanWan PS3
+ { MAKE_CONTROLLER_ID( 0x20d6, 0x576d ), k_eControllerType_PS3Controller, NULL }, // Power A PS3
+ { MAKE_CONTROLLER_ID( 0x20d6, 0xca6d ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x2563, 0x0523 ), k_eControllerType_PS3Controller, NULL }, // Digiflip GP006
+ { MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x25f0, 0x83c3 ), k_eControllerType_PS3Controller, NULL }, // gioteck vx2
+ { MAKE_CONTROLLER_ID( 0x25f0, 0xc121 ), k_eControllerType_PS3Controller, NULL }, //
+ { MAKE_CONTROLLER_ID( 0x2c22, 0x2000 ), k_eControllerType_PS3Controller, NULL }, // Quanba Drone
+ { MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_PS3Controller, NULL }, // From SDL
+ { MAKE_CONTROLLER_ID( 0x8380, 0x0003 ), k_eControllerType_PS3Controller, NULL }, // BTP 2163
+ { MAKE_CONTROLLER_ID( 0x8888, 0x0308 ), k_eControllerType_PS3Controller, NULL }, // Sony PS3 Controller
+
+ { MAKE_CONTROLLER_ID( 0x0079, 0x181b ), k_eControllerType_PS4Controller, NULL }, // Venom Arcade Stick - XXX:this may not work and may need to be called a ps3 controller
+ { MAKE_CONTROLLER_ID( 0x054c, 0x05c4 ), k_eControllerType_PS4Controller, NULL }, // Sony PS4 Controller
+ { MAKE_CONTROLLER_ID( 0x054c, 0x05c5 ), k_eControllerType_PS4Controller, NULL }, // STRIKEPAD PS4 Grip Add-on
+ { MAKE_CONTROLLER_ID( 0x054c, 0x09cc ), k_eControllerType_PS4Controller, NULL }, // Sony PS4 Slim Controller
+ { MAKE_CONTROLLER_ID( 0x054c, 0x0ba0 ), k_eControllerType_PS4Controller, NULL }, // Sony PS4 Controller (Wireless dongle)
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8250 ), k_eControllerType_PS4Controller, NULL }, // Mad Catz FightPad Pro PS4
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8384 ), k_eControllerType_PS4Controller, NULL }, // Mad Catz FightStick TE S+ PS4
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8480 ), k_eControllerType_PS4Controller, NULL }, // Mad Catz FightStick TE 2 PS4
+ { MAKE_CONTROLLER_ID( 0x0738, 0x8481 ), k_eControllerType_PS4Controller, NULL }, // Mad Catz FightStick TE 2+ PS4
+ { MAKE_CONTROLLER_ID( 0x0C12, 0x0E10 ), k_eControllerType_PS4Controller, NULL }, // Armor Armor 3 Pad PS4
+ { MAKE_CONTROLLER_ID( 0x0C12, 0x1CF6 ), k_eControllerType_PS4Controller, NULL }, // EMIO PS4 Elite Controller
+ { MAKE_CONTROLLER_ID( 0x0c12, 0x0e15 ), k_eControllerType_PS4Controller, NULL }, // Game:Pad 4
+ { MAKE_CONTROLLER_ID( 0x0c12, 0x0ef6 ), k_eControllerType_PS4Controller, NULL }, // Hitbox Arcade Stick
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0055 ), k_eControllerType_PS4Controller, NULL }, // HORIPAD 4 FPS
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0066 ), k_eControllerType_PS4Controller, NULL }, // HORIPAD 4 FPS Plus
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0084 ), k_eControllerType_PS4Controller, NULL }, // HORI Fighting Commander PS4
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x008a ), k_eControllerType_PS4Controller, NULL }, // HORI Real Arcade Pro 4
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x009c ), k_eControllerType_PS4Controller, NULL }, // HORI TAC PRO mousething
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00a0 ), k_eControllerType_PS4Controller, NULL }, // HORI TAC4 mousething
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00ee ), k_eControllerType_PS4Controller, NULL }, // Hori mini wired https://www.playstation.com/en-us/explore/accessories/gaming-controllers/mini-wired-gamepad/
+ { MAKE_CONTROLLER_ID( 0x11c0, 0x4001 ), k_eControllerType_PS4Controller, NULL }, // "PS4 Fun Controller" added from user log
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0d01 ), k_eControllerType_PS4Controller, NULL }, // Nacon Revolution Pro Controller - has gyro
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0d02 ), k_eControllerType_PS4Controller, NULL }, // Nacon Revolution Pro Controller v2 - has gyro
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0d10 ), k_eControllerType_PS4Controller, NULL }, // NACON Revolution Infinite - has gyro
+ { MAKE_CONTROLLER_ID( 0x1532, 0X0401 ), k_eControllerType_PS4Controller, NULL }, // Razer Panthera PS4 Controller
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1000 ), k_eControllerType_PS4Controller, NULL }, // Razer Raiju PS4 Controller
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1004 ), k_eControllerType_PS4Controller, NULL }, // Razer Raiju 2 Ultimate USB
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1007 ), k_eControllerType_PS4Controller, NULL }, // Razer Raiju 2 Tournament edition USB
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1008 ), k_eControllerType_PS4Controller, NULL }, // Razer Panthera Evo Fightstick
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1009 ), k_eControllerType_PS4Controller, NULL }, // Razer Raiju 2 Ultimate BT
+ { MAKE_CONTROLLER_ID( 0x1532, 0x100A ), k_eControllerType_PS4Controller, NULL }, // Razer Raiju 2 Tournament edition BT
+ { MAKE_CONTROLLER_ID( 0x1532, 0x1100 ), k_eControllerType_PS4Controller, NULL }, // Razer RAION Fightpad - Trackpad, no gyro, lightbar hardcoded to green
+ { MAKE_CONTROLLER_ID( 0x20d6, 0x792a ), k_eControllerType_PS4Controller, NULL }, // PowerA - Fusion Fight Pad
+ { MAKE_CONTROLLER_ID( 0x7545, 0x0104 ), k_eControllerType_PS4Controller, NULL }, // Armor 3 or Level Up Cobra - At least one variant has gyro
+ { MAKE_CONTROLLER_ID( 0x9886, 0x0025 ), k_eControllerType_PS4Controller, NULL }, // Astro C40
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0207 ), k_eControllerType_PS4Controller, NULL }, // Victrix Pro Fightstick w/ Touchpad for PS4
- { MAKE_CONTROLLER_ID( 0x054c, 0x0268 ), k_eControllerType_PS3Controller }, // Sony PS3 Controller
- { MAKE_CONTROLLER_ID( 0x0925, 0x0005 ), k_eControllerType_PS3Controller }, // Sony PS3 Controller
- { MAKE_CONTROLLER_ID( 0x8888, 0x0308 ), k_eControllerType_PS3Controller }, // Sony PS3 Controller
- { MAKE_CONTROLLER_ID( 0x1a34, 0x0836 ), k_eControllerType_PS3Controller }, // Afterglow ps3
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x006e ), k_eControllerType_PS3Controller }, // HORI horipad4 ps3
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0066 ), k_eControllerType_PS3Controller }, // HORI horipad4 ps4
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x005f ), k_eControllerType_PS3Controller }, // HORI Fighting commander ps3
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x005e ), k_eControllerType_PS3Controller }, // HORI Fighting commander ps4
- //{ MAKE_CONTROLLER_ID( 0x0738, 0x3250 ), k_eControllerType_PS3Controller }, // madcats fightpad pro ps3 already in ps4 list.. does this work??
- { MAKE_CONTROLLER_ID( 0x0738, 0x8250 ), k_eControllerType_PS3Controller }, // madcats fightpad pro ps4
- { MAKE_CONTROLLER_ID( 0x0079, 0x181a ), k_eControllerType_PS3Controller }, // Venom Arcade Stick
- { MAKE_CONTROLLER_ID( 0x0079, 0x0006 ), k_eControllerType_PS3Controller }, // PC Twin Shock Controller - looks like a DS3 but the face buttons are 1-4 instead of symbols
- { MAKE_CONTROLLER_ID( 0x0079, 0x1844 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x8888, 0x0308 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x0810, 0x0001 ), k_eControllerType_PS3Controller }, // actually ps2 - maybe break out later
- { MAKE_CONTROLLER_ID( 0x0810, 0x0003 ), k_eControllerType_PS3Controller }, // actually ps2 - maybe break out later
- { MAKE_CONTROLLER_ID( 0x2563, 0x0523 ), k_eControllerType_PS3Controller }, // Digiflip GP006
- { MAKE_CONTROLLER_ID( 0x11ff, 0x3331 ), k_eControllerType_PS3Controller }, // SRXJ-PH2400
- { MAKE_CONTROLLER_ID( 0x20bc, 0x5500 ), k_eControllerType_PS3Controller }, // ShanWan PS3
- { MAKE_CONTROLLER_ID( 0x05b8, 0x1004 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x146b, 0x0603 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x044f, 0xb315 ), k_eControllerType_PS3Controller }, // Firestorm Dual Analog 3
- { MAKE_CONTROLLER_ID( 0x0925, 0x8888 ), k_eControllerType_PS3Controller }, // Actually ps2 -maybe break out later Lakeview Research WiseGroup Ltd, MP-8866 Dual Joypad
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x004d ), k_eControllerType_PS3Controller }, // Horipad 3
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0009 ), k_eControllerType_PS3Controller }, // HORI BDA GP1
- { MAKE_CONTROLLER_ID( 0x0e8f, 0x0008 ), k_eControllerType_PS3Controller }, // Green Asia
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x006a ), k_eControllerType_PS3Controller }, // Real Arcade Pro 4
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x011e ), k_eControllerType_PS3Controller }, // Rock Candy PS4
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0214 ), k_eControllerType_PS3Controller }, // afterglow ps3
- { MAKE_CONTROLLER_ID( 0x0925, 0x8866 ), k_eControllerType_PS3Controller }, // PS2 maybe break out later
- { MAKE_CONTROLLER_ID( 0x0e8f, 0x310d ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x056e, 0x2013 ), k_eControllerType_PS3Controller }, // JC-U4113SBK
- { MAKE_CONTROLLER_ID( 0x0738, 0x8838 ), k_eControllerType_PS3Controller }, // Madcatz Fightstick Pro
- { MAKE_CONTROLLER_ID( 0x1a34, 0x0836 ), k_eControllerType_PS3Controller }, // Afterglow PS3
- { MAKE_CONTROLLER_ID( 0x0f30, 0x1100 ), k_eControllerType_PS3Controller }, // Quanba Q1 fight stick
- { MAKE_CONTROLLER_ID( 0x1345, 0x6005 ), k_eControllerType_PS3Controller }, // ps2 maybe break out later
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0087 ), k_eControllerType_PS3Controller }, // HORI fighting mini stick
- { MAKE_CONTROLLER_ID( 0x146b, 0x5500 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x20d6, 0xca6d ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x25f0, 0xc121 ), k_eControllerType_PS3Controller }, //
- { MAKE_CONTROLLER_ID( 0x8380, 0x0003 ), k_eControllerType_PS3Controller }, // BTP 2163
- { MAKE_CONTROLLER_ID( 0x1345, 0x1000 ), k_eControllerType_PS3Controller }, // PS2 ACME GA-D5
- { MAKE_CONTROLLER_ID( 0x0e8f, 0x3075 ), k_eControllerType_PS3Controller }, // SpeedLink Strike FX
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0128 ), k_eControllerType_PS3Controller }, // Rock Candy PS3
- { MAKE_CONTROLLER_ID( 0x2c22, 0x2000 ), k_eControllerType_PS3Controller }, // Quanba Drone
- { MAKE_CONTROLLER_ID( 0x06a3, 0xf622 ), k_eControllerType_PS3Controller }, // Cyborg V3
- { MAKE_CONTROLLER_ID( 0x044f, 0xd007 ), k_eControllerType_PS3Controller }, // Thrustmaster wireless 3-1
- { MAKE_CONTROLLER_ID( 0x25f0, 0x83c3 ), k_eControllerType_PS3Controller }, // gioteck vx2
- { MAKE_CONTROLLER_ID( 0x05b8, 0x1006 ), k_eControllerType_PS3Controller }, // JC-U3412SBK
- { MAKE_CONTROLLER_ID( 0x20d6, 0x576d ), k_eControllerType_PS3Controller }, // Power A PS3
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x6302 ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x056e, 0x200f ), k_eControllerType_PS3Controller }, // From SDL
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x1314 ), k_eControllerType_PS3Controller }, // PDP Afterglow Wireless PS3 controller
- { MAKE_CONTROLLER_ID( 0x0738, 0x3180 ), k_eControllerType_PS3Controller }, // Mad Catz Alpha PS3 mode
- { MAKE_CONTROLLER_ID( 0x0738, 0x8180 ), k_eControllerType_PS3Controller }, // Mad Catz Alpha PS4 mode (no touchpad on device)
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0203 ), k_eControllerType_PS3Controller }, // Victrix Pro FS (PS4 peripheral but no trackpad/lightbar)
+ { MAKE_CONTROLLER_ID( 0x0079, 0x0006 ), k_eControllerType_UnknownNonSteamController, NULL }, // DragonRise Generic USB PCB, sometimes configured as a PC Twin Shock Controller - looks like a DS3 but the face buttons are 1-4 instead of symbols
+
+ { MAKE_CONTROLLER_ID( 0x0079, 0x18d4 ), k_eControllerType_XBox360Controller, NULL }, // GPD Win 2 X-Box Controller
+ { MAKE_CONTROLLER_ID( 0x044f, 0xb326 ), k_eControllerType_XBox360Controller, NULL }, // Thrustmaster Gamepad GP XID
+ { MAKE_CONTROLLER_ID( 0x045e, 0x028e ), k_eControllerType_XBox360Controller, "Xbox 360 Controller" }, // Microsoft X-Box 360 pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x028f ), k_eControllerType_XBox360Controller, "Xbox 360 Controller" }, // Microsoft X-Box 360 pad v2
+ { MAKE_CONTROLLER_ID( 0x045e, 0x0291 ), k_eControllerType_XBox360Controller, "Xbox 360 Wireless Controller" }, // Xbox 360 Wireless Receiver (XBOX)
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02a0 ), k_eControllerType_XBox360Controller, NULL }, // Microsoft X-Box 360 Big Button IR
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02a1 ), k_eControllerType_XBox360Controller, NULL }, // Microsoft X-Box 360 pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02a9 ), k_eControllerType_XBox360Controller, "Xbox 360 Wireless Controller" }, // Xbox 360 Wireless Receiver (third party knockoff)
+ { MAKE_CONTROLLER_ID( 0x045e, 0x0719 ), k_eControllerType_XBox360Controller, "Xbox 360 Wireless Controller" }, // Xbox 360 Wireless Receiver
+ { MAKE_CONTROLLER_ID( 0x046d, 0xc21d ), k_eControllerType_XBox360Controller, NULL }, // Logitech Gamepad F310
+ { MAKE_CONTROLLER_ID( 0x046d, 0xc21e ), k_eControllerType_XBox360Controller, NULL }, // Logitech Gamepad F510
+ { MAKE_CONTROLLER_ID( 0x046d, 0xc21f ), k_eControllerType_XBox360Controller, NULL }, // Logitech Gamepad F710
+ { MAKE_CONTROLLER_ID( 0x046d, 0xc242 ), k_eControllerType_XBox360Controller, NULL }, // Logitech Chillstream Controller
+ { MAKE_CONTROLLER_ID( 0x056e, 0x2004 ), k_eControllerType_XBox360Controller, NULL }, // Elecom JC-U3613M
+ { MAKE_CONTROLLER_ID( 0x06a3, 0xf51a ), k_eControllerType_XBox360Controller, NULL }, // Saitek P3600
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4716 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Wired Xbox 360 Controller
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4718 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Street Fighter IV FightStick SE
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4726 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Xbox 360 Controller
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4728 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Street Fighter IV FightPad
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4736 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz MicroCon Gamepad
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4738 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Wired Xbox 360 Controller (SFIV)
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4740 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Beat Pad
+ { MAKE_CONTROLLER_ID( 0x0738, 0xb726 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Xbox controller - MW2
+ { MAKE_CONTROLLER_ID( 0x0738, 0xbeef ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz JOYTECH NEO SE Advanced GamePad
+ { MAKE_CONTROLLER_ID( 0x0738, 0xcb02 ), k_eControllerType_XBox360Controller, NULL }, // Saitek Cyborg Rumble Pad - PC/Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0738, 0xcb03 ), k_eControllerType_XBox360Controller, NULL }, // Saitek P3200 Rumble Pad - PC/Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0738, 0xf738 ), k_eControllerType_XBox360Controller, NULL }, // Super SFIV FightStick TE S
+ { MAKE_CONTROLLER_ID( 0x0955, 0x7210 ), k_eControllerType_XBox360Controller, NULL }, // Nvidia Shield local controller
+ { MAKE_CONTROLLER_ID( 0x0955, 0xb400 ), k_eControllerType_XBox360Controller, NULL }, // NVIDIA Shield streaming controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0105 ), k_eControllerType_XBox360Controller, NULL }, // HSM3 Xbox360 dancepad
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0113 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Afterglow" }, // PDP Afterglow Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x011f ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Rock Candy" }, // PDP Rock Candy Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0125 ), k_eControllerType_XBox360Controller, "PDP INJUSTICE FightStick" }, // PDP INJUSTICE FightStick for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0127 ), k_eControllerType_XBox360Controller, "PDP INJUSTICE FightPad" }, // PDP INJUSTICE FightPad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0131 ), k_eControllerType_XBox360Controller, "PDP EA Soccer Controller" }, // PDP EA Soccer Gamepad
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0133 ), k_eControllerType_XBox360Controller, "PDP Battlefield 4 Controller" }, // PDP Battlefield 4 Gamepad
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0143 ), k_eControllerType_XBox360Controller, "PDP MK X Fight Stick" }, // PDP MK X Fight Stick for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0147 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Marvel Controller" }, // PDP Marvel Controller for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0201 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Controller" }, // PDP Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0213 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Afterglow" }, // PDP Afterglow Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x021f ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Rock Candy" }, // PDP Rock Candy Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0301 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Controller" }, // PDP Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0313 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Afterglow" }, // PDP Afterglow Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0314 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Afterglow" }, // PDP Afterglow Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0401 ), k_eControllerType_XBox360Controller, "PDP Xbox 360 Controller" }, // PDP Gamepad for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0413 ), k_eControllerType_XBox360Controller, NULL }, // PDP Afterglow AX.1 (unlisted)
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0501 ), k_eControllerType_XBox360Controller, NULL }, // PDP Xbox 360 Controller (unlisted)
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0xf900 ), k_eControllerType_XBox360Controller, NULL }, // PDP Afterglow AX.1 (unlisted)
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x000a ), k_eControllerType_XBox360Controller, NULL }, // Hori Co. DOA4 FightStick
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x000c ), k_eControllerType_XBox360Controller, NULL }, // Hori PadEX Turbo
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x000d ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Stick EX2
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0016 ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro.EX
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x001b ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro VX
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x008c ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro 4
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00db ), k_eControllerType_XBox360Controller, "HORI Slime Controller" }, // Hori Dragon Quest Slime Controller
+ { MAKE_CONTROLLER_ID( 0x1038, 0x1430 ), k_eControllerType_XBox360Controller, "SteelSeries Stratus Duo" }, // SteelSeries Stratus Duo
+ { MAKE_CONTROLLER_ID( 0x1038, 0x1431 ), k_eControllerType_XBox360Controller, "SteelSeries Stratus Duo" }, // SteelSeries Stratus Duo
+ { MAKE_CONTROLLER_ID( 0x1038, 0xb360 ), k_eControllerType_XBox360Controller, NULL }, // SteelSeries Nimbus/Stratus XL
+ { MAKE_CONTROLLER_ID( 0x11c9, 0x55f0 ), k_eControllerType_XBox360Controller, NULL }, // Nacon GC-100XF
+ { MAKE_CONTROLLER_ID( 0x12ab, 0x0004 ), k_eControllerType_XBox360Controller, NULL }, // Honey Bee Xbox360 dancepad
+ { MAKE_CONTROLLER_ID( 0x12ab, 0x0301 ), k_eControllerType_XBox360Controller, NULL }, // PDP AFTERGLOW AX.1
+ { MAKE_CONTROLLER_ID( 0x12ab, 0x0303 ), k_eControllerType_XBox360Controller, NULL }, // Mortal Kombat Klassic FightStick
+ { MAKE_CONTROLLER_ID( 0x1430, 0x02a0 ), k_eControllerType_XBox360Controller, NULL }, // RedOctane Controller Adapter
+ { MAKE_CONTROLLER_ID( 0x1430, 0x4748 ), k_eControllerType_XBox360Controller, NULL }, // RedOctane Guitar Hero X-plorer
+ { MAKE_CONTROLLER_ID( 0x1430, 0xf801 ), k_eControllerType_XBox360Controller, NULL }, // RedOctane Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0601 ), k_eControllerType_XBox360Controller, NULL }, // BigBen Interactive XBOX 360 Controller
+// { MAKE_CONTROLLER_ID( 0x1532, 0x0037 ), k_eControllerType_XBox360Controller, NULL }, // Razer Sabertooth
+ { MAKE_CONTROLLER_ID( 0x15e4, 0x3f00 ), k_eControllerType_XBox360Controller, NULL }, // Power A Mini Pro Elite
+ { MAKE_CONTROLLER_ID( 0x15e4, 0x3f0a ), k_eControllerType_XBox360Controller, NULL }, // Xbox Airflo wired controller
+ { MAKE_CONTROLLER_ID( 0x15e4, 0x3f10 ), k_eControllerType_XBox360Controller, NULL }, // Batarang Xbox 360 controller
+ { MAKE_CONTROLLER_ID( 0x162e, 0xbeef ), k_eControllerType_XBox360Controller, NULL }, // Joytech Neo-Se Take2
+ { MAKE_CONTROLLER_ID( 0x1689, 0xfd00 ), k_eControllerType_XBox360Controller, NULL }, // Razer Onza Tournament Edition
+ { MAKE_CONTROLLER_ID( 0x1689, 0xfd01 ), k_eControllerType_XBox360Controller, NULL }, // Razer Onza Classic Edition
+ { MAKE_CONTROLLER_ID( 0x1689, 0xfe00 ), k_eControllerType_XBox360Controller, NULL }, // Razer Sabertooth
+ { MAKE_CONTROLLER_ID( 0x1bad, 0x0002 ), k_eControllerType_XBox360Controller, NULL }, // Harmonix Rock Band Guitar
+ { MAKE_CONTROLLER_ID( 0x1bad, 0x0003 ), k_eControllerType_XBox360Controller, NULL }, // Harmonix Rock Band Drumkit
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf016 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Xbox 360 Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf018 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Street Fighter IV SE Fighting Stick
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf019 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Brawlstick for Xbox 360
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf021 ), k_eControllerType_XBox360Controller, NULL }, // Mad Cats Ghost Recon FS GamePad
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf023 ), k_eControllerType_XBox360Controller, NULL }, // MLG Pro Circuit Controller (Xbox)
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf025 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Call Of Duty
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf027 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz FPS Pro
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf028 ), k_eControllerType_XBox360Controller, NULL }, // Street Fighter IV FightPad
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf02e ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Fightpad
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf036 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz MicroCon GamePad Pro
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf038 ), k_eControllerType_XBox360Controller, NULL }, // Street Fighter IV FightStick TE
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf039 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz MvC2 TE
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf03a ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz SFxT Fightstick Pro
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf03d ), k_eControllerType_XBox360Controller, NULL }, // Street Fighter IV Arcade Stick TE - Chun Li
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf03e ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz MLG FightStick TE
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf03f ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz FightStick SoulCaliber
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf042 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz FightStick TES+
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf080 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz FightStick TE2
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf501 ), k_eControllerType_XBox360Controller, NULL }, // HoriPad EX2 Turbo
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf502 ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro.VX SA
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf503 ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Stick VX
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf504 ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro. EX
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf505 ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Stick EX2B
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf506 ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro.EX Premium VLX
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf900 ), k_eControllerType_XBox360Controller, NULL }, // Harmonix Xbox 360 Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf901 ), k_eControllerType_XBox360Controller, NULL }, // Gamestop Xbox 360 Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf902 ), k_eControllerType_XBox360Controller, NULL }, // Mad Catz Gamepad2
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf903 ), k_eControllerType_XBox360Controller, NULL }, // Tron Xbox 360 controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf904 ), k_eControllerType_XBox360Controller, NULL }, // PDP Versus Fighting Pad
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xf906 ), k_eControllerType_XBox360Controller, NULL }, // MortalKombat FightStick
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xfa01 ), k_eControllerType_XBox360Controller, NULL }, // MadCatz GamePad
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xfd00 ), k_eControllerType_XBox360Controller, NULL }, // Razer Onza TE
+ { MAKE_CONTROLLER_ID( 0x1bad, 0xfd01 ), k_eControllerType_XBox360Controller, NULL }, // Razer Onza
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5000 ), k_eControllerType_XBox360Controller, NULL }, // Razer Atrox Arcade Stick
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5300 ), k_eControllerType_XBox360Controller, NULL }, // PowerA MINI PROEX Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5303 ), k_eControllerType_XBox360Controller, NULL }, // Xbox Airflo wired controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x530a ), k_eControllerType_XBox360Controller, NULL }, // Xbox 360 Pro EX Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x531a ), k_eControllerType_XBox360Controller, NULL }, // PowerA Pro Ex
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5397 ), k_eControllerType_XBox360Controller, NULL }, // FUS1ON Tournament Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5500 ), k_eControllerType_XBox360Controller, NULL }, // Hori XBOX 360 EX 2 with Turbo
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5501 ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro VX-SA
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5502 ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Stick VX Alt
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5503 ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Edge
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5506 ), k_eControllerType_XBox360Controller, NULL }, // Hori SOULCALIBUR V Stick
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x550d ), k_eControllerType_XBox360Controller, NULL }, // Hori GEM Xbox controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x550e ), k_eControllerType_XBox360Controller, NULL }, // Hori Real Arcade Pro V Kai 360
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5508 ), k_eControllerType_XBox360Controller, NULL }, // Hori PAD A
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5510 ), k_eControllerType_XBox360Controller, NULL }, // Hori Fighting Commander ONE
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5b00 ), k_eControllerType_XBox360Controller, NULL }, // ThrustMaster Ferrari Italia 458 Racing Wheel
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5b02 ), k_eControllerType_XBox360Controller, NULL }, // Thrustmaster, Inc. GPX Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5b03 ), k_eControllerType_XBox360Controller, NULL }, // Thrustmaster Ferrari 458 Racing Wheel
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5d04 ), k_eControllerType_XBox360Controller, NULL }, // Razer Sabertooth
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfafa ), k_eControllerType_XBox360Controller, NULL }, // Aplay Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfafb ), k_eControllerType_XBox360Controller, NULL }, // Aplay Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfafc ), k_eControllerType_XBox360Controller, NULL }, // Afterglow Gamepad 1
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfafd ), k_eControllerType_XBox360Controller, NULL }, // Afterglow Gamepad 3
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfafe ), k_eControllerType_XBox360Controller, NULL }, // Rock Candy Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x054c, 0x05c4 ), k_eControllerType_PS4Controller }, // Sony PS4 Controller
- { MAKE_CONTROLLER_ID( 0x054c, 0x09cc ), k_eControllerType_PS4Controller }, // Sony PS4 Slim Controller
- { MAKE_CONTROLLER_ID( 0x054c, 0x0ba0 ), k_eControllerType_PS4Controller }, // Sony PS4 Controller (Wireless dongle)
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x008a ), k_eControllerType_PS4Controller }, // HORI Real Arcade Pro 4
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0055 ), k_eControllerType_PS4Controller }, // HORIPAD 4 FPS
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0066 ), k_eControllerType_PS4Controller }, // HORIPAD 4 FPS Plus
- { MAKE_CONTROLLER_ID( 0x0738, 0x8384 ), k_eControllerType_PS4Controller }, // Mad Catz FightStick TE S+ PS4
- { MAKE_CONTROLLER_ID( 0x0738, 0x8250 ), k_eControllerType_PS4Controller }, // Mad Catz FightPad Pro PS4
- { MAKE_CONTROLLER_ID( 0x0C12, 0x0E10 ), k_eControllerType_PS4Controller }, // Armor Armor 3 Pad PS4
- { MAKE_CONTROLLER_ID( 0x0C12, 0x1CF6 ), k_eControllerType_PS4Controller }, // EMIO PS4 Elite Controller
- { MAKE_CONTROLLER_ID( 0x1532, 0x1000 ), k_eControllerType_PS4Controller }, // Razer Raiju PS4 Controller
- { MAKE_CONTROLLER_ID( 0x1532, 0X0401 ), k_eControllerType_PS4Controller }, // Razer Panthera PS4 Controller
- { MAKE_CONTROLLER_ID( 0x054c, 0x05c5 ), k_eControllerType_PS4Controller }, // STRIKEPAD PS4 Grip Add-on
- { MAKE_CONTROLLER_ID( 0x146b, 0x0d01 ), k_eControllerType_PS4Controller }, // Nacon Revolution Pro Controller - has gyro
- { MAKE_CONTROLLER_ID( 0x146b, 0x0d02 ), k_eControllerType_PS4Controller }, // Nacon Revolution Pro Controller v2 - has gyro
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00a0 ), k_eControllerType_PS4Controller }, // HORI TAC4 mousething
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x009c ), k_eControllerType_PS4Controller }, // HORI TAC PRO mousething
- { MAKE_CONTROLLER_ID( 0x0c12, 0x0ef6 ), k_eControllerType_PS4Controller }, // Hitbox Arcade Stick
- { MAKE_CONTROLLER_ID( 0x0079, 0x181b ), k_eControllerType_PS4Controller }, // Venom Arcade Stick - XXX:this may not work and may need to be called a ps3 controller
- { MAKE_CONTROLLER_ID( 0x0738, 0x3250 ), k_eControllerType_PS4Controller }, // Mad Catz FightPad PRO - controller shaped with 6 face buttons
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00ee ), k_eControllerType_PS4Controller }, // Hori mini wired https://www.playstation.com/en-us/explore/accessories/gaming-controllers/mini-wired-gamepad/
- { MAKE_CONTROLLER_ID( 0x0738, 0x8481 ), k_eControllerType_PS4Controller }, // Mad Catz FightStick TE 2+ PS4
- { MAKE_CONTROLLER_ID( 0x0738, 0x8480 ), k_eControllerType_PS4Controller }, // Mad Catz FightStick TE 2 PS4
- { MAKE_CONTROLLER_ID( 0x7545, 0x0104 ), k_eControllerType_PS4Controller }, // Armor 3 or Level Up Cobra - At least one variant has gyro
- { MAKE_CONTROLLER_ID( 0x0c12, 0x0e15 ), k_eControllerType_PS4Controller }, // Game:Pad 4
- { MAKE_CONTROLLER_ID( 0x11c0, 0x4001 ), k_eControllerType_PS4Controller }, // "PS4 Fun Controller" added from user log
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02d1 ), k_eControllerType_XBoxOneController, "Xbox One Controller" }, // Microsoft X-Box One pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02dd ), k_eControllerType_XBoxOneController, "Xbox One Controller" }, // Microsoft X-Box One pad (Firmware 2015)
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02e0 ), k_eControllerType_XBoxOneController, "Xbox One S Controller" }, // Microsoft X-Box One S pad (Bluetooth)
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02e3 ), k_eControllerType_XBoxOneController, "Xbox One Elite Controller" }, // Microsoft X-Box One Elite pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02ea ), k_eControllerType_XBoxOneController, "Xbox One S Controller" }, // Microsoft X-Box One S pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02fd ), k_eControllerType_XBoxOneController, "Xbox One S Controller" }, // Microsoft X-Box One S pad (Bluetooth)
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02ff ), k_eControllerType_XBoxOneController, "Xbox One Elite Controller" }, // Microsoft X-Box One Elite pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x0b00 ), k_eControllerType_XBoxOneController, "Xbox One Elite 2 Controller" }, // Microsoft X-Box One Elite Series 2 pad
+ { MAKE_CONTROLLER_ID( 0x045e, 0x0b05 ), k_eControllerType_XBoxOneController, "Xbox One Elite 2 Controller" }, // Microsoft X-Box One Elite Series 2 pad (Bluetooth)
+ { MAKE_CONTROLLER_ID( 0x0738, 0x4a01 ), k_eControllerType_XBoxOneController, NULL }, // Mad Catz FightStick TE 2
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0139 ), k_eControllerType_XBoxOneController, "PDP Xbox One Afterglow" }, // PDP Afterglow Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x013B ), k_eControllerType_XBoxOneController, "PDP Xbox One Face-Off Controller" }, // PDP Face-Off Gamepad for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x013a ), k_eControllerType_XBoxOneController, NULL }, // PDP Xbox One Controller (unlisted)
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0145 ), k_eControllerType_XBoxOneController, "PDP MK X Fight Pad" }, // PDP MK X Fight Pad for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0146 ), k_eControllerType_XBoxOneController, "PDP Xbox One Rock Candy" }, // PDP Rock Candy Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x015b ), k_eControllerType_XBoxOneController, "PDP Fallout 4 Vault Boy Controller" }, // PDP Fallout 4 Vault Boy Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x015c ), k_eControllerType_XBoxOneController, "PDP Xbox One @Play Controller" }, // PDP @Play Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x015d ), k_eControllerType_XBoxOneController, "PDP Mirror's Edge Controller" }, // PDP Mirror's Edge Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x015f ), k_eControllerType_XBoxOneController, "PDP Metallic Controller" }, // PDP Metallic Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0160 ), k_eControllerType_XBoxOneController, "PDP NFL Face-Off Controller" }, // PDP NFL Official Face-Off Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0161 ), k_eControllerType_XBoxOneController, "PDP Xbox One Camo" }, // PDP Camo Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0162 ), k_eControllerType_XBoxOneController, "PDP Xbox One Controller" }, // PDP Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0163 ), k_eControllerType_XBoxOneController, "PDP Deliverer of Truth" }, // PDP Legendary Collection: Deliverer of Truth
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0164 ), k_eControllerType_XBoxOneController, "PDP Battlefield 1 Controller" }, // PDP Battlefield 1 Official Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0165 ), k_eControllerType_XBoxOneController, "PDP Titanfall 2 Controller" }, // PDP Titanfall 2 Official Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0166 ), k_eControllerType_XBoxOneController, "PDP Mass Effect: Andromeda Controller" }, // PDP Mass Effect: Andromeda Official Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0167 ), k_eControllerType_XBoxOneController, "PDP Halo Wars 2 Face-Off Controller" }, // PDP Halo Wars 2 Official Face-Off Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0205 ), k_eControllerType_XBoxOneController, "PDP Victrix Pro Fight Stick" }, // PDP Victrix Pro Fight Stick
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0206 ), k_eControllerType_XBoxOneController, "PDP Mortal Kombat Controller" }, // PDP Mortal Kombat 25 Anniversary Edition Stick (Xbox One)
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0246 ), k_eControllerType_XBoxOneController, "PDP Xbox One Rock Candy" }, // PDP Rock Candy Wired Controller for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0261 ), k_eControllerType_XBoxOneController, "PDP Xbox One Camo" }, // PDP Camo Wired Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0262 ), k_eControllerType_XBoxOneController, "PDP Xbox One Controller" }, // PDP Wired Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a0 ), k_eControllerType_XBoxOneController, "PDP Xbox One Midnight Blue" }, // PDP Wired Controller for Xbox One - Midnight Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a1 ), k_eControllerType_XBoxOneController, "PDP Xbox One Verdant Green" }, // PDP Wired Controller for Xbox One - Verdant Green
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a2 ), k_eControllerType_XBoxOneController, "PDP Xbox One Crimson Red" }, // PDP Wired Controller for Xbox One - Crimson Red
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a3 ), k_eControllerType_XBoxOneController, "PDP Xbox One Arctic White" }, // PDP Wired Controller for Xbox One - Arctic White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a4 ), k_eControllerType_XBoxOneController, "PDP Xbox One Phantom Black" }, // PDP Wired Controller for Xbox One - Stealth Series | Phantom Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a5 ), k_eControllerType_XBoxOneController, "PDP Xbox One Ghost White" }, // PDP Wired Controller for Xbox One - Stealth Series | Ghost White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a6 ), k_eControllerType_XBoxOneController, "PDP Xbox One Revenant Blue" }, // PDP Wired Controller for Xbox One - Stealth Series | Revenant Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a7 ), k_eControllerType_XBoxOneController, "PDP Xbox One Raven Black" }, // PDP Wired Controller for Xbox One - Raven Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a8 ), k_eControllerType_XBoxOneController, "PDP Xbox One Arctic White" }, // PDP Wired Controller for Xbox One - Arctic White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a9 ), k_eControllerType_XBoxOneController, "PDP Xbox One Midnight Blue" }, // PDP Wired Controller for Xbox One - Midnight Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02aa ), k_eControllerType_XBoxOneController, "PDP Xbox One Verdant Green" }, // PDP Wired Controller for Xbox One - Verdant Green
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ab ), k_eControllerType_XBoxOneController, "PDP Xbox One Crimson Red" }, // PDP Wired Controller for Xbox One - Crimson Red
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ac ), k_eControllerType_XBoxOneController, "PDP Xbox One Ember Orange" }, // PDP Wired Controller for Xbox One - Ember Orange
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ad ), k_eControllerType_XBoxOneController, "PDP Xbox One Phantom Black" }, // PDP Wired Controller for Xbox One - Stealth Series | Phantom Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ae ), k_eControllerType_XBoxOneController, "PDP Xbox One Ghost White" }, // PDP Wired Controller for Xbox One - Stealth Series | Ghost White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02af ), k_eControllerType_XBoxOneController, "PDP Xbox One Revenant Blue" }, // PDP Wired Controller for Xbox One - Stealth Series | Revenant Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02b0 ), k_eControllerType_XBoxOneController, "PDP Xbox One Raven Black" }, // PDP Wired Controller for Xbox One - Raven Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02b1 ), k_eControllerType_XBoxOneController, "PDP Xbox One Arctic White" }, // PDP Wired Controller for Xbox One - Arctic White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02b3 ), k_eControllerType_XBoxOneController, "PDP Xbox One Afterglow" }, // PDP Afterglow Prismatic Wired Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02b5 ), k_eControllerType_XBoxOneController, "PDP Xbox One GAMEware Controller" }, // PDP GAMEware Wired Controller Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02b6 ), k_eControllerType_XBoxOneController, NULL }, // PDP One-Handed Joystick Adaptive Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02bd ), k_eControllerType_XBoxOneController, "PDP Xbox One Royal Purple" }, // PDP Wired Controller for Xbox One - Royal Purple
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02be ), k_eControllerType_XBoxOneController, "PDP Xbox One Raven Black" }, // PDP Deluxe Wired Controller for Xbox One - Raven Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02bf ), k_eControllerType_XBoxOneController, "PDP Xbox One Midnight Blue" }, // PDP Deluxe Wired Controller for Xbox One - Midnight Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c0 ), k_eControllerType_XBoxOneController, "PDP Xbox One Phantom Black" }, // PDP Deluxe Wired Controller for Xbox One - Stealth Series | Phantom Black
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c1 ), k_eControllerType_XBoxOneController, "PDP Xbox One Ghost White" }, // PDP Deluxe Wired Controller for Xbox One - Stealth Series | Ghost White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c2 ), k_eControllerType_XBoxOneController, "PDP Xbox One Revenant Blue" }, // PDP Deluxe Wired Controller for Xbox One - Stealth Series | Revenant Blue
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c3 ), k_eControllerType_XBoxOneController, "PDP Xbox One Verdant Green" }, // PDP Deluxe Wired Controller for Xbox One - Verdant Green
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c4 ), k_eControllerType_XBoxOneController, "PDP Xbox One Ember Orange" }, // PDP Deluxe Wired Controller for Xbox One - Ember Orange
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c5 ), k_eControllerType_XBoxOneController, "PDP Xbox One Royal Purple" }, // PDP Deluxe Wired Controller for Xbox One - Royal Purple
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c6 ), k_eControllerType_XBoxOneController, "PDP Xbox One Crimson Red" }, // PDP Deluxe Wired Controller for Xbox One - Crimson Red
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c7 ), k_eControllerType_XBoxOneController, "PDP Xbox One Arctic White" }, // PDP Deluxe Wired Controller for Xbox One - Arctic White
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c8 ), k_eControllerType_XBoxOneController, "PDP Kingdom Hearts Controller" }, // PDP Kingdom Hearts Wired Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02c9 ), k_eControllerType_XBoxOneController, "PDP Xbox One Phantasm Red" }, // PDP Deluxe Wired Controller for Xbox One - Stealth Series | Phantasm Red
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ca ), k_eControllerType_XBoxOneController, "PDP Xbox One Specter Violet" }, // PDP Deluxe Wired Controller for Xbox One - Stealth Series | Specter Violet
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02cb ), k_eControllerType_XBoxOneController, "PDP Xbox One Specter Violet" }, // PDP Wired Controller for Xbox One - Stealth Series | Specter Violet
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02cd ), k_eControllerType_XBoxOneController, "PDP Xbox One Blu-merang" }, // PDP Rock Candy Wired Controller for Xbox One - Blu-merang
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02ce ), k_eControllerType_XBoxOneController, "PDP Xbox One Cranblast" }, // PDP Rock Candy Wired Controller for Xbox One - Cranblast
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02cf ), k_eControllerType_XBoxOneController, "PDP Xbox One Aqualime" }, // PDP Rock Candy Wired Controller for Xbox One - Aqualime
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x02d5 ), k_eControllerType_XBoxOneController, "PDP Xbox One Red Camo" }, // PDP Wired Controller for Xbox One - Red Camo
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0346 ), k_eControllerType_XBoxOneController, "PDP Xbox One RC Gamepad" }, // PDP RC Gamepad for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0446 ), k_eControllerType_XBoxOneController, "PDP Xbox One RC Gamepad" }, // PDP RC Gamepad for Xbox One
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0063 ), k_eControllerType_XBoxOneController, NULL }, // Hori Real Arcade Pro Hayabusa (USA) Xbox One
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0067 ), k_eControllerType_XBoxOneController, NULL }, // HORIPAD ONE
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0078 ), k_eControllerType_XBoxOneController, NULL }, // Hori Real Arcade Pro V Kai Xbox One
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00c5 ), k_eControllerType_XBoxOneController, NULL }, // HORI Fighting Commander
+ { MAKE_CONTROLLER_ID( 0x1532, 0x0a00 ), k_eControllerType_XBoxOneController, NULL }, // Razer Atrox Arcade Stick
+ { MAKE_CONTROLLER_ID( 0x1532, 0x0a03 ), k_eControllerType_XBoxOneController, NULL }, // Razer Wildcat
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x541a ), k_eControllerType_XBoxOneController, NULL }, // PowerA Xbox One Mini Wired Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x542a ), k_eControllerType_XBoxOneController, NULL }, // Xbox ONE spectra
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x543a ), k_eControllerType_XBoxOneController, "PowerA XBox One Controller" }, // PowerA Xbox ONE liquid metal controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x551a ), k_eControllerType_XBoxOneController, NULL }, // PowerA FUSION Pro Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x561a ), k_eControllerType_XBoxOneController, NULL }, // PowerA FUSION Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x581a ), k_eControllerType_XBoxOneController, NULL }, // BDA XB1 Classic Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x591a ), k_eControllerType_XBoxOneController, NULL }, // PowerA FUSION Pro Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x592a ), k_eControllerType_XBoxOneController, NULL }, // BDA XB1 Spectra Pro
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x791a ), k_eControllerType_XBoxOneController, NULL }, // PowerA Fusion Fight Pad
+ { MAKE_CONTROLLER_ID( 0x2e24, 0x0652 ), k_eControllerType_XBoxOneController, NULL }, // Hyperkin Duke
+ { MAKE_CONTROLLER_ID( 0x2e24, 0x1618 ), k_eControllerType_XBoxOneController, NULL }, // Hyperkin Duke
+ { MAKE_CONTROLLER_ID( 0x2e24, 0x1688 ), k_eControllerType_XBoxOneController, NULL }, // Hyperkin X91
- { MAKE_CONTROLLER_ID( 0x1532, 0x1007 ), k_eControllerType_PS4Controller }, // Razer Raiju 2 Tournament edition USB- untested and added for razer
- { MAKE_CONTROLLER_ID( 0x1532, 0x100A ), k_eControllerType_PS4Controller }, // Razer Raiju 2 Tournament edition BT - untested and added for razer
- { MAKE_CONTROLLER_ID( 0x1532, 0x1004 ), k_eControllerType_PS4Controller }, // Razer Raiju 2 Ultimate USB - untested and added for razer
- { MAKE_CONTROLLER_ID( 0x1532, 0x1009 ), k_eControllerType_PS4Controller }, // Razer Raiju 2 Ultimate BT - untested and added for razer
- { MAKE_CONTROLLER_ID( 0x1532, 0x1008 ), k_eControllerType_PS4Controller }, // Razer Panthera Evo Fightstick - untested and added for razer
- { MAKE_CONTROLLER_ID( 0x9886, 0x0025 ), k_eControllerType_PS4Controller }, // Astro C40
-
- { MAKE_CONTROLLER_ID( 0x056e, 0x2004 ), k_eControllerType_XBox360Controller }, // Elecom JC-U3613M
- { MAKE_CONTROLLER_ID( 0x06a3, 0xf51a ), k_eControllerType_XBox360Controller }, // Saitek P3600
- { MAKE_CONTROLLER_ID( 0x0738, 0x4716 ), k_eControllerType_XBox360Controller }, // Mad Catz Wired Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x0738, 0x4718 ), k_eControllerType_XBox360Controller }, // Mad Catz Street Fighter IV FightStick SE
- { MAKE_CONTROLLER_ID( 0x0738, 0x4726 ), k_eControllerType_XBox360Controller }, // Mad Catz Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x0738, 0x4728 ), k_eControllerType_XBox360Controller }, // Mad Catz Street Fighter IV FightPad
- { MAKE_CONTROLLER_ID( 0x0738, 0x4736 ), k_eControllerType_XBox360Controller }, // Mad Catz MicroCon Gamepad
- { MAKE_CONTROLLER_ID( 0x0738, 0x4738 ), k_eControllerType_XBox360Controller }, // Mad Catz Wired Xbox 360 Controller (SFIV)
- { MAKE_CONTROLLER_ID( 0x0738, 0x4740 ), k_eControllerType_XBox360Controller }, // Mad Catz Beat Pad
- { MAKE_CONTROLLER_ID( 0x0738, 0x4a01 ), k_eControllerType_XBoxOneController }, // Mad Catz FightStick TE 2
- { MAKE_CONTROLLER_ID( 0x0738, 0xb726 ), k_eControllerType_XBox360Controller }, // Mad Catz Xbox controller - MW2
- { MAKE_CONTROLLER_ID( 0x0738, 0xbeef ), k_eControllerType_XBox360Controller }, // Mad Catz JOYTECH NEO SE Advanced GamePad
- { MAKE_CONTROLLER_ID( 0x0738, 0xcb02 ), k_eControllerType_XBox360Controller }, // Saitek Cyborg Rumble Pad - PC/Xbox 360
- { MAKE_CONTROLLER_ID( 0x0738, 0xcb03 ), k_eControllerType_XBox360Controller }, // Saitek P3200 Rumble Pad - PC/Xbox 360
- { MAKE_CONTROLLER_ID( 0x0738, 0xf738 ), k_eControllerType_XBox360Controller }, // Super SFIV FightStick TE S
- { MAKE_CONTROLLER_ID( 0x0955, 0xb400 ), k_eControllerType_XBox360Controller }, // NVIDIA Shield streaming controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0105 ), k_eControllerType_XBox360Controller }, // HSM3 Xbox360 dancepad
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0113 ), k_eControllerType_XBox360Controller }, // Afterglow AX.1 Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x011f ), k_eControllerType_XBox360Controller }, // Rock Candy Gamepad Wired Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0131 ), k_eControllerType_XBox360Controller }, // PDP EA Sports Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0133 ), k_eControllerType_XBox360Controller }, // Xbox 360 Wired Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0139 ), k_eControllerType_XBoxOneController }, // Afterglow Prismatic Wired Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x013a ), k_eControllerType_XBoxOneController }, // PDP Xbox One Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0146 ), k_eControllerType_XBoxOneController }, // Rock Candy Wired Controller for Xbox One
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0147 ), k_eControllerType_XBoxOneController }, // PDP Marvel Xbox One Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x015c ), k_eControllerType_XBoxOneController }, // PDP Xbox One Arcade Stick
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0161 ), k_eControllerType_XBoxOneController }, // PDP Xbox One Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0162 ), k_eControllerType_XBoxOneController }, // PDP Xbox One Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0163 ), k_eControllerType_XBoxOneController }, // PDP Xbox One Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0164 ), k_eControllerType_XBoxOneController }, // PDP Battlefield One
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0165 ), k_eControllerType_XBoxOneController }, // PDP Titanfall 2
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0201 ), k_eControllerType_XBox360Controller }, // Pelican PL-3601 'TSZ' Wired Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0213 ), k_eControllerType_XBox360Controller }, // Afterglow Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x021f ), k_eControllerType_XBox360Controller }, // Rock Candy Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0246 ), k_eControllerType_XBoxOneController }, // Rock Candy Gamepad for Xbox One 2015
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x02a0 ), k_eControllerType_XBox360Controller }, // Counterfeit 360Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0301 ), k_eControllerType_XBox360Controller }, // Logic3 Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0346 ), k_eControllerType_XBoxOneController }, // Rock Candy Gamepad for Xbox One 2016
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0401 ), k_eControllerType_XBox360Controller }, // Logic3 Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0413 ), k_eControllerType_XBox360Controller }, // Afterglow AX.1 Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0501 ), k_eControllerType_XBox360Controller }, // PDP Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0xf501 ), k_eControllerType_XBox360Controller }, // Counterfeit 360 Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0xf900 ), k_eControllerType_XBox360Controller }, // PDP Afterglow AX.1
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x000a ), k_eControllerType_XBox360Controller }, // Hori Co. DOA4 FightStick
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x000c ), k_eControllerType_XBox360Controller }, // Hori PadEX Turbo
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x000d ), k_eControllerType_XBox360Controller }, // Hori Fighting Stick EX2
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0016 ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro.EX
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x001b ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro VX
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0063 ), k_eControllerType_XBoxOneController }, // Hori Real Arcade Pro Hayabusa (USA) Xbox One
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0067 ), k_eControllerType_XBoxOneController }, // HORIPAD ONE
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0078 ), k_eControllerType_XBoxOneController }, // Hori Real Arcade Pro V Kai Xbox One
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x008c ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro 4
- { MAKE_CONTROLLER_ID( 0x11c9, 0x55f0 ), k_eControllerType_XBox360Controller }, // Nacon GC-100XF
- { MAKE_CONTROLLER_ID( 0x12ab, 0x0004 ), k_eControllerType_XBox360Controller }, // Honey Bee Xbox360 dancepad
- { MAKE_CONTROLLER_ID( 0x12ab, 0x0301 ), k_eControllerType_XBox360Controller }, // PDP AFTERGLOW AX.1
- { MAKE_CONTROLLER_ID( 0x12ab, 0x0303 ), k_eControllerType_XBox360Controller }, // Mortal Kombat Klassic FightStick
- { MAKE_CONTROLLER_ID( 0x1430, 0x02a0 ), k_eControllerType_XBox360Controller }, // RedOctane Controller Adapter
- { MAKE_CONTROLLER_ID( 0x1430, 0x4748 ), k_eControllerType_XBox360Controller }, // RedOctane Guitar Hero X-plorer
- { MAKE_CONTROLLER_ID( 0x1430, 0xf801 ), k_eControllerType_XBox360Controller }, // RedOctane Controller
- { MAKE_CONTROLLER_ID( 0x146b, 0x0601 ), k_eControllerType_XBox360Controller }, // BigBen Interactive XBOX 360 Controller
- { MAKE_CONTROLLER_ID( 0x1532, 0x0037 ), k_eControllerType_XBox360Controller }, // Razer Sabertooth
- { MAKE_CONTROLLER_ID( 0x1532, 0x0a00 ), k_eControllerType_XBoxOneController }, // Razer Atrox Arcade Stick
- { MAKE_CONTROLLER_ID( 0x1532, 0x0a03 ), k_eControllerType_XBoxOneController }, // Razer Wildcat
- { MAKE_CONTROLLER_ID( 0x15e4, 0x3f00 ), k_eControllerType_XBox360Controller }, // Power A Mini Pro Elite
- { MAKE_CONTROLLER_ID( 0x15e4, 0x3f0a ), k_eControllerType_XBox360Controller }, // Xbox Airflo wired controller
- { MAKE_CONTROLLER_ID( 0x15e4, 0x3f10 ), k_eControllerType_XBox360Controller }, // Batarang Xbox 360 controller
- { MAKE_CONTROLLER_ID( 0x162e, 0xbeef ), k_eControllerType_XBox360Controller }, // Joytech Neo-Se Take2
- { MAKE_CONTROLLER_ID( 0x1689, 0xfd00 ), k_eControllerType_XBox360Controller }, // Razer Onza Tournament Edition
- { MAKE_CONTROLLER_ID( 0x1689, 0xfd01 ), k_eControllerType_XBox360Controller }, // Razer Onza Classic Edition
- { MAKE_CONTROLLER_ID( 0x1689, 0xfe00 ), k_eControllerType_XBox360Controller }, // Razer Sabertooth
- { MAKE_CONTROLLER_ID( 0x1bad, 0x0002 ), k_eControllerType_XBox360Controller }, // Harmonix Rock Band Guitar
- { MAKE_CONTROLLER_ID( 0x1bad, 0x0003 ), k_eControllerType_XBox360Controller }, // Harmonix Rock Band Drumkit
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf016 ), k_eControllerType_XBox360Controller }, // Mad Catz Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf018 ), k_eControllerType_XBox360Controller }, // Mad Catz Street Fighter IV SE Fighting Stick
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf019 ), k_eControllerType_XBox360Controller }, // Mad Catz Brawlstick for Xbox 360
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf021 ), k_eControllerType_XBox360Controller }, // Mad Cats Ghost Recon FS GamePad
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf023 ), k_eControllerType_XBox360Controller }, // MLG Pro Circuit Controller (Xbox)
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf025 ), k_eControllerType_XBox360Controller }, // Mad Catz Call Of Duty
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf027 ), k_eControllerType_XBox360Controller }, // Mad Catz FPS Pro
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf028 ), k_eControllerType_XBox360Controller }, // Street Fighter IV FightPad
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf02e ), k_eControllerType_XBox360Controller }, // Mad Catz Fightpad
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf036 ), k_eControllerType_XBox360Controller }, // Mad Catz MicroCon GamePad Pro
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf038 ), k_eControllerType_XBox360Controller }, // Street Fighter IV FightStick TE
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf039 ), k_eControllerType_XBox360Controller }, // Mad Catz MvC2 TE
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf03a ), k_eControllerType_XBox360Controller }, // Mad Catz SFxT Fightstick Pro
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf03d ), k_eControllerType_XBox360Controller }, // Street Fighter IV Arcade Stick TE - Chun Li
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf03e ), k_eControllerType_XBox360Controller }, // Mad Catz MLG FightStick TE
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf03f ), k_eControllerType_XBox360Controller }, // Mad Catz FightStick SoulCaliber
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf042 ), k_eControllerType_XBox360Controller }, // Mad Catz FightStick TES+
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf080 ), k_eControllerType_XBox360Controller }, // Mad Catz FightStick TE2
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf501 ), k_eControllerType_XBox360Controller }, // HoriPad EX2 Turbo
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf502 ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro.VX SA
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf503 ), k_eControllerType_XBox360Controller }, // Hori Fighting Stick VX
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf504 ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro. EX
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf505 ), k_eControllerType_XBox360Controller }, // Hori Fighting Stick EX2B
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf506 ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro.EX Premium VLX
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf900 ), k_eControllerType_XBox360Controller }, // Harmonix Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf901 ), k_eControllerType_XBox360Controller }, // Gamestop Xbox 360 Controller
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf902 ), k_eControllerType_XBox360Controller }, // Mad Catz Gamepad2
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf903 ), k_eControllerType_XBox360Controller }, // Tron Xbox 360 controller
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf904 ), k_eControllerType_XBox360Controller }, // PDP Versus Fighting Pad
- { MAKE_CONTROLLER_ID( 0x1bad, 0xf906 ), k_eControllerType_XBox360Controller }, // MortalKombat FightStick
- { MAKE_CONTROLLER_ID( 0x1bad, 0xfa01 ), k_eControllerType_XBox360Controller }, // MadCatz GamePad
- { MAKE_CONTROLLER_ID( 0x1bad, 0xfd00 ), k_eControllerType_XBox360Controller }, // Razer Onza TE
- { MAKE_CONTROLLER_ID( 0x1bad, 0xfd01 ), k_eControllerType_XBox360Controller }, // Razer Onza
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5000 ), k_eControllerType_XBox360Controller }, // Razer Atrox Arcade Stick
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5300 ), k_eControllerType_XBox360Controller }, // PowerA MINI PROEX Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5303 ), k_eControllerType_XBox360Controller }, // Xbox Airflo wired controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x530a ), k_eControllerType_XBox360Controller }, // Xbox 360 Pro EX Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x531a ), k_eControllerType_XBox360Controller }, // PowerA Pro Ex
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5397 ), k_eControllerType_XBox360Controller }, // FUS1ON Tournament Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x541a ), k_eControllerType_XBoxOneController }, // PowerA Xbox One Mini Wired Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x542a ), k_eControllerType_XBoxOneController }, // Xbox ONE spectra
- { MAKE_CONTROLLER_ID( 0x24c6, 0x543a ), k_eControllerType_XBoxOneController }, // PowerA Xbox One wired controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5500 ), k_eControllerType_XBox360Controller }, // Hori XBOX 360 EX 2 with Turbo
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5501 ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro VX-SA
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5502 ), k_eControllerType_XBox360Controller }, // Hori Fighting Stick VX Alt
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5503 ), k_eControllerType_XBox360Controller }, // Hori Fighting Edge
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5506 ), k_eControllerType_XBox360Controller }, // Hori SOULCALIBUR V Stick
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5510 ), k_eControllerType_XBox360Controller }, // Hori Fighting Commander ONE
- { MAKE_CONTROLLER_ID( 0x24c6, 0x550d ), k_eControllerType_XBox360Controller }, // Hori GEM Xbox controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x550e ), k_eControllerType_XBox360Controller }, // Hori Real Arcade Pro V Kai 360
- { MAKE_CONTROLLER_ID( 0x24c6, 0x551a ), k_eControllerType_XBoxOneController }, // PowerA FUSION Pro Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x561a ), k_eControllerType_XBoxOneController }, // PowerA FUSION Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5b00 ), k_eControllerType_XBox360Controller }, // ThrustMaster Ferrari Italia 458 Racing Wheel
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5b02 ), k_eControllerType_XBox360Controller }, // Thrustmaster, Inc. GPX Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5b03 ), k_eControllerType_XBox360Controller }, // Thrustmaster Ferrari 458 Racing Wheel
- { MAKE_CONTROLLER_ID( 0x24c6, 0x5d04 ), k_eControllerType_XBox360Controller }, // Razer Sabertooth
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfafa ), k_eControllerType_XBox360Controller }, // Aplay Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfafb ), k_eControllerType_XBox360Controller }, // Aplay Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfafc ), k_eControllerType_XBox360Controller }, // Afterglow Gamepad 1
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfafe ), k_eControllerType_XBox360Controller }, // Rock Candy Gamepad for Xbox 360
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfafd ), k_eControllerType_XBox360Controller }, // Afterglow Gamepad 3
- { MAKE_CONTROLLER_ID( 0x0955, 0x7210 ), k_eControllerType_XBox360Controller }, // Nvidia Shield local controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0205 ), k_eControllerType_XBoxOneController }, // Victrix Pro FS Xbox One Edition
-
// These have been added via Minidump for unrecognized Xinput controller assert
- { MAKE_CONTROLLER_ID( 0x0000, 0x0000 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x045e, 0x02a2 ), k_eControllerType_XBox360Controller }, // Unknown Controller - Microsoft VID
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x1414 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x1314 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0159 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0xfaff ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0086 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x006d ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00a4 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x1832 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x187f ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x1883 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x03eb, 0xff01 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2c22, 0x2303 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0c12, 0x0ef8 ), k_eControllerType_XBox360Controller }, // Homemade fightstick based on brook pcb (with XInput driver??)
- { MAKE_CONTROLLER_ID( 0x046d, 0x1000 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x1345, 0x6006 ), k_eControllerType_XBox360Controller }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0000, 0x0000 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x045e, 0x02a2 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller - Microsoft VID
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x1414 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0159 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0xfaff ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x006d ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00a4 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x1832 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x187f ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x1883 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x03eb, 0xff01 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2c22, 0x2303 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0c12, 0x0ef8 ), k_eControllerType_XBox360Controller, NULL }, // Homemade fightstick based on brook pcb (with XInput driver??)
+ { MAKE_CONTROLLER_ID( 0x046d, 0x1000 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1345, 0x6006 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x056e, 0x2012 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x146b, 0x0602 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00ae ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x146b, 0x0603 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x056e, 0x2013 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x046d, 0x0401 ), k_eControllerType_XBox360Controller }, // logitech xinput
- { MAKE_CONTROLLER_ID( 0x046d, 0x0301 ), k_eControllerType_XBox360Controller }, // logitech xinput
- { MAKE_CONTROLLER_ID( 0x046d, 0xcaa3 ), k_eControllerType_XBox360Controller }, // logitech xinput
- { MAKE_CONTROLLER_ID( 0x046d, 0xc261 ), k_eControllerType_XBox360Controller }, // logitech xinput
- { MAKE_CONTROLLER_ID( 0x046d, 0x0291 ), k_eControllerType_XBox360Controller }, // logitech xinput
- { MAKE_CONTROLLER_ID( 0x0079, 0x18d3 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00b1 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0001, 0x0001 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x1345, 0x6005 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x188e ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x18d4 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00b1 ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x187c ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x189c ), k_eControllerType_XBox360Controller }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x0079, 0x1874 ), k_eControllerType_XBox360Controller }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x056e, 0x2012 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x0602 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00ae ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x046d, 0x0401 ), k_eControllerType_XBox360Controller, NULL }, // logitech xinput
+ { MAKE_CONTROLLER_ID( 0x046d, 0x0301 ), k_eControllerType_XBox360Controller, NULL }, // logitech xinput
+ { MAKE_CONTROLLER_ID( 0x046d, 0xcaa3 ), k_eControllerType_XBox360Controller, NULL }, // logitech xinput
+ { MAKE_CONTROLLER_ID( 0x046d, 0xc261 ), k_eControllerType_XBox360Controller, NULL }, // logitech xinput
+ { MAKE_CONTROLLER_ID( 0x046d, 0x0291 ), k_eControllerType_XBox360Controller, NULL }, // logitech xinput
+ { MAKE_CONTROLLER_ID( 0x0079, 0x18d3 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00b1 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0001, 0x0001 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x188e ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x187c ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x189c ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x0079, 0x1874 ), k_eControllerType_XBox360Controller, NULL }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2f24, 0x0050 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x24c6, 0x581a ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2f24, 0x2e ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x9886, 0x24 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2f24, 0x91 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x2a4 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x1430, 0x719 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xf0d, 0xed ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x3eb, 0xff02 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xf0d, 0xc0 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x152 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x2a7 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x2a6 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x46d, 0x1007 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x2b8 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0xe6f, 0x2a8 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x2c22, 0x2503 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x79, 0x18a1 ), k_eControllerType_XBoxOneController }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x1038, 0xb360 ), k_eControllerType_XBox360Controller }, // SteelSeries Nimbus/Stratus XL
+ { MAKE_CONTROLLER_ID( 0x2f24, 0x0050 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2f24, 0x2e ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x9886, 0x24 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2f24, 0x91 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1430, 0x719 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xf0d, 0xed ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x3eb, 0xff02 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xf0d, 0xc0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x152 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2a7 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x46d, 0x1007 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2b8 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2a8 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2c22, 0x2503 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x79, 0x18a1 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
-
- //{ MAKE_CONTROLLER_ID( 0x1949, 0x0402 ), /*android*/ }, // Unknown Controller
+ /* Added from Minidumps 10-9-19 */
+ { MAKE_CONTROLLER_ID( 0x0, 0x6686 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x11ff, 0x511 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x12ab, 0x304 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1430, 0x291 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1430, 0x2a9 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1430, 0x70b ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x604 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x605 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x606 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x146b, 0x609 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1532, 0xa14 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0x28e ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0x2a0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x1bad, 0x5500 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x20ab, 0x55ef ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x24c6, 0x5509 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2516, 0x69 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x25b1, 0x360 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2c22, 0x2203 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2f24, 0x11 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2f24, 0x53 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x2f24, 0xb7 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x46d, 0x0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x46d, 0x1004 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x46d, 0x1008 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x46d, 0xf301 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x738, 0x2a0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x738, 0x7263 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x738, 0xb738 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x738, 0xcb29 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x738, 0xf401 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x79, 0x18c2 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x79, 0x18c8 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x79, 0x18cf ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xc12, 0xe17 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xc12, 0xe1c ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xc12, 0xe22 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xc12, 0xe30 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xd2d2, 0xd2d2 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xd62, 0x9a1a ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xd62, 0x9a1b ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe00, 0xe00 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x12a ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2a1 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2a2 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2a5 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2b2 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2bd ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2bf ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2c0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xe6f, 0x2c6 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xf0d, 0x97 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xf0d, 0xba ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xf0d, 0xd8 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0xfff, 0x2a1 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller
- { MAKE_CONTROLLER_ID( 0x05ac, 0x0001 ), k_eControllerType_AppleController }, // MFI Extended Gamepad (generic entry for iOS/tvOS)
- { MAKE_CONTROLLER_ID( 0x05ac, 0x0002 ), k_eControllerType_AppleController }, // MFI Standard Gamepad (generic entry for iOS/tvOS)
+ //{ MAKE_CONTROLLER_ID( 0x1949, 0x0402 ), /*android*/, NULL }, // Unknown Controller
+ { MAKE_CONTROLLER_ID( 0x05ac, 0x0001 ), k_eControllerType_AppleController, NULL }, // MFI Extended Gamepad (generic entry for iOS/tvOS)
+ { MAKE_CONTROLLER_ID( 0x05ac, 0x0002 ), k_eControllerType_AppleController, NULL }, // MFI Standard Gamepad (generic entry for iOS/tvOS)
+
// We currently don't support using a pair of Switch Joy-Con's as a single
// controller and we don't want to support using them individually for the
// time being, so these should be disabled until one of the above is true
- // { MAKE_CONTROLLER_ID( 0x057e, 0x2006 ), k_eControllerType_SwitchJoyConLeft }, // Nintendo Switch Joy-Con (Left)
- // { MAKE_CONTROLLER_ID( 0x057e, 0x2007 ), k_eControllerType_SwitchJoyConRight }, // Nintendo Switch Joy-Con (Right)
+ // { MAKE_CONTROLLER_ID( 0x057e, 0x2006 ), k_eControllerType_SwitchJoyConLeft, NULL }, // Nintendo Switch Joy-Con (Left)
+ // { MAKE_CONTROLLER_ID( 0x057e, 0x2007 ), k_eControllerType_SwitchJoyConRight, NULL }, // Nintendo Switch Joy-Con (Right)
// This same controller ID is spoofed by many 3rd-party Switch controllers.
// The ones we currently know of are:
@@ -401,33 +516,110 @@
// * ORTZ Gaming Wireless Pro Controller
// * ZhiXu Gamepad Wireless
// * Sunwaytek Wireless Motion Controller for Nintendo Switch
- { MAKE_CONTROLLER_ID( 0x057e, 0x2009 ), k_eControllerType_SwitchProController }, // Nintendo Switch Pro Controller
+ { MAKE_CONTROLLER_ID( 0x057e, 0x2009 ), k_eControllerType_SwitchProController, NULL }, // Nintendo Switch Pro Controller
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00c1 ), k_eControllerType_SwitchInputOnlyController }, // HORIPAD for Nintendo Switch
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x0092 ), k_eControllerType_SwitchInputOnlyController }, // HORI Pokken Tournament DX Pro Pad
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00f6 ), k_eControllerType_SwitchProController }, // HORI Wireless Switch Pad
- { MAKE_CONTROLLER_ID( 0x0f0d, 0x00dc ), k_eControllerType_XInputSwitchController }, // HORI Battle Pad. Is a Switch controller but shows up through XInput on Windows.
- { MAKE_CONTROLLER_ID( 0x20d6, 0xa711 ), k_eControllerType_SwitchInputOnlyController }, // PowerA Wired Controller Plus/PowerA Wired Controller Nintendo GameCube Style
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0185 ), k_eControllerType_SwitchInputOnlyController }, // PDP Wired Fight Pad Pro for Nintendo Switch
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0180 ), k_eControllerType_SwitchInputOnlyController }, // PDP Faceoff Wired Pro Controller for Nintendo Switch
- { MAKE_CONTROLLER_ID( 0x0e6f, 0x0181 ), k_eControllerType_SwitchInputOnlyController }, // PDP Faceoff Deluxe Wired Pro Controller for Nintendo Switch
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00c1 ), k_eControllerType_SwitchInputOnlyController, NULL }, // HORIPAD for Nintendo Switch
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x0092 ), k_eControllerType_SwitchInputOnlyController, NULL }, // HORI Pokken Tournament DX Pro Pad
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00f6 ), k_eControllerType_SwitchProController, NULL }, // HORI Wireless Switch Pad
+ { MAKE_CONTROLLER_ID( 0x0f0d, 0x00dc ), k_eControllerType_XInputSwitchController, NULL }, // HORI Battle Pad. Is a Switch controller but shows up through XInput on Windows.
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0185 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PDP Wired Fight Pad Pro for Nintendo Switch
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0180 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PDP Faceoff Wired Pro Controller for Nintendo Switch
+ { MAKE_CONTROLLER_ID( 0x0e6f, 0x0181 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PDP Faceoff Deluxe Wired Pro Controller for Nintendo Switch
+ { MAKE_CONTROLLER_ID( 0x20d6, 0xa711 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PowerA Wired Controller Plus/PowerA Wired Controller Nintendo GameCube Style
+ { MAKE_CONTROLLER_ID( 0x20d6, 0xa712 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PowerA - Fusion Fight Pad
+ { MAKE_CONTROLLER_ID( 0x20d6, 0xa713 ), k_eControllerType_SwitchInputOnlyController, NULL }, // PowerA - Super Mario Controller
-
// Valve products - don't add to public list
- { MAKE_CONTROLLER_ID( 0x0000, 0x11fb ), k_eControllerType_MobileTouch }, // Streaming mobile touch virtual controls
- { MAKE_CONTROLLER_ID( 0x28de, 0x1101 ), k_eControllerType_SteamController }, // Valve Legacy Steam Controller (CHELL)
- { MAKE_CONTROLLER_ID( 0x28de, 0x1102 ), k_eControllerType_SteamController }, // Valve wired Steam Controller (D0G)
- { MAKE_CONTROLLER_ID( 0x28de, 0x1105 ), k_eControllerType_SteamController }, // Valve Bluetooth Steam Controller (D0G)
- { MAKE_CONTROLLER_ID( 0x28de, 0x1106 ), k_eControllerType_SteamController }, // Valve Bluetooth Steam Controller (D0G)
- { MAKE_CONTROLLER_ID( 0x28de, 0x1142 ), k_eControllerType_SteamController }, // Valve wireless Steam Controller
- { MAKE_CONTROLLER_ID( 0x28de, 0x1201 ), k_eControllerType_SteamControllerV2 }, // Valve wired Steam Controller (HEADCRAB)
- { MAKE_CONTROLLER_ID( 0x28de, 0x1202 ), k_eControllerType_SteamControllerV2 }, // Valve Bluetooth Steam Controller (HEADCRAB)
+ { MAKE_CONTROLLER_ID( 0x0000, 0x11fb ), k_eControllerType_MobileTouch, NULL }, // Streaming mobile touch virtual controls
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1101 ), k_eControllerType_SteamController, NULL }, // Valve Legacy Steam Controller (CHELL)
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1102 ), k_eControllerType_SteamController, NULL }, // Valve wired Steam Controller (D0G)
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1105 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1106 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1142 ), k_eControllerType_SteamController, NULL }, // Valve wireless Steam Controller
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1201 ), k_eControllerType_SteamControllerV2, NULL }, // Valve wired Steam Controller (HEADCRAB)
+ { MAKE_CONTROLLER_ID( 0x28de, 0x1202 ), k_eControllerType_SteamControllerV2, NULL }, // Valve Bluetooth Steam Controller (HEADCRAB)
};
-static inline EControllerType GuessControllerType( int nVID, int nPID )
+static SDL_INLINE const char *GetControllerTypeOverride( int nVID, int nPID )
{
+ const char *hint = SDL_GetHint(SDL_HINT_GAMECONTROLLERTYPE);
+ if (hint) {
+ char key[32];
+ const char *spot = NULL;
+
+ SDL_snprintf(key, sizeof(key), "0x%.4x/0x%.4x=", nVID, nPID);
+ spot = SDL_strstr(hint, key);
+ if (!spot) {
+ SDL_snprintf(key, sizeof(key), "0x%.4X/0x%.4X=", nVID, nPID);
+ spot = SDL_strstr(hint, key);
+ }
+ if (spot) {
+ spot += SDL_strlen(key);
+ if (SDL_strncmp(spot, "k_eControllerType_", 18) == 0) {
+ spot += 18;
+ }
+ return spot;
+ }
+ }
+ return NULL;
+}
+
+static SDL_INLINE EControllerType GuessControllerType( int nVID, int nPID )
+{
+#if 0//def _DEBUG
+ // Verify that there are no duplicates in the controller list
+ // If the list were sorted, we could do this much more efficiently, as well as improve lookup speed.
+ static bool s_bCheckedForDuplicates;
+ if ( !s_bCheckedForDuplicates )
+ {
+ s_bCheckedForDuplicates = true;
+
+ for ( int i = 0; i < sizeof( arrControllers ) / sizeof( arrControllers[ 0 ] ); ++i )
+ {
+ for ( int j = i + 1; j < sizeof( arrControllers ) / sizeof( arrControllers[ 0 ] ); ++j )
+ {
+ if ( arrControllers[ i ].m_unDeviceID == arrControllers[ j ].m_unDeviceID )
+ {
+ Log( "Duplicate controller entry found for VID 0x%.4x PID 0x%.4x\n", ( arrControllers[ i ].m_unDeviceID >> 16 ), arrControllers[ i ].m_unDeviceID & 0xFFFF );
+ }
+ }
+ }
+ }
+#endif // _DEBUG
+
unsigned int unDeviceID = MAKE_CONTROLLER_ID( nVID, nPID );
int iIndex;
+
+ const char *pszOverride = GetControllerTypeOverride( nVID, nPID );
+ if ( pszOverride )
+ {
+ if ( SDL_strncasecmp( pszOverride, "Xbox360", 7 ) == 0 )
+ {
+ return k_eControllerType_XBox360Controller;
+ }
+ if ( SDL_strncasecmp( pszOverride, "XboxOne", 7 ) == 0 )
+ {
+ return k_eControllerType_XBoxOneController;
+ }
+ if ( SDL_strncasecmp( pszOverride, "PS3", 3 ) == 0 )
+ {
+ return k_eControllerType_PS3Controller;
+ }
+ if ( SDL_strncasecmp( pszOverride, "PS4", 3 ) == 0 )
+ {
+ return k_eControllerType_PS4Controller;
+ }
+ if ( SDL_strncasecmp( pszOverride, "SwitchPro", 9 ) == 0 )
+ {
+ return k_eControllerType_SwitchProController;
+ }
+ if ( SDL_strncasecmp( pszOverride, "Steam", 5 ) == 0 )
+ {
+ return k_eControllerType_SteamController;
+ }
+ return k_eControllerType_UnknownNonSteamController;
+ }
+
for ( iIndex = 0; iIndex < sizeof( arrControllers ) / sizeof( arrControllers[0] ); ++iIndex )
{
if ( unDeviceID == arrControllers[ iIndex ].m_unDeviceID )
@@ -437,6 +629,22 @@
}
return k_eControllerType_UnknownNonSteamController;
+
+}
+
+static SDL_INLINE const char *GuessControllerName( int nVID, int nPID )
+{
+ unsigned int unDeviceID = MAKE_CONTROLLER_ID( nVID, nPID );
+ int iIndex;
+ for ( iIndex = 0; iIndex < sizeof( arrControllers ) / sizeof( arrControllers[0] ); ++iIndex )
+ {
+ if ( unDeviceID == arrControllers[ iIndex ].m_unDeviceID )
+ {
+ return arrControllers[ iIndex ].m_pszName;
+ }
+ }
+
+ return NULL;
}
--- a/external/SDL2/src/joystick/darwin/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/darwin/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -52,7 +52,7 @@
SDL_free(effect);
}
-FFEFFECT *CreateRumbleEffectData(Sint16 magnitude, Uint32 duration_ms)
+FFEFFECT *CreateRumbleEffectData(Sint16 magnitude)
{
FFEFFECT *effect;
FFPERIODIC *periodic;
@@ -65,7 +65,7 @@
effect->dwSize = sizeof(*effect);
effect->dwGain = 10000;
effect->dwFlags = FFEFF_OBJECTOFFSETS;
- effect->dwDuration = duration_ms * 1000; /* In microseconds. */
+ effect->dwDuration = SDL_MAX_RUMBLE_DURATION_MS * 1000; /* In microseconds. */
effect->dwTriggerButton = FFEB_NOTRIGGER;
effect->cAxes = 2;
@@ -128,6 +128,7 @@
if (removeDevice) {
if (removeDevice->deviceRef) {
IOHIDDeviceUnscheduleFromRunLoop(removeDevice->deviceRef, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE);
+ CFRelease(removeDevice->deviceRef);
removeDevice->deviceRef = NULL;
}
@@ -136,7 +137,7 @@
if ( gpDeviceList == removeDevice ) {
gpDeviceList = pDeviceNext;
- } else {
+ } else if (gpDeviceList) {
recDevice *device = gpDeviceList;
while (device->pNext != removeDevice) {
device = device->pNext;
@@ -161,7 +162,7 @@
SInt32 value = 0;
int returnValue = SDL_FALSE;
- if (pDevice && pElement) {
+ if (pDevice && pDevice->deviceRef && pElement) {
IOHIDValueRef valueRef;
if (IOHIDDeviceGetValue(pDevice->deviceRef, pElement->elementRef, &valueRef) == kIOReturnSuccess) {
value = (SInt32) IOHIDValueGetIntegerValue(valueRef);
@@ -206,7 +207,11 @@
{
recDevice *device = (recDevice *) ctx;
device->removed = SDL_TRUE;
- device->deviceRef = NULL; // deviceRef was invalidated due to the remove
+ if (device->deviceRef) {
+ // deviceRef was invalidated due to the remove
+ CFRelease(device->deviceRef);
+ device->deviceRef = NULL;
+ }
if (device->ffeffect_ref) {
FFDeviceReleaseEffect(device->ffdevice, device->ffeffect_ref);
device->ffeffect_ref = NULL;
@@ -399,9 +404,14 @@
Sint32 vendor = 0;
Sint32 product = 0;
Sint32 version = 0;
+ const char *name;
+ const char *manufacturer_remapped;
+ char manufacturer_string[256];
+ char product_string[256];
CFTypeRef refCF = NULL;
CFArrayRef array = NULL;
Uint16 *guid16 = (Uint16 *)pDevice->guid.data;
+ int i;
/* get usage page and usage */
refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDPrimaryUsagePageKey));
@@ -423,18 +433,17 @@
return SDL_FALSE; /* Filter device list to non-keyboard/mouse stuff */
}
+ /* Make sure we retain the use of the IOKit-provided device-object,
+ lest the device get disconnected and we try to use it. (Fixes
+ SDL-Bugzilla #4961, aka. https://bugzilla.libsdl.org/show_bug.cgi?id=4961 )
+ */
+ CFRetain(hidDevice);
+
+ /* Now that we've CFRetain'ed the device-object (for our use), we'll
+ save the reference to it.
+ */
pDevice->deviceRef = hidDevice;
- /* get device name */
- refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDProductKey));
- if (!refCF) {
- /* Maybe we can't get "AwesomeJoystick2000", but we can get "Logitech"? */
- refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDManufacturerKey));
- }
- if ((!refCF) || (!CFStringGetCString(refCF, pDevice->product, sizeof (pDevice->product), kCFStringEncodingUTF8))) {
- SDL_strlcpy(pDevice->product, "Unidentified joystick", sizeof (pDevice->product));
- }
-
refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDVendorIDKey));
if (refCF) {
CFNumberGetValue(refCF, kCFNumberSInt32Type, &vendor);
@@ -450,8 +459,41 @@
CFNumberGetValue(refCF, kCFNumberSInt32Type, &version);
}
+ /* get device name */
+ name = SDL_GetCustomJoystickName(vendor, product);
+ if (name) {
+ SDL_strlcpy(pDevice->product, name, sizeof(pDevice->product));
+ } else {
+ refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDManufacturerKey));
+ if ((!refCF) || (!CFStringGetCString(refCF, manufacturer_string, sizeof(manufacturer_string), kCFStringEncodingUTF8))) {
+ manufacturer_string[0] = '\0';
+ }
+ refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDProductKey));
+ if ((!refCF) || (!CFStringGetCString(refCF, product_string, sizeof(product_string), kCFStringEncodingUTF8))) {
+ SDL_strlcpy(product_string, "Unidentified joystick", sizeof(product_string));
+ }
+ for (i = (int)SDL_strlen(manufacturer_string) - 1; i > 0; --i) {
+ if (SDL_isspace(manufacturer_string[i])) {
+ manufacturer_string[i] = '\0';
+ } else {
+ break;
+ }
+ }
+
+ manufacturer_remapped = SDL_GetCustomJoystickManufacturer(manufacturer_string);
+ if (manufacturer_remapped != manufacturer_string) {
+ SDL_strlcpy(manufacturer_string, manufacturer_remapped, sizeof(manufacturer_string));
+ }
+
+ if (SDL_strncasecmp(manufacturer_string, product_string, SDL_strlen(manufacturer_string)) == 0) {
+ SDL_strlcpy(pDevice->product, product_string, sizeof(pDevice->product));
+ } else {
+ SDL_snprintf(pDevice->product, sizeof(pDevice->product), "%s %s", manufacturer_string, product_string);
+ }
+ }
+
#ifdef SDL_JOYSTICK_HIDAPI
- if (HIDAPI_IsDevicePresent(vendor, product, version)) {
+ if (HIDAPI_IsDevicePresent(vendor, product, version, pDevice->product)) {
/* The HIDAPI driver is taking care of this device */
return 0;
}
@@ -518,12 +560,12 @@
}
if (!GetDeviceInfo(ioHIDDeviceObject, device)) {
- SDL_free(device);
+ FreeDevice(device);
return; /* not a device we care about, probably. */
}
if (SDL_ShouldIgnoreJoystick(device->product, device->guid)) {
- SDL_free(device);
+ FreeDevice(device);
return;
}
@@ -706,6 +748,11 @@
return -1;
}
+static void
+DARWIN_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
static SDL_JoystickGUID
DARWIN_JoystickGetDeviceGUID( int device_index )
{
@@ -799,7 +846,7 @@
}
static int
-DARWIN_JoystickInitRumble(recDevice *device, Sint16 magnitude, Uint32 duration_ms)
+DARWIN_JoystickInitRumble(recDevice *device, Sint16 magnitude)
{
HRESULT result;
@@ -822,7 +869,7 @@
}
/* Create the effect */
- device->ffeffect = CreateRumbleEffectData(magnitude, duration_ms);
+ device->ffeffect = CreateRumbleEffectData(magnitude);
if (!device->ffeffect) {
return SDL_OutOfMemory();
}
@@ -836,7 +883,7 @@
}
static int
-DARWIN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+DARWIN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
HRESULT result;
recDevice *device = joystick->hwdata;
@@ -850,7 +897,6 @@
if (device->ff_initialized) {
FFPERIODIC *periodic = ((FFPERIODIC *)device->ffeffect->lpvTypeSpecificParams);
- device->ffeffect->dwDuration = duration_ms * 1000; /* In microseconds. */
periodic->dwMagnitude = CONVERT_MAGNITUDE(magnitude);
result = FFEffectSetParameters(device->ffeffect_ref, device->ffeffect,
@@ -859,7 +905,7 @@
return SDL_SetError("Unable to update rumble effect: %s", FFStrError(result));
}
} else {
- if (DARWIN_JoystickInitRumble(device, magnitude, duration_ms) < 0) {
+ if (DARWIN_JoystickInitRumble(device, magnitude) < 0) {
return -1;
}
device->ff_initialized = SDL_TRUE;
@@ -1005,6 +1051,7 @@
DARWIN_JoystickDetect,
DARWIN_JoystickGetDeviceName,
DARWIN_JoystickGetDevicePlayerIndex,
+ DARWIN_JoystickSetDevicePlayerIndex,
DARWIN_JoystickGetDeviceGUID,
DARWIN_JoystickGetDeviceInstanceID,
DARWIN_JoystickOpen,
--- a/external/SDL2/src/joystick/darwin/SDL_sysjoystick_c.h
+++ b/external/SDL2/src/joystick/darwin/SDL_sysjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/dummy/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/dummy/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -58,6 +58,11 @@
return -1;
}
+static void
+DUMMY_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
static SDL_JoystickGUID
DUMMY_JoystickGetDeviceGUID(int device_index)
{
@@ -79,7 +84,7 @@
}
static int
-DUMMY_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+DUMMY_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -106,6 +111,7 @@
DUMMY_JoystickDetect,
DUMMY_JoystickGetDeviceName,
DUMMY_JoystickGetDevicePlayerIndex,
+ DUMMY_JoystickSetDevicePlayerIndex,
DUMMY_JoystickGetDeviceGUID,
DUMMY_JoystickGetDeviceInstanceID,
DUMMY_JoystickOpen,
--- a/external/SDL2/src/joystick/emscripten/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/emscripten/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -288,6 +288,11 @@
return -1;
}
+static void
+EMSCRIPTEN_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
static SDL_JoystickID
EMSCRIPTEN_JoystickGetDeviceInstanceID(int device_index)
{
@@ -394,7 +399,7 @@
}
static int
-EMSCRIPTEN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+EMSCRIPTEN_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -406,6 +411,7 @@
EMSCRIPTEN_JoystickDetect,
EMSCRIPTEN_JoystickGetDeviceName,
EMSCRIPTEN_JoystickGetDevicePlayerIndex,
+ EMSCRIPTEN_JoystickSetDevicePlayerIndex,
EMSCRIPTEN_JoystickGetDeviceGUID,
EMSCRIPTEN_JoystickGetDeviceInstanceID,
EMSCRIPTEN_JoystickOpen,
--- a/external/SDL2/src/joystick/emscripten/SDL_sysjoystick_c.h
+++ b/external/SDL2/src/joystick/emscripten/SDL_sysjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/haiku/SDL_haikujoystick.cc
+++ b/external/SDL2/src/joystick/haiku/SDL_haikujoystick.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -104,6 +104,10 @@
return -1;
}
+ static void HAIKU_JoystickGetDevicePlayerIndex(int device_index, int player_index)
+ {
+ }
+
/* Function to perform the mapping from device index to the instance id for this index */
static SDL_JoystickID HAIKU_JoystickGetDeviceInstanceID(int device_index)
{
@@ -250,7 +254,7 @@
return guid;
}
- static int HAIKU_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+ static int HAIKU_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -262,6 +266,7 @@
HAIKU_JoystickDetect,
HAIKU_JoystickGetDeviceName,
HAIKU_JoystickGetDevicePlayerIndex,
+ HAIKU_JoystickSetDevicePlayerIndex,
HAIKU_JoystickGetDeviceGUID,
HAIKU_JoystickGetDeviceInstanceID,
HAIKU_JoystickOpen,
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_gamecube.c
@@ -1,0 +1,414 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+#include "SDL_hints.h"
+#include "SDL_log.h"
+#include "SDL_events.h"
+#include "SDL_timer.h"
+#include "SDL_haptic.h"
+#include "SDL_joystick.h"
+#include "SDL_gamecontroller.h"
+#include "../../SDL_hints_c.h"
+#include "../SDL_sysjoystick.h"
+#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
+
+
+#ifdef SDL_JOYSTICK_HIDAPI_GAMECUBE
+
+#define MAX_CONTROLLERS 4
+
+typedef struct {
+ SDL_JoystickID joysticks[MAX_CONTROLLERS];
+ Uint8 wireless[MAX_CONTROLLERS];
+ Uint8 min_axis[MAX_CONTROLLERS*SDL_CONTROLLER_AXIS_MAX];
+ Uint8 max_axis[MAX_CONTROLLERS*SDL_CONTROLLER_AXIS_MAX];
+ Uint8 rumbleAllowed[MAX_CONTROLLERS];
+ Uint8 rumble[1+MAX_CONTROLLERS];
+ /* Without this variable, hid_write starts to lag a TON */
+ SDL_bool rumbleUpdate;
+ SDL_bool m_bUseButtonLabels;
+} SDL_DriverGameCube_Context;
+
+static SDL_bool
+HIDAPI_DriverGameCube_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
+{
+ if (vendor_id == USB_VENDOR_NINTENDO && product_id == USB_PRODUCT_NINTENDO_GAMECUBE_ADAPTER) {
+ /* Nintendo Co., Ltd. Wii U GameCube Controller Adapter */
+ return SDL_TRUE;
+ }
+ return SDL_FALSE;
+}
+
+static const char *
+HIDAPI_DriverGameCube_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
+{
+ return "Nintendo GameCube Controller";
+}
+
+static void
+ResetAxisRange(SDL_DriverGameCube_Context *ctx, int joystick_index)
+{
+ SDL_memset(&ctx->min_axis[joystick_index*SDL_CONTROLLER_AXIS_MAX], 128-88, SDL_CONTROLLER_AXIS_MAX);
+ SDL_memset(&ctx->max_axis[joystick_index*SDL_CONTROLLER_AXIS_MAX], 128+88, SDL_CONTROLLER_AXIS_MAX);
+
+ /* Trigger axes may have a higher resting value */
+ ctx->min_axis[joystick_index*SDL_CONTROLLER_AXIS_MAX+SDL_CONTROLLER_AXIS_TRIGGERLEFT] = 40;
+ ctx->min_axis[joystick_index*SDL_CONTROLLER_AXIS_MAX+SDL_CONTROLLER_AXIS_TRIGGERRIGHT] = 40;
+}
+
+static float fsel(float fComparand, float fValGE, float fLT)
+{
+ return fComparand >= 0 ? fValGE : fLT;
+}
+
+static float RemapVal(float val, float A, float B, float C, float D)
+{
+ if (A == B) {
+ return fsel(val - B , D , C);
+ }
+ if (val < A) {
+ val = A;
+ }
+ if (val > B) {
+ val = B;
+ }
+ return C + (D - C) * (val - A) / (B - A);
+}
+
+static void SDLCALL SDL_GameControllerButtonReportingHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)userdata;
+ ctx->m_bUseButtonLabels = SDL_GetStringBoolean(hint, SDL_TRUE);
+}
+
+static Uint8 RemapButton(SDL_DriverGameCube_Context *ctx, Uint8 button)
+{
+ if (!ctx->m_bUseButtonLabels) {
+ /* Use button positions */
+ switch (button) {
+ case SDL_CONTROLLER_BUTTON_B:
+ return SDL_CONTROLLER_BUTTON_X;
+ case SDL_CONTROLLER_BUTTON_X:
+ return SDL_CONTROLLER_BUTTON_B;
+ default:
+ break;
+ }
+ }
+ return button;
+}
+
+static SDL_bool
+HIDAPI_DriverGameCube_InitDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverGameCube_Context *ctx;
+ Uint8 packet[37];
+ Uint8 *curSlot;
+ Uint8 i;
+ int size;
+ Uint8 initMagic = 0x13;
+ Uint8 rumbleMagic = 0x11;
+
+ ctx = (SDL_DriverGameCube_Context *)SDL_calloc(1, sizeof(*ctx));
+ if (!ctx) {
+ SDL_OutOfMemory();
+ return SDL_FALSE;
+ }
+
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_free(ctx);
+ SDL_SetError("Couldn't open %s", device->path);
+ return SDL_FALSE;
+ }
+ device->context = ctx;
+
+ ctx->joysticks[0] = -1;
+ ctx->joysticks[1] = -1;
+ ctx->joysticks[2] = -1;
+ ctx->joysticks[3] = -1;
+ ctx->rumble[0] = rumbleMagic;
+
+ /* This is all that's needed to initialize the device. Really! */
+ if (hid_write(device->dev, &initMagic, sizeof(initMagic)) != sizeof(initMagic)) {
+ SDL_SetError("Couldn't initialize WUP-028");
+ goto error;
+ }
+
+ /* Wait for the adapter to initialize */
+ SDL_Delay(10);
+
+ /* Add all the applicable joysticks */
+ while ((size = hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) {
+ if (size < 37 || packet[0] != 0x21) {
+ continue; /* Nothing to do yet...? */
+ }
+
+ /* Go through all 4 slots */
+ curSlot = packet + 1;
+ for (i = 0; i < MAX_CONTROLLERS; i += 1, curSlot += 9) {
+ ctx->wireless[i] = (curSlot[0] & 0x20) != 0;
+
+ /* Only allow rumble if the adapter's second USB cable is connected */
+ ctx->rumbleAllowed[i] = (curSlot[0] & 0x04) != 0 && !ctx->wireless[i];
+
+ if (curSlot[0] & 0x30) { /* 0x10 - Wired, 0x20 - Wireless */
+ if (ctx->joysticks[i] == -1) {
+ ResetAxisRange(ctx, i);
+ HIDAPI_JoystickConnected(device, &ctx->joysticks[i]);
+ }
+ } else {
+ if (ctx->joysticks[i] != -1) {
+ HIDAPI_JoystickDisconnected(device, ctx->joysticks[i]);
+ ctx->joysticks[i] = -1;
+ }
+ continue;
+ }
+ }
+ }
+
+ SDL_AddHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
+ SDL_GameControllerButtonReportingHintChanged, ctx);
+
+ return SDL_TRUE;
+
+error:
+ if (device->dev) {
+ hid_close(device->dev);
+ device->dev = NULL;
+ }
+ if (device->context) {
+ SDL_free(device->context);
+ device->context = NULL;
+ }
+ return SDL_FALSE;
+}
+
+static int
+HIDAPI_DriverGameCube_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+ Uint8 i;
+
+ for (i = 0; i < 4; ++i) {
+ if (instance_id == ctx->joysticks[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+static void
+HIDAPI_DriverGameCube_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+}
+
+static SDL_bool
+HIDAPI_DriverGameCube_UpdateDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+ SDL_Joystick *joystick;
+ Uint8 packet[37];
+ Uint8 *curSlot;
+ Uint8 i;
+ Sint16 axis_value;
+ int size;
+
+ /* Read input packet */
+ while ((size = hid_read_timeout(device->dev, packet, sizeof(packet), 0)) > 0) {
+ if (size < 37 || packet[0] != 0x21) {
+ continue; /* Nothing to do right now...? */
+ }
+
+ /* Go through all 4 slots */
+ curSlot = packet + 1;
+ for (i = 0; i < MAX_CONTROLLERS; i += 1, curSlot += 9) {
+ ctx->wireless[i] = (curSlot[0] & 0x20) != 0;
+
+ /* Only allow rumble if the adapter's second USB cable is connected */
+ ctx->rumbleAllowed[i] = (curSlot[0] & 0x04) != 0 && !ctx->wireless[i];
+
+ if (curSlot[0] & 0x30) { /* 0x10 - Wired, 0x20 - Wireless */
+ if (ctx->joysticks[i] == -1) {
+ ResetAxisRange(ctx, i);
+ HIDAPI_JoystickConnected(device, &ctx->joysticks[i]);
+ }
+ joystick = SDL_JoystickFromInstanceID(ctx->joysticks[i]);
+
+ /* Hasn't been opened yet, skip */
+ if (joystick == NULL) {
+ continue;
+ }
+ } else {
+ if (ctx->joysticks[i] != -1) {
+ HIDAPI_JoystickDisconnected(device, ctx->joysticks[i]);
+ ctx->joysticks[i] = -1;
+ }
+ continue;
+ }
+
+ #define READ_BUTTON(off, flag, button) \
+ SDL_PrivateJoystickButton( \
+ joystick, \
+ RemapButton(ctx, button), \
+ (curSlot[off] & flag) ? SDL_PRESSED : SDL_RELEASED \
+ );
+ READ_BUTTON(1, 0x01, 0) /* A */
+ READ_BUTTON(1, 0x04, 1) /* B */
+ READ_BUTTON(1, 0x02, 2) /* X */
+ READ_BUTTON(1, 0x08, 3) /* Y */
+ READ_BUTTON(1, 0x10, 4) /* DPAD_LEFT */
+ READ_BUTTON(1, 0x20, 5) /* DPAD_RIGHT */
+ READ_BUTTON(1, 0x40, 6) /* DPAD_DOWN */
+ READ_BUTTON(1, 0x80, 7) /* DPAD_UP */
+ READ_BUTTON(2, 0x01, 8) /* START */
+ READ_BUTTON(2, 0x02, 9) /* RIGHTSHOULDER */
+ /* These two buttons are for the bottoms of the analog triggers.
+ * More than likely, you're going to want to read the axes instead!
+ * -flibit
+ */
+ READ_BUTTON(2, 0x04, 10) /* TRIGGERRIGHT */
+ READ_BUTTON(2, 0x08, 11) /* TRIGGERLEFT */
+ #undef READ_BUTTON
+
+ #define READ_AXIS(off, axis) \
+ if (axis < SDL_CONTROLLER_AXIS_TRIGGERLEFT) \
+ if (curSlot[off] < ctx->min_axis[i*SDL_CONTROLLER_AXIS_MAX+axis]) ctx->min_axis[i*SDL_CONTROLLER_AXIS_MAX+axis] = curSlot[off]; \
+ if (curSlot[off] > ctx->max_axis[i*SDL_CONTROLLER_AXIS_MAX+axis]) ctx->max_axis[i*SDL_CONTROLLER_AXIS_MAX+axis] = curSlot[off]; \
+ axis_value = (Sint16)(RemapVal(curSlot[off], ctx->min_axis[i*SDL_CONTROLLER_AXIS_MAX+axis], ctx->max_axis[i*SDL_CONTROLLER_AXIS_MAX+axis], SDL_MIN_SINT16, SDL_MAX_SINT16)); \
+ SDL_PrivateJoystickAxis( \
+ joystick, \
+ axis, axis_value \
+ );
+ READ_AXIS(3, SDL_CONTROLLER_AXIS_LEFTX)
+ READ_AXIS(4, SDL_CONTROLLER_AXIS_LEFTY)
+ READ_AXIS(5, SDL_CONTROLLER_AXIS_RIGHTX)
+ READ_AXIS(6, SDL_CONTROLLER_AXIS_RIGHTY)
+ READ_AXIS(7, SDL_CONTROLLER_AXIS_TRIGGERLEFT)
+ READ_AXIS(8, SDL_CONTROLLER_AXIS_TRIGGERRIGHT)
+ #undef READ_AXIS
+ }
+ }
+
+ /* Write rumble packet */
+ if (ctx->rumbleUpdate) {
+ SDL_HIDAPI_SendRumble(device, ctx->rumble, sizeof(ctx->rumble));
+ ctx->rumbleUpdate = SDL_FALSE;
+ }
+
+ /* If we got here, nothing bad happened! */
+ return SDL_TRUE;
+}
+
+static SDL_bool
+HIDAPI_DriverGameCube_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+ Uint8 i;
+ for (i = 0; i < MAX_CONTROLLERS; i += 1) {
+ if (joystick->instance_id == ctx->joysticks[i]) {
+ joystick->nbuttons = 12;
+ joystick->naxes = SDL_CONTROLLER_AXIS_MAX;
+ joystick->epowerlevel = ctx->wireless[i] ? SDL_JOYSTICK_POWER_UNKNOWN : SDL_JOYSTICK_POWER_WIRED;
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE; /* Should never get here! */
+}
+
+static int
+HIDAPI_DriverGameCube_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+ Uint8 i, val;
+ for (i = 0; i < MAX_CONTROLLERS; i += 1) {
+ if (joystick->instance_id == ctx->joysticks[i]) {
+ if (ctx->wireless[i]) {
+ return SDL_SetError("Ninteno GameCube WaveBird controllers do not support rumble");
+ }
+ if (!ctx->rumbleAllowed[i]) {
+ return SDL_SetError("Second USB cable for WUP-028 not connected");
+ }
+ val = (low_frequency_rumble > 0 || high_frequency_rumble > 0);
+ if (val != ctx->rumble[i + 1]) {
+ ctx->rumble[i + 1] = val;
+ ctx->rumbleUpdate = SDL_TRUE;
+ }
+ return 0;
+ }
+ }
+
+ /* Should never get here! */
+ SDL_SetError("Couldn't find joystick");
+ return -1;
+}
+
+static void
+HIDAPI_DriverGameCube_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+
+ /* Stop rumble activity */
+ if (ctx->rumbleUpdate) {
+ SDL_HIDAPI_SendRumble(device, ctx->rumble, sizeof(ctx->rumble));
+ ctx->rumbleUpdate = SDL_FALSE;
+ }
+}
+
+static void
+HIDAPI_DriverGameCube_FreeDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverGameCube_Context *ctx = (SDL_DriverGameCube_Context *)device->context;
+
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_DelHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
+ SDL_GameControllerButtonReportingHintChanged, ctx);
+
+ SDL_free(device->context);
+ device->context = NULL;
+}
+
+SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverGameCube =
+{
+ SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE,
+ SDL_TRUE,
+ HIDAPI_DriverGameCube_IsSupportedDevice,
+ HIDAPI_DriverGameCube_GetDeviceName,
+ HIDAPI_DriverGameCube_InitDevice,
+ HIDAPI_DriverGameCube_GetDevicePlayerIndex,
+ HIDAPI_DriverGameCube_SetDevicePlayerIndex,
+ HIDAPI_DriverGameCube_UpdateDevice,
+ HIDAPI_DriverGameCube_OpenJoystick,
+ HIDAPI_DriverGameCube_RumbleJoystick,
+ HIDAPI_DriverGameCube_CloseJoystick,
+ HIDAPI_DriverGameCube_FreeDevice
+};
+
+#endif /* SDL_JOYSTICK_HIDAPI_GAMECUBE */
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapi_ps4.c
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_ps4.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -33,23 +33,11 @@
#include "SDL_gamecontroller.h"
#include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
#ifdef SDL_JOYSTICK_HIDAPI_PS4
-#define SONY_USB_VID 0x054C
-#define SONY_DS4_PID 0x05C4
-#define SONY_DS4_DONGLE_PID 0x0BA0
-#define SONY_DS4_SLIM_PID 0x09CC
-
-#define RAZER_USB_VID 0x1532
-#define RAZER_PANTHERA_PID 0X0401
-#define RAZER_PANTHERA_EVO_PID 0x1008
-
-#define USB_PACKET_LENGTH 64
-
-#define VOLUME_CHECK_INTERVAL_MS (10 * 1000)
-
typedef enum
{
k_EPS4ReportIdUsbState = 1,
@@ -112,9 +100,9 @@
SDL_bool is_bluetooth;
SDL_bool audio_supported;
SDL_bool rumble_supported;
+ int player_index;
Uint8 volume;
Uint32 last_volume_check;
- Uint32 rumble_expiration;
PS4StatePacket_t last_state;
} SDL_DriverPS4_Context;
@@ -140,93 +128,16 @@
return crc;
}
-#if defined(__WIN32__) && defined(HAVE_ENDPOINTVOLUME_H)
-#include "../../core/windows/SDL_windows.h"
-
-#ifndef NTDDI_VISTA
-#define NTDDI_VISTA 0x06000000
-#endif
-#ifndef _WIN32_WINNT_VISTA
-#define _WIN32_WINNT_VISTA 0x0600
-#endif
-
-/* Define Vista for the Audio related includes below to work */
-#undef NTDDI_VERSION
-#define NTDDI_VERSION NTDDI_VISTA
-#undef _WIN32_WINNT
-#define _WIN32_WINNT _WIN32_WINNT_VISTA
-#define COBJMACROS
-#include <mmdeviceapi.h>
-#include <audioclient.h>
-#include <endpointvolume.h>
-
-#undef DEFINE_GUID
-#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-DEFINE_GUID(SDL_CLSID_MMDeviceEnumerator, 0xBCDE0395, 0xE52F, 0x467C, 0x8E, 0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E);
-DEFINE_GUID(SDL_IID_IMMDeviceEnumerator, 0xA95664D2, 0x9614, 0x4F35, 0xA7, 0x46, 0xDE, 0x8D, 0xB6, 0x36, 0x17, 0xE6);
-DEFINE_GUID(SDL_IID_IAudioEndpointVolume, 0x5CDF2C82, 0x841E, 0x4546, 0x97, 0x22, 0x0C, 0xF7, 0x40, 0x78, 0x22, 0x9A);
-#endif
-
-
-
-static float GetSystemVolume(void)
-{
- float volume = -1.0f; /* Return this if we can't get system volume */
-
-#if defined(__WIN32__) && defined(HAVE_ENDPOINTVOLUME_H)
- HRESULT hr = WIN_CoInitialize();
- if (SUCCEEDED(hr)) {
- IMMDeviceEnumerator *pEnumerator;
-
- /* This should gracefully fail on XP and succeed on everything Vista and above */
- hr = CoCreateInstance(&SDL_CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, &SDL_IID_IMMDeviceEnumerator, (LPVOID*)&pEnumerator);
- if (SUCCEEDED(hr)) {
- IMMDevice *pDevice;
-
- hr = IMMDeviceEnumerator_GetDefaultAudioEndpoint(pEnumerator, eRender, eConsole, &pDevice);
- if (SUCCEEDED(hr)) {
- IAudioEndpointVolume *pEndpointVolume;
-
- hr = IMMDevice_Activate(pDevice, &SDL_IID_IAudioEndpointVolume, CLSCTX_ALL, NULL, (LPVOID*)&pEndpointVolume);
- if (SUCCEEDED(hr)) {
- IAudioEndpointVolume_GetMasterVolumeLevelScalar(pEndpointVolume, &volume);
- IUnknown_Release(pEndpointVolume);
- }
- IUnknown_Release(pDevice);
- }
- IUnknown_Release(pEnumerator);
- }
- WIN_CoUninitialize();
- }
-#endif /* __WIN32__ */
-
- return volume;
-}
-
-static uint8_t GetPlaystationVolumeFromFloat(float fVolume)
-{
- const int k_nVolumeFitRatio = 15;
- const int k_nVolumeFitOffset = 9;
- float fVolLog;
-
- if (fVolume > 1.0f || fVolume < 0.0f) {
- fVolume = 0.30f;
- }
- fVolLog = SDL_logf(fVolume * 100);
-
- return (Uint8)((fVolLog * k_nVolumeFitRatio) + k_nVolumeFitOffset);
-}
-
static SDL_bool
-HIDAPI_DriverPS4_IsSupportedDevice(Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number)
+HIDAPI_DriverPS4_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
{
- return SDL_IsJoystickPS4(vendor_id, product_id);
+ return (type == SDL_CONTROLLER_TYPE_PS4);
}
static const char *
HIDAPI_DriverPS4_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
{
- if (vendor_id == SONY_USB_VID) {
+ if (vendor_id == USB_VENDOR_SONY) {
return "PS4 Controller";
}
return NULL;
@@ -265,18 +176,72 @@
static SDL_bool HIDAPI_DriverPS4_CanRumble(Uint16 vendor_id, Uint16 product_id)
{
/* The Razer Panthera fight stick hangs when trying to rumble */
- if (vendor_id == RAZER_USB_VID &&
- (product_id == RAZER_PANTHERA_PID || product_id == RAZER_PANTHERA_EVO_PID)) {
+ if (vendor_id == USB_VENDOR_RAZER &&
+ (product_id == USB_PRODUCT_RAZER_PANTHERA || product_id == USB_PRODUCT_RAZER_PANTHERA_EVO)) {
return SDL_FALSE;
}
return SDL_TRUE;
}
-static int HIDAPI_DriverPS4_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
+static void
+SetLedsForPlayerIndex(DS4EffectsState_t *effects, int player_index)
+{
+ /* This list is the same as what hid-sony.c uses in the Linux kernel.
+ The first 4 values correspond to what the PS4 assigns.
+ */
+ static const Uint8 colors[7][3] = {
+ { 0x00, 0x00, 0x40 }, /* Blue */
+ { 0x40, 0x00, 0x00 }, /* Red */
+ { 0x00, 0x40, 0x00 }, /* Green */
+ { 0x20, 0x00, 0x20 }, /* Pink */
+ { 0x02, 0x01, 0x00 }, /* Orange */
+ { 0x00, 0x01, 0x01 }, /* Teal */
+ { 0x01, 0x01, 0x01 } /* White */
+ };
+ if (player_index >= 0) {
+ player_index %= SDL_arraysize(colors);
+ } else {
+ player_index = 0;
+ }
+
+ effects->ucLedRed = colors[player_index][0];
+ effects->ucLedGreen = colors[player_index][1];
+ effects->ucLedBlue = colors[player_index][2];
+}
+
static SDL_bool
-HIDAPI_DriverPS4_Init(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id, Uint16 product_id, void **context)
+HIDAPI_DriverPS4_InitDevice(SDL_HIDAPI_Device *device)
{
+ return HIDAPI_JoystickConnected(device, NULL);
+}
+
+static int
+HIDAPI_DriverPS4_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static int HIDAPI_DriverPS4_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble);
+
+static void
+HIDAPI_DriverPS4_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+ SDL_DriverPS4_Context *ctx = (SDL_DriverPS4_Context *)device->context;
+
+ if (!ctx) {
+ return;
+ }
+
+ ctx->player_index = player_index;
+
+ /* This will set the new LED state based on the new player index */
+ HIDAPI_DriverPS4_RumbleJoystick(device, SDL_JoystickFromInstanceID(instance_id), 0, 0);
+}
+
+static SDL_bool
+HIDAPI_DriverPS4_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
SDL_DriverPS4_Context *ctx;
ctx = (SDL_DriverPS4_Context *)SDL_calloc(1, sizeof(*ctx));
@@ -284,14 +249,21 @@
SDL_OutOfMemory();
return SDL_FALSE;
}
- *context = ctx;
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_free(ctx);
+ SDL_SetError("Couldn't open %s", device->path);
+ return SDL_FALSE;
+ }
+ device->context = ctx;
+
/* Check for type of connection */
- ctx->is_dongle = (vendor_id == SONY_USB_VID && product_id == SONY_DS4_DONGLE_PID);
+ ctx->is_dongle = (device->vendor_id == USB_VENDOR_SONY && device->product_id == USB_PRODUCT_SONY_DS4_DONGLE);
if (ctx->is_dongle) {
ctx->is_bluetooth = SDL_FALSE;
- } else if (vendor_id == SONY_USB_VID) {
- ctx->is_bluetooth = !CheckUSBConnected(dev);
+ } else if (device->vendor_id == USB_VENDOR_SONY) {
+ ctx->is_bluetooth = !CheckUSBConnected(device->dev);
} else {
/* Third party controllers appear to all be wired */
ctx->is_bluetooth = SDL_FALSE;
@@ -301,12 +273,12 @@
#endif
/* Check to see if audio is supported */
- if (vendor_id == SONY_USB_VID &&
- (product_id == SONY_DS4_SLIM_PID || product_id == SONY_DS4_DONGLE_PID )) {
+ if (device->vendor_id == USB_VENDOR_SONY &&
+ (device->product_id == USB_PRODUCT_SONY_DS4_SLIM || device->product_id == USB_PRODUCT_SONY_DS4_DONGLE)) {
ctx->audio_supported = SDL_TRUE;
}
- if (HIDAPI_DriverPS4_CanRumble(vendor_id, product_id)) {
+ if (HIDAPI_DriverPS4_CanRumble(device->vendor_id, device->product_id)) {
if (ctx->is_bluetooth) {
ctx->rumble_supported = SDL_GetHintBoolean(SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, SDL_FALSE);
} else {
@@ -314,8 +286,11 @@
}
}
+ /* Initialize player index (needed for setting LEDs) */
+ ctx->player_index = SDL_JoystickGetPlayerIndex(joystick);
+
/* Initialize LED and effect state */
- HIDAPI_DriverPS4_Rumble(joystick, dev, ctx, 0, 0, 0);
+ HIDAPI_DriverPS4_RumbleJoystick(device, joystick, 0, 0);
/* Initialize the joystick capabilities */
joystick->nbuttons = 16;
@@ -326,9 +301,9 @@
}
static int
-HIDAPI_DriverPS4_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+HIDAPI_DriverPS4_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
- SDL_DriverPS4_Context *ctx = (SDL_DriverPS4_Context *)context;
+ SDL_DriverPS4_Context *ctx = (SDL_DriverPS4_Context *)device->context;
DS4EffectsState_t *effects;
Uint8 data[78];
int report_size, offset;
@@ -359,24 +334,9 @@
effects->ucRumbleLeft = (low_frequency_rumble >> 8);
effects->ucRumbleRight = (high_frequency_rumble >> 8);
- effects->ucLedRed = 0;
- effects->ucLedGreen = 0;
- effects->ucLedBlue = 80;
+ /* Populate the LED state with the appropriate color from our lookup table */
+ SetLedsForPlayerIndex(effects, ctx->player_index);
- if (ctx->audio_supported) {
- Uint32 now = SDL_GetTicks();
- if (!ctx->last_volume_check ||
- SDL_TICKS_PASSED(now, ctx->last_volume_check + VOLUME_CHECK_INTERVAL_MS)) {
- ctx->volume = GetPlaystationVolumeFromFloat(GetSystemVolume());
- ctx->last_volume_check = now;
- }
-
- effects->ucVolumeRight = ctx->volume;
- effects->ucVolumeLeft = ctx->volume;
- effects->ucVolumeSpeaker = ctx->volume;
- effects->ucVolumeMic = 0xFF;
- }
-
if (ctx->is_bluetooth) {
/* Bluetooth reports need a CRC at the end of the packet (at least on Linux) */
Uint8 ubHdr = 0xA2; /* hidp header is part of the CRC calculation */
@@ -386,15 +346,9 @@
SDL_memcpy(&data[report_size - sizeof(unCRC)], &unCRC, sizeof(unCRC));
}
- if (hid_write(dev, data, report_size) != report_size) {
+ if (SDL_HIDAPI_SendRumble(device, data, report_size) != report_size) {
return SDL_SetError("Couldn't send rumble packet");
}
-
- if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
- ctx->rumble_expiration = SDL_GetTicks() + duration_ms;
- } else {
- ctx->rumble_expiration = 0;
- }
return 0;
}
@@ -509,20 +463,28 @@
}
static SDL_bool
-HIDAPI_DriverPS4_Update(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device)
{
- SDL_DriverPS4_Context *ctx = (SDL_DriverPS4_Context *)context;
+ SDL_DriverPS4_Context *ctx = (SDL_DriverPS4_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
Uint8 data[USB_PACKET_LENGTH];
int size;
- while ((size = hid_read_timeout(dev, data, sizeof(data), 0)) > 0) {
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
+ }
+ if (!joystick) {
+ return SDL_FALSE;
+ }
+
+ while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
switch (data[0]) {
case k_EPS4ReportIdUsbState:
- HIDAPI_DriverPS4_HandleStatePacket(joystick, dev, ctx, (PS4StatePacket_t *)&data[1]);
+ HIDAPI_DriverPS4_HandleStatePacket(joystick, device->dev, ctx, (PS4StatePacket_t *)&data[1]);
break;
case k_EPS4ReportIdBluetoothState:
/* Bluetooth state packets have two additional bytes at the beginning */
- HIDAPI_DriverPS4_HandleStatePacket(joystick, dev, ctx, (PS4StatePacket_t *)&data[3]);
+ HIDAPI_DriverPS4_HandleStatePacket(joystick, device->dev, ctx, (PS4StatePacket_t *)&data[3]);
break;
default:
#ifdef DEBUG_JOYSTICK
@@ -532,22 +494,28 @@
}
}
- if (ctx->rumble_expiration) {
- Uint32 now = SDL_GetTicks();
- if (SDL_TICKS_PASSED(now, ctx->rumble_expiration)) {
- HIDAPI_DriverPS4_Rumble(joystick, dev, context, 0, 0, 0);
- }
+ if (size < 0) {
+ /* Read error, device is disconnected */
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
}
-
return (size >= 0);
}
static void
-HIDAPI_DriverPS4_Quit(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverPS4_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
{
- SDL_free(context);
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
}
+static void
+HIDAPI_DriverPS4_FreeDevice(SDL_HIDAPI_Device *device)
+{
+}
+
SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverPS4 =
{
SDL_HINT_JOYSTICK_HIDAPI_PS4,
@@ -554,10 +522,14 @@
SDL_TRUE,
HIDAPI_DriverPS4_IsSupportedDevice,
HIDAPI_DriverPS4_GetDeviceName,
- HIDAPI_DriverPS4_Init,
- HIDAPI_DriverPS4_Rumble,
- HIDAPI_DriverPS4_Update,
- HIDAPI_DriverPS4_Quit
+ HIDAPI_DriverPS4_InitDevice,
+ HIDAPI_DriverPS4_GetDevicePlayerIndex,
+ HIDAPI_DriverPS4_SetDevicePlayerIndex,
+ HIDAPI_DriverPS4_UpdateDevice,
+ HIDAPI_DriverPS4_OpenJoystick,
+ HIDAPI_DriverPS4_RumbleJoystick,
+ HIDAPI_DriverPS4_CloseJoystick,
+ HIDAPI_DriverPS4_FreeDevice
};
#endif /* SDL_JOYSTICK_HIDAPI_PS4 */
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_rumble.c
@@ -1,0 +1,253 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+/* Handle rumble on a separate thread so it doesn't block the application */
+
+#include "SDL_assert.h"
+#include "SDL_thread.h"
+#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
+#include "../../thread/SDL_systhread.h"
+
+
+typedef struct SDL_HIDAPI_RumbleRequest
+{
+ SDL_HIDAPI_Device *device;
+ Uint8 data[2*USB_PACKET_LENGTH]; /* need enough space for the biggest report: dualshock4 is 78 bytes */
+ int size;
+ struct SDL_HIDAPI_RumbleRequest *prev;
+
+} SDL_HIDAPI_RumbleRequest;
+
+typedef struct SDL_HIDAPI_RumbleContext
+{
+ SDL_atomic_t initialized;
+ SDL_atomic_t running;
+ SDL_Thread *thread;
+ SDL_mutex *lock;
+ SDL_sem *request_sem;
+ SDL_HIDAPI_RumbleRequest *requests_head;
+ SDL_HIDAPI_RumbleRequest *requests_tail;
+} SDL_HIDAPI_RumbleContext;
+
+static SDL_HIDAPI_RumbleContext rumble_context;
+
+static int SDL_HIDAPI_RumbleThread(void *data)
+{
+ SDL_HIDAPI_RumbleContext *ctx = (SDL_HIDAPI_RumbleContext *)data;
+
+ SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH);
+
+ while (SDL_AtomicGet(&ctx->running)) {
+ SDL_HIDAPI_RumbleRequest *request = NULL;
+
+ SDL_SemWait(ctx->request_sem);
+
+ SDL_LockMutex(ctx->lock);
+ request = ctx->requests_tail;
+ if (request) {
+ if (request == ctx->requests_head) {
+ ctx->requests_head = NULL;
+ }
+ ctx->requests_tail = request->prev;
+ }
+ SDL_UnlockMutex(ctx->lock);
+
+ if (request) {
+ SDL_LockMutex(request->device->dev_lock);
+ if (request->device->dev) {
+ hid_write( request->device->dev, request->data, request->size );
+ }
+ SDL_UnlockMutex(request->device->dev_lock);
+ (void)SDL_AtomicDecRef(&request->device->rumble_pending);
+ SDL_free(request);
+ }
+ }
+ return 0;
+}
+
+static void
+SDL_HIDAPI_StopRumbleThread(SDL_HIDAPI_RumbleContext *ctx)
+{
+ SDL_AtomicSet(&ctx->running, SDL_FALSE);
+
+ if (ctx->thread) {
+ int result;
+
+ SDL_SemPost(ctx->request_sem);
+ SDL_WaitThread(ctx->thread, &result);
+ ctx->thread = NULL;
+ }
+
+ /* This should always be called with an empty queue */
+ SDL_assert(!ctx->requests_head);
+ SDL_assert(!ctx->requests_tail);
+
+ if (ctx->request_sem) {
+ SDL_DestroySemaphore(ctx->request_sem);
+ ctx->request_sem = NULL;
+ }
+
+ if (ctx->lock) {
+ SDL_DestroyMutex(ctx->lock);
+ ctx->lock = NULL;
+ }
+
+ SDL_AtomicSet(&ctx->initialized, SDL_FALSE);
+}
+
+static int
+SDL_HIDAPI_StartRumbleThread(SDL_HIDAPI_RumbleContext *ctx)
+{
+ ctx->lock = SDL_CreateMutex();
+ if (!ctx->lock) {
+ SDL_HIDAPI_StopRumbleThread(ctx);
+ return -1;
+ }
+
+ ctx->request_sem = SDL_CreateSemaphore(0);
+ if (!ctx->request_sem) {
+ SDL_HIDAPI_StopRumbleThread(ctx);
+ return -1;
+ }
+
+ SDL_AtomicSet(&ctx->running, SDL_TRUE);
+ ctx->thread = SDL_CreateThreadInternal(SDL_HIDAPI_RumbleThread, "HIDAPI Rumble", 0, ctx);
+ if (!ctx->thread) {
+ SDL_HIDAPI_StopRumbleThread(ctx);
+ return -1;
+ }
+ return 0;
+}
+
+int SDL_HIDAPI_LockRumble(void)
+{
+ SDL_HIDAPI_RumbleContext *ctx = &rumble_context;
+
+ if (SDL_AtomicCAS(&ctx->initialized, SDL_FALSE, SDL_TRUE)) {
+ if (SDL_HIDAPI_StartRumbleThread(ctx) < 0) {
+ return -1;
+ }
+ }
+
+ return SDL_LockMutex(ctx->lock);
+}
+
+SDL_bool SDL_HIDAPI_GetPendingRumbleLocked(SDL_HIDAPI_Device *device, Uint8 **data, int **size, int *maximum_size)
+{
+ SDL_HIDAPI_RumbleContext *ctx = &rumble_context;
+ SDL_HIDAPI_RumbleRequest *request;
+
+ for (request = ctx->requests_tail; request; request = request->prev) {
+ if (request->device == device) {
+ *data = request->data;
+ *size = &request->size;
+ *maximum_size = sizeof(request->data);
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
+}
+
+int SDL_HIDAPI_SendRumbleAndUnlock(SDL_HIDAPI_Device *device, const Uint8 *data, int size)
+{
+ SDL_HIDAPI_RumbleContext *ctx = &rumble_context;
+ SDL_HIDAPI_RumbleRequest *request;
+
+ if (size > sizeof(request->data)) {
+ SDL_HIDAPI_UnlockRumble();
+ return SDL_SetError("Couldn't send rumble, size %d is greater than %d", size, (int)sizeof(request->data));
+ }
+
+ request = (SDL_HIDAPI_RumbleRequest *)SDL_calloc(1, sizeof(*request));
+ if (!request) {
+ SDL_HIDAPI_UnlockRumble();
+ return SDL_OutOfMemory();
+ }
+ request->device = device;
+ SDL_memcpy(request->data, data, size);
+ request->size = size;
+
+ SDL_AtomicIncRef(&device->rumble_pending);
+
+ if (ctx->requests_head) {
+ ctx->requests_head->prev = request;
+ } else {
+ ctx->requests_tail = request;
+ }
+ ctx->requests_head = request;
+
+ /* Make sure we unlock before posting the semaphore so the rumble thread can run immediately */
+ SDL_HIDAPI_UnlockRumble();
+
+ SDL_SemPost(ctx->request_sem);
+
+ return size;
+}
+
+void SDL_HIDAPI_UnlockRumble(void)
+{
+ SDL_HIDAPI_RumbleContext *ctx = &rumble_context;
+
+ SDL_UnlockMutex(ctx->lock);
+}
+
+int SDL_HIDAPI_SendRumble(SDL_HIDAPI_Device *device, const Uint8 *data, int size)
+{
+ Uint8 *pending_data;
+ int *pending_size;
+ int maximum_size;
+
+ if (SDL_HIDAPI_LockRumble() < 0) {
+ return -1;
+ }
+
+ /* check if there is a pending request for the device and update it */
+ if (SDL_HIDAPI_GetPendingRumbleLocked(device, &pending_data, &pending_size, &maximum_size)) {
+ if (size > maximum_size) {
+ SDL_HIDAPI_UnlockRumble();
+ return SDL_SetError("Couldn't send rumble, size %d is greater than %d", size, maximum_size);
+ }
+
+ SDL_memcpy(pending_data, data, size);
+ *pending_size = size;
+ SDL_HIDAPI_UnlockRumble();
+ return size;
+ }
+
+ return SDL_HIDAPI_SendRumbleAndUnlock(device, data, size);
+}
+
+void SDL_HIDAPI_QuitRumble(void)
+{
+ SDL_HIDAPI_RumbleContext *ctx = &rumble_context;
+
+ if (SDL_AtomicGet(&ctx->running)) {
+ SDL_HIDAPI_StopRumbleThread(ctx);
+ }
+}
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_rumble.h
@@ -1,0 +1,39 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+/* Handle rumble on a separate thread so it doesn't block the application */
+
+/* Advanced API */
+int SDL_HIDAPI_LockRumble(void);
+SDL_bool SDL_HIDAPI_GetPendingRumbleLocked(SDL_HIDAPI_Device *device, Uint8 **data, int **size, int *maximum_size);
+int SDL_HIDAPI_SendRumbleAndUnlock(SDL_HIDAPI_Device *device, const Uint8 *data, int size);
+void SDL_HIDAPI_UnlockRumble(void);
+
+/* Simple API, will replace any pending rumble with the new data */
+int SDL_HIDAPI_SendRumble(SDL_HIDAPI_Device *device, const Uint8 *data, int size);
+void SDL_HIDAPI_QuitRumble(void);
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_steam.c
@@ -1,0 +1,1176 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+#include "SDL_hints.h"
+#include "SDL_log.h"
+#include "SDL_events.h"
+#include "SDL_timer.h"
+#include "SDL_joystick.h"
+#include "SDL_gamecontroller.h"
+#include "../SDL_sysjoystick.h"
+#include "SDL_hidapijoystick_c.h"
+
+
+
+#ifdef SDL_JOYSTICK_HIDAPI_STEAM
+
+/*****************************************************************************************************/
+
+#include <stdint.h>
+
+typedef enum
+{
+ false,
+ true
+} bool;
+
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+
+#include "steam/controller_constants.h"
+#include "steam/controller_structs.h"
+
+typedef struct SteamControllerStateInternal_t
+{
+ // Controller Type for this Controller State
+ uint32 eControllerType;
+
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // bit flags for each of the buttons
+ uint64 ulButtons;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+ // Center pad coordinates
+ short sCenterPadX;
+ short sCenterPadY;
+
+ // Left analog stick coordinates
+ short sLeftStickX;
+ short sLeftStickY;
+
+ // Right analog stick coordinates
+ short sRightStickX;
+ short sRightStickY;
+
+ unsigned short sTriggerL;
+ unsigned short sTriggerR;
+
+ short sAccelX;
+ short sAccelY;
+ short sAccelZ;
+
+ short sGyroX;
+ short sGyroY;
+ short sGyroZ;
+
+ float sGyroQuatW;
+ float sGyroQuatX;
+ float sGyroQuatY;
+ float sGyroQuatZ;
+
+ short sGyroSteeringAngle;
+
+ unsigned short sBatteryLevel;
+
+ // Pressure sensor data.
+ unsigned short sPressurePadLeft;
+ unsigned short sPressurePadRight;
+
+ unsigned short sPressureBumperLeft;
+ unsigned short sPressureBumperRight;
+
+ // Internal state data
+ short sPrevLeftPad[2];
+ short sPrevLeftStick[2];
+} SteamControllerStateInternal_t;
+
+
+/* Defines for ulButtons in SteamControllerStateInternal_t */
+#define STEAM_RIGHT_TRIGGER_MASK 0x00000001
+#define STEAM_LEFT_TRIGGER_MASK 0x00000002
+#define STEAM_RIGHT_BUMPER_MASK 0x00000004
+#define STEAM_LEFT_BUMPER_MASK 0x00000008
+#define STEAM_BUTTON_0_MASK 0x00000010 /* Y */
+#define STEAM_BUTTON_1_MASK 0x00000020 /* B */
+#define STEAM_BUTTON_2_MASK 0x00000040 /* X */
+#define STEAM_BUTTON_3_MASK 0x00000080 /* A */
+#define STEAM_TOUCH_0_MASK 0x00000100 /* DPAD UP */
+#define STEAM_TOUCH_1_MASK 0x00000200 /* DPAD RIGHT */
+#define STEAM_TOUCH_2_MASK 0x00000400 /* DPAD LEFT */
+#define STEAM_TOUCH_3_MASK 0x00000800 /* DPAD DOWN */
+#define STEAM_BUTTON_MENU_MASK 0x00001000 /* SELECT */
+#define STEAM_BUTTON_STEAM_MASK 0x00002000 /* GUIDE */
+#define STEAM_BUTTON_ESCAPE_MASK 0x00004000 /* START */
+#define STEAM_BUTTON_BACK_LEFT_MASK 0x00008000
+#define STEAM_BUTTON_BACK_RIGHT_MASK 0x00010000
+#define STEAM_BUTTON_LEFTPAD_CLICKED_MASK 0x00020000
+#define STEAM_BUTTON_RIGHTPAD_CLICKED_MASK 0x00040000
+#define STEAM_LEFTPAD_FINGERDOWN_MASK 0x00080000
+#define STEAM_RIGHTPAD_FINGERDOWN_MASK 0x00100000
+#define STEAM_JOYSTICK_BUTTON_MASK 0x00400000
+#define STEAM_LEFTPAD_AND_JOYSTICK_MASK 0x00800000
+
+
+// Look for report version 0x0001, type WIRELESS (3), length >= 1 byte
+#define D0G_IS_VALID_WIRELESS_EVENT(data, len) ((len) >= 5 && (data)[0] == 1 && (data)[1] == 0 && (data)[2] == 3 && (data)[3] >= 1)
+#define D0G_GET_WIRELESS_EVENT_TYPE(data) ((data)[4])
+#define D0G_WIRELESS_DISCONNECTED 1
+#define D0G_WIRELESS_ESTABLISHED 2
+#define D0G_WIRELESS_NEWLYPAIRED 3
+
+#define D0G_IS_WIRELESS_DISCONNECT(data, len) ( D0G_IS_VALID_WIRELESS_EVENT(data,len) && D0G_GET_WIRELESS_EVENT_TYPE(data) == D0G_WIRELESS_DISCONNECTED )
+
+#define MAX_REPORT_SEGMENT_PAYLOAD_SIZE 18
+/*
+ * SteamControllerPacketAssembler has to be used when reading output repots from controllers.
+ */
+typedef struct
+{
+ uint8_t uBuffer[ MAX_REPORT_SEGMENT_PAYLOAD_SIZE * 8 + 1 ];
+ int nExpectedSegmentNumber;
+ bool bIsBle;
+} SteamControllerPacketAssembler;
+
+
+#undef clamp
+#define clamp(val, min, max) (((val) > (max)) ? (max) : (((val) < (min)) ? (min) : (val)))
+
+#undef offsetof
+#define offsetof(s,m) (size_t)&(((s *)0)->m)
+
+#ifdef DEBUG_STEAM_CONTROLLER
+#define DPRINTF(format, ...) printf(format, ##__VA_ARGS__)
+#define HEXDUMP(ptr, len) hexdump(ptr, len)
+#else
+#define DPRINTF(format, ...)
+#define HEXDUMP(ptr, len)
+#endif
+#define printf SDL_Log
+
+#define MAX_REPORT_SEGMENT_SIZE ( MAX_REPORT_SEGMENT_PAYLOAD_SIZE + 2 )
+#define CALC_REPORT_SEGMENT_NUM(index) ( ( index / MAX_REPORT_SEGMENT_PAYLOAD_SIZE ) & 0x07 )
+#define REPORT_SEGMENT_DATA_FLAG 0x80
+#define REPORT_SEGMENT_LAST_FLAG 0x40
+#define BLE_REPORT_NUMBER 0x03
+
+#define STEAMCONTROLLER_TRIGGER_MAX_ANALOG 26000
+
+// Enable mouse mode when using the Steam Controller locally
+#undef ENABLE_MOUSE_MODE
+
+
+// Wireless firmware quirk: the firmware intentionally signals "failure" when performing
+// SET_FEATURE / GET_FEATURE when it actually means "pending radio round-trip". The only
+// way to make SET_FEATURE / GET_FEATURE work is to loop several times with a sleep. If
+// it takes more than 50ms to get the response for SET_FEATURE / GET_FEATURE, we assume
+// that the controller has failed.
+#define RADIO_WORKAROUND_SLEEP_ATTEMPTS 50
+#define RADIO_WORKAROUND_SLEEP_DURATION_US 500
+
+// This was defined by experimentation. 2000 seemed to work but to give that extra bit of margin, set to 3ms.
+#define CONTROLLER_CONFIGURATION_DELAY_US 3000
+
+static uint8_t GetSegmentHeader( int nSegmentNumber, bool bLastPacket )
+{
+ uint8_t header = REPORT_SEGMENT_DATA_FLAG;
+ header |= nSegmentNumber;
+ if ( bLastPacket )
+ header |= REPORT_SEGMENT_LAST_FLAG;
+
+ return header;
+}
+
+static void hexdump( const uint8_t *ptr, int len )
+{
+ int i;
+ for ( i = 0; i < len ; ++i )
+ printf("%02x ", ptr[i]);
+ printf("\n");
+}
+
+static void ResetSteamControllerPacketAssembler( SteamControllerPacketAssembler *pAssembler )
+{
+ memset( pAssembler->uBuffer, 0, sizeof( pAssembler->uBuffer ) );
+ pAssembler->nExpectedSegmentNumber = 0;
+}
+
+static void InitializeSteamControllerPacketAssembler( SteamControllerPacketAssembler *pAssembler )
+{
+ /* We only support BLE devices right now */
+ pAssembler->bIsBle = true;
+ ResetSteamControllerPacketAssembler( pAssembler );
+}
+
+// Returns:
+// <0 on error
+// 0 on not ready
+// Complete packet size on completion
+static int WriteSegmentToSteamControllerPacketAssembler( SteamControllerPacketAssembler *pAssembler, const uint8_t *pSegment, int nSegmentLength )
+{
+ if ( pAssembler->bIsBle )
+ {
+ HEXDUMP( pSegment, nSegmentLength );
+
+ if ( pSegment[ 0 ] != BLE_REPORT_NUMBER )
+ {
+ // We may get keyboard/mouse input events until controller stops sending them
+ return 0;
+ }
+
+ if ( nSegmentLength != MAX_REPORT_SEGMENT_SIZE )
+ {
+ printf( "Bad segment size! %d\n", (int)nSegmentLength );
+ hexdump( pSegment, nSegmentLength );
+ ResetSteamControllerPacketAssembler( pAssembler );
+ return -1;
+ }
+
+ uint8_t uSegmentHeader = pSegment[ 1 ];
+ DPRINTF("GOT PACKET HEADER = 0x%x\n", uSegmentHeader);
+
+ if ( ( uSegmentHeader & REPORT_SEGMENT_DATA_FLAG ) == 0 )
+ {
+ // We get empty segments, just ignore them
+ return 0;
+ }
+
+ int nSegmentNumber = uSegmentHeader & 0x07;
+ if ( nSegmentNumber != pAssembler->nExpectedSegmentNumber )
+ {
+ ResetSteamControllerPacketAssembler( pAssembler );
+
+ if ( nSegmentNumber )
+ {
+ // This happens occasionally
+ DPRINTF("Bad segment number, got %d, expected %d\n",
+ nSegmentNumber, pAssembler->nExpectedSegmentNumber );
+ return -1;
+ }
+ }
+
+ memcpy( pAssembler->uBuffer + nSegmentNumber * MAX_REPORT_SEGMENT_PAYLOAD_SIZE,
+ pSegment + 2, // ignore header and report number
+ MAX_REPORT_SEGMENT_PAYLOAD_SIZE );
+
+ if ( uSegmentHeader & REPORT_SEGMENT_LAST_FLAG )
+ {
+ pAssembler->nExpectedSegmentNumber = 0;
+ return ( nSegmentNumber + 1 ) * MAX_REPORT_SEGMENT_PAYLOAD_SIZE;
+ }
+
+ pAssembler->nExpectedSegmentNumber++;
+ }
+ else
+ {
+ // Just pass through
+ memcpy( pAssembler->uBuffer,
+ pSegment,
+ nSegmentLength );
+ return nSegmentLength;
+ }
+
+ return 0;
+}
+
+#define BLE_MAX_READ_RETRIES 8
+
+static int SetFeatureReport( hid_device *dev, unsigned char uBuffer[65], int nActualDataLen )
+{
+ DPRINTF("SetFeatureReport %p %p %d\n", dev, uBuffer, nActualDataLen);
+ int nRet = -1;
+ bool bBle = true; // only wireless/BLE for now, though macOS could do wired in the future
+
+ if ( bBle )
+ {
+ if ( nActualDataLen < 1 )
+ return -1;
+
+ int nSegmentNumber = 0;
+ uint8_t uPacketBuffer[ MAX_REPORT_SEGMENT_SIZE ];
+
+ // Skip report number in data
+ unsigned char *pBufferPtr = uBuffer + 1;
+ nActualDataLen--;
+
+ while ( nActualDataLen > 0 )
+ {
+ int nBytesInPacket = nActualDataLen > MAX_REPORT_SEGMENT_PAYLOAD_SIZE ? MAX_REPORT_SEGMENT_PAYLOAD_SIZE : nActualDataLen;
+
+ nActualDataLen -= nBytesInPacket;
+
+ // Construct packet
+ memset( uPacketBuffer, 0, sizeof( uPacketBuffer ) );
+ uPacketBuffer[ 0 ] = BLE_REPORT_NUMBER;
+ uPacketBuffer[ 1 ] = GetSegmentHeader( nSegmentNumber, nActualDataLen == 0 );
+ memcpy( &uPacketBuffer[ 2 ], pBufferPtr, nBytesInPacket );
+
+ pBufferPtr += nBytesInPacket;
+ nSegmentNumber++;
+
+ nRet = hid_send_feature_report( dev, uPacketBuffer, sizeof( uPacketBuffer ) );
+ DPRINTF("SetFeatureReport() ret = %d\n", nRet);
+ }
+ }
+
+ return nRet;
+}
+
+static int GetFeatureReport( hid_device *dev, unsigned char uBuffer[65] )
+{
+ DPRINTF("GetFeatureReport( %p %p )\n", dev, uBuffer );
+ int nRet = -1;
+ bool bBle = true;
+
+ if ( bBle )
+ {
+ SteamControllerPacketAssembler assembler;
+ InitializeSteamControllerPacketAssembler( &assembler );
+
+ int nRetries = 0;
+ uint8_t uSegmentBuffer[ MAX_REPORT_SEGMENT_SIZE ];
+ while( nRetries < BLE_MAX_READ_RETRIES )
+ {
+ memset( uSegmentBuffer, 0, sizeof( uSegmentBuffer ) );
+ uSegmentBuffer[ 0 ] = BLE_REPORT_NUMBER;
+ nRet = hid_get_feature_report( dev, uSegmentBuffer, sizeof( uSegmentBuffer ) );
+ DPRINTF( "GetFeatureReport ble ret=%d\n", nRet );
+ HEXDUMP( uSegmentBuffer, nRet );
+
+ // Zero retry counter if we got data
+ if ( nRet > 2 && ( uSegmentBuffer[ 1 ] & REPORT_SEGMENT_DATA_FLAG ) )
+ nRetries = 0;
+ else
+ nRetries++;
+
+ if ( nRet > 0 )
+ {
+ int nPacketLength = WriteSegmentToSteamControllerPacketAssembler( &assembler,
+ uSegmentBuffer,
+ nRet );
+
+ if ( nPacketLength > 0 && nPacketLength < 65 )
+ {
+ // Leave space for "report number"
+ uBuffer[ 0 ] = 0;
+ memcpy( uBuffer + 1, assembler.uBuffer, nPacketLength );
+ return nPacketLength;
+ }
+ }
+
+
+ }
+ printf("Could not get a full ble packet after %d retries\n", nRetries );
+ return -1;
+ }
+
+ return nRet;
+}
+
+static int ReadResponse( hid_device *dev, uint8_t uBuffer[65], int nExpectedResponse )
+{
+ DPRINTF("ReadResponse( %p %p %d )\n", dev, uBuffer, nExpectedResponse );
+ int nRet = GetFeatureReport( dev, uBuffer );
+
+ if ( nRet < 0 )
+ return nRet;
+
+ DPRINTF("ReadResponse got %d bytes of data: ", nRet );
+ HEXDUMP( uBuffer, nRet );
+
+ if ( uBuffer[1] != nExpectedResponse )
+ return -1;
+
+ return nRet;
+}
+
+//---------------------------------------------------------------------------
+// Reset steam controller (unmap buttons and pads) and re-fetch capability bits
+//---------------------------------------------------------------------------
+static bool ResetSteamController( hid_device *dev, bool bSuppressErrorSpew )
+{
+ DPRINTF( "ResetSteamController hid=%p\n", dev );
+ // Firmware quirk: Set Feature and Get Feature requests always require a 65-byte buffer.
+ unsigned char buf[65];
+ int res = -1;
+
+ buf[0] = 0;
+ buf[1] = ID_GET_ATTRIBUTES_VALUES;
+ res = SetFeatureReport( dev, buf, 2 );
+ if ( res < 0 )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "GET_ATTRIBUTES_VALUES failed for controller %p\n", dev );
+ return false;
+ }
+
+ // Retrieve GET_ATTRIBUTES_VALUES result
+ // Wireless controller endpoints without a connected controller will return nAttrs == 0
+ res = ReadResponse( dev, buf, ID_GET_ATTRIBUTES_VALUES );
+ if ( res < 0 || buf[1] != ID_GET_ATTRIBUTES_VALUES )
+ {
+ HEXDUMP(buf, res);
+ if ( !bSuppressErrorSpew )
+ printf( "Bad GET_ATTRIBUTES_VALUES response for controller %p\n", dev );
+ return false;
+ }
+
+ int nAttributesLength = buf[ 2 ];
+ if ( nAttributesLength > res )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "Bad GET_ATTRIBUTES_VALUES response for controller %p\n", dev );
+ return false;
+ }
+
+ // Clear digital button mappings
+ buf[0] = 0;
+ buf[1] = ID_CLEAR_DIGITAL_MAPPINGS;
+ res = SetFeatureReport( dev, buf, 2 );
+ if ( res < 0 )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "CLEAR_DIGITAL_MAPPINGS failed for controller %p\n", dev );
+ return false;
+ }
+
+ // Reset the default settings
+ memset( buf, 0, 65 );
+ buf[1] = ID_LOAD_DEFAULT_SETTINGS;
+ buf[2] = 0;
+ res = SetFeatureReport( dev, buf, 3 );
+ if ( res < 0 )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "LOAD_DEFAULT_SETTINGS failed for controller %p\n", dev );
+ return false;
+ }
+
+ // Apply custom settings - clear trackpad modes (cancel mouse emulation), etc
+ int nSettings = 0;
+#define ADD_SETTING(SETTING, VALUE) \
+buf[3+nSettings*3] = SETTING; \
+buf[3+nSettings*3+1] = ((uint16_t)VALUE)&0xFF; \
+buf[3+nSettings*3+2] = ((uint16_t)VALUE)>>8; \
+++nSettings;
+
+ memset( buf, 0, 65 );
+ buf[1] = ID_SET_SETTINGS_VALUES;
+ ADD_SETTING( SETTING_WIRELESS_PACKET_VERSION, 2 );
+ ADD_SETTING( SETTING_LEFT_TRACKPAD_MODE, TRACKPAD_NONE );
+#ifdef ENABLE_MOUSE_MODE
+ ADD_SETTING( SETTING_RIGHT_TRACKPAD_MODE, TRACKPAD_ABSOLUTE_MOUSE );
+ ADD_SETTING( SETTING_SMOOTH_ABSOLUTE_MOUSE, 1 );
+ ADD_SETTING( SETTING_MOMENTUM_MAXIMUM_VELOCITY, 20000 ); // [0-20000] default 8000
+ ADD_SETTING( SETTING_MOMENTUM_DECAY_AMMOUNT, 50 ); // [0-50] default 5
+#else
+ ADD_SETTING( SETTING_RIGHT_TRACKPAD_MODE, TRACKPAD_NONE );
+ ADD_SETTING( SETTING_SMOOTH_ABSOLUTE_MOUSE, 0 );
+#endif
+ buf[2] = nSettings*3;
+
+ res = SetFeatureReport( dev, buf, 3+nSettings*3 );
+ if ( res < 0 )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "SET_SETTINGS failed for controller %p\n", dev );
+ return false;
+ }
+
+#ifdef ENABLE_MOUSE_MODE
+ // Wait for ID_CLEAR_DIGITAL_MAPPINGS to be processed on the controller
+ bool bMappingsCleared = false;
+ int iRetry;
+ for ( iRetry = 0; iRetry < 2; ++iRetry )
+ {
+ memset( buf, 0, 65 );
+ buf[1] = ID_GET_DIGITAL_MAPPINGS;
+ buf[2] = 1; // one byte - requesting from index 0
+ buf[3] = 0;
+ res = SetFeatureReport( dev, buf, 4 );
+ if ( res < 0 )
+ {
+ printf( "GET_DIGITAL_MAPPINGS failed for controller %p\n", dev );
+ return false;
+ }
+
+ res = ReadResponse( dev, buf, ID_GET_DIGITAL_MAPPINGS );
+ if ( res < 0 || buf[1] != ID_GET_DIGITAL_MAPPINGS )
+ {
+ printf( "Bad GET_DIGITAL_MAPPINGS response for controller %p\n", dev );
+ return false;
+ }
+
+ // If the length of the digital mappings result is not 1 (index byte, no mappings) then clearing hasn't executed
+ if ( buf[2] == 1 && buf[3] == 0xFF )
+ {
+ bMappingsCleared = true;
+ break;
+ }
+ usleep( CONTROLLER_CONFIGURATION_DELAY_US );
+ }
+
+ if ( !bMappingsCleared && !bSuppressErrorSpew )
+ {
+ printf( "Warning: CLEAR_DIGITAL_MAPPINGS never completed for controller %p\n", dev );
+ }
+
+ // Set our new mappings
+ memset( buf, 0, 65 );
+ buf[1] = ID_SET_DIGITAL_MAPPINGS;
+ buf[2] = 6; // 2 settings x 3 bytes
+ buf[3] = IO_DIGITAL_BUTTON_RIGHT_TRIGGER;
+ buf[4] = DEVICE_MOUSE;
+ buf[5] = MOUSE_BTN_LEFT;
+ buf[6] = IO_DIGITAL_BUTTON_LEFT_TRIGGER;
+ buf[7] = DEVICE_MOUSE;
+ buf[8] = MOUSE_BTN_RIGHT;
+
+ res = SetFeatureReport( dev, buf, 9 );
+ if ( res < 0 )
+ {
+ if ( !bSuppressErrorSpew )
+ printf( "SET_DIGITAL_MAPPINGS failed for controller %p\n", dev );
+ return false;
+ }
+#endif // ENABLE_MOUSE_MODE
+
+ return true;
+}
+
+
+//---------------------------------------------------------------------------
+// Read from a Steam Controller
+//---------------------------------------------------------------------------
+static int ReadSteamController( hid_device *dev, uint8_t *pData, int nDataSize )
+{
+ memset( pData, 0, nDataSize );
+ pData[ 0 ] = BLE_REPORT_NUMBER; // hid_read will also overwrite this with the same value, 0x03
+ return hid_read( dev, pData, nDataSize );
+}
+
+
+//---------------------------------------------------------------------------
+// Close a Steam Controller
+//---------------------------------------------------------------------------
+static void CloseSteamController( hid_device *dev )
+{
+ // Switch the Steam Controller back to lizard mode so it works with the OS
+ unsigned char buf[65];
+ int nSettings = 0;
+
+ // Reset digital button mappings
+ memset( buf, 0, 65 );
+ buf[1] = ID_SET_DEFAULT_DIGITAL_MAPPINGS;
+ SetFeatureReport( dev, buf, 2 );
+
+ // Reset the default settings
+ memset( buf, 0, 65 );
+ buf[1] = ID_LOAD_DEFAULT_SETTINGS;
+ buf[2] = 0;
+ SetFeatureReport( dev, buf, 3 );
+
+ // Reset mouse mode for lizard mode
+ memset( buf, 0, 65 );
+ buf[1] = ID_SET_SETTINGS_VALUES;
+ ADD_SETTING( SETTING_RIGHT_TRACKPAD_MODE, TRACKPAD_ABSOLUTE_MOUSE );
+ buf[2] = nSettings*3;
+ SetFeatureReport( dev, buf, 3+nSettings*3 );
+}
+
+
+//---------------------------------------------------------------------------
+// Scale and clamp values to a range
+//---------------------------------------------------------------------------
+static float RemapValClamped( float val, float A, float B, float C, float D)
+{
+ if ( A == B )
+ {
+ return ( val - B ) >= 0.0f ? D : C;
+ }
+ else
+ {
+ float cVal = (val - A) / (B - A);
+ cVal = clamp( cVal, 0.0f, 1.0f );
+
+ return C + (D - C) * cVal;
+ }
+}
+
+
+//---------------------------------------------------------------------------
+// Rotate the pad coordinates
+//---------------------------------------------------------------------------
+static void RotatePad( int *pX, int *pY, float flAngleInRad )
+{
+ short int origX = *pX, origY = *pY;
+
+ *pX = (int)( SDL_cosf( flAngleInRad ) * origX - SDL_sinf( flAngleInRad ) * origY );
+ *pY = (int)( SDL_sinf( flAngleInRad ) * origX + SDL_cosf( flAngleInRad ) * origY );
+}
+static void RotatePadShort( short *pX, short *pY, float flAngleInRad )
+{
+ short int origX = *pX, origY = *pY;
+
+ *pX = (short)( SDL_cosf( flAngleInRad ) * origX - SDL_sinf( flAngleInRad ) * origY );
+ *pY = (short)( SDL_sinf( flAngleInRad ) * origX + SDL_cosf( flAngleInRad ) * origY );
+}
+
+
+//---------------------------------------------------------------------------
+// Format the first part of the state packet
+//---------------------------------------------------------------------------
+static void FormatStatePacketUntilGyro( SteamControllerStateInternal_t *pState, ValveControllerStatePacket_t *pStatePacket )
+{
+ memset(pState, 0, offsetof(SteamControllerStateInternal_t, sBatteryLevel));
+
+ //pState->eControllerType = m_eControllerType;
+ pState->eControllerType = 2; // k_eControllerType_SteamController;
+ pState->unPacketNum = pStatePacket->unPacketNum;
+
+ // We have a chunk of trigger data in the packet format here, so zero it out afterwards
+ memcpy(&pState->ulButtons, &pStatePacket->ButtonTriggerData.ulButtons, 8);
+ pState->ulButtons &= ~0xFFFF000000LL;
+
+ // The firmware uses this bit to tell us what kind of data is packed into the left two axises
+ if (pStatePacket->ButtonTriggerData.ulButtons & STEAM_LEFTPAD_FINGERDOWN_MASK)
+ {
+ // Finger-down bit not set; "left pad" is actually trackpad
+ pState->sLeftPadX = pState->sPrevLeftPad[0] = pStatePacket->sLeftPadX;
+ pState->sLeftPadY = pState->sPrevLeftPad[1] = pStatePacket->sLeftPadY;
+
+ if (pStatePacket->ButtonTriggerData.ulButtons & STEAM_LEFTPAD_AND_JOYSTICK_MASK)
+ {
+ // The controller is interleaving both stick and pad data, both are active
+ pState->sLeftStickX = pState->sPrevLeftStick[0];
+ pState->sLeftStickY = pState->sPrevLeftStick[1];
+ }
+ else
+ {
+ // The stick is not active
+ pState->sPrevLeftStick[0] = 0;
+ pState->sPrevLeftStick[1] = 0;
+ }
+ }
+ else
+ {
+ // Finger-down bit not set; "left pad" is actually joystick
+
+ // XXX there's a firmware bug where sometimes padX is 0 and padY is a large number (acutally the battery voltage)
+ // If that happens skip this packet and report last frames stick
+/*
+ if ( m_eControllerType == k_eControllerType_SteamControllerV2 && pStatePacket->sLeftPadY > 900 )
+ {
+ pState->sLeftStickX = pState->sPrevLeftStick[0];
+ pState->sLeftStickY = pState->sPrevLeftStick[1];
+ }
+ else
+*/
+ {
+ pState->sPrevLeftStick[0] = pState->sLeftStickX = pStatePacket->sLeftPadX;
+ pState->sPrevLeftStick[1] = pState->sLeftStickY = pStatePacket->sLeftPadY;
+ }
+/*
+ if (m_eControllerType == k_eControllerType_SteamControllerV2)
+ {
+ UpdateV2JoystickCap(&state);
+ }
+*/
+
+ if (pStatePacket->ButtonTriggerData.ulButtons & STEAM_LEFTPAD_AND_JOYSTICK_MASK)
+ {
+ // The controller is interleaving both stick and pad data, both are active
+ pState->sLeftPadX = pState->sPrevLeftPad[0];
+ pState->sLeftPadY = pState->sPrevLeftPad[1];
+ }
+ else
+ {
+ // The trackpad is not active
+ pState->sPrevLeftPad[0] = 0;
+ pState->sPrevLeftPad[1] = 0;
+
+ // Old controllers send trackpad click for joystick button when trackpad is not active
+ if (pState->ulButtons & STEAM_BUTTON_LEFTPAD_CLICKED_MASK)
+ {
+ pState->ulButtons &= ~STEAM_BUTTON_LEFTPAD_CLICKED_MASK;
+ pState->ulButtons |= STEAM_JOYSTICK_BUTTON_MASK;
+ }
+ }
+ }
+
+ // Fingerdown bit indicates if the packed left axis data was joystick or pad,
+ // but if we are interleaving both, the left finger is definitely on the pad.
+ if (pStatePacket->ButtonTriggerData.ulButtons & STEAM_LEFTPAD_AND_JOYSTICK_MASK)
+ pState->ulButtons |= STEAM_LEFTPAD_FINGERDOWN_MASK;
+
+ pState->sRightPadX = pStatePacket->sRightPadX;
+ pState->sRightPadY = pStatePacket->sRightPadY;
+
+ int nLeftPadX = pState->sLeftPadX;
+ int nLeftPadY = pState->sLeftPadY;
+ int nRightPadX = pState->sRightPadX;
+ int nRightPadY = pState->sRightPadY;
+
+ // 15 degrees in rad
+ const float flRotationAngle = 0.261799f;
+
+ RotatePad(&nLeftPadX, &nLeftPadY, -flRotationAngle);
+ RotatePad(&nRightPadX, &nRightPadY, flRotationAngle);
+
+ int nPadOffset;
+ if (pState->ulButtons & STEAM_LEFTPAD_FINGERDOWN_MASK)
+ nPadOffset = 1000;
+ else
+ nPadOffset = 0;
+
+ pState->sLeftPadX = clamp(nLeftPadX + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16);
+ pState->sLeftPadY = clamp(nLeftPadY + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16);
+
+ nPadOffset = 0;
+ if (pState->ulButtons & STEAM_RIGHTPAD_FINGERDOWN_MASK)
+ nPadOffset = 1000;
+ else
+ nPadOffset = 0;
+
+ pState->sRightPadX = clamp(nRightPadX + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16);
+ pState->sRightPadY = clamp(nRightPadY + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16);
+
+ pState->sTriggerL = (unsigned short)RemapValClamped( (pStatePacket->ButtonTriggerData.Triggers.nLeft << 7) | pStatePacket->ButtonTriggerData.Triggers.nLeft, 0, STEAMCONTROLLER_TRIGGER_MAX_ANALOG, 0, SDL_MAX_SINT16 );
+ pState->sTriggerR = (unsigned short)RemapValClamped( (pStatePacket->ButtonTriggerData.Triggers.nRight << 7) | pStatePacket->ButtonTriggerData.Triggers.nRight, 0, STEAMCONTROLLER_TRIGGER_MAX_ANALOG, 0, SDL_MAX_SINT16 );
+}
+
+
+//---------------------------------------------------------------------------
+// Update Steam Controller state from a BLE data packet, returns true if it parsed data
+//---------------------------------------------------------------------------
+static bool UpdateBLESteamControllerState( const uint8_t *pData, int nDataSize, SteamControllerStateInternal_t *pState )
+{
+ const float flRotationAngle = 0.261799f;
+ uint32_t ucOptionDataMask;
+
+ pState->unPacketNum++;
+ ucOptionDataMask = ( *pData++ & 0xF0 );
+ ucOptionDataMask |= (uint32_t)(*pData++) << 8;
+ if ( ucOptionDataMask & k_EBLEButtonChunk1 )
+ {
+ memcpy( &pState->ulButtons, pData, 3 );
+ pData += 3;
+ }
+ if ( ucOptionDataMask & k_EBLEButtonChunk2 )
+ {
+ // The middle 2 bytes of the button bits over the wire are triggers when over the wire and non-SC buttons in the internal controller state packet
+ pState->sTriggerL = (unsigned short)RemapValClamped( ( pData[ 0 ] << 7 ) | pData[ 0 ], 0, STEAMCONTROLLER_TRIGGER_MAX_ANALOG, 0, SDL_MAX_SINT16 );
+ pState->sTriggerR = (unsigned short)RemapValClamped( ( pData[ 1 ] << 7 ) | pData[ 1 ], 0, STEAMCONTROLLER_TRIGGER_MAX_ANALOG, 0, SDL_MAX_SINT16 );
+ pData += 2;
+ }
+ if ( ucOptionDataMask & k_EBLEButtonChunk3 )
+ {
+ uint8_t *pButtonByte = (uint8_t *)&pState->ulButtons;
+ pButtonByte[ 5 ] = *pData++;
+ pButtonByte[ 6 ] = *pData++;
+ pButtonByte[ 7 ] = *pData++;
+ }
+ if ( ucOptionDataMask & k_EBLELeftJoystickChunk )
+ {
+ // This doesn't handle any of the special headcrab stuff for raw joystick which is OK for now since that FW doesn't support
+ // this protocol yet either
+ int nLength = sizeof( pState->sLeftStickX ) + sizeof( pState->sLeftStickY );
+ memcpy( &pState->sLeftStickX, pData, nLength );
+ pData += nLength;
+ }
+ if ( ucOptionDataMask & k_EBLELeftTrackpadChunk )
+ {
+ int nLength = sizeof( pState->sLeftPadX ) + sizeof( pState->sLeftPadY );
+ int nPadOffset;
+ memcpy( &pState->sLeftPadX, pData, nLength );
+ if ( pState->ulButtons & STEAM_LEFTPAD_FINGERDOWN_MASK )
+ nPadOffset = 1000;
+ else
+ nPadOffset = 0;
+
+ RotatePadShort( &pState->sLeftPadX, &pState->sLeftPadY, -flRotationAngle );
+ pState->sLeftPadX = clamp( pState->sLeftPadX + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16 );
+ pState->sLeftPadY = clamp( pState->sLeftPadY + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16 );
+ pData += nLength;
+ }
+ if ( ucOptionDataMask & k_EBLERightTrackpadChunk )
+ {
+ int nLength = sizeof( pState->sRightPadX ) + sizeof( pState->sRightPadY );
+ int nPadOffset = 0;
+
+ memcpy( &pState->sRightPadX, pData, nLength );
+
+ if ( pState->ulButtons & STEAM_RIGHTPAD_FINGERDOWN_MASK )
+ nPadOffset = 1000;
+ else
+ nPadOffset = 0;
+
+ RotatePadShort( &pState->sRightPadX, &pState->sRightPadY, flRotationAngle );
+ pState->sRightPadX = clamp( pState->sRightPadX + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16 );
+ pState->sRightPadY = clamp( pState->sRightPadY + nPadOffset, SDL_MIN_SINT16, SDL_MAX_SINT16 );
+ pData += nLength;
+ }
+ if ( ucOptionDataMask & k_EBLEIMUAccelChunk )
+ {
+ int nLength = sizeof( pState->sAccelX ) + sizeof( pState->sAccelY ) + sizeof( pState->sAccelZ );
+ memcpy( &pState->sAccelX, pData, nLength );
+ pData += nLength;
+ }
+ if ( ucOptionDataMask & k_EBLEIMUGyroChunk )
+ {
+ int nLength = sizeof( pState->sAccelX ) + sizeof( pState->sAccelY ) + sizeof( pState->sAccelZ );
+ memcpy( &pState->sGyroX, pData, nLength );
+ pData += nLength;
+ }
+ if ( ucOptionDataMask & k_EBLEIMUQuatChunk )
+ {
+ int nLength = sizeof( pState->sGyroQuatW ) + sizeof( pState->sGyroQuatX ) + sizeof( pState->sGyroQuatY ) + sizeof( pState->sGyroQuatZ );
+ memcpy( &pState->sGyroQuatW, pData, nLength );
+ pData += nLength;
+ }
+ return true;
+}
+
+
+//---------------------------------------------------------------------------
+// Update Steam Controller state from a data packet, returns true if it parsed data
+//---------------------------------------------------------------------------
+static bool UpdateSteamControllerState( const uint8_t *pData, int nDataSize, SteamControllerStateInternal_t *pState )
+{
+ ValveInReport_t *pInReport = (ValveInReport_t*)pData;
+
+ if ( pInReport->header.unReportVersion != k_ValveInReportMsgVersion )
+ {
+ if ( ( pData[ 0 ] & 0x0F ) == k_EBLEReportState )
+ {
+ return UpdateBLESteamControllerState( pData, nDataSize, pState );
+ }
+ return false;
+ }
+
+ if ( ( pInReport->header.ucType != ID_CONTROLLER_STATE ) &&
+ ( pInReport->header.ucType != ID_CONTROLLER_BLE_STATE ) )
+ {
+ return false;
+ }
+
+ if ( pInReport->header.ucType == ID_CONTROLLER_STATE )
+ {
+ ValveControllerStatePacket_t *pStatePacket = &pInReport->payload.controllerState;
+
+ // No new data to process; indicate that we received a state packet, but otherwise do nothing.
+ if ( pState->unPacketNum == pStatePacket->unPacketNum )
+ return true;
+
+ FormatStatePacketUntilGyro( pState, pStatePacket );
+
+ pState->sAccelX = pStatePacket->sAccelX;
+ pState->sAccelY = pStatePacket->sAccelY;
+ pState->sAccelZ = pStatePacket->sAccelZ;
+
+ pState->sGyroQuatW = pStatePacket->sGyroQuatW;
+ pState->sGyroQuatX = pStatePacket->sGyroQuatX;
+ pState->sGyroQuatY = pStatePacket->sGyroQuatY;
+ pState->sGyroQuatZ = pStatePacket->sGyroQuatZ;
+
+ pState->sGyroX = pStatePacket->sGyroX;
+ pState->sGyroY = pStatePacket->sGyroY;
+ pState->sGyroZ = pStatePacket->sGyroZ;
+
+ }
+ else if ( pInReport->header.ucType == ID_CONTROLLER_BLE_STATE )
+ {
+ ValveControllerBLEStatePacket_t *pBLEStatePacket = &pInReport->payload.controllerBLEState;
+ ValveControllerStatePacket_t *pStatePacket = &pInReport->payload.controllerState;
+
+ // No new data to process; indicate that we received a state packet, but otherwise do nothing.
+ if ( pState->unPacketNum == pStatePacket->unPacketNum )
+ return true;
+
+ FormatStatePacketUntilGyro( pState, pStatePacket );
+
+ switch ( pBLEStatePacket->ucGyroDataType )
+ {
+ case 1:
+ pState->sGyroQuatW = (( float ) pBLEStatePacket->sGyro[0]);
+ pState->sGyroQuatX = (( float ) pBLEStatePacket->sGyro[1]);
+ pState->sGyroQuatY = (( float ) pBLEStatePacket->sGyro[2]);
+ pState->sGyroQuatZ = (( float ) pBLEStatePacket->sGyro[3]);
+ break;
+
+ case 2:
+ pState->sAccelX = pBLEStatePacket->sGyro[0];
+ pState->sAccelY = pBLEStatePacket->sGyro[1];
+ pState->sAccelZ = pBLEStatePacket->sGyro[2];
+ break;
+
+ case 3:
+ pState->sGyroX = pBLEStatePacket->sGyro[0];
+ pState->sGyroY = pBLEStatePacket->sGyro[1];
+ pState->sGyroZ = pBLEStatePacket->sGyro[2];
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return true;
+}
+
+/*****************************************************************************************************/
+
+typedef struct {
+ SteamControllerPacketAssembler m_assembler;
+ SteamControllerStateInternal_t m_state;
+ SteamControllerStateInternal_t m_last_state;
+} SDL_DriverSteam_Context;
+
+
+static SDL_bool
+HIDAPI_DriverSteam_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
+{
+ return SDL_IsJoystickSteamController(vendor_id, product_id);
+}
+
+static const char *
+HIDAPI_DriverSteam_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
+{
+ return "Steam Controller";
+}
+
+static SDL_bool
+HIDAPI_DriverSteam_InitDevice(SDL_HIDAPI_Device *device)
+{
+ return HIDAPI_JoystickConnected(device, NULL);
+}
+
+static int
+HIDAPI_DriverSteam_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static void
+HIDAPI_DriverSteam_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+}
+
+static SDL_bool
+HIDAPI_DriverSteam_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+ SDL_DriverSteam_Context *ctx;
+
+ ctx = (SDL_DriverSteam_Context *)SDL_calloc(1, sizeof(*ctx));
+ if (!ctx) {
+ SDL_OutOfMemory();
+ goto error;
+ }
+ device->context = ctx;
+
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_SetError("Couldn't open %s", device->path);
+ goto error;
+ }
+
+ if (!ResetSteamController(device->dev, false)) {
+ goto error;
+ }
+
+ InitializeSteamControllerPacketAssembler(&ctx->m_assembler);
+
+ /* Initialize the joystick capabilities */
+ joystick->nbuttons = SDL_CONTROLLER_BUTTON_MAX;
+ joystick->naxes = SDL_CONTROLLER_AXIS_MAX;
+
+ return SDL_TRUE;
+
+error:
+ if (device->dev) {
+ hid_close(device->dev);
+ device->dev = NULL;
+ }
+ if (device->context) {
+ SDL_free(device->context);
+ device->context = NULL;
+ }
+ return SDL_FALSE;
+}
+
+static int
+HIDAPI_DriverSteam_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
+{
+ /* You should use the full Steam Input API for rumble support */
+ return SDL_Unsupported();
+}
+
+static SDL_bool
+HIDAPI_DriverSteam_UpdateDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverSteam_Context *ctx = (SDL_DriverSteam_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
+
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
+ }
+ if (!joystick) {
+ return SDL_FALSE;
+ }
+
+ for (;;)
+ {
+ uint8_t data[128];
+ int r, nPacketLength;
+ const Uint8 *pPacket;
+
+ r = ReadSteamController(device->dev, data, sizeof(data));
+ if (r == 0)
+ {
+ break;
+ }
+
+ nPacketLength = 0;
+ if (r > 0) {
+ nPacketLength = WriteSegmentToSteamControllerPacketAssembler(&ctx->m_assembler, data, r);
+ }
+
+ pPacket = ctx->m_assembler.uBuffer;
+
+ if (nPacketLength > 0 && UpdateSteamControllerState(pPacket, nPacketLength, &ctx->m_state)) {
+ if (ctx->m_state.ulButtons != ctx->m_last_state.ulButtons) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_3_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_1_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_2_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_0_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
+ (ctx->m_state.ulButtons & STEAM_LEFT_BUMPER_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
+ (ctx->m_state.ulButtons & STEAM_RIGHT_BUMPER_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_MENU_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_ESCAPE_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE,
+ (ctx->m_state.ulButtons & STEAM_BUTTON_STEAM_MASK) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK,
+ (ctx->m_state.ulButtons & STEAM_JOYSTICK_BUTTON_MASK) ? SDL_PRESSED : SDL_RELEASED);
+ }
+ {
+ /* Minimum distance from center of pad to register a direction */
+ const int kPadDeadZone = 10000;
+
+ /* Pad coordinates are like math grid coordinates: negative is bottom left */
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP,
+ (ctx->m_state.sLeftPadY > kPadDeadZone) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN,
+ (ctx->m_state.sLeftPadY < -kPadDeadZone) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT,
+ (ctx->m_state.sLeftPadX < -kPadDeadZone) ? SDL_PRESSED : SDL_RELEASED);
+
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
+ (ctx->m_state.sLeftPadX > kPadDeadZone) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, (int)ctx->m_state.sTriggerL * 2 - 32768);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, (int)ctx->m_state.sTriggerR * 2 - 32768);
+
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, ctx->m_state.sLeftStickX);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, ~ctx->m_state.sLeftStickY);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, ctx->m_state.sRightPadX);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, ~ctx->m_state.sRightPadY);
+
+ ctx->m_last_state = ctx->m_state;
+ }
+
+ if (r <= 0) {
+ /* Failed to read from controller */
+ HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
+ return SDL_FALSE;
+ }
+ }
+ return SDL_TRUE;
+}
+
+static void
+HIDAPI_DriverSteam_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+ CloseSteamController(device->dev);
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
+}
+
+static void
+HIDAPI_DriverSteam_FreeDevice(SDL_HIDAPI_Device *device)
+{
+}
+
+SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverSteam =
+{
+ SDL_HINT_JOYSTICK_HIDAPI_STEAM,
+ SDL_TRUE,
+ HIDAPI_DriverSteam_IsSupportedDevice,
+ HIDAPI_DriverSteam_GetDeviceName,
+ HIDAPI_DriverSteam_InitDevice,
+ HIDAPI_DriverSteam_GetDevicePlayerIndex,
+ HIDAPI_DriverSteam_SetDevicePlayerIndex,
+ HIDAPI_DriverSteam_UpdateDevice,
+ HIDAPI_DriverSteam_OpenJoystick,
+ HIDAPI_DriverSteam_RumbleJoystick,
+ HIDAPI_DriverSteam_CloseJoystick,
+ HIDAPI_DriverSteam_FreeDevice
+};
+
+#endif /* SDL_JOYSTICK_HIDAPI_STEAM */
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapi_switch.c
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_switch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -31,8 +31,10 @@
#include "SDL_timer.h"
#include "SDL_joystick.h"
#include "SDL_gamecontroller.h"
+#include "../../SDL_hints_c.h"
#include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
#ifdef SDL_JOYSTICK_HIDAPI_SWITCH
@@ -91,6 +93,14 @@
{
Uint8 rgucButtons[2];
Uint8 ucStickHat;
+ Uint8 rgucJoystickLeft[2];
+ Uint8 rgucJoystickRight[2];
+} SwitchInputOnlyControllerStatePacket_t;
+
+typedef struct
+{
+ Uint8 rgucButtons[2];
+ Uint8 ucStickHat;
Sint16 sJoystickLeft[2];
Sint16 sJoystickRight[2];
} SwitchSimpleStatePacket_t;
@@ -135,11 +145,11 @@
#define k_unSubcommandDataBytes 35
union {
- Uint8 rgucSubcommandData[ k_unSubcommandDataBytes ];
+ Uint8 rgucSubcommandData[k_unSubcommandDataBytes];
struct {
SwitchSPIOpData_t opData;
- Uint8 rgucReadData[ k_unSubcommandDataBytes - sizeof(SwitchSPIOpData_t) ];
+ Uint8 rgucReadData[k_unSubcommandDataBytes - sizeof(SwitchSPIOpData_t)];
} spiReadData;
struct {
@@ -170,7 +180,7 @@
SwitchCommonOutputPacket_t commonData;
Uint8 ucSubcommandID;
- Uint8 rgucSubcommandData[ k_unSwitchOutputPacketDataLength - sizeof(SwitchCommonOutputPacket_t) - 1 ];
+ Uint8 rgucSubcommandData[k_unSwitchOutputPacketDataLength - sizeof(SwitchCommonOutputPacket_t) - 1];
} SwitchSubcommandOutputPacket_t;
typedef struct
@@ -178,17 +188,24 @@
Uint8 ucPacketType;
Uint8 ucProprietaryID;
- Uint8 rgucProprietaryData[ k_unSwitchOutputPacketDataLength - 1 - 1 ];
+ Uint8 rgucProprietaryData[k_unSwitchOutputPacketDataLength - 1 - 1];
} SwitchProprietaryOutputPacket_t;
#pragma pack()
typedef struct {
- hid_device *dev;
- SDL_bool m_bIsUsingBluetooth;
+ SDL_HIDAPI_Device *device;
+ SDL_bool m_bInputOnly;
+ SDL_bool m_bHasHomeLED;
+ SDL_bool m_bUsingBluetooth;
+ SDL_bool m_bIsGameCube;
+ SDL_bool m_bUseButtonLabels;
Uint8 m_nCommandNumber;
SwitchCommonOutputPacket_t m_RumblePacket;
- Uint32 m_nRumbleExpiration;
Uint8 m_rgucReadBuffer[k_unSwitchMaxOutputPacketLength];
+ SDL_bool m_bRumbleActive;
+ Uint32 m_unRumbleRefresh;
+
+ SwitchInputOnlyControllerStatePacket_t m_lastInputOnlyState;
SwitchSimpleStatePacket_t m_lastSimpleState;
SwitchStatePacket_t m_lastFullState;
@@ -209,10 +226,36 @@
} SDL_DriverSwitch_Context;
+static SDL_bool IsGameCubeFormFactor(int vendor_id, int product_id)
+{
+ static Uint32 gamecube_formfactor[] = {
+ MAKE_VIDPID(0x0e6f, 0x0185), /* PDP Wired Fight Pad Pro for Nintendo Switch */
+ MAKE_VIDPID(0x20d6, 0xa711), /* Core (Plus) Wired Controller */
+ };
+ Uint32 id = MAKE_VIDPID(vendor_id, product_id);
+ int i;
+
+ for (i = 0; i < SDL_arraysize(gamecube_formfactor); ++i) {
+ if (id == gamecube_formfactor[i]) {
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
+}
+
static SDL_bool
-HIDAPI_DriverSwitch_IsSupportedDevice(Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number)
+HIDAPI_DriverSwitch_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
{
- return SDL_IsJoystickNintendoSwitchPro(vendor_id, product_id);
+ /* The HORI Wireless Switch Pad enumerates as a HID device when connected via USB
+ with the same VID/PID as when connected over Bluetooth but doesn't actually
+ support communication over USB. The most reliable way to block this without allowing the
+ controller to continually attempt to reconnect is to filter it out by manufactuer/product string.
+ Note that the controller does have a different product string when connected over Bluetooth.
+ */
+ if (SDL_strcmp( name, "HORI Wireless Switch Pad" ) == 0) {
+ return SDL_FALSE;
+ }
+ return (type == SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO);
}
static const char *
@@ -219,20 +262,26 @@
HIDAPI_DriverSwitch_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
{
/* Give a user friendly name for this controller */
- if (SDL_IsJoystickNintendoSwitchPro(vendor_id, product_id)) {
- return "Nintendo Switch Pro Controller";
- }
- return NULL;
+ return "Nintendo Switch Pro Controller";
}
static int ReadInput(SDL_DriverSwitch_Context *ctx)
{
- return hid_read_timeout(ctx->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0);
+ /* Make sure we don't try to read at the same time a write is happening */
+ if (SDL_AtomicGet(&ctx->device->rumble_pending) > 0) {
+ return 0;
+ }
+
+ return hid_read_timeout(ctx->device->dev, ctx->m_rgucReadBuffer, sizeof(ctx->m_rgucReadBuffer), 0);
}
-static int WriteOutput(SDL_DriverSwitch_Context *ctx, Uint8 *data, int size)
+static int WriteOutput(SDL_DriverSwitch_Context *ctx, const Uint8 *data, int size)
{
- return hid_write(ctx->dev, data, size);
+ /* Use the rumble thread for general asynchronous writes */
+ if (SDL_HIDAPI_LockRumble() < 0) {
+ return -1;
+ }
+ return SDL_HIDAPI_SendRumbleAndUnlock(ctx->device, data, size);
}
static SwitchSubcommandInputPacket_t *ReadSubcommandReply(SDL_DriverSwitch_Context *ctx, ESwitchSubcommandIDs expectedID)
@@ -245,7 +294,7 @@
while ((nRead = ReadInput(ctx)) != -1) {
if (nRead > 0) {
if (ctx->m_rgucReadBuffer[0] == k_eSwitchInputReportIDs_SubcommandReply) {
- SwitchSubcommandInputPacket_t *reply = (SwitchSubcommandInputPacket_t *)&ctx->m_rgucReadBuffer[ 1 ];
+ SwitchSubcommandInputPacket_t *reply = (SwitchSubcommandInputPacket_t *)&ctx->m_rgucReadBuffer[1];
if (reply->ucSubcommandID == expectedID && (reply->ucSubcommandAck & 0x80)) {
return reply;
}
@@ -270,7 +319,7 @@
int nRead = 0;
while ((nRead = ReadInput(ctx)) != -1) {
if (nRead > 0) {
- if (ctx->m_rgucReadBuffer[0] == k_eSwitchInputReportIDs_CommandAck && ctx->m_rgucReadBuffer[ 1 ] == expectedID) {
+ if (ctx->m_rgucReadBuffer[0] == k_eSwitchInputReportIDs_CommandAck && ctx->m_rgucReadBuffer[1] == expectedID) {
return SDL_TRUE;
}
} else {
@@ -302,7 +351,7 @@
static SDL_bool WritePacket(SDL_DriverSwitch_Context *ctx, void *pBuf, Uint8 ucLen)
{
Uint8 rgucBuf[k_unSwitchMaxOutputPacketLength];
- const size_t unWriteSize = ctx->m_bIsUsingBluetooth ? k_unSwitchBluetoothPacketLength : k_unSwitchUSBPacketLength;
+ const size_t unWriteSize = ctx->m_bUsingBluetooth ? k_unSwitchBluetoothPacketLength : k_unSwitchUSBPacketLength;
if (ucLen > k_unSwitchOutputPacketDataLength) {
return SDL_FALSE;
@@ -352,7 +401,9 @@
packet.ucPacketType = k_eSwitchOutputReportIDs_Proprietary;
packet.ucProprietaryID = ucCommand;
- SDL_memcpy(packet.rgucProprietaryData, pBuf, ucLen);
+ if (pBuf) {
+ SDL_memcpy(packet.rgucProprietaryData, pBuf, ucLen);
+ }
if (!WritePacket(ctx, &packet, sizeof(packet))) {
continue;
@@ -403,6 +454,16 @@
ctx->m_RumblePacket.ucPacketNumber = ctx->m_nCommandNumber;
ctx->m_nCommandNumber = (ctx->m_nCommandNumber + 1) & 0xF;
+ /* Refresh the rumble state periodically */
+ if (ctx->m_bRumbleActive) {
+ ctx->m_unRumbleRefresh = SDL_GetTicks() + 30;
+ if (!ctx->m_unRumbleRefresh) {
+ ctx->m_unRumbleRefresh = 1;
+ }
+ } else {
+ ctx->m_unRumbleRefresh = 0;
+ }
+
return WritePacket(ctx, (Uint8 *)&ctx->m_RumblePacket, sizeof(ctx->m_RumblePacket));
}
@@ -417,7 +478,8 @@
return SDL_FALSE;
}
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_HighSpeed, NULL, 0, SDL_TRUE)) {
- return SDL_FALSE;
+ /* The 8BitDo M30 and SF30 Pro don't respond to this command, but otherwise work correctly */
+ /*return SDL_FALSE;*/
}
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_Handshake, NULL, 0, SDL_TRUE)) {
return SDL_FALSE;
@@ -515,7 +577,7 @@
}
}
- if (ctx->m_bIsUsingBluetooth) {
+ if (ctx->m_bUsingBluetooth) {
for (stick = 0; stick < 2; ++stick) {
for(axis = 0; axis < 2; ++axis) {
ctx->m_StickExtents[stick].axis[axis].sMin = (Sint16)(SDL_MIN_SINT16 * 0.5f);
@@ -569,9 +631,63 @@
return ApplyStickCalibrationCentered(ctx, nStick, nAxis, sRawValue, ctx->m_StickCalData[nStick].axis[nAxis].sCenter);
}
+static void SDLCALL SDL_GameControllerButtonReportingHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
+{
+ SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)userdata;
+ ctx->m_bUseButtonLabels = SDL_GetStringBoolean(hint, SDL_TRUE);
+}
+
+static Uint8 RemapButton(SDL_DriverSwitch_Context *ctx, Uint8 button)
+{
+ if (!ctx->m_bUseButtonLabels) {
+ /* Use button positions */
+ if (ctx->m_bIsGameCube) {
+ switch (button) {
+ case SDL_CONTROLLER_BUTTON_B:
+ return SDL_CONTROLLER_BUTTON_X;
+ case SDL_CONTROLLER_BUTTON_X:
+ return SDL_CONTROLLER_BUTTON_B;
+ default:
+ break;
+ }
+ } else {
+ switch (button) {
+ case SDL_CONTROLLER_BUTTON_A:
+ return SDL_CONTROLLER_BUTTON_B;
+ case SDL_CONTROLLER_BUTTON_B:
+ return SDL_CONTROLLER_BUTTON_A;
+ case SDL_CONTROLLER_BUTTON_X:
+ return SDL_CONTROLLER_BUTTON_Y;
+ case SDL_CONTROLLER_BUTTON_Y:
+ return SDL_CONTROLLER_BUTTON_X;
+ default:
+ break;
+ }
+ }
+ }
+ return button;
+}
+
static SDL_bool
-HIDAPI_DriverSwitch_Init(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id, Uint16 product_id, void **context)
+HIDAPI_DriverSwitch_InitDevice(SDL_HIDAPI_Device *device)
{
+ return HIDAPI_JoystickConnected(device, NULL);
+}
+
+static int
+HIDAPI_DriverSwitch_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static void
+HIDAPI_DriverSwitch_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+}
+
+static SDL_bool
+HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
SDL_DriverSwitch_Context *ctx;
Uint8 input_mode;
@@ -578,59 +694,77 @@
ctx = (SDL_DriverSwitch_Context *)SDL_calloc(1, sizeof(*ctx));
if (!ctx) {
SDL_OutOfMemory();
- return SDL_FALSE;
+ goto error;
}
- ctx->dev = dev;
+ ctx->device = device;
+ device->context = ctx;
- *context = ctx;
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_SetError("Couldn't open %s", device->path);
+ goto error;
+ }
- /* Initialize rumble data */
- SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[0]);
- SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[1]);
+ /* Find out whether or not we can send output reports */
+ ctx->m_bInputOnly = SDL_IsJoystickNintendoSwitchProInputOnly(device->vendor_id, device->product_id);
+ if (!ctx->m_bInputOnly) {
+ /* The Power A Nintendo Switch Pro controllers don't have a Home LED */
+ ctx->m_bHasHomeLED = (device->vendor_id != 0 && device->product_id != 0) ? SDL_TRUE : SDL_FALSE;
- /* Try setting up USB mode, and if that fails we're using Bluetooth */
- if (!BTrySetupUSB(ctx)) {
- ctx->m_bIsUsingBluetooth = SDL_TRUE;
- }
+ /* Initialize rumble data */
+ SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[0]);
+ SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[1]);
- if (!LoadStickCalibration(ctx)) {
- SDL_SetError("Couldn't load stick calibration");
- SDL_free(ctx);
- return SDL_FALSE;
- }
+ /* Try setting up USB mode, and if that fails we're using Bluetooth */
+ if (!BTrySetupUSB(ctx)) {
+ ctx->m_bUsingBluetooth = SDL_TRUE;
+ }
- if (!SetVibrationEnabled(ctx, 1)) {
- SDL_SetError("Couldn't enable vibration");
- SDL_free(ctx);
- return SDL_FALSE;
- }
+ if (!LoadStickCalibration(ctx)) {
+ SDL_SetError("Couldn't load stick calibration");
+ goto error;
+ }
- /* Set the desired input mode */
- if (ctx->m_bIsUsingBluetooth) {
- input_mode = k_eSwitchInputReportIDs_SimpleControllerState;
- } else {
- input_mode = k_eSwitchInputReportIDs_FullControllerState;
- }
- if (!SetInputMode(ctx, input_mode)) {
- SDL_SetError("Couldn't set input mode");
- SDL_free(ctx);
- return SDL_FALSE;
- }
+ if (!SetVibrationEnabled(ctx, 1)) {
+ SDL_SetError("Couldn't enable vibration");
+ goto error;
+ }
- /* Start sending USB reports */
- if (!ctx->m_bIsUsingBluetooth) {
- /* ForceUSB doesn't generate an ACK, so don't wait for a reply */
- if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_ForceUSB, NULL, 0, SDL_FALSE)) {
- SDL_SetError("Couldn't start USB reports");
- SDL_free(ctx);
- return SDL_FALSE;
+ /* Set the desired input mode */
+ if (ctx->m_bUsingBluetooth) {
+ input_mode = k_eSwitchInputReportIDs_SimpleControllerState;
+ } else {
+ input_mode = k_eSwitchInputReportIDs_FullControllerState;
}
+ if (!SetInputMode(ctx, input_mode)) {
+ SDL_SetError("Couldn't set input mode");
+ goto error;
+ }
+
+ /* Start sending USB reports */
+ if (!ctx->m_bUsingBluetooth) {
+ /* ForceUSB doesn't generate an ACK, so don't wait for a reply */
+ if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_ForceUSB, NULL, 0, SDL_FALSE)) {
+ SDL_SetError("Couldn't start USB reports");
+ goto error;
+ }
+ }
+
+ /* Set the LED state */
+ if (ctx->m_bHasHomeLED) {
+ SetHomeLED(ctx, 100);
+ }
+ SetSlotLED(ctx, (joystick->instance_id % 4));
}
- /* Set the LED state */
- SetHomeLED(ctx, 100);
- SetSlotLED(ctx, (joystick->instance_id % 4));
+ if (IsGameCubeFormFactor(device->vendor_id, device->product_id)) {
+ /* This is a controller shaped like a GameCube controller, with a large central A button */
+ ctx->m_bIsGameCube = SDL_TRUE;
+ }
+ SDL_AddHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
+ SDL_GameControllerButtonReportingHintChanged, ctx);
+
/* Initialize the joystick capabilities */
joystick->nbuttons = SDL_CONTROLLER_BUTTON_MAX;
joystick->naxes = SDL_CONTROLLER_AXIS_MAX;
@@ -637,12 +771,23 @@
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
return SDL_TRUE;
+
+error:
+ if (device->dev) {
+ hid_close(device->dev);
+ device->dev = NULL;
+ }
+ if (device->context) {
+ SDL_free(device->context);
+ device->context = NULL;
+ }
+ return SDL_FALSE;
}
static int
-HIDAPI_DriverSwitch_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+HIDAPI_DriverSwitch_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
- SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)context;
+ SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)device->context;
/* Experimentally determined rumble values. These will only matter on some controllers as tested ones
* seem to disregard these and just use any non-zero rumble values as a binary flag for constant rumble
@@ -667,17 +812,109 @@
SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[1]);
}
+ ctx->m_bRumbleActive = (low_frequency_rumble || high_frequency_rumble) ? SDL_TRUE : SDL_FALSE;
+
if (!WriteRumble(ctx)) {
SDL_SetError("Couldn't send rumble packet");
return -1;
}
+ return 0;
+}
- if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
- ctx->m_nRumbleExpiration = SDL_GetTicks() + duration_ms;
- } else {
- ctx->m_nRumbleExpiration = 0;
+static void HandleInputOnlyControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_Context *ctx, SwitchInputOnlyControllerStatePacket_t *packet)
+{
+ Sint16 axis;
+
+ if (packet->rgucButtons[0] != ctx->m_lastInputOnlyState.rgucButtons[0]) {
+ Uint8 data = packet->rgucButtons[0];
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_A), (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_B), (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_X), (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_Y), (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, (data & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data & 0x20) ? SDL_PRESSED : SDL_RELEASED);
+
+ axis = (data & 0x40) ? 32767 : -32768;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
+
+ axis = (data & 0x80) ? 32767 : -32768;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
}
- return 0;
+
+ if (packet->rgucButtons[1] != ctx->m_lastInputOnlyState.rgucButtons[1]) {
+ Uint8 data = packet->rgucButtons[1];
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ if (packet->ucStickHat != ctx->m_lastInputOnlyState.ucStickHat) {
+ SDL_bool dpad_up = SDL_FALSE;
+ SDL_bool dpad_down = SDL_FALSE;
+ SDL_bool dpad_left = SDL_FALSE;
+ SDL_bool dpad_right = SDL_FALSE;
+
+ switch (packet->ucStickHat) {
+ case 0:
+ dpad_up = SDL_TRUE;
+ break;
+ case 1:
+ dpad_up = SDL_TRUE;
+ dpad_right = SDL_TRUE;
+ break;
+ case 2:
+ dpad_right = SDL_TRUE;
+ break;
+ case 3:
+ dpad_right = SDL_TRUE;
+ dpad_down = SDL_TRUE;
+ break;
+ case 4:
+ dpad_down = SDL_TRUE;
+ break;
+ case 5:
+ dpad_left = SDL_TRUE;
+ dpad_down = SDL_TRUE;
+ break;
+ case 6:
+ dpad_left = SDL_TRUE;
+ break;
+ case 7:
+ dpad_up = SDL_TRUE;
+ dpad_left = SDL_TRUE;
+ break;
+ default:
+ break;
+ }
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, dpad_down);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, dpad_up);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, dpad_right);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
+ }
+
+ if (packet->rgucJoystickLeft[0] != ctx->m_lastInputOnlyState.rgucJoystickLeft[0]) {
+ axis = (Sint16)(RemapVal(packet->rgucJoystickLeft[0], SDL_MIN_UINT8, SDL_MAX_UINT8, SDL_MIN_SINT16, SDL_MAX_SINT16));
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
+ }
+
+ if (packet->rgucJoystickLeft[1] != ctx->m_lastInputOnlyState.rgucJoystickLeft[1]) {
+ axis = (Sint16)(RemapVal(packet->rgucJoystickLeft[1], SDL_MIN_UINT8, SDL_MAX_UINT8, SDL_MIN_SINT16, SDL_MAX_SINT16));
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
+ }
+
+ if (packet->rgucJoystickRight[0] != ctx->m_lastInputOnlyState.rgucJoystickRight[0]) {
+ axis = (Sint16)(RemapVal(packet->rgucJoystickRight[0], SDL_MIN_UINT8, SDL_MAX_UINT8, SDL_MIN_SINT16, SDL_MAX_SINT16));
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
+ }
+
+ if (packet->rgucJoystickRight[1] != ctx->m_lastInputOnlyState.rgucJoystickRight[1]) {
+ axis = (Sint16)(RemapVal(packet->rgucJoystickRight[1], SDL_MIN_UINT8, SDL_MAX_UINT8, SDL_MIN_SINT16, SDL_MAX_SINT16));
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
+ }
+
+ ctx->m_lastInputOnlyState = *packet;
}
static void HandleSimpleControllerState(SDL_Joystick *joystick, SDL_DriverSwitch_Context *ctx, SwitchSimpleStatePacket_t *packet)
@@ -688,10 +925,10 @@
if (packet->rgucButtons[0] != ctx->m_lastSimpleState.rgucButtons[0]) {
Uint8 data = packet->rgucButtons[0];
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_A), (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_B), (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_X), (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_Y), (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, (data & 0x10) ? SDL_PRESSED : SDL_RELEASED);
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data & 0x20) ? SDL_PRESSED : SDL_RELEASED);
@@ -776,10 +1013,10 @@
if (packet->controllerState.rgucButtons[0] != ctx->m_lastFullState.controllerState.rgucButtons[0]) {
Uint8 data = packet->controllerState.rgucButtons[0];
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_X), (data & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_Y), (data & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_A), (data & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, RemapButton(ctx, SDL_CONTROLLER_BUTTON_B), (data & 0x08) ? SDL_PRESSED : SDL_RELEASED);
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data & 0x40) ? SDL_PRESSED : SDL_RELEASED);
axis = (data & 0x80) ? 32767 : -32768;
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
@@ -847,45 +1084,73 @@
}
static SDL_bool
-HIDAPI_DriverSwitch_Update(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverSwitch_UpdateDevice(SDL_HIDAPI_Device *device)
{
- SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)context;
+ SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
int size;
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
+ }
+ if (!joystick) {
+ return SDL_FALSE;
+ }
+
while ((size = ReadInput(ctx)) > 0) {
- switch (ctx->m_rgucReadBuffer[0]) {
- case k_eSwitchInputReportIDs_SimpleControllerState:
- HandleSimpleControllerState(joystick, ctx, (SwitchSimpleStatePacket_t *)&ctx->m_rgucReadBuffer[1]);
- break;
- case k_eSwitchInputReportIDs_FullControllerState:
- HandleFullControllerState(joystick, ctx, (SwitchStatePacket_t *)&ctx->m_rgucReadBuffer[1]);
- break;
- default:
- break;
+ if (ctx->m_bInputOnly) {
+ HandleInputOnlyControllerState(joystick, ctx, (SwitchInputOnlyControllerStatePacket_t *)&ctx->m_rgucReadBuffer[0]);
+ } else {
+ switch (ctx->m_rgucReadBuffer[0]) {
+ case k_eSwitchInputReportIDs_SimpleControllerState:
+ HandleSimpleControllerState(joystick, ctx, (SwitchSimpleStatePacket_t *)&ctx->m_rgucReadBuffer[1]);
+ break;
+ case k_eSwitchInputReportIDs_FullControllerState:
+ HandleFullControllerState(joystick, ctx, (SwitchStatePacket_t *)&ctx->m_rgucReadBuffer[1]);
+ break;
+ default:
+ break;
+ }
}
}
- if (ctx->m_nRumbleExpiration) {
- Uint32 now = SDL_GetTicks();
- if (SDL_TICKS_PASSED(now, ctx->m_nRumbleExpiration)) {
- HIDAPI_DriverSwitch_Rumble(joystick, dev, context, 0, 0, 0);
- }
+ if (ctx->m_bRumbleActive &&
+ SDL_TICKS_PASSED(SDL_GetTicks(), ctx->m_unRumbleRefresh)) {
+ WriteRumble(ctx);
}
+ if (size < 0) {
+ /* Read error, device is disconnected */
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ }
return (size >= 0);
}
static void
-HIDAPI_DriverSwitch_Quit(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverSwitch_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
{
- SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)context;
+ SDL_DriverSwitch_Context *ctx = (SDL_DriverSwitch_Context *)device->context;
- /* Restore simple input mode for other applications */
- SetInputMode(ctx, k_eSwitchInputReportIDs_SimpleControllerState);
+ if (!ctx->m_bInputOnly) {
+ /* Restore simple input mode for other applications */
+ SetInputMode(ctx, k_eSwitchInputReportIDs_SimpleControllerState);
+ }
- SDL_free(context);
+ SDL_DelHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
+ SDL_GameControllerButtonReportingHintChanged, ctx);
+
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
}
+static void
+HIDAPI_DriverSwitch_FreeDevice(SDL_HIDAPI_Device *device)
+{
+}
+
SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverSwitch =
{
SDL_HINT_JOYSTICK_HIDAPI_SWITCH,
@@ -892,10 +1157,14 @@
SDL_TRUE,
HIDAPI_DriverSwitch_IsSupportedDevice,
HIDAPI_DriverSwitch_GetDeviceName,
- HIDAPI_DriverSwitch_Init,
- HIDAPI_DriverSwitch_Rumble,
- HIDAPI_DriverSwitch_Update,
- HIDAPI_DriverSwitch_Quit
+ HIDAPI_DriverSwitch_InitDevice,
+ HIDAPI_DriverSwitch_GetDevicePlayerIndex,
+ HIDAPI_DriverSwitch_SetDevicePlayerIndex,
+ HIDAPI_DriverSwitch_UpdateDevice,
+ HIDAPI_DriverSwitch_OpenJoystick,
+ HIDAPI_DriverSwitch_RumbleJoystick,
+ HIDAPI_DriverSwitch_CloseJoystick,
+ HIDAPI_DriverSwitch_FreeDevice
};
#endif /* SDL_JOYSTICK_HIDAPI_SWITCH */
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapi_xbox360.c
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_xbox360.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -30,6 +30,7 @@
#include "SDL_gamecontroller.h"
#include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
#ifdef SDL_JOYSTICK_HIDAPI_XBOX360
@@ -50,12 +51,9 @@
#include "windows.gaming.input.h"
#endif
-#define USB_PACKET_LENGTH 64
-
typedef struct {
Uint8 last_state[USB_PACKET_LENGTH];
- Uint32 rumble_expiration;
#ifdef SDL_JOYSTICK_HIDAPI_WINDOWS_XINPUT
SDL_bool xinput_enabled;
Uint8 xinput_slot;
@@ -246,21 +244,59 @@
#endif /* SDL_JOYSTICK_HIDAPI_WINDOWS_GAMING_INPUT */
+#if defined(__MACOSX__)
static SDL_bool
-HIDAPI_DriverXbox360_IsSupportedDevice(Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number)
+IsBluetoothXboxOneController(Uint16 vendor_id, Uint16 product_id)
{
+ /* Check to see if it's the Xbox One S or Xbox One Elite Series 2 in Bluetooth mode */
+ if (vendor_id == USB_VENDOR_MICROSOFT) {
+ if (product_id == USB_PRODUCT_XBOX_ONE_S_REV1_BLUETOOTH ||
+ product_id == USB_PRODUCT_XBOX_ONE_S_REV2_BLUETOOTH ||
+ product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2_BLUETOOTH) {
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
+}
+#endif
+
+static SDL_bool
+HIDAPI_DriverXbox360_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
+{
+ const int XB360W_IFACE_PROTOCOL = 129; /* Wireless */
+
+ if (vendor_id == USB_VENDOR_NVIDIA) {
+ /* This is the NVIDIA Shield controller which doesn't talk Xbox controller protocol */
+ return SDL_FALSE;
+ }
+ if ((vendor_id == USB_VENDOR_MICROSOFT && (product_id == 0x0291 || product_id == 0x0719)) ||
+ (type == SDL_CONTROLLER_TYPE_XBOX360 && interface_protocol == XB360W_IFACE_PROTOCOL)) {
+ /* This is the wireless dongle, which talks a different protocol */
+ return SDL_FALSE;
+ }
+ if (interface_number > 0) {
+ /* This is the chatpad or other input interface, not the Xbox 360 interface */
+ return SDL_FALSE;
+ }
#if defined(__MACOSX__) || defined(__WIN32__)
- if (vendor_id == 0x045e && product_id == 0x028e && version == 1) {
+ if (vendor_id == USB_VENDOR_MICROSOFT && product_id == 0x028e && version == 1) {
/* This is the Steam Virtual Gamepad, which isn't supported by this driver */
return SDL_FALSE;
}
- if (vendor_id == 0x045e && product_id == 0x02e0) {
- /* This is the old Bluetooth Xbox One S firmware, which isn't supported by this driver */
+#if defined(__MACOSX__)
+ /* Wired Xbox One controllers are handled by this driver, interfacing with
+ the 360Controller driver available from:
+ https://github.com/360Controller/360Controller/releases
+
+ Bluetooth Xbox One controllers are handled by the SDL Xbox One driver
+ */
+ if (IsBluetoothXboxOneController(vendor_id, product_id)) {
return SDL_FALSE;
}
- return SDL_IsJoystickXbox360(vendor_id, product_id) || SDL_IsJoystickXboxOne(vendor_id, product_id);
+#endif
+ return (type == SDL_CONTROLLER_TYPE_XBOX360 || type == SDL_CONTROLLER_TYPE_XBOXONE);
#else
- return SDL_IsJoystickXbox360(vendor_id, product_id);
+ return (type == SDL_CONTROLLER_TYPE_XBOX360);
#endif
}
@@ -267,12 +303,13 @@
static const char *
HIDAPI_DriverXbox360_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
{
- return HIDAPI_XboxControllerName(vendor_id, product_id);
+ return NULL;
}
static SDL_bool SetSlotLED(hid_device *dev, Uint8 slot)
{
- const Uint8 led_packet[] = { 0x01, 0x03, (2 + slot) };
+ Uint8 mode = 0x02 + slot;
+ const Uint8 led_packet[] = { 0x01, 0x03, mode };
if (hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) {
return SDL_FALSE;
@@ -281,9 +318,30 @@
}
static SDL_bool
-HIDAPI_DriverXbox360_Init(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id, Uint16 product_id, void **context)
+HIDAPI_DriverXbox360_InitDevice(SDL_HIDAPI_Device *device)
{
+ return HIDAPI_JoystickConnected(device, NULL);
+}
+
+static int
+HIDAPI_DriverXbox360_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static void
+HIDAPI_DriverXbox360_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+ if (device->dev) {
+ SetSlotLED(device->dev, (player_index % 4));
+ }
+}
+
+static SDL_bool
+HIDAPI_DriverXbox360_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
SDL_DriverXbox360_Context *ctx;
+ int player_index;
ctx = (SDL_DriverXbox360_Context *)SDL_calloc(1, sizeof(*ctx));
if (!ctx) {
@@ -290,6 +348,15 @@
SDL_OutOfMemory();
return SDL_FALSE;
}
+
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_free(ctx);
+ SDL_SetError("Couldn't open %s", device->path);
+ return SDL_FALSE;
+ }
+ device->context = ctx;
+
#ifdef SDL_JOYSTICK_HIDAPI_WINDOWS_XINPUT
ctx->xinput_enabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE);
if (ctx->xinput_enabled && WIN_LoadXInputDLL() < 0) {
@@ -300,10 +367,12 @@
#ifdef SDL_JOYSTICK_HIDAPI_WINDOWS_GAMING_INPUT
HIDAPI_DriverXbox360_InitWindowsGamingInput(ctx);
#endif
- *context = ctx;
/* Set the controller LED */
- SetSlotLED(dev, (joystick->instance_id % 4));
+ player_index = SDL_JoystickGetPlayerIndex(joystick);
+ if (player_index >= 0) {
+ SetSlotLED(device->dev, (player_index % 4));
+ }
/* Initialize the joystick capabilities */
joystick->nbuttons = SDL_CONTROLLER_BUTTON_MAX;
@@ -314,9 +383,11 @@
}
static int
-HIDAPI_DriverXbox360_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
- SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)context;
+#if defined(SDL_JOYSTICK_HIDAPI_WINDOWS_GAMING_INPUT) || defined(SDL_JOYSTICK_HIDAPI_WINDOWS_XINPUT)
+ SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)device->context;
+#endif
#ifdef __WIN32__
SDL_bool rumbled = SDL_FALSE;
@@ -355,30 +426,40 @@
#else /* !__WIN32__ */
#ifdef __MACOSX__
- /* On Mac OS X the 360Controller driver uses this short report,
- and we need to prefix it with a magic token so hidapi passes it through untouched
- */
- Uint8 rumble_packet[] = { 'M', 'A', 'G', 'I', 'C', '0', 0x00, 0x04, 0x00, 0x00 };
+ if (IsBluetoothXboxOneController(device->vendor_id, device->product_id)) {
+ Uint8 rumble_packet[] = { 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 };
- rumble_packet[6+2] = (low_frequency_rumble >> 8);
- rumble_packet[6+3] = (high_frequency_rumble >> 8);
+ rumble_packet[4] = (low_frequency_rumble >> 8);
+ rumble_packet[5] = (high_frequency_rumble >> 8);
+
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ return SDL_SetError("Couldn't send rumble packet");
+ }
+ } else {
+ /* On Mac OS X the 360Controller driver uses this short report,
+ and we need to prefix it with a magic token so hidapi passes it through untouched
+ */
+ Uint8 rumble_packet[] = { 'M', 'A', 'G', 'I', 'C', '0', 0x00, 0x04, 0x00, 0x00 };
+
+ rumble_packet[6+2] = (low_frequency_rumble >> 8);
+ rumble_packet[6+3] = (high_frequency_rumble >> 8);
+
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ return SDL_SetError("Couldn't send rumble packet");
+ }
+ }
#else
Uint8 rumble_packet[] = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
rumble_packet[3] = (low_frequency_rumble >> 8);
rumble_packet[4] = (high_frequency_rumble >> 8);
-#endif
- if (hid_write(dev, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
return SDL_SetError("Couldn't send rumble packet");
}
+#endif
#endif /* __WIN32__ */
- if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
- ctx->rumble_expiration = SDL_GetTicks() + duration_ms;
- } else {
- ctx->rumble_expiration = 0;
- }
return 0;
}
@@ -608,156 +689,37 @@
}
#endif /* __WIN32__ */
-#ifdef __MACOSX__
-static void
-HIDAPI_DriverXboxOneS_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXbox360_Context *ctx, Uint8 *data, int size)
-{
- Sint16 axis;
-
- if (ctx->last_state[14] != data[14]) {
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, (data[14] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, (data[14] & 0x02) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, (data[14] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, (data[14] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, (data[14] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data[14] & 0x80) ? SDL_PRESSED : SDL_RELEASED);
- }
-
- if (ctx->last_state[15] != data[15]) {
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, (data[15] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, (data[15] & 0x20) ? SDL_PRESSED : SDL_RELEASED);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data[15] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
- }
-
- if (ctx->last_state[16] != data[16]) {
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, (data[16] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
- }
-
- if (ctx->last_state[13] != data[13]) {
- SDL_bool dpad_up = SDL_FALSE;
- SDL_bool dpad_down = SDL_FALSE;
- SDL_bool dpad_left = SDL_FALSE;
- SDL_bool dpad_right = SDL_FALSE;
-
- switch (data[13]) {
- case 1:
- dpad_up = SDL_TRUE;
- break;
- case 2:
- dpad_up = SDL_TRUE;
- dpad_right = SDL_TRUE;
- break;
- case 3:
- dpad_right = SDL_TRUE;
- break;
- case 4:
- dpad_right = SDL_TRUE;
- dpad_down = SDL_TRUE;
- break;
- case 5:
- dpad_down = SDL_TRUE;
- break;
- case 6:
- dpad_left = SDL_TRUE;
- dpad_down = SDL_TRUE;
- break;
- case 7:
- dpad_left = SDL_TRUE;
- break;
- case 8:
- dpad_up = SDL_TRUE;
- dpad_left = SDL_TRUE;
- break;
- default:
- break;
- }
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, dpad_down);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, dpad_up);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, dpad_right);
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
- }
-
- axis = (int)*(Uint16*)(&data[1]) - 0x8000;
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
- axis = (int)*(Uint16*)(&data[3]) - 0x8000;
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
- axis = (int)*(Uint16*)(&data[5]) - 0x8000;
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
- axis = (int)*(Uint16*)(&data[7]) - 0x8000;
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
-
- axis = ((int)*(Sint16*)(&data[9]) * 64) - 32768;
- if (axis == 32704) {
- axis = 32767;
- }
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
-
- axis = ((int)*(Sint16*)(&data[11]) * 64) - 32768;
- if (axis == 32704) {
- axis = 32767;
- }
- SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
-
- SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
-}
-
-static void
-HIDAPI_DriverXboxOneS_HandleGuidePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXbox360_Context *ctx, Uint8 *data, int size)
-{
- SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[1] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
-}
-#endif /* __MACOSX__ */
-
static SDL_bool
-HIDAPI_DriverXbox360_Update(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverXbox360_UpdateDevice(SDL_HIDAPI_Device *device)
{
- SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)context;
+ SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
Uint8 data[USB_PACKET_LENGTH];
int size;
- while ((size = hid_read_timeout(dev, data, sizeof(data), 0)) > 0) {
-#ifdef __WIN32__
- HIDAPI_DriverXbox360_HandleStatePacket(joystick, dev, ctx, data, size);
-#else
- switch (data[0]) {
- case 0x00:
- HIDAPI_DriverXbox360_HandleStatePacket(joystick, dev, ctx, data, size);
- break;
-#ifdef __MACOSX__
- case 0x01:
- HIDAPI_DriverXboxOneS_HandleStatePacket(joystick, dev, ctx, data, size);
- break;
- case 0x02:
- HIDAPI_DriverXboxOneS_HandleGuidePacket(joystick, dev, ctx, data, size);
- break;
-#endif
- default:
-#ifdef DEBUG_JOYSTICK
- SDL_Log("Unknown Xbox 360 packet, size = %d\n", size);
- SDL_Log("%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n",
- data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7],
- data[8], data[9], data[10], data[11], data[12], data[13], data[14], data[15], data[16]);
-#endif
- break;
- }
-#endif /* __WIN32__ */
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
}
+ if (!joystick) {
+ return SDL_FALSE;
+ }
- if (ctx->rumble_expiration) {
- Uint32 now = SDL_GetTicks();
- if (SDL_TICKS_PASSED(now, ctx->rumble_expiration)) {
- HIDAPI_DriverXbox360_Rumble(joystick, dev, context, 0, 0, 0);
- }
+ while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
+ HIDAPI_DriverXbox360_HandleStatePacket(joystick, device->dev, ctx, data, size);
}
+ if (size < 0) {
+ /* Read error, device is disconnected */
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ }
return (size >= 0);
}
static void
-HIDAPI_DriverXbox360_Quit(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverXbox360_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
{
#if defined(SDL_JOYSTICK_HIDAPI_WINDOWS_XINPUT) || defined(SDL_JOYSTICK_HIDAPI_WINDOWS_GAMING_INPUT)
- SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)context;
+ SDL_DriverXbox360_Context *ctx = (SDL_DriverXbox360_Context *)device->context;
#endif
#ifdef SDL_JOYSTICK_HIDAPI_WINDOWS_XINPUT
@@ -767,11 +729,21 @@
}
#endif
#ifdef SDL_JOYSTICK_HIDAPI_WINDOWS_GAMING_INPUT
- HIDAPI_DriverXbox360_InitWindowsGamingInput(ctx);
+ HIDAPI_DriverXbox360_QuitWindowsGamingInput(ctx);
#endif
- SDL_free(context);
+
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
}
+static void
+HIDAPI_DriverXbox360_FreeDevice(SDL_HIDAPI_Device *device)
+{
+}
+
SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXbox360 =
{
SDL_HINT_JOYSTICK_HIDAPI_XBOX,
@@ -778,10 +750,14 @@
SDL_TRUE,
HIDAPI_DriverXbox360_IsSupportedDevice,
HIDAPI_DriverXbox360_GetDeviceName,
- HIDAPI_DriverXbox360_Init,
- HIDAPI_DriverXbox360_Rumble,
- HIDAPI_DriverXbox360_Update,
- HIDAPI_DriverXbox360_Quit
+ HIDAPI_DriverXbox360_InitDevice,
+ HIDAPI_DriverXbox360_GetDevicePlayerIndex,
+ HIDAPI_DriverXbox360_SetDevicePlayerIndex,
+ HIDAPI_DriverXbox360_UpdateDevice,
+ HIDAPI_DriverXbox360_OpenJoystick,
+ HIDAPI_DriverXbox360_RumbleJoystick,
+ HIDAPI_DriverXbox360_CloseJoystick,
+ HIDAPI_DriverXbox360_FreeDevice
};
#endif /* SDL_JOYSTICK_HIDAPI_XBOX360 */
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_xbox360w.c
@@ -1,0 +1,306 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#include "../../SDL_internal.h"
+
+#ifdef SDL_JOYSTICK_HIDAPI
+
+#include "SDL_hints.h"
+#include "SDL_log.h"
+#include "SDL_events.h"
+#include "SDL_timer.h"
+#include "SDL_joystick.h"
+#include "SDL_gamecontroller.h"
+#include "../SDL_sysjoystick.h"
+#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
+
+
+#ifdef SDL_JOYSTICK_HIDAPI_XBOX360
+
+
+typedef struct {
+ SDL_bool connected;
+ Uint8 last_state[USB_PACKET_LENGTH];
+} SDL_DriverXbox360W_Context;
+
+
+static SDL_bool
+HIDAPI_DriverXbox360W_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
+{
+ const int XB360W_IFACE_PROTOCOL = 129; /* Wireless */
+
+ if ((vendor_id == USB_VENDOR_MICROSOFT && (product_id == 0x0291 || product_id == 0x02a9 || product_id == 0x0719)) ||
+ (type == SDL_CONTROLLER_TYPE_XBOX360 && interface_protocol == XB360W_IFACE_PROTOCOL)) {
+ return SDL_TRUE;
+ }
+ return SDL_FALSE;
+}
+
+static const char *
+HIDAPI_DriverXbox360W_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
+{
+ return "Xbox 360 Wireless Controller";
+}
+
+static SDL_bool SetSlotLED(hid_device *dev, Uint8 slot)
+{
+ Uint8 mode = 0x02 + slot;
+ const Uint8 led_packet[] = { 0x00, 0x00, 0x08, (0x40 + (mode % 0x0e)), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ if (hid_write(dev, led_packet, sizeof(led_packet)) != sizeof(led_packet)) {
+ return SDL_FALSE;
+ }
+ return SDL_TRUE;
+}
+
+static void
+UpdatePowerLevel(SDL_Joystick *joystick, Uint8 level)
+{
+ float normalized_level = (float)level / 255.0f;
+
+ if (normalized_level <= 0.05f) {
+ joystick->epowerlevel = SDL_JOYSTICK_POWER_EMPTY;
+ } else if (normalized_level <= 0.20f) {
+ joystick->epowerlevel = SDL_JOYSTICK_POWER_LOW;
+ } else if (normalized_level <= 0.70f) {
+ joystick->epowerlevel = SDL_JOYSTICK_POWER_MEDIUM;
+ } else {
+ joystick->epowerlevel = SDL_JOYSTICK_POWER_FULL;
+ }
+}
+
+static SDL_bool
+HIDAPI_DriverXbox360W_InitDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverXbox360W_Context *ctx;
+
+ /* Requests controller presence information from the wireless dongle */
+ const Uint8 init_packet[] = { 0x08, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ ctx = (SDL_DriverXbox360W_Context *)SDL_calloc(1, sizeof(*ctx));
+ if (!ctx) {
+ SDL_OutOfMemory();
+ return SDL_FALSE;
+ }
+
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_free(ctx);
+ SDL_SetError("Couldn't open %s", device->path);
+ return SDL_FALSE;
+ }
+ device->context = ctx;
+
+ if (hid_write(device->dev, init_packet, sizeof(init_packet)) != sizeof(init_packet)) {
+ SDL_SetError("Couldn't write init packet");
+ return SDL_FALSE;
+ }
+
+ return SDL_TRUE;
+}
+
+static int
+HIDAPI_DriverXbox360W_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static void
+HIDAPI_DriverXbox360W_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+ SetSlotLED(device->dev, (player_index % 4));
+}
+
+static SDL_bool
+HIDAPI_DriverXbox360W_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+ SDL_DriverXbox360W_Context *ctx = (SDL_DriverXbox360W_Context *)device->context;
+
+ SDL_zeroa(ctx->last_state);
+
+ /* Initialize the joystick capabilities */
+ joystick->nbuttons = SDL_CONTROLLER_BUTTON_MAX;
+ joystick->naxes = SDL_CONTROLLER_AXIS_MAX;
+ joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
+
+ return SDL_TRUE;
+}
+
+static int
+HIDAPI_DriverXbox360W_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
+{
+ Uint8 rumble_packet[] = { 0x00, 0x01, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ rumble_packet[5] = (low_frequency_rumble >> 8);
+ rumble_packet[6] = (high_frequency_rumble >> 8);
+
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ return SDL_SetError("Couldn't send rumble packet");
+ }
+ return 0;
+}
+
+static void
+HIDAPI_DriverXbox360W_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXbox360W_Context *ctx, Uint8 *data, int size)
+{
+ Sint16 axis;
+ const SDL_bool invert_y_axes = SDL_TRUE;
+
+ if (ctx->last_state[2] != data[2]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, (data[2] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, (data[2] & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, (data[2] & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, (data[2] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, (data[2] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, (data[2] & 0x20) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, (data[2] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data[2] & 0x80) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ if (ctx->last_state[3] != data[3]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, (data[3] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data[3] & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[3] & 0x04) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, (data[3] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, (data[3] & 0x20) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, (data[3] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, (data[3] & 0x80) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ axis = ((int)data[4] * 257) - 32768;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
+ axis = ((int)data[5] * 257) - 32768;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
+ axis = *(Sint16*)(&data[6]);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
+ axis = *(Sint16*)(&data[8]);
+ if (invert_y_axes) {
+ axis = ~axis;
+ }
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
+ axis = *(Sint16*)(&data[10]);
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
+ axis = *(Sint16*)(&data[12]);
+ if (invert_y_axes) {
+ axis = ~axis;
+ }
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
+
+ SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
+}
+
+static SDL_bool
+HIDAPI_DriverXbox360W_UpdateDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverXbox360W_Context *ctx = (SDL_DriverXbox360W_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
+ Uint8 data[USB_PACKET_LENGTH];
+ int size;
+
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
+ }
+
+ while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
+ if (size == 2 && data[0] == 0x08) {
+ SDL_bool connected = (data[1] & 0x80) ? SDL_TRUE : SDL_FALSE;
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Connected = %s\n", connected ? "TRUE" : "FALSE");
+#endif
+ if (connected != ctx->connected) {
+ ctx->connected = connected;
+
+ if (connected) {
+ SDL_JoystickID joystickID;
+
+ HIDAPI_JoystickConnected(device, &joystickID);
+
+ } else if (device->num_joysticks > 0) {
+ HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
+ }
+ }
+ } else if (size == 29 && data[0] == 0x00 && data[1] == 0x0f && data[2] == 0x00 && data[3] == 0xf0) {
+ /* Serial number is data[7-13] */
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Battery status (initial): %d\n", data[17]);
+#endif
+ if (joystick) {
+ UpdatePowerLevel(joystick, data[17]);
+ }
+ } else if (size == 29 && data[0] == 0x00 && data[1] == 0x00 && data[2] == 0x00 && data[3] == 0x13) {
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Battery status: %d\n", data[4]);
+#endif
+ if (joystick) {
+ UpdatePowerLevel(joystick, data[4]);
+ }
+ } else if (size == 29 && data[0] == 0x00 && (data[1] & 0x01) == 0x01) {
+ if (joystick) {
+ HIDAPI_DriverXbox360W_HandleStatePacket(joystick, device->dev, ctx, data+4, size-4);
+ }
+ }
+ }
+
+ if (joystick) {
+ if (size < 0) {
+ /* Read error, device is disconnected */
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ }
+ }
+ return (size >= 0);
+}
+
+static void
+HIDAPI_DriverXbox360W_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
+}
+
+static void
+HIDAPI_DriverXbox360W_FreeDevice(SDL_HIDAPI_Device *device)
+{
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
+}
+
+SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXbox360W =
+{
+ SDL_HINT_JOYSTICK_HIDAPI_XBOX,
+ SDL_TRUE,
+ HIDAPI_DriverXbox360W_IsSupportedDevice,
+ HIDAPI_DriverXbox360W_GetDeviceName,
+ HIDAPI_DriverXbox360W_InitDevice,
+ HIDAPI_DriverXbox360W_GetDevicePlayerIndex,
+ HIDAPI_DriverXbox360W_SetDevicePlayerIndex,
+ HIDAPI_DriverXbox360W_UpdateDevice,
+ HIDAPI_DriverXbox360W_OpenJoystick,
+ HIDAPI_DriverXbox360W_RumbleJoystick,
+ HIDAPI_DriverXbox360W_CloseJoystick,
+ HIDAPI_DriverXbox360W_FreeDevice
+};
+
+#endif /* SDL_JOYSTICK_HIDAPI_XBOX360 */
+
+#endif /* SDL_JOYSTICK_HIDAPI */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapi_xboxone.c
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapi_xboxone.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -30,69 +30,51 @@
#include "SDL_gamecontroller.h"
#include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
#ifdef SDL_JOYSTICK_HIDAPI_XBOXONE
-#define USB_PACKET_LENGTH 64
+/* Define this if you want to log all packets from the controller */
+/*#define DEBUG_XBOX_PROTOCOL*/
-/*
- * This packet is required for all Xbox One pads with 2015
- * or later firmware installed (or present from the factory).
- */
-static const Uint8 xboxone_fw2015_init[] = {
- 0x05, 0x20, 0x00, 0x01, 0x00
-};
+/* The amount of time to wait after hotplug to send controller init sequence */
+#define CONTROLLER_INIT_DELAY_MS 1500 /* 475 for Xbox One S, 1275 for the PDP Battlefield 1 */
-/*
- * This packet is required for the Titanfall 2 Xbox One pads
- * (0x0e6f:0x0165) to finish initialization and for Hori pads
- * (0x0f0d:0x0067) to make the analog sticks work.
- */
-static const Uint8 xboxone_hori_init[] = {
- 0x01, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 0x3a,
+/* Connect controller */
+static const Uint8 xboxone_init0[] = {
+ 0x04, 0x20, 0x00, 0x00
+};
+/* Initial ack */
+static const Uint8 xboxone_init1[] = {
+ 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a,
0x00, 0x00, 0x00, 0x80, 0x00
};
-
-/*
- * This packet is required for some of the PDP pads to start
- * sending input reports. These pads include: (0x0e6f:0x02ab),
- * (0x0e6f:0x02a4).
- */
-static const Uint8 xboxone_pdp_init1[] = {
- 0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
+/* Start controller - extended? */
+static const Uint8 xboxone_init2[] = {
+ 0x05, 0x20, 0x00, 0x0F, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x55, 0x53, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00
};
-
-/*
- * This packet is required for some of the PDP pads to start
- * sending input reports. These pads include: (0x0e6f:0x02ab),
- * (0x0e6f:0x02a4).
- */
-static const Uint8 xboxone_pdp_init2[] = {
+/* Start controller with input */
+static const Uint8 xboxone_init3[] = {
+ 0x05, 0x20, 0x03, 0x01, 0x00
+};
+/* Enable LED */
+static const Uint8 xboxone_init4[] = {
+ 0x0A, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
+};
+/* Start input reports? */
+static const Uint8 xboxone_init5[] = {
0x06, 0x20, 0x00, 0x02, 0x01, 0x00
};
-
-/*
- * A specific rumble packet is required for some PowerA pads to start
- * sending input reports. One of those pads is (0x24c6:0x543a).
- */
-static const Uint8 xboxone_rumblebegin_init[] = {
+/* Start rumble? */
+static const Uint8 xboxone_init6[] = {
0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
- 0x1D, 0x1D, 0xFF, 0x00, 0x00
+ 0x00, 0x00, 0xFF, 0x00, 0xEB
};
/*
- * A rumble packet with zero FF intensity will immediately
- * terminate the rumbling required to init PowerA pads.
- * This should happen fast enough that the motors don't
- * spin up to enough speed to actually vibrate the gamepad.
- */
-static const Uint8 xboxone_rumbleend_init[] = {
- 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/*
* This specifies the selection of init packets that a gamepad
* will be sent on init *and* the order in which they will be
* sent. The correct sequence number will be added when the
@@ -101,53 +83,220 @@
typedef struct {
Uint16 vendor_id;
Uint16 product_id;
+ Uint16 exclude_vendor_id;
+ Uint16 exclude_product_id;
const Uint8 *data;
int size;
+ const Uint8 response[2];
} SDL_DriverXboxOne_InitPacket;
+
static const SDL_DriverXboxOne_InitPacket xboxone_init_packets[] = {
- { 0x0e6f, 0x0165, xboxone_hori_init, sizeof(xboxone_hori_init) },
- { 0x0f0d, 0x0067, xboxone_hori_init, sizeof(xboxone_hori_init) },
- { 0x0000, 0x0000, xboxone_fw2015_init, sizeof(xboxone_fw2015_init) },
- { 0x0e6f, 0x0246, xboxone_pdp_init1, sizeof(xboxone_pdp_init1) },
- { 0x0e6f, 0x0246, xboxone_pdp_init2, sizeof(xboxone_pdp_init2) },
- { 0x0e6f, 0x02ab, xboxone_pdp_init1, sizeof(xboxone_pdp_init1) },
- { 0x0e6f, 0x02ab, xboxone_pdp_init2, sizeof(xboxone_pdp_init2) },
- { 0x0e6f, 0x02a4, xboxone_pdp_init1, sizeof(xboxone_pdp_init1) },
- { 0x0e6f, 0x02a4, xboxone_pdp_init2, sizeof(xboxone_pdp_init2) },
- { 0x24c6, 0x541a, xboxone_rumblebegin_init, sizeof(xboxone_rumblebegin_init) },
- { 0x24c6, 0x542a, xboxone_rumblebegin_init, sizeof(xboxone_rumblebegin_init) },
- { 0x24c6, 0x543a, xboxone_rumblebegin_init, sizeof(xboxone_rumblebegin_init) },
- { 0x24c6, 0x541a, xboxone_rumbleend_init, sizeof(xboxone_rumbleend_init) },
- { 0x24c6, 0x542a, xboxone_rumbleend_init, sizeof(xboxone_rumbleend_init) },
- { 0x24c6, 0x543a, xboxone_rumbleend_init, sizeof(xboxone_rumbleend_init) },
+ { 0x0000, 0x0000, 0x0000, 0x0000, xboxone_init0, sizeof(xboxone_init0), { 0x04, 0xf0 } },
+ { 0x0000, 0x0000, 0x0000, 0x0000, xboxone_init1, sizeof(xboxone_init1), { 0x04, 0xb0 } },
+ { 0x0000, 0x0000, 0x0000, 0x0000, xboxone_init2, sizeof(xboxone_init2), { 0x00, 0x00 } },
+ { 0x0000, 0x0000, 0x0000, 0x0000, xboxone_init3, sizeof(xboxone_init3), { 0x00, 0x00 } },
+ { 0x0000, 0x0000, 0x0000, 0x0000, xboxone_init4, sizeof(xboxone_init4), { 0x00, 0x00 } },
+
+ /* These next packets are required for third party controllers (PowerA, PDP, HORI),
+ but aren't the correct protocol for Microsoft Xbox controllers.
+ */
+ { 0x0000, 0x0000, 0x045e, 0x0000, xboxone_init5, sizeof(xboxone_init5), { 0x00, 0x00 } },
+ { 0x0000, 0x0000, 0x045e, 0x0000, xboxone_init6, sizeof(xboxone_init6), { 0x00, 0x00 } },
};
+typedef enum {
+ XBOX_ONE_WIRELESS_PROTOCOL_UNKNOWN,
+ XBOX_ONE_WIRELESS_PROTOCOL_V1,
+ XBOX_ONE_WIRELESS_PROTOCOL_V2,
+} SDL_XboxOneWirelessProtocol;
+
typedef struct {
+ Uint16 vendor_id;
+ Uint16 product_id;
+ SDL_bool bluetooth;
+ SDL_XboxOneWirelessProtocol wireless_protocol;
+ SDL_bool initialized;
+ Uint32 start_time;
Uint8 sequence;
Uint8 last_state[USB_PACKET_LENGTH];
- Uint32 rumble_expiration;
+ SDL_bool has_paddles;
} SDL_DriverXboxOne_Context;
+#ifdef DEBUG_XBOX_PROTOCOL
+static void
+DumpPacket(const char *prefix, Uint8 *data, int size)
+{
+ int i;
+ char buffer[5*USB_PACKET_LENGTH];
+
+ SDL_snprintf(buffer, sizeof(buffer), prefix, size);
+ for (i = 0; i < size; ++i) {
+ if ((i % 8) == 0) {
+ SDL_snprintf(&buffer[SDL_strlen(buffer)], sizeof(buffer) - SDL_strlen(buffer), "\n%.2d: ", i);
+ }
+ SDL_snprintf(&buffer[SDL_strlen(buffer)], sizeof(buffer) - SDL_strlen(buffer), " 0x%.2x", data[i]);
+ }
+ SDL_strlcat(buffer, "\n", sizeof(buffer));
+ SDL_Log("%s", buffer);
+}
+#endif /* DEBUG_XBOX_PROTOCOL */
+
static SDL_bool
-HIDAPI_DriverXboxOne_IsSupportedDevice(Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number)
+IsBluetoothXboxOneController(Uint16 vendor_id, Uint16 product_id)
{
- return SDL_IsJoystickXboxOne(vendor_id, product_id);
+ /* Check to see if it's the Xbox One S or Xbox One Elite Series 2 in Bluetooth mode */
+ if (vendor_id == USB_VENDOR_MICROSOFT) {
+ if (product_id == USB_PRODUCT_XBOX_ONE_S_REV1_BLUETOOTH ||
+ product_id == USB_PRODUCT_XBOX_ONE_S_REV2_BLUETOOTH ||
+ product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2_BLUETOOTH) {
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
}
+static SDL_bool
+ControllerHasPaddles(Uint16 vendor_id, Uint16 product_id)
+{
+ if (vendor_id == USB_VENDOR_MICROSOFT) {
+ if (product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_1 ||
+ product_id == USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2) {
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
+}
+
+/* Return true if this controller sends the 0x02 "waiting for init" packet */
+static SDL_bool
+ControllerSendsWaitingForInit(Uint16 vendor_id, Uint16 product_id)
+{
+ if (vendor_id == USB_VENDOR_HYPERKIN) {
+ /* The Hyperkin controllers always send 0x02 when waiting for init,
+ and the Hyperkin Duke plays an Xbox startup animation, so we want
+ to make sure we don't send the init sequence if it isn't needed.
+ */
+ return SDL_TRUE;
+ }
+ if (vendor_id == USB_VENDOR_PDP) {
+ /* The PDP Rock Candy (PID 0x0246) doesn't send 0x02 on Linux for some reason */
+ return SDL_FALSE;
+ }
+
+ /* It doesn't hurt to reinit, especially if a driver has misconfigured the controller */
+ /*return SDL_TRUE;*/
+ return SDL_FALSE;
+}
+
+static SDL_bool
+SendControllerInit(SDL_HIDAPI_Device *device, SDL_DriverXboxOne_Context *ctx)
+{
+ Uint16 vendor_id = ctx->vendor_id;
+ Uint16 product_id = ctx->product_id;
+ int i;
+ Uint8 init_packet[USB_PACKET_LENGTH];
+
+ for (i = 0; i < SDL_arraysize(xboxone_init_packets); ++i) {
+ const SDL_DriverXboxOne_InitPacket *packet = &xboxone_init_packets[i];
+
+ if (packet->vendor_id && (vendor_id != packet->vendor_id)) {
+ continue;
+ }
+
+ if (packet->product_id && (product_id != packet->product_id)) {
+ continue;
+ }
+
+ if (packet->exclude_vendor_id && (vendor_id == packet->exclude_vendor_id)) {
+ continue;
+ }
+
+ if (packet->exclude_product_id && (product_id == packet->exclude_product_id)) {
+ continue;
+ }
+
+ SDL_memcpy(init_packet, packet->data, packet->size);
+ if (init_packet[0] != 0x01) {
+ init_packet[2] = ctx->sequence++;
+ }
+ if (hid_write(device->dev, init_packet, packet->size) != packet->size) {
+ SDL_SetError("Couldn't write Xbox One initialization packet");
+ return SDL_FALSE;
+ }
+
+ if (packet->response[0]) {
+ const Uint32 RESPONSE_TIMEOUT_MS = 50;
+ Uint32 start = SDL_GetTicks();
+ SDL_bool got_response = SDL_FALSE;
+
+ while (!got_response && !SDL_TICKS_PASSED(SDL_GetTicks(), start + RESPONSE_TIMEOUT_MS)) {
+ Uint8 data[USB_PACKET_LENGTH];
+ int size;
+
+ while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
+#ifdef DEBUG_XBOX_PROTOCOL
+ DumpPacket("Xbox One INIT packet: size = %d", data, size);
+#endif
+ if (size >= 2 && data[0] == packet->response[0] && data[1] == packet->response[1]) {
+ got_response = SDL_TRUE;
+ }
+ }
+ }
+#ifdef DEBUG_XBOX_PROTOCOL
+ SDL_Log("Init sequence %d got response: %s\n", i, got_response ? "TRUE" : "FALSE");
+#endif
+ }
+ }
+ return SDL_TRUE;
+}
+
+static SDL_bool
+HIDAPI_DriverXboxOne_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
+{
+#ifdef __LINUX__
+ if (vendor_id == USB_VENDOR_POWERA && product_id == 0x541a) {
+ /* The PowerA Mini controller, model 1240245-01, blocks while writing feature reports */
+ return SDL_FALSE;
+ }
+#endif
+#ifdef __MACOSX__
+ /* Wired Xbox One controllers are handled by the 360Controller driver */
+ if (!IsBluetoothXboxOneController(vendor_id, product_id)) {
+ return SDL_FALSE;
+ }
+#endif
+ return (type == SDL_CONTROLLER_TYPE_XBOXONE);
+}
+
static const char *
HIDAPI_DriverXboxOne_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
{
- return HIDAPI_XboxControllerName(vendor_id, product_id);
+ return NULL;
}
static SDL_bool
-HIDAPI_DriverXboxOne_Init(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id, Uint16 product_id, void **context)
+HIDAPI_DriverXboxOne_InitDevice(SDL_HIDAPI_Device *device)
{
+ return HIDAPI_JoystickConnected(device, NULL);
+}
+
+static int
+HIDAPI_DriverXboxOne_GetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id)
+{
+ return -1;
+}
+
+static void
+HIDAPI_DriverXboxOne_SetDevicePlayerIndex(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index)
+{
+}
+
+static SDL_bool
+HIDAPI_DriverXboxOne_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
+{
SDL_DriverXboxOne_Context *ctx;
- int i;
- Uint8 init_packet[USB_PACKET_LENGTH];
ctx = (SDL_DriverXboxOne_Context *)SDL_calloc(1, sizeof(*ctx));
if (!ctx) {
@@ -154,24 +303,25 @@
SDL_OutOfMemory();
return SDL_FALSE;
}
- *context = ctx;
- /* Send the controller init data */
- for (i = 0; i < SDL_arraysize(xboxone_init_packets); ++i) {
- const SDL_DriverXboxOne_InitPacket *packet = &xboxone_init_packets[i];
- if (!packet->vendor_id || (vendor_id == packet->vendor_id && product_id == packet->product_id)) {
- SDL_memcpy(init_packet, packet->data, packet->size);
- init_packet[2] = ctx->sequence++;
- if (hid_write(dev, init_packet, packet->size) != packet->size) {
- SDL_SetError("Couldn't write Xbox One initialization packet");
- SDL_free(ctx);
- return SDL_FALSE;
- }
- }
+ device->dev = hid_open_path(device->path, 0);
+ if (!device->dev) {
+ SDL_free(ctx);
+ SDL_SetError("Couldn't open %s", device->path);
+ return SDL_FALSE;
}
+ device->context = ctx;
+ ctx->vendor_id = device->vendor_id;
+ ctx->product_id = device->product_id;
+ ctx->bluetooth = IsBluetoothXboxOneController(device->vendor_id, device->product_id);
+ ctx->initialized = ctx->bluetooth ? SDL_TRUE : SDL_FALSE;
+ ctx->start_time = SDL_GetTicks();
+ ctx->sequence = 1;
+ ctx->has_paddles = ControllerHasPaddles(ctx->vendor_id, ctx->product_id);
+
/* Initialize the joystick capabilities */
- joystick->nbuttons = SDL_CONTROLLER_BUTTON_MAX;
+ joystick->nbuttons = ctx->has_paddles ? SDL_CONTROLLER_BUTTON_MAX : (SDL_CONTROLLER_BUTTON_MAX + 4);
joystick->naxes = SDL_CONTROLLER_AXIS_MAX;
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
@@ -179,29 +329,29 @@
}
static int
-HIDAPI_DriverXboxOne_Rumble(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+HIDAPI_DriverXboxOne_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
- SDL_DriverXboxOne_Context *ctx = (SDL_DriverXboxOne_Context *)context;
- Uint8 rumble_packet[] = { 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF };
+ SDL_DriverXboxOne_Context *ctx = (SDL_DriverXboxOne_Context *)device->context;
- /* The Rock Candy Xbox One Controller limits the range of
- low frequency rumble strength in the range of [0 - 0x99]
- high frequency rumble strength in the range of [0 - 0x82]
+ if (ctx->bluetooth) {
+ Uint8 rumble_packet[] = { 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 };
- I think the valid range of rumble at the firmware level is [0 - 0x7F]
- */
- rumble_packet[2] = ctx->sequence++;
- rumble_packet[8] = (low_frequency_rumble >> 9);
- rumble_packet[9] = (high_frequency_rumble >> 9);
+ rumble_packet[4] = (low_frequency_rumble >> 8);
+ rumble_packet[5] = (high_frequency_rumble >> 8);
- if (hid_write(dev, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
- return SDL_SetError("Couldn't send rumble packet");
- }
-
- if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
- ctx->rumble_expiration = SDL_GetTicks() + duration_ms;
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ return SDL_SetError("Couldn't send rumble packet");
+ }
} else {
- ctx->rumble_expiration = 0;
+ Uint8 rumble_packet[] = { 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF };
+
+ /* Magnitude is 1..100 so scale the 16-bit input here */
+ rumble_packet[8] = low_frequency_rumble / 655;
+ rumble_packet[9] = high_frequency_rumble / 655;
+
+ if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
+ return SDL_SetError("Couldn't send rumble packet");
+ }
}
return 0;
}
@@ -231,6 +381,67 @@
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data[5] & 0x80) ? SDL_PRESSED : SDL_RELEASED);
}
+ /* Xbox One S report is 18 bytes
+ Xbox One Elite Series 1 report is 33 bytes, paddles in data[32], mode in data[32] & 0x10, both modes have mapped paddles by default
+ Paddle bits:
+ UL: 0x01 (A) UR: 0x02 (B)
+ LL: 0x04 (X) LR: 0x08 (Y)
+ Xbox One Elite Series 2 report is 38 bytes, paddles in data[18], mode in data[19], mode 0 has no mapped paddles by default
+ Paddle bits:
+ UL: 0x04 (A) UR: 0x01 (B)
+ LL: 0x08 (X) LR: 0x02 (Y)
+ */
+ if (ctx->has_paddles && (size == 33 || size == 38)) {
+ int paddle_index;
+ int button1_bit;
+ int button2_bit;
+ int button3_bit;
+ int button4_bit;
+ SDL_bool paddles_mapped;
+
+ if (size == 33) {
+ /* XBox One Elite Series 1 */
+ paddle_index = 32;
+ button1_bit = 0x01;
+ button2_bit = 0x02;
+ button3_bit = 0x04;
+ button4_bit = 0x08;
+
+ /* The mapped controller state is at offset 4, the raw state is at offset 18, compare them to see if the paddles are mapped */
+ paddles_mapped = (SDL_memcmp(&data[4], &data[18], 14) != 0);
+
+ } else /* if (size == 38) */ {
+ /* XBox One Elite Series 2 */
+ paddle_index = 18;
+ button1_bit = 0x04;
+ button2_bit = 0x01;
+ button3_bit = 0x08;
+ button4_bit = 0x02;
+ paddles_mapped = (data[19] != 0);
+ }
+#ifdef DEBUG_XBOX_PROTOCOL
+ SDL_Log(">>> Paddles: %d,%d,%d,%d mapped = %s\n",
+ (data[paddle_index] & button1_bit) ? 1 : 0,
+ (data[paddle_index] & button2_bit) ? 1 : 0,
+ (data[paddle_index] & button3_bit) ? 1 : 0,
+ (data[paddle_index] & button4_bit) ? 1 : 0,
+ paddles_mapped ? "TRUE" : "FALSE"
+ );
+#endif
+
+ if (paddles_mapped) {
+ /* Respect that the paddles are being used for other controls and don't pass them on to the app */
+ data[paddle_index] = 0;
+ }
+
+ if (ctx->last_state[paddle_index] != data[paddle_index]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MAX+0, (data[paddle_index] & button1_bit) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MAX+1, (data[paddle_index] & button2_bit) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MAX+2, (data[paddle_index] & button3_bit) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_MAX+3, (data[paddle_index] & button4_bit) ? SDL_PRESSED : SDL_RELEASED);
+ }
+ }
+
axis = ((int)*(Sint16*)(&data[6]) * 64) - 32768;
if (axis == 32704) {
axis = 32767;
@@ -266,45 +477,214 @@
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[4] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
}
-static SDL_bool
-HIDAPI_DriverXboxOne_Update(SDL_Joystick *joystick, hid_device *dev, void *context)
+static void
+HIDAPI_DriverXboxOneBluetooth_HandleStatePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXboxOne_Context *ctx, Uint8 *data, int size)
{
- SDL_DriverXboxOne_Context *ctx = (SDL_DriverXboxOne_Context *)context;
- Uint8 data[USB_PACKET_LENGTH];
- int size;
+ Sint16 axis;
- while ((size = hid_read_timeout(dev, data, sizeof(data), 0)) > 0) {
- switch (data[0]) {
- case 0x20:
- HIDAPI_DriverXboxOne_HandleStatePacket(joystick, dev, ctx, data, size);
+ if (ctx->last_state[14] != data[14]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_A, (data[14] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_B, (data[14] & 0x02) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_X, (data[14] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_Y, (data[14] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSHOULDER, (data[14] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, (data[14] & 0x80) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ if (ctx->last_state[15] != data[15]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_START, (data[15] & 0x08) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_LEFTSTICK, (data[15] & 0x20) ? SDL_PRESSED : SDL_RELEASED);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_RIGHTSTICK, (data[15] & 0x40) ? SDL_PRESSED : SDL_RELEASED);
+ if (ctx->wireless_protocol == XBOX_ONE_WIRELESS_PROTOCOL_UNKNOWN)
+ {
+ if (data[15] & 0x10) {
+ ctx->wireless_protocol = XBOX_ONE_WIRELESS_PROTOCOL_V2;
+ }
+ }
+ if (ctx->wireless_protocol == XBOX_ONE_WIRELESS_PROTOCOL_V2)
+ {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[15] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
+ }
+ }
+
+ if (ctx->last_state[16] != data[16]) {
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_BACK, (data[16] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+ }
+
+ if (ctx->last_state[13] != data[13]) {
+ SDL_bool dpad_up = SDL_FALSE;
+ SDL_bool dpad_down = SDL_FALSE;
+ SDL_bool dpad_left = SDL_FALSE;
+ SDL_bool dpad_right = SDL_FALSE;
+
+ switch (data[13]) {
+ case 1:
+ dpad_up = SDL_TRUE;
break;
- case 0x07:
- HIDAPI_DriverXboxOne_HandleModePacket(joystick, dev, ctx, data, size);
+ case 2:
+ dpad_up = SDL_TRUE;
+ dpad_right = SDL_TRUE;
break;
+ case 3:
+ dpad_right = SDL_TRUE;
+ break;
+ case 4:
+ dpad_right = SDL_TRUE;
+ dpad_down = SDL_TRUE;
+ break;
+ case 5:
+ dpad_down = SDL_TRUE;
+ break;
+ case 6:
+ dpad_left = SDL_TRUE;
+ dpad_down = SDL_TRUE;
+ break;
+ case 7:
+ dpad_left = SDL_TRUE;
+ break;
+ case 8:
+ dpad_up = SDL_TRUE;
+ dpad_left = SDL_TRUE;
+ break;
default:
-#ifdef DEBUG_JOYSTICK
- SDL_Log("Unknown Xbox One packet: 0x%.2x\n", data[0]);
-#endif
break;
}
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, dpad_down);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, dpad_up);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, dpad_right);
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
}
- if (ctx->rumble_expiration) {
- Uint32 now = SDL_GetTicks();
- if (SDL_TICKS_PASSED(now, ctx->rumble_expiration)) {
- HIDAPI_DriverXboxOne_Rumble(joystick, dev, context, 0, 0, 0);
+ axis = (int)*(Uint16*)(&data[1]) - 0x8000;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
+ axis = (int)*(Uint16*)(&data[3]) - 0x8000;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTY, axis);
+ axis = (int)*(Uint16*)(&data[5]) - 0x8000;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTX, axis);
+ axis = (int)*(Uint16*)(&data[7]) - 0x8000;
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
+
+ axis = ((int)*(Sint16*)(&data[9]) * 64) - 32768;
+ if (axis == 32704) {
+ axis = 32767;
+ }
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
+
+ axis = ((int)*(Sint16*)(&data[11]) * 64) - 32768;
+ if (axis == 32704) {
+ axis = 32767;
+ }
+ SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
+
+ SDL_memcpy(ctx->last_state, data, SDL_min(size, sizeof(ctx->last_state)));
+}
+
+static void
+HIDAPI_DriverXboxOneBluetooth_HandleGuidePacket(SDL_Joystick *joystick, hid_device *dev, SDL_DriverXboxOne_Context *ctx, Uint8 *data, int size)
+{
+ ctx->wireless_protocol = XBOX_ONE_WIRELESS_PROTOCOL_V1;
+ SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[1] & 0x01) ? SDL_PRESSED : SDL_RELEASED);
+}
+
+static SDL_bool
+HIDAPI_DriverXboxOne_UpdateDevice(SDL_HIDAPI_Device *device)
+{
+ SDL_DriverXboxOne_Context *ctx = (SDL_DriverXboxOne_Context *)device->context;
+ SDL_Joystick *joystick = NULL;
+ Uint8 data[USB_PACKET_LENGTH];
+ int size;
+
+ if (device->num_joysticks > 0) {
+ joystick = SDL_JoystickFromInstanceID(device->joysticks[0]);
+ }
+ if (!joystick) {
+ return SDL_FALSE;
+ }
+
+ if (!ctx->initialized &&
+ !ControllerSendsWaitingForInit(device->vendor_id, device->product_id)) {
+ if (SDL_TICKS_PASSED(SDL_GetTicks(), ctx->start_time + CONTROLLER_INIT_DELAY_MS)) {
+ if (!SendControllerInit(device, ctx)) {
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ return SDL_FALSE;
+ }
+ ctx->initialized = SDL_TRUE;
}
}
+ while ((size = hid_read_timeout(device->dev, data, sizeof(data), 0)) > 0) {
+#ifdef DEBUG_XBOX_PROTOCOL
+ DumpPacket("Xbox One packet: size = %d", data, size);
+#endif
+ if (ctx->bluetooth) {
+ switch (data[0]) {
+ case 0x01:
+ HIDAPI_DriverXboxOneBluetooth_HandleStatePacket(joystick, device->dev, ctx, data, size);
+ break;
+ case 0x02:
+ HIDAPI_DriverXboxOneBluetooth_HandleGuidePacket(joystick, device->dev, ctx, data, size);
+ break;
+ default:
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Unknown Xbox One packet: 0x%.2x\n", data[0]);
+#endif
+ break;
+ }
+ } else {
+ switch (data[0]) {
+ case 0x02:
+ /* Controller is connected and waiting for initialization */
+ if (!ctx->initialized) {
+#ifdef DEBUG_XBOX_PROTOCOL
+ SDL_Log("Delay after init: %ums\n", SDL_GetTicks() - ctx->start_time);
+#endif
+ if (!SendControllerInit(device, ctx)) {
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ return SDL_FALSE;
+ }
+ ctx->initialized = SDL_TRUE;
+ }
+ break;
+ case 0x03:
+ /* Controller heartbeat */
+ break;
+ case 0x20:
+ HIDAPI_DriverXboxOne_HandleStatePacket(joystick, device->dev, ctx, data, size);
+ break;
+ case 0x07:
+ HIDAPI_DriverXboxOne_HandleModePacket(joystick, device->dev, ctx, data, size);
+ break;
+ default:
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Unknown Xbox One packet: 0x%.2x\n", data[0]);
+#endif
+ break;
+ }
+ }
+ }
+
+ if (size < 0) {
+ /* Read error, device is disconnected */
+ HIDAPI_JoystickDisconnected(device, joystick->instance_id);
+ }
return (size >= 0);
}
static void
-HIDAPI_DriverXboxOne_Quit(SDL_Joystick *joystick, hid_device *dev, void *context)
+HIDAPI_DriverXboxOne_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick)
{
- SDL_free(context);
+ hid_close(device->dev);
+ device->dev = NULL;
+
+ SDL_free(device->context);
+ device->context = NULL;
}
+static void
+HIDAPI_DriverXboxOne_FreeDevice(SDL_HIDAPI_Device *device)
+{
+}
+
SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXboxOne =
{
SDL_HINT_JOYSTICK_HIDAPI_XBOX,
@@ -311,10 +691,14 @@
SDL_TRUE,
HIDAPI_DriverXboxOne_IsSupportedDevice,
HIDAPI_DriverXboxOne_GetDeviceName,
- HIDAPI_DriverXboxOne_Init,
- HIDAPI_DriverXboxOne_Rumble,
- HIDAPI_DriverXboxOne_Update,
- HIDAPI_DriverXboxOne_Quit
+ HIDAPI_DriverXboxOne_InitDevice,
+ HIDAPI_DriverXboxOne_GetDevicePlayerIndex,
+ HIDAPI_DriverXboxOne_SetDevicePlayerIndex,
+ HIDAPI_DriverXboxOne_UpdateDevice,
+ HIDAPI_DriverXboxOne_OpenJoystick,
+ HIDAPI_DriverXboxOne_RumbleJoystick,
+ HIDAPI_DriverXboxOne_CloseJoystick,
+ HIDAPI_DriverXboxOne_FreeDevice
};
#endif /* SDL_JOYSTICK_HIDAPI_XBOXONE */
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapijoystick.c
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapijoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,15 +22,18 @@
#ifdef SDL_JOYSTICK_HIDAPI
+#include "SDL_assert.h"
+#include "SDL_atomic.h"
#include "SDL_endian.h"
#include "SDL_hints.h"
#include "SDL_log.h"
-#include "SDL_mutex.h"
#include "SDL_thread.h"
#include "SDL_timer.h"
#include "SDL_joystick.h"
#include "../SDL_sysjoystick.h"
#include "SDL_hidapijoystick_c.h"
+#include "SDL_hidapi_rumble.h"
+#include "../../SDL_hints_c.h"
#if defined(__WIN32__)
#include "../../core/windows/SDL_windows.h"
@@ -40,6 +43,7 @@
#include <CoreFoundation/CoreFoundation.h>
#include <mach/mach.h>
#include <IOKit/IOKitLib.h>
+#include <IOKit/hid/IOHIDDevice.h>
#include <IOKit/usb/USBSpec.h>
#endif
@@ -52,33 +56,9 @@
struct joystick_hwdata
{
- SDL_HIDAPI_DeviceDriver *driver;
- void *context;
-
- SDL_mutex *mutex;
- hid_device *dev;
+ SDL_HIDAPI_Device *device;
};
-typedef struct _SDL_HIDAPI_Device
-{
- SDL_JoystickID instance_id;
- char *name;
- char *path;
- Uint16 vendor_id;
- Uint16 product_id;
- Uint16 version;
- SDL_JoystickGUID guid;
- int interface_number; /* Available on Windows and Linux */
- Uint16 usage_page; /* Available on Windows and Mac OS X */
- Uint16 usage; /* Available on Windows and Mac OS X */
- SDL_HIDAPI_DeviceDriver *driver;
-
- /* Used during scanning for device changes */
- SDL_bool seen;
-
- struct _SDL_HIDAPI_Device *next;
-} SDL_HIDAPI_Device;
-
static SDL_HIDAPI_DeviceDriver *SDL_HIDAPI_drivers[] = {
#ifdef SDL_JOYSTICK_HIDAPI_PS4
&SDL_HIDAPI_DriverPS4,
@@ -91,13 +71,21 @@
#endif
#ifdef SDL_JOYSTICK_HIDAPI_XBOX360
&SDL_HIDAPI_DriverXbox360,
+ &SDL_HIDAPI_DriverXbox360W,
#endif
#ifdef SDL_JOYSTICK_HIDAPI_XBOXONE
&SDL_HIDAPI_DriverXboxOne,
#endif
+#ifdef SDL_JOYSTICK_HIDAPI_GAMECUBE
+ &SDL_HIDAPI_DriverGameCube,
+#endif
};
+static int SDL_HIDAPI_numdrivers = 0;
+static SDL_SpinLock SDL_HIDAPI_spinlock;
static SDL_HIDAPI_Device *SDL_HIDAPI_devices;
static int SDL_HIDAPI_numjoysticks = 0;
+static SDL_bool initialized = SDL_FALSE;
+static SDL_bool shutting_down = SDL_FALSE;
#if defined(SDL_USE_LIBUDEV)
static const SDL_UDEV_Symbols * usyms = NULL;
@@ -231,12 +219,15 @@
SDL_HIDAPI_discovery.m_notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
if (SDL_HIDAPI_discovery.m_notificationPort) {
{
- CFMutableDictionaryRef matchingDict = IOServiceMatching("IOUSBDevice");
-
- /* Note: IOServiceAddMatchingNotification consumes the reference to matchingDict */
io_iterator_t portIterator = 0;
io_object_t entry;
- if (IOServiceAddMatchingNotification(SDL_HIDAPI_discovery.m_notificationPort, kIOMatchedNotification, matchingDict, CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator) == 0) {
+ IOReturn result = IOServiceAddMatchingNotification(
+ SDL_HIDAPI_discovery.m_notificationPort,
+ kIOFirstMatchNotification,
+ IOServiceMatching(kIOHIDDeviceKey),
+ CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator);
+
+ if (result == 0) {
/* Must drain the existing iterator, or we won't receive new notifications */
while ((entry = IOIteratorNext(portIterator)) != 0) {
IOObjectRelease(entry);
@@ -247,12 +238,15 @@
}
}
{
- CFMutableDictionaryRef matchingDict = IOServiceMatching("IOBluetoothDevice");
-
- /* Note: IOServiceAddMatchingNotification consumes the reference to matchingDict */
io_iterator_t portIterator = 0;
io_object_t entry;
- if (IOServiceAddMatchingNotification(SDL_HIDAPI_discovery.m_notificationPort, kIOMatchedNotification, matchingDict, CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator) == 0) {
+ IOReturn result = IOServiceAddMatchingNotification(
+ SDL_HIDAPI_discovery.m_notificationPort,
+ kIOTerminatedNotification,
+ IOServiceMatching(kIOHIDDeviceKey),
+ CallbackIOServiceFunc, &SDL_HIDAPI_discovery.m_bHaveDevicesChanged, &portIterator);
+
+ if (result == 0) {
/* Must drain the existing iterator, or we won't receive new notifications */
while ((entry = IOIteratorNext(portIterator)) != 0) {
IOObjectRelease(entry);
@@ -393,182 +387,18 @@
#endif
}
+static void HIDAPI_JoystickDetect(void);
+static void HIDAPI_JoystickClose(SDL_Joystick * joystick);
-const char *
-HIDAPI_XboxControllerName(Uint16 vendor_id, Uint16 product_id)
-{
- static struct
- {
- Uint32 vidpid;
- const char *name;
- } names[] = {
- { MAKE_VIDPID(0x0079, 0x18d4), "GPD Win 2 X-Box Controller" },
- { MAKE_VIDPID(0x044f, 0xb326), "Thrustmaster Gamepad GP XID" },
- { MAKE_VIDPID(0x045e, 0x028e), "Microsoft X-Box 360 pad" },
- { MAKE_VIDPID(0x045e, 0x028f), "Microsoft X-Box 360 pad v2" },
- { MAKE_VIDPID(0x045e, 0x0291), "Xbox 360 Wireless Receiver (XBOX)" },
- { MAKE_VIDPID(0x045e, 0x02d1), "Microsoft X-Box One pad" },
- { MAKE_VIDPID(0x045e, 0x02dd), "Microsoft X-Box One pad (Firmware 2015)" },
- { MAKE_VIDPID(0x045e, 0x02e3), "Microsoft X-Box One Elite pad" },
- { MAKE_VIDPID(0x045e, 0x02ea), "Microsoft X-Box One S pad" },
- { MAKE_VIDPID(0x045e, 0x02ff), "Microsoft X-Box One pad" },
- { MAKE_VIDPID(0x045e, 0x0719), "Xbox 360 Wireless Receiver" },
- { MAKE_VIDPID(0x046d, 0xc21d), "Logitech Gamepad F310" },
- { MAKE_VIDPID(0x046d, 0xc21e), "Logitech Gamepad F510" },
- { MAKE_VIDPID(0x046d, 0xc21f), "Logitech Gamepad F710" },
- { MAKE_VIDPID(0x046d, 0xc242), "Logitech Chillstream Controller" },
- { MAKE_VIDPID(0x046d, 0xcaa3), "Logitech DriveFx Racing Wheel" },
- { MAKE_VIDPID(0x056e, 0x2004), "Elecom JC-U3613M" },
- { MAKE_VIDPID(0x06a3, 0xf51a), "Saitek P3600" },
- { MAKE_VIDPID(0x0738, 0x4716), "Mad Catz Wired Xbox 360 Controller" },
- { MAKE_VIDPID(0x0738, 0x4718), "Mad Catz Street Fighter IV FightStick SE" },
- { MAKE_VIDPID(0x0738, 0x4726), "Mad Catz Xbox 360 Controller" },
- { MAKE_VIDPID(0x0738, 0x4728), "Mad Catz Street Fighter IV FightPad" },
- { MAKE_VIDPID(0x0738, 0x4736), "Mad Catz MicroCon Gamepad" },
- { MAKE_VIDPID(0x0738, 0x4738), "Mad Catz Wired Xbox 360 Controller (SFIV)" },
- { MAKE_VIDPID(0x0738, 0x4740), "Mad Catz Beat Pad" },
- { MAKE_VIDPID(0x0738, 0x4758), "Mad Catz Arcade Game Stick" },
- { MAKE_VIDPID(0x0738, 0x4a01), "Mad Catz FightStick TE 2" },
- { MAKE_VIDPID(0x0738, 0x9871), "Mad Catz Portable Drum" },
- { MAKE_VIDPID(0x0738, 0xb726), "Mad Catz Xbox controller - MW2" },
- { MAKE_VIDPID(0x0738, 0xb738), "Mad Catz MVC2TE Stick 2" },
- { MAKE_VIDPID(0x0738, 0xbeef), "Mad Catz JOYTECH NEO SE Advanced GamePad" },
- { MAKE_VIDPID(0x0738, 0xcb02), "Saitek Cyborg Rumble Pad - PC/Xbox 360" },
- { MAKE_VIDPID(0x0738, 0xcb03), "Saitek P3200 Rumble Pad - PC/Xbox 360" },
- { MAKE_VIDPID(0x0738, 0xcb29), "Saitek Aviator Stick AV8R02" },
- { MAKE_VIDPID(0x0738, 0xf738), "Super SFIV FightStick TE S" },
- { MAKE_VIDPID(0x07ff, 0xffff), "Mad Catz GamePad" },
- { MAKE_VIDPID(0x0e6f, 0x0105), "HSM3 Xbox360 dancepad" },
- { MAKE_VIDPID(0x0e6f, 0x0113), "Afterglow AX.1 Gamepad for Xbox 360" },
- { MAKE_VIDPID(0x0e6f, 0x011f), "Rock Candy Gamepad Wired Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0131), "PDP EA Sports Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0133), "Xbox 360 Wired Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0139), "Afterglow Prismatic Wired Controller" },
- { MAKE_VIDPID(0x0e6f, 0x013a), "PDP Xbox One Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0146), "Rock Candy Wired Controller for Xbox One" },
- { MAKE_VIDPID(0x0e6f, 0x0147), "PDP Marvel Xbox One Controller" },
- { MAKE_VIDPID(0x0e6f, 0x015c), "PDP Xbox One Arcade Stick" },
- { MAKE_VIDPID(0x0e6f, 0x0161), "PDP Xbox One Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0162), "PDP Xbox One Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0163), "PDP Xbox One Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0164), "PDP Battlefield One" },
- { MAKE_VIDPID(0x0e6f, 0x0165), "PDP Titanfall 2" },
- { MAKE_VIDPID(0x0e6f, 0x0201), "Pelican PL-3601 'TSZ' Wired Xbox 360 Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0213), "Afterglow Gamepad for Xbox 360" },
- { MAKE_VIDPID(0x0e6f, 0x021f), "Rock Candy Gamepad for Xbox 360" },
- { MAKE_VIDPID(0x0e6f, 0x0246), "Rock Candy Gamepad for Xbox One 2015" },
- { MAKE_VIDPID(0x0e6f, 0x02a4), "PDP Wired Controller for Xbox One - Stealth Series" },
- { MAKE_VIDPID(0x0e6f, 0x02ab), "PDP Controller for Xbox One" },
- { MAKE_VIDPID(0x0e6f, 0x0301), "Logic3 Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0346), "Rock Candy Gamepad for Xbox One 2016" },
- { MAKE_VIDPID(0x0e6f, 0x0401), "Logic3 Controller" },
- { MAKE_VIDPID(0x0e6f, 0x0413), "Afterglow AX.1 Gamepad for Xbox 360" },
- { MAKE_VIDPID(0x0e6f, 0x0501), "PDP Xbox 360 Controller" },
- { MAKE_VIDPID(0x0e6f, 0xf900), "PDP Afterglow AX.1" },
- { MAKE_VIDPID(0x0f0d, 0x000a), "Hori Co. DOA4 FightStick" },
- { MAKE_VIDPID(0x0f0d, 0x000c), "Hori PadEX Turbo" },
- { MAKE_VIDPID(0x0f0d, 0x000d), "Hori Fighting Stick EX2" },
- { MAKE_VIDPID(0x0f0d, 0x0016), "Hori Real Arcade Pro.EX" },
- { MAKE_VIDPID(0x0f0d, 0x001b), "Hori Real Arcade Pro VX" },
- { MAKE_VIDPID(0x0f0d, 0x0063), "Hori Real Arcade Pro Hayabusa (USA) Xbox One" },
- { MAKE_VIDPID(0x0f0d, 0x0067), "HORIPAD ONE" },
- { MAKE_VIDPID(0x0f0d, 0x0078), "Hori Real Arcade Pro V Kai Xbox One" },
- { MAKE_VIDPID(0x11c9, 0x55f0), "Nacon GC-100XF" },
- { MAKE_VIDPID(0x12ab, 0x0004), "Honey Bee Xbox360 dancepad" },
- { MAKE_VIDPID(0x12ab, 0x0301), "PDP AFTERGLOW AX.1" },
- { MAKE_VIDPID(0x12ab, 0x0303), "Mortal Kombat Klassic FightStick" },
- { MAKE_VIDPID(0x1430, 0x4748), "RedOctane Guitar Hero X-plorer" },
- { MAKE_VIDPID(0x1430, 0xf801), "RedOctane Controller" },
- { MAKE_VIDPID(0x146b, 0x0601), "BigBen Interactive XBOX 360 Controller" },
- { MAKE_VIDPID(0x1532, 0x0037), "Razer Sabertooth" },
- { MAKE_VIDPID(0x1532, 0x0a00), "Razer Atrox Arcade Stick" },
- { MAKE_VIDPID(0x1532, 0x0a03), "Razer Wildcat" },
- { MAKE_VIDPID(0x15e4, 0x3f00), "Power A Mini Pro Elite" },
- { MAKE_VIDPID(0x15e4, 0x3f0a), "Xbox Airflo wired controller" },
- { MAKE_VIDPID(0x15e4, 0x3f10), "Batarang Xbox 360 controller" },
- { MAKE_VIDPID(0x162e, 0xbeef), "Joytech Neo-Se Take2" },
- { MAKE_VIDPID(0x1689, 0xfd00), "Razer Onza Tournament Edition" },
- { MAKE_VIDPID(0x1689, 0xfd01), "Razer Onza Classic Edition" },
- { MAKE_VIDPID(0x1689, 0xfe00), "Razer Sabertooth" },
- { MAKE_VIDPID(0x1bad, 0x0002), "Harmonix Rock Band Guitar" },
- { MAKE_VIDPID(0x1bad, 0x0003), "Harmonix Rock Band Drumkit" },
- { MAKE_VIDPID(0x1bad, 0x0130), "Ion Drum Rocker" },
- { MAKE_VIDPID(0x1bad, 0xf016), "Mad Catz Xbox 360 Controller" },
- { MAKE_VIDPID(0x1bad, 0xf018), "Mad Catz Street Fighter IV SE Fighting Stick" },
- { MAKE_VIDPID(0x1bad, 0xf019), "Mad Catz Brawlstick for Xbox 360" },
- { MAKE_VIDPID(0x1bad, 0xf021), "Mad Cats Ghost Recon FS GamePad" },
- { MAKE_VIDPID(0x1bad, 0xf023), "MLG Pro Circuit Controller (Xbox)" },
- { MAKE_VIDPID(0x1bad, 0xf025), "Mad Catz Call Of Duty" },
- { MAKE_VIDPID(0x1bad, 0xf027), "Mad Catz FPS Pro" },
- { MAKE_VIDPID(0x1bad, 0xf028), "Street Fighter IV FightPad" },
- { MAKE_VIDPID(0x1bad, 0xf02e), "Mad Catz Fightpad" },
- { MAKE_VIDPID(0x1bad, 0xf030), "Mad Catz Xbox 360 MC2 MicroCon Racing Wheel" },
- { MAKE_VIDPID(0x1bad, 0xf036), "Mad Catz MicroCon GamePad Pro" },
- { MAKE_VIDPID(0x1bad, 0xf038), "Street Fighter IV FightStick TE" },
- { MAKE_VIDPID(0x1bad, 0xf039), "Mad Catz MvC2 TE" },
- { MAKE_VIDPID(0x1bad, 0xf03a), "Mad Catz SFxT Fightstick Pro" },
- { MAKE_VIDPID(0x1bad, 0xf03d), "Street Fighter IV Arcade Stick TE - Chun Li" },
- { MAKE_VIDPID(0x1bad, 0xf03e), "Mad Catz MLG FightStick TE" },
- { MAKE_VIDPID(0x1bad, 0xf03f), "Mad Catz FightStick SoulCaliber" },
- { MAKE_VIDPID(0x1bad, 0xf042), "Mad Catz FightStick TES+" },
- { MAKE_VIDPID(0x1bad, 0xf080), "Mad Catz FightStick TE2" },
- { MAKE_VIDPID(0x1bad, 0xf501), "HoriPad EX2 Turbo" },
- { MAKE_VIDPID(0x1bad, 0xf502), "Hori Real Arcade Pro.VX SA" },
- { MAKE_VIDPID(0x1bad, 0xf503), "Hori Fighting Stick VX" },
- { MAKE_VIDPID(0x1bad, 0xf504), "Hori Real Arcade Pro. EX" },
- { MAKE_VIDPID(0x1bad, 0xf505), "Hori Fighting Stick EX2B" },
- { MAKE_VIDPID(0x1bad, 0xf506), "Hori Real Arcade Pro.EX Premium VLX" },
- { MAKE_VIDPID(0x1bad, 0xf900), "Harmonix Xbox 360 Controller" },
- { MAKE_VIDPID(0x1bad, 0xf901), "Gamestop Xbox 360 Controller" },
- { MAKE_VIDPID(0x1bad, 0xf903), "Tron Xbox 360 controller" },
- { MAKE_VIDPID(0x1bad, 0xf904), "PDP Versus Fighting Pad" },
- { MAKE_VIDPID(0x1bad, 0xf906), "MortalKombat FightStick" },
- { MAKE_VIDPID(0x1bad, 0xfa01), "MadCatz GamePad" },
- { MAKE_VIDPID(0x1bad, 0xfd00), "Razer Onza TE" },
- { MAKE_VIDPID(0x1bad, 0xfd01), "Razer Onza" },
- { MAKE_VIDPID(0x24c6, 0x5000), "Razer Atrox Arcade Stick" },
- { MAKE_VIDPID(0x24c6, 0x5300), "PowerA MINI PROEX Controller" },
- { MAKE_VIDPID(0x24c6, 0x5303), "Xbox Airflo wired controller" },
- { MAKE_VIDPID(0x24c6, 0x530a), "Xbox 360 Pro EX Controller" },
- { MAKE_VIDPID(0x24c6, 0x531a), "PowerA Pro Ex" },
- { MAKE_VIDPID(0x24c6, 0x5397), "FUS1ON Tournament Controller" },
- { MAKE_VIDPID(0x24c6, 0x541a), "PowerA Xbox One Mini Wired Controller" },
- { MAKE_VIDPID(0x24c6, 0x542a), "Xbox ONE spectra" },
- { MAKE_VIDPID(0x24c6, 0x543a), "PowerA Xbox One wired controller" },
- { MAKE_VIDPID(0x24c6, 0x5500), "Hori XBOX 360 EX 2 with Turbo" },
- { MAKE_VIDPID(0x24c6, 0x5501), "Hori Real Arcade Pro VX-SA" },
- { MAKE_VIDPID(0x24c6, 0x5502), "Hori Fighting Stick VX Alt" },
- { MAKE_VIDPID(0x24c6, 0x5503), "Hori Fighting Edge" },
- { MAKE_VIDPID(0x24c6, 0x5506), "Hori SOULCALIBUR V Stick" },
- { MAKE_VIDPID(0x24c6, 0x550d), "Hori GEM Xbox controller" },
- { MAKE_VIDPID(0x24c6, 0x550e), "Hori Real Arcade Pro V Kai 360" },
- { MAKE_VIDPID(0x24c6, 0x551a), "PowerA FUSION Pro Controller" },
- { MAKE_VIDPID(0x24c6, 0x561a), "PowerA FUSION Controller" },
- { MAKE_VIDPID(0x24c6, 0x5b00), "ThrustMaster Ferrari 458 Racing Wheel" },
- { MAKE_VIDPID(0x24c6, 0x5b02), "Thrustmaster, Inc. GPX Controller" },
- { MAKE_VIDPID(0x24c6, 0x5b03), "Thrustmaster Ferrari 458 Racing Wheel" },
- { MAKE_VIDPID(0x24c6, 0x5d04), "Razer Sabertooth" },
- { MAKE_VIDPID(0x24c6, 0xfafe), "Rock Candy Gamepad for Xbox 360" },
- };
- int i;
- Uint32 vidpid = MAKE_VIDPID(vendor_id, product_id);
-
- for (i = 0; i < SDL_arraysize(names); ++i) {
- if (vidpid == names[i].vidpid) {
- return names[i].name;
- }
- }
- return NULL;
-}
-
static SDL_bool
-HIDAPI_IsDeviceSupported(Uint16 vendor_id, Uint16 product_id, Uint16 version)
+HIDAPI_IsDeviceSupported(Uint16 vendor_id, Uint16 product_id, Uint16 version, const char *name)
{
int i;
+ SDL_GameControllerType type = SDL_GetJoystickGameControllerType(name, vendor_id, product_id, -1, 0, 0, 0);
for (i = 0; i < SDL_arraysize(SDL_HIDAPI_drivers); ++i) {
SDL_HIDAPI_DeviceDriver *driver = SDL_HIDAPI_drivers[i];
- if (driver->enabled && driver->IsSupportedDevice(vendor_id, product_id, version, -1)) {
+ if (driver->enabled && driver->IsSupportedDevice(name, type, vendor_id, product_id, version, -1, 0, 0, 0)) {
return SDL_TRUE;
}
}
@@ -583,6 +413,7 @@
const Uint16 USAGE_GAMEPAD = 0x0005;
const Uint16 USAGE_MULTIAXISCONTROLLER = 0x0008;
int i;
+ SDL_GameControllerType type;
if (SDL_ShouldIgnoreJoystick(device->name, device->guid)) {
return NULL;
@@ -595,9 +426,10 @@
return NULL;
}
+ type = SDL_GetJoystickGameControllerType(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol);
for (i = 0; i < SDL_arraysize(SDL_HIDAPI_drivers); ++i) {
SDL_HIDAPI_DeviceDriver *driver = SDL_HIDAPI_drivers[i];
- if (driver->enabled && driver->IsSupportedDevice(device->vendor_id, device->product_id, device->version, device->interface_number)) {
+ if (driver->enabled && driver->IsSupportedDevice(device->name, type, device->vendor_id, device->product_id, device->version, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol)) {
return driver;
}
}
@@ -605,19 +437,22 @@
}
static SDL_HIDAPI_Device *
-HIDAPI_GetJoystickByIndex(int device_index)
+HIDAPI_GetDeviceByIndex(int device_index, SDL_JoystickID *pJoystickID)
{
SDL_HIDAPI_Device *device = SDL_HIDAPI_devices;
while (device) {
if (device->driver) {
- if (device_index == 0) {
- break;
+ if (device_index < device->num_joysticks) {
+ if (pJoystickID) {
+ *pJoystickID = device->joysticks[device_index];
+ }
+ return device;
}
- --device_index;
+ device_index -= device->num_joysticks;
}
device = device->next;
}
- return device;
+ return NULL;
}
static SDL_HIDAPI_Device *
@@ -634,12 +469,52 @@
return device;
}
+static void
+HIDAPI_SetupDeviceDriver(SDL_HIDAPI_Device *device)
+{
+ if (device->driver) {
+ /* Already setup */
+ return;
+ }
+
+ device->driver = HIDAPI_GetDeviceDriver(device);
+ if (device->driver) {
+ const char *name = device->driver->GetDeviceName(device->vendor_id, device->product_id);
+ if (name) {
+ SDL_free(device->name);
+ device->name = SDL_strdup(name);
+ }
+ }
+
+ /* Initialize the device, which may cause a connected event */
+ if (device->driver && !device->driver->InitDevice(device)) {
+ device->driver = NULL;
+ }
+}
+
+static void
+HIDAPI_CleanupDeviceDriver(SDL_HIDAPI_Device *device)
+{
+ if (!device->driver) {
+ /* Already cleaned up */
+ return;
+ }
+
+ /* Disconnect any joysticks */
+ while (device->num_joysticks) {
+ HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
+ }
+
+ device->driver->FreeDevice(device);
+ device->driver = NULL;
+}
+
static void SDLCALL
SDL_HIDAPIDriverHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
int i;
- SDL_HIDAPI_Device *device = SDL_HIDAPI_devices;
- SDL_bool enabled = (!hint || !*hint || ((*hint != '0') && (SDL_strcasecmp(hint, "false") != 0)));
+ SDL_HIDAPI_Device *device;
+ SDL_bool enabled = SDL_GetStringBoolean(hint, SDL_TRUE);
if (SDL_strcmp(name, SDL_HINT_JOYSTICK_HIDAPI) == 0) {
for (i = 0; i < SDL_arraysize(SDL_HIDAPI_drivers); ++i) {
@@ -651,42 +526,50 @@
SDL_HIDAPI_DeviceDriver *driver = SDL_HIDAPI_drivers[i];
if (SDL_strcmp(name, driver->hint) == 0) {
driver->enabled = enabled;
- break;
}
}
}
+ SDL_HIDAPI_numdrivers = 0;
+ for (i = 0; i < SDL_arraysize(SDL_HIDAPI_drivers); ++i) {
+ SDL_HIDAPI_DeviceDriver *driver = SDL_HIDAPI_drivers[i];
+ if (driver->enabled) {
+ ++SDL_HIDAPI_numdrivers;
+ }
+ }
+
/* Update device list if driver availability changes */
- while (device) {
- if (device->driver) {
- if (!device->driver->enabled) {
- device->driver = NULL;
+ SDL_LockJoysticks();
- --SDL_HIDAPI_numjoysticks;
-
- SDL_PrivateJoystickRemoved(device->instance_id);
- }
- } else {
- device->driver = HIDAPI_GetDeviceDriver(device);
- if (device->driver) {
- device->instance_id = SDL_GetNextJoystickInstanceID();
-
- ++SDL_HIDAPI_numjoysticks;
-
- SDL_PrivateJoystickAdded(device->instance_id);
- }
+ for (device = SDL_HIDAPI_devices; device; device = device->next) {
+ if (device->driver && !device->driver->enabled) {
+ HIDAPI_CleanupDeviceDriver(device);
}
- device = device->next;
+ HIDAPI_SetupDeviceDriver(device);
}
+
+ SDL_UnlockJoysticks();
}
-static void HIDAPI_JoystickDetect(void);
-
static int
HIDAPI_JoystickInit(void)
{
int i;
+ if (initialized) {
+ return 0;
+ }
+
+#if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__)
+ /* The hidapi framwork is weak-linked on Apple platforms */
+ int HID_API_EXPORT HID_API_CALL hid_init(void) __attribute__((weak_import));
+
+ if (hid_init == NULL) {
+ SDL_SetError("Couldn't initialize hidapi, framework not available");
+ return -1;
+ }
+#endif /* __MACOSX__ || __IPHONEOS__ || __TVOS__ */
+
if (hid_init() < 0) {
SDL_SetError("Couldn't initialize hidapi");
return -1;
@@ -700,9 +583,63 @@
SDL_HIDAPIDriverHintChanged, NULL);
HIDAPI_InitializeDiscovery();
HIDAPI_JoystickDetect();
+ HIDAPI_UpdateDevices();
+
+ initialized = SDL_TRUE;
+
return 0;
}
+SDL_bool
+HIDAPI_JoystickConnected(SDL_HIDAPI_Device *device, SDL_JoystickID *pJoystickID)
+{
+ SDL_JoystickID joystickID;
+ SDL_JoystickID *joysticks = (SDL_JoystickID *)SDL_realloc(device->joysticks, (device->num_joysticks + 1)*sizeof(*device->joysticks));
+ if (!joysticks) {
+ return SDL_FALSE;
+ }
+
+ joystickID = SDL_GetNextJoystickInstanceID();
+ device->joysticks = joysticks;
+ device->joysticks[device->num_joysticks++] = joystickID;
+ ++SDL_HIDAPI_numjoysticks;
+
+ SDL_PrivateJoystickAdded(joystickID);
+
+ if (pJoystickID) {
+ *pJoystickID = joystickID;
+ }
+ return SDL_TRUE;
+}
+
+void
+HIDAPI_JoystickDisconnected(SDL_HIDAPI_Device *device, SDL_JoystickID joystickID)
+{
+ int i;
+
+ for (i = 0; i < device->num_joysticks; ++i) {
+ if (device->joysticks[i] == joystickID) {
+ SDL_Joystick *joystick = SDL_JoystickFromInstanceID(joystickID);
+ if (joystick) {
+ HIDAPI_JoystickClose(joystick);
+ }
+
+ SDL_memmove(&device->joysticks[i], &device->joysticks[i+1], device->num_joysticks - i - 1);
+ --device->num_joysticks;
+ --SDL_HIDAPI_numjoysticks;
+ if (device->num_joysticks == 0) {
+ SDL_free(device->joysticks);
+ device->joysticks = NULL;
+ }
+
+ if (!shutting_down) {
+ SDL_PrivateJoystickRemoved(joystickID);
+ }
+ return;
+ }
+ }
+}
+
static int
HIDAPI_JoystickGetCount(void)
{
@@ -723,12 +660,19 @@
if (!device) {
return;
}
- device->instance_id = -1;
+ device->path = SDL_strdup(info->path);
+ if (!device->path) {
+ SDL_free(device);
+ return;
+ }
device->seen = SDL_TRUE;
device->vendor_id = info->vendor_id;
device->product_id = info->product_id;
device->version = info->release_number;
device->interface_number = info->interface_number;
+ device->interface_class = info->interface_class;
+ device->interface_subclass = info->interface_subclass;
+ device->interface_protocol = info->interface_protocol;
device->usage_page = info->usage_page;
device->usage = info->usage;
{
@@ -751,9 +695,17 @@
device->guid.data[14] = 'h';
device->guid.data[15] = 0;
}
+ device->dev_lock = SDL_CreateMutex();
/* Need the device name before getting the driver to know whether to ignore this device */
+ if (!device->name) {
+ const char *name = SDL_GetCustomJoystickName(device->vendor_id, device->product_id);
+ if (name) {
+ device->name = SDL_strdup(name);
+ }
+ }
if (!device->name && info->manufacturer_string && info->product_string) {
+ const char *manufacturer_remapped;
char *manufacturer_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->manufacturer_string, (SDL_wcslen(info->manufacturer_string)+1)*sizeof(wchar_t));
char *product_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t));
if (!manufacturer_string && !product_string) {
@@ -765,11 +717,22 @@
product_string = SDL_iconv_string("UTF-8", "UCS-4-INTERNAL", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t));
}
}
+
+ manufacturer_remapped = SDL_GetCustomJoystickManufacturer(manufacturer_string);
+ if (manufacturer_remapped != manufacturer_string) {
+ SDL_free(manufacturer_string);
+ manufacturer_string = SDL_strdup(manufacturer_remapped);
+ }
+
if (manufacturer_string && product_string) {
size_t name_size = (SDL_strlen(manufacturer_string) + 1 + SDL_strlen(product_string) + 1);
device->name = (char *)SDL_malloc(name_size);
if (device->name) {
- SDL_snprintf(device->name, name_size, "%s %s", manufacturer_string, product_string);
+ if (SDL_strncasecmp(manufacturer_string, product_string, SDL_strlen(manufacturer_string)) == 0) {
+ SDL_strlcpy(device->name, product_string, name_size);
+ } else {
+ SDL_snprintf(device->name, name_size, "%s %s", manufacturer_string, product_string);
+ }
}
}
if (manufacturer_string) {
@@ -783,6 +746,7 @@
size_t name_size = (6 + 1 + 6 + 1);
device->name = (char *)SDL_malloc(name_size);
if (!device->name) {
+ SDL_free(device->path);
SDL_free(device);
return;
}
@@ -789,27 +753,6 @@
SDL_snprintf(device->name, name_size, "0x%.4x/0x%.4x", info->vendor_id, info->product_id);
}
- device->driver = HIDAPI_GetDeviceDriver(device);
-
- if (device->driver) {
- const char *name = device->driver->GetDeviceName(device->vendor_id, device->product_id);
- if (name) {
- SDL_free(device->name);
- device->name = SDL_strdup(name);
- }
- }
-
- device->path = SDL_strdup(info->path);
- if (!device->path) {
- SDL_free(device->name);
- SDL_free(device);
- return;
- }
-
-#ifdef DEBUG_HIDAPI
- SDL_Log("Adding HIDAPI device '%s' VID 0x%.4x, PID 0x%.4x, version %d, interface %d, usage page 0x%.4x, usage 0x%.4x, driver = %s\n", device->name, device->vendor_id, device->product_id, device->version, device->interface_number, device->usage_page, device->usage, device->driver ? device->driver->hint : "NONE");
-#endif
-
/* Add it to the list */
if (last) {
last->next = device;
@@ -817,19 +760,16 @@
SDL_HIDAPI_devices = device;
}
- if (device->driver) {
- /* It's a joystick! */
- device->instance_id = SDL_GetNextJoystickInstanceID();
+ HIDAPI_SetupDeviceDriver(device);
- ++SDL_HIDAPI_numjoysticks;
-
- SDL_PrivateJoystickAdded(device->instance_id);
- }
+#ifdef DEBUG_HIDAPI
+ SDL_Log("Added HIDAPI device '%s' VID 0x%.4x, PID 0x%.4x, version %d, interface %d, interface_class %d, interface_subclass %d, interface_protocol %d, usage page 0x%.4x, usage 0x%.4x, path = %s, driver = %s (%s)\n", device->name, device->vendor_id, device->product_id, device->version, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol, device->usage_page, device->usage, device->path, device->driver ? device->driver->hint : "NONE", device->driver && device->driver->enabled ? "ENABLED" : "DISABLED");
+#endif
}
static void
-HIDAPI_DelDevice(SDL_HIDAPI_Device *device, SDL_bool send_event)
+HIDAPI_DelDevice(SDL_HIDAPI_Device *device)
{
SDL_HIDAPI_Device *curr, *last;
for (curr = SDL_HIDAPI_devices, last = NULL; curr; last = curr, curr = curr->next) {
@@ -840,13 +780,9 @@
SDL_HIDAPI_devices = curr->next;
}
- if (device->driver && send_event) {
- /* Need to decrement the joystick count before we post the event */
- --SDL_HIDAPI_numjoysticks;
+ HIDAPI_CleanupDeviceDriver(device);
- SDL_PrivateJoystickRemoved(device->instance_id);
- }
-
+ SDL_DestroyMutex(device->dev_lock);
SDL_free(device->name);
SDL_free(device->path);
SDL_free(device);
@@ -861,6 +797,8 @@
SDL_HIDAPI_Device *device;
struct hid_device_info *devs, *info;
+ SDL_LockJoysticks();
+
/* Prepare the existing device list */
device = SDL_HIDAPI_devices;
while (device) {
@@ -869,17 +807,19 @@
}
/* Enumerate the devices */
- devs = hid_enumerate(0, 0);
- if (devs) {
- for (info = devs; info; info = info->next) {
- device = HIDAPI_GetJoystickByInfo(info->path, info->vendor_id, info->product_id);
- if (device) {
- device->seen = SDL_TRUE;
- } else {
- HIDAPI_AddDevice(info);
+ if (SDL_HIDAPI_numdrivers > 0) {
+ devs = hid_enumerate(0, 0);
+ if (devs) {
+ for (info = devs; info; info = info->next) {
+ device = HIDAPI_GetJoystickByInfo(info->path, info->vendor_id, info->product_id);
+ if (device) {
+ device->seen = SDL_TRUE;
+ } else {
+ HIDAPI_AddDevice(info);
+ }
}
+ hid_free_enumeration(devs);
}
- hid_free_enumeration(devs);
}
/* Remove any devices that weren't seen */
@@ -888,74 +828,179 @@
SDL_HIDAPI_Device *next = device->next;
if (!device->seen) {
- HIDAPI_DelDevice(device, SDL_TRUE);
+ HIDAPI_DelDevice(device);
}
device = next;
}
+
+ SDL_UnlockJoysticks();
}
SDL_bool
-HIDAPI_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version)
+HIDAPI_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version, const char *name)
{
SDL_HIDAPI_Device *device;
+ SDL_bool supported = SDL_FALSE;
+ SDL_bool result = SDL_FALSE;
- /* Don't update the device list for devices we know aren't supported */
- if (!HIDAPI_IsDeviceSupported(vendor_id, product_id, version)) {
+ /* Make sure we're initialized, as this could be called from other drivers during startup */
+ if (HIDAPI_JoystickInit() < 0) {
return SDL_FALSE;
}
- /* Make sure the device list is completely up to date when we check for device presence */
- HIDAPI_UpdateDeviceList();
+ /* Only update the device list for devices we know might be supported.
+ If we did this for every device, it would hit the USB driver too hard and potentially
+ lock up the system. This won't catch devices that we support but can only detect using
+ USB interface details, like Xbox controllers, but hopefully the device list update is
+ responsive enough to catch those.
+ */
+ supported = HIDAPI_IsDeviceSupported(vendor_id, product_id, version, name);
+#if defined(SDL_JOYSTICK_HIDAPI_XBOX360) || defined(SDL_JOYSTICK_HIDAPI_XBOXONE)
+ if (!supported &&
+ (SDL_strstr(name, "Xbox") || SDL_strstr(name, "X-Box") || SDL_strstr(name, "XBOX"))) {
+ supported = SDL_TRUE;
+ }
+#endif /* SDL_JOYSTICK_HIDAPI_XBOX360 || SDL_JOYSTICK_HIDAPI_XBOXONE */
+ if (supported) {
+ if (SDL_AtomicTryLock(&SDL_HIDAPI_spinlock)) {
+ HIDAPI_UpdateDeviceList();
+ SDL_AtomicUnlock(&SDL_HIDAPI_spinlock);
+ }
+ }
+ /* Note that this isn't a perfect check - there may be multiple devices with 0 VID/PID,
+ or a different name than we have it listed here, etc, but if we support the device
+ and we have something similar in our device list, mark it as present.
+ */
+ SDL_LockJoysticks();
device = SDL_HIDAPI_devices;
while (device) {
if (device->vendor_id == vendor_id && device->product_id == product_id && device->driver) {
- return SDL_TRUE;
+ result = SDL_TRUE;
}
device = device->next;
}
- return SDL_FALSE;
+ SDL_UnlockJoysticks();
+
+ /* If we're looking for the wireless XBox 360 controller, also look for the dongle */
+ if (!result && vendor_id == USB_VENDOR_MICROSOFT && product_id == 0x02a1) {
+ return HIDAPI_IsDevicePresent(USB_VENDOR_MICROSOFT, 0x0719, version, name);
+ }
+
+#ifdef DEBUG_HIDAPI
+ SDL_Log("HIDAPI_IsDevicePresent() returning %s for 0x%.4x / 0x%.4x\n", result ? "true" : "false", vendor_id, product_id);
+#endif
+ return result;
}
static void
HIDAPI_JoystickDetect(void)
{
- HIDAPI_UpdateDiscovery();
- if (SDL_HIDAPI_discovery.m_bHaveDevicesChanged) {
- /* FIXME: We probably need to schedule an update in a few seconds as well */
- HIDAPI_UpdateDeviceList();
- SDL_HIDAPI_discovery.m_bHaveDevicesChanged = SDL_FALSE;
+ if (SDL_AtomicTryLock(&SDL_HIDAPI_spinlock)) {
+ HIDAPI_UpdateDiscovery();
+ if (SDL_HIDAPI_discovery.m_bHaveDevicesChanged) {
+ /* FIXME: We probably need to schedule an update in a few seconds as well */
+ HIDAPI_UpdateDeviceList();
+ SDL_HIDAPI_discovery.m_bHaveDevicesChanged = SDL_FALSE;
+ }
+ SDL_AtomicUnlock(&SDL_HIDAPI_spinlock);
}
}
+void
+HIDAPI_UpdateDevices(void)
+{
+ SDL_HIDAPI_Device *device;
+
+ /* Update the devices, which may change connected joysticks and send events */
+
+ /* Prepare the existing device list */
+ if (SDL_AtomicTryLock(&SDL_HIDAPI_spinlock)) {
+ device = SDL_HIDAPI_devices;
+ while (device) {
+ if (device->driver) {
+ if (SDL_TryLockMutex(device->dev_lock) == 0) {
+ device->driver->UpdateDevice(device);
+ SDL_UnlockMutex(device->dev_lock);
+ }
+ }
+ device = device->next;
+ }
+ SDL_AtomicUnlock(&SDL_HIDAPI_spinlock);
+ }
+}
+
static const char *
HIDAPI_JoystickGetDeviceName(int device_index)
{
- return HIDAPI_GetJoystickByIndex(device_index)->name;
+ SDL_HIDAPI_Device *device;
+ const char *name = NULL;
+
+ device = HIDAPI_GetDeviceByIndex(device_index, NULL);
+ if (device) {
+ /* FIXME: The device could be freed after this name is returned... */
+ name = device->name;
+ }
+
+ return name;
}
static int
HIDAPI_JoystickGetDevicePlayerIndex(int device_index)
{
- return -1;
+ SDL_HIDAPI_Device *device;
+ SDL_JoystickID instance_id;
+ int player_index = -1;
+
+ device = HIDAPI_GetDeviceByIndex(device_index, &instance_id);
+ if (device) {
+ player_index = device->driver->GetDevicePlayerIndex(device, instance_id);
+ }
+
+ return player_index;
}
+static void
+HIDAPI_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+ SDL_HIDAPI_Device *device;
+ SDL_JoystickID instance_id;
+
+ device = HIDAPI_GetDeviceByIndex(device_index, &instance_id);
+ if (device) {
+ device->driver->SetDevicePlayerIndex(device, instance_id, player_index);
+ }
+}
+
static SDL_JoystickGUID
HIDAPI_JoystickGetDeviceGUID(int device_index)
{
- return HIDAPI_GetJoystickByIndex(device_index)->guid;
+ SDL_HIDAPI_Device *device;
+ SDL_JoystickGUID guid;
+
+ device = HIDAPI_GetDeviceByIndex(device_index, NULL);
+ if (device) {
+ SDL_memcpy(&guid, &device->guid, sizeof(guid));
+ } else {
+ SDL_zero(guid);
+ }
+
+ return guid;
}
static SDL_JoystickID
HIDAPI_JoystickGetDeviceInstanceID(int device_index)
{
- return HIDAPI_GetJoystickByIndex(device_index)->instance_id;
+ SDL_JoystickID joystickID = -1;
+ HIDAPI_GetDeviceByIndex(device_index, &joystickID);
+ return joystickID;
}
static int
HIDAPI_JoystickOpen(SDL_Joystick * joystick, int device_index)
{
- SDL_HIDAPI_Device *device = HIDAPI_GetJoystickByIndex(device_index);
+ SDL_JoystickID joystickID;
+ SDL_HIDAPI_Device *device = HIDAPI_GetDeviceByIndex(device_index, &joystickID);
struct joystick_hwdata *hwdata;
hwdata = (struct joystick_hwdata *)SDL_calloc(1, sizeof(*hwdata));
@@ -962,18 +1007,10 @@
if (!hwdata) {
return SDL_OutOfMemory();
}
+ hwdata->device = device;
- hwdata->driver = device->driver;
- hwdata->dev = hid_open_path(device->path, 0);
- if (!hwdata->dev) {
+ if (!device->driver->OpenJoystick(device, joystick)) {
SDL_free(hwdata);
- return SDL_SetError("Couldn't open HID device %s", device->path);
- }
- hwdata->mutex = SDL_CreateMutex();
-
- if (!device->driver->Init(joystick, hwdata->dev, device->vendor_id, device->product_id, &hwdata->context)) {
- hid_close(hwdata->dev);
- SDL_free(hwdata);
return -1;
}
@@ -982,15 +1019,19 @@
}
static int
-HIDAPI_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+HIDAPI_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
- struct joystick_hwdata *hwdata = joystick->hwdata;
- SDL_HIDAPI_DeviceDriver *driver = hwdata->driver;
int result;
- SDL_LockMutex(hwdata->mutex);
- result = driver->Rumble(joystick, hwdata->dev, hwdata->context, low_frequency_rumble, high_frequency_rumble, duration_ms);
- SDL_UnlockMutex(hwdata->mutex);
+ if (joystick->hwdata) {
+ SDL_HIDAPI_Device *device = joystick->hwdata->device;
+
+ result = device->driver->RumbleJoystick(device, joystick, low_frequency_rumble, high_frequency_rumble);
+ } else {
+ SDL_SetError("Rumble failed, device disconnected");
+ result = -1;
+ }
+
return result;
}
@@ -997,36 +1038,25 @@
static void
HIDAPI_JoystickUpdate(SDL_Joystick * joystick)
{
- struct joystick_hwdata *hwdata = joystick->hwdata;
- SDL_HIDAPI_DeviceDriver *driver = hwdata->driver;
- SDL_bool succeeded;
-
- SDL_LockMutex(hwdata->mutex);
- succeeded = driver->Update(joystick, hwdata->dev, hwdata->context);
- SDL_UnlockMutex(hwdata->mutex);
-
- if (!succeeded) {
- SDL_HIDAPI_Device *device;
- for (device = SDL_HIDAPI_devices; device; device = device->next) {
- if (device->instance_id == joystick->instance_id) {
- HIDAPI_DelDevice(device, SDL_TRUE);
- break;
- }
- }
- }
+ /* This is handled in SDL_HIDAPI_UpdateDevices() */
}
static void
HIDAPI_JoystickClose(SDL_Joystick * joystick)
{
- struct joystick_hwdata *hwdata = joystick->hwdata;
- SDL_HIDAPI_DeviceDriver *driver = hwdata->driver;
- driver->Quit(joystick, hwdata->dev, hwdata->context);
+ if (joystick->hwdata) {
+ SDL_HIDAPI_Device *device = joystick->hwdata->device;
- hid_close(hwdata->dev);
- SDL_DestroyMutex(hwdata->mutex);
- SDL_free(hwdata);
- joystick->hwdata = NULL;
+ /* Wait for pending rumble to complete */
+ while (SDL_AtomicGet(&device->rumble_pending) > 0) {
+ SDL_Delay(10);
+ }
+
+ device->driver->CloseJoystick(device, joystick);
+
+ SDL_free(joystick->hwdata);
+ joystick->hwdata = NULL;
+ }
}
static void
@@ -1034,11 +1064,16 @@
{
int i;
+ shutting_down = SDL_TRUE;
+
HIDAPI_ShutdownDiscovery();
while (SDL_HIDAPI_devices) {
- HIDAPI_DelDevice(SDL_HIDAPI_devices, SDL_FALSE);
+ HIDAPI_DelDevice(SDL_HIDAPI_devices);
}
+
+ SDL_HIDAPI_QuitRumble();
+
for (i = 0; i < SDL_arraysize(SDL_HIDAPI_drivers); ++i) {
SDL_HIDAPI_DeviceDriver *driver = SDL_HIDAPI_drivers[i];
SDL_DelHintCallback(driver->hint, SDL_HIDAPIDriverHintChanged, NULL);
@@ -1045,9 +1080,14 @@
}
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI,
SDL_HIDAPIDriverHintChanged, NULL);
- SDL_HIDAPI_numjoysticks = 0;
hid_exit();
+
+ /* Make sure the drivers cleaned up properly */
+ SDL_assert(SDL_HIDAPI_numjoysticks == 0);
+
+ shutting_down = SDL_FALSE;
+ initialized = SDL_FALSE;
}
SDL_JoystickDriver SDL_HIDAPI_JoystickDriver =
@@ -1057,6 +1097,7 @@
HIDAPI_JoystickDetect,
HIDAPI_JoystickGetDeviceName,
HIDAPI_JoystickGetDevicePlayerIndex,
+ HIDAPI_JoystickSetDevicePlayerIndex,
HIDAPI_JoystickGetDeviceGUID,
HIDAPI_JoystickGetDeviceInstanceID,
HIDAPI_JoystickOpen,
--- a/external/SDL2/src/joystick/hidapi/SDL_hidapijoystick_c.h
+++ b/external/SDL2/src/joystick/hidapi/SDL_hidapijoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -23,7 +23,12 @@
#ifndef SDL_JOYSTICK_HIDAPI_H
#define SDL_JOYSTICK_HIDAPI_H
+#include "SDL_atomic.h"
+#include "SDL_mutex.h"
+#include "SDL_joystick.h"
+#include "SDL_gamecontroller.h"
#include "../../hidapi/hidapi/hidapi.h"
+#include "../usb_ids.h"
/* This is the full set of HIDAPI drivers available */
#define SDL_JOYSTICK_HIDAPI_PS4
@@ -30,6 +35,7 @@
#define SDL_JOYSTICK_HIDAPI_SWITCH
#define SDL_JOYSTICK_HIDAPI_XBOX360
#define SDL_JOYSTICK_HIDAPI_XBOXONE
+#define SDL_JOYSTICK_HIDAPI_GAMECUBE
#ifdef __WINDOWS__
/* On Windows, Xbox One controllers are handled by the Xbox 360 driver */
@@ -43,31 +49,79 @@
#undef SDL_JOYSTICK_HIDAPI_XBOXONE
#endif
+#if defined(__IPHONEOS__) || defined(__TVOS__) || defined(__ANDROID__)
+/* Very basic Steam Controller support on mobile devices */
+#define SDL_JOYSTICK_HIDAPI_STEAM
+#endif
+
+/* The maximum size of a USB packet for HID devices */
+#define USB_PACKET_LENGTH 64
+
+/* Forward declaration */
+struct _SDL_HIDAPI_DeviceDriver;
+
+typedef struct _SDL_HIDAPI_Device
+{
+ char *name;
+ char *path;
+ Uint16 vendor_id;
+ Uint16 product_id;
+ Uint16 version;
+ SDL_JoystickGUID guid;
+ int interface_number; /* Available on Windows and Linux */
+ int interface_class;
+ int interface_subclass;
+ int interface_protocol;
+ Uint16 usage_page; /* Available on Windows and Mac OS X */
+ Uint16 usage; /* Available on Windows and Mac OS X */
+
+ struct _SDL_HIDAPI_DeviceDriver *driver;
+ void *context;
+ SDL_mutex *dev_lock;
+ hid_device *dev;
+ SDL_atomic_t rumble_pending;
+ int num_joysticks;
+ SDL_JoystickID *joysticks;
+
+ /* Used during scanning for device changes */
+ SDL_bool seen;
+
+ struct _SDL_HIDAPI_Device *next;
+} SDL_HIDAPI_Device;
+
typedef struct _SDL_HIDAPI_DeviceDriver
{
const char *hint;
SDL_bool enabled;
- SDL_bool (*IsSupportedDevice)(Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number);
+ SDL_bool (*IsSupportedDevice)(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
const char *(*GetDeviceName)(Uint16 vendor_id, Uint16 product_id);
- SDL_bool (*Init)(SDL_Joystick *joystick, hid_device *dev, Uint16 vendor_id, Uint16 product_id, void **context);
- int (*Rumble)(SDL_Joystick *joystick, hid_device *dev, void *context, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
- SDL_bool (*Update)(SDL_Joystick *joystick, hid_device *dev, void *context);
- void (*Quit)(SDL_Joystick *joystick, hid_device *dev, void *context);
+ SDL_bool (*InitDevice)(SDL_HIDAPI_Device *device);
+ int (*GetDevicePlayerIndex)(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id);
+ void (*SetDevicePlayerIndex)(SDL_HIDAPI_Device *device, SDL_JoystickID instance_id, int player_index);
+ SDL_bool (*UpdateDevice)(SDL_HIDAPI_Device *device);
+ SDL_bool (*OpenJoystick)(SDL_HIDAPI_Device *device, SDL_Joystick *joystick);
+ int (*RumbleJoystick)(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble);
+ void (*CloseJoystick)(SDL_HIDAPI_Device *device, SDL_Joystick *joystick);
+ void (*FreeDevice)(SDL_HIDAPI_Device *device);
} SDL_HIDAPI_DeviceDriver;
+
/* HIDAPI device support */
extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverPS4;
extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverSteam;
extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverSwitch;
extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXbox360;
+extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXbox360W;
extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverXboxOne;
+extern SDL_HIDAPI_DeviceDriver SDL_HIDAPI_DriverGameCube;
/* Return true if a HID device is present and supported as a joystick */
-extern SDL_bool HIDAPI_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version);
+extern SDL_bool HIDAPI_IsDevicePresent(Uint16 vendor_id, Uint16 product_id, Uint16 version, const char *name);
-/* Return the name of an Xbox 360 or Xbox One controller */
-extern const char *HIDAPI_XboxControllerName(Uint16 vendor_id, Uint16 product_id);
+extern void HIDAPI_UpdateDevices(void);
+extern SDL_bool HIDAPI_JoystickConnected(SDL_HIDAPI_Device *device, SDL_JoystickID *pJoystickID);
+extern void HIDAPI_JoystickDisconnected(SDL_HIDAPI_Device *device, SDL_JoystickID joystickID);
#endif /* SDL_JOYSTICK_HIDAPI_H */
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/steam/controller_constants.h
@@ -1,0 +1,484 @@
+//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
+//
+// Purpose: Defines constants used to communicate with Valve controllers.
+//
+//==================================================================================================
+
+#ifndef _CONTROLLER_CONSTANTS_
+#define _CONTROLLER_CONSTANTS_
+
+#include "controller_structs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FEATURE_REPORT_SIZE 64
+
+#define VALVE_USB_VID 0x28DE
+
+// Frame update rate (in ms).
+#define FAST_SCAN_INTERVAL 6
+#define SLOW_SCAN_INTERVAL 9
+
+// Contains each of the USB PIDs for Valve controllers (only add to this enum and never change the order)
+enum ValveControllerPID
+{
+ BASTILLE_PID = 0x2202,
+ CHELL_PID = 0x1101,
+ D0G_PID = 0x1102,
+ ELI_PID = 0x1103,
+ FREEMAN_PID = 0x1104,
+ D0G_BLE_PID = 0x1105,
+ D0G_BLE2_PID = 0x1106,
+ D0GGLE_PID = 0x1142,
+};
+
+// This enum contains all of the messages exchanged between the host and the target (only add to this enum and never change the order)
+enum FeatureReportMessageIDs
+{
+ ID_SET_DIGITAL_MAPPINGS = 0x80,
+ ID_CLEAR_DIGITAL_MAPPINGS = 0x81,
+ ID_GET_DIGITAL_MAPPINGS = 0x82,
+ ID_GET_ATTRIBUTES_VALUES = 0x83,
+ ID_GET_ATTRIBUTE_LABEL = 0x84,
+ ID_SET_DEFAULT_DIGITAL_MAPPINGS = 0x85,
+ ID_FACTORY_RESET = 0x86,
+ ID_SET_SETTINGS_VALUES = 0x87,
+ ID_CLEAR_SETTINGS_VALUES = 0x88,
+ ID_GET_SETTINGS_VALUES = 0x89,
+ ID_GET_SETTING_LABEL = 0x8A,
+ ID_GET_SETTINGS_MAXS = 0x8B,
+ ID_GET_SETTINGS_DEFAULTS = 0x8C,
+ ID_SET_CONTROLLER_MODE = 0x8D,
+ ID_LOAD_DEFAULT_SETTINGS = 0x8E,
+ ID_TRIGGER_HAPTIC_PULSE = 0x8F,
+ ID_TURN_OFF_CONTROLLER = 0x9F,
+
+ ID_GET_DEVICE_INFO = 0xA1,
+
+ ID_CALIBRATE_TRACKPADS = 0xA7,
+ ID_RESERVED_0 = 0xA8,
+ ID_SET_SERIAL_NUMBER = 0xA9,
+ ID_GET_TRACKPAD_CALIBRATION = 0xAA,
+ ID_GET_TRACKPAD_FACTORY_CALIBRATION = 0xAB,
+ ID_GET_TRACKPAD_RAW_DATA = 0xAC,
+ ID_ENABLE_PAIRING = 0xAD,
+ ID_GET_STRING_ATTRIBUTE = 0xAE,
+ ID_RADIO_ERASE_RECORDS = 0xAF,
+ ID_RADIO_WRITE_RECORD = 0xB0,
+ ID_SET_DONGLE_SETTING = 0xB1,
+ ID_DONGLE_DISCONNECT_DEVICE = 0xB2,
+ ID_DONGLE_COMMIT_DEVICE = 0xB3,
+ ID_DONGLE_GET_WIRELESS_STATE = 0xB4,
+ ID_CALIBRATE_GYRO = 0xB5,
+ ID_PLAY_AUDIO = 0xB6,
+ ID_AUDIO_UPDATE_START = 0xB7,
+ ID_AUDIO_UPDATE_DATA = 0xB8,
+ ID_AUDIO_UPDATE_COMPLETE = 0xB9,
+ ID_GET_CHIPID = 0xBA,
+
+ ID_CALIBRATE_JOYSTICK = 0xBF,
+ ID_CALIBRATE_ANALOG_TRIGGERS = 0xC0,
+ ID_SET_AUDIO_MAPPING = 0xC1,
+ ID_CHECK_GYRO_FW_LOAD = 0xC2,
+ ID_CALIBRATE_ANALOG = 0xC3,
+ ID_DONGLE_GET_CONNECTED_SLOTS = 0xC4,
+};
+
+
+// Enumeration of all wireless dongle events
+typedef enum WirelessEventTypes
+{
+ WIRELESS_EVENT_DISCONNECT = 1,
+ WIRELESS_EVENT_CONNECT = 2,
+ WIRELESS_EVENT_PAIR = 3,
+} EWirelessEventType;
+
+
+// Enumeration of generic digital inputs - not all of these will be supported on all controllers (only add to this enum and never change the order)
+typedef enum
+{
+ IO_DIGITAL_BUTTON_NONE = -1,
+ IO_DIGITAL_BUTTON_RIGHT_TRIGGER,
+ IO_DIGITAL_BUTTON_LEFT_TRIGGER,
+ IO_DIGITAL_BUTTON_1,
+ IO_DIGITAL_BUTTON_Y=IO_DIGITAL_BUTTON_1,
+ IO_DIGITAL_BUTTON_2,
+ IO_DIGITAL_BUTTON_B=IO_DIGITAL_BUTTON_2,
+ IO_DIGITAL_BUTTON_3,
+ IO_DIGITAL_BUTTON_X=IO_DIGITAL_BUTTON_3,
+ IO_DIGITAL_BUTTON_4,
+ IO_DIGITAL_BUTTON_A=IO_DIGITAL_BUTTON_4,
+ IO_DIGITAL_BUTTON_RIGHT_BUMPER,
+ IO_DIGITAL_BUTTON_LEFT_BUMPER,
+ IO_DIGITAL_BUTTON_LEFT_JOYSTICK_CLICK,
+ IO_DIGITAL_BUTTON_ESCAPE,
+ IO_DIGITAL_BUTTON_STEAM,
+ IO_DIGITAL_BUTTON_MENU,
+ IO_DIGITAL_STICK_UP,
+ IO_DIGITAL_STICK_DOWN,
+ IO_DIGITAL_STICK_LEFT,
+ IO_DIGITAL_STICK_RIGHT,
+ IO_DIGITAL_TOUCH_1,
+ IO_DIGITAL_BUTTON_UP=IO_DIGITAL_TOUCH_1,
+ IO_DIGITAL_TOUCH_2,
+ IO_DIGITAL_BUTTON_RIGHT=IO_DIGITAL_TOUCH_2,
+ IO_DIGITAL_TOUCH_3,
+ IO_DIGITAL_BUTTON_LEFT=IO_DIGITAL_TOUCH_3,
+ IO_DIGITAL_TOUCH_4,
+ IO_DIGITAL_BUTTON_DOWN=IO_DIGITAL_TOUCH_4,
+ IO_DIGITAL_BUTTON_BACK_LEFT,
+ IO_DIGITAL_BUTTON_BACK_RIGHT,
+ IO_DIGITAL_LEFT_TRACKPAD_N,
+ IO_DIGITAL_LEFT_TRACKPAD_NE,
+ IO_DIGITAL_LEFT_TRACKPAD_E,
+ IO_DIGITAL_LEFT_TRACKPAD_SE,
+ IO_DIGITAL_LEFT_TRACKPAD_S,
+ IO_DIGITAL_LEFT_TRACKPAD_SW,
+ IO_DIGITAL_LEFT_TRACKPAD_W,
+ IO_DIGITAL_LEFT_TRACKPAD_NW,
+ IO_DIGITAL_RIGHT_TRACKPAD_N,
+ IO_DIGITAL_RIGHT_TRACKPAD_NE,
+ IO_DIGITAL_RIGHT_TRACKPAD_E,
+ IO_DIGITAL_RIGHT_TRACKPAD_SE,
+ IO_DIGITAL_RIGHT_TRACKPAD_S,
+ IO_DIGITAL_RIGHT_TRACKPAD_SW,
+ IO_DIGITAL_RIGHT_TRACKPAD_W,
+ IO_DIGITAL_RIGHT_TRACKPAD_NW,
+ IO_DIGITAL_LEFT_TRACKPAD_DOUBLE_TAP,
+ IO_DIGITAL_RIGHT_TRACKPAD_DOUBLE_TAP,
+ IO_DIGITAL_LEFT_TRACKPAD_OUTER_RADIUS,
+ IO_DIGITAL_RIGHT_TRACKPAD_OUTER_RADIUS,
+ IO_DIGITAL_LEFT_TRACKPAD_CLICK,
+ IO_DIGITAL_RIGHT_TRACKPAD_CLICK,
+ IO_DIGITAL_BATTERY_LOW,
+ IO_DIGITAL_LEFT_TRIGGER_THRESHOLD,
+ IO_DIGITAL_RIGHT_TRIGGER_THRESHOLD,
+ IO_DIGITAL_BUTTON_BACK_LEFT2,
+ IO_DIGITAL_BUTTON_BACK_RIGHT2,
+ IO_DIGITAL_BUTTON_ALWAYS_ON,
+ IO_DIGITAL_BUTTON_ANCILLARY_1,
+ IO_DIGITAL_BUTTON_MACRO_0,
+ IO_DIGITAL_BUTTON_MACRO_1,
+ IO_DIGITAL_BUTTON_MACRO_2,
+ IO_DIGITAL_BUTTON_MACRO_3,
+ IO_DIGITAL_BUTTON_MACRO_4,
+ IO_DIGITAL_BUTTON_MACRO_5,
+ IO_DIGITAL_BUTTON_MACRO_6,
+ IO_DIGITAL_BUTTON_MACRO_7,
+ IO_DIGITAL_BUTTON_MACRO_1FINGER,
+ IO_DIGITAL_BUTTON_MACRO_2FINGER,
+ IO_DIGITAL_COUNT
+} DigitalIO ;
+
+// Enumeration of generic analog inputs - not all of these will be supported on all controllers (only add to this enum and never change the order)
+typedef enum
+{
+ IO_ANALOG_LEFT_STICK_X,
+ IO_ANALOG_LEFT_STICK_Y,
+ IO_ANALOG_RIGHT_STICK_X,
+ IO_ANALOG_RIGHT_STICK_Y,
+ IO_ANALOG_LEFT_TRIGGER,
+ IO_ANALOG_RIGHT_TRIGGER,
+ IO_MOUSE1_X,
+ IO_MOUSE1_Y,
+ IO_MOUSE1_Z,
+ IO_ACCEL_X,
+ IO_ACCEL_Y,
+ IO_ACCEL_Z,
+ IO_GYRO_X,
+ IO_GYRO_Y,
+ IO_GYRO_Z,
+ IO_GYRO_QUAT_W,
+ IO_GYRO_QUAT_X,
+ IO_GYRO_QUAT_Y,
+ IO_GYRO_QUAT_Z,
+ IO_GYRO_STEERING_VEC,
+ IO_RAW_TRIGGER_LEFT,
+ IO_RAW_TRIGGER_RIGHT,
+ IO_RAW_JOYSTICK_X,
+ IO_RAW_JOYSTICK_Y,
+ IO_GYRO_TILT_VEC,
+ IO_ANALOG_COUNT
+} AnalogIO;
+
+
+// Contains list of all types of devices that the controller emulates (only add to this enum and never change the order)
+enum DeviceTypes
+{
+ DEVICE_KEYBOARD,
+ DEVICE_MOUSE,
+ DEVICE_GAMEPAD,
+ DEVICE_MODE_ADJUST,
+ DEVICE_COUNT
+};
+
+// Scan codes for HID keyboards
+enum HIDKeyboardKeys
+{
+ KEY_INVALID,
+ KEY_FIRST = 0x04,
+ KEY_A = KEY_FIRST, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L,
+ KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2,
+ KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_RETURN, KEY_ESCAPE, KEY_BACKSPACE, KEY_TAB, KEY_SPACE, KEY_DASH, KEY_EQUALS, KEY_LEFT_BRACKET,
+ KEY_RIGHT_BRACKET, KEY_BACKSLASH, KEY_UNUSED1, KEY_SEMICOLON, KEY_SINGLE_QUOTE, KEY_BACK_TICK, KEY_COMMA, KEY_PERIOD, KEY_FORWARD_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6,
+ KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_PRINT_SCREEN, KEY_SCROLL_LOCK, KEY_BREAK, KEY_INSERT, KEY_HOME, KEY_PAGE_UP, KEY_DELETE, KEY_END, KEY_PAGE_DOWN, KEY_RIGHT_ARROW,
+ KEY_LEFT_ARROW, KEY_DOWN_ARROW, KEY_UP_ARROW, KEY_NUM_LOCK, KEY_KEYPAD_FORWARD_SLASH, KEY_KEYPAD_ASTERISK, KEY_KEYPAD_DASH, KEY_KEYPAD_PLUS, KEY_KEYPAD_ENTER, KEY_KEYPAD_1, KEY_KEYPAD_2, KEY_KEYPAD_3, KEY_KEYPAD_4, KEY_KEYPAD_5, KEY_KEYPAD_6, KEY_KEYPAD_7,
+ KEY_KEYPAD_8, KEY_KEYPAD_9, KEY_KEYPAD_0, KEY_KEYPAD_PERIOD,
+ KEY_LALT,
+ KEY_LSHIFT,
+ KEY_LWIN,
+ KEY_LCONTROL,
+ KEY_RALT,
+ KEY_RSHIFT,
+ KEY_RWIN,
+ KEY_RCONTROL,
+ KEY_VOLUP,
+ KEY_VOLDOWN,
+ KEY_MUTE,
+ KEY_PLAY,
+ KEY_STOP,
+ KEY_NEXT,
+ KEY_PREV,
+ KEY_LAST = KEY_PREV
+};
+
+enum ModifierMasks
+{
+ KEY_LCONTROL_MASK = (1<<0),
+ KEY_LSHIFT_MASK = (1<<1),
+ KEY_LALT_MASK = (1<<2),
+ KEY_LWIN_MASK = (1<<3),
+ KEY_RCONTROL_MASK = (1<<4),
+ KEY_RSHIFT_MASK = (1<<5),
+ KEY_RALT_MASK = (1<<6),
+ KEY_RWIN_MASK = (1<<7)
+};
+
+// Standard mouse buttons as specified in the HID mouse spec
+enum MouseButtons
+{
+ MOUSE_BTN_LEFT,
+ MOUSE_BTN_RIGHT,
+ MOUSE_BTN_MIDDLE,
+ MOUSE_BTN_BACK,
+ MOUSE_BTN_FORWARD,
+ MOUSE_SCROLL_UP,
+ MOUSE_SCROLL_DOWN,
+ MOUSE_BTN_COUNT
+};
+
+// Gamepad buttons
+enum GamepadButtons
+{
+ GAMEPAD_BTN_TRIGGER_LEFT=1,
+ GAMEPAD_BTN_TRIGGER_RIGHT,
+ GAMEPAD_BTN_A,
+ GAMEPAD_BTN_B,
+ GAMEPAD_BTN_Y,
+ GAMEPAD_BTN_X,
+ GAMEPAD_BTN_SHOULDER_LEFT,
+ GAMEPAD_BTN_SHOULDER_RIGHT,
+ GAMEPAD_BTN_LEFT_JOYSTICK,
+ GAMEPAD_BTN_RIGHT_JOYSTICK,
+ GAMEPAD_BTN_START,
+ GAMEPAD_BTN_SELECT,
+ GAMEPAD_BTN_STEAM,
+ GAMEPAD_BTN_DPAD_UP,
+ GAMEPAD_BTN_DPAD_DOWN,
+ GAMEPAD_BTN_DPAD_LEFT,
+ GAMEPAD_BTN_DPAD_RIGHT,
+ GAMEPAD_BTN_LSTICK_UP,
+ GAMEPAD_BTN_LSTICK_DOWN,
+ GAMEPAD_BTN_LSTICK_LEFT,
+ GAMEPAD_BTN_LSTICK_RIGHT,
+ GAMEPAD_BTN_RSTICK_UP,
+ GAMEPAD_BTN_RSTICK_DOWN,
+ GAMEPAD_BTN_RSTICK_LEFT,
+ GAMEPAD_BTN_RSTICK_RIGHT,
+ GAMEPAD_BTN_COUNT
+};
+
+// Mode adjust
+enum ModeAdjustModes
+{
+ MODE_ADJUST_SENSITITY=1,
+ MODE_ADJUST_LEFT_PAD_SECONDARY_MODE,
+ MODE_ADJUST_RIGHT_PAD_SECONDARY_MODE,
+ MODE_ADJUST_COUNT
+};
+
+// Read-only attributes of controllers (only add to this enum and never change the order)
+typedef enum
+{
+ ATTRIB_UNIQUE_ID,
+ ATTRIB_PRODUCT_ID,
+ ATTRIB_PRODUCT_REVISON, // deprecated
+ ATTRIB_CAPABILITIES = ATTRIB_PRODUCT_REVISON, // intentional aliasing
+ ATTRIB_FIRMWARE_VERSION, // deprecated
+ ATTRIB_FIRMWARE_BUILD_TIME,
+ ATTRIB_RADIO_FIRMWARE_BUILD_TIME,
+ ATTRIB_RADIO_DEVICE_ID0,
+ ATTRIB_RADIO_DEVICE_ID1,
+ ATTRIB_DONGLE_FIRMWARE_BUILD_TIME,
+ ATTRIB_BOARD_REVISION,
+ ATTRIB_BOOTLOADER_BUILD_TIME,
+ ATTRIB_CONNECTION_INTERVAL_IN_US,
+ ATTRIB_COUNT
+} ControllerAttributes;
+
+// Read-only string attributes of controllers (only add to this enum and never change the order)
+typedef enum
+{
+ ATTRIB_STR_BOARD_SERIAL,
+ ATTRIB_STR_UNIT_SERIAL,
+ ATTRIB_STR_COUNT
+} ControllerStringAttributes;
+
+typedef enum
+{
+ STATUS_CODE_NORMAL,
+ STATUS_CODE_CRITICAL_BATTERY,
+ STATUS_CODE_GYRO_INIT_ERROR,
+} ControllerStatusEventCodes;
+
+typedef enum
+{
+ STATUS_STATE_LOW_BATTERY=0,
+} ControllerStatusStateFlags;
+
+typedef enum {
+ TRACKPAD_ABSOLUTE_MOUSE,
+ TRACKPAD_RELATIVE_MOUSE,
+ TRACKPAD_DPAD_FOUR_WAY_DISCRETE,
+ TRACKPAD_DPAD_FOUR_WAY_OVERLAP,
+ TRACKPAD_DPAD_EIGHT_WAY,
+ TRACKPAD_RADIAL_MODE,
+ TRACKPAD_ABSOLUTE_DPAD,
+ TRACKPAD_NONE,
+ TRACKPAD_GESTURE_KEYBOARD,
+ TRACKPAD_NUM_MODES
+} TrackpadDPadMode;
+
+// Read-write controller settings (only add to this enum and never change the order)
+typedef enum
+{
+ SETTING_MOUSE_SENSITIVITY,
+ SETTING_MOUSE_ACCELERATION,
+ SETTING_TRACKBALL_ROTATION_ANGLE,
+ SETTING_HAPTIC_INTENSITY,
+ SETTING_LEFT_GAMEPAD_STICK_ENABLED,
+ SETTING_RIGHT_GAMEPAD_STICK_ENABLED,
+ SETTING_USB_DEBUG_MODE,
+ SETTING_LEFT_TRACKPAD_MODE,
+ SETTING_RIGHT_TRACKPAD_MODE,
+ SETTING_MOUSE_POINTER_ENABLED,
+ SETTING_DPAD_DEADZONE,
+ SETTING_MINIMUM_MOMENTUM_VEL,
+ SETTING_MOMENTUM_DECAY_AMMOUNT,
+ SETTING_TRACKPAD_RELATIVE_MODE_TICKS_PER_PIXEL,
+ SETTING_HAPTIC_INCREMENT,
+ SETTING_DPAD_ANGLE_SIN,
+ SETTING_DPAD_ANGLE_COS,
+ SETTING_MOMENTUM_VERTICAL_DIVISOR,
+ SETTING_MOMENTUM_MAXIMUM_VELOCITY,
+ SETTING_TRACKPAD_Z_ON,
+ SETTING_TRACKPAD_Z_OFF,
+ SETTING_SENSITIVY_SCALE_AMMOUNT,
+ SETTING_LEFT_TRACKPAD_SECONDARY_MODE,
+ SETTING_RIGHT_TRACKPAD_SECONDARY_MODE,
+ SETTING_SMOOTH_ABSOLUTE_MOUSE,
+ SETTING_STEAMBUTTON_POWEROFF_TIME,
+ SETTING_UNUSED_1,
+ SETTING_TRACKPAD_OUTER_RADIUS,
+ SETTING_TRACKPAD_Z_ON_LEFT,
+ SETTING_TRACKPAD_Z_OFF_LEFT,
+ SETTING_TRACKPAD_OUTER_SPIN_VEL,
+ SETTING_TRACKPAD_OUTER_SPIN_RADIUS,
+ SETTING_TRACKPAD_OUTER_SPIN_HORIZONTAL_ONLY,
+ SETTING_TRACKPAD_RELATIVE_MODE_DEADZONE,
+ SETTING_TRACKPAD_RELATIVE_MODE_MAX_VEL,
+ SETTING_TRACKPAD_RELATIVE_MODE_INVERT_Y,
+ SETTING_TRACKPAD_DOUBLE_TAP_BEEP_ENABLED,
+ SETTING_TRACKPAD_DOUBLE_TAP_BEEP_PERIOD,
+ SETTING_TRACKPAD_DOUBLE_TAP_BEEP_COUNT,
+ SETTING_TRACKPAD_OUTER_RADIUS_RELEASE_ON_TRANSITION,
+ SETTING_RADIAL_MODE_ANGLE,
+ SETTING_HAPTIC_INTENSITY_MOUSE_MODE,
+ SETTING_LEFT_DPAD_REQUIRES_CLICK,
+ SETTING_RIGHT_DPAD_REQUIRES_CLICK,
+ SETTING_LED_BASELINE_BRIGHTNESS,
+ SETTING_LED_USER_BRIGHTNESS,
+ SETTING_ENABLE_RAW_JOYSTICK,
+ SETTING_ENABLE_FAST_SCAN,
+ SETTING_GYRO_MODE,
+ SETTING_WIRELESS_PACKET_VERSION,
+ SETTING_SLEEP_INACTIVITY_TIMEOUT,
+ SETTING_COUNT,
+
+ // This is a special setting value use for callbacks and should not be set/get explicitly.
+ SETTING_ALL=0xFF
+} ControllerSettings;
+
+typedef enum
+{
+ SETTING_DEFAULT,
+ SETTING_MIN,
+ SETTING_MAX,
+ SETTING_DEFAULTMINMAXCOUNT
+} SettingDefaultMinMax;
+
+// Bitmask that define which IMU features to enable.
+typedef enum
+{
+ SETTING_GYRO_MODE_OFF = 0x0000,
+ SETTING_GYRO_MODE_STEERING = 0x0001,
+ SETTING_GYRO_MODE_TILT = 0x0002,
+ SETTING_GYRO_MODE_SEND_ORIENTATION = 0x0004,
+ SETTING_GYRO_MODE_SEND_RAW_ACCEL = 0x0008,
+ SETTING_GYRO_MODE_SEND_RAW_GYRO = 0x0010,
+} SettingGyroMode;
+
+// Bitmask for haptic pulse flags
+typedef enum
+{
+ HAPTIC_PULSE_NORMAL = 0x0000,
+ HAPTIC_PULSE_HIGH_PRIORITY = 0x0001,
+ HAPTIC_PULSE_VERY_HIGH_PRIORITY = 0x0002,
+} SettingHapticPulseFlags;
+
+typedef struct
+{
+ // default,min,max in this array in that order
+ short defaultminmax[SETTING_DEFAULTMINMAXCOUNT];
+} SettingValueRange_t;
+
+// below is from controller_constants.c which should be compiled into any code that uses this
+extern const SettingValueRange_t g_DefaultSettingValues[SETTING_COUNT];
+
+// Read-write settings for dongle (only add to this enum and never change the order)
+typedef enum
+{
+ DONGLE_SETTING_MOUSE_KEYBOARD_ENABLED,
+ DONGLE_SETTING_COUNT,
+} DongleSettings;
+
+typedef enum
+{
+ AUDIO_STARTUP = 0,
+ AUDIO_SHUTDOWN = 1,
+ AUDIO_PAIR = 2,
+ AUDIO_PAIR_SUCCESS = 3,
+ AUDIO_IDENTIFY = 4,
+ AUDIO_LIZARDMODE = 5,
+ AUDIO_NORMALMODE = 6,
+
+ AUDIO_MAX_SLOT = 15
+} ControllerAudio;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _CONTROLLER_CONSTANTS_H
--- /dev/null
+++ b/external/SDL2/src/joystick/hidapi/steam/controller_structs.h
@@ -1,0 +1,255 @@
+//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
+//
+// Purpose: Defines methods and structures used to communicate with Valve controllers.
+//
+//==================================================================================================
+#ifndef _CONTROLLER_STRUCTS_
+#define _CONTROLLER_STRUCTS_
+
+#pragma pack(1)
+
+// Roll this version forward anytime that you are breaking compatibility of existing
+// message types within ValveInReport_t or the header itself. Hopefully this should
+// be super rare and instead you shoudl just add new message payloads to the union,
+// or just add fields to the end of existing payload structs which is expected to be
+// safe in all code consuming these as they should just consume/copy upto the prior size
+// they were aware of when processing.
+#define k_ValveInReportMsgVersion 0x01
+
+typedef enum
+{
+ ID_CONTROLLER_STATE = 1,
+ ID_CONTROLLER_DEBUG = 2,
+ ID_CONTROLLER_WIRELESS = 3,
+ ID_CONTROLLER_STATUS = 4,
+ ID_CONTROLLER_DEBUG2 = 5,
+ ID_CONTROLLER_SECONDARY_STATE = 6,
+ ID_CONTROLLER_BLE_STATE = 7,
+ ID_CONTROLLER_MSG_COUNT
+} ValveInReportMessageIDs;
+
+typedef struct
+{
+ unsigned short unReportVersion;
+
+ unsigned char ucType;
+ unsigned char ucLength;
+
+} ValveInReportHeader_t;
+
+// State payload
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // Button bitmask and trigger data.
+ union
+ {
+ uint64 ulButtons;
+ struct
+ {
+ unsigned char _pad0[3];
+ unsigned char nLeft;
+ unsigned char nRight;
+ unsigned char _pad1[3];
+ } Triggers;
+ } ButtonTriggerData;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+ // This is redundant, packed above, but still sent over wired
+ unsigned short sTriggerL;
+ unsigned short sTriggerR;
+
+ // FIXME figure out a way to grab this stuff over wireless
+ short sAccelX;
+ short sAccelY;
+ short sAccelZ;
+
+ short sGyroX;
+ short sGyroY;
+ short sGyroZ;
+
+ short sGyroQuatW;
+ short sGyroQuatX;
+ short sGyroQuatY;
+ short sGyroQuatZ;
+
+} ValveControllerStatePacket_t;
+
+// BLE State payload this has to be re-formatted from the normal state because BLE controller shows up as
+//a HID device and we don't want to send all the optional parts of the message. Keep in sync with struct above.
+typedef struct
+{
+ // If packet num matches that on your prior call, then the controller state hasn't been changed since
+ // your last call and there is no need to process it
+ uint32 unPacketNum;
+
+ // Button bitmask and trigger data.
+ union
+ {
+ uint64 ulButtons;
+ struct
+ {
+ unsigned char _pad0[3];
+ unsigned char nLeft;
+ unsigned char nRight;
+ unsigned char _pad1[3];
+ } Triggers;
+ } ButtonTriggerData;
+
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+ //This mimcs how the dongle reconstitutes HID packets, there will be 0-4 shorts depending on gyro mode
+ unsigned char ucGyroDataType; //TODO could maybe find some unused bits in the button field for this info (is only 2bits)
+ short sGyro[4];
+
+} ValveControllerBLEStatePacket_t;
+
+// Define a payload for reporting debug information
+typedef struct
+{
+ // Left pad coordinates
+ short sLeftPadX;
+ short sLeftPadY;
+
+ // Right pad coordinates
+ short sRightPadX;
+ short sRightPadY;
+
+ // Left mouse deltas
+ short sLeftPadMouseDX;
+ short sLeftPadMouseDY;
+
+ // Right mouse deltas
+ short sRightPadMouseDX;
+ short sRightPadMouseDY;
+
+ // Left mouse filtered deltas
+ short sLeftPadMouseFilteredDX;
+ short sLeftPadMouseFilteredDY;
+
+ // Right mouse filtered deltas
+ short sRightPadMouseFilteredDX;
+ short sRightPadMouseFilteredDY;
+
+ // Pad Z values
+ unsigned char ucLeftZ;
+ unsigned char ucRightZ;
+
+ // FingerPresent
+ unsigned char ucLeftFingerPresent;
+ unsigned char ucRightFingerPresent;
+
+ // Timestamps
+ unsigned char ucLeftTimestamp;
+ unsigned char ucRightTimestamp;
+
+ // Double tap state
+ unsigned char ucLeftTapState;
+ unsigned char ucRightTapState;
+
+ unsigned int unDigitalIOStates0;
+ unsigned int unDigitalIOStates1;
+
+} ValveControllerDebugPacket_t;
+
+typedef struct
+{
+ unsigned char ucPadNum;
+ unsigned char ucPad[3]; // need Data to be word aligned
+ short Data[20];
+ unsigned short unNoise;
+} ValveControllerTrackpadImage_t;
+
+typedef struct
+{
+ unsigned char ucPadNum;
+ unsigned char ucOffset;
+ unsigned char ucPad[2]; // need Data to be word aligned
+ short rgData[28];
+} ValveControllerRawTrackpadImage_t;
+
+// Payload for wireless metadata
+typedef struct
+{
+ unsigned char ucEventType;
+} SteamControllerWirelessEvent_t;
+
+typedef struct
+{
+ // Current packet number.
+ unsigned int unPacketNum;
+
+ // Event codes and state information.
+ unsigned short sEventCode;
+ unsigned short unStateFlags;
+
+ // Current battery voltage (mV).
+ unsigned short sBatteryVoltage;
+
+ // Current battery level (0-100).
+ unsigned char ucBatteryLevel;
+} SteamControllerStatusEvent_t;
+
+typedef struct
+{
+ ValveInReportHeader_t header;
+
+ union
+ {
+ ValveControllerStatePacket_t controllerState;
+ ValveControllerBLEStatePacket_t controllerBLEState;
+ ValveControllerDebugPacket_t debugState;
+ ValveControllerTrackpadImage_t padImage;
+ ValveControllerRawTrackpadImage_t rawPadImage;
+ SteamControllerWirelessEvent_t wirelessEvent;
+ SteamControllerStatusEvent_t statusEvent;
+ } payload;
+
+} ValveInReport_t;
+
+
+// Enumeration for BLE packet protocol
+enum EBLEPacketReportNums
+{
+ // Skipping past 2-3 because they are escape characters in Uart protocol
+ k_EBLEReportState = 4,
+ k_EBLEReportStatus = 5,
+};
+
+
+// Enumeration of data chunks in BLE state packets
+enum EBLEOptionDataChunksBitmask
+{
+ // First byte uppper nibble
+ k_EBLEButtonChunk1 = 0x10,
+ k_EBLEButtonChunk2 = 0x20,
+ k_EBLEButtonChunk3 = 0x40,
+ k_EBLELeftJoystickChunk = 0x80,
+
+ // Second full byte
+ k_EBLELeftTrackpadChunk = 0x100,
+ k_EBLERightTrackpadChunk = 0x200,
+ k_EBLEIMUAccelChunk = 0x400,
+ k_EBLEIMUGyroChunk = 0x800,
+ k_EBLEIMUQuatChunk = 0x1000,
+};
+
+#pragma pack()
+
+#endif // _CONTROLLER_STRUCTS
--- a/external/SDL2/src/joystick/iphoneos/SDL_sysjoystick.m
+++ b/external/SDL2/src/joystick/iphoneos/SDL_sysjoystick.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -24,7 +24,7 @@
#include "SDL_sysjoystick_c.h"
/* needed for SDL_IPHONE_MAX_GFORCE macro */
-#include "SDL_config_iphoneos.h"
+#include "../../../include/SDL_config_iphoneos.h"
#include "SDL_assert.h"
#include "SDL_events.h"
@@ -129,6 +129,11 @@
if (controller.extendedGamepad) {
GCExtendedGamepad *gamepad = controller.extendedGamepad;
+ BOOL is_xbox = [controller.vendorName containsString: @"Xbox"];
+ BOOL is_ps4 = [controller.vendorName containsString: @"DUALSHOCK"];
+#if TARGET_OS_TV
+ BOOL is_MFi = (!is_xbox && !is_ps4);
+#endif
int nbuttons = 0;
/* These buttons are part of the original MFi spec */
@@ -155,20 +160,24 @@
device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_BACK);
++nbuttons;
}
- if ([gamepad respondsToSelector:@selector(buttonMenu)] && gamepad.buttonMenu) {
- device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
- ++nbuttons;
- } else {
- device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
- ++nbuttons;
+ BOOL has_direct_menu = [gamepad respondsToSelector:@selector(buttonMenu)] && gamepad.buttonMenu;
+#if TARGET_OS_TV
+ /* On tvOS MFi controller menu button brings you to the home screen */
+ if (is_MFi) {
+ has_direct_menu = FALSE;
+ }
+#endif
+ device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
+ ++nbuttons;
+ if (!has_direct_menu) {
device->uses_pause_handler = SDL_TRUE;
}
#pragma clang diagnostic pop
- if ([controller.vendorName containsString: @"Xbox"]) {
+ if (is_xbox) {
vendor = VENDOR_MICROSOFT;
product = 0x02E0; /* Assume Xbox One S BLE Controller unless/until GCController flows VID/PID */
- } else if ([controller.vendorName containsString: @"DUALSHOCK"]) {
+ } else if (is_ps4) {
vendor = VENDOR_SONY;
product = 0x09CC; /* Assume DS4 Slim unless/until GCController flows VID/PID */
} else {
@@ -204,7 +213,6 @@
}
#if TARGET_OS_TV
else if (controller.microGamepad) {
- GCMicroGamepad *gamepad = controller.microGamepad;
int nbuttons = 0;
device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_A);
@@ -211,14 +219,9 @@
device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_B); /* Button X on microGamepad */
nbuttons += 2;
- if ([gamepad respondsToSelector:@selector(buttonMenu)] && gamepad.buttonMenu) {
- device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
- ++nbuttons;
- } else {
- device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
- ++nbuttons;
- device->uses_pause_handler = SDL_TRUE;
- }
+ device->button_mask |= (1 << SDL_CONTROLLER_BUTTON_START);
+ ++nbuttons;
+ device->uses_pause_handler = SDL_TRUE;
vendor = VENDOR_APPLE;
product = 3;
@@ -467,6 +470,15 @@
return device ? (int)device->controller.playerIndex : -1;
}
+static void
+IOS_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+ SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index);
+ if (device) {
+ device->controller.playerIndex = player_index;
+ }
+}
+
static SDL_JoystickGUID
IOS_JoystickGetDeviceGUID( int device_index )
{
@@ -614,7 +626,6 @@
GCController *controller = joystick->hwdata->controller;
Uint8 hatstate = SDL_HAT_CENTERED;
int i;
- int updateplayerindex = 0;
int pause_button_index = 0;
if (controller.extendedGamepad) {
@@ -668,17 +679,10 @@
hatstate = IOS_MFIJoystickHatStateForDPad(gamepad.dpad);
for (i = 0; i < SDL_arraysize(axes); i++) {
- /* The triggers (axes 2 and 5) are resting at -32768 but SDL
- * initializes its values to 0. We only want to make sure the
- * player index is up to date if the user actually moves an axis. */
- if ((i != 2 && i != 5) || axes[i] != -32768) {
- updateplayerindex |= (joystick->axes[i].value != axes[i]);
- }
SDL_PrivateJoystickAxis(joystick, i, axes[i]);
}
for (i = 0; i < button_count; i++) {
- updateplayerindex |= (joystick->buttons[i] != buttons[i]);
SDL_PrivateJoystickButton(joystick, i, buttons[i]);
}
} else if (controller.gamepad) {
@@ -699,7 +703,6 @@
hatstate = IOS_MFIJoystickHatStateForDPad(gamepad.dpad);
for (i = 0; i < button_count; i++) {
- updateplayerindex |= (joystick->buttons[i] != buttons[i]);
SDL_PrivateJoystickButton(joystick, i, buttons[i]);
}
}
@@ -713,7 +716,6 @@
};
for (i = 0; i < SDL_arraysize(axes); i++) {
- updateplayerindex |= (joystick->axes[i].value != axes[i]);
SDL_PrivateJoystickAxis(joystick, i, axes[i]);
}
@@ -735,7 +737,6 @@
#pragma clang diagnostic pop
for (i = 0; i < button_count; i++) {
- updateplayerindex |= (joystick->buttons[i] != buttons[i]);
SDL_PrivateJoystickButton(joystick, i, buttons[i]);
}
}
@@ -742,7 +743,6 @@
#endif /* TARGET_OS_TV */
if (joystick->nhats > 0) {
- updateplayerindex |= (joystick->hats[0] != hatstate);
SDL_PrivateJoystickHat(joystick, 0, hatstate);
}
@@ -750,37 +750,15 @@
for (i = 0; i < joystick->hwdata->num_pause_presses; i++) {
SDL_PrivateJoystickButton(joystick, pause_button_index, SDL_PRESSED);
SDL_PrivateJoystickButton(joystick, pause_button_index, SDL_RELEASED);
- updateplayerindex = YES;
}
joystick->hwdata->num_pause_presses = 0;
}
-
- if (updateplayerindex && controller.playerIndex == -1) {
- BOOL usedPlayerIndexSlots[4] = {NO, NO, NO, NO};
-
- /* Find the player index of all other connected controllers. */
- for (GCController *c in [GCController controllers]) {
- if (c != controller && c.playerIndex >= 0) {
- usedPlayerIndexSlots[c.playerIndex] = YES;
- }
- }
-
- /* Set this controller's player index to the first unused index.
- * FIXME: This logic isn't great... but SDL doesn't expose this
- * concept in its external API, so we don't have much to go on. */
- for (i = 0; i < SDL_arraysize(usedPlayerIndexSlots); i++) {
- if (!usedPlayerIndexSlots[i]) {
- controller.playerIndex = i;
- break;
- }
- }
- }
}
#endif /* SDL_JOYSTICK_MFI */
}
static int
-IOS_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+IOS_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
@@ -872,6 +850,7 @@
IOS_JoystickDetect,
IOS_JoystickGetDeviceName,
IOS_JoystickGetDevicePlayerIndex,
+ IOS_JoystickSetDevicePlayerIndex,
IOS_JoystickGetDeviceGUID,
IOS_JoystickGetDeviceInstanceID,
IOS_JoystickOpen,
--- a/external/SDL2/src/joystick/iphoneos/SDL_sysjoystick_c.h
+++ b/external/SDL2/src/joystick/iphoneos/SDL_sysjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/linux/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/linux/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -80,7 +80,8 @@
static int numjoysticks = 0;
#if !SDL_USE_LIBUDEV
-static Uint32 last_joy_detect_time = 0;
+static Uint32 last_joy_detect_time;
+static time_t last_input_dir_mtime;
#endif
#define test_bit(nr, addr) \
@@ -88,10 +89,43 @@
#define NBITS(x) ((((x)-1)/(sizeof(long) * 8))+1)
static int
+PrefixMatch(const char *a, const char *b)
+{
+ int matchlen = 0;
+ while (*a && *b) {
+ if (*a++ == *b++) {
+ ++matchlen;
+ } else {
+ break;
+ }
+ }
+ return matchlen;
+}
+
+static void
+FixupDeviceInfoForMapping(int fd, struct input_id *inpid)
+{
+ if (inpid->vendor == 0x045e && inpid->product == 0x0b05 && inpid->version == 0x0903) {
+ /* This is a Microsoft Xbox One Elite Series 2 controller */
+ unsigned long keybit[NBITS(KEY_MAX)] = { 0 };
+
+ /* The first version of the firmware duplicated all the inputs */
+ if ((ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybit)), keybit) >= 0) &&
+ test_bit(0x2c0, keybit)) {
+ /* Change the version to 0x0902, so we can map it differently */
+ inpid->version = 0x0902;
+ }
+ }
+}
+
+
+static int
IsJoystick(int fd, char *namebuf, const size_t namebuflen, SDL_JoystickGUID *guid)
{
struct input_id inpid;
Uint16 *guid16 = (Uint16 *)guid->data;
+ const char *name;
+ const char *spot;
#if !SDL_USE_LIBUDEV
/* When udev is enabled we only get joystick devices here, so there's no need to test them */
@@ -111,21 +145,37 @@
}
#endif
- if (ioctl(fd, EVIOCGNAME(namebuflen), namebuf) < 0) {
+ if (ioctl(fd, EVIOCGID, &inpid) < 0) {
return 0;
}
- if (ioctl(fd, EVIOCGID, &inpid) < 0) {
- return 0;
+ name = SDL_GetCustomJoystickName(inpid.vendor, inpid.product);
+ if (name) {
+ SDL_strlcpy(namebuf, name, namebuflen);
+ } else {
+ if (ioctl(fd, EVIOCGNAME(namebuflen), namebuf) < 0) {
+ return 0;
+ }
+
+ /* Remove duplicate manufacturer in the name */
+ for (spot = namebuf + 1; *spot; ++spot) {
+ int matchlen = PrefixMatch(namebuf, spot);
+ if (matchlen > 0 && spot[matchlen - 1] == ' ') {
+ SDL_memmove(namebuf, spot, SDL_strlen(spot)+1);
+ break;
+ }
+ }
}
#ifdef SDL_JOYSTICK_HIDAPI
- if (HIDAPI_IsDevicePresent(inpid.vendor, inpid.product, inpid.version)) {
+ if (HIDAPI_IsDevicePresent(inpid.vendor, inpid.product, inpid.version, namebuf)) {
/* The HIDAPI driver is taking care of this device */
return 0;
}
#endif
+ FixupDeviceInfoForMapping(fd, &inpid);
+
#ifdef DEBUG_JOYSTICK
printf("Joystick: %s, bustype = %d, vendor = 0x%.4x, product = 0x%.4x, version = %d\n", namebuf, inpid.bustype, inpid.vendor, inpid.product, inpid.version);
#endif
@@ -421,21 +471,28 @@
Uint32 now = SDL_GetTicks();
if (!last_joy_detect_time || SDL_TICKS_PASSED(now, last_joy_detect_time + SDL_JOY_DETECT_INTERVAL_MS)) {
- DIR *folder;
- struct dirent *dent;
+ struct stat sb;
- folder = opendir("/dev/input");
- if (folder) {
- while ((dent = readdir(folder))) {
- int len = SDL_strlen(dent->d_name);
- if (len > 5 && SDL_strncmp(dent->d_name, "event", 5) == 0) {
- char path[PATH_MAX];
- SDL_snprintf(path, SDL_arraysize(path), "/dev/input/%s", dent->d_name);
- MaybeAddDevice(path);
+ /* Opening input devices can generate synchronous device I/O, so avoid it if we can */
+ if (stat("/dev/input", &sb) == 0 && sb.st_mtime != last_input_dir_mtime) {
+ DIR *folder;
+ struct dirent *dent;
+
+ folder = opendir("/dev/input");
+ if (folder) {
+ while ((dent = readdir(folder))) {
+ int len = SDL_strlen(dent->d_name);
+ if (len > 5 && SDL_strncmp(dent->d_name, "event", 5) == 0) {
+ char path[PATH_MAX];
+ SDL_snprintf(path, SDL_arraysize(path), "/dev/input/%s", dent->d_name);
+ MaybeAddDevice(path);
+ }
}
+
+ closedir(folder);
}
- closedir(folder);
+ last_input_dir_mtime = sb.st_mtime;
}
last_joy_detect_time = now;
@@ -483,6 +540,10 @@
/* Force a scan to build the initial device list */
SDL_UDEV_Scan();
#else
+ /* Force immediate joystick detection */
+ last_joy_detect_time = 0;
+ last_input_dir_mtime = 0;
+
/* Report all devices currently present */
LINUX_JoystickDetect();
#endif
@@ -527,6 +588,11 @@
return -1;
}
+static void
+LINUX_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
static SDL_JoystickGUID
LINUX_JoystickGetDeviceGUID( int device_index )
{
@@ -661,7 +727,7 @@
absinfo.value, absinfo.minimum, absinfo.maximum,
absinfo.fuzz, absinfo.flat);
#endif /* DEBUG_INPUT_EVENTS */
- joystick->hwdata->hats_indices[joystick->nhats++] = hat_index;
+ joystick->hwdata->hats_indices[hat_index] = joystick->nhats++;
}
}
if (test_bit(REL_X, relbit) || test_bit(REL_Y, relbit)) {
@@ -757,7 +823,7 @@
}
static int
-LINUX_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+LINUX_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
struct input_event event;
@@ -765,7 +831,7 @@
struct ff_effect *effect = &joystick->hwdata->effect;
effect->type = FF_RUMBLE;
- effect->replay.length = SDL_min(duration_ms, 32767);
+ effect->replay.length = SDL_MAX_RUMBLE_DURATION_MS;
effect->u.rumble.strong_magnitude = low_frequency_rumble;
effect->u.rumble.weak_magnitude = high_frequency_rumble;
} else if (joystick->hwdata->ff_sine) {
@@ -774,7 +840,7 @@
struct ff_effect *effect = &joystick->hwdata->effect;
effect->type = FF_PERIODIC;
- effect->replay.length = SDL_min(duration_ms, 32767);
+ effect->replay.length = SDL_MAX_RUMBLE_DURATION_MS;
effect->u.periodic.waveform = FF_SINE;
effect->u.periodic.magnitude = magnitude;
} else {
@@ -782,7 +848,11 @@
}
if (ioctl(joystick->hwdata->fd, EVIOCSFF, &joystick->hwdata->effect) < 0) {
- return SDL_SetError("Couldn't update rumble effect: %s", strerror(errno));
+ /* The kernel may have lost this effect, try to allocate a new one */
+ joystick->hwdata->effect.id = -1;
+ if (ioctl(joystick->hwdata->fd, EVIOCSFF, &joystick->hwdata->effect) < 0) {
+ return SDL_SetError("Couldn't update rumble effect: %s", strerror(errno));
+ }
}
event.type = EV_FF;
@@ -1044,6 +1114,7 @@
LINUX_JoystickDetect,
LINUX_JoystickGetDeviceName,
LINUX_JoystickGetDevicePlayerIndex,
+ LINUX_JoystickSetDevicePlayerIndex,
LINUX_JoystickGetDeviceGUID,
LINUX_JoystickGetDeviceInstanceID,
LINUX_JoystickOpen,
--- a/external/SDL2/src/joystick/linux/SDL_sysjoystick_c.h
+++ b/external/SDL2/src/joystick/linux/SDL_sysjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,6 +37,7 @@
SDL_bool ff_rumble;
SDL_bool ff_sine;
struct ff_effect effect;
+ Uint32 effect_expiration;
/* The current Linux joystick driver maps hats to two axes */
struct hwdata_hat
--- a/external/SDL2/src/joystick/psp/SDL_sysjoystick.c
+++ b/external/SDL2/src/joystick/psp/SDL_sysjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/sort_controllers.py
+++ b/external/SDL2/src/joystick/sort_controllers.py
@@ -11,6 +11,7 @@
parsing_controllers = False
controllers = []
controller_guids = {}
+sdk_conditionals = []
split_pattern = re.compile(r'([^"]*")([^,]*,)([^,]*,)([^"]*)(".*)')
def save_controller(line):
@@ -24,12 +25,15 @@
entry.append(match.group(5))
controllers.append(entry)
+ if ',sdk' in line:
+ sdk_conditionals.append(entry[1])
+
def write_controllers():
global controllers
global controller_guids
# Check for duplicates
for entry in controllers:
- if (entry[1] in controller_guids):
+ if (entry[1] in controller_guids and entry[1] not in sdk_conditionals):
current_name = entry[2]
existing_name = controller_guids[entry[1]][2]
print("Warning: entry '%s' is duplicate of entry '%s'" % (current_name, existing_name))
--- a/external/SDL2/src/joystick/steam/SDL_steamcontroller.c
+++ b/external/SDL2/src/joystick/steam/SDL_steamcontroller.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/steam/SDL_steamcontroller.h
+++ b/external/SDL2/src/joystick/steam/SDL_steamcontroller.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- /dev/null
+++ b/external/SDL2/src/joystick/usb_ids.h
@@ -1,0 +1,51 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef usb_ids_h_
+#define usb_ids_h_
+
+/* Definitions of useful USB VID/PID values */
+
+#define USB_VENDOR_HYPERKIN 0x2e24
+#define USB_VENDOR_MICROSOFT 0x045e
+#define USB_VENDOR_NINTENDO 0x057e
+#define USB_VENDOR_NVIDIA 0x0955
+#define USB_VENDOR_PDP 0x0e6f
+#define USB_VENDOR_POWERA 0x24c6
+#define USB_VENDOR_SONY 0x054c
+#define USB_VENDOR_RAZER 0x1532
+#define USB_VENDOR_VALVE 0x28de
+
+#define USB_PRODUCT_NINTENDO_GAMECUBE_ADAPTER 0x0337
+#define USB_PRODUCT_RAZER_PANTHERA 0x0401
+#define USB_PRODUCT_RAZER_PANTHERA_EVO 0x1008
+#define USB_PRODUCT_SONY_DS4 0x05c4
+#define USB_PRODUCT_SONY_DS4_DONGLE 0x0ba0
+#define USB_PRODUCT_SONY_DS4_SLIM 0x09cc
+#define USB_PRODUCT_XBOX_ONE_ELITE_SERIES_1 0x02e3
+#define USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2 0x0b00
+#define USB_PRODUCT_XBOX_ONE_ELITE_SERIES_2_BLUETOOTH 0x0b05
+#define USB_PRODUCT_XBOX_ONE_S_REV1_BLUETOOTH 0x02e0
+#define USB_PRODUCT_XBOX_ONE_S_REV2_BLUETOOTH 0x02fd
+
+#endif /* usb_ids_h_ */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/joystick/windows/SDL_dinputjoystick.c
+++ b/external/SDL2/src/joystick/windows/SDL_dinputjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -235,32 +235,136 @@
return SDL_SetError("%s() DirectX error 0x%8.8lx", function, code);
}
+#if 0 /* Microsoft recommended implementation, but slower than checking raw devices */
+#define COBJMACROS
+#include <wbemidl.h>
+#include <oleauto.h>
+
+static const IID CLSID_WbemLocator = { 0x4590f811, 0x1d3a, 0x11d0,{ 0x89, 0x1f, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24 } };
+static const IID IID_IWbemLocator = { 0xdc12a687, 0x737f, 0x11cf,{ 0x88, 0x4d, 0x00, 0xaa, 0x00, 0x4b, 0x2e, 0x24 } };
+
static SDL_bool
-SDL_IsXInputDevice(const GUID* pGuidProductFromDirectInput)
+WIN_IsXInputDevice(const GUID* pGuidProductFromDirectInput)
{
- static GUID IID_ValveStreamingGamepad = { MAKELONG(0x28DE, 0x11FF), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_X360WiredGamepad = { MAKELONG(0x045E, 0x02A1), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_X360WirelessGamepad = { MAKELONG(0x045E, 0x028E), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneWiredGamepad = { MAKELONG(0x045E, 0x02FF), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneWirelessGamepad = { MAKELONG(0x045E, 0x02DD), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneNewWirelessGamepad = { MAKELONG(0x045E, 0x02D1), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneSWirelessGamepad = { MAKELONG(0x045E, 0x02EA), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneSBluetoothGamepad = { MAKELONG(0x045E, 0x02E0), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
- static GUID IID_XOneEliteWirelessGamepad = { MAKELONG(0x045E, 0x02E3), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } };
+ IWbemLocator* pIWbemLocator = NULL;
+ IEnumWbemClassObject* pEnumDevices = NULL;
+ IWbemClassObject* pDevices[20];
+ IWbemServices* pIWbemServices = NULL;
+ BSTR bstrNamespace = NULL;
+ BSTR bstrDeviceID = NULL;
+ BSTR bstrClassName = NULL;
+ DWORD uReturned = 0;
+ SDL_bool bIsXinputDevice = SDL_FALSE;
+ UINT iDevice = 0;
+ VARIANT var;
+ HRESULT hr;
- static const GUID *s_XInputProductGUID[] = {
- &IID_ValveStreamingGamepad,
- &IID_X360WiredGamepad, /* Microsoft's wired X360 controller for Windows. */
- &IID_X360WirelessGamepad, /* Microsoft's wireless X360 controller for Windows. */
- &IID_XOneWiredGamepad, /* Microsoft's wired Xbox One controller for Windows. */
- &IID_XOneWirelessGamepad, /* Microsoft's wireless Xbox One controller for Windows. */
- &IID_XOneNewWirelessGamepad, /* Microsoft's updated wireless Xbox One controller (w/ 3.5 mm jack) for Windows. */
- &IID_XOneSWirelessGamepad, /* Microsoft's wireless Xbox One S controller for Windows. */
- &IID_XOneSBluetoothGamepad, /* Microsoft's Bluetooth Xbox One S controller for Windows. */
- &IID_XOneEliteWirelessGamepad /* Microsoft's wireless Xbox One Elite controller for Windows. */
- };
+ SDL_zeroa(pDevices);
- size_t iDevice;
+ // Create WMI
+ hr = CoCreateInstance(&CLSID_WbemLocator,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ &IID_IWbemLocator,
+ (LPVOID*)&pIWbemLocator);
+ if (FAILED(hr) || pIWbemLocator == NULL)
+ goto LCleanup;
+
+ bstrNamespace = SysAllocString(L"\\\\.\\root\\cimv2"); if (bstrNamespace == NULL) goto LCleanup;
+ bstrClassName = SysAllocString(L"Win32_PNPEntity"); if (bstrClassName == NULL) goto LCleanup;
+ bstrDeviceID = SysAllocString(L"DeviceID"); if (bstrDeviceID == NULL) goto LCleanup;
+
+ // Connect to WMI
+ hr = IWbemLocator_ConnectServer(pIWbemLocator, bstrNamespace, NULL, NULL, 0L,
+ 0L, NULL, NULL, &pIWbemServices);
+ if (FAILED(hr) || pIWbemServices == NULL) {
+ goto LCleanup;
+ }
+
+ // Switch security level to IMPERSONATE.
+ CoSetProxyBlanket((IUnknown *)pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
+ RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
+
+ hr = IWbemServices_CreateInstanceEnum(pIWbemServices, bstrClassName, 0, NULL, &pEnumDevices);
+ if (FAILED(hr) || pEnumDevices == NULL)
+ goto LCleanup;
+
+ // Loop over all devices
+ for (;;) {
+ // Get 20 at a time
+ hr = IEnumWbemClassObject_Next(pEnumDevices, 10000, SDL_arraysize(pDevices), pDevices, &uReturned);
+ if (FAILED(hr)) {
+ goto LCleanup;
+ }
+ if (uReturned == 0) {
+ break;
+ }
+
+ for (iDevice = 0; iDevice < uReturned; iDevice++) {
+ // For each device, get its device ID
+ hr = IWbemClassObject_Get(pDevices[iDevice], bstrDeviceID, 0L, &var, NULL, NULL);
+ if (SUCCEEDED(hr) && var.vt == VT_BSTR && var.bstrVal != NULL) {
+ // Check if the device ID contains "IG_". If it does, then it's an XInput device
+ // This information can not be found from DirectInput
+ if (SDL_wcsstr(var.bstrVal, L"IG_")) {
+ char *bstrVal = WIN_StringToUTF8(var.bstrVal);
+
+ // If it does, then get the VID/PID from var.bstrVal
+ DWORD dwPid = 0, dwVid = 0, dwVidPid;
+ const char *strVid, *strPid;
+ strVid = SDL_strstr(bstrVal, "VID_");
+ if (strVid && SDL_sscanf(strVid, "VID_%4X", &dwVid) != 1)
+ dwVid = 0;
+ strPid = SDL_strstr(bstrVal, "PID_");
+ if (strPid && SDL_sscanf(strPid, "PID_%4X", &dwPid) != 1)
+ dwPid = 0;
+
+ SDL_free(bstrVal);
+
+ // Compare the VID/PID to the DInput device
+ dwVidPid = MAKELONG(dwVid, dwPid);
+ if (dwVidPid == pGuidProductFromDirectInput->Data1) {
+ bIsXinputDevice = SDL_TRUE;
+ goto LCleanup;
+ }
+ }
+ }
+ IWbemClassObject_Release(pDevices[iDevice]);
+ }
+ }
+
+LCleanup:
+ if (bstrNamespace) {
+ SysFreeString(bstrNamespace);
+ }
+ if (bstrDeviceID) {
+ SysFreeString(bstrDeviceID);
+ }
+ if (bstrClassName) {
+ SysFreeString(bstrClassName);
+ }
+ for (iDevice = 0; iDevice < SDL_arraysize(pDevices); iDevice++) {
+ if (pDevices[iDevice]) {
+ IWbemClassObject_Release(pDevices[iDevice]);
+ }
+ }
+ if (pEnumDevices) {
+ IEnumWbemClassObject_Release(pEnumDevices);
+ }
+ if (pIWbemLocator) {
+ IWbemLocator_Release(pIWbemLocator);
+ }
+ if (pIWbemServices) {
+ IWbemServices_Release(pIWbemServices);
+ }
+
+ return bIsXinputDevice;
+}
+#endif /* 0 */
+
+static SDL_bool
+SDL_IsXInputDevice(const GUID* pGuidProductFromDirectInput)
+{
UINT i;
if (!SDL_XINPUT_Enabled()) {
@@ -267,10 +371,13 @@
return SDL_FALSE;
}
- /* Check for well known XInput device GUIDs */
- /* This lets us skip RAWINPUT for popular devices. Also, we need to do this for the Valve Streaming Gamepad because it's virtualized and doesn't show up in the device list. */
- for (iDevice = 0; iDevice < SDL_arraysize(s_XInputProductGUID); ++iDevice) {
- if (SDL_memcmp(pGuidProductFromDirectInput, s_XInputProductGUID[iDevice], sizeof(GUID)) == 0) {
+ if (SDL_memcmp(&pGuidProductFromDirectInput->Data4[2], "PIDVID", 6) == 0) {
+ Uint16 vendor_id = (Uint16)LOWORD(pGuidProductFromDirectInput->Data1);
+ Uint16 product_id = (Uint16)HIWORD(pGuidProductFromDirectInput->Data1);
+ SDL_GameControllerType type = SDL_GetJoystickGameControllerType("", vendor_id, product_id, -1, 0, 0, 0);
+ if (type == SDL_CONTROLLER_TYPE_XBOX360 ||
+ type == SDL_CONTROLLER_TYPE_XBOXONE ||
+ (vendor_id == 0x28DE && product_id == 0x11FF)) {
return SDL_TRUE;
}
}
@@ -325,7 +432,7 @@
SDL_free(effect);
}
-DIEFFECT *CreateRumbleEffectData(Sint16 magnitude, Uint32 duration_ms)
+DIEFFECT *CreateRumbleEffectData(Sint16 magnitude)
{
DIEFFECT *effect;
DIPERIODIC *periodic;
@@ -338,7 +445,7 @@
effect->dwSize = sizeof(*effect);
effect->dwGain = 10000;
effect->dwFlags = DIEFF_OBJECTOFFSETS;
- effect->dwDuration = duration_ms * 1000; /* In microseconds. */
+ effect->dwDuration = SDL_MAX_RUMBLE_DURATION_MS * 1000; /* In microseconds. */
effect->dwTriggerButton = DIEB_NOTRIGGER;
effect->cAxes = 2;
@@ -414,6 +521,7 @@
Uint16 product = 0;
Uint16 version = 0;
WCHAR hidPath[MAX_PATH];
+ const char *name;
if (devtype == DI8DEVTYPE_SUPPLEMENTAL) {
/* Add any supplemental devices that should be ignored here */
@@ -498,15 +606,7 @@
SDL_zerop(pNewJoystick);
SDL_wcslcpy(pNewJoystick->hidPath, hidPath, SDL_arraysize(pNewJoystick->hidPath));
- pNewJoystick->joystickname = WIN_StringToUTF8(pdidInstance->tszProductName);
- if (!pNewJoystick->joystickname) {
- SDL_free(pNewJoystick);
- return DIENUM_CONTINUE; /* better luck next time? */
- }
-
- SDL_memcpy(&(pNewJoystick->dxdevice), pdidInstance,
- sizeof(DIDEVICEINSTANCE));
-
+ SDL_memcpy(&pNewJoystick->dxdevice, pdidInstance, sizeof(DIDEVICEINSTANCE));
SDL_memset(pNewJoystick->guid.data, 0, sizeof(pNewJoystick->guid.data));
guid16 = (Uint16 *)pNewJoystick->guid.data;
@@ -529,14 +629,36 @@
SDL_strlcpy((char*)guid16, pNewJoystick->joystickname, sizeof(pNewJoystick->guid.data) - 4);
}
+ name = SDL_GetCustomJoystickName(vendor, product);
+ if (name) {
+ pNewJoystick->joystickname = SDL_strdup(name);
+ } else {
+ pNewJoystick->joystickname = WIN_StringToUTF8(pdidInstance->tszProductName);
+ }
+ if (!pNewJoystick->joystickname) {
+ SDL_free(pNewJoystick);
+ return DIENUM_CONTINUE; /* better luck next time? */
+ }
+
+ if (SDL_strstr(pNewJoystick->joystickname, " XINPUT ") != NULL) {
+ /* This is a duplicate interface for a controller that will show up with XInput,
+ e.g. Xbox One Elite Series 2 in Bluetooth mode.
+ */
+ SDL_free(pNewJoystick->joystickname);
+ SDL_free(pNewJoystick);
+ return DIENUM_CONTINUE;
+ }
+
if (SDL_ShouldIgnoreJoystick(pNewJoystick->joystickname, pNewJoystick->guid)) {
+ SDL_free(pNewJoystick->joystickname);
SDL_free(pNewJoystick);
return DIENUM_CONTINUE;
}
#ifdef SDL_JOYSTICK_HIDAPI
- if (HIDAPI_IsDevicePresent(vendor, product, 0)) {
+ if (HIDAPI_IsDevicePresent(vendor, product, 0, pNewJoystick->joystickname)) {
/* The HIDAPI driver is taking care of this device */
+ SDL_free(pNewJoystick->joystickname);
SDL_free(pNewJoystick);
return DIENUM_CONTINUE;
}
@@ -822,7 +944,7 @@
}
static int
-SDL_DINPUT_JoystickInitRumble(SDL_Joystick * joystick, Sint16 magnitude, Uint32 duration_ms)
+SDL_DINPUT_JoystickInitRumble(SDL_Joystick * joystick, Sint16 magnitude)
{
HRESULT result;
@@ -844,7 +966,7 @@
}
/* Create the effect */
- joystick->hwdata->ffeffect = CreateRumbleEffectData(magnitude, duration_ms);
+ joystick->hwdata->ffeffect = CreateRumbleEffectData(magnitude);
if (!joystick->hwdata->ffeffect) {
return SDL_OutOfMemory();
}
@@ -858,7 +980,7 @@
}
int
-SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
HRESULT result;
@@ -871,7 +993,6 @@
if (joystick->hwdata->ff_initialized) {
DIPERIODIC *periodic = ((DIPERIODIC *)joystick->hwdata->ffeffect->lpvTypeSpecificParams);
- joystick->hwdata->ffeffect->dwDuration = duration_ms * 1000; /* In microseconds. */
periodic->dwMagnitude = CONVERT_MAGNITUDE(magnitude);
result = IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS));
@@ -885,7 +1006,7 @@
return SetDIerror("IDirectInputDevice8::SetParameters", result);
}
} else {
- if (SDL_DINPUT_JoystickInitRumble(joystick, magnitude, duration_ms) < 0) {
+ if (SDL_DINPUT_JoystickInitRumble(joystick, magnitude) < 0) {
return -1;
}
joystick->hwdata->ff_initialized = SDL_TRUE;
@@ -1130,7 +1251,7 @@
}
int
-SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
--- a/external/SDL2/src/joystick/windows/SDL_dinputjoystick_c.h
+++ b/external/SDL2/src/joystick/windows/SDL_dinputjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -23,7 +23,7 @@
extern int SDL_DINPUT_JoystickInit(void);
extern void SDL_DINPUT_JoystickDetect(JoyStick_DeviceData **pContext);
extern int SDL_DINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice);
-extern int SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
+extern int SDL_DINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble);
extern void SDL_DINPUT_JoystickUpdate(SDL_Joystick * joystick);
extern void SDL_DINPUT_JoystickClose(SDL_Joystick * joystick);
extern void SDL_DINPUT_JoystickQuit(void);
--- a/external/SDL2/src/joystick/windows/SDL_mmjoystick.c
+++ b/external/SDL2/src/joystick/windows/SDL_mmjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/joystick/windows/SDL_windowsjoystick.c
+++ b/external/SDL2/src/joystick/windows/SDL_windowsjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -223,7 +223,7 @@
#if SDL_JOYSTICK_XINPUT
SDL_bool bOpenedXInputDevices[XUSER_MAX_COUNT];
- SDL_zero(bOpenedXInputDevices);
+ SDL_zeroa(bOpenedXInputDevices);
#endif
if (SDL_CreateDeviceNotification(¬ification_data) < 0) {
@@ -419,6 +419,11 @@
return device->bXInputDevice ? (int)device->XInputUserId : -1;
}
+static void
+WINDOWS_JoystickSetDevicePlayerIndex(int device_index, int player_index)
+{
+}
+
/* return the stable device guid for this device index */
static SDL_JoystickGUID
WINDOWS_JoystickGetDeviceGUID(int device_index)
@@ -476,12 +481,12 @@
}
static int
-WINDOWS_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+WINDOWS_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
if (joystick->hwdata->bXInputDevice) {
- return SDL_XINPUT_JoystickRumble(joystick, low_frequency_rumble, high_frequency_rumble, duration_ms);
+ return SDL_XINPUT_JoystickRumble(joystick, low_frequency_rumble, high_frequency_rumble);
} else {
- return SDL_DINPUT_JoystickRumble(joystick, low_frequency_rumble, high_frequency_rumble, duration_ms);
+ return SDL_DINPUT_JoystickRumble(joystick, low_frequency_rumble, high_frequency_rumble);
}
}
@@ -557,6 +562,7 @@
WINDOWS_JoystickDetect,
WINDOWS_JoystickGetDeviceName,
WINDOWS_JoystickGetDevicePlayerIndex,
+ WINDOWS_JoystickSetDevicePlayerIndex,
WINDOWS_JoystickGetDeviceGUID,
WINDOWS_JoystickGetDeviceInstanceID,
WINDOWS_JoystickOpen,
--- a/external/SDL2/src/joystick/windows/SDL_windowsjoystick_c.h
+++ b/external/SDL2/src/joystick/windows/SDL_windowsjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -66,7 +66,6 @@
struct joystick_hwdata
{
SDL_JoystickGUID guid;
- Uint32 rumble_expiration;
#if SDL_JOYSTICK_DINPUT
LPDIRECTINPUTDEVICE8 InputDevice;
--- a/external/SDL2/src/joystick/windows/SDL_xinputjoystick.c
+++ b/external/SDL2/src/joystick/windows/SDL_xinputjoystick.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,6 +26,7 @@
#include "SDL_assert.h"
#include "SDL_hints.h"
+#include "SDL_log.h"
#include "SDL_timer.h"
#include "SDL_windowsjoystick_c.h"
#include "SDL_xinputjoystick_c.h"
@@ -138,6 +139,28 @@
return; /* oh well. */
}
+ /* First see if we have a cached entry for this index */
+ if (s_arrXInputDevicePath[userid]) {
+ for (i = 0; i < device_count; i++) {
+ RID_DEVICE_INFO rdi;
+ char devName[128];
+ UINT rdiSize = sizeof(rdi);
+ UINT nameSize = SDL_arraysize(devName);
+
+ rdi.cbSize = sizeof(rdi);
+ if (devices[i].dwType == RIM_TYPEHID &&
+ GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != (UINT)-1 &&
+ GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICENAME, devName, &nameSize) != (UINT)-1) {
+ if (SDL_strcmp(devName, s_arrXInputDevicePath[userid]) == 0) {
+ *pVID = (Uint16)rdi.hid.dwVendorId;
+ *pPID = (Uint16)rdi.hid.dwProductId;
+ *pVersion = (Uint16)rdi.hid.dwVersionNumber;
+ return;
+ }
+ }
+ }
+ }
+
for (i = 0; i < device_count; i++) {
RID_DEVICE_INFO rdi;
char devName[128];
@@ -145,44 +168,50 @@
UINT nameSize = SDL_arraysize(devName);
rdi.cbSize = sizeof(rdi);
- if ((devices[i].dwType == RIM_TYPEHID) &&
- (GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != ((UINT)-1)) &&
- (GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICENAME, devName, &nameSize) != ((UINT)-1)) &&
- (SDL_strstr(devName, "IG_") != NULL)) {
- SDL_bool found = SDL_FALSE;
- for (j = 0; j < SDL_arraysize(s_arrXInputDevicePath); ++j) {
- if (j == userid) {
- continue;
+ if (devices[i].dwType == RIM_TYPEHID &&
+ GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != (UINT)-1 &&
+ GetRawInputDeviceInfoA(devices[i].hDevice, RIDI_DEVICENAME, devName, &nameSize) != (UINT)-1) {
+#ifdef DEBUG_JOYSTICK
+ SDL_Log("Raw input device: VID = 0x%x, PID = 0x%x, %s\n", rdi.hid.dwVendorId, rdi.hid.dwProductId, devName);
+#endif
+ if (SDL_strstr(devName, "IG_") != NULL) {
+ SDL_bool found = SDL_FALSE;
+ for (j = 0; j < SDL_arraysize(s_arrXInputDevicePath); ++j) {
+ if (!s_arrXInputDevicePath[j]) {
+ continue;
+ }
+ if (SDL_strcmp(devName, s_arrXInputDevicePath[j]) == 0) {
+ found = SDL_TRUE;
+ break;
+ }
}
- if (!s_arrXInputDevicePath[j]) {
+ if (found) {
+ /* We already have this device in our XInput device list */
continue;
}
- if (SDL_strcmp(devName, s_arrXInputDevicePath[j]) == 0) {
- found = SDL_TRUE;
- break;
+
+ /* We don't actually know if this is the right device for this
+ * userid, but we'll record it so we'll at least be consistent
+ * when the raw device list changes.
+ */
+ *pVID = (Uint16)rdi.hid.dwVendorId;
+ *pPID = (Uint16)rdi.hid.dwProductId;
+ *pVersion = (Uint16)rdi.hid.dwVersionNumber;
+ if (s_arrXInputDevicePath[userid]) {
+ SDL_free(s_arrXInputDevicePath[userid]);
}
+ s_arrXInputDevicePath[userid] = SDL_strdup(devName);
+ return;
}
- if (found) {
- /* We already have this device in our XInput device list */
- continue;
- }
-
- /* We don't actually know if this is the right device for this
- * userid, but we'll record it so we'll at least be consistent
- * when the raw device list changes.
- */
- *pVID = (Uint16)rdi.hid.dwVendorId;
- *pPID = (Uint16)rdi.hid.dwProductId;
- *pVersion = (Uint16)rdi.hid.dwVersionNumber;
- if (s_arrXInputDevicePath[userid]) {
- SDL_free(s_arrXInputDevicePath[userid]);
- }
- s_arrXInputDevicePath[userid] = SDL_strdup(devName);
- break;
}
}
SDL_free(devices);
#endif /* ifndef __WINRT__ */
+
+ /* The device wasn't in the raw HID device list, it's probably Bluetooth */
+ *pVID = 0x045e; /* Microsoft */
+ *pPID = 0x02fd; /* XBox One S Bluetooth */
+ *pVersion = 0;
}
static void
@@ -191,6 +220,7 @@
Uint16 vendor = 0;
Uint16 product = 0;
Uint16 version = 0;
+ const char *name;
JoyStick_DeviceData *pPrevJoystick = NULL;
JoyStick_DeviceData *pNewJoystick = *pContext;
@@ -218,22 +248,13 @@
pNewJoystick = pNewJoystick->pNext;
}
- pNewJoystick = (JoyStick_DeviceData *)SDL_malloc(sizeof(JoyStick_DeviceData));
+ pNewJoystick = (JoyStick_DeviceData *)SDL_calloc(1, sizeof(JoyStick_DeviceData));
if (!pNewJoystick) {
return; /* better luck next time? */
}
- SDL_zerop(pNewJoystick);
- pNewJoystick->joystickname = GetXInputName(userid, SubType);
- if (!pNewJoystick->joystickname) {
- SDL_free(pNewJoystick);
- return; /* better luck next time? */
- }
-
pNewJoystick->bXInputDevice = SDL_TRUE;
- if (SDL_XInputUseOldJoystickMapping()) {
- SDL_zero(pNewJoystick->guid);
- } else {
+ if (!SDL_XInputUseOldJoystickMapping()) {
Uint16 *guid16 = (Uint16 *)pNewJoystick->guid.data;
GuessXInputDevice(userid, &vendor, &product, &version);
@@ -254,6 +275,17 @@
pNewJoystick->SubType = SubType;
pNewJoystick->XInputUserId = userid;
+ name = SDL_GetCustomJoystickName(vendor, product);
+ if (name) {
+ pNewJoystick->joystickname = SDL_strdup(name);
+ } else {
+ pNewJoystick->joystickname = GetXInputName(userid, SubType);
+ }
+ if (!pNewJoystick->joystickname) {
+ SDL_free(pNewJoystick);
+ return; /* better luck next time? */
+ }
+
if (SDL_ShouldIgnoreJoystick(pNewJoystick->joystickname, pNewJoystick->guid)) {
SDL_free(pNewJoystick);
return;
@@ -260,7 +292,7 @@
}
#ifdef SDL_JOYSTICK_HIDAPI
- if (HIDAPI_IsDevicePresent(vendor, product, version)) {
+ if (HIDAPI_IsDevicePresent(vendor, product, version, pNewJoystick->joystickname)) {
/* The HIDAPI driver is taking care of this device */
SDL_free(pNewJoystick);
return;
@@ -312,8 +344,6 @@
SDL_assert(XINPUTSETSTATE);
SDL_assert(userId < XUSER_MAX_COUNT);
- joystick->player_index = userId;
-
joystick->hwdata->bXInputDevice = SDL_TRUE;
if (XINPUTGETCAPABILITIES(userId, XINPUT_FLAG_GAMEPAD, &capabilities) != ERROR_SUCCESS) {
@@ -435,7 +465,7 @@
}
int
-SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
XINPUT_VIBRATION XVibration;
@@ -448,12 +478,6 @@
if (XINPUTSETSTATE(joystick->hwdata->userid, &XVibration) != ERROR_SUCCESS) {
return SDL_SetError("XInputSetState() failed");
}
-
- if ((low_frequency_rumble || high_frequency_rumble) && duration_ms) {
- joystick->hwdata->rumble_expiration = SDL_GetTicks() + duration_ms;
- } else {
- joystick->hwdata->rumble_expiration = 0;
- }
return 0;
}
@@ -486,13 +510,6 @@
}
joystick->hwdata->dwPacketNumber = XInputState.dwPacketNumber;
}
-
- if (joystick->hwdata->rumble_expiration) {
- Uint32 now = SDL_GetTicks();
- if (SDL_TICKS_PASSED(now, joystick->hwdata->rumble_expiration)) {
- SDL_XINPUT_JoystickRumble(joystick, 0, 0, 0);
- }
- }
}
void
@@ -535,7 +552,7 @@
}
int
-SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
+SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
{
return SDL_Unsupported();
}
--- a/external/SDL2/src/joystick/windows/SDL_xinputjoystick_c.h
+++ b/external/SDL2/src/joystick/windows/SDL_xinputjoystick_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,7 +26,7 @@
extern int SDL_XINPUT_JoystickInit(void);
extern void SDL_XINPUT_JoystickDetect(JoyStick_DeviceData **pContext);
extern int SDL_XINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice);
-extern int SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
+extern int SDL_XINPUT_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble);
extern void SDL_XINPUT_JoystickUpdate(SDL_Joystick * joystick);
extern void SDL_XINPUT_JoystickClose(SDL_Joystick * joystick);
extern void SDL_XINPUT_JoystickQuit(void);
--- a/external/SDL2/src/libm/k_rem_pio2.c
+++ b/external/SDL2/src/libm/k_rem_pio2.c
@@ -149,7 +149,7 @@
two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
-int32_t attribute_hidden __kernel_rem_pio2(double *x, double *y, int e0, int nx, const unsigned int prec, const int32_t *ipio2)
+int32_t attribute_hidden __kernel_rem_pio2(const double *x, double *y, int e0, int nx, const unsigned int prec, const int32_t *ipio2)
{
int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
double z,fw,f[20],fq[20],q[20];
--- a/external/SDL2/src/libm/math_libm.h
+++ b/external/SDL2/src/libm/math_libm.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/libm/math_private.h
+++ b/external/SDL2/src/libm/math_private.h
@@ -221,7 +221,7 @@
extern double __kernel_sin(double, double, int) attribute_hidden;
extern double __kernel_cos(double, double) attribute_hidden;
extern double __kernel_tan(double, double, int) attribute_hidden;
- extern int32_t __kernel_rem_pio2(double *, double *, int, int, const unsigned int,
+ extern int32_t __kernel_rem_pio2(const double *, double *, int, int, const unsigned int,
const int32_t *) attribute_hidden;
#endif /* _MATH_PRIVATE_H_ */
--- a/external/SDL2/src/libm/s_scalbn.c
+++ b/external/SDL2/src/libm/s_scalbn.c
@@ -45,7 +45,7 @@
}
if (k == 0x7ff)
return x + x; /* NaN or Inf */
- k = k + n;
+ k = (int32_t)(k + n);
if (k > 0x7fe)
return huge * copysign(huge, x); /* overflow */
if (n < -50000)
--- a/external/SDL2/src/loadso/dlopen/SDL_sysloadso.c
+++ b/external/SDL2/src/loadso/dlopen/SDL_sysloadso.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,7 +48,7 @@
#endif
handle = dlopen(sofile, RTLD_NOW|RTLD_LOCAL);
- loaderror = (char *) dlerror();
+ loaderror = dlerror();
if (handle == NULL) {
SDL_SetError("Failed loading %s: %s", sofile, loaderror);
}
--- a/external/SDL2/src/loadso/dummy/SDL_sysloadso.c
+++ b/external/SDL2/src/loadso/dummy/SDL_sysloadso.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/loadso/windows/SDL_sysloadso.c
+++ b/external/SDL2/src/loadso/windows/SDL_sysloadso.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/main/haiku/SDL_BApp.h
+++ b/external/SDL2/src/main/haiku/SDL_BApp.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -228,8 +228,24 @@
return;
}
win = GetSDLWindow(winID);
- SDL_SendMouseMotion(win, 0, 0, x, y);
+ // Simple relative mode support for mouse.
+ if (SDL_GetMouse()->relative_mode) {
+ int winWidth, winHeight, winPosX, winPosY;
+ SDL_GetWindowSize(win, &winWidth, &winHeight);
+ SDL_GetWindowPosition(win, &winPosX, &winPosY);
+ int dx = x - (winWidth / 2);
+ int dy = y - (winHeight / 2);
+ SDL_SendMouseMotion(win, 0, SDL_GetMouse()->relative_mode, dx, dy);
+ set_mouse_position((winPosX + winWidth / 2), (winPosY + winHeight / 2));
+ if (!be_app->IsCursorHidden())
+ be_app->HideCursor();
+ } else {
+ SDL_SendMouseMotion(win, 0, 0, x, y);
+ if (SDL_ShowCursor(-1) && be_app->IsCursorHidden())
+ be_app->ShowCursor();
+ }
+
/* Tell the application that the mouse passed over, redraw needed */
HAIKU_UpdateWindowFramebuffer(NULL,win,NULL,-1);
}
@@ -261,7 +277,7 @@
return;
}
win = GetSDLWindow(winID);
- SDL_SendMouseWheel(win, 0, xTicks, yTicks, SDL_MOUSEWHEEL_NORMAL);
+ SDL_SendMouseWheel(win, 0, xTicks, -yTicks, SDL_MOUSEWHEEL_NORMAL);
}
void _HandleKey(BMessage *msg) {
@@ -285,7 +301,7 @@
ssize_t count;
if (msg->FindData("key-utf8", B_INT8_TYPE, (const void**)&keyUtf8, &count) == B_OK) {
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];
- SDL_zero(text);
+ SDL_zeroa(text);
SDL_memcpy(text, keyUtf8, count);
SDL_SendKeyboardText(text);
}
--- a/external/SDL2/src/main/haiku/SDL_BeApp.cc
+++ b/external/SDL2/src/main/haiku/SDL_BeApp.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,13 +48,14 @@
static int SDL_BeAppActive = 0;
static SDL_Thread *SDL_AppThread = NULL;
+/* Default application signature */
+const char *signature = "application/x-SDL-executable";
+
static int
StartBeApp(void *unused)
{
BApplication *App;
- // default application signature
- const char *signature = "application/x-SDL-executable";
// dig resources for correct signature
image_info info;
int32 cookie = 0;
--- a/external/SDL2/src/main/haiku/SDL_BeApp.h
+++ b/external/SDL2/src/main/haiku/SDL_BeApp.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -30,6 +30,9 @@
/* Quit the Be Application, if there's nothing left to do */
extern void SDL_QuitBeApp(void);
+
+/* Be Application Signature*/
+extern const char *signature;
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/main/nacl/SDL_nacl_main.c
+++ b/external/SDL2/src/main/nacl/SDL_nacl_main.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/main/windows/SDL_windows_main.c
+++ b/external/SDL2/src/main/windows/SDL_windows_main.c
@@ -9,6 +9,7 @@
/* Include this so we define UNICODE properly */
#include "../../core/windows/SDL_windows.h"
+#include <shellapi.h> /* CommandLineToArgvW() */
/* Include the SDL main definition header */
#include "SDL.h"
@@ -18,88 +19,8 @@
# undef main
#endif /* main */
-static void
-UnEscapeQuotes(char *arg)
-{
- char *last = NULL;
+#define WIN_WStringToUTF8(S) SDL_iconv_string("UTF-8", "UTF-16LE", (char *)(S), (SDL_wcslen(S)+1)*sizeof(WCHAR))
- while (*arg) {
- if (*arg == '"' && (last != NULL && *last == '\\')) {
- char *c_curr = arg;
- char *c_last = last;
-
- while (*c_curr) {
- *c_last = *c_curr;
- c_last = c_curr;
- c_curr++;
- }
- *c_last = '\0';
- }
- last = arg;
- arg++;
- }
-}
-
-/* Parse a command line buffer into arguments */
-static int
-ParseCommandLine(char *cmdline, char **argv)
-{
- char *bufp;
- char *lastp = NULL;
- int argc, last_argc;
-
- argc = last_argc = 0;
- for (bufp = cmdline; *bufp;) {
- /* Skip leading whitespace */
- while (*bufp == ' ' || *bufp == '\t') {
- ++bufp;
- }
- /* Skip over argument */
- if (*bufp == '"') {
- ++bufp;
- if (*bufp) {
- if (argv) {
- argv[argc] = bufp;
- }
- ++argc;
- }
- /* Skip over word */
- lastp = bufp;
- while (*bufp && (*bufp != '"' || *lastp == '\\')) {
- lastp = bufp;
- ++bufp;
- }
- } else {
- if (*bufp) {
- if (argv) {
- argv[argc] = bufp;
- }
- ++argc;
- }
- /* Skip over word */
- while (*bufp && (*bufp != ' ' && *bufp != '\t')) {
- ++bufp;
- }
- }
- if (*bufp) {
- if (argv) {
- *bufp = '\0';
- }
- ++bufp;
- }
-
- /* Strip out \ from \" sequences */
- if (argv && last_argc != argc) {
- UnEscapeQuotes(argv[last_argc]);
- }
- last_argc = argc;
- }
- if (argv) {
- argv[argc] = NULL;
- }
- return (argc);
-}
-
/* Pop up an out of memory message, returns to Windows */
static BOOL
OutOfMemory(void)
@@ -119,65 +40,43 @@
/* Gets the arguments with GetCommandLine, converts them to argc and argv
and calls SDL_main */
static int
-main_getcmdline()
+main_getcmdline(void)
{
+ LPWSTR *argvw;
char **argv;
- int argc;
- char *cmdline = NULL;
- int retval = 0;
- int cmdalloc = 0;
- const TCHAR *text = GetCommandLine();
- const TCHAR *ptr;
- int argc_guess = 2; /* space for NULL and initial argument. */
- int rc;
+ int i, argc, result;
- /* make a rough guess of command line arguments. Overestimates if there
- are quoted things. */
- for (ptr = text; *ptr; ptr++) {
- if ((*ptr == ' ') || (*ptr == '\t')) {
- argc_guess++;
- }
+ argvw = CommandLineToArgvW(GetCommandLineW(), &argc);
+ if (argvw == NULL) {
+ return OutOfMemory();
}
-#if UNICODE
- rc = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
- if (rc > 0) {
- cmdalloc = rc + (sizeof (char *) * argc_guess);
- argv = (char **) VirtualAlloc(NULL, cmdalloc, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
- if (argv) {
- int rc2;
- cmdline = (char *) (argv + argc_guess);
- rc2 = WideCharToMultiByte(CP_UTF8, 0, text, -1, cmdline, rc, NULL, NULL);
- SDL_assert(rc2 == rc);
- }
- }
-#else
- /* !!! FIXME: are these in the system codepage? We need to convert to UTF-8. */
- rc = ((int) SDL_strlen(text)) + 1;
- cmdalloc = rc + (sizeof (char *) * argc_guess);
- argv = (char **) VirtualAlloc(NULL, cmdalloc, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
- if (argv) {
- cmdline = (char *) (argv + argc_guess);
- SDL_strcpy(cmdline, text);
- }
-#endif
- if (cmdline == NULL) {
+ /* Parse it into argv and argc */
+ argv = (char **)SDL_calloc(argc + 1, sizeof(*argv));
+ if (!argv) {
return OutOfMemory();
}
+ for (i = 0; i < argc; ++i) {
+ argv[i] = WIN_WStringToUTF8(argvw[i]);
+ if (!argv[i]) {
+ return OutOfMemory();
+ }
+ }
+ argv[i] = NULL;
+ LocalFree(argvw);
- /* Parse it into argv and argc */
- SDL_assert(ParseCommandLine(cmdline, NULL) <= argc_guess);
- argc = ParseCommandLine(cmdline, argv);
-
SDL_SetMainReady();
/* Run the application main() code */
- retval = SDL_main(argc, argv);
+ result = SDL_main(argc, argv);
- VirtualFree(argv, cmdalloc, MEM_DECOMMIT);
- VirtualFree(argv, 0, MEM_RELEASE);
+ /* Free argv, to avoid memory leak */
+ for (i = 0; i < argc; ++i) {
+ SDL_free(argv[i]);
+ }
+ SDL_free(argv);
- return retval;
+ return result;
}
/* This is where execution begins [console apps, ansi] */
--- a/external/SDL2/src/main/windows/version.rc
+++ b/external/SDL2/src/main/windows/version.rc
@@ -9,8 +9,8 @@
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,0,10,0
- PRODUCTVERSION 2,0,10,0
+ FILEVERSION 2,0,12,0
+ PRODUCTVERSION 2,0,12,0
FILEFLAGSMASK 0x3fL
FILEFLAGS 0x0L
FILEOS 0x40004L
@@ -23,12 +23,12 @@
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "SDL\0"
- VALUE "FileVersion", "2, 0, 10, 0\0"
+ VALUE "FileVersion", "2, 0, 12, 0\0"
VALUE "InternalName", "SDL\0"
- VALUE "LegalCopyright", "Copyright � 2019 Sam Lantinga\0"
+ VALUE "LegalCopyright", "Copyright � 2020 Sam Lantinga\0"
VALUE "OriginalFilename", "SDL2.dll\0"
VALUE "ProductName", "Simple DirectMedia Layer\0"
- VALUE "ProductVersion", "2, 0, 10, 0\0"
+ VALUE "ProductVersion", "2, 0, 12, 0\0"
END
END
BLOCK "VarFileInfo"
--- a/external/SDL2/src/power/SDL_power.c
+++ b/external/SDL2/src/power/SDL_power.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/SDL_syspower.h
+++ b/external/SDL2/src/power/SDL_syspower.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/android/SDL_syspower.c
+++ b/external/SDL2/src/power/android/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/emscripten/SDL_syspower.c
+++ b/external/SDL2/src/power/emscripten/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/haiku/SDL_syspower.c
+++ b/external/SDL2/src/power/haiku/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/linux/SDL_syspower.c
+++ b/external/SDL2/src/power/linux/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -99,7 +99,7 @@
*(ptr++) = '\0'; /* terminate the key. */
- while ((*ptr == ' ') && (*ptr != '\0')) {
+ while (*ptr == ' ') {
ptr++; /* skip whitespace. */
}
@@ -289,7 +289,7 @@
next_string(char **_ptr, char **_str)
{
char *ptr = *_ptr;
- char *str = *_str;
+ char *str;
while (*ptr == ' ') { /* skip any spaces... */
ptr++;
@@ -451,6 +451,8 @@
SDL_PowerState st;
int secs;
int pct;
+ int energy;
+ int power;
if ((SDL_strcmp(name, ".") == 0) || (SDL_strcmp(name, "..") == 0)) {
continue; /* skip these, of course. */
@@ -492,11 +494,16 @@
pct = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */
}
- if (!read_power_file(base, name, "time_to_empty_now", str, sizeof (str))) {
- secs = -1;
- } else {
+ if (read_power_file(base, name, "time_to_empty_now", str, sizeof (str))) {
secs = SDL_atoi(str);
secs = (secs <= 0) ? -1 : secs; /* 0 == unknown */
+ } else if (st == SDL_POWERSTATE_ON_BATTERY) {
+ /* energy is Watt*hours and power is Watts */
+ energy = (read_power_file(base, name, "energy_now", str, sizeof (str))) ? SDL_atoi(str) : -1;
+ power = (read_power_file(base, name, "power_now", str, sizeof (str))) ? SDL_atoi(str) : -1;
+ secs = (energy >= 0 && power > 0) ? (3600LL * energy) / power : -1;
+ } else {
+ secs = -1;
}
/*
--- a/external/SDL2/src/power/macosx/SDL_syspower.c
+++ b/external/SDL2/src/power/macosx/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/psp/SDL_syspower.c
+++ b/external/SDL2/src/power/psp/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/uikit/SDL_syspower.h
+++ b/external/SDL2/src/power/uikit/SDL_syspower.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/uikit/SDL_syspower.m
+++ b/external/SDL2/src/power/uikit/SDL_syspower.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/windows/SDL_syspower.c
+++ b/external/SDL2/src/power/windows/SDL_syspower.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/power/winrt/SDL_syspower.cpp
+++ b/external/SDL2/src/power/winrt/SDL_syspower.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/SDL_d3dmath.c
+++ b/external/SDL2/src/render/SDL_d3dmath.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/SDL_d3dmath.h
+++ b/external/SDL2/src/render/SDL_d3dmath.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/SDL_render.c
+++ b/external/SDL2/src/render/SDL_render.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -75,6 +75,10 @@
SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_SRC_COLOR, SDL_BLENDOPERATION_ADD, \
SDL_BLENDFACTOR_ZERO, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD)
+#define SDL_BLENDMODE_MUL_FULL \
+ SDL_COMPOSE_BLENDMODE(SDL_BLENDFACTOR_DST_COLOR, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, \
+ SDL_BLENDFACTOR_DST_ALPHA, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD)
+
#if !SDL_RENDER_DISABLED
static const SDL_RenderDriver *render_drivers[] = {
#if SDL_VIDEO_RENDER_D3D
@@ -101,7 +105,9 @@
#if SDL_VIDEO_RENDER_PSP
&PSP_RenderDriver,
#endif
+#if SDL_VIDEO_RENDER_SW
&SW_RenderDriver
+#endif
};
#endif /* !SDL_RENDER_DISABLED */
@@ -202,8 +208,6 @@
static int
FlushRenderCommands(SDL_Renderer *renderer)
{
- SDL_AllocVertGap *prevgap = &renderer->vertex_data_gaps;
- SDL_AllocVertGap *gap = prevgap;
int retval;
SDL_assert((renderer->render_commands == NULL) == (renderer->render_commands_tail == NULL));
@@ -217,14 +221,6 @@
retval = renderer->RunCommandQueue(renderer, renderer->render_commands, renderer->vertex_data, renderer->vertex_data_used);
- while (gap) {
- prevgap = gap;
- gap = gap->next;
- }
- prevgap->next = renderer->vertex_data_gaps_pool;
- renderer->vertex_data_gaps_pool = renderer->vertex_data_gaps.next;
- renderer->vertex_data_gaps.next = NULL;
-
/* Move the whole render command queue to the unused pool so we can reuse them next time. */
if (renderer->render_commands_tail != NULL) {
renderer->render_commands_tail->next = renderer->render_commands_pool;
@@ -263,79 +259,23 @@
return FlushRenderCommands(renderer);
}
-static SDL_AllocVertGap *
-AllocateVertexGap(SDL_Renderer *renderer)
-{
- SDL_AllocVertGap *retval = renderer->vertex_data_gaps_pool;
- if (retval) {
- renderer->vertex_data_gaps_pool = retval->next;
- retval->next = NULL;
- } else {
- retval = (SDL_AllocVertGap *) SDL_malloc(sizeof (SDL_AllocVertGap));
- if (!retval) {
- SDL_OutOfMemory();
- }
- }
- return retval;
-}
-
-
void *
SDL_AllocateRenderVertices(SDL_Renderer *renderer, const size_t numbytes, const size_t alignment, size_t *offset)
{
const size_t needed = renderer->vertex_data_used + numbytes + alignment;
- size_t aligner, aligned;
- void *retval;
+ size_t current_offset = renderer->vertex_data_used;
- SDL_AllocVertGap *prevgap = &renderer->vertex_data_gaps;
- SDL_AllocVertGap *gap = prevgap->next;
- while (gap) {
- const size_t gapoffset = gap->offset;
- aligner = (alignment && ((gap->offset % alignment) != 0)) ? (alignment - (gap->offset % alignment)) : 0;
- aligned = gapoffset + aligner;
+ size_t aligner = (alignment && ((current_offset & (alignment - 1)) != 0)) ? (alignment - (current_offset & (alignment - 1))) : 0;
+ size_t aligned = current_offset + aligner;
- /* Can we use this gap? */
- if ((aligner < gap->len) && ((gap->len - aligner) >= numbytes)) {
- /* we either finished this gap off, trimmed the left, trimmed the right, or split it into two gaps. */
- if (gap->len == numbytes) { /* finished it off, remove it */
- SDL_assert(aligned == gapoffset);
- prevgap->next = gap->next;
- gap->next = renderer->vertex_data_gaps_pool;
- renderer->vertex_data_gaps_pool = gap;
- } else if (aligned == gapoffset) { /* trimmed the left */
- gap->offset += numbytes;
- gap->len -= numbytes;
- } else if (((aligned - gapoffset) + numbytes) == gap->len) { /* trimmed the right */
- gap->len -= numbytes;
- } else { /* split into two gaps */
- SDL_AllocVertGap *newgap = AllocateVertexGap(renderer);
- if (!newgap) {
- return NULL;
- }
- newgap->offset = aligned + numbytes;
- newgap->len = gap->len - (aligner + numbytes);
- newgap->next = gap->next;
- // gap->offset doesn't change.
- gap->len = aligner;
- gap->next = newgap;
- }
-
- if (offset) {
- *offset = aligned;
- }
- return ((Uint8 *) renderer->vertex_data) + aligned;
- }
-
- /* Try the next gap */
- prevgap = gap;
- gap = gap->next;
- }
-
- /* no gaps with enough space; get a new piece of the vertex buffer */
- while (needed > renderer->vertex_data_allocation) {
+ if (renderer->vertex_data_allocation < needed) {
const size_t current_allocation = renderer->vertex_data ? renderer->vertex_data_allocation : 1024;
- const size_t newsize = current_allocation * 2;
- void *ptr = SDL_realloc(renderer->vertex_data, newsize);
+ size_t newsize = current_allocation * 2;
+ void *ptr;
+ while (newsize < needed) {
+ newsize *= 2;
+ }
+ ptr = SDL_realloc(renderer->vertex_data, newsize);
if (ptr == NULL) {
SDL_OutOfMemory();
return NULL;
@@ -344,27 +284,13 @@
renderer->vertex_data_allocation = newsize;
}
- aligner = (alignment && ((renderer->vertex_data_used % alignment) != 0)) ? (alignment - (renderer->vertex_data_used % alignment)) : 0;
- aligned = renderer->vertex_data_used + aligner;
-
- retval = ((Uint8 *) renderer->vertex_data) + aligned;
if (offset) {
*offset = aligned;
}
- if (aligner) { /* made a new gap... */
- SDL_AllocVertGap *newgap = AllocateVertexGap(renderer);
- if (newgap) { /* just let it slide as lost space if malloc fails. */
- newgap->offset = renderer->vertex_data_used;
- newgap->len = aligner;
- newgap->next = NULL;
- prevgap->next = newgap;
- }
- }
-
renderer->vertex_data_used += aligner + numbytes;
- return retval;
+ return ((Uint8 *) renderer->vertex_data) + aligned;
}
static SDL_RenderCommand *
@@ -490,14 +416,14 @@
static int
PrepQueueCmdDraw(SDL_Renderer *renderer, const Uint8 r, const Uint8 g, const Uint8 b, const Uint8 a)
{
- int retval = 0;
- if (retval == 0) {
- retval = QueueCmdSetDrawColor(renderer, r, g, b, a);
- }
- if (retval == 0) {
+ int retval = QueueCmdSetDrawColor(renderer, r, g, b, a);
+
+ /* Set the viewport and clip rect directly before draws, so the backends
+ * don't have to worry about that state not being valid at draw time. */
+ if (retval == 0 && !renderer->viewport_queued) {
retval = QueueCmdSetViewport(renderer);
}
- if (retval == 0) {
+ if (retval == 0 && !renderer->cliprect_queued) {
retval = QueueCmdSetClipRect(renderer);
}
return retval;
@@ -769,10 +695,14 @@
SDL_FPoint scale;
GetWindowViewportValues(renderer, &logical_w, &logical_h, &viewport, &scale);
if (logical_w) {
- int w = 1;
- int h = 1;
- SDL_GetRendererOutputSize(renderer, &w, &h);
+ int w, h;
+ if (renderer->GetOutputSize) {
+ renderer->GetOutputSize(renderer, &w, &h);
+ } else {
+ SDL_GetWindowSize(renderer->window, &w, &h);
+ }
+
event->tfinger.x *= (w - 1);
event->tfinger.y *= (h - 1);
@@ -979,7 +909,7 @@
SDL_Renderer *
SDL_CreateSoftwareRenderer(SDL_Surface * surface)
{
-#if !SDL_RENDER_DISABLED
+#if !SDL_RENDER_DISABLED && SDL_VIDEO_RENDER_SW
SDL_Renderer *renderer;
renderer = SW_CreateRendererForSurface(surface);
@@ -1046,6 +976,7 @@
case SDL_BLENDMODE_BLEND:
case SDL_BLENDMODE_ADD:
case SDL_BLENDMODE_MOD:
+ case SDL_BLENDMODE_MUL:
return SDL_TRUE;
default:
@@ -1185,7 +1116,11 @@
renderer->textures = texture;
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
+#if SDL_HAVE_YUV
texture->yuv = SDL_SW_CreateYUVTexture(format, w, h);
+#else
+ SDL_SetError("SDL not built with YUV support");
+#endif
if (!texture->yuv) {
SDL_DestroyTexture(texture);
return NULL;
@@ -1232,7 +1167,7 @@
if (fmt->palette) {
for (i = 0; i < fmt->palette->ncolors; i++) {
Uint8 alpha_value = fmt->palette->colors[i].a;
- if (alpha_value != 0 || alpha_value != SDL_ALPHA_OPAQUE) {
+ if (alpha_value != 0 && alpha_value != SDL_ALPHA_OPAQUE) {
needAlpha = SDL_TRUE;
break;
}
@@ -1464,6 +1399,34 @@
return 0;
}
+int
+SDL_SetTextureScaleMode(SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ SDL_Renderer *renderer;
+
+ CHECK_TEXTURE_MAGIC(texture, -1);
+
+ renderer = texture->renderer;
+ renderer->SetTextureScaleMode(renderer, texture, scaleMode);
+ texture->scaleMode = scaleMode;
+ if (texture->native) {
+ return SDL_SetTextureScaleMode(texture->native, scaleMode);
+ }
+ return 0;
+}
+
+int
+SDL_GetTextureScaleMode(SDL_Texture * texture, SDL_ScaleMode *scaleMode)
+{
+ CHECK_TEXTURE_MAGIC(texture, -1);
+
+ if (scaleMode) {
+ *scaleMode = texture->scaleMode;
+ }
+ return 0;
+}
+
+#if SDL_HAVE_YUV
static int
SDL_UpdateTextureYUV(SDL_Texture * texture, const SDL_Rect * rect,
const void *pixels, int pitch)
@@ -1509,6 +1472,7 @@
}
return 0;
}
+#endif /* SDL_HAVE_YUV */
static int
SDL_UpdateTextureNative(SDL_Texture * texture, const SDL_Rect * rect,
@@ -1576,8 +1540,10 @@
if ((rect->w == 0) || (rect->h == 0)) {
return 0; /* nothing to do. */
+#if SDL_HAVE_YUV
} else if (texture->yuv) {
return SDL_UpdateTextureYUV(texture, rect, pixels, pitch);
+#endif
} else if (texture->native) {
return SDL_UpdateTextureNative(texture, rect, pixels, pitch);
} else {
@@ -1589,6 +1555,7 @@
}
}
+#if SDL_HAVE_YUV
static int
SDL_UpdateTextureYUVPlanar(SDL_Texture * texture, const SDL_Rect * rect,
const Uint8 *Yplane, int Ypitch,
@@ -1640,6 +1607,7 @@
}
return 0;
}
+#endif /* SDL_HAVE_YUV */
int SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect,
const Uint8 *Yplane, int Ypitch,
@@ -1646,6 +1614,7 @@
const Uint8 *Uplane, int Upitch,
const Uint8 *Vplane, int Vpitch)
{
+#if SDL_HAVE_YUV
SDL_Renderer *renderer;
SDL_Rect full_rect;
@@ -1702,8 +1671,12 @@
return SDL_Unsupported();
}
}
+#else
+ return -1;
+#endif
}
+#if SDL_HAVE_YUV
static int
SDL_LockTextureYUV(SDL_Texture * texture, const SDL_Rect * rect,
void **pixels, int *pitch)
@@ -1710,6 +1683,7 @@
{
return SDL_SW_LockYUVTexture(texture->yuv, rect, pixels, pitch);
}
+#endif /* SDL_HAVE_YUV */
static int
SDL_LockTextureNative(SDL_Texture * texture, const SDL_Rect * rect,
@@ -1743,12 +1717,15 @@
rect = &full_rect;
}
+#if SDL_HAVE_YUV
if (texture->yuv) {
if (FlushRenderCommandsIfTextureNeeded(texture) < 0) {
return -1;
}
return SDL_LockTextureYUV(texture, rect, pixels, pitch);
- } else if (texture->native) {
+ } else
+#endif
+ if (texture->native) {
/* Calls a real SDL_LockTexture/SDL_UnlockTexture on unlock, flushing then. */
return SDL_LockTextureNative(texture, rect, pixels, pitch);
} else {
@@ -1760,6 +1737,43 @@
}
}
+int
+SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect,
+ SDL_Surface **surface)
+{
+ SDL_Rect real_rect;
+ void *pixels = NULL;
+ int pitch, ret;
+
+ if (texture == NULL || surface == NULL) {
+ return -1;
+ }
+
+ real_rect.x = 0;
+ real_rect.y = 0;
+ real_rect.w = texture->w;
+ real_rect.h = texture->h;
+
+ if (rect) {
+ SDL_IntersectRect(rect, &real_rect, &real_rect);
+ }
+
+ ret = SDL_LockTexture(texture, &real_rect, &pixels, &pitch);
+ if (ret < 0) {
+ return ret;
+ }
+
+ texture->locked_surface = SDL_CreateRGBSurfaceWithFormatFrom(pixels, real_rect.w, real_rect.h, 0, pitch, texture->format);
+ if (texture->locked_surface == NULL) {
+ SDL_UnlockTexture(texture);
+ return -1;
+ }
+
+ *surface = texture->locked_surface;
+ return 0;
+}
+
+#if SDL_HAVE_YUV
static void
SDL_UnlockTextureYUV(SDL_Texture * texture)
{
@@ -1780,6 +1794,7 @@
rect.w, rect.h, native_pixels, native_pitch);
SDL_UnlockTexture(native);
}
+#endif /* SDL_HAVE_YUV */
static void
SDL_UnlockTextureNative(SDL_Texture * texture)
@@ -1810,14 +1825,20 @@
if (texture->access != SDL_TEXTUREACCESS_STREAMING) {
return;
}
+#if SDL_HAVE_YUV
if (texture->yuv) {
SDL_UnlockTextureYUV(texture);
- } else if (texture->native) {
+ } else
+#endif
+ if (texture->native) {
SDL_UnlockTextureNative(texture);
} else {
SDL_Renderer *renderer = texture->renderer;
renderer->UnlockTexture(renderer, texture);
}
+
+ SDL_FreeSurface(texture->locked_surface);
+ texture->locked_surface = NULL;
}
SDL_bool
@@ -3164,12 +3185,18 @@
if (texture->native) {
SDL_DestroyTexture(texture->native);
}
+#if SDL_HAVE_YUV
if (texture->yuv) {
SDL_SW_DestroyYUVTexture(texture->yuv);
}
+#endif
SDL_free(texture->pixels);
renderer->DestroyTexture(renderer, texture);
+
+ SDL_FreeSurface(texture->locked_surface);
+ texture->locked_surface = NULL;
+
SDL_free(texture);
}
@@ -3177,8 +3204,6 @@
SDL_DestroyRenderer(SDL_Renderer * renderer)
{
SDL_RenderCommand *cmd;
- SDL_AllocVertGap *gap;
- SDL_AllocVertGap *nextgap;
CHECK_RENDERER_MAGIC(renderer, );
@@ -3203,16 +3228,6 @@
SDL_free(renderer->vertex_data);
- for (gap = renderer->vertex_data_gaps.next; gap; gap = nextgap) {
- nextgap = gap->next;
- SDL_free(gap);
- }
-
- for (gap = renderer->vertex_data_gaps_pool; gap; gap = nextgap) {
- nextgap = gap->next;
- SDL_free(gap);
- }
-
/* Free existing textures for this renderer */
while (renderer->textures) {
SDL_Texture *tex = renderer->textures; (void) tex;
@@ -3306,6 +3321,9 @@
if (blendMode == SDL_BLENDMODE_MOD_FULL) {
return SDL_BLENDMODE_MOD;
}
+ if (blendMode == SDL_BLENDMODE_MUL_FULL) {
+ return SDL_BLENDMODE_MUL;
+ }
return blendMode;
}
@@ -3323,6 +3341,9 @@
}
if (blendMode == SDL_BLENDMODE_MOD) {
return SDL_BLENDMODE_MOD_FULL;
+ }
+ if (blendMode == SDL_BLENDMODE_MUL) {
+ return SDL_BLENDMODE_MUL_FULL;
}
return blendMode;
}
--- a/external/SDL2/src/render/SDL_sysrender.h
+++ b/external/SDL2/src/render/SDL_sysrender.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -32,13 +32,6 @@
typedef struct SDL_RenderDriver SDL_RenderDriver;
-typedef enum
-{
- SDL_ScaleModeNearest,
- SDL_ScaleModeLinear,
- SDL_ScaleModeBest
-} SDL_ScaleMode;
-
/* Define the SDL texture structure */
struct SDL_Texture
{
@@ -60,6 +53,7 @@
void *pixels;
int pitch;
SDL_Rect locked_rect;
+ SDL_Surface *locked_surface; /**< Locked region exposed as a SDL surface */
Uint32 last_command_generation; /* last command queue generation this texture was in. */
@@ -110,14 +104,7 @@
struct SDL_RenderCommand *next;
} SDL_RenderCommand;
-typedef struct SDL_AllocVertGap
-{
- size_t offset;
- size_t len;
- struct SDL_AllocVertGap *next;
-} SDL_AllocVertGap;
-
/* Define the SDL renderer structure */
struct SDL_Renderer
{
@@ -152,6 +139,7 @@
int (*LockTexture) (SDL_Renderer * renderer, SDL_Texture * texture,
const SDL_Rect * rect, void **pixels, int *pitch);
void (*UnlockTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
+ void (*SetTextureScaleMode) (SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode);
int (*SetRenderTarget) (SDL_Renderer * renderer, SDL_Texture * texture);
int (*RenderReadPixels) (SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, void * pixels, int pitch);
@@ -226,8 +214,6 @@
void *vertex_data;
size_t vertex_data_used;
size_t vertex_data_allocation;
- SDL_AllocVertGap vertex_data_gaps;
- SDL_AllocVertGap *vertex_data_gaps_pool;
void *driverdata;
};
--- a/external/SDL2/src/render/SDL_yuv_sw.c
+++ b/external/SDL2/src/render/SDL_yuv_sw.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,8 @@
/* This is the software implementation of the YUV texture support */
+#if SDL_HAVE_YUV
+
#include "SDL_assert.h"
#include "SDL_yuv_sw_c.h"
@@ -410,5 +412,7 @@
SDL_free(swdata);
}
}
+
+#endif /* SDL_HAVE_YUV */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/SDL_yuv_sw_c.h
+++ b/external/SDL2/src/render/SDL_yuv_sw_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d/SDL_render_d3d.c
+++ b/external/SDL2/src/render/direct3d/SDL_render_d3d.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -234,6 +234,10 @@
D3DMATRIX matrix;
IDirect3DDevice9 *device = data->device;
+ IDirect3DDevice9_SetPixelShader(device, NULL);
+ IDirect3DDevice9_SetTexture(device, 0, NULL);
+ IDirect3DDevice9_SetTexture(device, 1, NULL);
+ IDirect3DDevice9_SetTexture(device, 2, NULL);
IDirect3DDevice9_SetFVF(device, D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
IDirect3DDevice9_SetVertexShader(device, NULL);
IDirect3DDevice9_SetRenderState(device, D3DRS_ZENABLE, D3DZB_FALSE);
@@ -708,10 +712,29 @@
texturedata->texture.dirty = SDL_TRUE;
if (data->drawstate.texture == texture) {
data->drawstate.texture = NULL;
+ data->drawstate.shader = NULL;
+ IDirect3DDevice9_SetPixelShader(data->device, NULL);
+ IDirect3DDevice9_SetTexture(data->device, 0, NULL);
+ if (texturedata->yuv) {
+ IDirect3DDevice9_SetTexture(data->device, 1, NULL);
+ IDirect3DDevice9_SetTexture(data->device, 2, NULL);
+ }
}
- }
+ }
}
+static void
+D3D_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ D3D_TextureData *texturedata = (D3D_TextureData *)texture->driverdata;
+
+ if (!texturedata) {
+ return;
+ }
+
+ texturedata->scaleMode = (scaleMode == SDL_ScaleModeNearest) ? D3DTEXF_POINT : D3DTEXF_LINEAR;
+}
+
static int
D3D_SetRenderTargetInternal(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -1216,7 +1239,7 @@
/* upload the new VBO data for this set of commands. */
vbo = data->vertexBuffers[vboidx];
- if (!vbo || (data->vertexBufferSize[vboidx] < vertsize)) {
+ if (data->vertexBufferSize[vboidx] < vertsize) {
const DWORD usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
const DWORD fvf = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;
if (vbo) {
@@ -1440,13 +1463,11 @@
result = IDirect3DSurface9_GetDesc(backBuffer, &desc);
if (FAILED(result)) {
- IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("GetDesc()", result);
}
result = IDirect3DDevice9_CreateOffscreenPlainSurface(data->device, desc.Width, desc.Height, desc.Format, D3DPOOL_SYSTEMMEM, &surface, NULL);
if (FAILED(result)) {
- IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("CreateOffscreenPlainSurface()", result);
}
@@ -1453,7 +1474,6 @@
result = IDirect3DDevice9_GetRenderTargetData(data->device, backBuffer, surface);
if (FAILED(result)) {
IDirect3DSurface9_Release(surface);
- IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("GetRenderTargetData()", result);
}
@@ -1465,7 +1485,6 @@
result = IDirect3DSurface9_LockRect(surface, &locked, &d3drect, D3DLOCK_READONLY);
if (FAILED(result)) {
IDirect3DSurface9_Release(surface);
- IDirect3DSurface9_Release(backBuffer);
return D3D_SetError("LockRect()", result);
}
@@ -1513,6 +1532,13 @@
if (renderdata->drawstate.texture == texture) {
renderdata->drawstate.texture = NULL;
+ renderdata->drawstate.shader = NULL;
+ IDirect3DDevice9_SetPixelShader(renderdata->device, NULL);
+ IDirect3DDevice9_SetTexture(renderdata->device, 0, NULL);
+ if (data->yuv) {
+ IDirect3DDevice9_SetTexture(renderdata->device, 1, NULL);
+ IDirect3DDevice9_SetTexture(renderdata->device, 2, NULL);
+ }
}
if (!data) {
@@ -1604,6 +1630,7 @@
IDirect3DVertexBuffer9_Release(data->vertexBuffers[i]);
}
data->vertexBuffers[i] = NULL;
+ data->vertexBufferSize[i] = 0;
}
result = IDirect3DDevice9_Reset(data->device, &data->pparams);
@@ -1688,6 +1715,7 @@
renderer->UpdateTextureYUV = D3D_UpdateTextureYUV;
renderer->LockTexture = D3D_LockTexture;
renderer->UnlockTexture = D3D_UnlockTexture;
+ renderer->SetTextureScaleMode = D3D_SetTextureScaleMode;
renderer->SetRenderTarget = D3D_SetRenderTarget;
renderer->QueueSetViewport = D3D_QueueSetViewport;
renderer->QueueSetDrawColor = D3D_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/direct3d/SDL_shaders_d3d.c
+++ b/external/SDL2/src/render/direct3d/SDL_shaders_d3d.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d/SDL_shaders_d3d.h
+++ b/external/SDL2/src/render/direct3d/SDL_shaders_d3d.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d11/SDL_render_d3d11.c
+++ b/external/SDL2/src/render/direct3d11/SDL_render_d3d11.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -636,7 +636,8 @@
/* Create blending states: */
if (!D3D11_CreateBlendState(renderer, SDL_BLENDMODE_BLEND) ||
!D3D11_CreateBlendState(renderer, SDL_BLENDMODE_ADD) ||
- !D3D11_CreateBlendState(renderer, SDL_BLENDMODE_MOD)) {
+ !D3D11_CreateBlendState(renderer, SDL_BLENDMODE_MOD) ||
+ !D3D11_CreateBlendState(renderer, SDL_BLENDMODE_MUL)) {
/* D3D11_CreateBlendMode will set the SDL error, if it fails */
goto done;
}
@@ -1523,6 +1524,18 @@
SAFE_RELEASE(textureData->stagingTexture);
}
+static void
+D3D11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ D3D11_TextureData *textureData = (D3D11_TextureData *) texture->driverdata;
+
+ if (!textureData) {
+ return;
+ }
+
+ textureData->scaleMode = (scaleMode == SDL_ScaleModeNearest) ? D3D11_FILTER_MIN_MAG_MIP_POINT : D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+}
+
static int
D3D11_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -1728,82 +1741,88 @@
float minx, miny, maxx, maxy;
float minu, maxu, minv, maxv;
+ if (!verts) {
+ return -1;
+ }
+
+ cmd->data.draw.count = 1;
+
+ minx = -center->x;
+ maxx = dstrect->w - center->x;
+ miny = -center->y;
+ maxy = dstrect->h - center->y;
+
if (flip & SDL_FLIP_HORIZONTAL) {
- minu = (float) srcrect->x / texture->w;
- maxu = (float) (srcrect->x + srcrect->w) / texture->w;
- } else {
minu = (float) (srcrect->x + srcrect->w) / texture->w;
maxu = (float) srcrect->x / texture->w;
+ } else {
+ minu = (float) srcrect->x / texture->w;
+ maxu = (float) (srcrect->x + srcrect->w) / texture->w;
}
if (flip & SDL_FLIP_VERTICAL) {
- minv = (float) srcrect->y / texture->h;
- maxv = (float) (srcrect->y + srcrect->h) / texture->h;
- } else {
minv = (float) (srcrect->y + srcrect->h) / texture->h;
maxv = (float) srcrect->y / texture->h;
+ } else {
+ minv = (float) srcrect->y / texture->h;
+ maxv = (float) (srcrect->y + srcrect->h) / texture->h;
}
- minx = -center->x;
- maxx = dstrect->w - center->x;
- miny = -center->y;
- maxy = dstrect->h - center->y;
- cmd->data.draw.count = 1;
verts->pos.x = minx;
verts->pos.y = miny;
verts->pos.z = 0.0f;
- verts->tex.x = minu;
- verts->tex.y = minv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
+ verts->tex.x = minu;
+ verts->tex.y = minv;
verts++;
verts->pos.x = minx;
verts->pos.y = maxy;
verts->pos.z = 0.0f;
- verts->tex.x = minu;
- verts->tex.y = maxv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
+ verts->tex.x = minu;
+ verts->tex.y = maxv;
verts++;
verts->pos.x = maxx;
verts->pos.y = miny;
verts->pos.z = 0.0f;
- verts->tex.x = maxu;
- verts->tex.y = minv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
+ verts->tex.x = maxu;
+ verts->tex.y = minv;
verts++;
verts->pos.x = maxx;
verts->pos.y = maxy;
verts->pos.z = 0.0f;
- verts->tex.x = maxu;
- verts->tex.y = maxv;
verts->color.x = r;
verts->color.y = g;
verts->color.z = b;
verts->color.w = a;
+ verts->tex.x = maxu;
+ verts->tex.y = maxv;
verts++;
verts->pos.x = dstrect->x + center->x; /* X translation */
verts->pos.y = dstrect->y + center->y; /* Y translation */
verts->pos.z = (float)(M_PI * (float) angle / 180.0f); /* rotation */
- verts->tex.x = 0.0f;
- verts->tex.y = 0.0f;
verts->color.x = 0;
verts->color.y = 0;
verts->color.z = 0;
verts->color.w = 0;
+ verts->tex.x = 0.0f;
+ verts->tex.y = 0.0f;
verts++;
return 0;
@@ -1817,7 +1836,13 @@
D3D11_RenderData *rendererData = (D3D11_RenderData *) renderer->driverdata;
HRESULT result = S_OK;
const int vbidx = rendererData->currentVertexBuffer;
+ const UINT stride = sizeof(VertexPositionColor);
+ const UINT offset = 0;
+ if (dataSizeInBytes == 0) {
+ return 0; /* nothing to do. */
+ }
+
if (rendererData->vertexBuffers[vbidx] && rendererData->vertexBufferSizes[vbidx] >= dataSizeInBytes) {
D3D11_MAPPED_SUBRESOURCE mappedResource;
result = ID3D11DeviceContext_Map(rendererData->d3dContext,
@@ -1836,8 +1861,6 @@
} else {
D3D11_BUFFER_DESC vertexBufferDesc;
D3D11_SUBRESOURCE_DATA vertexBufferData;
- const UINT stride = sizeof(VertexPositionColor);
- const UINT offset = 0;
SAFE_RELEASE(rendererData->vertexBuffers[vbidx]);
@@ -1862,15 +1885,17 @@
return -1;
}
- ID3D11DeviceContext_IASetVertexBuffers(rendererData->d3dContext,
- 0,
- 1,
- &rendererData->vertexBuffers[vbidx],
- &stride,
- &offset
- );
+ rendererData->vertexBufferSizes[vbidx] = dataSizeInBytes;
}
+ ID3D11DeviceContext_IASetVertexBuffers(rendererData->d3dContext,
+ 0,
+ 1,
+ &rendererData->vertexBuffers[vbidx],
+ &stride,
+ &offset
+ );
+
rendererData->currentVertexBuffer++;
if (rendererData->currentVertexBuffer >= SDL_arraysize(rendererData->vertexBuffers)) {
rendererData->currentVertexBuffer = 0;
@@ -2486,6 +2511,7 @@
renderer->UpdateTextureYUV = D3D11_UpdateTextureYUV;
renderer->LockTexture = D3D11_LockTexture;
renderer->UnlockTexture = D3D11_UnlockTexture;
+ renderer->SetTextureScaleMode = D3D11_SetTextureScaleMode;
renderer->SetRenderTarget = D3D11_SetRenderTarget;
renderer->QueueSetViewport = D3D11_QueueSetViewport;
renderer->QueueSetDrawColor = D3D11_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/direct3d11/SDL_render_winrt.cpp
+++ b/external/SDL2/src/render/direct3d11/SDL_render_winrt.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d11/SDL_render_winrt.h
+++ b/external/SDL2/src/render/direct3d11/SDL_render_winrt.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d11/SDL_shaders_d3d11.c
+++ b/external/SDL2/src/render/direct3d11/SDL_shaders_d3d11.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/direct3d11/SDL_shaders_d3d11.h
+++ b/external/SDL2/src/render/direct3d11/SDL_shaders_d3d11.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/metal/SDL_render_metal.m
+++ b/external/SDL2/src/render/metal/SDL_render_metal.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,20 +26,22 @@
#include "SDL_log.h"
#include "SDL_assert.h"
#include "SDL_syswm.h"
+#include "SDL_metal.h"
#include "../SDL_sysrender.h"
-#ifdef __MACOSX__
-#include "../../video/cocoa/SDL_cocoametalview.h"
-#else
-#include "../../video/uikit/SDL_uikitmetalview.h"
-#endif
#include <Availability.h>
#import <Metal/Metal.h>
#import <QuartzCore/CAMetalLayer.h>
+#ifdef __MACOSX__
+#import <AppKit/NSView.h>
+#endif
+
/* Regenerate these with build-metal-shaders.sh */
#ifdef __MACOSX__
#include "SDL_shaders_metal_osx.h"
+#elif defined(__TVOS__)
+#include "SDL_shaders_metal_tvos.h"
#else
#include "SDL_shaders_metal_ios.h"
#endif
@@ -47,20 +49,23 @@
/* Apple Metal renderer implementation */
/* macOS requires constants in a buffer to have a 256 byte alignment. */
+/* Use native type alignments from https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf */
#ifdef __MACOSX__
-#define CONSTANT_ALIGN 256
+#define CONSTANT_ALIGN(x) (256)
#else
-#define CONSTANT_ALIGN 4
+#define CONSTANT_ALIGN(x) (x < 4 ? 4 : x)
#endif
-#define ALIGN_CONSTANTS(size) ((size + CONSTANT_ALIGN - 1) & (~(CONSTANT_ALIGN - 1)))
+#define DEVICE_ALIGN(x) (x < 4 ? 4 : x)
+#define ALIGN_CONSTANTS(align, size) ((size + CONSTANT_ALIGN(align) - 1) & (~(CONSTANT_ALIGN(align) - 1)))
+
static const size_t CONSTANTS_OFFSET_INVALID = 0xFFFFFFFF;
static const size_t CONSTANTS_OFFSET_IDENTITY = 0;
-static const size_t CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM = ALIGN_CONSTANTS(CONSTANTS_OFFSET_IDENTITY + sizeof(float) * 16);
-static const size_t CONSTANTS_OFFSET_DECODE_JPEG = ALIGN_CONSTANTS(CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM + sizeof(float) * 16);
-static const size_t CONSTANTS_OFFSET_DECODE_BT601 = ALIGN_CONSTANTS(CONSTANTS_OFFSET_DECODE_JPEG + sizeof(float) * 4 * 4);
-static const size_t CONSTANTS_OFFSET_DECODE_BT709 = ALIGN_CONSTANTS(CONSTANTS_OFFSET_DECODE_BT601 + sizeof(float) * 4 * 4);
+static const size_t CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_IDENTITY + sizeof(float) * 16);
+static const size_t CONSTANTS_OFFSET_DECODE_JPEG = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_HALF_PIXEL_TRANSFORM + sizeof(float) * 16);
+static const size_t CONSTANTS_OFFSET_DECODE_BT601 = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_JPEG + sizeof(float) * 4 * 4);
+static const size_t CONSTANTS_OFFSET_DECODE_BT709 = ALIGN_CONSTANTS(16, CONSTANTS_OFFSET_DECODE_BT601 + sizeof(float) * 4 * 4);
static const size_t CONSTANTS_LENGTH = CONSTANTS_OFFSET_DECODE_BT709 + sizeof(float) * 4 * 4;
typedef enum SDL_MetalVertexFunction
@@ -118,6 +123,7 @@
@property (nonatomic, retain) id<MTLSamplerState> mtlsamplerlinear;
@property (nonatomic, retain) id<MTLBuffer> mtlbufconstants;
@property (nonatomic, retain) id<MTLBuffer> mtlbufquadindices;
+ @property (nonatomic, assign) SDL_MetalView mtlview;
@property (nonatomic, retain) CAMetalLayer *mtllayer;
@property (nonatomic, retain) MTLRenderPassDescriptor *mtlpassdesc;
@property (nonatomic, assign) METAL_ShaderPipelines *activepipelines;
@@ -167,6 +173,7 @@
[_mtltexture release];
[_mtltexture_uv release];
[_mtlsampler release];
+ [_lockedbuffer release];
[super dealloc];
}
#endif
@@ -259,8 +266,36 @@
mtlpipedesc.vertexFunction = mtlvertfn;
mtlpipedesc.fragmentFunction = mtlfragfn;
- MTLRenderPipelineColorAttachmentDescriptor *rtdesc = mtlpipedesc.colorAttachments[0];
+ MTLVertexDescriptor *vertdesc = [MTLVertexDescriptor vertexDescriptor];
+ switch (cache->vertexFunction) {
+ case SDL_METAL_VERTEX_SOLID:
+ /* position (float2) */
+ vertdesc.layouts[0].stride = sizeof(float) * 2;
+ vertdesc.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex;
+
+ vertdesc.attributes[0].format = MTLVertexFormatFloat2;
+ vertdesc.attributes[0].offset = 0;
+ vertdesc.attributes[0].bufferIndex = 0;
+ break;
+ case SDL_METAL_VERTEX_COPY:
+ /* position (float2), texcoord (float2) */
+ vertdesc.layouts[0].stride = sizeof(float) * 4;
+ vertdesc.layouts[0].stepFunction = MTLVertexStepFunctionPerVertex;
+
+ vertdesc.attributes[0].format = MTLVertexFormatFloat2;
+ vertdesc.attributes[0].offset = 0;
+ vertdesc.attributes[0].bufferIndex = 0;
+
+ vertdesc.attributes[1].format = MTLVertexFormatFloat2;
+ vertdesc.attributes[1].offset = sizeof(float) * 2;
+ vertdesc.attributes[1].bufferIndex = 0;
+ break;
+ }
+
+ mtlpipedesc.vertexDescriptor = vertdesc;
+
+ MTLRenderPipelineColorAttachmentDescriptor *rtdesc = mtlpipedesc.colorAttachments[0];
rtdesc.pixelFormat = cache->renderTargetFormat;
if (blendmode != SDL_BLENDMODE_NONE) {
@@ -322,6 +357,7 @@
MakePipelineState(data, cache, @" (blend=blend)", SDL_BLENDMODE_BLEND);
MakePipelineState(data, cache, @" (blend=add)", SDL_BLENDMODE_ADD);
MakePipelineState(data, cache, @" (blend=mod)", SDL_BLENDMODE_MOD);
+ MakePipelineState(data, cache, @" (blend=mul)", SDL_BLENDMODE_MUL);
}
static void
@@ -406,7 +442,7 @@
}
static void
-METAL_ActivateRenderCommandEncoder(SDL_Renderer * renderer, MTLLoadAction load, MTLClearColor *clear_color)
+METAL_ActivateRenderCommandEncoder(SDL_Renderer * renderer, MTLLoadAction load, MTLClearColor *clear_color, id<MTLBuffer> vertex_buffer)
{
METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
@@ -449,6 +485,13 @@
data.mtlcmdencoder.label = @"SDL metal renderer render target";
}
+ /* Set up buffer bindings for positions, texcoords, and color once here,
+ * the offsets are adjusted in the code that uses them. */
+ if (vertex_buffer != nil) {
+ [data.mtlcmdencoder setVertexBuffer:vertex_buffer offset:0 atIndex:0];
+ [data.mtlcmdencoder setFragmentBuffer:vertex_buffer offset:0 atIndex:0];
+ }
+
data.activepipelines = ChooseShaderPipelines(data, mtltexture.pixelFormat);
// make sure this has a definite place in the queue. This way it will
@@ -790,6 +833,7 @@
METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
METAL_TextureData *texturedata = (__bridge METAL_TextureData *)texture->driverdata;
int buffersize = 0;
+ id<MTLBuffer> lockedbuffer = nil;
if (rect->w <= 0 || rect->h <= 0) {
return SDL_SetError("Invalid rectangle dimensions for LockTexture.");
@@ -803,14 +847,20 @@
buffersize = (*pitch) * rect->h;
}
- texturedata.lockedrect = *rect;
- texturedata.lockedbuffer = [data.mtldevice newBufferWithLength:buffersize options:MTLResourceStorageModeShared];
- if (texturedata.lockedbuffer == nil) {
+ lockedbuffer = [data.mtldevice newBufferWithLength:buffersize options:MTLResourceStorageModeShared];
+ if (lockedbuffer == nil) {
return SDL_OutOfMemory();
}
- *pixels = [texturedata.lockedbuffer contents];
+ texturedata.lockedrect = *rect;
+ texturedata.lockedbuffer = lockedbuffer;
+ *pixels = [lockedbuffer contents];
+ /* METAL_TextureData.lockedbuffer retains. */
+#if !__has_feature(objc_arc)
+ [lockedbuffer release];
+#endif
+
return 0;
}}
@@ -893,14 +943,23 @@
[data.mtlcmdbuffer commit];
data.mtlcmdbuffer = nil;
-#if !__has_feature(objc_arc)
- [texturedata.lockedbuffer release];
-#endif
-
- texturedata.lockedbuffer = nil;
+ texturedata.lockedbuffer = nil; /* Retained property, so it calls release. */
texturedata.hasdata = YES;
}}
+static void
+METAL_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{ @autoreleasepool {
+ METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
+ METAL_TextureData *texturedata = (__bridge METAL_TextureData *)texture->driverdata;
+
+ if (scaleMode == SDL_ScaleModeNearest) {
+ texturedata.mtlsampler = data.mtlsamplernearest;
+ } else {
+ texturedata.mtlsampler = data.mtlsamplerlinear;
+ }
+}}
+
static int
METAL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{ @autoreleasepool {
@@ -937,7 +996,7 @@
const int w = cmd->data.viewport.rect.w;
const int h = cmd->data.viewport.rect.h;
const size_t matrixlen = sizeof (projection);
- float *matrix = (float *) SDL_AllocateRenderVertices(renderer, matrixlen, CONSTANT_ALIGN, &cmd->data.viewport.first);
+ float *matrix = (float *) SDL_AllocateRenderVertices(renderer, matrixlen, CONSTANT_ALIGN(16), &cmd->data.viewport.first);
if (!matrix) {
return -1;
}
@@ -959,7 +1018,7 @@
METAL_QueueSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
{
const size_t vertlen = sizeof (float) * 4;
- float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, CONSTANT_ALIGN, &cmd->data.color.first);
+ float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(16), &cmd->data.color.first);
if (!verts) {
return -1;
}
@@ -974,7 +1033,7 @@
METAL_QueueDrawPoints(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FPoint * points, int count)
{
const size_t vertlen = (sizeof (float) * 2) * count;
- float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, 0, &cmd->data.draw.first);
+ float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first);
if (!verts) {
return -1;
}
@@ -987,7 +1046,7 @@
METAL_QueueFillRects(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FRect * rects, int count)
{
const size_t vertlen = (sizeof (float) * 8) * count;
- float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, 0, &cmd->data.draw.first);
+ float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first);
if (!verts) {
return -1;
}
@@ -1029,7 +1088,7 @@
const float texh = (float) texture->h;
// !!! FIXME: use an index buffer
const size_t vertlen = (sizeof (float) * 16);
- float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, 0, &cmd->data.draw.first);
+ float *verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first);
if (!verts) {
return -1;
}
@@ -1036,22 +1095,25 @@
cmd->data.draw.count = 1;
+ /* Interleaved positions and texture coordinates */
*(verts++) = dstrect->x;
*(verts++) = dstrect->y + dstrect->h;
+ *(verts++) = normtex(srcrect->x, texw);
+ *(verts++) = normtex(srcrect->y + srcrect->h, texh);
+
*(verts++) = dstrect->x;
*(verts++) = dstrect->y;
+ *(verts++) = normtex(srcrect->x, texw);
+ *(verts++) = normtex(srcrect->y, texh);
+
*(verts++) = dstrect->x + dstrect->w;
*(verts++) = dstrect->y + dstrect->h;
+ *(verts++) = normtex(srcrect->x + srcrect->w, texw);
+ *(verts++) = normtex(srcrect->y + srcrect->h, texh);
+
*(verts++) = dstrect->x + dstrect->w;
*(verts++) = dstrect->y;
-
- *(verts++) = normtex(srcrect->x, texw);
- *(verts++) = normtex(srcrect->y + srcrect->h, texh);
- *(verts++) = normtex(srcrect->x, texw);
- *(verts++) = normtex(srcrect->y, texh);
*(verts++) = normtex(srcrect->x + srcrect->w, texw);
- *(verts++) = normtex(srcrect->y + srcrect->h, texh);
- *(verts++) = normtex(srcrect->x + srcrect->w, texw);
*(verts++) = normtex(srcrect->y, texh);
return 0;
@@ -1071,7 +1133,7 @@
float *verts;
// cheat and store this offset in (count) because it needs to be aligned in ways other fields don't and we aren't using count otherwise.
- verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, CONSTANT_ALIGN, &cmd->data.draw.count);
+ verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, CONSTANT_ALIGN(16), &cmd->data.draw.count);
if (!verts) {
return -1;
}
@@ -1090,7 +1152,7 @@
verts[13] = dstrect->y + center->y;
// rest of the vertices don't need the aggressive alignment. Pack them in.
- verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, 0, &cmd->data.draw.first);
+ verts = (float *) SDL_AllocateRenderVertices(renderer, vertlen, DEVICE_ALIGN(8), &cmd->data.draw.first);
if (!verts) {
return -1;
}
@@ -1111,24 +1173,25 @@
minv = tmp;
}
- // vertices
+ /* Interleaved positions and texture coordinates */
*(verts++) = -center->x;
*(verts++) = dstrect->h - center->y;
+ *(verts++) = minu;
+ *(verts++) = maxv;
+
*(verts++) = -center->x;
*(verts++) = -center->y;
+ *(verts++) = minu;
+ *(verts++) = minv;
+
*(verts++) = dstrect->w - center->x;
*(verts++) = dstrect->h - center->y;
+ *(verts++) = maxu;
+ *(verts++) = maxv;
+
*(verts++) = dstrect->w - center->x;
*(verts++) = -center->y;
-
- // texcoords
- *(verts++) = minu;
- *(verts++) = maxv;
- *(verts++) = minu;
- *(verts++) = minv;
*(verts++) = maxu;
- *(verts++) = maxv;
- *(verts++) = maxu;
*(verts++) = minv;
return 0;
@@ -1139,8 +1202,10 @@
{
#if __has_feature(objc_arc)
__unsafe_unretained id<MTLRenderPipelineState> pipeline;
+ __unsafe_unretained id<MTLBuffer> vertex_buffer;
#else
id<MTLRenderPipelineState> pipeline;
+ id<MTLBuffer> vertex_buffer;
#endif
size_t constants_offset;
SDL_Texture *texture;
@@ -1163,7 +1228,7 @@
size_t first = cmd->data.draw.first;
id<MTLRenderPipelineState> newpipeline;
- METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL);
+ METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, statecache->vertex_buffer);
if (statecache->viewport_dirty) {
MTLViewport viewport;
@@ -1199,7 +1264,7 @@
}
if (statecache->color_dirty) {
- [data.mtlcmdencoder setFragmentBuffer:mtlbufvertex offset:statecache->color_offset atIndex:0];
+ [data.mtlcmdencoder setFragmentBufferOffset:statecache->color_offset atIndex:0];
statecache->color_dirty = SDL_FALSE;
}
@@ -1216,7 +1281,7 @@
statecache->constants_offset = constants_offset;
}
- [data.mtlcmdencoder setVertexBuffer:mtlbufvertex offset:first atIndex:0]; // position
+ [data.mtlcmdencoder setVertexBufferOffset:first atIndex:0]; /* position/texcoords */
}
static void
@@ -1229,8 +1294,6 @@
SetDrawState(renderer, cmd, texturedata.fragmentFunction, constants_offset, mtlbufvertex, statecache);
- [data.mtlcmdencoder setVertexBuffer:mtlbufvertex offset:cmd->data.draw.first+(8*sizeof (float)) atIndex:1]; // texcoords
-
if (texture != statecache->texture) {
METAL_TextureData *oldtexturedata = NULL;
if (statecache->texture) {
@@ -1254,9 +1317,12 @@
{ @autoreleasepool {
METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
METAL_DrawStateCache statecache;
+ SDL_zero(statecache);
+
id<MTLBuffer> mtlbufvertex = nil;
statecache.pipeline = nil;
+ statecache.vertex_buffer = nil;
statecache.constants_offset = CONSTANTS_OFFSET_INVALID;
statecache.texture = NULL;
statecache.color_dirty = SDL_TRUE;
@@ -1280,6 +1346,8 @@
#endif
mtlbufvertex.label = @"SDL vertex data";
SDL_memcpy([mtlbufvertex contents], vertices, vertsize);
+
+ statecache.vertex_buffer = mtlbufvertex;
}
// If there's a command buffer here unexpectedly (app requested one?). Commit it so we can start fresh.
@@ -1294,6 +1362,7 @@
SDL_memcpy(&statecache.viewport, &cmd->data.viewport.rect, sizeof (statecache.viewport));
statecache.projection_offset = cmd->data.viewport.first;
statecache.viewport_dirty = SDL_TRUE;
+ statecache.cliprect_dirty = SDL_TRUE;
break;
}
@@ -1338,7 +1407,7 @@
MTLClearColor color = MTLClearColorMake(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f);
// get new command encoder, set up with an initial clear operation.
- METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionClear, &color);
+ METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionClear, &color, mtlbufvertex);
break;
}
@@ -1355,17 +1424,21 @@
const size_t count = cmd->data.draw.count;
const size_t maxcount = UINT16_MAX / 4;
SetDrawState(renderer, cmd, SDL_METAL_FRAGMENT_SOLID, CONSTANTS_OFFSET_IDENTITY, mtlbufvertex, &statecache);
- /* Our index buffer has 16 bit indices, so we can only draw 65k
- * vertices (16k rects) at a time. */
- for (size_t i = 0; i < count; i += maxcount) {
- /* Set the vertex buffer offset for our current positions.
- * The vertex buffer itself was bound in SetDrawState. */
- [data.mtlcmdencoder setVertexBufferOffset:cmd->data.draw.first + i*sizeof(float)*8 atIndex:0];
- [data.mtlcmdencoder drawIndexedPrimitives:MTLPrimitiveTypeTriangle
- indexCount:SDL_min(maxcount, count - i) * 6
- indexType:MTLIndexTypeUInt16
- indexBuffer:data.mtlbufquadindices
- indexBufferOffset:0];
+ if (count == 1) {
+ [data.mtlcmdencoder drawPrimitives:MTLPrimitiveTypeTriangleStrip vertexStart:0 vertexCount:4];
+ } else {
+ /* Our index buffer has 16 bit indices, so we can only draw
+ * 65k vertices (16k rects) at a time. */
+ for (size_t i = 0; i < count; i += maxcount) {
+ /* Set the vertex buffer offset for our current positions.
+ * The vertex buffer itself was bound in SetDrawState. */
+ [data.mtlcmdencoder setVertexBufferOffset:cmd->data.draw.first + i*sizeof(float)*8 atIndex:0];
+ [data.mtlcmdencoder drawIndexedPrimitives:MTLPrimitiveTypeTriangle
+ indexCount:SDL_min(maxcount, count - i) * 6
+ indexType:MTLIndexTypeUInt16
+ indexBuffer:data.mtlbufquadindices
+ indexBufferOffset:0];
+ }
}
break;
}
@@ -1397,7 +1470,7 @@
Uint32 pixel_format, void * pixels, int pitch)
{ @autoreleasepool {
METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
- METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL);
+ METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil);
[data.mtlcmdencoder endEncoding];
id<MTLTexture> mtltexture = data.mtlpassdesc.colorAttachments[0].texture;
@@ -1475,6 +1548,8 @@
}
DestroyAllPipelines(data.allpipelines, data.pipelinescount);
+
+ SDL_Metal_DestroyView(data.mtlview);
}
SDL_free(renderer);
@@ -1490,7 +1565,7 @@
static void *
METAL_GetMetalCommandEncoder(SDL_Renderer * renderer)
{ @autoreleasepool {
- METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL);
+ METAL_ActivateRenderCommandEncoder(renderer, MTLLoadActionLoad, NULL, nil);
METAL_RenderData *data = (__bridge METAL_RenderData *) renderer->driverdata;
return (__bridge void*)data.mtlcmdencoder;
}}
@@ -1501,6 +1576,8 @@
SDL_Renderer *renderer = NULL;
METAL_RenderData *data = NULL;
id<MTLDevice> mtldevice = nil;
+ SDL_MetalView view = NULL;
+ CAMetalLayer *layer = nil;
SDL_SysWMinfo syswm;
SDL_VERSION(&syswm.version);
@@ -1527,26 +1604,42 @@
return NULL;
}
+ view = SDL_Metal_CreateView(window);
+
+ if (view == NULL) {
+#if !__has_feature(objc_arc)
+ [mtldevice release];
+#endif
+ SDL_free(renderer);
+ return NULL;
+ }
+
// !!! FIXME: error checking on all of this.
data = [[METAL_RenderData alloc] init];
+ if (data == nil) {
+#if !__has_feature(objc_arc)
+ [mtldevice release];
+#endif
+ SDL_Metal_DestroyView(view);
+ SDL_free(renderer);
+ return NULL;
+ }
+
renderer->driverdata = (void*)CFBridgingRetain(data);
renderer->window = window;
-#ifdef __MACOSX__
- NSView *view = Cocoa_Mtl_AddMetalView(window);
- CAMetalLayer *layer = (CAMetalLayer *)[view layer];
+ data.mtlview = view;
- layer.device = mtldevice;
-
- //layer.colorspace = nil;
-
+#ifdef __MACOSX__
+ layer = (CAMetalLayer *)[(NSView *)view layer];
#else
- UIView *view = UIKit_Mtl_AddMetalView(window);
- CAMetalLayer *layer = (CAMetalLayer *)[view layer];
+ layer = (CAMetalLayer *)[(__bridge UIView *)view layer];
#endif
- // Necessary for RenderReadPixels.
+ layer.device = mtldevice;
+
+ /* Necessary for RenderReadPixels. */
layer.framebufferOnly = NO;
data.mtldevice = layer.device;
@@ -1685,6 +1778,7 @@
renderer->UpdateTextureYUV = METAL_UpdateTextureYUV;
renderer->LockTexture = METAL_LockTexture;
renderer->UnlockTexture = METAL_UnlockTexture;
+ renderer->SetTextureScaleMode = METAL_SetTextureScaleMode;
renderer->SetRenderTarget = METAL_SetRenderTarget;
renderer->QueueSetViewport = METAL_QueueSetViewport;
renderer->QueueSetDrawColor = METAL_QueueSetDrawColor;
@@ -1763,7 +1857,6 @@
[mtlsamplerlinear release];
[mtlbufconstants release];
[mtlbufquadindices release];
- [view release];
[data release];
[mtldevice release];
#endif
--- a/external/SDL2/src/render/metal/SDL_shaders_metal.metal
+++ b/external/SDL2/src/render/metal/SDL_shaders_metal.metal
@@ -3,6 +3,11 @@
using namespace metal;
+struct SolidVertexInput
+{
+ float2 position [[attribute(0)]];
+};
+
struct SolidVertexOutput
{
float4 position [[position]];
@@ -9,22 +14,27 @@
float pointSize [[point_size]];
};
-vertex SolidVertexOutput SDL_Solid_vertex(const device float2 *position [[buffer(0)]],
+vertex SolidVertexOutput SDL_Solid_vertex(SolidVertexInput in [[stage_in]],
constant float4x4 &projection [[buffer(2)]],
- constant float4x4 &transform [[buffer(3)]],
- uint vid [[vertex_id]])
+ constant float4x4 &transform [[buffer(3)]])
{
SolidVertexOutput v;
- v.position = (projection * transform) * float4(position[vid], 0.0f, 1.0f);
+ v.position = (projection * transform) * float4(in.position, 0.0f, 1.0f);
v.pointSize = 1.0f;
return v;
}
-fragment float4 SDL_Solid_fragment(constant float4 &col [[buffer(0)]])
+fragment float4 SDL_Solid_fragment(const device float4 &col [[buffer(0)]])
{
return col;
}
+struct CopyVertexInput
+{
+ float2 position [[attribute(0)]];
+ float2 texcoord [[attribute(1)]];
+};
+
struct CopyVertexOutput
{
float4 position [[position]];
@@ -31,20 +41,18 @@
float2 texcoord;
};
-vertex CopyVertexOutput SDL_Copy_vertex(const device float2 *position [[buffer(0)]],
- const device float2 *texcoords [[buffer(1)]],
+vertex CopyVertexOutput SDL_Copy_vertex(CopyVertexInput in [[stage_in]],
constant float4x4 &projection [[buffer(2)]],
- constant float4x4 &transform [[buffer(3)]],
- uint vid [[vertex_id]])
+ constant float4x4 &transform [[buffer(3)]])
{
CopyVertexOutput v;
- v.position = (projection * transform) * float4(position[vid], 0.0f, 1.0f);
- v.texcoord = texcoords[vid];
+ v.position = (projection * transform) * float4(in.position, 0.0f, 1.0f);
+ v.texcoord = in.texcoord;
return v;
}
fragment float4 SDL_Copy_fragment(CopyVertexOutput vert [[stage_in]],
- constant float4 &col [[buffer(0)]],
+ const device float4 &col [[buffer(0)]],
texture2d<float> tex [[texture(0)]],
sampler s [[sampler(0)]])
{
@@ -60,7 +68,7 @@
};
fragment float4 SDL_YUV_fragment(CopyVertexOutput vert [[stage_in]],
- constant float4 &col [[buffer(0)]],
+ const device float4 &col [[buffer(0)]],
constant YUVDecode &decode [[buffer(1)]],
texture2d<float> texY [[texture(0)]],
texture2d_array<float> texUV [[texture(1)]],
@@ -77,7 +85,7 @@
}
fragment float4 SDL_NV12_fragment(CopyVertexOutput vert [[stage_in]],
- constant float4 &col [[buffer(0)]],
+ const device float4 &col [[buffer(0)]],
constant YUVDecode &decode [[buffer(1)]],
texture2d<float> texY [[texture(0)]],
texture2d<float> texUV [[texture(1)]],
@@ -93,7 +101,7 @@
}
fragment float4 SDL_NV21_fragment(CopyVertexOutput vert [[stage_in]],
- constant float4 &col [[buffer(0)]],
+ const device float4 &col [[buffer(0)]],
constant YUVDecode &decode [[buffer(1)]],
texture2d<float> texY [[texture(0)]],
texture2d<float> texUV [[texture(1)]],
--- a/external/SDL2/src/render/metal/SDL_shaders_metal_ios.h
+++ b/external/SDL2/src/render/metal/SDL_shaders_metal_ios.h
@@ -1,18 +1,18 @@
const unsigned char sdl_metallib[] = {
- 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xd8, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x54, 0x00, 0x00,
+ 0x60, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x52, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f,
0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54,
0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00,
- 0xa1, 0x91, 0x35, 0x76, 0xce, 0x36, 0x38, 0x71, 0xba, 0x1c, 0x81, 0x62,
- 0xda, 0x7c, 0x6b, 0x94, 0xc7, 0x88, 0x39, 0xd4, 0x91, 0xc2, 0xe7, 0xf9,
- 0x21, 0x8c, 0x74, 0x25, 0xa9, 0xb0, 0x81, 0x85, 0x4f, 0x46, 0x46, 0x54,
+ 0x9a, 0x78, 0x29, 0xfc, 0xf4, 0x27, 0x81, 0x27, 0xe2, 0x08, 0x2d, 0xc1,
+ 0xf7, 0xbf, 0x2c, 0x56, 0xa4, 0x4c, 0xd3, 0x80, 0x38, 0xeb, 0x26, 0x6c,
+ 0x6f, 0xa5, 0x6e, 0xd2, 0x92, 0x6e, 0xa0, 0x84, 0x4f, 0x46, 0x46, 0x54,
0x18, 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, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00,
@@ -19,65 +19,71 @@
0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00,
0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f,
0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59,
- 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x71,
- 0xbb, 0x07, 0x58, 0x1b, 0x7c, 0x44, 0xaa, 0x03, 0xc8, 0xab, 0x11, 0xe4,
- 0x63, 0xdb, 0xe3, 0xe6, 0xce, 0x52, 0x97, 0x34, 0x82, 0xf0, 0x46, 0x70,
- 0xaa, 0xa9, 0x31, 0x51, 0x3c, 0xe8, 0x39, 0x4f, 0x46, 0x46, 0x54, 0x18,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0xa9,
+ 0xbd, 0x9c, 0x95, 0x2b, 0x96, 0x40, 0x7a, 0x23, 0xba, 0xd4, 0x14, 0x4b,
+ 0x47, 0xbf, 0xf5, 0x57, 0xb1, 0xa5, 0x05, 0x13, 0xb0, 0x99, 0x29, 0x9e,
+ 0x80, 0x02, 0x33, 0x1f, 0x5e, 0x6a, 0x32, 0x4f, 0x46, 0x46, 0x54, 0x18,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e,
0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c,
0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00,
0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20,
- 0x00, 0x4a, 0x07, 0x48, 0xd3, 0xb7, 0x7a, 0x3a, 0x01, 0x6c, 0xaa, 0x80,
- 0xde, 0x84, 0x6e, 0x3c, 0x9a, 0xdd, 0x55, 0x90, 0x43, 0xa6, 0xdd, 0xbb,
- 0xd6, 0xeb, 0xea, 0x81, 0x62, 0xf6, 0x50, 0x04, 0x95, 0x4f, 0x46, 0x46,
- 0x54, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x16, 0x00, 0x00, 0x00,
+ 0x00, 0xf9, 0xc5, 0x3b, 0x5b, 0x15, 0x83, 0xa0, 0x2a, 0x5c, 0xda, 0xc9,
+ 0x33, 0x5d, 0x60, 0x90, 0xfd, 0xab, 0x47, 0xc2, 0xda, 0x72, 0x81, 0x57,
+ 0x15, 0x17, 0xbc, 0xc8, 0x14, 0x11, 0x89, 0x18, 0x18, 0x4f, 0x46, 0x46,
+ 0x54, 0x18, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08,
0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00,
0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43,
0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
- 0x20, 0x00, 0x4c, 0xaa, 0x05, 0x27, 0x1a, 0x40, 0x5c, 0xe3, 0xd5, 0x46,
- 0x38, 0xad, 0x07, 0xe7, 0x70, 0xdf, 0xde, 0x83, 0x74, 0x96, 0x26, 0x6e,
- 0x35, 0x7b, 0xc9, 0xc5, 0x46, 0x08, 0x51, 0xb4, 0x13, 0xa8, 0x4f, 0x46,
- 0x46, 0x54, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x1f, 0x00, 0x00,
+ 0x20, 0x00, 0x11, 0x91, 0x43, 0xfe, 0x60, 0x0f, 0x45, 0xb8, 0xb3, 0x07,
+ 0x45, 0x83, 0x9b, 0xae, 0x6d, 0x1d, 0x4e, 0x16, 0xaa, 0xde, 0xef, 0x53,
+ 0xda, 0x2a, 0xc3, 0x13, 0xdd, 0xeb, 0xa5, 0xd3, 0x6c, 0xe1, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00,
0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f,
0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
- 0x20, 0x00, 0xc9, 0x73, 0x33, 0x9a, 0x36, 0x6d, 0x15, 0x10, 0xa2, 0x81,
- 0xaa, 0xbf, 0x27, 0xb1, 0x22, 0xc6, 0x0a, 0x7b, 0x68, 0x66, 0xdb, 0xe9,
- 0xab, 0x19, 0x22, 0x40, 0x87, 0x6b, 0x10, 0x93, 0xc5, 0xf5, 0x4f, 0x46,
- 0x46, 0x54, 0x18, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2a, 0x00, 0x00,
+ 0x20, 0x00, 0x96, 0x4d, 0x2c, 0x93, 0x1d, 0x98, 0xce, 0x49, 0x1f, 0x23,
+ 0x91, 0x26, 0x58, 0xd2, 0x4d, 0xcc, 0x79, 0x7a, 0x95, 0xb1, 0x65, 0x74,
+ 0xa6, 0xc8, 0xf0, 0x97, 0x0b, 0x91, 0x2a, 0xc1, 0x5f, 0xeb, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x2b, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00,
0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f,
0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53,
- 0x48, 0x20, 0x00, 0x59, 0x54, 0x77, 0x75, 0xe5, 0xb6, 0xd5, 0x2e, 0xf7,
- 0xb1, 0x9d, 0xd1, 0x75, 0x39, 0x4c, 0x97, 0x0f, 0x40, 0x58, 0xaa, 0xc9,
- 0x42, 0xe8, 0x03, 0x29, 0x1e, 0x93, 0x63, 0x0c, 0x91, 0x38, 0xc8, 0x4f,
- 0x46, 0x46, 0x54, 0x18, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x38, 0x00,
+ 0x48, 0x20, 0x00, 0x95, 0xbe, 0x11, 0xbe, 0x43, 0xdf, 0xc3, 0x88, 0xff,
+ 0xe9, 0x6d, 0xcd, 0xff, 0x6b, 0xba, 0x45, 0x76, 0x06, 0x78, 0xa8, 0xa1,
+ 0x4b, 0x87, 0x59, 0xe3, 0x13, 0xdd, 0x5c, 0x9b, 0x6c, 0x5f, 0x4b, 0x4f,
+ 0x46, 0x46, 0x54, 0x18, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01,
0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79,
0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c,
0x5f, 0x4e, 0x56, 0x32, 0x31, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41,
- 0x53, 0x48, 0x20, 0x00, 0x77, 0x01, 0x3e, 0x26, 0x2e, 0xc2, 0xe2, 0x34,
- 0x70, 0xcf, 0x0c, 0x9e, 0x0d, 0xed, 0x69, 0xa4, 0x2a, 0x9c, 0x80, 0x06,
- 0x52, 0xd1, 0x4b, 0x77, 0x6d, 0xda, 0x29, 0x27, 0x51, 0x25, 0xf4, 0x92,
- 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x46,
+ 0x53, 0x48, 0x20, 0x00, 0xe9, 0x07, 0x98, 0x37, 0x1e, 0xd3, 0x92, 0xc8,
+ 0xe9, 0x79, 0x5d, 0xb7, 0x25, 0x90, 0x0f, 0x72, 0xc9, 0xf8, 0x28, 0xa5,
+ 0x5d, 0x79, 0x9b, 0xcc, 0xeb, 0x1c, 0x88, 0x79, 0xfa, 0xa3, 0x56, 0x4c,
+ 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x45,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00,
0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54,
- 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0x20, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x0d, 0x00, 0x01, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x56, 0x41, 0x54, 0x59, 0x03, 0x00, 0x01, 0x00, 0x04,
+ 0x45, 0x4e, 0x44, 0x54, 0x2c, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x18, 0x00, 0x02, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00,
+ 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, 0x02, 0x00, 0x04, 0x04,
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
@@ -87,74 +93,76 @@
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc9, 0x02, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xd7, 0x02, 0x00, 0x00,
0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
- 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+ 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14,
0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
- 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
+ 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08,
0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x02, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x18,
- 0x80, 0x05, 0xa8, 0x36, 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x20, 0x01, 0x15, 0x31, 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3,
- 0x40, 0x0f, 0xec, 0x90, 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee,
- 0x40, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9,
- 0x40, 0x0e, 0xe5, 0xd0, 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80,
- 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3,
- 0x3c, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43,
- 0x3a, 0xb0, 0x43, 0x1b, 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03,
- 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5,
- 0x30, 0x0f, 0xf3, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9,
- 0x30, 0x0f, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4,
- 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43,
- 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3,
- 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03,
- 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0,
- 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5,
- 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef,
- 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee,
- 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6,
- 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83,
- 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43,
- 0x3d, 0xb4, 0x03, 0x3c, 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43,
- 0x39, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00,
- 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00,
- 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1,
- 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43,
- 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41,
- 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3,
- 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d,
- 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef,
- 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04,
- 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43,
- 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d,
- 0x60, 0x0e, 0xf0, 0x10, 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3,
- 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed,
- 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03,
- 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03,
- 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6,
- 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x08, 0x00, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
- 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
- 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x50, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x70, 0x9f, 0x34, 0x45, 0x94,
- 0x30, 0xf9, 0xac, 0xb3, 0x20, 0xc3, 0x4b, 0x44, 0x13, 0x71, 0xa1, 0xd4,
- 0xf4, 0x50, 0x93, 0xff, 0x00, 0x82, 0x42, 0x0c, 0x58, 0x08, 0x60, 0x18,
- 0x41, 0x00, 0x06, 0x11, 0x86, 0x20, 0x09, 0xc2, 0x4c, 0xd3, 0x38, 0xb0,
- 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x41, 0x3b, 0x94, 0x03, 0x3d, 0x84,
- 0x03, 0x3b, 0xe8, 0x81, 0x1e, 0xb4, 0x43, 0x38, 0xd0, 0x83, 0x3c, 0xa4,
- 0x03, 0x3e, 0xa0, 0xa0, 0x0c, 0x22, 0x18, 0xc2, 0x1c, 0x01, 0x18, 0x94,
- 0x42, 0x90, 0x73, 0x10, 0xa5, 0x81, 0x00, 0x32, 0x73, 0x04, 0xa0, 0x30,
- 0x88, 0x10, 0x08, 0x53, 0x00, 0x23, 0x00, 0xc3, 0x08, 0x04, 0x32, 0x47,
- 0x10, 0x50, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x51, 0x18, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x1b, 0xf6, 0x25, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x18, 0x87, 0x77, 0x90,
+ 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76, 0xc8, 0x87, 0x36, 0x90,
+ 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72, 0x20, 0x87, 0x36, 0x20,
+ 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72, 0x68, 0x83, 0x79, 0x88,
+ 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c,
+ 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c,
+ 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1, 0x0d, 0xc6, 0x21, 0x1c,
+ 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
+ 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79, 0x68, 0x03, 0x78, 0x90,
+ 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80,
+ 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
+ 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e,
+ 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0,
+ 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x30,
+ 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48,
+ 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48,
+ 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28,
+ 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70,
+ 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20,
+ 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1, 0x1d, 0xe0, 0xa1, 0x0d,
+ 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x1e, 0x00, 0x73, 0x08,
+ 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
+ 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
+ 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
+ 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
+ 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
+ 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38,
+ 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e,
+ 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d,
+ 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e,
+ 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c,
+ 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00,
+ 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30,
+ 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00,
+ 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00, 0x20, 0xea, 0xc1, 0x1d,
+ 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d,
+ 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28,
+ 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36, 0x98, 0x87, 0x77, 0x30,
+ 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x00,
+ 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0xd8, 0x80, 0x08, 0x02,
+ 0x90, 0x00, 0x0b, 0x50, 0x6d, 0x40, 0x86, 0x01, 0x48, 0x80, 0x05, 0xa8,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x21, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x70, 0x9f, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xac, 0xb3,
+ 0x20, 0xc3, 0x4b, 0x44, 0x13, 0x71, 0xa1, 0xd4, 0xf4, 0x50, 0x93, 0xff,
+ 0x00, 0x82, 0x42, 0x0c, 0x58, 0x08, 0x18, 0x46, 0x10, 0x80, 0x24, 0x88,
+ 0x99, 0xa8, 0x79, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71, 0xa0, 0x07, 0x37,
+ 0x68, 0x87, 0x72, 0xa0, 0x87, 0x70, 0x60, 0x07, 0x3d, 0xd0, 0x83, 0x76,
+ 0x08, 0x07, 0x7a, 0x90, 0x87, 0x74, 0xc0, 0x07, 0x14, 0xd0, 0x20, 0x42,
+ 0x21, 0x14, 0x42, 0xc6, 0x8c, 0x6e, 0x20, 0x60, 0x8e, 0x00, 0x0c, 0xe6,
+ 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
@@ -187,172 +195,172 @@
0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x43, 0x18, 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x2c, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
- 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x42,
- 0x25, 0x30, 0x02, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04, 0x05, 0x52, 0x06,
- 0xd4, 0x46, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0xb0, 0x00, 0x43, 0x0c, 0x24, 0x40, 0x08, 0x44, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0x59, 0x06, 0x24, 0x40, 0x02, 0x44,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x84, 0xe5, 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x96, 0x84, 0x61, 0x10,
- 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2,
- 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56,
- 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58, 0x16,
- 0x32, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
- 0x6e, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2,
- 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85,
- 0xd1, 0xd1, 0x90, 0x09, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0x72,
- 0x0b, 0x6b, 0x2b, 0x23, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6,
- 0x36, 0x44, 0x59, 0x9a, 0xc5, 0x59, 0x9e, 0x05, 0x5a, 0x22, 0x3a, 0x61,
- 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a,
- 0x65, 0x2c, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0x98, 0xc0, 0xbd, 0xa5, 0xb9,
- 0xd1, 0x4d, 0xa5, 0xe9, 0x95, 0x0d, 0x51, 0x96, 0x69, 0x71, 0x16, 0x6a,
- 0x81, 0x96, 0x6a, 0x08, 0xb1, 0x48, 0x8b, 0x45, 0x25, 0x2c, 0x4d, 0xce,
- 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x52, 0x58, 0x9a, 0x9c, 0x0b,
- 0xdb, 0xdb, 0x58, 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59,
- 0x19, 0x1e, 0x91, 0xb0, 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x46,
- 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65,
- 0x5f, 0x73, 0x69, 0x7a, 0x65, 0xbc, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4,
- 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xc2, 0xd8, 0xd2, 0xce, 0xdc,
- 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xc9,
- 0x0c, 0xe1, 0x10, 0x61, 0xc1, 0x96, 0x0c, 0x11, 0x90, 0x60, 0xd1, 0x96,
- 0x0d, 0x21, 0x16, 0x0e, 0x21, 0x16, 0x67, 0xe9, 0x16, 0x68, 0x89, 0xf8,
- 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd,
- 0xa5, 0xe9, 0x95, 0x11, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0xa3, 0xc1, 0xa3,
- 0xa1, 0x02, 0x27, 0xf7, 0xa6, 0x56, 0x36, 0x46, 0x97, 0xf6, 0xe6, 0x36,
- 0x04, 0x0c, 0x90, 0x60, 0xc1, 0x96, 0x0f, 0x19, 0x96, 0x0c, 0x29, 0x90,
- 0x60, 0xd1, 0x96, 0x0d, 0x19, 0x16, 0x0e, 0x31, 0x16, 0x67, 0x01, 0x83,
- 0x05, 0x5a, 0xc2, 0x80, 0x09, 0x9d, 0x5c, 0x98, 0xdb, 0x9c, 0xd9, 0x9b,
- 0x5c, 0xdb, 0x10, 0x30, 0x40, 0x8a, 0x05, 0x5b, 0x3e, 0x64, 0x58, 0x32,
- 0xe4, 0x40, 0x82, 0x45, 0x5b, 0x36, 0x64, 0x58, 0x38, 0xc4, 0x58, 0x9c,
- 0x05, 0x0c, 0x16, 0x68, 0x19, 0x03, 0x36, 0x61, 0x69, 0x72, 0x2e, 0x76,
- 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x24, 0xea, 0xd2, 0xdc,
- 0xe8, 0x38, 0xd8, 0xa5, 0x91, 0x0d, 0x61, 0x90, 0x63, 0x29, 0x83, 0xc5,
- 0x59, 0xcc, 0x60, 0x81, 0x96, 0x33, 0x18, 0x82, 0x2c, 0xde, 0x22, 0x06,
- 0x0b, 0x19, 0x2c, 0x68, 0x30, 0xc4, 0x50, 0x80, 0xe5, 0x5a, 0xd2, 0x80,
- 0xcf, 0x5b, 0x9b, 0x5b, 0x1a, 0xdc, 0x1b, 0x5d, 0x99, 0x1b, 0x1d, 0xc8,
- 0x18, 0x5a, 0x98, 0x1c, 0x9f, 0xa9, 0xb4, 0x36, 0x38, 0xb6, 0x32, 0x90,
- 0xa1, 0x95, 0x15, 0x10, 0x2a, 0xa1, 0xa0, 0xa0, 0x21, 0xc2, 0xc2, 0x06,
- 0x43, 0x8c, 0x65, 0x0d, 0x96, 0x36, 0x68, 0x90, 0x21, 0xc6, 0xe2, 0x06,
- 0x8b, 0x1b, 0x34, 0xc8, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1,
- 0x0d, 0xd2, 0x81, 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x10, 0x8c,
- 0x58, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61,
- 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, 0x20, 0x8c, 0xa0, 0xc2, 0x21,
- 0x1d, 0xe4, 0xc1, 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21,
- 0x1c, 0xce, 0xa1, 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21,
- 0x1d, 0xde, 0xc1, 0x1d, 0xa6, 0x04, 0xc4, 0x88, 0x29, 0x1c, 0xd2, 0x41,
- 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1,
- 0x1c, 0x7e, 0xe1, 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61,
- 0x1e, 0xa6, 0x10, 0x06, 0xa2, 0x30, 0x23, 0x94, 0x70, 0x48, 0x07, 0x79,
- 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79, 0xa0, 0x87, 0x72, 0xc0, 0x87, 0x29,
- 0x81, 0x1a, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
- 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
- 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
- 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
- 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
- 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
- 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
- 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
- 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
- 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
- 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
- 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
- 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
- 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
- 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
- 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
- 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
- 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
- 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
- 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
- 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
- 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
- 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
- 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
- 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
- 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
- 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
- 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
- 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
- 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
- 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
- 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82,
- 0x0c, 0x7f, 0x45, 0x44, 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00,
- 0x69, 0x00, 0x00, 0x00, 0x13, 0x04, 0x47, 0x2c, 0x10, 0x00, 0x00, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x14, 0xe7, 0x20, 0x84, 0x60, 0x9a, 0x46, 0x00,
- 0xa8, 0x95, 0x41, 0x11, 0x94, 0x00, 0xa1, 0x42, 0x98, 0x01, 0xa0, 0x31,
- 0x03, 0x40, 0x62, 0x06, 0x80, 0xc2, 0x0c, 0x00, 0x81, 0x11, 0x80, 0x31,
- 0x02, 0x10, 0x04, 0x41, 0xfc, 0x03, 0x00, 0x00, 0x33, 0x11, 0x0c, 0x12,
- 0x14, 0x33, 0x11, 0x0c, 0x12, 0x14, 0xe3, 0x11, 0xd1, 0x94, 0x4d, 0x14,
- 0x94, 0x59, 0x82, 0x60, 0xa0, 0x02, 0xb1, 0x03, 0xe0, 0x0c, 0x86, 0x0b,
- 0x9a, 0x8c, 0x47, 0x50, 0x57, 0x17, 0x50, 0x50, 0x06, 0x19, 0x82, 0x65,
- 0xb2, 0xc0, 0x90, 0xcf, 0x2c, 0x81, 0x30, 0x50, 0x81, 0x90, 0x42, 0x50,
- 0x09, 0x03, 0x15, 0x01, 0x11, 0x44, 0xc2, 0x18, 0x42, 0x21, 0xcc, 0x31,
- 0x40, 0x01, 0x19, 0x0c, 0x32, 0x04, 0x51, 0x76, 0x45, 0x93, 0xf1, 0x88,
- 0x2f, 0x0c, 0xce, 0x20, 0xa0, 0xa0, 0x58, 0x40, 0xc8, 0xc7, 0x02, 0x04,
- 0x3e, 0xa6, 0xb0, 0x01, 0x0c, 0x86, 0x1b, 0x02, 0x0e, 0x0c, 0x66, 0x19,
- 0x06, 0x21, 0x18, 0x8f, 0xb0, 0xce, 0xa0, 0x0d, 0xa2, 0xc1, 0x88, 0x80,
- 0x28, 0x00, 0x9b, 0xde, 0x00, 0x06, 0xc3, 0x0d, 0xc1, 0x07, 0x06, 0xb3,
- 0x0c, 0x44, 0x10, 0x8c, 0x47, 0x64, 0x6a, 0x00, 0x07, 0x6a, 0x40, 0x41,
- 0x19, 0x8f, 0xd8, 0xd8, 0x40, 0x0e, 0xc6, 0x80, 0x82, 0x32, 0x1e, 0xd1,
- 0xb9, 0x01, 0x1d, 0x98, 0x01, 0x05, 0x65, 0x3c, 0xe2, 0x83, 0x03, 0x3b,
- 0x48, 0x03, 0x0a, 0xca, 0x78, 0x04, 0x18, 0xc8, 0x01, 0x1e, 0xc8, 0xc1,
- 0x60, 0x44, 0x80, 0x14, 0xc0, 0x78, 0x44, 0x18, 0xcc, 0x41, 0x1e, 0xa8,
- 0xc1, 0x60, 0x44, 0x70, 0x14, 0xc0, 0x78, 0x84, 0x18, 0xd0, 0x81, 0x1e,
- 0xb0, 0xc1, 0x60, 0x44, 0x60, 0x14, 0xc0, 0x78, 0xc4, 0x18, 0xd4, 0xc1,
- 0x1e, 0xb8, 0xc1, 0x60, 0x44, 0x50, 0x14, 0xc0, 0xc9, 0x41, 0x8b, 0xf1,
- 0x04, 0x3b, 0x08, 0x28, 0x20, 0x83, 0x0c, 0x41, 0x1b, 0xd0, 0xc1, 0x1c,
- 0x43, 0xb0, 0x06, 0x7d, 0x30, 0xc7, 0x10, 0xac, 0x01, 0x1f, 0x0c, 0x32,
- 0x04, 0x6e, 0x60, 0x07, 0x16, 0x48, 0xf2, 0x99, 0x25, 0x28, 0x06, 0x2a,
- 0x10, 0x95, 0x20, 0xaa, 0x62, 0xa0, 0x22, 0x20, 0x88, 0xa8, 0x18, 0x43,
- 0x28, 0x84, 0x39, 0x86, 0x39, 0x08, 0x4e, 0x61, 0x90, 0x21, 0xa0, 0x03,
- 0x3e, 0xb8, 0xa2, 0xc9, 0x78, 0x84, 0x1c, 0x90, 0x82, 0x2a, 0x04, 0x14,
- 0x14, 0x0b, 0x08, 0xf9, 0x58, 0x80, 0xc0, 0xc7, 0x94, 0x57, 0x80, 0xc1,
- 0x70, 0x43, 0xf0, 0x07, 0x60, 0x30, 0xcb, 0x60, 0x14, 0xc1, 0x6c, 0x43,
- 0x1f, 0x0c, 0xc0, 0x6c, 0x43, 0xb0, 0x07, 0x41, 0x06, 0x01, 0x31, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0x78, 0x83, 0x2d, 0x03, 0x12,
- 0xbc, 0xc1, 0x96, 0x61, 0x0a, 0xde, 0x60, 0xcb, 0xa0, 0x05, 0x6f, 0xb0,
- 0x65, 0x80, 0x83, 0xe0, 0x0d, 0xb6, 0x0c, 0x7e, 0x10, 0xbc, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x07, 0x43, 0x18, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x2c, 0x10, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xd2,
+ 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28, 0x90, 0x42, 0x28, 0x88,
+ 0x32, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xd1, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x86, 0x12, 0x24, 0x80,
+ 0x62, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68, 0x52, 0x86, 0x08, 0x89,
+ 0x30, 0xc4, 0x50, 0x02, 0xe5, 0x50, 0x04, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25, 0x50, 0x04, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26,
+ 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c,
+ 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb,
+ 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99,
+ 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4,
+ 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64, 0xa2, 0x13, 0x96, 0x26, 0xe7, 0x02,
+ 0xf7, 0x96, 0xe6, 0x46, 0xf7, 0x35, 0x97, 0xa6, 0x57, 0xc6, 0xc2, 0x8c,
+ 0xed, 0x2d, 0x8c, 0x8e, 0x09, 0xdc, 0x5b, 0x9a, 0x1b, 0xdd, 0x54, 0x9a,
+ 0x5e, 0xd9, 0x10, 0x25, 0xa9, 0x12, 0x28, 0xb1, 0x12, 0x29, 0xb9, 0x86,
+ 0x10, 0x09, 0x95, 0x60, 0x84, 0xc2, 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4,
+ 0xe8, 0xca, 0xf0, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5,
+ 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5,
+ 0xb9, 0x91, 0x95, 0xe1, 0x31, 0x3b, 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3,
+ 0x2b, 0x23, 0x43, 0xc1, 0x81, 0x7b, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73,
+ 0x23, 0xb2, 0x93, 0xf9, 0x32, 0x4b, 0xa1, 0x61, 0xc6, 0xf6, 0x16, 0x46,
+ 0x27, 0x33, 0x84, 0x52, 0x84, 0x44, 0x4b, 0x36, 0x45, 0x50, 0x82, 0x84,
+ 0x4b, 0xa0, 0xa4, 0x4b, 0xa4, 0x64, 0xa2, 0x12, 0x96, 0x26, 0xe7, 0x22,
+ 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7, 0x27, 0x2c, 0x4d, 0xce, 0x45, 0xac,
+ 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x48, 0x58,
+ 0x9a, 0x9c, 0x8b, 0x5c, 0x59, 0x18, 0x19, 0xa3, 0xb0, 0x34, 0x39, 0x97,
+ 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd,
+ 0x32, 0x5e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79,
+ 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x44, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0x68, 0xf0, 0x68, 0xa8, 0xc0,
+ 0xc9, 0xbd, 0xa9, 0x95, 0x8d, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x01, 0x03,
+ 0x25, 0x48, 0xbe, 0x04, 0x0c, 0x94, 0x21, 0xd9, 0x14, 0x42, 0x09, 0x92,
+ 0x30, 0x48, 0xc4, 0x40, 0x19, 0x92, 0x31, 0x50, 0x8a, 0x04, 0x4a, 0xc8,
+ 0x20, 0x91, 0x92, 0x32, 0x60, 0x42, 0x27, 0x17, 0xe6, 0x36, 0x67, 0xf6,
+ 0x26, 0xd7, 0x36, 0x04, 0x0c, 0x14, 0x22, 0xf9, 0x12, 0x30, 0x50, 0x86,
+ 0x64, 0x53, 0x10, 0x25, 0x48, 0xc2, 0x20, 0x11, 0x03, 0x65, 0x48, 0xc6,
+ 0x40, 0x29, 0x12, 0x28, 0x21, 0x83, 0x44, 0x4a, 0xce, 0x60, 0x88, 0x91,
+ 0x78, 0x89, 0x19, 0x24, 0x68, 0x30, 0xc4, 0x40, 0x80, 0x24, 0x4b, 0xd2,
+ 0x80, 0xcf, 0x5b, 0x9b, 0x5b, 0x1a, 0xdc, 0x1b, 0x5d, 0x99, 0x1b, 0x1d,
+ 0xc8, 0x18, 0x5a, 0x98, 0x1c, 0x9f, 0xa9, 0xb4, 0x36, 0x38, 0xb6, 0x32,
+ 0x90, 0xa1, 0x95, 0x15, 0x10, 0x2a, 0xa1, 0xa0, 0xa0, 0x21, 0x42, 0xc2,
+ 0x06, 0x43, 0x8c, 0x64, 0x0d, 0x92, 0x36, 0x58, 0x92, 0x21, 0x46, 0xe2,
+ 0x06, 0x89, 0x1b, 0x2c, 0xc9, 0x88, 0x88, 0x1d, 0xd8, 0xc1, 0x1e, 0xda,
+ 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, 0xa1, 0x1c, 0xdc,
+ 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, 0x04, 0xc1, 0x08,
+ 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c, 0xca,
+ 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x30, 0x8c, 0x58, 0xc2, 0x21, 0x1d, 0xe4,
+ 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc,
+ 0x61, 0x4a, 0x40, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8,
+ 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c, 0x7e,
+ 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xa6,
+ 0x04, 0xc6, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde,
+ 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d, 0xe0,
+ 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x88, 0xc2,
+ 0x38, 0x23, 0x94, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07,
+ 0x79, 0xa0, 0x87, 0x72, 0xc0, 0x87, 0x29, 0x81, 0x1a, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+ 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+ 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+ 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+ 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+ 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+ 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+ 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+ 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+ 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+ 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+ 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+ 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+ 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+ 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+ 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+ 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+ 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+ 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+ 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+ 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+ 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
+ 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
+ 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
+ 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
+ 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
+ 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
+ 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
+ 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb1, 0x5d,
+ 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, 0x44, 0x13, 0x71, 0x01, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xd4, 0x63, 0x11, 0xc3,
+ 0x30, 0x0c, 0x63, 0x11, 0x82, 0x20, 0x08, 0x63, 0x11, 0x41, 0x10, 0x04,
+ 0x23, 0x00, 0xb4, 0x25, 0x50, 0x06, 0x45, 0x40, 0x33, 0x03, 0x40, 0x32,
+ 0x03, 0x40, 0x31, 0x03, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcc, 0x63, 0x3d, 0x14, 0x94, 0xf1,
+ 0x88, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3, 0x60, 0x30, 0x26, 0x04,
+ 0xf2, 0x19, 0x8f, 0x98, 0x2a, 0xae, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x4a,
+ 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x60, 0x5a, 0x18,
+ 0x40, 0x14, 0x94, 0x41, 0x06, 0xe6, 0xb9, 0x4c, 0x08, 0xe4, 0x63, 0x45,
+ 0x00, 0x9f, 0xf1, 0x88, 0xee, 0x33, 0x03, 0x8b, 0x82, 0x32, 0xc8, 0x10,
+ 0x51, 0x9d, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0, 0x33, 0x1e, 0x11, 0x06,
+ 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21, 0xc8, 0x3e, 0x0b, 0x2a,
+ 0xf9, 0x0c, 0x32, 0x0c, 0x9b, 0x18, 0x58, 0x30, 0xc9, 0xc7, 0x86, 0x00,
+ 0x3e, 0x83, 0x0c, 0x86, 0x67, 0x06, 0x16, 0x44, 0xf2, 0xb1, 0x21, 0x80,
+ 0xcf, 0x20, 0x43, 0x12, 0x06, 0x6a, 0x60, 0xc1, 0x23, 0x1f, 0x1b, 0x02,
+ 0xf8, 0x8c, 0x47, 0xb8, 0x41, 0x1c, 0xe0, 0x01, 0x1a, 0x50, 0x50, 0x06,
+ 0x19, 0x02, 0x33, 0x60, 0x03, 0x0b, 0xc4, 0x40, 0x3e, 0x83, 0x0c, 0x03,
+ 0x1a, 0xbc, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41, 0x86, 0x42, 0x0d, 0xe4,
+ 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0x07, 0x1b, 0xd4, 0x81, 0x05, 0x9a,
+ 0x7c, 0x06, 0x19, 0xf4, 0x00, 0x0e, 0xe8, 0xc0, 0xb2, 0x40, 0x3e, 0x83,
+ 0x0c, 0x7c, 0x20, 0x07, 0x77, 0x60, 0x4e, 0x20, 0x1f, 0x4b, 0x06, 0xf8,
+ 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16, 0x20, 0xf0, 0xb1, 0xa0,
+ 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c, 0x43, 0x70, 0x07, 0x41,
+ 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x78,
+ 0x83, 0x2d, 0xc3, 0x10, 0xbc, 0xc1, 0x96, 0xe1, 0x08, 0xde, 0x60, 0xcb,
+ 0xc0, 0x04, 0x6f, 0xb0, 0x65, 0x88, 0x82, 0x37, 0xd8, 0x32, 0x58, 0xc1,
+ 0x1b, 0x6c, 0x19, 0xc6, 0x20, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x88, 0x0b, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
0xdf, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
- 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
- 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
- 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
- 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x08, 0x02, 0xb0, 0x00,
- 0xd5, 0x06, 0x63, 0x18, 0x80, 0x05, 0xa8, 0x36, 0x18, 0x04, 0x01, 0x2c,
- 0x40, 0xb5, 0x81, 0x5c, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09,
- 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a,
- 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72,
- 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72,
- 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73,
- 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21,
- 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21,
- 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81,
- 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73,
- 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79,
- 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79,
- 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0x80,
- 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
@@ -370,33 +378,36 @@
0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
- 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72,
- 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78,
- 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79,
- 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36,
- 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21,
- 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21,
- 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x68, 0x03, 0x73,
- 0x80, 0x87, 0x38, 0xb0, 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70,
- 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70,
- 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2,
- 0x1e, 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1,
- 0x0d, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70,
- 0x60, 0x87, 0x79, 0x28, 0x07, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18, 0x88, 0x02, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
- 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
- 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x50, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0xe7,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x80, 0x08, 0x03, 0x90, 0x00, 0x0b, 0x50, 0x6d, 0x40, 0x06, 0x02,
+ 0x48, 0x80, 0x05, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c,
+ 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0xe7,
0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x39, 0x0f, 0xf6, 0x12, 0xd1, 0x44,
0x5c, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x3f, 0x80, 0xa0, 0x10, 0x03, 0x16,
- 0x82, 0x18, 0x44, 0x10, 0x82, 0x24, 0x08, 0x33, 0x4d, 0xe3, 0xc0, 0x0e,
- 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xed, 0x50, 0x0e, 0xf4, 0x10, 0x0e,
- 0xec, 0xa0, 0x07, 0x7a, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xf2, 0x90, 0x0e,
- 0xf8, 0x80, 0x82, 0x32, 0x88, 0x60, 0x08, 0x73, 0x04, 0x60, 0x50, 0x8c,
- 0x41, 0xc8, 0x39, 0x88, 0xd2, 0x40, 0x00, 0x99, 0x39, 0x02, 0x50, 0x18,
- 0x44, 0x08, 0x84, 0x29, 0x80, 0x11, 0x80, 0x61, 0x04, 0x02, 0x99, 0x23,
- 0x08, 0x28, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x42, 0x92, 0x20, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6,
+ 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4,
+ 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50,
+ 0x40, 0x83, 0x08, 0x85, 0x50, 0x8a, 0x11, 0x31, 0xa3, 0x1b, 0x08, 0x98,
+ 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18, 0x44, 0x08, 0x84, 0x61, 0x04,
+ 0x42, 0x19, 0x01, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
@@ -429,83 +440,86 @@
0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x43, 0x18, 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x07, 0x43, 0x18, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x2c, 0x10, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
- 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x42,
- 0x25, 0x50, 0x10, 0x23, 0x00, 0x05, 0x18, 0x50, 0x04, 0x05, 0x52, 0x06,
- 0x85, 0x40, 0x6d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0xd3, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e,
- 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e,
- 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5,
- 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25,
- 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0xb0, 0x00, 0x43, 0x0c, 0x24, 0x40,
- 0x04, 0x64, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0x59, 0x06,
- 0x24, 0x40, 0x02, 0x64, 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
- 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36,
- 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58, 0x0a,
- 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
- 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65,
- 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe5, 0x20, 0x19, 0x84, 0xa5,
- 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9,
- 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95,
- 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11,
- 0x96, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97,
- 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6,
- 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0x58, 0x16, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73,
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4,
- 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68,
- 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x90, 0x09, 0x4b, 0x93, 0x73, 0x09,
- 0x93, 0x3b, 0xfb, 0x72, 0x0b, 0x6b, 0x2b, 0x23, 0x02, 0xf7, 0x36, 0x97,
- 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x44, 0x59, 0x9a, 0xc5, 0x59, 0x9e, 0x05,
- 0x5a, 0x22, 0x46, 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65,
- 0x78, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0xcc, 0xce, 0xca, 0xdc,
- 0xca, 0xe4, 0xc2, 0xe8, 0xca, 0xc8, 0x50, 0x70, 0xe8, 0xca, 0xf0, 0xc6,
- 0xde, 0xde, 0xe4, 0xc8, 0x88, 0xec, 0x64, 0xbe, 0xcc, 0x52, 0x68, 0x98,
- 0xb1, 0xbd, 0x85, 0xd1, 0xc9, 0x10, 0xa1, 0x2b, 0xc3, 0x1b, 0x7b, 0x7b,
- 0x93, 0x23, 0x1b, 0xc2, 0x2c, 0xd3, 0x42, 0x2d, 0xce, 0x52, 0x2d, 0xd0,
- 0x62, 0x0d, 0x21, 0x16, 0x69, 0xb9, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x88,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b,
- 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3,
- 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c,
- 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b,
- 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9,
- 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7,
- 0x5c, 0x9a, 0x5e, 0xd9, 0x10, 0x0e, 0x19, 0x96, 0x6c, 0xd1, 0x90, 0x01,
- 0x09, 0x96, 0x6d, 0xe1, 0x10, 0x61, 0xe9, 0x10, 0x61, 0x71, 0x96, 0x6a,
- 0x81, 0x96, 0x88, 0x09, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0xd9,
- 0xdc, 0x10, 0x0e, 0x09, 0x96, 0x6c, 0xd1, 0x90, 0x00, 0x09, 0x96, 0x6d,
- 0xe1, 0x10, 0x61, 0xe9, 0x10, 0x61, 0x71, 0x96, 0x6a, 0x81, 0x96, 0x8f,
- 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7,
- 0x5c, 0x9a, 0x5e, 0x19, 0x11, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x1a, 0x3c,
- 0x1a, 0x2a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x43, 0xc0, 0x00, 0x29, 0x96, 0x6c, 0x09, 0x03, 0x84, 0x58, 0x34, 0xa4,
- 0x40, 0x82, 0x65, 0x5b, 0x38, 0x84, 0x58, 0x3a, 0xc4, 0x58, 0x9c, 0x45,
- 0x0c, 0x16, 0x68, 0x19, 0x03, 0x26, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66,
- 0x6f, 0x72, 0x6d, 0x43, 0xc0, 0x00, 0x39, 0x96, 0x6c, 0x09, 0x03, 0x84,
- 0x58, 0x34, 0xe4, 0x40, 0x82, 0x65, 0x5b, 0x38, 0x84, 0x58, 0x3a, 0xc4,
- 0x58, 0x9c, 0x45, 0x0c, 0x16, 0x68, 0x29, 0x03, 0x36, 0x61, 0x69, 0x72,
- 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x24, 0xea,
- 0xd2, 0xdc, 0xe8, 0x38, 0xd8, 0xa5, 0x91, 0x0d, 0x61, 0x10, 0x64, 0x39,
- 0x83, 0xc5, 0x59, 0xd0, 0x60, 0x81, 0x96, 0x34, 0x18, 0xa2, 0x2c, 0xde,
- 0x02, 0x06, 0x0b, 0x19, 0x2c, 0x66, 0xb0, 0xa8, 0xc1, 0x10, 0x43, 0x01,
- 0x16, 0x6c, 0x59, 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74,
- 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda,
- 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82,
- 0x86, 0x08, 0x8b, 0x1b, 0x0c, 0x31, 0x96, 0x36, 0x58, 0xde, 0xa0, 0x49,
- 0x86, 0x18, 0x0b, 0x1c, 0x2c, 0x70, 0xd0, 0x24, 0x23, 0x14, 0x76, 0x60,
- 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0,
- 0x87, 0x29, 0x41, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0,
- 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x81,
- 0x30, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70,
- 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28,
- 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x10, 0x23,
- 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80,
- 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48,
- 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x18, 0x88, 0xc2, 0x8c, 0x50,
- 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x81, 0x1e,
- 0xca, 0x01, 0x1f, 0xa6, 0x04, 0x6c, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xd2,
+ 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28, 0x90, 0x32, 0x28, 0x84,
+ 0x82, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x86, 0x12, 0x24, 0x80,
+ 0x72, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68, 0x52, 0x86, 0x08, 0x89,
+ 0x30, 0xc4, 0x50, 0x02, 0x05, 0x51, 0x04, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25, 0x50, 0x04, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26,
+ 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c,
+ 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb,
+ 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99,
+ 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4,
+ 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64, 0x62, 0x14, 0x96, 0x26, 0xe7, 0x62,
+ 0x57, 0x26, 0x47, 0x57, 0x86, 0xf7, 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47,
+ 0xc7, 0xec, 0xac, 0xcc, 0xad, 0x4c, 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0x05,
+ 0x87, 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x8c, 0xc8, 0x4e, 0xe6,
+ 0xcb, 0x2c, 0x85, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x9d, 0x0c, 0x11, 0xba,
+ 0x32, 0xbc, 0xb1, 0xb7, 0x37, 0x39, 0xb2, 0x21, 0x4c, 0x52, 0x25, 0x56,
+ 0x02, 0x25, 0x57, 0x22, 0x25, 0xd8, 0x10, 0x22, 0xa1, 0x92, 0x8c, 0x50,
+ 0x58, 0x9a, 0x9c, 0x8b, 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0x57, 0x9a,
+ 0x1b, 0x5c, 0x1d, 0x1d, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1,
+ 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x66,
+ 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x76, 0x32, 0x5f, 0x66,
+ 0x29, 0x43, 0x28, 0x45, 0x48, 0xb6, 0x84, 0x53, 0x04, 0x25, 0x48, 0xba,
+ 0x04, 0x4a, 0xae, 0x44, 0x4a, 0xa6, 0x21, 0x94, 0x12, 0x24, 0x5b, 0xc2,
+ 0x29, 0x81, 0x12, 0x24, 0x56, 0x02, 0x25, 0x57, 0x22, 0x25, 0x18, 0x95,
+ 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, 0x33, 0xb3, 0x32, 0x39, 0x3e, 0x61,
+ 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69,
+ 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4, 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x18,
+ 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95,
+ 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93,
+ 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x0a, 0x63, 0x4b, 0x3b, 0x73,
+ 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23, 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x47,
+ 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee, 0x4d, 0xad, 0x6c, 0x8c, 0x2e, 0xed,
+ 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x44, 0x02, 0x06, 0x49, 0x18, 0x28, 0x43,
+ 0xc2, 0x29, 0x84, 0x12, 0x24, 0x62, 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64,
+ 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41, 0x22, 0x25, 0x66, 0xc0, 0x84, 0x4e,
+ 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d, 0xae, 0x6d, 0x08, 0x18, 0x28, 0x46,
+ 0x02, 0x06, 0x49, 0x18, 0x28, 0x43, 0xc2, 0x29, 0x86, 0x12, 0x24, 0x62,
+ 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64, 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41,
+ 0x22, 0x25, 0x68, 0x30, 0x04, 0x49, 0xbc, 0xe4, 0x4b, 0xce, 0x20, 0x49,
+ 0x83, 0x21, 0x06, 0x02, 0x24, 0x5a, 0xa2, 0x06, 0x7c, 0xde, 0xda, 0xdc,
+ 0xd2, 0xe0, 0xde, 0xe8, 0xca, 0xdc, 0xe8, 0x40, 0xc6, 0xd0, 0xc2, 0xe4,
+ 0xf8, 0x4c, 0xa5, 0xb5, 0xc1, 0xb1, 0x95, 0x81, 0x0c, 0xad, 0xac, 0x80,
+ 0x50, 0x09, 0x05, 0x05, 0x0d, 0x11, 0x92, 0x36, 0x18, 0x62, 0x24, 0x6c,
+ 0x90, 0xb8, 0xc1, 0x92, 0x0c, 0x31, 0x92, 0x37, 0x48, 0xde, 0x60, 0x49,
+ 0x46, 0x44, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0xd0, 0x0e, 0xef,
+ 0x40, 0x0e, 0xf5, 0xc0, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0xc0, 0x0e, 0xe1,
+ 0x70, 0x0e, 0xf3, 0x30, 0x25, 0x08, 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6,
+ 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53,
+ 0x82, 0x61, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5,
+ 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62, 0x04,
+ 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7,
+ 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2,
+ 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x30, 0x46, 0x4c, 0xe1,
+ 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9,
+ 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef,
+ 0xe0, 0x0e, 0xf3, 0x30, 0x85, 0x40, 0x14, 0xc6, 0x19, 0xa1, 0x84, 0x43,
+ 0x3a, 0xc8, 0x83, 0x1b, 0xd8, 0x43, 0x39, 0xc8, 0x03, 0x3d, 0x94, 0x03,
+ 0x3e, 0x4c, 0x09, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
@@ -535,50 +549,46 @@
0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
- 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00,
- 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d,
- 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x47, 0x2c,
- 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x14, 0xe7, 0x20, 0x86,
- 0x80, 0xa2, 0x46, 0x00, 0xa8, 0x95, 0x41, 0x11, 0x94, 0x00, 0xa1, 0x19,
- 0x00, 0x1a, 0x33, 0x00, 0x24, 0x66, 0x00, 0x28, 0xcc, 0x00, 0x10, 0x18,
- 0x23, 0x00, 0x41, 0x10, 0xc4, 0xbf, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x33, 0x11, 0x0c, 0x12, 0x14, 0x33, 0x11, 0x0c, 0x12, 0x14, 0xe3, 0x11,
- 0xd0, 0x94, 0x4d, 0x14, 0x94, 0x59, 0x82, 0x60, 0xa0, 0x02, 0xb1, 0x03,
- 0xe0, 0x0c, 0x86, 0x0b, 0x9a, 0x8c, 0x47, 0x4c, 0x57, 0x17, 0x50, 0x50,
- 0x06, 0x19, 0x82, 0x45, 0xb2, 0xc0, 0x90, 0xcf, 0x2c, 0x81, 0x30, 0x50,
- 0x81, 0x98, 0x42, 0x50, 0x09, 0x03, 0x15, 0x01, 0x11, 0x44, 0xc2, 0x18,
- 0x42, 0x21, 0xcc, 0x31, 0x40, 0x01, 0x19, 0x0c, 0x32, 0x04, 0x11, 0x76,
- 0x45, 0x93, 0xf1, 0x08, 0x2f, 0x0c, 0xce, 0x20, 0xa0, 0xa0, 0x58, 0x40,
- 0xc8, 0xc7, 0x02, 0x04, 0x3e, 0xa6, 0xb4, 0x01, 0x0c, 0x86, 0x1b, 0x82,
- 0x33, 0x00, 0x83, 0x59, 0x86, 0x41, 0x08, 0xc6, 0x23, 0xac, 0x33, 0x68,
- 0x83, 0x68, 0x30, 0x22, 0x20, 0x0a, 0xc0, 0x26, 0x38, 0x80, 0xc1, 0x70,
- 0x43, 0xa0, 0x06, 0x60, 0x30, 0xcb, 0x40, 0x04, 0xc1, 0x78, 0x44, 0xa6,
- 0x06, 0x70, 0xa0, 0x06, 0x14, 0x94, 0xf1, 0x88, 0x8d, 0x0d, 0xe4, 0x40,
- 0x0c, 0x28, 0x28, 0xe3, 0x11, 0x9d, 0x1b, 0xd0, 0x41, 0x19, 0x50, 0x50,
- 0xc6, 0x23, 0x3e, 0x38, 0xb0, 0x03, 0x34, 0xa0, 0xa0, 0x8c, 0x47, 0x80,
- 0x81, 0x1c, 0xe0, 0x81, 0x1c, 0x0c, 0x46, 0x04, 0x48, 0x01, 0x8c, 0x47,
- 0x84, 0xc1, 0x1c, 0xe4, 0x41, 0x1a, 0x0c, 0x46, 0x04, 0x47, 0x01, 0x8c,
- 0x47, 0x88, 0x01, 0x1d, 0xe8, 0xc1, 0x1a, 0x0c, 0x46, 0x04, 0x46, 0x01,
- 0x8c, 0x47, 0x8c, 0x41, 0x1d, 0xec, 0x41, 0x1b, 0x0c, 0x46, 0x04, 0x45,
- 0x01, 0x5c, 0x1c, 0xb4, 0x18, 0x4f, 0xb0, 0x83, 0x80, 0x02, 0x32, 0xc8,
- 0x10, 0xb0, 0xc1, 0x1c, 0xcc, 0x31, 0x04, 0x6a, 0xe0, 0x07, 0x73, 0x0c,
- 0x01, 0x1b, 0xf4, 0xc1, 0x20, 0x43, 0xe0, 0x06, 0x75, 0x60, 0x81, 0x24,
- 0x9f, 0x59, 0x82, 0x62, 0xa0, 0x02, 0x61, 0x09, 0xa2, 0x2a, 0x06, 0x2a,
- 0x02, 0x82, 0x88, 0x8a, 0x31, 0x84, 0x42, 0x98, 0x63, 0x98, 0x83, 0xe0,
- 0x14, 0x06, 0x19, 0x02, 0x3a, 0xd8, 0x83, 0x2b, 0x9a, 0x8c, 0x47, 0xc8,
- 0x01, 0x29, 0xa8, 0x42, 0x40, 0x41, 0xb1, 0x80, 0x90, 0x8f, 0x05, 0x08,
- 0x7c, 0x4c, 0x81, 0x05, 0x18, 0x0c, 0x37, 0x04, 0xaa, 0x00, 0x06, 0xb3,
- 0x0c, 0x46, 0x11, 0x8c, 0x27, 0xa0, 0x02, 0x45, 0x01, 0x99, 0x6d, 0x00,
- 0x85, 0x02, 0x98, 0x6d, 0x08, 0x84, 0x20, 0x83, 0x80, 0x18, 0x00, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x21, 0x88, 0x83, 0x2d, 0x03, 0x12,
- 0xc4, 0xc1, 0x96, 0x61, 0x0a, 0xe2, 0x60, 0xcb, 0xa0, 0x05, 0x71, 0xb0,
- 0x65, 0x80, 0x83, 0x20, 0x0e, 0xb6, 0x0c, 0x7e, 0x10, 0xc4, 0xc1, 0x96,
- 0xa1, 0x14, 0x82, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e,
+ 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e,
+ 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54,
+ 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39,
+ 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c,
+ 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07,
+ 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83,
+ 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0xd4, 0x63, 0x11, 0xc3, 0x30, 0x0c, 0x63, 0x11,
+ 0x82, 0x20, 0x08, 0x63, 0x11, 0x41, 0x10, 0x04, 0xb4, 0x25, 0x50, 0x06,
+ 0x45, 0x40, 0x3d, 0x02, 0x40, 0x33, 0x03, 0x40, 0x32, 0x03, 0x40, 0x31,
+ 0x03, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcb, 0x63, 0x3d, 0x14, 0x94, 0xf1,
+ 0x08, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3, 0x50, 0x20, 0x26, 0x04,
+ 0xf2, 0x19, 0x8f, 0x90, 0x2a, 0xae, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x09,
+ 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x5c, 0x5a, 0x18,
+ 0x40, 0x14, 0x94, 0x41, 0x06, 0xc6, 0xb1, 0x4c, 0x08, 0xe4, 0x63, 0x45,
+ 0x00, 0x9f, 0xf1, 0x08, 0xee, 0x33, 0x03, 0x8b, 0x82, 0x32, 0xc8, 0x10,
+ 0x4d, 0x9c, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0, 0x33, 0x1e, 0x01, 0x06,
+ 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21, 0xc0, 0x36, 0x0b, 0x2a,
+ 0xf9, 0x0c, 0x32, 0x0c, 0x5a, 0x18, 0x58, 0x30, 0xc9, 0xc7, 0x86, 0x00,
+ 0x3e, 0x83, 0x0c, 0x46, 0x57, 0x06, 0x16, 0x44, 0xf2, 0xb1, 0x21, 0x80,
+ 0xcf, 0x20, 0x43, 0x02, 0x06, 0x69, 0x60, 0xc1, 0x23, 0x1f, 0x1b, 0x02,
+ 0xf8, 0x8c, 0x47, 0xb4, 0x41, 0x1c, 0xe0, 0x01, 0x1a, 0x50, 0x50, 0x06,
+ 0x19, 0x82, 0x32, 0x40, 0x03, 0x0b, 0xc4, 0x40, 0x3e, 0x83, 0x0c, 0xc3,
+ 0x19, 0xb8, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41, 0x86, 0x22, 0x0d, 0xe2,
+ 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0xc7, 0x1a, 0xd0, 0x81, 0x05, 0x9a,
+ 0x7c, 0x06, 0x19, 0xf4, 0xc0, 0x0d, 0xe0, 0xc0, 0xb2, 0x40, 0x3e, 0x83,
+ 0x0c, 0x7c, 0x00, 0x07, 0x76, 0x60, 0x4e, 0x20, 0x1f, 0x4b, 0x06, 0xf8,
+ 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16, 0x20, 0xf0, 0xb1, 0xa0,
+ 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c, 0x43, 0x30, 0x0a, 0x41,
+ 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x80,
+ 0x83, 0x2d, 0xc3, 0x10, 0xc0, 0xc1, 0x96, 0xe1, 0x08, 0xe0, 0x60, 0xcb,
+ 0xc0, 0x04, 0x70, 0xb0, 0x65, 0x88, 0x02, 0x38, 0xd8, 0x32, 0x58, 0x01,
+ 0x1c, 0x6c, 0x19, 0xc6, 0x20, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
- 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x90, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
- 0x21, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x47, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
@@ -585,55 +595,58 @@
0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
- 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, 0x40, 0x2e, 0xc2, 0xff, 0xff,
- 0xff, 0xff, 0x0f, 0x80, 0x04, 0x54, 0xc4, 0x38, 0xbc, 0x83, 0x3c, 0xc8,
- 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xb0, 0x43, 0x3e, 0xb4, 0x81, 0x3c, 0xbc,
- 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x03, 0x39, 0xb4, 0x01, 0x39, 0xa4,
- 0x83, 0x3d, 0xa4, 0x03, 0x39, 0x94, 0x43, 0x1b, 0xcc, 0x43, 0x3c, 0xc8,
- 0x03, 0x3d, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0,
- 0x03, 0x3a, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x10,
- 0xe4, 0x90, 0x0e, 0xf3, 0x10, 0x0e, 0xe2, 0xc0, 0x0e, 0xe5, 0xd0, 0x06,
- 0xf4, 0x10, 0x0e, 0xe9, 0xc0, 0x0e, 0x6d, 0x30, 0x0e, 0xe1, 0xc0, 0x0e,
- 0xec, 0x30, 0x0f, 0x80, 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00,
- 0x04, 0x3b, 0x94, 0xc3, 0x3c, 0xcc, 0x43, 0x1b, 0xc0, 0x83, 0x3c, 0x94,
- 0xc3, 0x38, 0xa4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4,
- 0x43, 0x38, 0x90, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10,
- 0xee, 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e,
- 0x6d, 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f,
- 0x6d, 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4,
- 0x43, 0x39, 0x00, 0x83, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84,
- 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0,
- 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4,
- 0x81, 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98,
- 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, 0x3a, 0xb8, 0x83, 0x39, 0xcc,
- 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0,
- 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e,
- 0x6d, 0xa0, 0x0e, 0xf5, 0xd0, 0x0e, 0xf0, 0xd0, 0x06, 0xf4, 0x10, 0x0e,
- 0xe2, 0xc0, 0x0e, 0xe5, 0x30, 0x0f, 0x80, 0x39, 0x84, 0x03, 0x3b, 0xcc,
- 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xb8, 0x43, 0x38, 0xb8,
- 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0,
- 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e,
- 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, 0xe0, 0x0e, 0xe5, 0x40, 0x0e,
- 0x6d, 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, 0x30, 0x0f, 0x6d, 0x60, 0x0e,
- 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80, 0x39, 0x84,
- 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0xc4, 0x3c, 0xd0, 0x43, 0x38, 0x8c,
- 0xc3, 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, 0x3b, 0xd0, 0x43, 0x39, 0x8c,
- 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98,
- 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, 0x3a, 0xe8, 0x43, 0x39, 0x00,
- 0x78, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xe5, 0x40, 0x0f,
- 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e,
- 0xf3, 0x00, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1c, 0xd8, 0x01, 0x40, 0xd4,
- 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0,
- 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f,
- 0xf5, 0x50, 0x0e, 0x00, 0x51, 0x0f, 0xf3, 0x50, 0x0e, 0x6d, 0x30, 0x0f,
- 0xef, 0x60, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e,
- 0xf4, 0x00, 0x98, 0x43, 0x38, 0xb0, 0xc3, 0x3c, 0x94, 0x03, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
+ 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
+ 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
+ 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36,
+ 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36,
+ 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77,
+ 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77,
+ 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1,
+ 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1,
+ 0x1d, 0xe0, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61,
+ 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
+ 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
+ 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x80, 0x08, 0x01, 0x90, 0x00, 0x0b, 0x50, 0x01, 0x00, 0x00, 0x00,
0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00,
0x89, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09,
0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3,
0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c,
- 0x10, 0x24, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x88, 0x10, 0x08, 0x45,
+ 0x10, 0x24, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x88, 0x10, 0x04, 0x45,
0x08, 0xa1, 0x19, 0x08, 0x98, 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18,
0x01, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
@@ -671,59 +684,63 @@
0x07, 0x43, 0x18, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x2c, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x0c,
0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xb2,
- 0x11, 0x80, 0x12, 0x28, 0x90, 0x82, 0xa0, 0x1b, 0x01, 0x00, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
- 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09,
- 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6,
- 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05,
- 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x50, 0x00,
- 0x43, 0x0c, 0x43, 0x30, 0x08, 0x23, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6,
- 0x36, 0x04, 0x29, 0x06, 0x43, 0x30, 0x04, 0x23, 0xe0, 0x16, 0x96, 0x26,
- 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6,
- 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0x28, 0x0a, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
- 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61,
- 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe2,
- 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1,
- 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95,
- 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89,
- 0xb1, 0x95, 0x0d, 0x11, 0x8a, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7, 0x32,
- 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97, 0x66,
- 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x28, 0x16, 0x46, 0x61, 0x69, 0x72,
- 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67,
- 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8,
- 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd,
- 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0x8a, 0xc6, 0x08, 0x0a, 0xa7, 0x78, 0x86,
- 0x08, 0x05, 0x44, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac,
- 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99,
- 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6,
- 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32,
- 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c, 0xc2,
- 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe,
- 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d,
- 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d,
- 0xcd, 0xa5, 0xe9, 0x95, 0x91, 0x09, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b,
- 0xfb, 0x72, 0x0b, 0x6b, 0x2b, 0xe3, 0x30, 0xf6, 0xc6, 0x36, 0x04, 0x0c,
- 0x8c, 0xa0, 0x90, 0x8a, 0xc9, 0x18, 0x0a, 0xca, 0x08, 0x0c, 0xa1, 0xa8,
- 0x0a, 0xcb, 0x18, 0x8a, 0xcb, 0x18, 0x0a, 0xa7, 0x78, 0x0a, 0xac, 0xc8,
- 0x86, 0x08, 0x85, 0x36, 0xc4, 0x20, 0x80, 0x22, 0x2a, 0x36, 0x3e, 0x6f,
- 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68,
- 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56,
- 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x85, 0x37, 0xc4, 0x28,
- 0xba, 0xe2, 0x3b, 0x8a, 0x21, 0x46, 0x01, 0x06, 0x05, 0x18, 0x1c, 0xc5,
+ 0x12, 0x18, 0x01, 0x28, 0x90, 0x42, 0x28, 0x08, 0xba, 0x11, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x86, 0x11, 0x14, 0x80, 0x41, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68,
+ 0x52, 0x86, 0x08, 0x85, 0x30, 0xc4, 0x30, 0x02, 0xa3, 0x30, 0x04, 0x16,
+ 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xa2, 0x30, 0x02, 0x23, 0x30,
+ 0x04, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe2, 0x20, 0x17, 0x96, 0x26,
+ 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36,
+ 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6,
+ 0x56, 0x36, 0x44, 0x28, 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8,
+ 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda,
+ 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0xa1, 0x58, 0x18, 0x06,
+ 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e,
+ 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+ 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa2,
+ 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7,
+ 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25,
+ 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad,
+ 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0xa4, 0x78, 0x0c,
+ 0xa1, 0x80, 0x8a, 0x68, 0x88, 0x50, 0x48, 0x54, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88,
+ 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a,
+ 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb,
+ 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57,
+ 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a,
+ 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18,
+ 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x99, 0xb0, 0x34,
+ 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x0e, 0x63,
+ 0x6f, 0x6c, 0x43, 0xc0, 0xc0, 0x10, 0x0a, 0xaa, 0xa8, 0x8c, 0xa1, 0xb0,
+ 0x0c, 0xc1, 0x08, 0x8a, 0xab, 0xc0, 0x8c, 0xa1, 0xc8, 0x8c, 0xa1, 0x80,
+ 0x8a, 0xa8, 0xd0, 0x8a, 0x6d, 0x88, 0x50, 0x70, 0x43, 0x0c, 0x02, 0x28,
+ 0xa6, 0xa2, 0xe3, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6,
+ 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e,
+ 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88,
+ 0x50, 0x80, 0xc1, 0x10, 0xa3, 0xf8, 0x8a, 0x30, 0x38, 0x8c, 0x21, 0x46,
+ 0x21, 0x06, 0x85, 0x18, 0x1c, 0xc6, 0x88, 0x88, 0x1d, 0xd8, 0xc1, 0x1e,
+ 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, 0xa1, 0x1c,
+ 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, 0x04, 0xc1,
0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c,
- 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x10, 0x8c, 0x58, 0xc2, 0x21, 0x1d,
+ 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x30, 0x8c, 0x58, 0xc2, 0x21, 0x1d,
0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d,
- 0xdc, 0x61, 0x4a, 0x20, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d,
+ 0xdc, 0x61, 0x4a, 0x40, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d,
0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c,
0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d,
- 0xa6, 0x04, 0xc4, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c,
+ 0xa6, 0x04, 0xc6, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c,
0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d,
- 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x06,
- 0xa2, 0x30, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x73, 0x90,
- 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x01,
- 0x07, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
+ 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x88,
+ 0xc2, 0x38, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x73, 0x90,
+ 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x81,
+ 0x07, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
@@ -754,16 +771,21 @@
0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
- 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82,
- 0x0c, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05,
- 0x25, 0x83, 0x80, 0x18, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x08,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x11, 0x01,
+ 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05, 0x25, 0x83, 0x80, 0x18,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x18, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x60, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
- 0x21, 0x0c, 0x00, 0x00, 0x95, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0xfc, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
@@ -771,336 +793,68 @@
0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
- 0x89, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00, 0x16, 0xa0, 0xda, 0x60,
- 0x08, 0x05, 0xb0, 0x00, 0xd5, 0x06, 0x73, 0x19, 0xfe, 0xff, 0xff, 0xff,
- 0x7f, 0x00, 0x18, 0x40, 0x02, 0x2a, 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4,
- 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xd8, 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde,
- 0xa1, 0x1e, 0xdc, 0x81, 0x1c, 0xca, 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2,
- 0xc1, 0x1e, 0xd2, 0x81, 0x1c, 0xca, 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4,
- 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8,
- 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
- 0x72, 0x48, 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x68, 0x03,
- 0x7a, 0x08, 0x87, 0x74, 0x60, 0x87, 0x36, 0x18, 0x87, 0x70, 0x60, 0x07,
- 0x76, 0x98, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
- 0x82, 0x1d, 0xca, 0x61, 0x1e, 0xe6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca,
- 0x61, 0x1c, 0xd2, 0x61, 0x1e, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda,
- 0x21, 0x1c, 0xc8, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08,
- 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87,
- 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87,
- 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea,
- 0xa1, 0x1c, 0x80, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2,
- 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8,
- 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda,
- 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc,
- 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6,
- 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0,
- 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87,
- 0x36, 0x50, 0x87, 0x7a, 0x68, 0x07, 0x78, 0x68, 0x03, 0x7a, 0x08, 0x07,
- 0x71, 0x60, 0x87, 0x72, 0x98, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6,
- 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc,
- 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8,
- 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87,
- 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70, 0x87, 0x72, 0x20, 0x87,
- 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07,
- 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2,
- 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6,
- 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6,
- 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc,
- 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00,
- 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87,
- 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87,
- 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00, 0x20, 0xea,
- 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87,
- 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36, 0x98, 0x87,
- 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07,
- 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0xd8, 0x40,
- 0x10, 0x01, 0xb0, 0x6c, 0x20, 0x0a, 0x01, 0x58, 0x36, 0x20, 0xc6, 0xff,
- 0xff, 0xff, 0xff, 0x0f, 0x00, 0x03, 0x48, 0x40, 0x05, 0x00, 0x00, 0x00,
- 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18,
- 0x26, 0x0c, 0x44, 0x61, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
- 0x1e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
- 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
- 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x48, 0x33, 0x00,
- 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x81, 0x70, 0x94,
- 0x34, 0x45, 0x94, 0x30, 0xf9, 0xff, 0x44, 0x5c, 0x13, 0x15, 0x11, 0xbf,
- 0x3d, 0xfc, 0xd3, 0x18, 0x01, 0x30, 0x88, 0x40, 0x04, 0x17, 0x49, 0x53,
- 0x44, 0x09, 0x93, 0xff, 0x4b, 0x00, 0xf3, 0x2c, 0x44, 0xf4, 0x4f, 0x63,
- 0x04, 0xc0, 0x20, 0x82, 0x21, 0x14, 0x23, 0x04, 0x31, 0xca, 0x21, 0x34,
- 0x47, 0x10, 0xcc, 0x11, 0x80, 0xc1, 0x30, 0x82, 0xb0, 0x14, 0x24, 0x94,
- 0x23, 0x14, 0x53, 0x80, 0xda, 0x40, 0xc0, 0x1c, 0x01, 0x28, 0x8c, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
- 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
- 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
- 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
- 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
- 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
- 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
- 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
- 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
- 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
- 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
- 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
- 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
- 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
- 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
- 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
- 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
- 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
- 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
- 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
- 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
- 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
- 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
- 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
- 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
- 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
- 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
- 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x43, 0x98, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
- 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16,
- 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
- 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x5a,
- 0x25, 0x30, 0x02, 0x50, 0x20, 0x05, 0x51, 0x04, 0x65, 0x50, 0x08, 0x04,
- 0x47, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0xf0, 0x00, 0x43, 0x8c, 0x45, 0x58, 0x8a, 0x65, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0x79, 0x86, 0x45, 0x58, 0x84, 0x65,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x84, 0xe7, 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x9e, 0x84, 0x61, 0x10,
- 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2,
- 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56,
- 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78, 0x16,
- 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2,
- 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca,
- 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0x9e, 0x66, 0x19,
- 0x1e, 0xe7, 0x79, 0x86, 0x08, 0x0f, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05,
- 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c,
- 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17,
- 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34,
- 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc,
- 0x86, 0x40, 0xcb, 0xf0, 0x48, 0xcf, 0xf4, 0x50, 0x8f, 0xf3, 0x3c, 0x4f,
- 0xf5, 0x58, 0x94, 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda,
- 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d, 0x95,
- 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95, 0xe1,
- 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5, 0xf0,
- 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3,
- 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43, 0x84,
- 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0xb4, 0x08, 0x0f,
- 0xf6, 0x64, 0xcf, 0xf4, 0x68, 0x8f, 0xf3, 0x6c, 0x4f, 0xf5, 0x70, 0x54,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84,
- 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5,
- 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3,
- 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96,
- 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25,
- 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf,
- 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e,
- 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e,
- 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60, 0xb0, 0x18, 0x8f, 0xf7, 0x7c,
- 0x0b, 0xf1, 0x80, 0xc1, 0x32, 0x2c, 0xc2, 0x13, 0x06, 0x8f, 0x18, 0x2c,
- 0xc4, 0x33, 0x06, 0x0b, 0xf1, 0x38, 0xcf, 0xf3, 0x54, 0x0f, 0x19, 0x70,
- 0x09, 0x4b, 0x93, 0x73, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xa3,
- 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x46, 0x8c,
- 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0x8c, 0xc7, 0x8c, 0xed,
- 0x2d, 0x8c, 0x8e, 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87,
- 0x03, 0x5d, 0x19, 0xde, 0x10, 0x6a, 0x39, 0x1e, 0x33, 0x78, 0xc0, 0x60,
- 0x19, 0x16, 0xe1, 0x39, 0x83, 0xc7, 0x79, 0xd0, 0xe0, 0xa9, 0x9e, 0x34,
- 0xe0, 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26,
- 0xc7, 0x63, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10,
- 0x69, 0x41, 0x9e, 0x35, 0x78, 0xc0, 0x60, 0x19, 0x16, 0xe1, 0x71, 0x1e,
- 0x36, 0x78, 0xaa, 0xa7, 0x0d, 0x86, 0x28, 0xcf, 0xf5, 0x74, 0x4f, 0x19,
- 0x3c, 0x6a, 0xf0, 0xb8, 0xc1, 0x10, 0x23, 0x01, 0x9e, 0xe8, 0x79, 0x03,
- 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20,
- 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40,
- 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x8f, 0x1c,
- 0x0c, 0x31, 0x9e, 0x38, 0x78, 0xe6, 0x00, 0x4a, 0x86, 0x18, 0x0f, 0x1d,
- 0x3c, 0x74, 0x00, 0x25, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07,
- 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x41, 0x30,
- 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87,
- 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x81, 0x30, 0x82, 0x0a, 0x87,
- 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87,
- 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87,
- 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x10, 0x23, 0xa6, 0x70, 0x48, 0x07,
- 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87,
- 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87,
- 0x79, 0x98, 0x42, 0x18, 0x88, 0xc2, 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4,
- 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc,
- 0x81, 0x1e, 0xa6, 0x04, 0x70, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
- 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
- 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
- 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
- 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
- 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
- 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
- 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
- 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
- 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
- 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
- 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
- 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
- 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
- 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
- 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
- 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
- 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
- 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
- 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
- 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
- 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83,
- 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87,
- 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90,
- 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20,
- 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc,
- 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
- 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
- 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
- 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00,
- 0x71, 0x20, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d,
- 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16,
- 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7,
- 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
- 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc4, 0x46, 0x00, 0x48,
- 0xd5, 0xc0, 0x08, 0x00, 0x81, 0x11, 0x00, 0x00, 0x23, 0x06, 0x8a, 0x10,
- 0x48, 0x46, 0x81, 0x0c, 0x84, 0x10, 0x10, 0x52, 0x2c, 0x10, 0xe4, 0x93,
- 0x41, 0x40, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xa8,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x6c, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
- 0x21, 0x0c, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
- 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
- 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
- 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
- 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
- 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
- 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
- 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00, 0x16, 0xa0, 0xda, 0x60,
- 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38, 0x80, 0x05, 0xa8, 0x36,
- 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0x00, 0x12, 0x31,
- 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xec, 0x90,
- 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee, 0x40, 0x0e, 0xe5, 0x40,
- 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xd0,
- 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80, 0x39, 0x84, 0x03, 0x3b,
- 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3, 0x3c, 0x84, 0x83, 0x38,
- 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43, 0x3a, 0xb0, 0x43, 0x1b,
- 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0,
- 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xd0,
- 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9, 0x30, 0x0f, 0xe5, 0xd0,
- 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4, 0x00, 0xd0, 0x83, 0x3c,
- 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c,
- 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b,
- 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0xe0, 0x0e, 0xef, 0xd0,
- 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0,
- 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0,
- 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef, 0xe0, 0x0e, 0x6d, 0xc0,
- 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90,
- 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0,
- 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39,
- 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43, 0x3d, 0xb4, 0x03, 0x3c,
- 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xcc, 0x03, 0x60,
- 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0,
- 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d,
- 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39,
- 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b,
- 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d,
- 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0x31,
- 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0,
- 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20,
- 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90,
- 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c,
- 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43, 0x39, 0x84, 0x03, 0x3d,
- 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d, 0x60, 0x0e, 0xf0, 0x10,
- 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50,
- 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80,
- 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xd4, 0xc3, 0x3c,
- 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03, 0x3d, 0xb4, 0x81, 0x39,
- 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30,
- 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07,
- 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xd8,
- 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e, 0xdc, 0x81, 0x1c, 0xca,
- 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e, 0xd2, 0x81, 0x1c, 0xca,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07,
- 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08, 0x87, 0x74, 0x60, 0x87,
- 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98, 0x07, 0xc0, 0x1c, 0xc2,
- 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d, 0xca, 0x61, 0x1e, 0xe6,
- 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c, 0xd2, 0x61, 0x1e, 0xca,
- 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c, 0xc8, 0x01, 0xa0, 0x07,
- 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07,
- 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07,
- 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87,
- 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0xc1, 0x1d, 0xde,
- 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0,
- 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca,
- 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda,
- 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda,
- 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda,
- 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87,
- 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87,
+ 0x93, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda,
- 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87,
- 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07,
- 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87,
- 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0,
- 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda,
- 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6,
- 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0, 0x03, 0x80, 0xa8, 0x07,
- 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87,
- 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea,
- 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde,
- 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8,
- 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x60, 0x03, 0x61,
- 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9, 0x80, 0x20, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, 0x22, 0xf9, 0xff,
- 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, 0x31,
- 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
- 0x31, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
- 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
- 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x78, 0x33, 0x00,
- 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x81, 0x30, 0x8c,
- 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47,
- 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28,
- 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e,
- 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x08, 0x4e, 0x93, 0xa6,
- 0x88, 0x12, 0x26, 0xff, 0x9f, 0x88, 0x6b, 0xa2, 0x22, 0xe2, 0xb7, 0x87,
- 0x1f, 0x88, 0x22, 0x00, 0xfb, 0xa7, 0x31, 0x02, 0x60, 0x10, 0x21, 0x09,
- 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59, 0x88,
- 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84, 0x45, 0x28, 0x48, 0x08, 0x62,
- 0x18, 0xa4, 0x18, 0xb5, 0x32, 0x00, 0x42, 0xe8, 0xcd, 0x11, 0x80, 0xc1,
- 0x1c, 0x41, 0x30, 0x8c, 0x20, 0x44, 0x25, 0x09, 0x8a, 0x89, 0x28, 0xa7,
- 0x04, 0x44, 0x0b, 0x12, 0x10, 0x13, 0x72, 0x4a, 0x40, 0x76, 0x20, 0x60,
- 0x18, 0x61, 0x88, 0x86, 0x11, 0x88, 0x68, 0x8e, 0x00, 0x14, 0x06, 0x11,
- 0x08, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x63, 0x20, 0x80, 0x05, 0xa8, 0x36, 0x18, 0x44, 0x01,
+ 0x2c, 0x40, 0xb5, 0x01, 0x29, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x18,
+ 0x40, 0x02, 0xaa, 0x0d, 0x86, 0x11, 0x00, 0x0b, 0x50, 0x6d, 0x30, 0x0e,
+ 0x01, 0x58, 0x80, 0x0a, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, 0x1c, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
+ 0x10, 0x48, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
+ 0x08, 0x41, 0x70, 0x94, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xff, 0x44, 0x5c,
+ 0x13, 0x15, 0x11, 0xbf, 0x3d, 0xfc, 0xd3, 0x18, 0x01, 0x30, 0x88, 0x40,
+ 0x04, 0x17, 0x49, 0x53, 0x44, 0x09, 0x93, 0xff, 0x4b, 0x00, 0xf3, 0x2c,
+ 0x44, 0xf4, 0x4f, 0x63, 0x04, 0xc0, 0x20, 0x82, 0x21, 0x14, 0x23, 0x04,
+ 0x31, 0xca, 0x21, 0x34, 0x47, 0x10, 0xcc, 0x11, 0x80, 0xc1, 0x30, 0x82,
+ 0xb0, 0x14, 0x24, 0x94, 0x23, 0x14, 0x53, 0x80, 0xda, 0x40, 0xc0, 0x1c,
+ 0x01, 0x28, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48,
0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80,
0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a,
@@ -1133,108 +887,92 @@
0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6,
0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76,
- 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x07, 0x00, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x21, 0x0c, 0x04, 0x04, 0x80, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x90, 0x05, 0x02, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14,
- 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x8a,
- 0x23, 0x00, 0x25, 0x50, 0x20, 0x05, 0x18, 0x50, 0x10, 0x45, 0x50, 0x06,
- 0x05, 0x54, 0x60, 0x85, 0x50, 0x0a, 0xc5, 0x40, 0x7b, 0x04, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
- 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09,
- 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6,
- 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05,
- 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x80, 0x01,
- 0x43, 0x8c, 0xa8, 0x88, 0x90, 0x88, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6,
- 0x36, 0x04, 0xc1, 0x86, 0xa8, 0x88, 0x8a, 0x88, 0xe0, 0x16, 0x96, 0x26,
- 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6,
- 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0xc0, 0x0a, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
- 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61,
- 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xec,
- 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1,
- 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95,
- 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x95, 0xb9, 0x85, 0x89,
- 0xb1, 0x95, 0x0d, 0x11, 0xb0, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7, 0x32,
- 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97, 0x66,
- 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xc0, 0x16, 0x46, 0x61, 0x69, 0x72,
- 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67,
- 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8,
- 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd,
- 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0xb0, 0x26, 0x22, 0x30, 0x07, 0x7b, 0x86,
- 0x08, 0x18, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d,
- 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b,
- 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8,
- 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61,
- 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44,
- 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x40, 0x11, 0x81,
- 0x49, 0xd8, 0x84, 0x51, 0x98, 0x83, 0x3d, 0x58, 0x85, 0x59, 0x94, 0xc2,
- 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0xbe,
- 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85,
- 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9,
- 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93, 0x73,
- 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0xa3,
- 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43, 0x84, 0xae, 0x0c, 0x6f, 0xec,
- 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0x14, 0x15, 0x18, 0x86, 0x65, 0xd8, 0x84,
- 0x69, 0x98, 0x83, 0x6d, 0x58, 0x85, 0x71, 0x54, 0xc2, 0xd2, 0xe4, 0x5c,
- 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a,
- 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb,
- 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57,
- 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
- 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a,
- 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18,
- 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x87, 0xb1, 0x37,
- 0xb6, 0x21, 0x60, 0x10, 0x25, 0x98, 0x87, 0x7d, 0x91, 0x81, 0x81, 0x41,
- 0x44, 0x44, 0x05, 0x16, 0x06, 0x98, 0x18, 0x44, 0x06, 0x36, 0x06, 0x91,
- 0x81, 0x39, 0xd8, 0x83, 0x55, 0x18, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73,
- 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb,
- 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43,
- 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99,
- 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63,
- 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x20, 0x22, 0x22, 0x23, 0x22, 0xb0,
- 0x33, 0xc0, 0xd0, 0x20, 0x32, 0x22, 0x23, 0x22, 0xb0, 0x33, 0xc0, 0xd2,
- 0x20, 0x5a, 0x22, 0x23, 0x22, 0xb0, 0x33, 0xc0, 0xd4, 0x20, 0x62, 0x22,
- 0x23, 0x22, 0xb0, 0x33, 0xc0, 0xd6, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51,
- 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2,
- 0x21, 0x64, 0x10, 0x29, 0x98, 0x87, 0x7d, 0xd1, 0x81, 0x81, 0x41, 0x54,
- 0x44, 0x05, 0x16, 0x06, 0x98, 0x19, 0x60, 0x6c, 0x80, 0x89, 0x41, 0x74,
- 0x60, 0x63, 0x10, 0x19, 0x98, 0x83, 0xb5, 0x01, 0x56, 0x61, 0x6e, 0xc0,
- 0x25, 0x2c, 0x4d, 0xce, 0x85, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x8c,
- 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x19, 0x31,
- 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0x32, 0x19, 0x32, 0x1e, 0x33, 0xb6,
- 0xb7, 0x30, 0x3a, 0x16, 0x90, 0xb9, 0xb0, 0x36, 0x38, 0xb6, 0x32, 0x1f,
- 0x12, 0x74, 0x65, 0x78, 0x59, 0x43, 0xa8, 0xa8, 0xc1, 0xe0, 0x00, 0x03,
- 0x83, 0x88, 0x88, 0x0a, 0x2c, 0x0e, 0x30, 0x07, 0x93, 0x03, 0xac, 0xc2,
- 0xe6, 0x80, 0x1e, 0x5d, 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0x99, 0x0c, 0xd9,
- 0x57, 0x98, 0x9c, 0x5c, 0x58, 0x1e, 0x8f, 0x19, 0xdb, 0x5b, 0x18, 0x1d,
- 0x0b, 0xc8, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x0f, 0x0b, 0xba, 0x32,
- 0xbc, 0x2a, 0xab, 0x21, 0x54, 0xe4, 0x60, 0x70, 0x80, 0x81, 0x41, 0x54,
- 0x44, 0x05, 0x16, 0x07, 0x98, 0x83, 0xd5, 0x01, 0x56, 0x61, 0x76, 0xc0,
- 0x25, 0x2c, 0x4d, 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e,
- 0xc7, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x1c, 0x83, 0xb9, 0x21, 0x52,
- 0xf4, 0x60, 0x78, 0x80, 0x81, 0x41, 0x44, 0x44, 0x05, 0xe6, 0x60, 0x79,
- 0x80, 0x55, 0x98, 0x1e, 0x0c, 0x71, 0xb0, 0x0b, 0xeb, 0xb0, 0x32, 0xc0,
- 0xde, 0x00, 0xa3, 0x03, 0xec, 0x0e, 0xb0, 0x3d, 0x18, 0x62, 0x38, 0x00,
- 0x16, 0x61, 0x7c, 0xc0, 0xe7, 0xad, 0xcd, 0x2d, 0x0d, 0xee, 0x8d, 0xae,
- 0xcc, 0x8d, 0x0e, 0x64, 0x0c, 0x2d, 0x4c, 0x8e, 0xcf, 0x54, 0x5a, 0x1b,
- 0x1c, 0x5b, 0x19, 0xc8, 0xd0, 0xca, 0x0a, 0x08, 0x95, 0x50, 0x50, 0xd0,
- 0x10, 0x01, 0xfb, 0x83, 0x21, 0x06, 0xe6, 0x07, 0x18, 0x28, 0x6c, 0xd0,
- 0x10, 0x03, 0x0b, 0x05, 0x2c, 0x14, 0x36, 0x68, 0x84, 0xc2, 0x0e, 0xec,
- 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x0e, 0xf4,
- 0x30, 0x25, 0x08, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf6,
- 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x10,
- 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, 0x0e, 0xee,
- 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, 0x0f, 0xe5,
- 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62, 0xc4,
- 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, 0x0e, 0xf0,
- 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, 0x0f, 0xe9,
- 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x08, 0x03, 0x51, 0x98, 0x11, 0x4c,
- 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x39, 0xc8, 0x43, 0x38, 0x9c, 0x43,
- 0x3b, 0x94, 0x83, 0x3b, 0xd0, 0xc3, 0x94, 0xa0, 0x0f, 0x00, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x98, 0x04, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0x5a, 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x10,
+ 0x45, 0x50, 0x06, 0x04, 0x47, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xec, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0x22, 0x3c, 0xc0,
+ 0x52, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68, 0x52, 0x86, 0x08, 0x8f,
+ 0x30, 0xc4, 0x58, 0x84, 0xc5, 0x58, 0x06, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa7, 0x58, 0x84, 0x45, 0x58, 0x06, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe7, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0xe1, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa7, 0x61, 0x14, 0x96, 0x26,
+ 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77,
+ 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb,
+ 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0xe4, 0x79, 0x96, 0xe1, 0x81, 0x9e, 0x68,
+ 0x88, 0xf0, 0x48, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2,
+ 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9,
+ 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82,
+ 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13,
+ 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46,
+ 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0xb4, 0x0c,
+ 0x0f, 0xf5, 0x54, 0x8f, 0xf5, 0x40, 0x4f, 0xf4, 0x5c, 0x0f, 0x46, 0x29,
+ 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee,
+ 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c,
+ 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b,
+ 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39,
+ 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32,
+ 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6,
+ 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0x8b, 0xf0, 0x68, 0xcf, 0xf6, 0x54,
+ 0x0f, 0xf7, 0x40, 0x4f, 0xf7, 0x5c, 0x8f, 0x47, 0x25, 0x2c, 0x4d, 0xce,
+ 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5,
+ 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7,
+ 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72,
+ 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
+ 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5,
+ 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85,
+ 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b,
+ 0x63, 0x1b, 0x02, 0x06, 0xcb, 0xf1, 0x80, 0xc1, 0x13, 0x06, 0x0b, 0xf1,
+ 0x88, 0xc1, 0x32, 0x2c, 0xc2, 0x33, 0x06, 0x0f, 0x19, 0x2c, 0xc4, 0x53,
+ 0x06, 0x0b, 0xf1, 0x40, 0x4f, 0xf4, 0x5c, 0x8f, 0x19, 0x70, 0x09, 0x4b,
+ 0x93, 0x73, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xa3, 0x12, 0x96,
+ 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x46, 0x8c, 0xae, 0x0c,
+ 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0x8c, 0xc7, 0x8c, 0xed, 0x2d, 0x8c,
+ 0x8e, 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87, 0x03, 0x5d,
+ 0x19, 0xde, 0x10, 0x6a, 0x41, 0x1e, 0x34, 0x78, 0xc4, 0x60, 0x19, 0x16,
+ 0xe1, 0x49, 0x83, 0x07, 0x7a, 0xd4, 0xe0, 0xb9, 0x9e, 0x35, 0xe0, 0x12,
+ 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xc7, 0x63,
+ 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10, 0x69, 0x29,
+ 0x9e, 0x36, 0x78, 0xc4, 0x60, 0x19, 0x16, 0xe1, 0x81, 0x1e, 0x37, 0x78,
+ 0xae, 0xe7, 0x0d, 0x86, 0x28, 0x4f, 0xf6, 0x7c, 0xcf, 0x19, 0x3c, 0x6c,
+ 0xf0, 0xc0, 0xc1, 0x10, 0x23, 0x01, 0x9e, 0xe9, 0x89, 0x03, 0x3e, 0x6f,
+ 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56,
+ 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x0f, 0x1d, 0x0c, 0x31,
+ 0x9e, 0x39, 0x78, 0xea, 0x00, 0x4a, 0x86, 0x18, 0x8f, 0x1d, 0x3c, 0x76,
+ 0x00, 0x25, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
+ 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03, 0x73, 0x60,
+ 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14, 0x76, 0x60,
+ 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0,
+ 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0,
+ 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01,
+ 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70,
+ 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28,
+ 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23,
+ 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80,
+ 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48,
+ 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60,
+ 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x72, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
@@ -1265,148 +1003,102 @@
0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
- 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x26, 0x10, 0x06, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c, 0x0b, 0xf1, 0x4f,
- 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0xc3, 0x0f, 0x44, 0x11, 0x80, 0xf9,
- 0x15, 0x5e, 0xdc, 0xb6, 0x05, 0x34, 0x00, 0x12, 0xf9, 0x83, 0x33, 0xf9,
- 0xd5, 0x5d, 0xdc, 0xb6, 0x0d, 0x6c, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c,
- 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, 0x5f, 0xe1,
- 0xc5, 0x6d, 0x1b, 0x00, 0xc4, 0x76, 0xe5, 0x2f, 0xbb, 0xef, 0x5f, 0x44,
- 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
- 0x3e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
- 0x0b, 0x00, 0x00, 0x00, 0xa4, 0xe7, 0x20, 0x88, 0x22, 0xe1, 0x28, 0xcf,
- 0x31, 0x10, 0x1c, 0x37, 0xd6, 0x00, 0x04, 0x02, 0xcd, 0x11, 0x00, 0x8a,
- 0x33, 0x00, 0x24, 0x6b, 0x60, 0x04, 0x80, 0xc8, 0x0c, 0x00, 0x85, 0x19,
- 0x00, 0x02, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x37, 0x02, 0x00, 0x00,
- 0x23, 0x06, 0xca, 0x10, 0x80, 0x81, 0xc3, 0x44, 0x06, 0x52, 0x04, 0x23,
- 0x06, 0xcb, 0x10, 0x88, 0x81, 0xd3, 0x48, 0x60, 0x70, 0x24, 0x86, 0x30,
- 0x86, 0x10, 0x84, 0xc1, 0x20, 0xc3, 0x60, 0x34, 0x73, 0x0c, 0x81, 0x20,
- 0x06, 0x23, 0x06, 0xcb, 0x10, 0x98, 0x81, 0x14, 0x59, 0x63, 0xb0, 0x34,
- 0x8a, 0x31, 0x86, 0x10, 0x94, 0xc1, 0x1c, 0xc3, 0x10, 0x84, 0xc1, 0x20,
- 0x43, 0xc0, 0x4c, 0x87, 0x8d, 0xa5, 0xa0, 0xd8, 0x10, 0xc0, 0x87, 0xb8,
- 0x32, 0xc8, 0x20, 0x40, 0xd6, 0x78, 0x43, 0x17, 0x06, 0x6c, 0x70, 0xc1,
- 0x58, 0x0a, 0xca, 0x20, 0x43, 0x40, 0x69, 0x23, 0x06, 0x05, 0x11, 0xd0,
- 0x41, 0x11, 0xcc, 0x31, 0x58, 0x81, 0x1c, 0x8c, 0x37, 0x8c, 0xc1, 0x19,
- 0xb8, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x06, 0x06, 0x23,
- 0x06, 0x05, 0x11, 0xe8, 0xc1, 0x12, 0xcc, 0x31, 0x18, 0xc1, 0x1d, 0x8c,
- 0x37, 0xa4, 0x41, 0x1b, 0xcc, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c,
- 0x01, 0x18, 0x98, 0xc1, 0x88, 0x41, 0x41, 0x04, 0xa0, 0x10, 0x05, 0x73,
- 0x0c, 0x46, 0x90, 0x07, 0x73, 0x0c, 0x81, 0x18, 0xe4, 0x81, 0x05, 0x95,
- 0x7c, 0x32, 0x08, 0x88, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x5b, 0x06, 0x26, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0xf0, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x79, 0x03, 0x00, 0x00,
- 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
- 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
- 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
- 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
- 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
- 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
- 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38,
- 0x80, 0x05, 0xa8, 0x36, 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0xc0, 0x00, 0x12, 0x31, 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3,
- 0x40, 0x0f, 0xec, 0x90, 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee,
- 0x40, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9,
- 0x40, 0x0e, 0xe5, 0xd0, 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80,
- 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3,
- 0x3c, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43,
- 0x3a, 0xb0, 0x43, 0x1b, 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03,
- 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5,
- 0x30, 0x0f, 0xf3, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9,
- 0x30, 0x0f, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4,
- 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43,
- 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3,
- 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03,
- 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0,
- 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5,
- 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef,
- 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee,
- 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6,
- 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83,
- 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43,
- 0x3d, 0xb4, 0x03, 0x3c, 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43,
- 0x39, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00,
- 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00,
- 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1,
- 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43,
- 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41,
- 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3,
- 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d,
- 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef,
- 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04,
- 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43,
- 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d,
- 0x60, 0x0e, 0xf0, 0x10, 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3,
- 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed,
- 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03,
- 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03,
- 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6,
- 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff,
- 0xff, 0xff, 0xff, 0x07, 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c,
- 0xc6, 0x81, 0x1e, 0xd8, 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e,
- 0xdc, 0x81, 0x1c, 0xca, 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e,
- 0xd2, 0x81, 0x1c, 0xca, 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48,
- 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08,
- 0x87, 0x74, 0x60, 0x87, 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98,
- 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d,
- 0xca, 0x61, 0x1e, 0xe6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c,
- 0xd2, 0x61, 0x1e, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c,
- 0xc8, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78,
- 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80,
- 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28,
- 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x80, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d,
- 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c,
- 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d,
- 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20,
- 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d,
- 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0,
- 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
- 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
- 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
- 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0,
- 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0,
- 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8,
- 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0,
- 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c,
- 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e,
- 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0,
- 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68,
- 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00,
- 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c,
- 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d,
- 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
- 0x07, 0x60, 0x03, 0x61, 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9,
- 0x80, 0x20, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5,
- 0x06, 0x22, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00,
- 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18,
- 0x88, 0x09, 0x41, 0x31, 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d,
+ 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16,
+ 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7,
+ 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc4, 0x46, 0x00, 0x48,
+ 0xd5, 0xc0, 0x08, 0x00, 0x81, 0x11, 0x00, 0x00, 0x23, 0x06, 0x8a, 0x10,
+ 0x48, 0x46, 0x81, 0x0c, 0x84, 0x10, 0x10, 0x52, 0x2c, 0x10, 0xe4, 0x93,
+ 0x41, 0x40, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xb8,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x28, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0x47, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+ 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
+ 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
+ 0x98, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x64, 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41,
+ 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xe2, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x40, 0x6d, 0x40, 0x8e,
+ 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81,
+ 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0x02, 0x00,
+ 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18,
+ 0x88, 0x62, 0x42, 0x60, 0x4c, 0x18, 0x0e, 0x24, 0x01, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x68, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
- 0x08, 0x81, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
+ 0x10, 0x78, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
+ 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06,
0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8,
0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1,
- 0x08, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59,
- 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08,
- 0x62, 0x18, 0x84, 0x14, 0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04,
- 0x73, 0x04, 0x60, 0x30, 0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17,
- 0x1f, 0x20, 0x39, 0x10, 0x30, 0x8c, 0x30, 0x40, 0xc3, 0x08, 0x04, 0x34,
- 0x47, 0x00, 0x0a, 0x83, 0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x4e, 0x93, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x9f, 0x88, 0x6b, 0xa2,
+ 0x22, 0xe2, 0xb7, 0x87, 0x1f, 0x88, 0x22, 0x00, 0xfb, 0xa7, 0x31, 0x02,
+ 0x60, 0x10, 0x21, 0x09, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x97,
+ 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84, 0x45,
+ 0x28, 0x48, 0x08, 0x62, 0x18, 0xa4, 0x18, 0xb5, 0x32, 0x00, 0x42, 0xe8,
+ 0xcd, 0x11, 0x80, 0xc1, 0x1c, 0x41, 0x30, 0x8c, 0x20, 0x44, 0x25, 0x09,
+ 0x8a, 0x89, 0x28, 0xa7, 0x04, 0x44, 0x0b, 0x12, 0x10, 0x13, 0x72, 0x4a,
+ 0x40, 0x76, 0x20, 0x60, 0x18, 0x61, 0x88, 0x06, 0x11, 0x02, 0x61, 0x8e,
+ 0x00, 0x14, 0x06, 0x11, 0x08, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79,
0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e,
@@ -1439,461 +1131,724 @@
0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07,
0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07,
- 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x06,
- 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0x66, 0x02, 0x02, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x0a, 0x00, 0x00, 0x00,
+ 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x07,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0c, 0x04, 0x04,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x05, 0x02, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
- 0xc6, 0x04, 0x43, 0x82, 0x23, 0x00, 0x25, 0x50, 0x20, 0x05, 0x18, 0x50,
- 0x10, 0x45, 0x50, 0x06, 0x05, 0x54, 0x60, 0x85, 0x50, 0x0a, 0xc5, 0x40,
- 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0x40, 0x01, 0x43, 0x0c, 0x88, 0x80, 0x0e, 0x68, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0xa1, 0x06, 0x88, 0x80, 0x08, 0x68,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x04, 0xea, 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xa8, 0x84, 0x61, 0x10,
- 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2,
- 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56,
- 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x16,
- 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2,
- 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca,
- 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0xa8, 0x06, 0x1a,
- 0x28, 0x87, 0x7a, 0x86, 0x08, 0x14, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05,
- 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c,
- 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17,
- 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34,
- 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc,
- 0x86, 0x40, 0xd0, 0x40, 0x49, 0xd4, 0x44, 0x51, 0x94, 0x43, 0x3d, 0x54,
- 0x45, 0x59, 0x94, 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda,
- 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d, 0x95,
- 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95, 0xe1,
- 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5, 0xf0,
- 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3,
- 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43, 0x84,
- 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0x04, 0x11, 0x14,
- 0x46, 0x65, 0xd4, 0x44, 0x69, 0x94, 0x43, 0x6d, 0x54, 0x45, 0x71, 0x54,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84,
- 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5,
- 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3,
- 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96,
- 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25,
- 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf,
- 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e,
- 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e,
- 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60, 0x00, 0x21, 0x94, 0x47, 0x7d,
- 0x50, 0x41, 0x81, 0x01, 0x34, 0x40, 0x04, 0x15, 0x06, 0x94, 0x18, 0x40,
- 0x05, 0x35, 0x06, 0x50, 0x41, 0x39, 0xd4, 0x43, 0x55, 0x14, 0x19, 0x90,
- 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2,
- 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6,
- 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86,
- 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33,
- 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x1a,
- 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd0, 0x00, 0x2a, 0xa0, 0x02, 0x1a,
- 0xa8, 0x33, 0xa0, 0xd2, 0x00, 0x52, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0,
- 0xd4, 0x00, 0x5a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd6, 0x80, 0x49,
- 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2,
- 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x25, 0x94, 0x47, 0x7d, 0x90,
- 0x41, 0x81, 0x01, 0x44, 0x40, 0x04, 0x15, 0x06, 0x94, 0x19, 0x50, 0x6c,
- 0x40, 0x89, 0x01, 0x64, 0x50, 0x63, 0x00, 0x15, 0x94, 0x43, 0xb5, 0x01,
- 0x55, 0x51, 0x6e, 0xc0, 0x25, 0x2c, 0x4d, 0xce, 0x85, 0xae, 0x0c, 0x8f,
- 0xae, 0x4e, 0xae, 0x8c, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x5c, 0x58, 0x1b,
- 0x1c, 0x5b, 0x19, 0x31, 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0x32, 0x19,
- 0x32, 0x1e, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x16, 0x90, 0xb9, 0xb0, 0x36,
- 0x38, 0xb6, 0x32, 0x1f, 0x12, 0x74, 0x65, 0x78, 0x59, 0x43, 0x28, 0x88,
- 0xa1, 0xe0, 0x80, 0x02, 0x03, 0x68, 0x80, 0x08, 0x2a, 0x0e, 0x28, 0x87,
- 0x92, 0x03, 0xaa, 0xa2, 0xe6, 0x80, 0x05, 0x5d, 0x19, 0x5e, 0x95, 0xd5,
- 0x10, 0x0a, 0x6a, 0x28, 0x38, 0xa0, 0xc0, 0x00, 0x22, 0x20, 0x82, 0x8a,
- 0x03, 0xca, 0xa1, 0xe4, 0x80, 0xaa, 0xa8, 0x3a, 0xe0, 0x12, 0x96, 0x26,
- 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xc7, 0x63, 0x2e, 0xac,
- 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10, 0x09, 0x72, 0xa8, 0x3b,
- 0xa0, 0xc0, 0x00, 0x1a, 0x20, 0x82, 0x72, 0x28, 0x3c, 0xa0, 0x2a, 0x2a,
- 0x0f, 0x86, 0x38, 0xd4, 0x45, 0x75, 0x54, 0x19, 0x50, 0x6f, 0x40, 0xd1,
- 0x01, 0x65, 0x07, 0x94, 0x1e, 0x0c, 0x31, 0x18, 0x80, 0x8a, 0xa8, 0x3d,
- 0xe0, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6, 0x46, 0x07,
- 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e, 0xad, 0x0c,
- 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88, 0x40, 0xf9,
- 0xc1, 0x10, 0x83, 0xea, 0x03, 0xea, 0x0f, 0xae, 0x67, 0x88, 0x41, 0x81,
- 0x02, 0x05, 0x0a, 0xd7, 0x33, 0x42, 0x61, 0x07, 0x76, 0xb0, 0x87, 0x76,
- 0x70, 0x83, 0x74, 0x20, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0x04,
- 0x23, 0x96, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79,
- 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x08, 0x23, 0xa8, 0x70,
- 0x48, 0x07, 0x79, 0x70, 0x03, 0x76, 0x08, 0x07, 0x77, 0x38, 0x87, 0x7a,
- 0x08, 0x87, 0x73, 0x28, 0x87, 0x5f, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79,
- 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01, 0x31, 0x62, 0x0a, 0x87, 0x74,
- 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76,
- 0x28, 0x87, 0x5f, 0x78, 0x07, 0x78, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77,
- 0x98, 0x87, 0x29, 0x84, 0x81, 0x28, 0xcc, 0x08, 0x26, 0x1c, 0xd2, 0x41,
- 0x1e, 0xdc, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xce, 0xa1, 0x1d, 0xca, 0xc1,
- 0x1d, 0xe8, 0x61, 0x4a, 0xc0, 0x07, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
- 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
- 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
- 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
- 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
- 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
- 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
- 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
- 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
- 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
- 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
- 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
- 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
- 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
- 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
- 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
- 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
- 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
- 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
- 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
- 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
- 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83,
- 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87,
- 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90,
- 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20,
- 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc,
- 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
- 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
- 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
- 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00,
+ 0xc6, 0x04, 0x43, 0x8a, 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80,
+ 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40,
+ 0x7b, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00,
+ 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9,
+ 0x34, 0xbd, 0xb2, 0x21, 0x46, 0x44, 0x60, 0x40, 0x74, 0x50, 0x0d, 0x82,
+ 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca,
+ 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40,
+ 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64,
+ 0x5c, 0x66, 0x5c, 0x68, 0x52, 0x86, 0x08, 0x98, 0x30, 0xc4, 0x88, 0x88,
+ 0x28, 0x89, 0x0a, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10, 0xac,
+ 0x88, 0x88, 0x88, 0x88, 0x0a, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xec,
+ 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
+ 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55,
+ 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xc0, 0x12, 0x92, 0x41, 0x58,
+ 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99,
+ 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59,
+ 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10,
+ 0x01, 0x5b, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70,
+ 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64,
+ 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x04, 0xac, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6,
+ 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28,
+ 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec,
+ 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd,
+ 0x10, 0x04, 0x7b, 0xa2, 0x02, 0x83, 0xb0, 0x68, 0x88, 0x80, 0x49, 0x64,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc,
+ 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51,
+ 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83,
+ 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12,
+ 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e,
+ 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x14, 0x15, 0x18, 0x85, 0x55, 0x98,
+ 0x85, 0x41, 0x58, 0x84, 0x5d, 0x18, 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5,
+ 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae,
+ 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19,
+ 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d,
+ 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9,
+ 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f,
+ 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8,
+ 0x86, 0x48, 0x11, 0x81, 0x69, 0xd8, 0x86, 0x55, 0x18, 0x87, 0x41, 0x58,
+ 0x87, 0x5d, 0x98, 0x47, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc,
+ 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17,
+ 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2,
+ 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca,
+ 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9,
+ 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9,
+ 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06,
+ 0x91, 0x82, 0x81, 0x01, 0x16, 0x06, 0x91, 0x81, 0x89, 0x41, 0x54, 0x44,
+ 0x04, 0x36, 0x06, 0x18, 0x19, 0x44, 0x06, 0x56, 0x06, 0x91, 0x81, 0x41,
+ 0x58, 0x84, 0x5d, 0x98, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3,
+ 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73,
+ 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd,
+ 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19,
+ 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65,
+ 0x66, 0x66, 0x43, 0xd0, 0x20, 0x2a, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0,
+ 0xd4, 0x20, 0x32, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd6, 0x20, 0x62,
+ 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd8, 0x20, 0x6a, 0x22, 0x23, 0x2a,
+ 0xb0, 0x34, 0xc0, 0xda, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8,
+ 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64,
+ 0x10, 0x2d, 0x18, 0x18, 0x60, 0x61, 0x10, 0x21, 0x98, 0x18, 0x44, 0x44,
+ 0x44, 0x60, 0x63, 0x80, 0xa1, 0x01, 0xe6, 0x06, 0x18, 0x19, 0x44, 0x08,
+ 0x56, 0x06, 0x91, 0x81, 0x41, 0xd8, 0x1b, 0x60, 0x17, 0x06, 0x07, 0x5c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8,
+ 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3,
+ 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b,
+ 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21,
+ 0x41, 0x57, 0x86, 0x97, 0x35, 0x84, 0x8a, 0x0e, 0x4c, 0x0e, 0x30, 0x31,
+ 0x88, 0x8a, 0x88, 0xc0, 0xe6, 0x00, 0x83, 0x30, 0x3a, 0xc0, 0x2e, 0xac,
+ 0x0e, 0xe8, 0xd1, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xc9, 0x90, 0x7d,
+ 0x85, 0xc9, 0xc9, 0x85, 0xe5, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xb1,
+ 0x80, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xf9, 0xb0, 0xa0, 0x2b, 0xc3,
+ 0xab, 0xb2, 0x1a, 0x42, 0x45, 0x0e, 0x26, 0x07, 0x98, 0x18, 0x44, 0x44,
+ 0x44, 0x60, 0x73, 0x80, 0x41, 0xd8, 0x1d, 0x60, 0x17, 0x86, 0x07, 0x5c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78,
+ 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x45,
+ 0x0f, 0xa6, 0x07, 0x98, 0x18, 0x44, 0x45, 0x44, 0x60, 0x10, 0xb6, 0x07,
+ 0xd8, 0x85, 0xf1, 0xc1, 0x10, 0x07, 0xcb, 0xb0, 0x0f, 0x3b, 0x03, 0x2c,
+ 0x0e, 0x30, 0x3b, 0xc0, 0xf2, 0x00, 0xeb, 0x83, 0x21, 0x86, 0x03, 0x60,
+ 0x13, 0xe6, 0x07, 0x7c, 0xde, 0xda, 0xdc, 0xd2, 0xe0, 0xde, 0xe8, 0xca,
+ 0xdc, 0xe8, 0x40, 0xc6, 0xd0, 0xc2, 0xe4, 0xf8, 0x4c, 0xa5, 0xb5, 0xc1,
+ 0xb1, 0x95, 0x81, 0x0c, 0xad, 0xac, 0x80, 0x50, 0x09, 0x05, 0x05, 0x0d,
+ 0x11, 0xb0, 0x50, 0x18, 0x62, 0x60, 0xa0, 0x80, 0x89, 0xc2, 0x06, 0x0d,
+ 0x31, 0xb0, 0x51, 0xc0, 0x46, 0x61, 0x83, 0x46, 0x44, 0xec, 0xc0, 0x0e,
+ 0xf6, 0xd0, 0x0e, 0x6e, 0xd0, 0x0e, 0xef, 0x40, 0x0e, 0xf5, 0xc0, 0x0e,
+ 0xe5, 0xe0, 0x06, 0xe6, 0xc0, 0x0e, 0xe1, 0x70, 0x0e, 0xf3, 0x30, 0x25,
+ 0x08, 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e,
+ 0xe4, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x61, 0xc4, 0x12, 0x0e,
+ 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e,
+ 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f,
+ 0x6e, 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e,
+ 0xe5, 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e,
+ 0xee, 0x30, 0x25, 0x30, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06,
+ 0xe3, 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b,
+ 0xef, 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x85,
+ 0x40, 0x14, 0xc6, 0x19, 0xc1, 0x84, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x98,
+ 0x83, 0x3c, 0x84, 0xc3, 0x39, 0xb4, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x4c,
+ 0x09, 0xfe, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x26, 0x10, 0x06, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c, 0x0b, 0xf1, 0x4f,
+ 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0xc3, 0x0f, 0x44, 0x11, 0x80, 0xf9,
+ 0x15, 0x5e, 0xdc, 0xb6, 0x05, 0x34, 0x00, 0x12, 0xf9, 0x83, 0x33, 0xf9,
+ 0xd5, 0x5d, 0xdc, 0xb6, 0x0d, 0x6c, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c,
+ 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, 0x5f, 0xe1,
+ 0xc5, 0x6d, 0x1b, 0x00, 0xc4, 0x76, 0xe5, 0x2f, 0xbb, 0xef, 0x5f, 0x44,
+ 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x3b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x0b, 0x00, 0x00, 0x00, 0x94, 0xe7, 0x18, 0x8a, 0xae, 0x1b, 0x6b, 0x00,
+ 0x02, 0x81, 0xe6, 0x08, 0x00, 0xc9, 0x11, 0x80, 0x1a, 0xa0, 0x38, 0x03,
+ 0x40, 0x61, 0x0e, 0x22, 0x0c, 0xc2, 0x20, 0x0c, 0xc0, 0x60, 0x06, 0x80,
+ 0xc0, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xcd, 0x00, 0x8c, 0x00, 0x00,
+ 0x23, 0x06, 0xca, 0x10, 0x80, 0x81, 0xc3, 0x44, 0x47, 0x82, 0x04, 0x83,
+ 0x0c, 0x41, 0xc1, 0x8c, 0x18, 0x2c, 0x43, 0x30, 0x06, 0x8f, 0x33, 0x81,
+ 0x41, 0xb2, 0x28, 0xc3, 0x18, 0x42, 0x10, 0x06, 0x73, 0x0c, 0x43, 0x30,
+ 0x06, 0x23, 0x06, 0xcb, 0x10, 0x98, 0x81, 0x14, 0x59, 0x64, 0xc0, 0x38,
+ 0x8d, 0x31, 0x86, 0x10, 0x90, 0xc1, 0x1c, 0xc3, 0x10, 0x80, 0xc1, 0x5d,
+ 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x43, 0x19, 0x11, 0xc0, 0x87, 0xb8,
+ 0x32, 0xde, 0xc0, 0x81, 0x01, 0x1b, 0x5c, 0xa0, 0x97, 0x82, 0x32, 0xc8,
+ 0x10, 0x50, 0xda, 0x88, 0x41, 0x21, 0x04, 0x73, 0x60, 0x04, 0xe3, 0x0d,
+ 0x61, 0x50, 0x06, 0x6b, 0x70, 0x81, 0x5e, 0x0a, 0xca, 0x20, 0x43, 0x90,
+ 0x7d, 0x23, 0x06, 0x85, 0x10, 0xe0, 0xc1, 0x12, 0x8c, 0x37, 0x98, 0x81,
+ 0x1a, 0xbc, 0xc1, 0x05, 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x47, 0x06,
+ 0x23, 0x06, 0x85, 0x10, 0xf4, 0x01, 0x14, 0xcc, 0x31, 0x84, 0xc1, 0xa2,
+ 0x07, 0x73, 0x0c, 0xc1, 0xc1, 0x07, 0x73, 0x0c, 0xc1, 0x70, 0x07, 0x16,
+ 0x4c, 0xf2, 0xc9, 0x20, 0x20, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x5b, 0x06, 0x26, 0x20, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+ 0x2b, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+ 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
+ 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00,
+ 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09,
+ 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a,
+ 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72,
+ 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72,
+ 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21,
+ 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81,
+ 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73,
+ 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79,
+ 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79,
+ 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0xc0,
+ 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1,
+ 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1,
+ 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81,
+ 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72,
+ 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79,
+ 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87, 0x36, 0x70, 0x87, 0x77,
+ 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07, 0x73, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd4, 0xa1,
+ 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1,
+ 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36,
+ 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80,
+ 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60,
+ 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0,
+ 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72,
+ 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78,
+ 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a,
+ 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81,
+ 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81,
+ 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1,
+ 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41,
+ 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73,
+ 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a,
+ 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0,
+ 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1,
+ 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01,
+ 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x7a, 0x98, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x76,
+ 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1,
+ 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0, 0x00, 0xd5, 0x06, 0x64,
+ 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41, 0x14, 0xc0, 0x02, 0x54,
+ 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x18, 0x07, 0xb0, 0x00,
+ 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a,
+ 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04, 0x54,
+ 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0, 0x00,
+ 0x15, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10, 0x1c, 0x13, 0x06, 0x24,
+ 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+ 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+ 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30,
+ 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49,
+ 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20,
+ 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61,
+ 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31,
+ 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff,
+ 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84,
+ 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14, 0xad, 0x32, 0x00, 0x42,
+ 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30, 0x8c, 0x20, 0x40, 0x05,
+ 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10, 0x30, 0x8c, 0x30, 0x40,
+ 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83, 0x08, 0x84, 0x30, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
+ 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
+ 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
+ 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
+ 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
+ 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
+ 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
+ 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
+ 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x43, 0x18, 0x06, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10,
+ 0x66, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04,
+ 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
+ 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82, 0x25, 0x30, 0x02, 0x50,
+ 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05,
+ 0x56, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x19, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x06, 0x34, 0x50, 0x00,
+ 0x64, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68, 0x52, 0x86, 0x08, 0x94,
+ 0x30, 0xc4, 0x80, 0x06, 0x08, 0x81, 0x08, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x10, 0xaa, 0x80, 0x06, 0x68, 0x80, 0x08, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x04, 0xea, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa, 0x61, 0x14, 0x96, 0x26,
+ 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77,
+ 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb,
+ 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20, 0x82, 0x82, 0xa8, 0x68,
+ 0x88, 0x40, 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2,
+ 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9,
+ 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82,
+ 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13,
+ 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46,
+ 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x04, 0x11,
+ 0x14, 0x45, 0x55, 0x94, 0x45, 0x41, 0x54, 0x44, 0x5d, 0x14, 0x46, 0x29,
+ 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee,
+ 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c,
+ 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b,
+ 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39,
+ 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32,
+ 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6,
+ 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40, 0x69, 0xd4, 0x46, 0x55,
+ 0x14, 0x47, 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47, 0x25, 0x2c, 0x4d, 0xce,
+ 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5,
+ 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7,
+ 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72,
+ 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
+ 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5,
+ 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85,
+ 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b,
+ 0x63, 0x1b, 0x02, 0x06, 0x50, 0x42, 0x81, 0x01, 0x15, 0x06, 0x50, 0x41,
+ 0x89, 0x01, 0x44, 0x40, 0x03, 0x35, 0x06, 0x14, 0x19, 0x40, 0x05, 0x55,
+ 0x06, 0x50, 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94, 0x19, 0x90, 0x0a, 0x4b,
+ 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83,
+ 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46,
+ 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8,
+ 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a,
+ 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x22, 0xa0, 0x02,
+ 0x22, 0xa8, 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0, 0x02, 0x22, 0xa8, 0x34,
+ 0xa0, 0xd6, 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd8, 0x00,
+ 0x62, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda, 0x80, 0x49, 0x56, 0x95,
+ 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37,
+ 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x29, 0x14, 0x18, 0x50, 0x61, 0x00, 0x1d,
+ 0x94, 0x18, 0x40, 0x03, 0x34, 0x50, 0x63, 0x40, 0xa1, 0x01, 0xe5, 0x06,
+ 0x14, 0x19, 0x40, 0x07, 0x55, 0x06, 0x50, 0x41, 0x41, 0xd4, 0x1b, 0x50,
+ 0x17, 0x05, 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8,
+ 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1,
+ 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21,
+ 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83,
+ 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97, 0x35, 0x84, 0x82, 0x0c,
+ 0x4a, 0x0e, 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0, 0xe6, 0x80, 0x82, 0x28,
+ 0x3a, 0xa0, 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95, 0xe1, 0x55, 0x59, 0x0d,
+ 0xa1, 0xa0, 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0, 0x01, 0x1a, 0xa8, 0x39,
+ 0xa0, 0x20, 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03, 0x2e, 0x61, 0x69, 0x72,
+ 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6, 0xc2, 0xda,
+ 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0x20, 0x87, 0xca, 0x03,
+ 0x4a, 0x0c, 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2, 0x03, 0xea, 0xa2, 0xf6,
+ 0x60, 0x88, 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01, 0x15, 0x07, 0x94, 0x1d,
+ 0x50, 0x78, 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01, 0xa8, 0x89, 0xea, 0x03,
+ 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40,
+ 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x14, 0x28,
+ 0x0c, 0x31, 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a, 0x86, 0x18, 0x94, 0x28,
+ 0x50, 0xa2, 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07,
+ 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03,
+ 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14,
+ 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07,
+ 0x77, 0xa0, 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07,
+ 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87,
+ 0x29, 0x01, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87,
+ 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05,
+ 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12,
+ 0x18, 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87,
+ 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07,
+ 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3,
+ 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2,
+ 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x7e, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+ 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+ 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+ 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+ 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+ 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+ 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+ 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+ 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+ 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+ 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+ 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+ 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+ 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+ 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+ 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+ 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+ 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+ 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+ 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+ 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+ 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
+ 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
+ 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
+ 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
+ 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
+ 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
+ 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
+ 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0xd0, 0x00, 0x48,
0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb, 0x26, 0xb0, 0x01, 0x48,
0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4,
0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00, 0x11, 0xdb, 0x95, 0xff,
0xf9, 0xd6, 0xf6, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
- 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x64, 0xe7, 0x20, 0x06,
- 0x02, 0xe9, 0xa8, 0x8e, 0x35, 0x00, 0x03, 0x31, 0xc7, 0x30, 0x10, 0xdd,
- 0x1c, 0xc3, 0xd0, 0x75, 0xf4, 0x6a, 0x60, 0x04, 0x80, 0xe0, 0x0c, 0x00,
- 0xc5, 0x11, 0x00, 0xaa, 0x63, 0x0d, 0x40, 0x20, 0x10, 0x99, 0x01, 0xa0,
- 0x30, 0x03, 0x40, 0x60, 0x8c, 0x00, 0x04, 0x41, 0x10, 0xff, 0x46, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x54, 0xc7, 0x1a, 0x80,
+ 0x81, 0x98, 0x63, 0x20, 0x06, 0x6f, 0x8e, 0x81, 0xf0, 0xbc, 0xb1, 0x06,
+ 0x20, 0x10, 0x28, 0x8e, 0x00, 0xd0, 0xab, 0x81, 0x11, 0x00, 0x82, 0x33,
+ 0x00, 0x14, 0xe6, 0x20, 0xc6, 0x60, 0x0c, 0xc6, 0x20, 0x0c, 0x66, 0x00,
+ 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x08, 0xc0, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10, 0x88, 0x01, 0xe4, 0x4c,
- 0x89, 0x81, 0x04, 0x23, 0x06, 0xca, 0x10, 0x8c, 0x01, 0xf4, 0x50, 0xca,
- 0x91, 0x08, 0x83, 0x0c, 0x42, 0xc1, 0x0c, 0x32, 0x08, 0x86, 0x33, 0xc8,
- 0x20, 0x04, 0xd0, 0x20, 0x43, 0x90, 0x48, 0x77, 0x8d, 0xa5, 0xa0, 0xd8,
- 0x10, 0xc0, 0x87, 0xb6, 0x32, 0xc8, 0x20, 0x34, 0xcf, 0x78, 0x03, 0x07,
- 0x06, 0x6b, 0x70, 0xc1, 0x58, 0x0a, 0xca, 0x20, 0x43, 0x10, 0x4d, 0x23,
- 0x06, 0x05, 0x11, 0xc8, 0x41, 0x11, 0xcc, 0x31, 0x4c, 0x41, 0x1c, 0x8c,
- 0x37, 0x88, 0x81, 0x19, 0xb4, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c,
- 0xc1, 0x95, 0x8d, 0x18, 0x14, 0x44, 0x80, 0x07, 0x4b, 0x30, 0xc7, 0x60,
- 0x04, 0x76, 0x30, 0xde, 0x80, 0x06, 0x6c, 0x20, 0x07, 0x17, 0x8c, 0xa5,
- 0xa0, 0x0c, 0x32, 0x04, 0xdd, 0x37, 0x62, 0x50, 0x10, 0x81, 0x1f, 0x44,
- 0xc1, 0x1c, 0x83, 0x11, 0xe0, 0xc1, 0x1c, 0x43, 0xf0, 0xe1, 0x81, 0x05,
- 0x95, 0x7c, 0x32, 0x08, 0x88, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x5b, 0x86, 0x24, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x72, 0x08, 0x83, 0x0c, 0x41, 0xc1, 0x8c, 0x18, 0x28, 0x43, 0x40,
+ 0x06, 0x11, 0x54, 0x29, 0x4b, 0x42, 0x0c, 0x32, 0x04, 0xc7, 0x33, 0xc8,
+ 0x30, 0x04, 0xd1, 0x59, 0x76, 0x29, 0x28, 0x83, 0x0c, 0xc1, 0x12, 0x19,
+ 0x11, 0xc0, 0x87, 0xb6, 0x32, 0xde, 0xb0, 0x7d, 0x6b, 0x70, 0x81, 0x5d,
+ 0x0a, 0xca, 0x20, 0x43, 0x10, 0x5d, 0x23, 0x06, 0x85, 0x10, 0xc4, 0x81,
+ 0x11, 0x8c, 0x37, 0x80, 0x01, 0x19, 0xa8, 0xc1, 0x05, 0x76, 0x29, 0x28,
+ 0x83, 0x0c, 0x81, 0xc5, 0x8d, 0x18, 0x14, 0x42, 0x60, 0x07, 0x4b, 0x30,
+ 0xde, 0x50, 0x06, 0x69, 0xe0, 0x06, 0x17, 0xd8, 0xa5, 0xa0, 0x0c, 0x32,
+ 0x04, 0x5b, 0x18, 0x8c, 0x18, 0x14, 0x42, 0xb0, 0x07, 0x50, 0x30, 0xc7,
+ 0xe0, 0x2d, 0x79, 0x30, 0xc7, 0x10, 0x1c, 0x7b, 0x30, 0xc7, 0x10, 0x0c,
+ 0x76, 0x60, 0xc1, 0x24, 0x9f, 0x0c, 0x02, 0x62, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0x18, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x7b, 0x03, 0x00, 0x00,
- 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
- 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
- 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
- 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
- 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
- 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
- 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38,
- 0x80, 0x05, 0xa8, 0x36, 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0xc0, 0x00, 0x12, 0x31, 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3,
- 0x40, 0x0f, 0xec, 0x90, 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee,
- 0x40, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9,
- 0x40, 0x0e, 0xe5, 0xd0, 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80,
- 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3,
- 0x3c, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43,
- 0x3a, 0xb0, 0x43, 0x1b, 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03,
- 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5,
- 0x30, 0x0f, 0xf3, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9,
- 0x30, 0x0f, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4,
- 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43,
- 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3,
- 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03,
- 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0,
- 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5,
- 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef,
- 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee,
- 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6,
- 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83,
- 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43,
- 0x3d, 0xb4, 0x03, 0x3c, 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43,
- 0x39, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00,
- 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00,
- 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1,
- 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43,
- 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41,
- 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3,
- 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d,
- 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef,
- 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04,
- 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43,
- 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d,
- 0x60, 0x0e, 0xf0, 0x10, 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3,
- 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed,
- 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03,
- 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03,
- 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6,
- 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff,
- 0xff, 0xff, 0xff, 0x07, 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c,
- 0xc6, 0x81, 0x1e, 0xd8, 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e,
- 0xdc, 0x81, 0x1c, 0xca, 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e,
- 0xd2, 0x81, 0x1c, 0xca, 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48,
- 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08,
- 0x87, 0x74, 0x60, 0x87, 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98,
- 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d,
- 0xca, 0x61, 0x1e, 0xe6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c,
- 0xd2, 0x61, 0x1e, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c,
- 0xc8, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78,
- 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80,
- 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28,
- 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x80, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d,
- 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c,
- 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d,
- 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20,
- 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d,
- 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0,
- 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
- 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
- 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
- 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0,
- 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0,
- 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8,
- 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0,
- 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c,
- 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e,
- 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0,
- 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68,
- 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00,
- 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c,
- 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d,
- 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
- 0x07, 0x60, 0x03, 0x61, 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9,
- 0x80, 0x20, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5,
- 0x06, 0x22, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00,
- 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18,
- 0x88, 0x09, 0x41, 0x31, 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
- 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
- 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x68, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
- 0x08, 0x81, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
- 0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06,
- 0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8,
- 0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1,
- 0x08, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59,
- 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08,
- 0x62, 0x18, 0x84, 0x14, 0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04,
- 0x73, 0x04, 0x60, 0x30, 0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17,
- 0x1f, 0x20, 0x39, 0x10, 0x30, 0x8c, 0x30, 0x40, 0xc3, 0x08, 0x04, 0x34,
- 0x47, 0x00, 0x0a, 0x83, 0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
- 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79,
- 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e,
- 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
- 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07,
- 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07,
- 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07,
- 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07,
- 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07,
- 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06,
- 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
- 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
- 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07,
- 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06,
- 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07,
- 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07,
- 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07,
- 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07,
- 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06,
- 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
- 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07,
- 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07,
- 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
- 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07,
- 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06,
- 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07,
- 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07,
- 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07,
- 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07,
- 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
- 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07,
- 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07,
- 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x06,
- 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0x66, 0x02, 0x02, 0x60,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x0a, 0x00, 0x00, 0x00,
- 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
- 0xc6, 0x04, 0x43, 0x82, 0x23, 0x00, 0x25, 0x50, 0x20, 0x05, 0x18, 0x50,
- 0x10, 0x45, 0x50, 0x06, 0x05, 0x54, 0x60, 0x85, 0x50, 0x0a, 0xc5, 0x40,
- 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0x40, 0x01, 0x43, 0x0c, 0x88, 0x80, 0x0e, 0x68, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0xa1, 0x06, 0x88, 0x80, 0x08, 0x68,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x04, 0xea, 0x20, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x95, 0xb9, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xa8, 0x84, 0x61, 0x10,
- 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2,
- 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56,
- 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x16,
- 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f,
- 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2,
- 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca,
- 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0xa8, 0x06, 0x1a,
- 0x28, 0x87, 0x7a, 0x86, 0x08, 0x14, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05,
- 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c,
- 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17,
- 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34,
- 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e,
- 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc,
- 0x86, 0x40, 0xd0, 0x40, 0x49, 0xd4, 0x44, 0x51, 0x94, 0x43, 0x3d, 0x54,
- 0x45, 0x59, 0x94, 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda,
- 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d, 0x95,
- 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95, 0xe1,
- 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5, 0xf0,
- 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3,
- 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43, 0x84,
- 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0x04, 0x11, 0x14,
- 0x46, 0x65, 0xd4, 0x44, 0x69, 0x94, 0x43, 0x6d, 0x54, 0x45, 0x71, 0x54,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84,
- 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5,
- 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3,
- 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96,
- 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25,
- 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf,
- 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e,
- 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e,
- 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60, 0x00, 0x21, 0x94, 0x47, 0x7d,
- 0x50, 0x41, 0x81, 0x01, 0x34, 0x40, 0x04, 0x15, 0x06, 0x94, 0x18, 0x40,
- 0x05, 0x35, 0x06, 0x50, 0x41, 0x39, 0xd4, 0x43, 0x55, 0x14, 0x19, 0x90,
- 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2,
- 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6,
- 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86,
- 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33,
- 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x1a,
- 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd0, 0x00, 0x2a, 0xa0, 0x02, 0x1a,
- 0xa8, 0x33, 0xa0, 0xd2, 0x00, 0x52, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0,
- 0xd4, 0x00, 0x5a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd6, 0x80, 0x49,
- 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2,
- 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x25, 0x94, 0x47, 0x7d, 0x90,
- 0x41, 0x81, 0x01, 0x44, 0x40, 0x04, 0x15, 0x06, 0x94, 0x19, 0x50, 0x6c,
- 0x40, 0x89, 0x01, 0x64, 0x50, 0x63, 0x00, 0x15, 0x94, 0x43, 0xb5, 0x01,
- 0x55, 0x51, 0x6e, 0xc0, 0x25, 0x2c, 0x4d, 0xce, 0x85, 0xae, 0x0c, 0x8f,
- 0xae, 0x4e, 0xae, 0x8c, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x5c, 0x58, 0x1b,
- 0x1c, 0x5b, 0x19, 0x31, 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0x32, 0x19,
- 0x32, 0x1e, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x16, 0x90, 0xb9, 0xb0, 0x36,
- 0x38, 0xb6, 0x32, 0x1f, 0x12, 0x74, 0x65, 0x78, 0x59, 0x43, 0x28, 0x88,
- 0xa1, 0xe0, 0x80, 0x02, 0x03, 0x68, 0x80, 0x08, 0x2a, 0x0e, 0x28, 0x87,
- 0x92, 0x03, 0xaa, 0xa2, 0xe6, 0x80, 0x05, 0x5d, 0x19, 0x5e, 0x95, 0xd5,
- 0x10, 0x0a, 0x6a, 0x28, 0x38, 0xa0, 0xc0, 0x00, 0x22, 0x20, 0x82, 0x8a,
- 0x03, 0xca, 0xa1, 0xe4, 0x80, 0xaa, 0xa8, 0x3a, 0xe0, 0x12, 0x96, 0x26,
- 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xc7, 0x63, 0x2e, 0xac,
- 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10, 0x09, 0x72, 0xa8, 0x3b,
- 0xa0, 0xc0, 0x00, 0x1a, 0x20, 0x82, 0x72, 0x28, 0x3c, 0xa0, 0x2a, 0x2a,
- 0x0f, 0x86, 0x38, 0xd4, 0x45, 0x75, 0x54, 0x19, 0x50, 0x6f, 0x40, 0xd1,
- 0x01, 0x65, 0x07, 0x94, 0x1e, 0x0c, 0x31, 0x18, 0x80, 0x8a, 0xa8, 0x3d,
- 0xe0, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6, 0x46, 0x07,
- 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e, 0xad, 0x0c,
- 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88, 0x40, 0xf9,
- 0xc1, 0x10, 0x83, 0xea, 0x03, 0xea, 0x0f, 0xae, 0x67, 0x88, 0x41, 0x81,
- 0x02, 0x05, 0x0a, 0xd7, 0x33, 0x42, 0x61, 0x07, 0x76, 0xb0, 0x87, 0x76,
- 0x70, 0x83, 0x74, 0x20, 0x87, 0x72, 0x70, 0x07, 0x7a, 0x98, 0x12, 0x04,
- 0x23, 0x96, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79,
- 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x08, 0x23, 0xa8, 0x70,
- 0x48, 0x07, 0x79, 0x70, 0x03, 0x76, 0x08, 0x07, 0x77, 0x38, 0x87, 0x7a,
- 0x08, 0x87, 0x73, 0x28, 0x87, 0x5f, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79,
- 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01, 0x31, 0x62, 0x0a, 0x87, 0x74,
- 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76,
- 0x28, 0x87, 0x5f, 0x78, 0x07, 0x78, 0xa0, 0x87, 0x74, 0x78, 0x07, 0x77,
- 0x98, 0x87, 0x29, 0x84, 0x81, 0x28, 0xcc, 0x08, 0x26, 0x1c, 0xd2, 0x41,
- 0x1e, 0xdc, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xce, 0xa1, 0x1d, 0xca, 0xc1,
- 0x1d, 0xe8, 0x61, 0x4a, 0xc0, 0x07, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
- 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
- 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
- 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
- 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
- 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
- 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
- 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
- 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
- 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
- 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
- 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
- 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
- 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
- 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
- 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
- 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
- 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
- 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
- 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
- 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
- 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83,
- 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87,
- 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90,
- 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20,
- 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc,
- 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
- 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
- 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
- 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00,
- 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0xd0, 0x00, 0x48,
- 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb, 0x26, 0xb0, 0x01, 0x48,
- 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4,
- 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00, 0x11, 0xdb, 0x95, 0xff,
- 0xf9, 0xda, 0xf5, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
- 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x64, 0xe7, 0x20, 0x06,
- 0x02, 0xf1, 0xa8, 0x8e, 0x35, 0x00, 0x03, 0x31, 0xc7, 0x30, 0x10, 0xde,
- 0x1c, 0xc3, 0xe0, 0x79, 0x63, 0x0d, 0x40, 0x20, 0xd0, 0xab, 0x81, 0x11,
- 0x00, 0x82, 0x33, 0x00, 0x14, 0x47, 0x00, 0xc6, 0x12, 0x02, 0x80, 0xc8,
- 0x0c, 0x00, 0x89, 0x19, 0x00, 0x0a, 0x33, 0x00, 0x04, 0xc6, 0x08, 0x40,
- 0x10, 0x04, 0xf1, 0x6f, 0x04, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10,
- 0x90, 0x81, 0x04, 0x55, 0xca, 0x91, 0x04, 0x23, 0x06, 0xca, 0x10, 0x94,
- 0x81, 0x14, 0x59, 0x0b, 0xa2, 0x08, 0x83, 0x0c, 0x41, 0x81, 0x0c, 0x32,
- 0x0c, 0xc6, 0x33, 0xc8, 0x20, 0x20, 0xd1, 0x20, 0x83, 0x10, 0x4c, 0x83,
- 0x0c, 0xc1, 0x52, 0x9d, 0x36, 0x96, 0x82, 0x62, 0x43, 0x00, 0x1f, 0xf2,
- 0xca, 0x20, 0x83, 0xe0, 0x58, 0xe3, 0x0d, 0xdf, 0x18, 0xb8, 0xc1, 0x05,
- 0x63, 0x29, 0x28, 0x83, 0x0c, 0x81, 0xa4, 0x8d, 0x18, 0x14, 0x44, 0x50,
- 0x07, 0x45, 0x30, 0xc7, 0x40, 0x05, 0x74, 0x30, 0xde, 0x50, 0x06, 0x69,
- 0x00, 0x07, 0x17, 0x8c, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x18, 0x18, 0x8c,
- 0x18, 0x14, 0x44, 0xb0, 0x07, 0x4b, 0x30, 0xc7, 0x60, 0x04, 0x79, 0x30,
- 0xde, 0xb0, 0x06, 0x6f, 0x50, 0x07, 0x17, 0x8c, 0xa5, 0xa0, 0x0c, 0x32,
- 0x04, 0x9e, 0x19, 0x8c, 0x18, 0x14, 0x44, 0x10, 0x0a, 0x51, 0x30, 0xc7,
- 0x60, 0x04, 0x7b, 0x30, 0xc7, 0x10, 0x80, 0xc1, 0x1e, 0x58, 0x50, 0xc9,
- 0x27, 0x83, 0x80, 0x18, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x25, 0x08,
- 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
+ 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0xc0, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0x2d, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+ 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
+ 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
+ 0x9a, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x64, 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41,
+ 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x18, 0x07, 0xb0, 0x00, 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x90, 0x00, 0x6a, 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x30, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x28, 0x02, 0xb0, 0x00, 0x15, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10,
+ 0x1c, 0x13, 0x06, 0x24, 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c,
+ 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47,
+ 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28,
+ 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e,
+ 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6,
+ 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6,
+ 0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14,
+ 0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30,
+ 0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10,
+ 0x30, 0x8c, 0x30, 0x40, 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83,
+ 0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48,
+ 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
+ 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80,
+ 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d,
+ 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9,
+ 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78,
+ 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6,
+ 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
+ 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74,
+ 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6,
+ 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a,
+ 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
+ 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76,
+ 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75,
+ 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6,
+ 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72,
+ 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6,
+ 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x06, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x10, 0x66, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x0b, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82,
+ 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04,
+ 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x06, 0x34, 0x50, 0x00, 0x64, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x68,
+ 0x52, 0x86, 0x08, 0x94, 0x30, 0xc4, 0x80, 0x06, 0x08, 0x81, 0x08, 0x16,
+ 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10, 0xaa, 0x80, 0x06, 0x68, 0x80,
+ 0x08, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xea, 0x20, 0x17, 0x96, 0x26,
+ 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36,
+ 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6,
+ 0x56, 0x36, 0x44, 0xa0, 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8,
+ 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda,
+ 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06,
+ 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e,
+ 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+ 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa,
+ 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7,
+ 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25,
+ 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad,
+ 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20,
+ 0x82, 0x82, 0xa8, 0x68, 0x88, 0x40, 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9,
+ 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73,
+ 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b,
+ 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5,
+ 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd,
+ 0x6d, 0x08, 0x04, 0x11, 0x14, 0x45, 0x55, 0x94, 0x45, 0x41, 0x54, 0x44,
+ 0x5d, 0x14, 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac,
+ 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59,
+ 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19,
+ 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a,
+ 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31,
+ 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44,
+ 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40,
+ 0x69, 0xd4, 0x46, 0x55, 0x14, 0x47, 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47,
+ 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f,
+ 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c,
+ 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30,
+ 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61,
+ 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4,
+ 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5,
+ 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9,
+ 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06, 0x50, 0x42, 0x81, 0x01,
+ 0x15, 0x06, 0x50, 0x41, 0x89, 0x01, 0x44, 0x40, 0x03, 0x35, 0x06, 0x14,
+ 0x19, 0x40, 0x05, 0x55, 0x06, 0x50, 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94,
+ 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3,
+ 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61,
+ 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c,
+ 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7,
+ 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0,
+ 0x00, 0x22, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0,
+ 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd6, 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8,
+ 0x34, 0xa0, 0xd8, 0x00, 0x62, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda,
+ 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d,
+ 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x29, 0x14, 0x18,
+ 0x50, 0x61, 0x00, 0x1d, 0x94, 0x18, 0x40, 0x03, 0x34, 0x50, 0x63, 0x40,
+ 0xa1, 0x01, 0xe5, 0x06, 0x14, 0x19, 0x40, 0x07, 0x55, 0x06, 0x50, 0x41,
+ 0x41, 0xd4, 0x1b, 0x50, 0x17, 0x05, 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9,
+ 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab,
+ 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01,
+ 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97,
+ 0x35, 0x84, 0x82, 0x0c, 0x4a, 0x0e, 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0,
+ 0xe6, 0x80, 0x82, 0x28, 0x3a, 0xa0, 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95,
+ 0xe1, 0x55, 0x59, 0x0d, 0xa1, 0xa0, 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0,
+ 0x01, 0x1a, 0xa8, 0x39, 0xa0, 0x20, 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03,
+ 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72,
+ 0x3c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91,
+ 0x20, 0x87, 0xca, 0x03, 0x4a, 0x0c, 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2,
+ 0x03, 0xea, 0xa2, 0xf6, 0x60, 0x88, 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01,
+ 0x15, 0x07, 0x94, 0x1d, 0x50, 0x78, 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01,
+ 0xa8, 0x89, 0xea, 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda,
+ 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82,
+ 0x86, 0x08, 0x14, 0x28, 0x0c, 0x31, 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a,
+ 0x86, 0x18, 0x94, 0x28, 0x50, 0xa2, 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60,
+ 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60,
+ 0x87, 0x72, 0x70, 0x03, 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98,
+ 0x12, 0x04, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48,
+ 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09,
+ 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48,
+ 0x87, 0x77, 0x70, 0x87, 0x29, 0x01, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90,
+ 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38,
+ 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78,
+ 0x07, 0x77, 0x98, 0x12, 0x18, 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70,
+ 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8,
+ 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98,
+ 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d,
+ 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e,
+ 0xa6, 0x04, 0x7e, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+ 0x16, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb,
+ 0x26, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11,
+ 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00,
+ 0x11, 0xdb, 0x95, 0xff, 0xf9, 0xda, 0xf5, 0x5f, 0x44, 0x80, 0xc1, 0x10,
+ 0xcd, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+ 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x54, 0xc7, 0x1a, 0x80, 0x81, 0x98, 0x63, 0x20, 0x86, 0x6f, 0x8e, 0x81,
+ 0xf8, 0xbe, 0xb1, 0x06, 0x20, 0x10, 0x28, 0x8e, 0x25, 0x04, 0xc0, 0x08,
+ 0x00, 0xbd, 0x1a, 0x18, 0x01, 0x20, 0x38, 0x03, 0x40, 0x62, 0x06, 0x80,
+ 0xc2, 0x1c, 0x44, 0x19, 0x94, 0x41, 0x19, 0x8c, 0xc1, 0x0c, 0x00, 0x81,
+ 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0x1b, 0x01, 0x98, 0x01, 0x00, 0x00,
+ 0x23, 0x06, 0xca, 0x10, 0x90, 0x81, 0x04, 0x55, 0x89, 0x82, 0x08, 0x83,
+ 0x0c, 0x41, 0xe1, 0x8c, 0x18, 0x28, 0x43, 0x60, 0x06, 0x93, 0x74, 0x2d,
+ 0x8c, 0x42, 0x0c, 0x32, 0x04, 0x87, 0x33, 0xc8, 0x10, 0x28, 0xd2, 0x20,
+ 0x03, 0x11, 0x50, 0x97, 0xd9, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x0c, 0x65,
+ 0x44, 0x00, 0x1f, 0xf2, 0xca, 0x78, 0x83, 0x27, 0x06, 0x6e, 0x70, 0x81,
+ 0x5d, 0x0a, 0xca, 0x20, 0x43, 0x20, 0x69, 0x23, 0x06, 0x85, 0x10, 0xd0,
+ 0x81, 0x11, 0x8c, 0x37, 0x8c, 0xc1, 0x19, 0xb4, 0xc1, 0x05, 0x76, 0x29,
+ 0x28, 0x83, 0x0c, 0xc1, 0xf5, 0x8d, 0x18, 0x14, 0x42, 0x90, 0x07, 0x4b,
+ 0x30, 0xde, 0x80, 0x06, 0x6c, 0x10, 0x07, 0x17, 0xd8, 0xa5, 0xa0, 0x0c,
+ 0x32, 0x04, 0x1c, 0x19, 0x8c, 0x18, 0x14, 0x42, 0xe0, 0x07, 0x50, 0x30,
+ 0xc7, 0xf0, 0x2d, 0x7c, 0x30, 0xc7, 0x10, 0x1c, 0x7e, 0x30, 0xc7, 0x10,
+ 0x0c, 0x79, 0x60, 0xc1, 0x24, 0x9f, 0x0c, 0x02, 0x62, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x25, 0x18, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-const unsigned int sdl_metallib_len = 22744;
+const unsigned int sdl_metallib_len = 22208;
--- a/external/SDL2/src/render/metal/SDL_shaders_metal_osx.h
+++ b/external/SDL2/src/render/metal/SDL_shaders_metal_osx.h
@@ -1,18 +1,18 @@
const unsigned char sdl_metallib[] = {
- 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x80, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x03, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x54, 0x00, 0x00,
+ 0x60, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x52, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f,
0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54,
0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00,
- 0xcb, 0x86, 0x8e, 0x78, 0x90, 0x1d, 0xa9, 0xc3, 0xb9, 0xec, 0xcd, 0xec,
- 0x69, 0xba, 0x3d, 0x7e, 0x97, 0xb5, 0xa9, 0x05, 0x01, 0xbe, 0x87, 0xd8,
- 0x0c, 0xca, 0x1a, 0xb4, 0x91, 0x54, 0x7e, 0x29, 0x4f, 0x46, 0x46, 0x54,
+ 0x9c, 0x26, 0x64, 0xd8, 0x92, 0x81, 0x4c, 0x6b, 0xb9, 0x57, 0x75, 0xb8,
+ 0x85, 0x4c, 0x30, 0x81, 0xfb, 0x4b, 0xf1, 0x9c, 0x82, 0x95, 0xb0, 0x4e,
+ 0xbc, 0x23, 0x41, 0x5b, 0x57, 0x84, 0x3c, 0x21, 0x4f, 0x46, 0x46, 0x54,
0x18, 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, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00,
@@ -19,65 +19,71 @@
0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00,
0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f,
0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59,
- 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0xf5,
- 0xc6, 0xe3, 0x26, 0x71, 0xe3, 0x1c, 0x45, 0x4d, 0xb1, 0xdb, 0x0e, 0x1a,
- 0x29, 0x85, 0x9d, 0xa7, 0x04, 0x40, 0x91, 0x18, 0x99, 0x5c, 0x9f, 0xdb,
- 0x7c, 0x30, 0xd1, 0x67, 0x59, 0xd8, 0xa4, 0x4f, 0x46, 0x46, 0x54, 0x18,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0x32,
+ 0xa8, 0x7c, 0x42, 0x6b, 0x5a, 0xf9, 0x70, 0x76, 0xdf, 0x7f, 0x65, 0x92,
+ 0xf7, 0x0c, 0x1b, 0xb8, 0x15, 0xc6, 0xaa, 0x1c, 0x0c, 0xe1, 0x7f, 0x10,
+ 0x62, 0x0b, 0x51, 0x47, 0x66, 0x35, 0xb2, 0x4f, 0x46, 0x46, 0x54, 0x18,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e,
0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c,
0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00,
0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20,
- 0x00, 0x31, 0xa8, 0x6b, 0xb7, 0x4d, 0x8a, 0x56, 0xc7, 0x91, 0xa4, 0x37,
- 0xfd, 0xa6, 0xbf, 0x79, 0xd1, 0x55, 0x8c, 0xd5, 0x1b, 0x88, 0x69, 0x8e,
- 0x6c, 0xf0, 0x53, 0x1b, 0xd3, 0x35, 0xfe, 0x3f, 0x01, 0x4f, 0x46, 0x46,
- 0x54, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x1e, 0x87, 0x9a, 0x5c, 0x3b, 0xf9, 0x95, 0x46, 0x8c, 0xee,
+ 0x62, 0xd0, 0x6b, 0x65, 0x43, 0xe7, 0x0d, 0x3b, 0x69, 0xcd, 0xd5, 0xe0,
+ 0xf8, 0x76, 0x99, 0x63, 0xd5, 0x17, 0x4d, 0xc4, 0xb6, 0x4f, 0x46, 0x46,
+ 0x54, 0x18, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08,
0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00,
0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43,
0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
- 0x20, 0x00, 0x52, 0xe7, 0xfc, 0x67, 0x4e, 0xed, 0x7a, 0xa8, 0x44, 0x82,
- 0xb2, 0x41, 0x3c, 0xdb, 0x9e, 0xe8, 0x5b, 0xbb, 0x30, 0x60, 0xf8, 0xa1,
- 0x94, 0xac, 0xb4, 0x80, 0xaa, 0x08, 0xa6, 0xa0, 0xe6, 0xfd, 0x4f, 0x46,
- 0x46, 0x54, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x1f, 0x00, 0x00,
+ 0x20, 0x00, 0x23, 0xee, 0xd8, 0x3c, 0x0d, 0x4a, 0x32, 0xdf, 0x4d, 0xcb,
+ 0xc2, 0x6d, 0xfb, 0x3e, 0x60, 0x49, 0x1e, 0xda, 0xa8, 0x41, 0x91, 0x82,
+ 0x01, 0x99, 0x11, 0x42, 0x98, 0x7e, 0x8c, 0xa9, 0x74, 0x3b, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00,
0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f,
0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
- 0x20, 0x00, 0x28, 0x59, 0x9d, 0x20, 0x32, 0xc7, 0x94, 0x63, 0xa8, 0xda,
- 0x9c, 0xac, 0x28, 0xb8, 0x01, 0xc3, 0x5f, 0x48, 0xf6, 0x74, 0x09, 0x1a,
- 0xd9, 0x84, 0x91, 0x19, 0xc6, 0xe7, 0x4e, 0x94, 0x47, 0xce, 0x4f, 0x46,
- 0x46, 0x54, 0x18, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x2a, 0x00, 0x00,
+ 0x20, 0x00, 0x62, 0x04, 0x7d, 0xc9, 0x06, 0x49, 0xcc, 0xf6, 0xf9, 0x2b,
+ 0xae, 0x9d, 0x93, 0x0d, 0xa1, 0x47, 0xcd, 0xf6, 0x17, 0x48, 0x3c, 0x29,
+ 0x0f, 0x6e, 0x2f, 0x73, 0xbf, 0x9f, 0xe0, 0x76, 0x61, 0xe4, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2b, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00,
0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f,
0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53,
- 0x48, 0x20, 0x00, 0x08, 0x35, 0xd4, 0x21, 0x2f, 0xca, 0x8d, 0x22, 0xb2,
- 0xa3, 0x9a, 0xd8, 0xd9, 0x46, 0x6d, 0x01, 0x7d, 0x06, 0x95, 0x04, 0x7a,
- 0x94, 0xdf, 0x2b, 0xd2, 0x21, 0xea, 0x99, 0x9f, 0x2b, 0xda, 0x65, 0x4f,
- 0x46, 0x46, 0x54, 0x18, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x00,
+ 0x48, 0x20, 0x00, 0x90, 0x38, 0x98, 0x0e, 0xe5, 0xc0, 0x52, 0xe2, 0x6c,
+ 0x6a, 0x29, 0x60, 0xc3, 0x1e, 0x8a, 0x57, 0xa8, 0xe3, 0xf5, 0x9b, 0x42,
+ 0x2a, 0xdf, 0xf8, 0xe9, 0xf1, 0x11, 0x83, 0xa5, 0xf0, 0x23, 0x79, 0x4f,
+ 0x46, 0x46, 0x54, 0x18, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x38, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01,
0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79,
0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c,
0x5f, 0x4e, 0x56, 0x32, 0x31, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41,
- 0x53, 0x48, 0x20, 0x00, 0xe0, 0x53, 0xda, 0x06, 0xef, 0x80, 0x49, 0x61,
- 0xf6, 0x9e, 0xee, 0xfe, 0x49, 0xb6, 0xd2, 0xce, 0xb8, 0xea, 0x5f, 0x9a,
- 0xf4, 0x77, 0x35, 0xe7, 0xd3, 0xfc, 0x0f, 0xf6, 0x01, 0xe5, 0x90, 0xd6,
- 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x46,
+ 0x53, 0x48, 0x20, 0x00, 0x93, 0xe6, 0x44, 0x8a, 0x0e, 0xc3, 0xbd, 0x69,
+ 0x0f, 0x58, 0x95, 0xff, 0x3a, 0x28, 0xc4, 0x1c, 0x48, 0x40, 0xb4, 0xe2,
+ 0x04, 0x88, 0xd5, 0xb5, 0x30, 0x43, 0x59, 0xf4, 0x69, 0x82, 0xf3, 0x97,
+ 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x45,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00,
0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54,
- 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0x20, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x0d, 0x00, 0x01, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x56, 0x41, 0x54, 0x59, 0x03, 0x00, 0x01, 0x00, 0x04,
+ 0x45, 0x4e, 0x44, 0x54, 0x2c, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x18, 0x00, 0x02, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00,
+ 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, 0x02, 0x00, 0x04, 0x04,
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
@@ -87,178 +93,433 @@
0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x38, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xcb, 0x02, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x6c, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00,
0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
- 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+ 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14,
0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
- 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
+ 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08,
0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x02, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x18,
- 0x80, 0x05, 0xa8, 0x36, 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0x20, 0x01, 0x15, 0x31, 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3,
- 0x40, 0x0f, 0xec, 0x90, 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee,
- 0x40, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9,
- 0x40, 0x0e, 0xe5, 0xd0, 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80,
- 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3,
- 0x3c, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43,
- 0x3a, 0xb0, 0x43, 0x1b, 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03,
- 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5,
- 0x30, 0x0f, 0xf3, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9,
- 0x30, 0x0f, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4,
- 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43,
- 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3,
- 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03,
- 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0,
- 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5,
- 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef,
- 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee,
- 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6,
- 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83,
- 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43,
- 0x3d, 0xb4, 0x03, 0x3c, 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43,
- 0x39, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00,
- 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00,
- 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1,
- 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43,
- 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41,
- 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3,
- 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d,
- 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef,
- 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04,
- 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43,
- 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d,
- 0x60, 0x0e, 0xf0, 0x10, 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3,
- 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed,
- 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03,
- 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03,
- 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6,
- 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x08, 0x00, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
- 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
- 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x50, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x70, 0x9f, 0x34, 0x45, 0x94,
- 0x30, 0xf9, 0xac, 0xb3, 0x20, 0xc3, 0x4b, 0x44, 0x13, 0x71, 0xa1, 0xd4,
- 0xf4, 0x50, 0x93, 0xff, 0x00, 0x82, 0x42, 0x0c, 0x58, 0x08, 0x60, 0x18,
- 0x41, 0x00, 0x06, 0x11, 0x86, 0x20, 0x09, 0xc2, 0x4c, 0xd3, 0x38, 0xb0,
- 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x41, 0x3b, 0x94, 0x03, 0x3d, 0x84,
- 0x03, 0x3b, 0xe8, 0x81, 0x1e, 0xb4, 0x43, 0x38, 0xd0, 0x83, 0x3c, 0xa4,
- 0x03, 0x3e, 0xa0, 0xa0, 0x0c, 0x22, 0x18, 0xc2, 0x1c, 0x01, 0x18, 0x94,
- 0x42, 0x90, 0x73, 0x10, 0xa5, 0x81, 0x00, 0x32, 0x73, 0x04, 0xa0, 0x30,
- 0x88, 0x10, 0x08, 0x53, 0x00, 0x23, 0x00, 0xc3, 0x08, 0x04, 0x32, 0x47,
- 0x10, 0x50, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
- 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
- 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03,
- 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0,
- 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0,
- 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80,
- 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0,
- 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
- 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
- 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10,
- 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60,
- 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
- 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0,
- 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80,
- 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
- 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
- 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
- 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20,
- 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
- 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20,
- 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
- 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0,
- 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20,
- 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20,
- 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
- 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40,
- 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
- 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0,
- 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x51, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90,
- 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x42, 0x25, 0x30, 0x02, 0x50,
- 0x80, 0x01, 0x05, 0x51, 0x04, 0x05, 0x52, 0x06, 0xd4, 0x46, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
- 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09,
- 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6,
- 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05,
- 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0xb0, 0x00,
- 0x43, 0x0c, 0x24, 0x40, 0x08, 0x44, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6,
- 0x36, 0x04, 0x59, 0x06, 0x24, 0x40, 0x02, 0x44, 0xe0, 0x16, 0x96, 0x26,
- 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6,
- 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0x58, 0x0a, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
- 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61,
- 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe5,
- 0x60, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1,
- 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95,
- 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85,
- 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x96, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7,
- 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97,
- 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96,
- 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58, 0x16, 0x32, 0x61, 0x69,
- 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x8c, 0xc2,
- 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe,
- 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x90,
- 0x09, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0x72, 0x0b, 0x6b, 0x2b,
- 0x23, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x44, 0x59,
- 0x9a, 0xc5, 0x59, 0x9e, 0x05, 0x5a, 0x22, 0x3a, 0x61, 0x69, 0x72, 0x2e,
- 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0xcc,
- 0xd8, 0xde, 0xc2, 0xe8, 0x98, 0xc0, 0xbd, 0xa5, 0xb9, 0xd1, 0x4d, 0xa5,
- 0xe9, 0x95, 0x0d, 0x51, 0x96, 0x69, 0x71, 0x16, 0x6a, 0x81, 0x96, 0x6a,
- 0x08, 0xb1, 0x48, 0x8b, 0x45, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce,
- 0xcc, 0xac, 0x4c, 0x8e, 0x52, 0x58, 0x9a, 0x9c, 0x0b, 0xdb, 0xdb, 0x58,
- 0x18, 0x5d, 0xda, 0x9b, 0xdb, 0x57, 0x9a, 0x1b, 0x59, 0x19, 0x1e, 0x91,
- 0xb0, 0x34, 0x39, 0x17, 0xb9, 0xb2, 0x30, 0x32, 0x46, 0x61, 0x69, 0x72,
- 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x73, 0x69,
- 0x7a, 0x65, 0xbc, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8,
- 0xf2, 0xe0, 0xca, 0xbe, 0xc2, 0xd8, 0xd2, 0xce, 0xdc, 0xbe, 0xe6, 0xd2,
- 0xf4, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xc9, 0x0c, 0xe1, 0x10,
- 0x61, 0xc1, 0x96, 0x0c, 0x11, 0x90, 0x60, 0xd1, 0x96, 0x0d, 0x21, 0x16,
- 0x0e, 0x21, 0x16, 0x67, 0xe9, 0x16, 0x68, 0x89, 0xf8, 0x84, 0xa5, 0xc9,
- 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95,
- 0x11, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0xa3, 0xc1, 0xa3, 0xa1, 0x02, 0x27,
- 0xf7, 0xa6, 0x56, 0x36, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x04, 0x0c, 0x90,
- 0x60, 0xc1, 0x96, 0x0f, 0x19, 0x96, 0x0c, 0x29, 0x90, 0x60, 0xd1, 0x96,
- 0x0d, 0x19, 0x16, 0x0e, 0x31, 0x16, 0x67, 0x01, 0x83, 0x05, 0x5a, 0xc2,
- 0x80, 0x09, 0x9d, 0x5c, 0x98, 0xdb, 0x9c, 0xd9, 0x9b, 0x5c, 0xdb, 0x10,
- 0x30, 0x40, 0x8a, 0x05, 0x5b, 0x3e, 0x64, 0x58, 0x32, 0xe4, 0x40, 0x82,
- 0x45, 0x5b, 0x36, 0x64, 0x58, 0x38, 0xc4, 0x58, 0x9c, 0x05, 0x0c, 0x16,
- 0x68, 0x19, 0x03, 0x36, 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74,
- 0x65, 0x78, 0x5f, 0x69, 0x64, 0x24, 0xea, 0xd2, 0xdc, 0xe8, 0x38, 0xd8,
- 0xa5, 0x91, 0x0d, 0x61, 0x90, 0x63, 0x29, 0x83, 0xc5, 0x59, 0xcc, 0x60,
- 0x81, 0x96, 0x33, 0x18, 0x82, 0x2c, 0xde, 0x22, 0x06, 0x0b, 0x19, 0x2c,
- 0x68, 0x30, 0xc4, 0x50, 0x80, 0xe5, 0x5a, 0xd2, 0x80, 0xcf, 0x5b, 0x9b,
- 0x5b, 0x1a, 0xdc, 0x1b, 0x5d, 0x99, 0x1b, 0x1d, 0xc8, 0x18, 0x5a, 0x98,
- 0x1c, 0x9f, 0xa9, 0xb4, 0x36, 0x38, 0xb6, 0x32, 0x90, 0xa1, 0x95, 0x15,
- 0x10, 0x2a, 0xa1, 0xa0, 0xa0, 0x21, 0xc2, 0xc2, 0x06, 0x43, 0x8c, 0x65,
- 0x0d, 0x96, 0x36, 0x68, 0x90, 0x21, 0xc6, 0xe2, 0x06, 0x8b, 0x1b, 0x34,
- 0xc8, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81,
- 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x10, 0x8c, 0x58, 0xc2, 0x21,
- 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1,
- 0x1d, 0xdc, 0x61, 0x4a, 0x20, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1,
- 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1,
- 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1,
- 0x1d, 0xa6, 0x04, 0xc4, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60,
- 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1,
- 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10,
- 0x06, 0xa2, 0x30, 0x23, 0x94, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b,
- 0x28, 0x07, 0x79, 0xa0, 0x87, 0x72, 0xc0, 0x87, 0x29, 0x81, 0x1a, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0x51, 0x18, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x1b, 0xf6, 0x25, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x18, 0x87, 0x77, 0x90,
+ 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76, 0xc8, 0x87, 0x36, 0x90,
+ 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72, 0x20, 0x87, 0x36, 0x20,
+ 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72, 0x68, 0x83, 0x79, 0x88,
+ 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c,
+ 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c,
+ 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1, 0x0d, 0xc6, 0x21, 0x1c,
+ 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
+ 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79, 0x68, 0x03, 0x78, 0x90,
+ 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80,
+ 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
+ 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e,
+ 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0,
+ 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x30,
+ 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48,
+ 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48,
+ 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28,
+ 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70,
+ 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20,
+ 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1, 0x1d, 0xe0, 0xa1, 0x0d,
+ 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x1e, 0x00, 0x73, 0x08,
+ 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
+ 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
+ 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
+ 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
+ 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
+ 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38,
+ 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e,
+ 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d,
+ 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e,
+ 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c,
+ 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00,
+ 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30,
+ 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00,
+ 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00, 0x20, 0xea, 0xc1, 0x1d,
+ 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d,
+ 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28,
+ 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36, 0x98, 0x87, 0x77, 0x30,
+ 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x00,
+ 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0xd8, 0x60, 0x08, 0x02,
+ 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x18, 0x80, 0x05, 0xa8, 0x00, 0x00, 0x00,
+ 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
+ 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84,
+ 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c,
+ 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x70,
+ 0x9f, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xac, 0xb3, 0x20, 0xc3, 0x4b, 0x44,
+ 0x13, 0x71, 0xa1, 0xd4, 0xf4, 0x50, 0x93, 0xff, 0x00, 0x82, 0x42, 0x0c,
+ 0x58, 0x08, 0x18, 0x46, 0x10, 0x80, 0x24, 0x88, 0x99, 0xa8, 0x79, 0xa0,
+ 0x07, 0x79, 0xa8, 0x87, 0x71, 0xa0, 0x07, 0x37, 0x68, 0x87, 0x72, 0xa0,
+ 0x87, 0x70, 0x60, 0x07, 0x3d, 0xd0, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x90,
+ 0x87, 0x74, 0xc0, 0x07, 0x14, 0xd0, 0x20, 0x42, 0x21, 0x14, 0x42, 0xc6,
+ 0x8c, 0x6e, 0x20, 0x60, 0x8e, 0x00, 0x0c, 0xe6, 0x08, 0x40, 0x61, 0x10,
+ 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
+ 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71,
+ 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38,
+ 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06,
+ 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e,
+ 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07,
+ 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07,
+ 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f,
+ 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07,
+ 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07,
+ 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f,
+ 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07,
+ 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06,
+ 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07,
+ 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07,
+ 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07,
+ 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07,
+ 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f,
+ 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
+ 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e,
+ 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x41, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0xd2, 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28,
+ 0x90, 0x42, 0x28, 0x88, 0x32, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x86, 0x12, 0x24, 0x80, 0x62, 0x70, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x5c, 0x68,
+ 0x72, 0x52, 0x86, 0x08, 0x89, 0x30, 0xc4, 0x50, 0x02, 0xe5, 0x50, 0x04,
+ 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25,
+ 0x50, 0x04, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
+ 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64,
+ 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96,
+ 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16,
+ 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26,
+ 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x96, 0x41, 0x58, 0x9a, 0x9c, 0xcb,
+ 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b,
+ 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18,
+ 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59,
+ 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75,
+ 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43,
+ 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26, 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46,
+ 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec,
+ 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19,
+ 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99, 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9,
+ 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4, 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64,
+ 0xa2, 0x13, 0x96, 0x26, 0xe7, 0x02, 0xf7, 0x96, 0xe6, 0x46, 0xf7, 0x35,
+ 0x97, 0xa6, 0x57, 0xc6, 0xc2, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, 0x09, 0xdc,
+ 0x5b, 0x9a, 0x1b, 0xdd, 0x54, 0x9a, 0x5e, 0xd9, 0x10, 0x25, 0xa9, 0x12,
+ 0x28, 0xb1, 0x12, 0x29, 0xb9, 0x86, 0x10, 0x09, 0x95, 0x60, 0x84, 0xc2,
+ 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4, 0xe8, 0xca, 0xf0, 0xbe, 0xd2, 0xdc,
+ 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5, 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85,
+ 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5, 0xb9, 0x91, 0x95, 0xe1, 0x31, 0x3b,
+ 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3, 0x2b, 0x23, 0x43, 0xc1, 0x81, 0x7b,
+ 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73, 0x23, 0xb2, 0x93, 0xf9, 0x32, 0x4b,
+ 0xa1, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x33, 0x84, 0x52, 0x84, 0x44,
+ 0x4b, 0x36, 0x45, 0x50, 0x82, 0x84, 0x4b, 0xa0, 0xa4, 0x4b, 0xa4, 0x64,
+ 0xa2, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7,
+ 0x27, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b,
+ 0x2e, 0x4d, 0xaf, 0x8c, 0x48, 0x58, 0x9a, 0x9c, 0x8b, 0x5c, 0x59, 0x18,
+ 0x19, 0xa3, 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c,
+ 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd, 0x32, 0x5e, 0x61, 0x69, 0x72, 0x2e,
+ 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69,
+ 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x44, 0xcc, 0xd8, 0xde, 0xc2,
+ 0xe8, 0x68, 0xf0, 0x68, 0xa8, 0xc0, 0xc9, 0xbd, 0xa9, 0x95, 0x8d, 0xd1,
+ 0xa5, 0xbd, 0xb9, 0x0d, 0x01, 0x03, 0x25, 0x48, 0xbe, 0x04, 0x0c, 0x94,
+ 0x21, 0xd9, 0x14, 0x42, 0x09, 0x92, 0x30, 0x48, 0xc4, 0x40, 0x19, 0x92,
+ 0x31, 0x50, 0x8a, 0x04, 0x4a, 0xc8, 0x20, 0x91, 0x92, 0x32, 0x60, 0x42,
+ 0x27, 0x17, 0xe6, 0x36, 0x67, 0xf6, 0x26, 0xd7, 0x36, 0x04, 0x0c, 0x14,
+ 0x22, 0xf9, 0x12, 0x30, 0x50, 0x86, 0x64, 0x53, 0x10, 0x25, 0x48, 0xc2,
+ 0x20, 0x11, 0x03, 0x65, 0x48, 0xc6, 0x40, 0x29, 0x12, 0x28, 0x21, 0x83,
+ 0x44, 0x4a, 0xce, 0x60, 0x88, 0x91, 0x78, 0x89, 0x19, 0x24, 0x68, 0x30,
+ 0xc4, 0x40, 0x80, 0x24, 0x4b, 0xd2, 0x80, 0xcf, 0x5b, 0x9b, 0x5b, 0x1a,
+ 0xdc, 0x1b, 0x5d, 0x99, 0x1b, 0x1d, 0xc8, 0x18, 0x5a, 0x98, 0x1c, 0x9f,
+ 0xa9, 0xb4, 0x36, 0x38, 0xb6, 0x32, 0x90, 0xa1, 0x95, 0x15, 0x10, 0x2a,
+ 0xa1, 0xa0, 0xa0, 0x21, 0x42, 0xc2, 0x06, 0x43, 0x8c, 0x64, 0x0d, 0x92,
+ 0x36, 0x58, 0x92, 0x21, 0x46, 0xe2, 0x06, 0x89, 0x1b, 0x2c, 0xc9, 0x88,
+ 0x88, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8,
+ 0xa1, 0x1e, 0xd8, 0xa1, 0x1c, 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce,
+ 0x61, 0x1e, 0xa6, 0x04, 0xc1, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda,
+ 0xc1, 0x0d, 0xd2, 0x81, 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x30,
+ 0x8c, 0x58, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4,
+ 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, 0x40, 0x8c, 0xa0, 0xc2,
+ 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea,
+ 0x21, 0x1c, 0xce, 0xa1, 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6,
+ 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xa6, 0x04, 0xc6, 0x88, 0x29, 0x1c, 0xd2,
+ 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8,
+ 0xa1, 0x1c, 0x7e, 0xe1, 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc,
+ 0x61, 0x1e, 0xa6, 0x10, 0x88, 0xc2, 0x38, 0x23, 0x94, 0x70, 0x48, 0x07,
+ 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79, 0xa0, 0x87, 0x72, 0xc0, 0x87,
+ 0x29, 0x81, 0x1a, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, 0x44,
+ 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+ 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+ 0xd4, 0x63, 0x11, 0xc3, 0x30, 0x0c, 0x63, 0x11, 0x82, 0x20, 0x08, 0x63,
+ 0x11, 0x41, 0x10, 0x04, 0x23, 0x00, 0xb4, 0x25, 0x50, 0x06, 0x45, 0x40,
+ 0x33, 0x03, 0x40, 0x32, 0x03, 0x40, 0x31, 0x03, 0x40, 0x30, 0x46, 0x00,
+ 0x82, 0x20, 0x88, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcc, 0x63,
+ 0x3d, 0x14, 0x94, 0xf1, 0x88, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3,
+ 0x60, 0x30, 0x26, 0x04, 0xf2, 0x19, 0x8f, 0x98, 0x2a, 0xae, 0xa1, 0xa0,
+ 0x0c, 0x32, 0x1c, 0x4a, 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c,
+ 0x47, 0x60, 0x5a, 0x18, 0x40, 0x14, 0x94, 0x41, 0x06, 0xe6, 0xb9, 0x4c,
+ 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, 0x88, 0xee, 0x33, 0x03, 0x8b,
+ 0x82, 0x32, 0xc8, 0x10, 0x51, 0x9d, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0,
+ 0x33, 0x1e, 0x11, 0x06, 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21,
+ 0xc8, 0x3e, 0x0b, 0x2a, 0xf9, 0x0c, 0x32, 0x0c, 0x9b, 0x18, 0x58, 0x30,
+ 0xc9, 0xc7, 0x86, 0x00, 0x3e, 0x83, 0x0c, 0x86, 0x67, 0x06, 0x16, 0x44,
+ 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x20, 0x43, 0x12, 0x06, 0x6a, 0x60, 0xc1,
+ 0x23, 0x1f, 0x1b, 0x02, 0xf8, 0x8c, 0x47, 0xb8, 0x41, 0x1c, 0xe0, 0x01,
+ 0x1a, 0x50, 0x50, 0x06, 0x19, 0x02, 0x33, 0x60, 0x03, 0x0b, 0xc4, 0x40,
+ 0x3e, 0x83, 0x0c, 0x03, 0x1a, 0xbc, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41,
+ 0x86, 0x42, 0x0d, 0xe4, 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0x07, 0x1b,
+ 0xd4, 0x81, 0x05, 0x9a, 0x7c, 0x06, 0x19, 0xf4, 0x00, 0x0e, 0xe8, 0xc0,
+ 0xb2, 0x40, 0x3e, 0x83, 0x0c, 0x7c, 0x20, 0x07, 0x77, 0x60, 0x4e, 0x20,
+ 0x1f, 0x4b, 0x06, 0xf8, 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16,
+ 0x20, 0xf0, 0xb1, 0xa0, 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c,
+ 0x43, 0x70, 0x07, 0x41, 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x5b, 0x86, 0x20, 0x78, 0x83, 0x2d, 0xc3, 0x10, 0xbc, 0xc1, 0x96, 0xe1,
+ 0x08, 0xde, 0x60, 0xcb, 0xc0, 0x04, 0x6f, 0xb0, 0x65, 0x88, 0x82, 0x37,
+ 0xd8, 0x32, 0x58, 0xc1, 0x1b, 0x6c, 0x19, 0xc6, 0x20, 0x78, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x8c, 0x0b, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+ 0xe0, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+ 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
+ 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
+ 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
+ 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
+ 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36,
+ 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36,
+ 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77,
+ 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77,
+ 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1,
+ 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1,
+ 0x1d, 0xe0, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61,
+ 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
+ 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
+ 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x60, 0x08, 0x03, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x20, 0x80, 0x05,
+ 0xa8, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0xe7, 0x49, 0x53, 0x44, 0x09,
+ 0x93, 0xcf, 0x39, 0x0f, 0xf6, 0x12, 0xd1, 0x44, 0x5c, 0x28, 0x35, 0x3d,
+ 0xd4, 0xe4, 0x3f, 0x80, 0xa0, 0x10, 0x03, 0x16, 0x42, 0x92, 0x20, 0x66,
+ 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6, 0x81, 0x1e, 0xdc, 0xa0,
+ 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4, 0x40, 0x0f, 0xda, 0x21,
+ 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50, 0x40, 0x83, 0x08, 0x85,
+ 0x50, 0x8a, 0x11, 0x31, 0xa3, 0x1b, 0x08, 0x98, 0x23, 0x00, 0x83, 0x39,
+ 0x02, 0x50, 0x18, 0x44, 0x08, 0x84, 0x61, 0x04, 0x42, 0x19, 0x01, 0x00,
+ 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
+ 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71,
+ 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38,
+ 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06,
+ 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e,
+ 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07,
+ 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07,
+ 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f,
+ 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07,
+ 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07,
+ 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f,
+ 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07,
+ 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06,
+ 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07,
+ 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07,
+ 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07,
+ 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07,
+ 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f,
+ 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
+ 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e,
+ 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x41, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0xd2, 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28,
+ 0x90, 0x32, 0x28, 0x84, 0x82, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x86, 0x12, 0x24, 0x80, 0x72, 0x70, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x5c, 0x68,
+ 0x72, 0x52, 0x86, 0x08, 0x89, 0x30, 0xc4, 0x50, 0x02, 0x05, 0x51, 0x04,
+ 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25,
+ 0x50, 0x04, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
+ 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64,
+ 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96,
+ 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16,
+ 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26,
+ 0xc6, 0x56, 0x36, 0x44, 0x48, 0x12, 0x96, 0x41, 0x58, 0x9a, 0x9c, 0xcb,
+ 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b,
+ 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18,
+ 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59,
+ 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75,
+ 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43,
+ 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26, 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46,
+ 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec,
+ 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19,
+ 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99, 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9,
+ 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4, 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64,
+ 0x62, 0x14, 0x96, 0x26, 0xe7, 0x62, 0x57, 0x26, 0x47, 0x57, 0x86, 0xf7,
+ 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47, 0xc7, 0xec, 0xac, 0xcc, 0xad, 0x4c,
+ 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0x05, 0x87, 0xae, 0x0c, 0x6f, 0xec, 0xed,
+ 0x4d, 0x8e, 0x8c, 0xc8, 0x4e, 0xe6, 0xcb, 0x2c, 0x85, 0x86, 0x19, 0xdb,
+ 0x5b, 0x18, 0x9d, 0x0c, 0x11, 0xba, 0x32, 0xbc, 0xb1, 0xb7, 0x37, 0x39,
+ 0xb2, 0x21, 0x4c, 0x52, 0x25, 0x56, 0x02, 0x25, 0x57, 0x22, 0x25, 0xd8,
+ 0x10, 0x22, 0xa1, 0x92, 0x8c, 0x50, 0x58, 0x9a, 0x9c, 0x8b, 0x5d, 0x99,
+ 0x1c, 0x5d, 0x19, 0xde, 0x57, 0x9a, 0x1b, 0x5c, 0x1d, 0x1d, 0xa5, 0xb0,
+ 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf,
+ 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x66, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61,
+ 0x74, 0x65, 0x64, 0x28, 0x38, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x44, 0x76, 0x32, 0x5f, 0x66, 0x29, 0x43, 0x28, 0x45, 0x48, 0xb6,
+ 0x84, 0x53, 0x04, 0x25, 0x48, 0xba, 0x04, 0x4a, 0xae, 0x44, 0x4a, 0xa6,
+ 0x21, 0x94, 0x12, 0x24, 0x5b, 0xc2, 0x29, 0x81, 0x12, 0x24, 0x56, 0x02,
+ 0x25, 0x57, 0x22, 0x25, 0x18, 0x95, 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a,
+ 0x33, 0xb3, 0x32, 0x39, 0x3e, 0x61, 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66,
+ 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4,
+ 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x18, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9,
+ 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1,
+ 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b,
+ 0xfb, 0x0a, 0x63, 0x4b, 0x3b, 0x73, 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23,
+ 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x47, 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee,
+ 0x4d, 0xad, 0x6c, 0x8c, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x44,
+ 0x02, 0x06, 0x49, 0x18, 0x28, 0x43, 0xc2, 0x29, 0x84, 0x12, 0x24, 0x62,
+ 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64, 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41,
+ 0x22, 0x25, 0x66, 0xc0, 0x84, 0x4e, 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d,
+ 0xae, 0x6d, 0x08, 0x18, 0x28, 0x46, 0x02, 0x06, 0x49, 0x18, 0x28, 0x43,
+ 0xc2, 0x29, 0x86, 0x12, 0x24, 0x62, 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64,
+ 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41, 0x22, 0x25, 0x68, 0x30, 0x04, 0x49,
+ 0xbc, 0xe4, 0x4b, 0xce, 0x20, 0x49, 0x83, 0x21, 0x06, 0x02, 0x24, 0x5a,
+ 0xa2, 0x06, 0x7c, 0xde, 0xda, 0xdc, 0xd2, 0xe0, 0xde, 0xe8, 0xca, 0xdc,
+ 0xe8, 0x40, 0xc6, 0xd0, 0xc2, 0xe4, 0xf8, 0x4c, 0xa5, 0xb5, 0xc1, 0xb1,
+ 0x95, 0x81, 0x0c, 0xad, 0xac, 0x80, 0x50, 0x09, 0x05, 0x05, 0x0d, 0x11,
+ 0x92, 0x36, 0x18, 0x62, 0x24, 0x6c, 0x90, 0xb8, 0xc1, 0x92, 0x0c, 0x31,
+ 0x92, 0x37, 0x48, 0xde, 0x60, 0x49, 0x46, 0x44, 0xec, 0xc0, 0x0e, 0xf6,
+ 0xd0, 0x0e, 0x6e, 0xd0, 0x0e, 0xef, 0x40, 0x0e, 0xf5, 0xc0, 0x0e, 0xe5,
+ 0xe0, 0x06, 0xe6, 0xc0, 0x0e, 0xe1, 0x70, 0x0e, 0xf3, 0x30, 0x25, 0x08,
+ 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4,
+ 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x61, 0xc4, 0x12, 0x0e, 0xe9,
+ 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef,
+ 0xe0, 0x0e, 0x53, 0x02, 0x62, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e,
+ 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5,
+ 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee,
+ 0x30, 0x25, 0x30, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3,
+ 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef,
+ 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x85, 0x40,
+ 0x14, 0xc6, 0x19, 0xa1, 0x84, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0xd8, 0x43,
+ 0x39, 0xc8, 0x03, 0x3d, 0x94, 0x03, 0x3e, 0x4c, 0x09, 0xd6, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
@@ -289,70 +550,65 @@
0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
- 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, 0x44,
- 0x13, 0x71, 0x01, 0x00, 0x61, 0x20, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
- 0x13, 0x04, 0x47, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x14, 0x47, 0x00, 0xa8, 0x95, 0x41, 0x11, 0x94, 0x00, 0xa1, 0x42, 0x20,
- 0x31, 0x03, 0x40, 0x61, 0x06, 0x80, 0xc0, 0x08, 0xc0, 0x18, 0x01, 0x08,
- 0x82, 0x20, 0xfe, 0x01, 0x33, 0x11, 0x0c, 0x12, 0x14, 0x33, 0x11, 0x0c,
- 0x12, 0x14, 0xe3, 0x11, 0x0e, 0x64, 0x41, 0x14, 0x94, 0x59, 0x82, 0x60,
- 0xa0, 0x02, 0x81, 0x03, 0xe0, 0x0c, 0x86, 0x0b, 0x9a, 0x8c, 0x47, 0x44,
- 0x94, 0x16, 0x50, 0x50, 0x06, 0x19, 0x82, 0x25, 0xb2, 0xc0, 0x90, 0xcf,
- 0x2c, 0x81, 0x30, 0x50, 0x81, 0xf8, 0x41, 0x50, 0x09, 0x03, 0x15, 0x01,
- 0x11, 0x44, 0xc2, 0x18, 0x42, 0x21, 0xcc, 0x31, 0x40, 0x41, 0x18, 0x0c,
- 0x32, 0x04, 0xd1, 0x75, 0x45, 0x93, 0xf1, 0x08, 0xce, 0x23, 0x83, 0x80,
- 0x82, 0x62, 0x01, 0x21, 0x1f, 0x0b, 0x10, 0xf8, 0x98, 0x92, 0x06, 0x30,
- 0x18, 0x6e, 0x08, 0x34, 0x30, 0x98, 0x65, 0x18, 0x84, 0x60, 0x3c, 0xc2,
- 0x22, 0x03, 0x35, 0x88, 0x06, 0x23, 0x02, 0xa2, 0x00, 0x6c, 0x62, 0x03,
- 0x18, 0x0c, 0x37, 0x04, 0x1d, 0x18, 0xcc, 0x32, 0x10, 0x41, 0x30, 0x1e,
- 0x91, 0x9d, 0x41, 0x1b, 0x9c, 0x01, 0x05, 0x65, 0x3c, 0x62, 0x4b, 0x83,
- 0x37, 0x08, 0x03, 0x0a, 0xca, 0x78, 0x44, 0xb7, 0x06, 0x71, 0x40, 0x06,
- 0x14, 0x94, 0xf1, 0x88, 0xaf, 0x0d, 0xe6, 0xe0, 0x0c, 0x28, 0x28, 0xe3,
- 0x11, 0x60, 0xf0, 0x06, 0x75, 0xf0, 0x06, 0x83, 0x11, 0x01, 0x52, 0x00,
- 0xe3, 0x11, 0x61, 0x00, 0x07, 0x76, 0x80, 0x06, 0x83, 0x11, 0xc1, 0x51,
- 0x00, 0xe3, 0x11, 0x62, 0x10, 0x07, 0x77, 0xa0, 0x06, 0x83, 0x11, 0x81,
- 0x51, 0x00, 0xe3, 0x11, 0x63, 0x20, 0x07, 0x78, 0xc0, 0x06, 0x83, 0x11,
- 0x41, 0x51, 0x00, 0xf7, 0x06, 0x2d, 0xc6, 0x13, 0xe6, 0x20, 0xa0, 0x80,
- 0x8c, 0x21, 0x04, 0x7c, 0x30, 0xc7, 0xc0, 0x06, 0x41, 0x1f, 0x8c, 0x21,
- 0x0c, 0x7f, 0x30, 0xc7, 0x20, 0x04, 0xa0, 0x30, 0xc7, 0x10, 0xb8, 0x41,
- 0x1f, 0xcc, 0x31, 0x04, 0x6e, 0xc0, 0x07, 0x83, 0x0c, 0x41, 0x1c, 0xdc,
- 0x81, 0x05, 0x95, 0x7c, 0x66, 0x09, 0x8a, 0x81, 0x0a, 0x44, 0x25, 0x88,
- 0xaa, 0x18, 0xa8, 0x08, 0x08, 0x22, 0x2a, 0xc6, 0x10, 0x0a, 0x61, 0x8e,
- 0xc1, 0x0e, 0x82, 0x53, 0x18, 0x64, 0x08, 0xee, 0xa0, 0x0f, 0xae, 0x68,
- 0x32, 0x1e, 0x51, 0x07, 0xa4, 0xa0, 0x0a, 0x01, 0x05, 0xc5, 0x02, 0x42,
- 0x3e, 0x16, 0x20, 0xf0, 0x31, 0xe5, 0x15, 0x60, 0x30, 0xdc, 0x10, 0x80,
- 0x02, 0x18, 0xcc, 0x32, 0x18, 0x45, 0x30, 0xdb, 0x00, 0x0a, 0x03, 0x30,
- 0xdb, 0x10, 0xf8, 0x41, 0x90, 0x41, 0x40, 0x0c, 0x08, 0x00, 0x00, 0x00,
- 0x5b, 0x86, 0x21, 0x78, 0x83, 0x2d, 0x03, 0x12, 0xbc, 0xc1, 0x96, 0x61,
- 0x0a, 0xde, 0x60, 0xcb, 0xa0, 0x05, 0x6f, 0xb0, 0x65, 0x80, 0x83, 0xe0,
- 0x0d, 0xb6, 0x0c, 0xa1, 0x10, 0xbc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d,
+ 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xd4, 0x63, 0x11, 0xc3,
+ 0x30, 0x0c, 0x63, 0x11, 0x82, 0x20, 0x08, 0x63, 0x11, 0x41, 0x10, 0x04,
+ 0xb4, 0x25, 0x50, 0x06, 0x45, 0x40, 0x3d, 0x02, 0x40, 0x33, 0x03, 0x40,
+ 0x32, 0x03, 0x40, 0x31, 0x03, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcb, 0x63,
+ 0x3d, 0x14, 0x94, 0xf1, 0x08, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3,
+ 0x50, 0x20, 0x26, 0x04, 0xf2, 0x19, 0x8f, 0x90, 0x2a, 0xae, 0xa1, 0xa0,
+ 0x0c, 0x32, 0x1c, 0x09, 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c,
+ 0x47, 0x5c, 0x5a, 0x18, 0x40, 0x14, 0x94, 0x41, 0x06, 0xc6, 0xb1, 0x4c,
+ 0x08, 0xe4, 0x63, 0x45, 0x00, 0x9f, 0xf1, 0x08, 0xee, 0x33, 0x03, 0x8b,
+ 0x82, 0x32, 0xc8, 0x10, 0x4d, 0x9c, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0,
+ 0x33, 0x1e, 0x01, 0x06, 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21,
+ 0xc0, 0x36, 0x0b, 0x2a, 0xf9, 0x0c, 0x32, 0x0c, 0x5a, 0x18, 0x58, 0x30,
+ 0xc9, 0xc7, 0x86, 0x00, 0x3e, 0x83, 0x0c, 0x46, 0x57, 0x06, 0x16, 0x44,
+ 0xf2, 0xb1, 0x21, 0x80, 0xcf, 0x20, 0x43, 0x02, 0x06, 0x69, 0x60, 0xc1,
+ 0x23, 0x1f, 0x1b, 0x02, 0xf8, 0x8c, 0x47, 0xb4, 0x41, 0x1c, 0xe0, 0x01,
+ 0x1a, 0x50, 0x50, 0x06, 0x19, 0x82, 0x32, 0x40, 0x03, 0x0b, 0xc4, 0x40,
+ 0x3e, 0x83, 0x0c, 0xc3, 0x19, 0xb8, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41,
+ 0x86, 0x22, 0x0d, 0xe2, 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0xc7, 0x1a,
+ 0xd0, 0x81, 0x05, 0x9a, 0x7c, 0x06, 0x19, 0xf4, 0xc0, 0x0d, 0xe0, 0xc0,
+ 0xb2, 0x40, 0x3e, 0x83, 0x0c, 0x7c, 0x00, 0x07, 0x76, 0x60, 0x4e, 0x20,
+ 0x1f, 0x4b, 0x06, 0xf8, 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16,
+ 0x20, 0xf0, 0xb1, 0xa0, 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c,
+ 0x43, 0x30, 0x0a, 0x41, 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x5b, 0x86, 0x20, 0x80, 0x83, 0x2d, 0xc3, 0x10, 0xc0, 0xc1, 0x96, 0xe1,
+ 0x08, 0xe0, 0x60, 0xcb, 0xc0, 0x04, 0x70, 0xb0, 0x65, 0x88, 0x02, 0x38,
+ 0xd8, 0x32, 0x58, 0x01, 0x1c, 0x6c, 0x19, 0xc6, 0x20, 0x80, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
- 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x90, 0x0b, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2c, 0x09, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
- 0xe1, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x48, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
- 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
- 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
- 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
- 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
- 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x08, 0x02, 0xb0, 0x00,
- 0xd5, 0x06, 0x63, 0x18, 0x80, 0x05, 0xa8, 0x36, 0x18, 0x04, 0x01, 0x2c,
- 0x40, 0xb5, 0x81, 0x5c, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09,
- 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a,
- 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72,
- 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72,
- 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73,
- 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21,
- 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21,
- 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81,
- 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73,
- 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79,
- 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79,
- 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0x80,
- 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
@@ -370,461 +626,229 @@
0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
- 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72,
- 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78,
- 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79,
- 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36,
- 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21,
- 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21,
- 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x68, 0x03, 0x73,
- 0x80, 0x87, 0x38, 0xb0, 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70,
- 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70,
- 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2,
- 0x1e, 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1,
- 0x0d, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70,
- 0x60, 0x87, 0x79, 0x28, 0x07, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18, 0x88, 0x02, 0x00, 0x00,
- 0x89, 0x20, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
- 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
- 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
- 0x10, 0x50, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0xe7,
- 0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x39, 0x0f, 0xf6, 0x12, 0xd1, 0x44,
- 0x5c, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x3f, 0x80, 0xa0, 0x10, 0x03, 0x16,
- 0x82, 0x18, 0x44, 0x10, 0x82, 0x24, 0x08, 0x33, 0x4d, 0xe3, 0xc0, 0x0e,
- 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xed, 0x50, 0x0e, 0xf4, 0x10, 0x0e,
- 0xec, 0xa0, 0x07, 0x7a, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xf2, 0x90, 0x0e,
- 0xf8, 0x80, 0x82, 0x32, 0x88, 0x60, 0x08, 0x73, 0x04, 0x60, 0x50, 0x8c,
- 0x41, 0xc8, 0x39, 0x88, 0xd2, 0x40, 0x00, 0x99, 0x39, 0x02, 0x50, 0x18,
- 0x44, 0x08, 0x84, 0x29, 0x80, 0x11, 0x80, 0x61, 0x04, 0x02, 0x99, 0x23,
- 0x08, 0x28, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
- 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
- 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03,
- 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0,
- 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0,
- 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80,
- 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0,
- 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
- 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
- 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
- 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
- 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10,
- 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60,
- 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
- 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0,
- 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30,
- 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80,
- 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
- 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
- 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
- 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20,
- 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
- 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20,
- 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
- 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0,
- 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20,
- 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20,
- 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
- 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40,
- 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
- 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0,
- 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x51, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00,
- 0x09, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90,
- 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x42, 0x25, 0x50, 0x10, 0x23,
- 0x00, 0x05, 0x18, 0x50, 0x04, 0x05, 0x52, 0x06, 0x85, 0x40, 0x6d, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0xb0, 0x00, 0x43, 0x0c, 0x24, 0x40, 0x04, 0x64, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0x59, 0x06, 0x24, 0x40, 0x02, 0x64,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x84, 0xe5, 0x60, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x91, 0xa5, 0xcd, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x96, 0x84, 0x61,
- 0x10, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6,
- 0xe2, 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6,
- 0x56, 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x58,
- 0x16, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69,
- 0x6f, 0x6e, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8,
- 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd,
- 0x85, 0xd1, 0xd1, 0x90, 0x09, 0x4b, 0x93, 0x73, 0x09, 0x93, 0x3b, 0xfb,
- 0x72, 0x0b, 0x6b, 0x2b, 0x23, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6,
- 0xe6, 0x36, 0x44, 0x59, 0x9a, 0xc5, 0x59, 0x9e, 0x05, 0x5a, 0x22, 0x46,
- 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x6f,
- 0x75, 0x74, 0x70, 0x75, 0x74, 0xcc, 0xce, 0xca, 0xdc, 0xca, 0xe4, 0xc2,
- 0xe8, 0xca, 0xc8, 0x50, 0x70, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4,
- 0xc8, 0x88, 0xec, 0x64, 0xbe, 0xcc, 0x52, 0x68, 0x98, 0xb1, 0xbd, 0x85,
- 0xd1, 0xc9, 0x10, 0xa1, 0x2b, 0xc3, 0x1b, 0x7b, 0x7b, 0x93, 0x23, 0x1b,
- 0xc2, 0x2c, 0xd3, 0x42, 0x2d, 0xce, 0x52, 0x2d, 0xd0, 0x62, 0x0d, 0x21,
- 0x16, 0x69, 0xb9, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99,
- 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3,
- 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96,
- 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25,
- 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf,
- 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e,
- 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e,
- 0xd9, 0x10, 0x0e, 0x19, 0x96, 0x6c, 0xd1, 0x90, 0x01, 0x09, 0x96, 0x6d,
- 0xe1, 0x10, 0x61, 0xe9, 0x10, 0x61, 0x71, 0x96, 0x6a, 0x81, 0x96, 0x88,
- 0x09, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0xd9, 0xdc, 0x10, 0x0e,
- 0x09, 0x96, 0x6c, 0xd1, 0x90, 0x00, 0x09, 0x96, 0x6d, 0xe1, 0x10, 0x61,
- 0xe9, 0x10, 0x61, 0x71, 0x96, 0x6a, 0x81, 0x96, 0x8f, 0x4f, 0x58, 0x9a,
- 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e,
- 0x19, 0x11, 0x33, 0xb6, 0xb7, 0x30, 0x3a, 0x1a, 0x3c, 0x1a, 0x2a, 0x70,
- 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0xc0, 0x00,
- 0x29, 0x96, 0x6c, 0x09, 0x03, 0x84, 0x58, 0x34, 0xa4, 0x40, 0x82, 0x65,
- 0x5b, 0x38, 0x84, 0x58, 0x3a, 0xc4, 0x58, 0x9c, 0x45, 0x0c, 0x16, 0x68,
- 0x19, 0x03, 0x26, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d,
- 0x43, 0xc0, 0x00, 0x39, 0x96, 0x6c, 0x09, 0x03, 0x84, 0x58, 0x34, 0xe4,
- 0x40, 0x82, 0x65, 0x5b, 0x38, 0x84, 0x58, 0x3a, 0xc4, 0x58, 0x9c, 0x45,
- 0x0c, 0x16, 0x68, 0x29, 0x03, 0x36, 0x61, 0x69, 0x72, 0x2e, 0x76, 0x65,
- 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x24, 0xea, 0xd2, 0xdc, 0xe8,
- 0x38, 0xd8, 0xa5, 0x91, 0x0d, 0x61, 0x10, 0x64, 0x39, 0x83, 0xc5, 0x59,
- 0xd0, 0x60, 0x81, 0x96, 0x34, 0x18, 0xa2, 0x2c, 0xde, 0x02, 0x06, 0x0b,
- 0x19, 0x2c, 0x66, 0xb0, 0xa8, 0xc1, 0x10, 0x43, 0x01, 0x16, 0x6c, 0x59,
- 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74,
- 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca,
- 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x8b,
- 0x1b, 0x0c, 0x31, 0x96, 0x36, 0x58, 0xde, 0xa0, 0x49, 0x86, 0x18, 0x0b,
- 0x1c, 0x2c, 0x70, 0xd0, 0x24, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
- 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x41,
- 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90,
- 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x81, 0x30, 0x82, 0x0a,
- 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8,
- 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98,
- 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x10, 0x23, 0xa6, 0x70, 0x48,
- 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60,
- 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70,
- 0x87, 0x79, 0x98, 0x42, 0x18, 0x88, 0xc2, 0x8c, 0x50, 0xc2, 0x21, 0x1d,
- 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x81, 0x1e, 0xca, 0x01, 0x1f,
- 0xa6, 0x04, 0x6c, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
- 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
- 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
- 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
- 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
- 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
- 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
- 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
- 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
- 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
- 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
- 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
- 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
- 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
- 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
- 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
- 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
- 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
- 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
- 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
- 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
- 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
- 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
- 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
- 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
- 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
- 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
- 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
- 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
- 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
- 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
- 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83,
- 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
- 0x6d, 0x00, 0x00, 0x00, 0x13, 0x04, 0x47, 0x2c, 0x10, 0x00, 0x00, 0x00,
- 0x07, 0x00, 0x00, 0x00, 0x14, 0x47, 0x00, 0xa8, 0x95, 0x41, 0x11, 0x94,
- 0x00, 0x8d, 0x19, 0x00, 0x0a, 0x33, 0x00, 0x04, 0xc6, 0x08, 0x40, 0x10,
- 0x04, 0xf1, 0x6f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x33, 0x11, 0x0c, 0x12,
- 0x14, 0x33, 0x11, 0x0c, 0x12, 0x14, 0xe3, 0x11, 0x0d, 0x64, 0x41, 0x14,
- 0x94, 0x59, 0x82, 0x60, 0xa0, 0x02, 0x81, 0x03, 0xe0, 0x0c, 0x86, 0x0b,
- 0x9a, 0x8c, 0x47, 0x40, 0x94, 0x16, 0x50, 0x50, 0x06, 0x19, 0x82, 0x05,
- 0xb2, 0xc0, 0x90, 0xcf, 0x2c, 0x81, 0x30, 0x50, 0x81, 0x80, 0x42, 0x50,
- 0x09, 0x03, 0x15, 0x01, 0x11, 0x44, 0xc2, 0x18, 0x42, 0x21, 0xcc, 0x31,
- 0x40, 0x41, 0x18, 0x0c, 0x32, 0x04, 0x91, 0x75, 0x45, 0x93, 0xf1, 0x88,
- 0xcd, 0x23, 0x83, 0x80, 0x82, 0x62, 0x01, 0x21, 0x1f, 0x0b, 0x10, 0xf8,
- 0x98, 0xa2, 0x06, 0x30, 0x18, 0x6e, 0x08, 0xc8, 0x00, 0x0c, 0x66, 0x19,
- 0x06, 0x21, 0x18, 0x8f, 0xb0, 0xc8, 0x40, 0x0d, 0xa2, 0xc1, 0x88, 0x80,
- 0x28, 0x00, 0x9b, 0xda, 0x00, 0x06, 0xc3, 0x0d, 0xc1, 0x19, 0x80, 0xc1,
- 0x2c, 0x03, 0x11, 0x04, 0xe3, 0x11, 0xd9, 0x19, 0xb4, 0xc1, 0x19, 0x50,
- 0x50, 0xc6, 0x23, 0xb6, 0x34, 0x78, 0x03, 0x30, 0xa0, 0xa0, 0x8c, 0x47,
- 0x74, 0x6b, 0x10, 0x07, 0x63, 0x40, 0x41, 0x19, 0x8f, 0xf8, 0xda, 0x60,
- 0x0e, 0xcc, 0x80, 0x82, 0x32, 0x1e, 0x01, 0x06, 0x6f, 0x50, 0x07, 0x6f,
- 0x30, 0x18, 0x11, 0x20, 0x05, 0x30, 0x1e, 0x11, 0x06, 0x70, 0x60, 0x07,
- 0x67, 0x30, 0x18, 0x11, 0x1c, 0x05, 0x30, 0x1e, 0x21, 0x06, 0x71, 0x70,
- 0x07, 0x69, 0x30, 0x18, 0x11, 0x18, 0x05, 0x30, 0x1e, 0x31, 0x06, 0x72,
- 0x80, 0x07, 0x6b, 0x30, 0x18, 0x11, 0x14, 0x05, 0x70, 0x6e, 0xd0, 0x62,
- 0x3c, 0x61, 0x0e, 0x02, 0x0a, 0xc8, 0x18, 0x42, 0xc0, 0x07, 0x73, 0x0c,
- 0x6c, 0x10, 0xf4, 0xc1, 0x18, 0xc2, 0x00, 0x0a, 0x73, 0x0c, 0x42, 0x10,
- 0x0a, 0x73, 0x0c, 0x41, 0x1b, 0xf8, 0xc1, 0x1c, 0x43, 0xf0, 0x06, 0x7d,
- 0x30, 0xc8, 0x10, 0xc4, 0x81, 0x1d, 0x58, 0x50, 0xc9, 0x67, 0x96, 0xa0,
- 0x18, 0xa8, 0x40, 0x58, 0x82, 0xa8, 0x8a, 0x81, 0x8a, 0x80, 0x20, 0xa2,
- 0x62, 0x0c, 0xa1, 0x10, 0xe6, 0x18, 0xec, 0x20, 0x38, 0x85, 0x41, 0x86,
- 0xe0, 0x0e, 0xf8, 0xe0, 0x8a, 0x26, 0xe3, 0x11, 0x75, 0x40, 0x0a, 0xaa,
- 0x10, 0x50, 0x50, 0x2c, 0x20, 0xe4, 0x63, 0x01, 0x02, 0x1f, 0x53, 0x60,
- 0x01, 0x06, 0xc3, 0x0d, 0x81, 0x2a, 0x80, 0xc1, 0x2c, 0x83, 0x51, 0x04,
- 0xe3, 0x09, 0xa8, 0x70, 0x51, 0x40, 0x66, 0x1b, 0x44, 0xa1, 0x00, 0x66,
- 0x1b, 0x02, 0x21, 0xc8, 0x20, 0x20, 0x06, 0x00, 0x0a, 0x00, 0x00, 0x00,
- 0x5b, 0x86, 0x21, 0x88, 0x83, 0x2d, 0x03, 0x12, 0xc4, 0xc1, 0x96, 0x61,
- 0x0a, 0xe2, 0x60, 0xcb, 0xa0, 0x05, 0x71, 0xb0, 0x65, 0x80, 0x83, 0x20,
- 0x0e, 0xb6, 0x0c, 0xa1, 0x10, 0xc4, 0xc1, 0x96, 0x01, 0x15, 0x82, 0x38,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x60, 0x08, 0x01, 0xb0, 0x00, 0x15, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x0e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x24, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x30, 0x88, 0x10, 0x04, 0x45, 0x08, 0xa1, 0x19, 0x08,
+ 0x98, 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18, 0x01, 0x00, 0x00, 0x00,
+ 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
+ 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71,
+ 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38,
+ 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06,
+ 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e,
+ 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e,
+ 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07,
+ 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07,
+ 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f,
+ 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07,
+ 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07,
+ 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f,
+ 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07,
+ 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06,
+ 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07,
+ 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07,
+ 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07,
+ 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07,
+ 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f,
+ 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
+ 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e,
+ 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x21, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x0c, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0xb2, 0x12, 0x18, 0x01, 0x28, 0x90, 0x42, 0x28, 0x08,
+ 0xba, 0x11, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
+ 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9,
+ 0x34, 0xbd, 0xb2, 0x21, 0x86, 0x11, 0x14, 0x80, 0x41, 0x70, 0x0d, 0x82,
+ 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca,
+ 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40,
+ 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64,
+ 0x5c, 0x62, 0x5c, 0x68, 0x72, 0x52, 0x86, 0x08, 0x85, 0x30, 0xc4, 0x30,
+ 0x02, 0xa3, 0x30, 0x04, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90,
+ 0xa2, 0x30, 0x02, 0x23, 0x30, 0x04, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84,
+ 0xe2, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6,
+ 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6,
+ 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x28, 0x12, 0x96, 0x41,
+ 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b,
+ 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97,
+ 0x59, 0x19, 0xdd, 0x18, 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b,
+ 0xd9, 0x10, 0xa1, 0x58, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61,
+ 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa2, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22,
+ 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46,
+ 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f,
+ 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18,
+ 0x1d, 0xcd, 0x10, 0xa4, 0x78, 0x0c, 0xa1, 0x80, 0x8a, 0x68, 0x88, 0x50,
+ 0x48, 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4,
+ 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d,
+ 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b,
+ 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23,
+ 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d,
+ 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e,
+ 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17,
+ 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c,
+ 0x9a, 0x5e, 0x19, 0x99, 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f,
+ 0xb7, 0xb0, 0xb6, 0x32, 0x0e, 0x63, 0x6f, 0x6c, 0x43, 0xc0, 0xc0, 0x10,
+ 0x0a, 0xaa, 0xa8, 0x8c, 0xa1, 0xb0, 0x0c, 0xc1, 0x08, 0x8a, 0xab, 0xc0,
+ 0x8c, 0xa1, 0xc8, 0x8c, 0xa1, 0x80, 0x8a, 0xa8, 0xd0, 0x8a, 0x6d, 0x88,
+ 0x50, 0x70, 0x43, 0x0c, 0x02, 0x28, 0xa6, 0xa2, 0xe3, 0xf3, 0xd6, 0xe6,
+ 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26,
+ 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05,
+ 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88, 0x50, 0x80, 0xc1, 0x10, 0xa3, 0xf8,
+ 0x8a, 0x30, 0x38, 0x8c, 0x21, 0x46, 0x21, 0x06, 0x85, 0x18, 0x1c, 0xc6,
+ 0x88, 0x88, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d,
+ 0xc8, 0xa1, 0x1e, 0xd8, 0xa1, 0x1c, 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c,
+ 0xce, 0x61, 0x1e, 0xa6, 0x04, 0xc1, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e,
+ 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a,
+ 0x30, 0x8c, 0x58, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c,
+ 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, 0x40, 0x8c, 0xa0,
+ 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c,
+ 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e,
+ 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xa6, 0x04, 0xc6, 0x88, 0x29, 0x1c,
+ 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d,
+ 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d,
+ 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x88, 0xc2, 0x38, 0x23, 0x98, 0x70, 0x48,
+ 0x07, 0x79, 0x70, 0x03, 0x73, 0x90, 0x87, 0x70, 0x38, 0x87, 0x76, 0x28,
+ 0x07, 0x77, 0xa0, 0x87, 0x29, 0x81, 0x07, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+ 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
+ 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
+ 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
+ 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
+ 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
+ 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
+ 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
+ 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
+ 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
+ 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
+ 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
+ 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
+ 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
+ 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
+ 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
+ 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
+ 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
+ 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
+ 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
+ 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
+ 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83,
+ 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87,
+ 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90,
+ 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20,
+ 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc,
+ 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
+ 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
+ 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
+ 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e,
+ 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e,
+ 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54,
+ 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39,
+ 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c,
+ 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07,
+ 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82,
+ 0x0c, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05,
+ 0x25, 0x83, 0x80, 0x18, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x18,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x98, 0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
- 0x21, 0x0c, 0x00, 0x00, 0x23, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x04, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
- 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02,
- 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
- 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
- 0x81, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, 0x40,
- 0x2e, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x54, 0xc4, 0x38,
- 0xbc, 0x83, 0x3c, 0xc8, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xb0, 0x43, 0x3e,
- 0xb4, 0x81, 0x3c, 0xbc, 0x43, 0x3d, 0xb8, 0x03, 0x39, 0x94, 0x03, 0x39,
- 0xb4, 0x01, 0x39, 0xa4, 0x83, 0x3d, 0xa4, 0x03, 0x39, 0x94, 0x43, 0x1b,
- 0xcc, 0x43, 0x3c, 0xc8, 0x03, 0x3d, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b,
- 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30,
- 0x0f, 0xe5, 0x00, 0x10, 0xe4, 0x90, 0x0e, 0xf3, 0x10, 0x0e, 0xe2, 0xc0,
- 0x0e, 0xe5, 0xd0, 0x06, 0xf4, 0x10, 0x0e, 0xe9, 0xc0, 0x0e, 0x6d, 0x30,
- 0x0e, 0xe1, 0xc0, 0x0e, 0xec, 0x30, 0x0f, 0x80, 0x39, 0x84, 0x03, 0x3b,
- 0xcc, 0x43, 0x39, 0x00, 0x04, 0x3b, 0x94, 0xc3, 0x3c, 0xcc, 0x43, 0x1b,
- 0xc0, 0x83, 0x3c, 0x94, 0xc3, 0x38, 0xa4, 0xc3, 0x3c, 0x94, 0x43, 0x1b,
- 0x98, 0x03, 0x3c, 0xb4, 0x43, 0x38, 0x90, 0x03, 0x40, 0x0f, 0xf2, 0x50,
- 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, 0x10,
- 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, 0x40,
- 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, 0x00,
- 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x83, 0x3b, 0xbc, 0x43, 0x1b,
- 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b,
- 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b,
- 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, 0x3b,
- 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, 0x3a,
- 0xb8, 0x83, 0x39, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b,
- 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00,
- 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0xa0, 0x0e, 0xf5, 0xd0, 0x0e, 0xf0, 0xd0,
- 0x06, 0xf4, 0x10, 0x0e, 0xe2, 0xc0, 0x0e, 0xe5, 0x30, 0x0f, 0x80, 0x39,
- 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b,
- 0xb8, 0x43, 0x38, 0xb8, 0xc3, 0x3c, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b,
- 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50,
- 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xe7, 0xe0,
- 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0xa0, 0x0f, 0xe5, 0x20, 0x0f, 0xef, 0x30,
- 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80,
- 0x0e, 0x80, 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0xc4, 0x3c,
- 0xd0, 0x43, 0x38, 0x8c, 0xc3, 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, 0x3b,
- 0xd0, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xb4, 0x81, 0x38,
- 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, 0x3a,
- 0xe8, 0x43, 0x39, 0x00, 0x78, 0x00, 0x10, 0xf4, 0x10, 0x0e, 0xf2, 0x70,
- 0x0e, 0xe5, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xe5, 0x10, 0x0e, 0xf4, 0x50,
- 0x0f, 0xf2, 0x50, 0x0e, 0xf3, 0x00, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1c,
- 0xd8, 0x01, 0x40, 0xd4, 0x83, 0x3b, 0xcc, 0x43, 0x38, 0x98, 0x43, 0x39,
- 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a,
- 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0x51, 0x0f, 0xf3, 0x50,
- 0x0e, 0x6d, 0x30, 0x0f, 0xef, 0x60, 0x0e, 0xf4, 0xd0, 0x06, 0xe6, 0xc0,
- 0x0e, 0xef, 0x10, 0x0e, 0xf4, 0x00, 0x98, 0x43, 0x38, 0xb0, 0xc3, 0x3c,
- 0x94, 0x03, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
- 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84,
- 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c,
- 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x24, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30,
- 0x88, 0x10, 0x08, 0x45, 0x08, 0xa1, 0x19, 0x08, 0x98, 0x23, 0x00, 0x83,
- 0x39, 0x02, 0x50, 0x18, 0x01, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48,
- 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
- 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0,
- 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8,
- 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a,
- 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71,
- 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a,
- 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a,
- 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73,
- 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
- 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
- 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
- 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a,
- 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78,
- 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72,
- 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76,
- 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a,
- 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73,
- 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
- 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
- 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
- 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a,
- 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
- 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78,
- 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79,
- 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75,
- 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72,
- 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6,
- 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a,
- 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72,
- 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71,
- 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a,
- 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
- 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72,
- 0x30, 0x84, 0x21, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8,
- 0x02, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x0c,
- 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xb2,
- 0x11, 0x80, 0x12, 0x28, 0x90, 0x82, 0xa0, 0x1b, 0x01, 0x00, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
- 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09,
- 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6,
- 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05,
- 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x50, 0x00,
- 0x43, 0x0c, 0x43, 0x30, 0x08, 0x23, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6,
- 0x36, 0x04, 0x29, 0x06, 0x43, 0x30, 0x04, 0x23, 0xe0, 0x16, 0x96, 0x26,
- 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6,
- 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0x28, 0x0a, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
- 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61,
- 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe2,
- 0x60, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1,
- 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95,
- 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85,
- 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x8a, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7,
- 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97,
- 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96,
- 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x28, 0x16, 0x46, 0x61, 0x69,
- 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
- 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1,
- 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0x8a, 0xc6, 0x08, 0x0a, 0xa7, 0x78,
- 0x86, 0x08, 0x05, 0x44, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc,
- 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59,
- 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17,
- 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2,
- 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca,
- 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9,
- 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9,
- 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x91, 0x09, 0x4b, 0x93, 0x73, 0x09, 0x93,
- 0x3b, 0xfb, 0x72, 0x0b, 0x6b, 0x2b, 0xe3, 0x30, 0xf6, 0xc6, 0x36, 0x04,
- 0x0c, 0x8c, 0xa0, 0x90, 0x8a, 0xc9, 0x18, 0x0a, 0xca, 0x08, 0x0c, 0xa1,
- 0xa8, 0x0a, 0xcb, 0x18, 0x8a, 0xcb, 0x18, 0x0a, 0xa7, 0x78, 0x0a, 0xac,
- 0xc8, 0x86, 0x08, 0x85, 0x36, 0xc4, 0x20, 0x80, 0x22, 0x2a, 0x36, 0x3e,
- 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63,
- 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86,
- 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x85, 0x37, 0xc4,
- 0x28, 0xba, 0xe2, 0x3b, 0x8a, 0x21, 0x46, 0x01, 0x06, 0x05, 0x18, 0x1c,
- 0xc5, 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81,
- 0x1c, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x10, 0x8c, 0x58, 0xc2, 0x21,
- 0x1d, 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1,
- 0x1d, 0xdc, 0x61, 0x4a, 0x20, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1,
- 0x0d, 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1,
- 0x1c, 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1,
- 0x1d, 0xa6, 0x04, 0xc4, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60,
- 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1,
- 0x1d, 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10,
- 0x06, 0xa2, 0x30, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x73,
- 0x90, 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29,
- 0x01, 0x07, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00,
- 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
- 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
- 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
- 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
- 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
- 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
- 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
- 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
- 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
- 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
- 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
- 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
- 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
- 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
- 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
- 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
- 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
- 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
- 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
- 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
- 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
- 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
- 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
- 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
- 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
- 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
- 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
- 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
- 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
- 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
- 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82,
- 0x0c, 0x7f, 0x11, 0x01, 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05,
- 0x25, 0x83, 0x80, 0x18, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x08,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x68, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x97, 0x02, 0x00, 0x00,
- 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
- 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
- 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
- 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
- 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
- 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
- 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x05, 0xb0, 0x00, 0xd5, 0x06, 0x73, 0x19,
- 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x18, 0x40, 0x02, 0x2a, 0x62, 0x1c,
- 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xd8, 0x21, 0x1f,
- 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e, 0xdc, 0x81, 0x1c, 0xca, 0x81, 0x1c,
- 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e, 0xd2, 0x81, 0x1c, 0xca, 0xa1, 0x0d,
- 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d,
- 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98,
- 0x87, 0x72, 0x00, 0x08, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07, 0x71, 0x60,
- 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08, 0x87, 0x74, 0x60, 0x87, 0x36, 0x18,
- 0x87, 0x70, 0x60, 0x07, 0x76, 0x98, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d,
- 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d, 0xca, 0x61, 0x1e, 0xe6, 0xa1, 0x0d,
- 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c, 0xd2, 0x61, 0x1e, 0xca, 0xa1, 0x0d,
- 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c, 0xc8, 0x01, 0xa0, 0x07, 0x79, 0xa8,
- 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08,
- 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0,
- 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x00,
- 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0xc1, 0x1d, 0xde, 0xa1, 0x0d,
- 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d,
- 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d,
- 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d,
- 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d,
- 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d,
- 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00,
- 0x08, 0x77, 0x78, 0x87, 0x36, 0x50, 0x87, 0x7a, 0x68, 0x07, 0x78, 0x68,
- 0x03, 0x7a, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x98, 0x07, 0xc0, 0x1c,
- 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d,
- 0xdc, 0x21, 0x1c, 0xdc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d,
- 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28,
- 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x79, 0x48, 0x87, 0x73, 0x70,
- 0x87, 0x72, 0x20, 0x87, 0x36, 0xd0, 0x87, 0x72, 0x90, 0x87, 0x77, 0x98,
- 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40,
- 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x62, 0x1e,
- 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d,
- 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c,
- 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d,
- 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38,
- 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8,
- 0x07, 0x79, 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e,
- 0xec, 0x00, 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28,
- 0x87, 0x36, 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60,
- 0x87, 0x77, 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
- 0xca, 0x01, 0xd8, 0x40, 0x10, 0x01, 0xb0, 0x6c, 0x20, 0x0a, 0x01, 0x58,
- 0x36, 0x20, 0xc6, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x03, 0x48, 0x40,
- 0x05, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x13, 0x86, 0x40, 0x18, 0x26, 0x0c, 0x44, 0x61, 0x00, 0x00, 0x00, 0x00,
+ 0x93, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x86, 0x30, 0x00, 0x0b, 0x50,
+ 0x6d, 0x30, 0x06, 0x02, 0x58, 0x80, 0x6a, 0x83, 0x41, 0x14, 0xc0, 0x02,
+ 0x54, 0x1b, 0x90, 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07, 0x80, 0x01, 0x24,
+ 0xa0, 0xda, 0x60, 0x18, 0x01, 0xb0, 0x00, 0xd5, 0x06, 0xe3, 0x10, 0x80,
+ 0x05, 0xa8, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, 0x1c, 0x00, 0x00, 0x00,
0x89, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
0x10, 0x48, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
- 0x08, 0x81, 0x70, 0x94, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xff, 0x44, 0x5c,
+ 0x08, 0x41, 0x70, 0x94, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xff, 0x44, 0x5c,
0x13, 0x15, 0x11, 0xbf, 0x3d, 0xfc, 0xd3, 0x18, 0x01, 0x30, 0x88, 0x40,
0x04, 0x17, 0x49, 0x53, 0x44, 0x09, 0x93, 0xff, 0x4b, 0x00, 0xf3, 0x2c,
0x44, 0xf4, 0x4f, 0x63, 0x04, 0xc0, 0x20, 0x82, 0x21, 0x14, 0x23, 0x04,
@@ -868,84 +892,88 @@
0xc2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81,
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x5a,
- 0x25, 0x30, 0x02, 0x50, 0x20, 0x05, 0x51, 0x04, 0x65, 0x50, 0x08, 0x04,
- 0x47, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
- 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84,
- 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d,
- 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c,
- 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26,
- 0x65, 0x88, 0xf0, 0x00, 0x43, 0x8c, 0x45, 0x58, 0x8a, 0x65, 0x60, 0xd1,
- 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0x79, 0x86, 0x45, 0x58, 0x84, 0x65,
- 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
- 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36,
- 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78, 0x0a, 0x72, 0x61, 0x69, 0x72,
- 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73,
- 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c,
- 0x65, 0x43, 0x84, 0xe7, 0x60, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd,
- 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89,
- 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d,
- 0x91, 0xa5, 0xcd, 0x85, 0x89, 0xb1, 0x95, 0x0d, 0x11, 0x9e, 0x84, 0x61,
- 0x10, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6,
- 0xe2, 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6,
- 0x56, 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78,
- 0x16, 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72,
- 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c,
- 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda,
- 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0x9e, 0x66,
- 0x19, 0x1e, 0xe7, 0x79, 0x86, 0x08, 0x0f, 0x44, 0x26, 0x2c, 0x4d, 0xce,
- 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a,
- 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39,
- 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba,
- 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f,
- 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde,
- 0xdc, 0x86, 0x40, 0xcb, 0xf0, 0x48, 0xcf, 0xf4, 0x50, 0x8f, 0xf3, 0x3c,
- 0x4f, 0xf5, 0x58, 0x94, 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce,
- 0xda, 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d,
- 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95,
- 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5,
- 0xf0, 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b,
- 0xa3, 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43,
- 0x84, 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0xb4, 0x08,
- 0x0f, 0xf6, 0x64, 0xcf, 0xf4, 0x68, 0x8f, 0xf3, 0x6c, 0x4f, 0xf5, 0x70,
- 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8,
- 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd,
- 0xa5, 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b,
- 0xa3, 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12,
- 0x96, 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce,
- 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d,
- 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d,
- 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a,
- 0x5e, 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60, 0xb0, 0x18, 0x8f, 0xf7,
- 0x7c, 0x0b, 0xf1, 0x80, 0xc1, 0x32, 0x2c, 0xc2, 0x13, 0x06, 0x8f, 0x18,
- 0x2c, 0xc4, 0x33, 0x06, 0x0b, 0xf1, 0x38, 0xcf, 0xf3, 0x54, 0x0f, 0x19,
- 0x70, 0x09, 0x4b, 0x93, 0x73, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b,
- 0xa3, 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x46,
- 0x8c, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0x8c, 0xc7, 0x8c,
- 0xed, 0x2d, 0x8c, 0x8e, 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc,
- 0x87, 0x03, 0x5d, 0x19, 0xde, 0x10, 0x6a, 0x39, 0x1e, 0x33, 0x78, 0xc0,
- 0x60, 0x19, 0x16, 0xe1, 0x39, 0x83, 0xc7, 0x79, 0xd0, 0xe0, 0xa9, 0x9e,
- 0x34, 0xe0, 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56,
- 0x26, 0xc7, 0x63, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc,
- 0x10, 0x69, 0x41, 0x9e, 0x35, 0x78, 0xc0, 0x60, 0x19, 0x16, 0xe1, 0x71,
- 0x1e, 0x36, 0x78, 0xaa, 0xa7, 0x0d, 0x86, 0x28, 0xcf, 0xf5, 0x74, 0x4f,
- 0x19, 0x3c, 0x6a, 0xf0, 0xb8, 0xc1, 0x10, 0x23, 0x01, 0x9e, 0xe8, 0x79,
- 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74,
- 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca,
- 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x8f,
- 0x1c, 0x0c, 0x31, 0x9e, 0x38, 0x78, 0xe6, 0x00, 0x4a, 0x86, 0x18, 0x0f,
- 0x1d, 0x3c, 0x74, 0x00, 0x25, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
- 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x41,
- 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90,
- 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x81, 0x30, 0x82, 0x0a,
- 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8,
- 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98,
- 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x10, 0x23, 0xa6, 0x70, 0x48,
- 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60,
- 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70,
- 0x87, 0x79, 0x98, 0x42, 0x18, 0x88, 0xc2, 0x8c, 0x60, 0xc2, 0x21, 0x1d,
- 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c,
- 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x70, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+ 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x10, 0x45, 0x50, 0x06, 0x04,
+ 0x47, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00,
+ 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9,
+ 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0x22, 0x3c, 0xc0, 0x52, 0x70, 0x0d, 0x82,
+ 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca,
+ 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40,
+ 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64,
+ 0x5c, 0x62, 0x5c, 0x68, 0x72, 0x52, 0x86, 0x08, 0x8f, 0x30, 0xc4, 0x58,
+ 0x84, 0xc5, 0x58, 0x06, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90,
+ 0xa7, 0x58, 0x84, 0x45, 0x58, 0x06, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84,
+ 0xe7, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6,
+ 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6,
+ 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78, 0x12, 0x96, 0x41,
+ 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b,
+ 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97,
+ 0x59, 0x19, 0xdd, 0x18, 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b,
+ 0xd9, 0x10, 0xe1, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61,
+ 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa7, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22,
+ 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46,
+ 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f,
+ 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18,
+ 0x1d, 0xcd, 0x10, 0xe4, 0x79, 0x96, 0xe1, 0x81, 0x9e, 0x68, 0x88, 0xf0,
+ 0x48, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2,
+ 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95,
+ 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93,
+ 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26,
+ 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee,
+ 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0xb4, 0x0c, 0x0f, 0xf5,
+ 0x54, 0x8f, 0xf5, 0x40, 0x4f, 0xf4, 0x5c, 0x0f, 0x46, 0x29, 0x2c, 0x4d,
+ 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd,
+ 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d,
+ 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19,
+ 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8,
+ 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66,
+ 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde,
+ 0xe4, 0xc8, 0x86, 0x48, 0x8b, 0xf0, 0x68, 0xcf, 0xf6, 0x54, 0x0f, 0xf7,
+ 0x40, 0x4f, 0xf7, 0x5c, 0x8f, 0x47, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac,
+ 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d,
+ 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34,
+ 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34,
+ 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61,
+ 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2,
+ 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9,
+ 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5,
+ 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b,
+ 0x02, 0x06, 0xcb, 0xf1, 0x80, 0xc1, 0x13, 0x06, 0x0b, 0xf1, 0x88, 0xc1,
+ 0x32, 0x2c, 0xc2, 0x33, 0x06, 0x0f, 0x19, 0x2c, 0xc4, 0x53, 0x06, 0x0b,
+ 0xf1, 0x40, 0x4f, 0xf4, 0x5c, 0x8f, 0x19, 0x70, 0x09, 0x4b, 0x93, 0x73,
+ 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xa3, 0x12, 0x96, 0x26, 0xe7,
+ 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x46, 0x8c, 0xae, 0x0c, 0x8f, 0xae,
+ 0x4e, 0xae, 0x4c, 0x86, 0x8c, 0xc7, 0x8c, 0xed, 0x2d, 0x8c, 0x8e, 0x05,
+ 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87, 0x03, 0x5d, 0x19, 0xde,
+ 0x10, 0x6a, 0x41, 0x1e, 0x34, 0x78, 0xc4, 0x60, 0x19, 0x16, 0xe1, 0x49,
+ 0x83, 0x07, 0x7a, 0xd4, 0xe0, 0xb9, 0x9e, 0x35, 0xe0, 0x12, 0x96, 0x26,
+ 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xc7, 0x63, 0x2e, 0xac,
+ 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10, 0x69, 0x29, 0x9e, 0x36,
+ 0x78, 0xc4, 0x60, 0x19, 0x16, 0xe1, 0x81, 0x1e, 0x37, 0x78, 0xae, 0xe7,
+ 0x0d, 0x86, 0x28, 0x4f, 0xf6, 0x7c, 0xcf, 0x19, 0x3c, 0x6c, 0xf0, 0xc0,
+ 0xc1, 0x10, 0x23, 0x01, 0x9e, 0xe9, 0x89, 0x03, 0x3e, 0x6f, 0x6d, 0x6e,
+ 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56, 0x56, 0x40,
+ 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x0f, 0x1d, 0x0c, 0x31, 0x9e, 0x39,
+ 0x78, 0xea, 0x00, 0x4a, 0x86, 0x18, 0x8f, 0x1d, 0x3c, 0x76, 0x00, 0x25,
+ 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x77,
+ 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03, 0x73, 0x60, 0x87, 0x70,
+ 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29,
+ 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72,
+ 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01, 0x31, 0x82,
+ 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73,
+ 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79,
+ 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23, 0xa6, 0x70,
+ 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74,
+ 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77,
+ 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60, 0xc2, 0x21,
+ 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1,
+ 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x72, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
@@ -975,20 +1003,26 @@
0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
- 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x00, 0x00,
- 0x71, 0x20, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d,
- 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16,
- 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7,
- 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00,
- 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
- 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc4, 0x46, 0x00, 0x48,
- 0xd5, 0xc0, 0x08, 0x00, 0x81, 0x11, 0x00, 0x00, 0x23, 0x06, 0x8a, 0x10,
- 0x48, 0x46, 0x81, 0x0c, 0x84, 0x10, 0x10, 0x52, 0x2c, 0x10, 0xe4, 0x93,
- 0x41, 0x40, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xa8,
- 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e,
+ 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e,
+ 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54,
+ 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39,
+ 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c,
+ 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07,
+ 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0x73, 0xce, 0x83,
+ 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16, 0xb0, 0x01, 0x48, 0xe4,
+ 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f,
+ 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0xc4, 0x46, 0x00, 0x48, 0xd5, 0xc0, 0x08, 0x00,
+ 0x81, 0x11, 0x00, 0x00, 0x23, 0x06, 0x8a, 0x10, 0x48, 0x46, 0x81, 0x0c,
+ 0x84, 0x10, 0x10, 0x52, 0x2c, 0x10, 0xe4, 0x93, 0x41, 0x40, 0x0c, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xb8, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x74, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x9a, 0x03, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x30, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x49, 0x03, 0x00, 0x00,
0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
@@ -996,100 +1030,64 @@
0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
- 0x51, 0x18, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00,
- 0x16, 0xa0, 0xda, 0x60, 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38,
- 0x80, 0x05, 0xa8, 0x36, 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03,
- 0xc0, 0x00, 0x12, 0x31, 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3,
- 0x40, 0x0f, 0xec, 0x90, 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee,
- 0x40, 0x0e, 0xe5, 0x40, 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9,
- 0x40, 0x0e, 0xe5, 0xd0, 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80,
- 0x39, 0x84, 0x03, 0x3b, 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3,
- 0x3c, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43,
- 0x3a, 0xb0, 0x43, 0x1b, 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03,
- 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5,
- 0x30, 0x0f, 0xf3, 0xd0, 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9,
- 0x30, 0x0f, 0xe5, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4,
- 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43,
- 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3,
- 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03,
- 0x3b, 0xa4, 0x43, 0x3b, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0,
- 0xe0, 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5,
- 0xd0, 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef,
- 0xe0, 0x0e, 0x6d, 0xc0, 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee,
- 0xf0, 0x0e, 0x6d, 0x90, 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6,
- 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83,
- 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43,
- 0x3d, 0xb4, 0x03, 0x3c, 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43,
- 0x39, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00,
- 0xe1, 0x0e, 0xef, 0xd0, 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d,
- 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00,
- 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1,
- 0x3c, 0xa4, 0xc3, 0x39, 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43,
- 0x39, 0xc8, 0xc3, 0x3b, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41,
- 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3,
- 0x50, 0x0e, 0x00, 0x31, 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d,
- 0x00, 0x0f, 0xf2, 0xf0, 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef,
- 0x20, 0x0f, 0x6d, 0x20, 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2,
- 0xd0, 0x06, 0xf3, 0x90, 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04,
- 0x3d, 0x84, 0x83, 0x3c, 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43,
- 0x39, 0x84, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d,
- 0x60, 0x0e, 0xf0, 0x10, 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3,
- 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed,
- 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03,
- 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03,
- 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6,
- 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff,
- 0xff, 0xff, 0xff, 0x07, 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c,
- 0xc6, 0x81, 0x1e, 0xd8, 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e,
- 0xdc, 0x81, 0x1c, 0xca, 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e,
- 0xd2, 0x81, 0x1c, 0xca, 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48,
- 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08,
- 0x87, 0x74, 0x60, 0x87, 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98,
- 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d,
- 0xca, 0x61, 0x1e, 0xe6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c,
- 0xd2, 0x61, 0x1e, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c,
- 0xc8, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78,
- 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80,
- 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28,
- 0x07, 0x76, 0x48, 0x87, 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x80, 0xc1, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d,
- 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c,
- 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d,
- 0xde, 0xc1, 0x1d, 0xda, 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20,
- 0xdc, 0xe1, 0x1d, 0xda, 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d,
- 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0,
- 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
- 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x51, 0x18, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78,
+ 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68,
+ 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68,
+ 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98,
+ 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
+ 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
+ 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c,
+ 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98,
+ 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80,
+ 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30,
+ 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d,
+ 0xe6, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e,
+ 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d,
+ 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d,
+ 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78,
+ 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60,
+ 0x87, 0x74, 0x68, 0x87, 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60,
+ 0x87, 0x72, 0x08, 0x07, 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48,
+ 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
- 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
- 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
- 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
- 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0,
- 0x87, 0x70, 0x18, 0x87, 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0,
- 0x87, 0x72, 0x18, 0x07, 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8,
- 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0,
- 0x87, 0x72, 0x00, 0xf0, 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c,
- 0xca, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e,
- 0xe4, 0xa1, 0x1c, 0xe6, 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0,
- 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68,
- 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00,
- 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c,
- 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d,
- 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
- 0x07, 0x60, 0x03, 0x61, 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9,
- 0x80, 0x20, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5,
- 0x06, 0x22, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00,
- 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18,
- 0x88, 0x09, 0x41, 0x31, 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00,
+ 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e,
+ 0xda, 0x80, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30,
+ 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68,
+ 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e,
+ 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c,
+ 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e,
+ 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78,
+ 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70,
+ 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e,
+ 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c,
+ 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c,
+ 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c,
+ 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0,
+ 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68,
+ 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98,
+ 0x07, 0xa0, 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e,
+ 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e,
+ 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8,
+ 0x87, 0x72, 0x00, 0x88, 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78,
+ 0x07, 0x73, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0,
+ 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x86,
+ 0x30, 0x00, 0x0b, 0x50, 0x6d, 0x30, 0x06, 0x02, 0x58, 0x80, 0x6a, 0x83,
+ 0x41, 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xe2, 0x00, 0x16, 0xa0, 0xda,
+ 0x60, 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x40, 0x6d, 0x40,
+ 0x8e, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83,
+ 0x81, 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0x02,
+ 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18,
+ 0x88, 0x62, 0x42, 0x60, 0x4c, 0x18, 0x0e, 0x24, 0x01, 0x00, 0x00, 0x00,
0x89, 0x20, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
0x10, 0x78, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
- 0x08, 0x81, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
+ 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06,
0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8,
0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1,
@@ -1100,7 +1098,7 @@
0x28, 0x48, 0x08, 0x62, 0x18, 0xa4, 0x18, 0xb5, 0x32, 0x00, 0x42, 0xe8,
0xcd, 0x11, 0x80, 0xc1, 0x1c, 0x41, 0x30, 0x8c, 0x20, 0x44, 0x25, 0x09,
0x8a, 0x89, 0x28, 0xa7, 0x04, 0x44, 0x0b, 0x12, 0x10, 0x13, 0x72, 0x4a,
- 0x40, 0x76, 0x20, 0x60, 0x18, 0x61, 0x88, 0x86, 0x11, 0x88, 0x68, 0x8e,
+ 0x40, 0x76, 0x20, 0x60, 0x18, 0x61, 0x88, 0x06, 0x11, 0x02, 0x61, 0x8e,
0x00, 0x14, 0x06, 0x11, 0x08, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71,
@@ -1141,133 +1139,143 @@
0x00, 0x86, 0x30, 0x17, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x59, 0x20, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14,
0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x8a,
- 0x23, 0x00, 0x25, 0x50, 0x20, 0x05, 0x18, 0x50, 0x10, 0x45, 0x50, 0x06,
- 0x05, 0x54, 0x60, 0x85, 0x50, 0x0a, 0xc5, 0x40, 0x7b, 0x04, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
- 0xd7, 0x20, 0x08, 0x0e, 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09,
- 0xc4, 0xae, 0x4c, 0x6e, 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6,
- 0x25, 0x06, 0x04, 0xa5, 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05,
- 0x07, 0x46, 0xc6, 0x25, 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x80, 0x01,
- 0x43, 0x8c, 0xa8, 0x88, 0x90, 0x88, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6,
- 0x36, 0x04, 0xc1, 0x86, 0xa8, 0x88, 0x8a, 0x88, 0xe0, 0x16, 0x96, 0x26,
- 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6,
- 0xf6, 0x26, 0xd7, 0x36, 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56,
- 0x36, 0x44, 0xc0, 0x0a, 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d,
- 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61,
- 0x74, 0x68, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xec,
- 0x60, 0x19, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1,
- 0x95, 0xb9, 0x98, 0xc9, 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95,
- 0xc9, 0x7d, 0x99, 0x95, 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85,
- 0x89, 0xb1, 0x95, 0x0d, 0x11, 0xb0, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7,
- 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97,
- 0x66, 0x57, 0xf6, 0x45, 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96,
- 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xc0, 0x16, 0x46, 0x61, 0x69,
- 0x72, 0x2e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72,
- 0x67, 0x65, 0x74, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
- 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1,
- 0xbd, 0x85, 0xd1, 0xd1, 0x0c, 0x41, 0xb0, 0x26, 0x22, 0x30, 0x07, 0x7b,
- 0x86, 0x08, 0x18, 0x44, 0x26, 0x2c, 0x4d, 0xce, 0x05, 0xee, 0x6d, 0x2e,
- 0x8d, 0x2e, 0xed, 0xcd, 0x8d, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x58, 0x99,
- 0x1b, 0x5d, 0x99, 0x1c, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb7, 0xb7, 0x2f,
- 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x32,
- 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x44, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x40, 0x11,
- 0x81, 0x49, 0xd8, 0x84, 0x51, 0x98, 0x83, 0x3d, 0x58, 0x85, 0x59, 0x94,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8,
- 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9,
- 0x85, 0xd1, 0x95, 0x91, 0xa1, 0xe0, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd,
- 0xc9, 0x91, 0x11, 0xd9, 0xc9, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93,
- 0x73, 0x81, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b,
- 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x27, 0x43, 0x84, 0xae, 0x0c, 0x6f,
- 0xec, 0xed, 0x4d, 0x8e, 0x6c, 0x88, 0x14, 0x15, 0x18, 0x86, 0x65, 0xd8,
- 0x84, 0x69, 0x98, 0x83, 0x6d, 0x58, 0x85, 0x71, 0x54, 0xc2, 0xd2, 0xe4,
- 0x5c, 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9,
- 0x88, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51,
- 0x0a, 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73,
- 0xfb, 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22,
- 0x57, 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec,
- 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58,
- 0x9a, 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57,
- 0x18, 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x87, 0xb1,
- 0x37, 0xb6, 0x21, 0x60, 0x10, 0x25, 0x98, 0x87, 0x7d, 0x91, 0x81, 0x81,
- 0x41, 0x44, 0x44, 0x05, 0x16, 0x06, 0x98, 0x18, 0x44, 0x06, 0x36, 0x06,
- 0x91, 0x81, 0x39, 0xd8, 0x83, 0x55, 0x18, 0x19, 0x90, 0x0a, 0x4b, 0x93,
- 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b,
- 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37,
- 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b,
- 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42,
- 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x20, 0x22, 0x22, 0x23, 0x22,
- 0xb0, 0x33, 0xc0, 0xd0, 0x20, 0x32, 0x22, 0x23, 0x22, 0xb0, 0x33, 0xc0,
- 0xd2, 0x20, 0x5a, 0x22, 0x23, 0x22, 0xb0, 0x33, 0xc0, 0xd4, 0x20, 0x62,
- 0x22, 0x23, 0x22, 0xb0, 0x33, 0xc0, 0xd6, 0x80, 0x49, 0x56, 0x95, 0x15,
- 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2,
- 0xb2, 0x21, 0x64, 0x10, 0x29, 0x98, 0x87, 0x7d, 0xd1, 0x81, 0x81, 0x41,
- 0x54, 0x44, 0x05, 0x16, 0x06, 0x98, 0x19, 0x60, 0x6c, 0x80, 0x89, 0x41,
- 0x74, 0x60, 0x63, 0x10, 0x19, 0x98, 0x83, 0xb5, 0x01, 0x56, 0x61, 0x6e,
- 0xc0, 0x25, 0x2c, 0x4d, 0xce, 0x85, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae,
- 0x8c, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x19,
- 0x31, 0xba, 0x32, 0x3c, 0xba, 0x3a, 0xb9, 0x32, 0x19, 0x32, 0x1e, 0x33,
- 0xb6, 0xb7, 0x30, 0x3a, 0x16, 0x90, 0xb9, 0xb0, 0x36, 0x38, 0xb6, 0x32,
- 0x1f, 0x12, 0x74, 0x65, 0x78, 0x59, 0x43, 0xa8, 0xa8, 0xc1, 0xe0, 0x00,
- 0x03, 0x83, 0x88, 0x88, 0x0a, 0x2c, 0x0e, 0x30, 0x07, 0x93, 0x03, 0xac,
- 0xc2, 0xe6, 0x80, 0x1e, 0x5d, 0x19, 0x1e, 0x5d, 0x9d, 0x5c, 0x99, 0x0c,
- 0xd9, 0x57, 0x98, 0x9c, 0x5c, 0x58, 0x1e, 0x8f, 0x19, 0xdb, 0x5b, 0x18,
- 0x1d, 0x0b, 0xc8, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x0f, 0x0b, 0xba,
- 0x32, 0xbc, 0x2a, 0xab, 0x21, 0x54, 0xe4, 0x60, 0x70, 0x80, 0x81, 0x41,
- 0x54, 0x44, 0x05, 0x16, 0x07, 0x98, 0x83, 0xd5, 0x01, 0x56, 0x61, 0x76,
- 0xc0, 0x25, 0x2c, 0x4d, 0xce, 0x65, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c,
- 0x8e, 0xc7, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x99, 0x1c, 0x83, 0xb9, 0x21,
- 0x52, 0xf4, 0x60, 0x78, 0x80, 0x81, 0x41, 0x44, 0x44, 0x05, 0xe6, 0x60,
- 0x79, 0x80, 0x55, 0x98, 0x1e, 0x0c, 0x71, 0xb0, 0x0b, 0xeb, 0xb0, 0x32,
- 0xc0, 0xde, 0x00, 0xa3, 0x03, 0xec, 0x0e, 0xb0, 0x3d, 0x18, 0x62, 0x38,
- 0x00, 0x16, 0x61, 0x7c, 0xc0, 0xe7, 0xad, 0xcd, 0x2d, 0x0d, 0xee, 0x8d,
- 0xae, 0xcc, 0x8d, 0x0e, 0x64, 0x0c, 0x2d, 0x4c, 0x8e, 0xcf, 0x54, 0x5a,
- 0x1b, 0x1c, 0x5b, 0x19, 0xc8, 0xd0, 0xca, 0x0a, 0x08, 0x95, 0x50, 0x50,
- 0xd0, 0x10, 0x01, 0xfb, 0x83, 0x21, 0x06, 0xe6, 0x07, 0x18, 0x28, 0x6c,
- 0xd0, 0x10, 0x03, 0x0b, 0x05, 0x2c, 0x14, 0x36, 0x68, 0x84, 0xc2, 0x0e,
- 0xec, 0x60, 0x0f, 0xed, 0xe0, 0x06, 0xe9, 0x40, 0x0e, 0xe5, 0xe0, 0x0e,
- 0xf4, 0x30, 0x25, 0x08, 0x46, 0x2c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06,
- 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25,
- 0x10, 0x46, 0x50, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xec, 0x10, 0x0e,
- 0xee, 0x70, 0x0e, 0xf5, 0x10, 0x0e, 0xe7, 0x50, 0x0e, 0xbf, 0x60, 0x0f,
- 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62,
- 0xc4, 0x14, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x30, 0x0e, 0xef, 0xd0, 0x0e,
- 0xf0, 0x90, 0x0e, 0xec, 0x50, 0x0e, 0xbf, 0xf0, 0x0e, 0xf0, 0x40, 0x0f,
- 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x0f, 0x53, 0x08, 0x03, 0x51, 0x98, 0x11,
- 0x4c, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x39, 0xc8, 0x43, 0x38, 0x9c,
- 0x43, 0x3b, 0x94, 0x83, 0x3b, 0xd0, 0xc3, 0x94, 0xa0, 0x0f, 0x00, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
- 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
- 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
- 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
- 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
- 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
- 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
- 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
- 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
- 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
- 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
- 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
- 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
- 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
- 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
- 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
- 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
- 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
- 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
- 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
- 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
- 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
- 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
- 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
- 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
- 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
- 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
- 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
- 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
- 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
- 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
- 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04,
+ 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40, 0x7b, 0x04, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x46, 0x44, 0x60, 0x40, 0x74, 0x70, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x5c, 0x68,
+ 0x72, 0x52, 0x86, 0x08, 0x98, 0x30, 0xc4, 0x88, 0x88, 0x28, 0x89, 0x0a,
+ 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10, 0xac, 0x88, 0x88, 0x88,
+ 0x88, 0x0a, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69,
+ 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64,
+ 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xec, 0x20, 0x17, 0x96,
+ 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16,
+ 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26,
+ 0xc6, 0x56, 0x36, 0x44, 0xc0, 0x12, 0x96, 0x41, 0x58, 0x9a, 0x9c, 0xcb,
+ 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b,
+ 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18,
+ 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x01, 0x5b,
+ 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75,
+ 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43,
+ 0x04, 0xac, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56,
+ 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d,
+ 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d,
+ 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x04,
+ 0x7b, 0xa2, 0x02, 0x83, 0xb0, 0x68, 0x88, 0x80, 0x49, 0x64, 0xc2, 0xd2,
+ 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84,
+ 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b,
+ 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b,
+ 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77,
+ 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e,
+ 0xed, 0xcd, 0x6d, 0x08, 0x14, 0x15, 0x18, 0x85, 0x55, 0x98, 0x85, 0x41,
+ 0x58, 0x84, 0x5d, 0x18, 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e,
+ 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e,
+ 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e,
+ 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97,
+ 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8,
+ 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74,
+ 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48,
+ 0x11, 0x81, 0x69, 0xd8, 0x86, 0x55, 0x18, 0x87, 0x41, 0x58, 0x87, 0x5d,
+ 0x98, 0x47, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c,
+ 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc,
+ 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7,
+ 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c,
+ 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2,
+ 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6,
+ 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d,
+ 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd,
+ 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06, 0x91, 0x82,
+ 0x81, 0x01, 0x16, 0x06, 0x91, 0x81, 0x89, 0x41, 0x54, 0x44, 0x04, 0x36,
+ 0x06, 0x18, 0x19, 0x44, 0x06, 0x56, 0x06, 0x91, 0x81, 0x41, 0x58, 0x84,
+ 0x5d, 0x98, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab,
+ 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b,
+ 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c,
+ 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3,
+ 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66,
+ 0x43, 0xd0, 0x20, 0x2a, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd4, 0x20,
+ 0x32, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd6, 0x20, 0x62, 0x22, 0x23,
+ 0x2a, 0xb0, 0x34, 0xc0, 0xd8, 0x20, 0x6a, 0x22, 0x23, 0x2a, 0xb0, 0x34,
+ 0xc0, 0xda, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59,
+ 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x10, 0x2d,
+ 0x18, 0x18, 0x60, 0x61, 0x10, 0x21, 0x98, 0x18, 0x44, 0x44, 0x44, 0x60,
+ 0x63, 0x80, 0xa1, 0x01, 0xe6, 0x06, 0x18, 0x19, 0x44, 0x08, 0x56, 0x06,
+ 0x91, 0x81, 0x41, 0xd8, 0x1b, 0x60, 0x17, 0x06, 0x07, 0x5c, 0xc2, 0xd2,
+ 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5,
+ 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3,
+ 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3,
+ 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57,
+ 0x86, 0x97, 0x35, 0x84, 0x8a, 0x0e, 0x4c, 0x0e, 0x30, 0x31, 0x88, 0x8a,
+ 0x88, 0xc0, 0xe6, 0x00, 0x83, 0x30, 0x3a, 0xc0, 0x2e, 0xac, 0x0e, 0xe8,
+ 0xd1, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xc9, 0x90, 0x7d, 0x85, 0xc9,
+ 0xc9, 0x85, 0xe5, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xb1, 0x80, 0xcc,
+ 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xf9, 0xb0, 0xa0, 0x2b, 0xc3, 0xab, 0xb2,
+ 0x1a, 0x42, 0x45, 0x0e, 0x26, 0x07, 0x98, 0x18, 0x44, 0x44, 0x44, 0x60,
+ 0x73, 0x80, 0x41, 0xd8, 0x1d, 0x60, 0x17, 0x86, 0x07, 0x5c, 0xc2, 0xd2,
+ 0xe4, 0x5c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78, 0xcc, 0x85,
+ 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x45, 0x0f, 0xa6,
+ 0x07, 0x98, 0x18, 0x44, 0x45, 0x44, 0x60, 0x10, 0xb6, 0x07, 0xd8, 0x85,
+ 0xf1, 0xc1, 0x10, 0x07, 0xcb, 0xb0, 0x0f, 0x3b, 0x03, 0x2c, 0x0e, 0x30,
+ 0x3b, 0xc0, 0xf2, 0x00, 0xeb, 0x83, 0x21, 0x86, 0x03, 0x60, 0x13, 0xe6,
+ 0x07, 0x7c, 0xde, 0xda, 0xdc, 0xd2, 0xe0, 0xde, 0xe8, 0xca, 0xdc, 0xe8,
+ 0x40, 0xc6, 0xd0, 0xc2, 0xe4, 0xf8, 0x4c, 0xa5, 0xb5, 0xc1, 0xb1, 0x95,
+ 0x81, 0x0c, 0xad, 0xac, 0x80, 0x50, 0x09, 0x05, 0x05, 0x0d, 0x11, 0xb0,
+ 0x50, 0x18, 0x62, 0x60, 0xa0, 0x80, 0x89, 0xc2, 0x06, 0x0d, 0x31, 0xb0,
+ 0x51, 0xc0, 0x46, 0x61, 0x83, 0x46, 0x44, 0xec, 0xc0, 0x0e, 0xf6, 0xd0,
+ 0x0e, 0x6e, 0xd0, 0x0e, 0xef, 0x40, 0x0e, 0xf5, 0xc0, 0x0e, 0xe5, 0xe0,
+ 0x06, 0xe6, 0xc0, 0x0e, 0xe1, 0x70, 0x0e, 0xf3, 0x30, 0x25, 0x08, 0x46,
+ 0x28, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50,
+ 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x61, 0xc4, 0x12, 0x0e, 0xe9, 0x20,
+ 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0,
+ 0x0e, 0x53, 0x02, 0x62, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0,
+ 0x0e, 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0,
+ 0x0b, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30,
+ 0x25, 0x30, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0,
+ 0x0e, 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00,
+ 0x0f, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x85, 0x40, 0x14,
+ 0xc6, 0x19, 0xc1, 0x84, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x98, 0x83, 0x3c,
+ 0x84, 0xc3, 0x39, 0xb4, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x4c, 0x09, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x26, 0x10, 0x06, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c, 0x0b, 0xf1, 0x4f,
0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0xc3, 0x0f, 0x44, 0x11, 0x80, 0xf9,
0x15, 0x5e, 0xdc, 0xb6, 0x05, 0x34, 0x00, 0x12, 0xf9, 0x83, 0x33, 0xf9,
@@ -1275,131 +1283,95 @@
0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, 0x5f, 0xe1,
0xc5, 0x6d, 0x1b, 0x00, 0xc4, 0x76, 0xe5, 0x2f, 0xbb, 0xef, 0x5f, 0x44,
0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
- 0x3e, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
- 0x0b, 0x00, 0x00, 0x00, 0xa4, 0xe7, 0x20, 0x88, 0x22, 0xe1, 0x28, 0xcf,
- 0x31, 0x10, 0x1c, 0x37, 0xd6, 0x00, 0x04, 0x02, 0xcd, 0x11, 0x00, 0x8a,
- 0x33, 0x00, 0x24, 0x6b, 0x60, 0x04, 0x80, 0xc8, 0x0c, 0x00, 0x85, 0x19,
- 0x00, 0x02, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x37, 0x02, 0x00, 0x00,
- 0x23, 0x06, 0xca, 0x10, 0x80, 0x81, 0xc3, 0x44, 0x06, 0x52, 0x04, 0x23,
- 0x06, 0xcb, 0x10, 0x88, 0x81, 0xd3, 0x48, 0x60, 0x70, 0x24, 0x86, 0x30,
- 0x86, 0x10, 0x84, 0xc1, 0x20, 0xc3, 0x60, 0x34, 0x73, 0x0c, 0x81, 0x20,
- 0x06, 0x23, 0x06, 0xcb, 0x10, 0x98, 0x81, 0x14, 0x59, 0x63, 0xb0, 0x34,
- 0x8a, 0x31, 0x86, 0x10, 0x94, 0xc1, 0x1c, 0xc3, 0x10, 0x84, 0xc1, 0x20,
- 0x43, 0xc0, 0x4c, 0x87, 0x8d, 0xa5, 0xa0, 0xd8, 0x10, 0xc0, 0x87, 0xb8,
- 0x32, 0xc8, 0x20, 0x40, 0xd6, 0x78, 0x43, 0x17, 0x06, 0x6c, 0x70, 0xc1,
- 0x58, 0x0a, 0xca, 0x20, 0x43, 0x40, 0x69, 0x23, 0x06, 0x05, 0x11, 0xd0,
- 0x41, 0x11, 0xcc, 0x31, 0x58, 0x81, 0x1c, 0x8c, 0x37, 0x8c, 0xc1, 0x19,
- 0xb8, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x06, 0x06, 0x23,
- 0x06, 0x05, 0x11, 0xe8, 0xc1, 0x12, 0xcc, 0x31, 0x18, 0xc1, 0x1d, 0x8c,
- 0x37, 0xa4, 0x41, 0x1b, 0xcc, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c,
- 0x01, 0x18, 0x98, 0xc1, 0x88, 0x41, 0x41, 0x04, 0xa0, 0x10, 0x05, 0x73,
- 0x0c, 0x46, 0x90, 0x07, 0x73, 0x0c, 0x81, 0x18, 0xe4, 0x81, 0x05, 0x95,
- 0x7c, 0x32, 0x08, 0x88, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x5b, 0x06, 0x26, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x0b, 0x00, 0x00, 0x00, 0x94, 0xe7, 0x18, 0x8a, 0xae, 0x1b, 0x6b, 0x00,
+ 0x02, 0x81, 0xe6, 0x08, 0x00, 0xc9, 0x11, 0x80, 0x1a, 0xa0, 0x38, 0x03,
+ 0x40, 0x61, 0x0e, 0x22, 0x0c, 0xc2, 0x20, 0x0c, 0xc0, 0x60, 0x06, 0x80,
+ 0xc0, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xcd, 0x00, 0x8c, 0x00, 0x00,
+ 0x23, 0x06, 0xca, 0x10, 0x80, 0x81, 0xc3, 0x44, 0x47, 0x82, 0x04, 0x83,
+ 0x0c, 0x41, 0xc1, 0x8c, 0x18, 0x2c, 0x43, 0x30, 0x06, 0x8f, 0x33, 0x81,
+ 0x41, 0xb2, 0x28, 0xc3, 0x18, 0x42, 0x10, 0x06, 0x73, 0x0c, 0x43, 0x30,
+ 0x06, 0x23, 0x06, 0xcb, 0x10, 0x98, 0x81, 0x14, 0x59, 0x64, 0xc0, 0x38,
+ 0x8d, 0x31, 0x86, 0x10, 0x90, 0xc1, 0x1c, 0xc3, 0x10, 0x80, 0xc1, 0x5d,
+ 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x43, 0x19, 0x11, 0xc0, 0x87, 0xb8,
+ 0x32, 0xde, 0xc0, 0x81, 0x01, 0x1b, 0x5c, 0xa0, 0x97, 0x82, 0x32, 0xc8,
+ 0x10, 0x50, 0xda, 0x88, 0x41, 0x21, 0x04, 0x73, 0x60, 0x04, 0xe3, 0x0d,
+ 0x61, 0x50, 0x06, 0x6b, 0x70, 0x81, 0x5e, 0x0a, 0xca, 0x20, 0x43, 0x90,
+ 0x7d, 0x23, 0x06, 0x85, 0x10, 0xe0, 0xc1, 0x12, 0x8c, 0x37, 0x98, 0x81,
+ 0x1a, 0xbc, 0xc1, 0x05, 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x47, 0x06,
+ 0x23, 0x06, 0x85, 0x10, 0xf4, 0x01, 0x14, 0xcc, 0x31, 0x84, 0xc1, 0xa2,
+ 0x07, 0x73, 0x0c, 0xc1, 0xc1, 0x07, 0x73, 0x0c, 0xc1, 0x70, 0x07, 0x16,
+ 0x4c, 0xf2, 0xc9, 0x20, 0x20, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x5b, 0x06, 0x26, 0x20, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0xf8, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
- 0x21, 0x0c, 0x00, 0x00, 0x7b, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
- 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
- 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
- 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
- 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
- 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
- 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
- 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00, 0x16, 0xa0, 0xda, 0x60,
- 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38, 0x80, 0x05, 0xa8, 0x36,
- 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0x00, 0x12, 0x31,
- 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xec, 0x90,
- 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee, 0x40, 0x0e, 0xe5, 0x40,
- 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xd0,
- 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80, 0x39, 0x84, 0x03, 0x3b,
- 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3, 0x3c, 0x84, 0x83, 0x38,
- 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43, 0x3a, 0xb0, 0x43, 0x1b,
- 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0,
- 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xd0,
- 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9, 0x30, 0x0f, 0xe5, 0xd0,
- 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4, 0x00, 0xd0, 0x83, 0x3c,
- 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c,
- 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b,
- 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0xe0, 0x0e, 0xef, 0xd0,
- 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0,
- 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0,
- 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef, 0xe0, 0x0e, 0x6d, 0xc0,
- 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90,
- 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0,
- 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39,
- 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43, 0x3d, 0xb4, 0x03, 0x3c,
- 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xcc, 0x03, 0x60,
- 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0,
- 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d,
- 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39,
- 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b,
- 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d,
- 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0x31,
- 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0,
- 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20,
- 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90,
- 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c,
- 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43, 0x39, 0x84, 0x03, 0x3d,
- 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d, 0x60, 0x0e, 0xf0, 0x10,
- 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50,
- 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80,
- 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xd4, 0xc3, 0x3c,
- 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03, 0x3d, 0xb4, 0x81, 0x39,
- 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30,
- 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07,
- 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xd8,
- 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e, 0xdc, 0x81, 0x1c, 0xca,
- 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e, 0xd2, 0x81, 0x1c, 0xca,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07,
- 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08, 0x87, 0x74, 0x60, 0x87,
- 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98, 0x07, 0xc0, 0x1c, 0xc2,
- 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d, 0xca, 0x61, 0x1e, 0xe6,
- 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c, 0xd2, 0x61, 0x1e, 0xca,
- 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c, 0xc8, 0x01, 0xa0, 0x07,
- 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07,
- 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07,
- 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87,
- 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0xc1, 0x1d, 0xde,
- 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0,
- 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca,
- 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda,
- 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda,
- 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda,
- 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87,
- 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87,
- 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
- 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda,
- 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87,
- 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07,
- 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87,
- 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0,
- 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda,
- 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6,
- 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0, 0x03, 0x80, 0xa8, 0x07,
- 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87,
- 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea,
- 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde,
- 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8,
- 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x60, 0x03, 0x61,
- 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9, 0x80, 0x20, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, 0x22, 0xf9, 0xff,
- 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, 0x31,
- 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0xc0, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x2d, 0x03, 0x00, 0x00,
+ 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+ 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+ 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14,
+ 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
+ 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48,
+ 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
+ 0x51, 0x18, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78,
+ 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68,
+ 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68,
+ 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98,
+ 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
+ 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d,
+ 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c,
+ 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98,
+ 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80,
+ 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30,
+ 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d,
+ 0xe6, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e,
+ 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d,
+ 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d,
+ 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78,
+ 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60,
+ 0x87, 0x74, 0x68, 0x87, 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60,
+ 0x87, 0x72, 0x08, 0x07, 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48,
+ 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
+ 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e,
+ 0xda, 0x80, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30,
+ 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68,
+ 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e,
+ 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c,
+ 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e,
+ 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78,
+ 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70,
+ 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e,
+ 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c,
+ 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c,
+ 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c,
+ 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0,
+ 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68,
+ 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98,
+ 0x07, 0xa0, 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e,
+ 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e,
+ 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8,
+ 0x87, 0x72, 0x00, 0x88, 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78,
+ 0x07, 0x73, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0,
+ 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x86,
+ 0x30, 0x00, 0x0b, 0x50, 0x6d, 0x30, 0x06, 0x02, 0x58, 0x80, 0x6a, 0x83,
+ 0x41, 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda,
+ 0x60, 0x18, 0x07, 0xb0, 0x00, 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff,
+ 0xff, 0x01, 0x90, 0x00, 0x6a, 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x30, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda,
+ 0x60, 0x28, 0x02, 0xb0, 0x00, 0x15, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10,
+ 0x1c, 0x13, 0x06, 0x24, 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00,
- 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x81, 0x30, 0x8c,
+ 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c,
0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47,
0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28,
0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e,
@@ -1408,7 +1380,7 @@
0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14,
0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30,
0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10,
- 0x30, 0x8c, 0x30, 0x40, 0xc3, 0x08, 0x04, 0x34, 0x47, 0x00, 0x0a, 0x83,
+ 0x30, 0x8c, 0x30, 0x40, 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83,
0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48,
0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0,
@@ -1447,159 +1419,169 @@
0xc2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61,
0x26, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
- 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82, 0x23, 0x00, 0x25, 0x50,
- 0x20, 0x05, 0x18, 0x50, 0x10, 0x45, 0x50, 0x06, 0x05, 0x54, 0x60, 0x85,
- 0x50, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x0d, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e,
- 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e,
- 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5,
- 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25,
- 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x40, 0x01, 0x43, 0x0c, 0x88, 0x80,
- 0x0e, 0x68, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0xa1, 0x06,
- 0x88, 0x80, 0x08, 0x68, 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
- 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36,
- 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x0a,
- 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
- 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65,
- 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xea, 0x60, 0x19, 0x84, 0xa5,
- 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9,
- 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95,
- 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, 0xb1, 0x95, 0x0d,
- 0x11, 0xa8, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06,
- 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45,
- 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6,
- 0x56, 0x36, 0x44, 0xa0, 0x16, 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65,
- 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca,
- 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1,
- 0x0c, 0x41, 0xa8, 0x06, 0x1a, 0x28, 0x87, 0x7a, 0x86, 0x08, 0x14, 0x44,
- 0x26, 0x2c, 0x4d, 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd,
- 0x8d, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c,
- 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39,
- 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e,
- 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6,
- 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x40, 0xd0, 0x40, 0x49, 0xd4, 0x44,
- 0x51, 0x94, 0x43, 0x3d, 0x54, 0x45, 0x59, 0x94, 0xc2, 0xd2, 0xe4, 0x5c,
- 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0,
- 0xea, 0xe8, 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91,
- 0xa1, 0xe0, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9,
- 0xc9, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93,
- 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6,
- 0x16, 0x46, 0x27, 0x43, 0x84, 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e,
- 0x6c, 0x88, 0x04, 0x11, 0x14, 0x46, 0x65, 0xd4, 0x44, 0x69, 0x94, 0x43,
- 0x6d, 0x54, 0x45, 0x71, 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc,
- 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99,
- 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73,
- 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23,
- 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6,
- 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae,
- 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98,
- 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99,
- 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60,
- 0x00, 0x21, 0x94, 0x47, 0x7d, 0x50, 0x41, 0x81, 0x01, 0x34, 0x40, 0x04,
- 0x15, 0x06, 0x94, 0x18, 0x40, 0x05, 0x35, 0x06, 0x50, 0x41, 0x39, 0xd4,
- 0x43, 0x55, 0x14, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93,
- 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33,
- 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc,
- 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d,
- 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66,
- 0x66, 0x43, 0xd0, 0x00, 0x1a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd0,
- 0x00, 0x2a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd2, 0x00, 0x52, 0xa0,
- 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd4, 0x00, 0x5a, 0xa0, 0x02, 0x1a, 0xa8,
- 0x33, 0xa0, 0xd6, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b,
- 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00,
- 0x25, 0x94, 0x47, 0x7d, 0x90, 0x41, 0x81, 0x01, 0x44, 0x40, 0x04, 0x15,
- 0x06, 0x94, 0x19, 0x50, 0x6c, 0x40, 0x89, 0x01, 0x64, 0x50, 0x63, 0x00,
- 0x15, 0x94, 0x43, 0xb5, 0x01, 0x55, 0x51, 0x6e, 0xc0, 0x25, 0x2c, 0x4d,
- 0xce, 0x85, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x8c, 0x4a, 0x58, 0x9a,
- 0x9c, 0xcb, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x19, 0x31, 0xba, 0x32, 0x3c,
- 0xba, 0x3a, 0xb9, 0x32, 0x19, 0x32, 0x1e, 0x33, 0xb6, 0xb7, 0x30, 0x3a,
- 0x16, 0x90, 0xb9, 0xb0, 0x36, 0x38, 0xb6, 0x32, 0x1f, 0x12, 0x74, 0x65,
- 0x78, 0x59, 0x43, 0x28, 0x88, 0xa1, 0xe0, 0x80, 0x02, 0x03, 0x68, 0x80,
- 0x08, 0x2a, 0x0e, 0x28, 0x87, 0x92, 0x03, 0xaa, 0xa2, 0xe6, 0x80, 0x05,
- 0x5d, 0x19, 0x5e, 0x95, 0xd5, 0x10, 0x0a, 0x6a, 0x28, 0x38, 0xa0, 0xc0,
- 0x00, 0x22, 0x20, 0x82, 0x8a, 0x03, 0xca, 0xa1, 0xe4, 0x80, 0xaa, 0xa8,
- 0x3a, 0xe0, 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56,
- 0x26, 0xc7, 0x63, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc,
- 0x10, 0x09, 0x72, 0xa8, 0x3b, 0xa0, 0xc0, 0x00, 0x1a, 0x20, 0x82, 0x72,
- 0x28, 0x3c, 0xa0, 0x2a, 0x2a, 0x0f, 0x86, 0x38, 0xd4, 0x45, 0x75, 0x54,
- 0x19, 0x50, 0x6f, 0x40, 0xd1, 0x01, 0x65, 0x07, 0x94, 0x1e, 0x0c, 0x31,
- 0x18, 0x80, 0x8a, 0xa8, 0x3d, 0xe0, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7,
- 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a,
- 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28,
- 0x28, 0x68, 0x88, 0x40, 0xf9, 0xc1, 0x10, 0x83, 0xea, 0x03, 0xea, 0x0f,
- 0xae, 0x67, 0x88, 0x41, 0x81, 0x02, 0x05, 0x0a, 0xd7, 0x33, 0x42, 0x61,
- 0x07, 0x76, 0xb0, 0x87, 0x76, 0x70, 0x83, 0x74, 0x20, 0x87, 0x72, 0x70,
- 0x07, 0x7a, 0x98, 0x12, 0x04, 0x23, 0x96, 0x70, 0x48, 0x07, 0x79, 0x70,
- 0x03, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98,
- 0x12, 0x08, 0x23, 0xa8, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x76, 0x08,
- 0x07, 0x77, 0x38, 0x87, 0x7a, 0x08, 0x87, 0x73, 0x28, 0x87, 0x5f, 0xb0,
- 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01,
- 0x31, 0x62, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68,
- 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x87, 0x5f, 0x78, 0x07, 0x78, 0xa0,
- 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x87, 0x29, 0x84, 0x81, 0x28, 0xcc,
- 0x08, 0x26, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0xc0, 0x1c, 0xe4, 0x21, 0x1c,
- 0xce, 0xa1, 0x1d, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0xc0, 0x07, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
- 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
- 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
- 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
- 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
- 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
- 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
- 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
- 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
- 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
- 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
- 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
- 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
- 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
- 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
- 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
- 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
- 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
- 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
- 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
- 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
- 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
- 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
- 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
- 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
- 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
- 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
- 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
- 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
- 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
- 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
- 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+ 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82, 0x25, 0x30, 0x02, 0x50,
+ 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05,
+ 0x56, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x1a, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x06, 0x34, 0x50, 0x00,
+ 0x64, 0x70, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x62, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x5c, 0x68, 0x72, 0x52, 0x86, 0x08,
+ 0x94, 0x30, 0xc4, 0x80, 0x06, 0x08, 0x81, 0x08, 0x16, 0x4d, 0x65, 0x74,
+ 0x61, 0x6c, 0x43, 0x10, 0xaa, 0x80, 0x06, 0x68, 0x80, 0x08, 0x6e, 0x61,
+ 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64,
+ 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62,
+ 0x6c, 0x65, 0x43, 0x04, 0xea, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6,
+ 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5,
+ 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44,
+ 0xa0, 0x12, 0x96, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c,
+ 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99,
+ 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x17, 0x59, 0xda,
+ 0x5c, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f,
+ 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa, 0x61, 0x14,
+ 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17,
+ 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee,
+ 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86,
+ 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20, 0x82, 0x82,
+ 0xa8, 0x68, 0x88, 0x40, 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde,
+ 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c,
+ 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b,
+ 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b,
+ 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6,
+ 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08,
+ 0x04, 0x11, 0x14, 0x45, 0x55, 0x94, 0x45, 0x41, 0x54, 0x44, 0x5d, 0x14,
+ 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc,
+ 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b,
+ 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8,
+ 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0,
+ 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34,
+ 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca,
+ 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40, 0x69, 0xd4,
+ 0x46, 0x55, 0x14, 0x47, 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47, 0x25, 0x2c,
+ 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a,
+ 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e,
+ 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4,
+ 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72,
+ 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4,
+ 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78,
+ 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95,
+ 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71,
+ 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06, 0x50, 0x42, 0x81, 0x01, 0x15, 0x06,
+ 0x50, 0x41, 0x89, 0x01, 0x44, 0x40, 0x03, 0x35, 0x06, 0x14, 0x19, 0x40,
+ 0x05, 0x55, 0x06, 0x50, 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94, 0x19, 0x90,
+ 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2,
+ 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6,
+ 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86,
+ 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33,
+ 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x22,
+ 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0, 0x02, 0x22,
+ 0xa8, 0x34, 0xa0, 0xd6, 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0,
+ 0xd8, 0x00, 0x62, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda, 0x80, 0x49,
+ 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2,
+ 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x29, 0x14, 0x18, 0x50, 0x61,
+ 0x00, 0x1d, 0x94, 0x18, 0x40, 0x03, 0x34, 0x50, 0x63, 0x40, 0xa1, 0x01,
+ 0xe5, 0x06, 0x14, 0x19, 0x40, 0x07, 0x55, 0x06, 0x50, 0x41, 0x41, 0xd4,
+ 0x1b, 0x50, 0x17, 0x05, 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca,
+ 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85,
+ 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b,
+ 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b,
+ 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97, 0x35, 0x84,
+ 0x82, 0x0c, 0x4a, 0x0e, 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0, 0xe6, 0x80,
+ 0x82, 0x28, 0x3a, 0xa0, 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95, 0xe1, 0x55,
+ 0x59, 0x0d, 0xa1, 0xa0, 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0, 0x01, 0x1a,
+ 0xa8, 0x39, 0xa0, 0x20, 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03, 0x2e, 0x61,
+ 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6,
+ 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0x20, 0x87,
+ 0xca, 0x03, 0x4a, 0x0c, 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2, 0x03, 0xea,
+ 0xa2, 0xf6, 0x60, 0x88, 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01, 0x15, 0x07,
+ 0x94, 0x1d, 0x50, 0x78, 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01, 0xa8, 0x89,
+ 0xea, 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e,
+ 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8,
+ 0xca, 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08,
+ 0x14, 0x28, 0x0c, 0x31, 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a, 0x86, 0x18,
+ 0x94, 0x28, 0x50, 0xa2, 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72,
+ 0x70, 0x03, 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04,
+ 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72,
+ 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74,
+ 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77,
+ 0x70, 0x87, 0x29, 0x01, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37,
+ 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72,
+ 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77,
+ 0x98, 0x12, 0x18, 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71,
+ 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77,
+ 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20,
+ 0x0a, 0xe3, 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41,
+ 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04,
+ 0x7e, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x16, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb,
0x26, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11,
0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00,
0x11, 0xdb, 0x95, 0xff, 0xf9, 0xd6, 0xf6, 0x5f, 0x44, 0x80, 0xc1, 0x10,
- 0xcd, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+ 0xcd, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
- 0x64, 0xe7, 0x20, 0x06, 0x02, 0xe9, 0xa8, 0x8e, 0x35, 0x00, 0x03, 0x31,
- 0xc7, 0x30, 0x10, 0xdd, 0x1c, 0xc3, 0xd0, 0x75, 0xf4, 0x6a, 0x60, 0x04,
- 0x80, 0xe0, 0x0c, 0x00, 0xc5, 0x11, 0x00, 0xaa, 0x63, 0x0d, 0x40, 0x20,
- 0x10, 0x99, 0x01, 0xa0, 0x30, 0x03, 0x40, 0x60, 0x8c, 0x00, 0x04, 0x41,
- 0x10, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10,
- 0x88, 0x01, 0xe4, 0x4c, 0x89, 0x81, 0x04, 0x23, 0x06, 0xca, 0x10, 0x8c,
- 0x01, 0xf4, 0x50, 0xca, 0x91, 0x08, 0x83, 0x0c, 0x42, 0xc1, 0x0c, 0x32,
- 0x08, 0x86, 0x33, 0xc8, 0x20, 0x04, 0xd0, 0x20, 0x43, 0x90, 0x48, 0x77,
- 0x8d, 0xa5, 0xa0, 0xd8, 0x10, 0xc0, 0x87, 0xb6, 0x32, 0xc8, 0x20, 0x34,
- 0xcf, 0x78, 0x03, 0x07, 0x06, 0x6b, 0x70, 0xc1, 0x58, 0x0a, 0xca, 0x20,
- 0x43, 0x10, 0x4d, 0x23, 0x06, 0x05, 0x11, 0xc8, 0x41, 0x11, 0xcc, 0x31,
- 0x4c, 0x41, 0x1c, 0x8c, 0x37, 0x88, 0x81, 0x19, 0xb4, 0xc1, 0x05, 0x63,
- 0x29, 0x28, 0x83, 0x0c, 0xc1, 0x95, 0x8d, 0x18, 0x14, 0x44, 0x80, 0x07,
- 0x4b, 0x30, 0xc7, 0x60, 0x04, 0x76, 0x30, 0xde, 0x80, 0x06, 0x6c, 0x20,
- 0x07, 0x17, 0x8c, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0xdd, 0x37, 0x62, 0x50,
- 0x10, 0x81, 0x1f, 0x44, 0xc1, 0x1c, 0x83, 0x11, 0xe0, 0xc1, 0x1c, 0x43,
- 0xf0, 0xe1, 0x81, 0x05, 0x95, 0x7c, 0x32, 0x08, 0x88, 0x01, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0x08, 0x05, 0x00, 0x00, 0x00,
+ 0x54, 0xc7, 0x1a, 0x80, 0x81, 0x98, 0x63, 0x20, 0x06, 0x6f, 0x8e, 0x81,
+ 0xf0, 0xbc, 0xb1, 0x06, 0x20, 0x10, 0x28, 0x8e, 0x00, 0xd0, 0xab, 0x81,
+ 0x11, 0x00, 0x82, 0x33, 0x00, 0x14, 0xe6, 0x20, 0xc6, 0x60, 0x0c, 0xc6,
+ 0x20, 0x0c, 0x66, 0x00, 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf,
+ 0x08, 0xc0, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10,
+ 0x88, 0x01, 0xe4, 0x4c, 0x48, 0x72, 0x08, 0x83, 0x0c, 0x41, 0xc1, 0x8c,
+ 0x18, 0x28, 0x43, 0x40, 0x06, 0x11, 0x54, 0x29, 0x4b, 0x42, 0x0c, 0x32,
+ 0x04, 0xc7, 0x33, 0xc8, 0x30, 0x04, 0xd1, 0x59, 0x76, 0x29, 0x28, 0x83,
+ 0x0c, 0xc1, 0x12, 0x19, 0x11, 0xc0, 0x87, 0xb6, 0x32, 0xde, 0xb0, 0x7d,
+ 0x6b, 0x70, 0x81, 0x5d, 0x0a, 0xca, 0x20, 0x43, 0x10, 0x5d, 0x23, 0x06,
+ 0x85, 0x10, 0xc4, 0x81, 0x11, 0x8c, 0x37, 0x80, 0x01, 0x19, 0xa8, 0xc1,
+ 0x05, 0x76, 0x29, 0x28, 0x83, 0x0c, 0x81, 0xc5, 0x8d, 0x18, 0x14, 0x42,
+ 0x60, 0x07, 0x4b, 0x30, 0xde, 0x50, 0x06, 0x69, 0xe0, 0x06, 0x17, 0xd8,
+ 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x5b, 0x18, 0x8c, 0x18, 0x14, 0x42, 0xb0,
+ 0x07, 0x50, 0x30, 0xc7, 0xe0, 0x2d, 0x79, 0x30, 0xc7, 0x10, 0x1c, 0x7b,
+ 0x30, 0xc7, 0x10, 0x0c, 0x76, 0x60, 0xc1, 0x24, 0x9f, 0x0c, 0x02, 0x62,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0x18,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
- 0x21, 0x0c, 0x00, 0x00, 0x7d, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0xc8, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0x2f, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
@@ -1607,240 +1589,209 @@
0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
- 0x03, 0x01, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00, 0x16, 0xa0, 0xda, 0x60,
- 0x08, 0x04, 0xb0, 0x00, 0xd5, 0x06, 0x63, 0x38, 0x80, 0x05, 0xa8, 0x36,
- 0x90, 0x0b, 0xf1, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0x00, 0x12, 0x31,
- 0x0e, 0xef, 0x20, 0x0f, 0xf2, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xec, 0x90,
- 0x0f, 0x6d, 0x20, 0x0f, 0xef, 0x50, 0x0f, 0xee, 0x40, 0x0e, 0xe5, 0x40,
- 0x0e, 0x6d, 0x40, 0x0e, 0xe9, 0x60, 0x0f, 0xe9, 0x40, 0x0e, 0xe5, 0xd0,
- 0x06, 0xf3, 0x10, 0x0f, 0xf2, 0x40, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x80, 0x39, 0x84, 0x03, 0x3b,
- 0xcc, 0x43, 0x39, 0x00, 0x04, 0x39, 0xa4, 0xc3, 0x3c, 0x84, 0x83, 0x38,
- 0xb0, 0x43, 0x39, 0xb4, 0x01, 0x3d, 0x84, 0x43, 0x3a, 0xb0, 0x43, 0x1b,
- 0x8c, 0x43, 0x38, 0xb0, 0x03, 0x3b, 0xcc, 0x03, 0x60, 0x0e, 0xe1, 0xc0,
- 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xc1, 0x0e, 0xe5, 0x30, 0x0f, 0xf3, 0xd0,
- 0x06, 0xf0, 0x20, 0x0f, 0xe5, 0x30, 0x0e, 0xe9, 0x30, 0x0f, 0xe5, 0xd0,
- 0x06, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xe4, 0x00, 0xd0, 0x83, 0x3c,
- 0xd4, 0x43, 0x39, 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c,
- 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b,
- 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b,
- 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0xc0, 0xe0, 0x0e, 0xef, 0xd0,
- 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, 0x06, 0xf0, 0xf0,
- 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xe5, 0xc0,
- 0x0e, 0xe9, 0xd0, 0x0e, 0x6d, 0xe0, 0x0e, 0xef, 0xe0, 0x0e, 0x6d, 0xc0,
- 0x0e, 0xe5, 0x10, 0x0e, 0xe6, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x90,
- 0x0e, 0xee, 0x60, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0,
- 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39,
- 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa8, 0x43, 0x3d, 0xb4, 0x03, 0x3c,
- 0xb4, 0x01, 0x3d, 0x84, 0x83, 0x38, 0xb0, 0x43, 0x39, 0xcc, 0x03, 0x60,
- 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0,
- 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0,
- 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d,
- 0x94, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0xc1, 0x3c, 0xa4, 0xc3, 0x39,
- 0xb8, 0x43, 0x39, 0x90, 0x43, 0x1b, 0xe8, 0x43, 0x39, 0xc8, 0xc3, 0x3b,
- 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d,
- 0xa0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0x00, 0x31,
- 0x0f, 0xf4, 0x10, 0x0e, 0xe3, 0xb0, 0x0e, 0x6d, 0x00, 0x0f, 0xf2, 0xf0,
- 0x0e, 0xf4, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x6d, 0x20,
- 0x0e, 0xf5, 0x60, 0x0e, 0xe6, 0x50, 0x0e, 0xf2, 0xd0, 0x06, 0xf3, 0x90,
- 0x0e, 0xfa, 0x50, 0x0e, 0x00, 0x1e, 0x00, 0x04, 0x3d, 0x84, 0x83, 0x3c,
- 0x9c, 0x43, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x43, 0x39, 0x84, 0x03, 0x3d,
- 0xd4, 0x83, 0x3c, 0x94, 0xc3, 0x3c, 0x00, 0x6d, 0x60, 0x0e, 0xf0, 0x10,
- 0x07, 0x76, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50,
- 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80,
- 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xd4, 0xc3, 0x3c,
- 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03, 0x3d, 0xb4, 0x81, 0x39,
- 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30,
- 0x0f, 0xe5, 0x00, 0x6c, 0x50, 0x95, 0xe2, 0xff, 0xff, 0xff, 0xff, 0x07,
- 0x62, 0x1c, 0xde, 0x41, 0x1e, 0xe4, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xd8,
- 0x21, 0x1f, 0xda, 0x40, 0x1e, 0xde, 0xa1, 0x1e, 0xdc, 0x81, 0x1c, 0xca,
- 0x81, 0x1c, 0xda, 0x80, 0x1c, 0xd2, 0xc1, 0x1e, 0xd2, 0x81, 0x1c, 0xca,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1e, 0xe4, 0x81, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07,
- 0x71, 0x60, 0x87, 0x72, 0x68, 0x03, 0x7a, 0x08, 0x87, 0x74, 0x60, 0x87,
- 0x36, 0x18, 0x87, 0x70, 0x60, 0x07, 0x76, 0x98, 0x07, 0xc0, 0x1c, 0xc2,
- 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1d, 0xca, 0x61, 0x1e, 0xe6,
- 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xca, 0x61, 0x1c, 0xd2, 0x61, 0x1e, 0xca,
- 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0x21, 0x1c, 0xc8, 0x01, 0xa0, 0x07,
- 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x30, 0x07,
- 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48, 0x07,
- 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48, 0x87,
- 0x76, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x80, 0xc1, 0x1d, 0xde,
- 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0,
- 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca,
- 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0xda, 0xc0, 0x1d, 0xde, 0xc1, 0x1d, 0xda,
- 0x80, 0x1d, 0xca, 0x21, 0x1c, 0xcc, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda,
- 0x20, 0x1d, 0xdc, 0xc1, 0x1c, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda,
- 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87,
- 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87,
+ 0x99, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
- 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda,
- 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0,
- 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x73, 0x08, 0x07,
- 0x76, 0x98, 0x87, 0x72, 0x00, 0x88, 0x79, 0xa0, 0x87, 0x70, 0x18, 0x87,
- 0x75, 0x68, 0x03, 0x78, 0x90, 0x87, 0x77, 0xa0, 0x87, 0x72, 0x18, 0x07,
- 0x7a, 0x78, 0x07, 0x79, 0x68, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87,
- 0x72, 0x90, 0x87, 0x36, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, 0x00, 0xf0,
- 0x00, 0x20, 0xe8, 0x21, 0x1c, 0xe4, 0xe1, 0x1c, 0xca, 0x81, 0x1e, 0xda,
- 0xc0, 0x1c, 0xca, 0x21, 0x1c, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe6,
- 0x01, 0x68, 0x03, 0x73, 0x80, 0x87, 0x38, 0xb0, 0x03, 0x80, 0xa8, 0x07,
- 0x77, 0x98, 0x87, 0x70, 0x30, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87,
- 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea,
- 0xa1, 0x1c, 0x00, 0xa2, 0x1e, 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde,
- 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8,
- 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x60, 0x03, 0x61,
- 0x04, 0xc0, 0xb2, 0x81, 0x38, 0x04, 0x60, 0xd9, 0x80, 0x20, 0xff, 0xff,
- 0xff, 0xff, 0x3f, 0x00, 0x0c, 0x20, 0x01, 0xd5, 0x06, 0x22, 0xf9, 0xff,
- 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x41, 0x31,
- 0x61, 0x30, 0x0e, 0x64, 0x42, 0x90, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
- 0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
- 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
- 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00,
- 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x81, 0x30, 0x8c,
- 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47,
- 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28,
- 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e,
- 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6,
- 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6,
- 0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14,
- 0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30,
- 0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10,
- 0x30, 0x8c, 0x30, 0x40, 0xc3, 0x08, 0x04, 0x34, 0x47, 0x00, 0x0a, 0x83,
- 0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48,
- 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
- 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0,
- 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8,
- 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a,
- 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71,
- 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a,
- 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a,
- 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73,
- 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
- 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
- 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
- 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a,
- 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78,
- 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72,
- 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76,
- 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a,
- 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73,
- 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d,
- 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
- 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
- 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a,
- 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
- 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78,
- 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79,
- 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75,
- 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72,
- 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6,
- 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a,
- 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72,
- 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71,
- 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a,
- 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
- 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72,
- 0x30, 0x84, 0x61, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
- 0xc2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61,
- 0x26, 0x20, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
- 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82, 0x23, 0x00, 0x25, 0x50,
- 0x20, 0x05, 0x18, 0x50, 0x10, 0x45, 0x50, 0x06, 0x05, 0x54, 0x60, 0x85,
- 0x50, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
- 0x0d, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0xd7, 0x20, 0x08, 0x0e,
- 0x8e, 0xad, 0x0c, 0x84, 0x89, 0xc9, 0xaa, 0x09, 0xc4, 0xae, 0x4c, 0x6e,
- 0x2e, 0xed, 0xcd, 0x0d, 0x04, 0x07, 0x46, 0xc6, 0x25, 0x06, 0x04, 0xa5,
- 0xad, 0x8c, 0x2e, 0x8c, 0xcd, 0xac, 0xac, 0x05, 0x07, 0x46, 0xc6, 0x25,
- 0xc6, 0x65, 0x86, 0x26, 0x65, 0x88, 0x40, 0x01, 0x43, 0x0c, 0x88, 0x80,
- 0x0e, 0x68, 0x60, 0xd1, 0x54, 0x46, 0x17, 0xc6, 0x36, 0x04, 0xa1, 0x06,
- 0x88, 0x80, 0x08, 0x68, 0xe0, 0x16, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
- 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x42, 0x56, 0xe6, 0xf6, 0x26, 0xd7, 0x36,
- 0xf7, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x0a,
- 0x72, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
- 0x2e, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x68, 0x5f, 0x65,
- 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xea, 0x60, 0x19, 0x84, 0xa5,
- 0xc9, 0xb9, 0x8c, 0xbd, 0xb5, 0xc1, 0xa5, 0xb1, 0x95, 0xb9, 0x98, 0xc9,
- 0x85, 0xb5, 0x95, 0x89, 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0x99, 0x95,
- 0xd1, 0x8d, 0xa1, 0x7d, 0x91, 0xa5, 0xcd, 0x85, 0x89, 0xb1, 0x95, 0x0d,
- 0x11, 0xa8, 0x84, 0x61, 0x10, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06,
- 0x97, 0xc6, 0x56, 0xe6, 0xe2, 0x16, 0x46, 0x97, 0x66, 0x57, 0xf6, 0x45,
- 0xf6, 0x56, 0x27, 0xc6, 0x56, 0xf6, 0x45, 0x96, 0x36, 0x17, 0x26, 0xc6,
- 0x56, 0x36, 0x44, 0xa0, 0x16, 0x46, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65,
- 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x8c,
- 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca,
- 0xbe, 0xdc, 0xc2, 0xda, 0xca, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xd1,
- 0x0c, 0x41, 0xa8, 0x06, 0x1a, 0x28, 0x87, 0x7a, 0x86, 0x08, 0x14, 0x44,
- 0x26, 0x2c, 0x4d, 0xce, 0x05, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd,
- 0x8d, 0x4a, 0x58, 0x9a, 0x9c, 0xcb, 0x58, 0x99, 0x1b, 0x5d, 0x99, 0x1c,
- 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb7, 0xb7, 0x2f, 0xb8, 0x32, 0xb9, 0x39,
- 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x32, 0x61, 0x69, 0x72, 0x2e,
- 0x61, 0x72, 0x67, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x44, 0xe0, 0xde, 0xe6,
- 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0x86, 0x40, 0xd0, 0x40, 0x49, 0xd4, 0x44,
- 0x51, 0x94, 0x43, 0x3d, 0x54, 0x45, 0x59, 0x94, 0xc2, 0xd2, 0xe4, 0x5c,
- 0xcc, 0xe4, 0xc2, 0xce, 0xda, 0xca, 0xdc, 0xe8, 0xbe, 0xd2, 0xdc, 0xe0,
- 0xea, 0xe8, 0x98, 0x9d, 0x95, 0xb9, 0x95, 0xc9, 0x85, 0xd1, 0x95, 0x91,
- 0xa1, 0xe0, 0xd0, 0x95, 0xe1, 0x8d, 0xbd, 0xbd, 0xc9, 0x91, 0x11, 0xd9,
- 0xc9, 0x7c, 0x99, 0xa5, 0xf0, 0x09, 0x4b, 0x93, 0x73, 0x81, 0x2b, 0x93,
- 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0xa3, 0x61, 0xc6, 0xf6,
- 0x16, 0x46, 0x27, 0x43, 0x84, 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e,
- 0x6c, 0x88, 0x04, 0x11, 0x14, 0x46, 0x65, 0xd4, 0x44, 0x69, 0x94, 0x43,
- 0x6d, 0x54, 0x45, 0x71, 0x54, 0xc2, 0xd2, 0xe4, 0x5c, 0xc4, 0xea, 0xcc,
- 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88, 0xd5, 0x99, 0x99,
- 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a, 0x4b, 0x93, 0x73,
- 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb, 0x4a, 0x73, 0x23,
- 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57, 0x16, 0x46, 0xc6,
- 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae,
- 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a, 0x9c, 0x4b, 0x98,
- 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18, 0x5b, 0xda, 0x99,
- 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x87, 0xb1, 0x37, 0xb6, 0x21, 0x60,
- 0x00, 0x21, 0x94, 0x47, 0x7d, 0x50, 0x41, 0x81, 0x01, 0x34, 0x40, 0x04,
- 0x15, 0x06, 0x94, 0x18, 0x40, 0x05, 0x35, 0x06, 0x50, 0x41, 0x39, 0xd4,
- 0x43, 0x55, 0x14, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93,
- 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33,
- 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc,
- 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d,
- 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66,
- 0x66, 0x43, 0xd0, 0x00, 0x1a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd0,
- 0x00, 0x2a, 0xa0, 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd2, 0x00, 0x52, 0xa0,
- 0x02, 0x1a, 0xa8, 0x33, 0xa0, 0xd4, 0x00, 0x5a, 0xa0, 0x02, 0x1a, 0xa8,
- 0x33, 0xa0, 0xd6, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b,
- 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00,
- 0x25, 0x94, 0x47, 0x7d, 0x90, 0x41, 0x81, 0x01, 0x44, 0x40, 0x04, 0x15,
- 0x06, 0x94, 0x19, 0x50, 0x6c, 0x40, 0x89, 0x01, 0x64, 0x50, 0x63, 0x00,
- 0x15, 0x94, 0x43, 0xb5, 0x01, 0x55, 0x51, 0x6e, 0xc0, 0x25, 0x2c, 0x4d,
- 0xce, 0x85, 0xae, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x8c, 0x4a, 0x58, 0x9a,
- 0x9c, 0xcb, 0x5c, 0x58, 0x1b, 0x1c, 0x5b, 0x19, 0x31, 0xba, 0x32, 0x3c,
- 0xba, 0x3a, 0xb9, 0x32, 0x19, 0x32, 0x1e, 0x33, 0xb6, 0xb7, 0x30, 0x3a,
- 0x16, 0x90, 0xb9, 0xb0, 0x36, 0x38, 0xb6, 0x32, 0x1f, 0x12, 0x74, 0x65,
- 0x78, 0x59, 0x43, 0x28, 0x88, 0xa1, 0xe0, 0x80, 0x02, 0x03, 0x68, 0x80,
- 0x08, 0x2a, 0x0e, 0x28, 0x87, 0x92, 0x03, 0xaa, 0xa2, 0xe6, 0x80, 0x05,
- 0x5d, 0x19, 0x5e, 0x95, 0xd5, 0x10, 0x0a, 0x6a, 0x28, 0x38, 0xa0, 0xc0,
- 0x00, 0x22, 0x20, 0x82, 0x8a, 0x03, 0xca, 0xa1, 0xe4, 0x80, 0xaa, 0xa8,
- 0x3a, 0xe0, 0x12, 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56,
- 0x26, 0xc7, 0x63, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc,
- 0x10, 0x09, 0x72, 0xa8, 0x3b, 0xa0, 0xc0, 0x00, 0x1a, 0x20, 0x82, 0x72,
- 0x28, 0x3c, 0xa0, 0x2a, 0x2a, 0x0f, 0x86, 0x38, 0xd4, 0x45, 0x75, 0x54,
- 0x19, 0x50, 0x6f, 0x40, 0xd1, 0x01, 0x65, 0x07, 0x94, 0x1e, 0x0c, 0x31,
- 0x18, 0x80, 0x8a, 0xa8, 0x3d, 0xe0, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7,
- 0x46, 0x57, 0xe6, 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a,
- 0xad, 0x0d, 0x8e, 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28,
- 0x28, 0x68, 0x88, 0x40, 0xf9, 0xc1, 0x10, 0x83, 0xea, 0x03, 0xea, 0x0f,
- 0xae, 0x67, 0x88, 0x41, 0x81, 0x02, 0x05, 0x0a, 0xd7, 0x33, 0x42, 0x61,
- 0x07, 0x76, 0xb0, 0x87, 0x76, 0x70, 0x83, 0x74, 0x20, 0x87, 0x72, 0x70,
- 0x07, 0x7a, 0x98, 0x12, 0x04, 0x23, 0x96, 0x70, 0x48, 0x07, 0x79, 0x70,
- 0x03, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98,
- 0x12, 0x08, 0x23, 0xa8, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x76, 0x08,
- 0x07, 0x77, 0x38, 0x87, 0x7a, 0x08, 0x87, 0x73, 0x28, 0x87, 0x5f, 0xb0,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x86, 0x30, 0x00, 0x0b, 0x50,
+ 0x6d, 0x30, 0x06, 0x02, 0x58, 0x80, 0x6a, 0x83, 0x41, 0x14, 0xc0, 0x02,
+ 0x54, 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x18, 0x07, 0xb0,
+ 0x00, 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00,
+ 0x6a, 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04,
+ 0x54, 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0,
+ 0x00, 0x15, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10, 0x1c, 0x13, 0x06, 0x24,
+ 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+ 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+ 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30,
+ 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49,
+ 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20,
+ 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61,
+ 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31,
+ 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff,
+ 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84,
+ 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14, 0xad, 0x32, 0x00, 0x42,
+ 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30, 0x8c, 0x20, 0x40, 0x05,
+ 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10, 0x30, 0x8c, 0x30, 0x40,
+ 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83, 0x08, 0x84, 0x30, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03,
+ 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0,
+ 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0,
+ 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80,
+ 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
+ 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10,
+ 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60,
+ 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60,
+ 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20,
+ 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0,
+ 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20,
+ 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20,
+ 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40,
+ 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x61, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x38, 0x40, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x61, 0x26, 0x20, 0x00, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0x82, 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80,
+ 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40,
+ 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00,
+ 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9,
+ 0x34, 0xbd, 0xb2, 0x21, 0x06, 0x34, 0x50, 0x00, 0x64, 0x70, 0x0d, 0x82,
+ 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca,
+ 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x62, 0x40,
+ 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64,
+ 0x5c, 0x62, 0x5c, 0x68, 0x72, 0x52, 0x86, 0x08, 0x94, 0x30, 0xc4, 0x80,
+ 0x06, 0x08, 0x81, 0x08, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10,
+ 0xaa, 0x80, 0x06, 0x68, 0x80, 0x08, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04,
+ 0xea, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6,
+ 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6,
+ 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0, 0x12, 0x96, 0x41,
+ 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b,
+ 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97,
+ 0x59, 0x19, 0xdd, 0x18, 0xda, 0x17, 0x59, 0xda, 0x5c, 0x98, 0x18, 0x5b,
+ 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61,
+ 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22,
+ 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46,
+ 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f,
+ 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18,
+ 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20, 0x82, 0x82, 0xa8, 0x68, 0x88, 0x40,
+ 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2,
+ 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95,
+ 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93,
+ 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26,
+ 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee,
+ 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x04, 0x11, 0x14, 0x45,
+ 0x55, 0x94, 0x45, 0x41, 0x54, 0x44, 0x5d, 0x14, 0x46, 0x29, 0x2c, 0x4d,
+ 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd,
+ 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d,
+ 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19,
+ 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8,
+ 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66,
+ 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde,
+ 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40, 0x69, 0xd4, 0x46, 0x55, 0x14, 0x47,
+ 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac,
+ 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d,
+ 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34,
+ 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34,
+ 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61,
+ 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2,
+ 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9,
+ 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5,
+ 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b,
+ 0x02, 0x06, 0x50, 0x42, 0x81, 0x01, 0x15, 0x06, 0x50, 0x41, 0x89, 0x01,
+ 0x44, 0x40, 0x03, 0x35, 0x06, 0x14, 0x19, 0x40, 0x05, 0x55, 0x06, 0x50,
+ 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73,
+ 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb,
+ 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43,
+ 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99,
+ 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63,
+ 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x22, 0xa0, 0x02, 0x22, 0xa8,
+ 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd6,
+ 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd8, 0x00, 0x62, 0xa0,
+ 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51,
+ 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2,
+ 0x21, 0x64, 0x00, 0x29, 0x14, 0x18, 0x50, 0x61, 0x00, 0x1d, 0x94, 0x18,
+ 0x40, 0x03, 0x34, 0x50, 0x63, 0x40, 0xa1, 0x01, 0xe5, 0x06, 0x14, 0x19,
+ 0x40, 0x07, 0x55, 0x06, 0x50, 0x41, 0x41, 0xd4, 0x1b, 0x50, 0x17, 0x05,
+ 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4,
+ 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95,
+ 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31,
+ 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b,
+ 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97, 0x35, 0x84, 0x82, 0x0c, 0x4a, 0x0e,
+ 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0, 0xe6, 0x80, 0x82, 0x28, 0x3a, 0xa0,
+ 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95, 0xe1, 0x55, 0x59, 0x0d, 0xa1, 0xa0,
+ 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0, 0x01, 0x1a, 0xa8, 0x39, 0xa0, 0x20,
+ 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03, 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x73,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8,
+ 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0x20, 0x87, 0xca, 0x03, 0x4a, 0x0c,
+ 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2, 0x03, 0xea, 0xa2, 0xf6, 0x60, 0x88,
+ 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01, 0x15, 0x07, 0x94, 0x1d, 0x50, 0x78,
+ 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01, 0xa8, 0x89, 0xea, 0x03, 0x3e, 0x6f,
+ 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56,
+ 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x14, 0x28, 0x0c, 0x31,
+ 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a, 0x86, 0x18, 0x94, 0x28, 0x50, 0xa2,
+ 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
+ 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03, 0x73, 0x60,
+ 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14, 0x76, 0x60,
+ 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0,
+ 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0,
0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01,
- 0x31, 0x62, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68,
- 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x87, 0x5f, 0x78, 0x07, 0x78, 0xa0,
- 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x87, 0x29, 0x84, 0x81, 0x28, 0xcc,
- 0x08, 0x26, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0xc0, 0x1c, 0xe4, 0x21, 0x1c,
- 0xce, 0xa1, 0x1d, 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0xc0, 0x07, 0x00,
- 0x79, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70,
+ 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28,
+ 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23,
+ 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80,
+ 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48,
+ 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60,
+ 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x7e, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
@@ -1871,33 +1822,37 @@
0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
- 0x50, 0x0e, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
- 0x16, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb,
- 0x26, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11,
- 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00,
- 0x11, 0xdb, 0x95, 0xff, 0xf9, 0xda, 0xf5, 0x5f, 0x44, 0x80, 0xc1, 0x10,
- 0xcd, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
- 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
- 0x64, 0xe7, 0x20, 0x06, 0x02, 0xf1, 0xa8, 0x8e, 0x35, 0x00, 0x03, 0x31,
- 0xc7, 0x30, 0x10, 0xde, 0x1c, 0xc3, 0xe0, 0x79, 0x63, 0x0d, 0x40, 0x20,
- 0xd0, 0xab, 0x81, 0x11, 0x00, 0x82, 0x33, 0x00, 0x14, 0x47, 0x00, 0xc6,
- 0x12, 0x02, 0x80, 0xc8, 0x0c, 0x00, 0x89, 0x19, 0x00, 0x0a, 0x33, 0x00,
- 0x04, 0xc6, 0x08, 0x40, 0x10, 0x04, 0xf1, 0x6f, 0x04, 0x00, 0x00, 0x00,
- 0x23, 0x06, 0xca, 0x10, 0x90, 0x81, 0x04, 0x55, 0xca, 0x91, 0x04, 0x23,
- 0x06, 0xca, 0x10, 0x94, 0x81, 0x14, 0x59, 0x0b, 0xa2, 0x08, 0x83, 0x0c,
- 0x41, 0x81, 0x0c, 0x32, 0x0c, 0xc6, 0x33, 0xc8, 0x20, 0x20, 0xd1, 0x20,
- 0x83, 0x10, 0x4c, 0x83, 0x0c, 0xc1, 0x52, 0x9d, 0x36, 0x96, 0x82, 0x62,
- 0x43, 0x00, 0x1f, 0xf2, 0xca, 0x20, 0x83, 0xe0, 0x58, 0xe3, 0x0d, 0xdf,
- 0x18, 0xb8, 0xc1, 0x05, 0x63, 0x29, 0x28, 0x83, 0x0c, 0x81, 0xa4, 0x8d,
- 0x18, 0x14, 0x44, 0x50, 0x07, 0x45, 0x30, 0xc7, 0x40, 0x05, 0x74, 0x30,
- 0xde, 0x50, 0x06, 0x69, 0x00, 0x07, 0x17, 0x8c, 0xa5, 0xa0, 0x0c, 0x32,
- 0x04, 0x18, 0x18, 0x8c, 0x18, 0x14, 0x44, 0xb0, 0x07, 0x4b, 0x30, 0xc7,
- 0x60, 0x04, 0x79, 0x30, 0xde, 0xb0, 0x06, 0x6f, 0x50, 0x07, 0x17, 0x8c,
- 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x9e, 0x19, 0x8c, 0x18, 0x14, 0x44, 0x10,
- 0x0a, 0x51, 0x30, 0xc7, 0x60, 0x04, 0x7b, 0x30, 0xc7, 0x10, 0x80, 0xc1,
- 0x1e, 0x58, 0x50, 0xc9, 0x27, 0x83, 0x80, 0x18, 0x02, 0x00, 0x00, 0x00,
- 0x5b, 0x06, 0x25, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0xd0, 0x00, 0x48,
+ 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb, 0x26, 0xb0, 0x01, 0x48,
+ 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4,
+ 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00, 0x11, 0xdb, 0x95, 0xff,
+ 0xf9, 0xda, 0xf5, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x54, 0xc7, 0x1a, 0x80,
+ 0x81, 0x98, 0x63, 0x20, 0x86, 0x6f, 0x8e, 0x81, 0xf8, 0xbe, 0xb1, 0x06,
+ 0x20, 0x10, 0x28, 0x8e, 0x25, 0x04, 0xc0, 0x08, 0x00, 0xbd, 0x1a, 0x18,
+ 0x01, 0x20, 0x38, 0x03, 0x40, 0x62, 0x06, 0x80, 0xc2, 0x1c, 0x44, 0x19,
+ 0x94, 0x41, 0x19, 0x8c, 0xc1, 0x0c, 0x00, 0x81, 0x31, 0x02, 0x10, 0x04,
+ 0x41, 0xfc, 0x1b, 0x01, 0x98, 0x01, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10,
+ 0x90, 0x81, 0x04, 0x55, 0x89, 0x82, 0x08, 0x83, 0x0c, 0x41, 0xe1, 0x8c,
+ 0x18, 0x28, 0x43, 0x60, 0x06, 0x93, 0x74, 0x2d, 0x8c, 0x42, 0x0c, 0x32,
+ 0x04, 0x87, 0x33, 0xc8, 0x10, 0x28, 0xd2, 0x20, 0x03, 0x11, 0x50, 0x97,
+ 0xd9, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x0c, 0x65, 0x44, 0x00, 0x1f, 0xf2,
+ 0xca, 0x78, 0x83, 0x27, 0x06, 0x6e, 0x70, 0x81, 0x5d, 0x0a, 0xca, 0x20,
+ 0x43, 0x20, 0x69, 0x23, 0x06, 0x85, 0x10, 0xd0, 0x81, 0x11, 0x8c, 0x37,
+ 0x8c, 0xc1, 0x19, 0xb4, 0xc1, 0x05, 0x76, 0x29, 0x28, 0x83, 0x0c, 0xc1,
+ 0xf5, 0x8d, 0x18, 0x14, 0x42, 0x90, 0x07, 0x4b, 0x30, 0xde, 0x80, 0x06,
+ 0x6c, 0x10, 0x07, 0x17, 0xd8, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x1c, 0x19,
+ 0x8c, 0x18, 0x14, 0x42, 0xe0, 0x07, 0x50, 0x30, 0xc7, 0xf0, 0x2d, 0x7c,
+ 0x30, 0xc7, 0x10, 0x1c, 0x7e, 0x30, 0xc7, 0x10, 0x0c, 0x79, 0x60, 0xc1,
+ 0x24, 0x9f, 0x0c, 0x02, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x5b, 0x06, 0x25, 0x18, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-const unsigned int sdl_metallib_len = 22792;
+const unsigned int sdl_metallib_len = 22256;
--- /dev/null
+++ b/external/SDL2/src/render/metal/SDL_shaders_metal_tvos.h
@@ -1,0 +1,1854 @@
+const unsigned char sdl_metallib[] = {
+ 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x52, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
+ 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f,
+ 0x6c, 0x69, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54,
+ 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00,
+ 0x45, 0xa4, 0xbe, 0x89, 0x2e, 0x2c, 0x8e, 0xd4, 0xa0, 0xef, 0x01, 0xb2,
+ 0x62, 0x4b, 0xff, 0xf0, 0x3b, 0xeb, 0xd7, 0x7e, 0x01, 0x0f, 0xae, 0x41,
+ 0x0f, 0x08, 0x92, 0x06, 0xfa, 0xc6, 0x69, 0x55, 0x4f, 0x46, 0x46, 0x54,
+ 0x18, 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, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, 0x00,
+ 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, 0x6f,
+ 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, 0x59,
+ 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, 0xb6,
+ 0xf4, 0xc3, 0x80, 0xba, 0xcf, 0x0d, 0x8e, 0xd4, 0x68, 0xf5, 0xb9, 0x2c,
+ 0xd1, 0x45, 0xb3, 0x1b, 0xac, 0xc2, 0x78, 0x39, 0x53, 0xc7, 0x0b, 0xcd,
+ 0xb6, 0xe3, 0x76, 0x33, 0xaa, 0x2e, 0x8f, 0x4f, 0x46, 0x46, 0x54, 0x18,
+ 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7a, 0x00, 0x00, 0x00, 0x4e,
+ 0x41, 0x4d, 0x45, 0x13, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x6f, 0x6c,
+ 0x69, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00,
+ 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48, 0x20,
+ 0x00, 0x3f, 0xe4, 0x5e, 0x63, 0x77, 0x67, 0xd7, 0x6c, 0x97, 0xec, 0xf8,
+ 0x8c, 0xd5, 0x29, 0xee, 0xb1, 0x59, 0x5a, 0x96, 0xeb, 0x34, 0x29, 0xe0,
+ 0x5d, 0x30, 0x83, 0xf8, 0x19, 0x0c, 0xc1, 0x3a, 0xa6, 0x4f, 0x46, 0x46,
+ 0x54, 0x18, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08,
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00, 0x00,
+ 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43,
+ 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
+ 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
+ 0x20, 0x00, 0x0a, 0x80, 0x62, 0x7c, 0x63, 0x3a, 0x22, 0xca, 0x18, 0x9b,
+ 0xb9, 0xed, 0x7b, 0x7f, 0x72, 0xe4, 0x6c, 0x81, 0x44, 0x90, 0xc8, 0x9b,
+ 0x39, 0xd5, 0x51, 0x21, 0x76, 0x62, 0xb7, 0x34, 0xe0, 0xea, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
+ 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x78, 0x00,
+ 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x11, 0x00, 0x53, 0x44, 0x4c, 0x5f,
+ 0x59, 0x55, 0x56, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74,
+ 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, 0x48,
+ 0x20, 0x00, 0xc2, 0x1e, 0xea, 0x5a, 0xf5, 0x3c, 0xfa, 0xc9, 0x2c, 0xea,
+ 0xdf, 0xde, 0x51, 0xe1, 0xd6, 0xf1, 0x30, 0xf0, 0xf9, 0x1b, 0xe9, 0x75,
+ 0x2c, 0xb0, 0x2d, 0xd5, 0x45, 0x54, 0x09, 0xd2, 0x32, 0x49, 0x4f, 0x46,
+ 0x46, 0x54, 0x18, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x2b, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00,
+ 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, 0x00,
+ 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f,
+ 0x4e, 0x56, 0x31, 0x32, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e,
+ 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53,
+ 0x48, 0x20, 0x00, 0x33, 0x8f, 0xc9, 0x0c, 0x25, 0x98, 0x11, 0x08, 0xc7,
+ 0xbb, 0x75, 0x63, 0xf6, 0x34, 0xd9, 0x0b, 0xfe, 0x81, 0x05, 0xf5, 0x10,
+ 0x37, 0x22, 0x55, 0xa3, 0x88, 0xb6, 0x37, 0xa6, 0x3b, 0xf2, 0x54, 0x4f,
+ 0x46, 0x46, 0x54, 0x18, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01,
+ 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79,
+ 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c,
+ 0x5f, 0x4e, 0x56, 0x32, 0x31, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65,
+ 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41,
+ 0x53, 0x48, 0x20, 0x00, 0x51, 0x09, 0xf0, 0x66, 0x39, 0x28, 0x0b, 0xcd,
+ 0x2e, 0xda, 0x6d, 0x9b, 0x37, 0x00, 0x1a, 0x69, 0xc7, 0x49, 0x0f, 0xec,
+ 0xb1, 0x16, 0xab, 0x82, 0xa5, 0xdf, 0x9b, 0xc9, 0x40, 0x9e, 0x1e, 0x40,
+ 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00,
+ 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54,
+ 0x45, 0x4e, 0x44, 0x54, 0x20, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x0d, 0x00, 0x01, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x56, 0x41, 0x54, 0x59, 0x03, 0x00, 0x01, 0x00, 0x04,
+ 0x45, 0x4e, 0x44, 0x54, 0x2c, 0x00, 0x00, 0x00, 0x56, 0x41, 0x54, 0x54,
+ 0x18, 0x00, 0x02, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x00, 0x80, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x00,
+ 0x01, 0x80, 0x56, 0x41, 0x54, 0x59, 0x04, 0x00, 0x02, 0x00, 0x04, 0x04,
+ 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
+ 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
+ 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
+ 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54,
+ 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00,
+ 0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x68, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xd7, 0x02, 0x00, 0x00,
+ 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39,
+ 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62,
+ 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14,
+ 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21,
+ 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08,
+ 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00,
+ 0x51, 0x18, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x1b, 0xf6, 0x25, 0xf8,
+ 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a, 0x18, 0x87, 0x77, 0x90,
+ 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76, 0xc8, 0x87, 0x36, 0x90,
+ 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72, 0x20, 0x87, 0x36, 0x20,
+ 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72, 0x68, 0x83, 0x79, 0x88,
+ 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c,
+ 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c,
+ 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1, 0x0d, 0xc6, 0x21, 0x1c,
+ 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28,
+ 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79, 0x68, 0x03, 0x78, 0x90,
+ 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72, 0x68, 0x03, 0x73, 0x80,
+ 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e,
+ 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e,
+ 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21, 0x1d, 0xda, 0x01, 0xa0,
+ 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77, 0x78, 0x87, 0x36, 0x30,
+ 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36, 0x80, 0x87, 0x77, 0x48,
+ 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36, 0x28, 0x07, 0x76, 0x48,
+ 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77, 0x68, 0x03, 0x76, 0x28,
+ 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x83, 0x74, 0x70,
+ 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08,
+ 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20,
+ 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1, 0x1d, 0xe0, 0xa1, 0x0d,
+ 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x1e, 0x00, 0x73, 0x08,
+ 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x70,
+ 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68,
+ 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c,
+ 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xce, 0xc1, 0x1d,
+ 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41, 0x1e, 0xde, 0x61, 0x1e,
+ 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d,
+ 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68,
+ 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78, 0x48, 0x07, 0x77, 0x38,
+ 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e,
+ 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21, 0x1c, 0xc6, 0x61, 0x1d,
+ 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1, 0x1c, 0xc6, 0x81, 0x1e,
+ 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c,
+ 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x00, 0x3c, 0x00,
+ 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72, 0xa0, 0x87, 0x36, 0x30,
+ 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79, 0x28, 0x87, 0x79, 0x00,
+ 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00, 0x20, 0xea, 0xc1, 0x1d,
+ 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d,
+ 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28,
+ 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36, 0x98, 0x87, 0x77, 0x30,
+ 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77, 0x08, 0x07, 0x7a, 0x00,
+ 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0xd8, 0x80, 0x08, 0x02,
+ 0x90, 0x00, 0x0b, 0x50, 0x6d, 0x40, 0x86, 0x01, 0x48, 0x80, 0x05, 0xa8,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x21, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x3c, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x70, 0x9f, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xac, 0xb3,
+ 0x20, 0xc3, 0x4b, 0x44, 0x13, 0x71, 0xa1, 0xd4, 0xf4, 0x50, 0x93, 0xff,
+ 0x00, 0x82, 0x42, 0x0c, 0x58, 0x08, 0x18, 0x46, 0x10, 0x80, 0x24, 0x88,
+ 0x99, 0xa8, 0x79, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x71, 0xa0, 0x07, 0x37,
+ 0x68, 0x87, 0x72, 0xa0, 0x87, 0x70, 0x60, 0x07, 0x3d, 0xd0, 0x83, 0x76,
+ 0x08, 0x07, 0x7a, 0x90, 0x87, 0x74, 0xc0, 0x07, 0x14, 0xd0, 0x20, 0x42,
+ 0x21, 0x14, 0x42, 0xc6, 0x8c, 0x6e, 0x20, 0x60, 0x8e, 0x00, 0x0c, 0xe6,
+ 0x08, 0x40, 0x61, 0x10, 0x21, 0x10, 0x86, 0x11, 0x08, 0x65, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
+ 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
+ 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
+ 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
+ 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
+ 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
+ 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
+ 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
+ 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x43, 0x18, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x2c, 0x10, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xd2,
+ 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28, 0x90, 0x42, 0x28, 0x88,
+ 0x32, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xd1, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x86, 0x12, 0x24, 0x80,
+ 0x62, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66, 0x52, 0x86, 0x08, 0x89,
+ 0x30, 0xc4, 0x50, 0x02, 0xe5, 0x50, 0x04, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25, 0x50, 0x04, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26,
+ 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c,
+ 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb,
+ 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99,
+ 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4,
+ 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64, 0xa2, 0x13, 0x96, 0x26, 0xe7, 0x02,
+ 0xf7, 0x96, 0xe6, 0x46, 0xf7, 0x35, 0x97, 0xa6, 0x57, 0xc6, 0xc2, 0x8c,
+ 0xed, 0x2d, 0x8c, 0x8e, 0x09, 0xdc, 0x5b, 0x9a, 0x1b, 0xdd, 0x54, 0x9a,
+ 0x5e, 0xd9, 0x10, 0x25, 0xa9, 0x12, 0x28, 0xb1, 0x12, 0x29, 0xb9, 0x86,
+ 0x10, 0x09, 0x95, 0x60, 0x84, 0xc2, 0xd2, 0xe4, 0x5c, 0xec, 0xca, 0xe4,
+ 0xe8, 0xca, 0xf0, 0xbe, 0xd2, 0xdc, 0xe0, 0xea, 0xe8, 0x28, 0x85, 0xa5,
+ 0xc9, 0xb9, 0xb0, 0xbd, 0x8d, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0x7d, 0xa5,
+ 0xb9, 0x91, 0x95, 0xe1, 0x31, 0x3b, 0x2b, 0x73, 0x2b, 0x93, 0x0b, 0xa3,
+ 0x2b, 0x23, 0x43, 0xc1, 0x81, 0x7b, 0x9b, 0x4b, 0xa3, 0x4b, 0x7b, 0x73,
+ 0x23, 0xb2, 0x93, 0xf9, 0x32, 0x4b, 0xa1, 0x61, 0xc6, 0xf6, 0x16, 0x46,
+ 0x27, 0x33, 0x84, 0x52, 0x84, 0x44, 0x4b, 0x36, 0x45, 0x50, 0x82, 0x84,
+ 0x4b, 0xa0, 0xa4, 0x4b, 0xa4, 0x64, 0xa2, 0x12, 0x96, 0x26, 0xe7, 0x22,
+ 0x56, 0x67, 0x66, 0x56, 0x26, 0xc7, 0x27, 0x2c, 0x4d, 0xce, 0x45, 0xac,
+ 0xce, 0xcc, 0xac, 0x4c, 0xee, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x48, 0x58,
+ 0x9a, 0x9c, 0x8b, 0x5c, 0x59, 0x18, 0x19, 0xa3, 0xb0, 0x34, 0x39, 0x97,
+ 0x30, 0xb9, 0xb3, 0x2f, 0xba, 0x3c, 0xb8, 0xb2, 0xaf, 0xb9, 0x34, 0xbd,
+ 0x32, 0x5e, 0x61, 0x69, 0x72, 0x2e, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79,
+ 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x73, 0x69, 0x7a,
+ 0x65, 0x44, 0xcc, 0xd8, 0xde, 0xc2, 0xe8, 0x68, 0xf0, 0x68, 0xa8, 0xc0,
+ 0xc9, 0xbd, 0xa9, 0x95, 0x8d, 0xd1, 0xa5, 0xbd, 0xb9, 0x0d, 0x01, 0x03,
+ 0x25, 0x48, 0xbe, 0x04, 0x0c, 0x94, 0x21, 0xd9, 0x14, 0x42, 0x09, 0x92,
+ 0x30, 0x48, 0xc4, 0x40, 0x19, 0x92, 0x31, 0x50, 0x8a, 0x04, 0x4a, 0xc8,
+ 0x20, 0x91, 0x92, 0x32, 0x60, 0x42, 0x27, 0x17, 0xe6, 0x36, 0x67, 0xf6,
+ 0x26, 0xd7, 0x36, 0x04, 0x0c, 0x14, 0x22, 0xf9, 0x12, 0x30, 0x50, 0x86,
+ 0x64, 0x53, 0x10, 0x25, 0x48, 0xc2, 0x20, 0x11, 0x03, 0x65, 0x48, 0xc6,
+ 0x40, 0x29, 0x12, 0x28, 0x21, 0x83, 0x44, 0x4a, 0xce, 0x60, 0x88, 0x91,
+ 0x78, 0x89, 0x19, 0x24, 0x68, 0x30, 0xc4, 0x40, 0x80, 0x24, 0x4b, 0xd2,
+ 0x80, 0xcf, 0x5b, 0x9b, 0x5b, 0x1a, 0xdc, 0x1b, 0x5d, 0x99, 0x1b, 0x1d,
+ 0xc8, 0x18, 0x5a, 0x98, 0x1c, 0x9f, 0xa9, 0xb4, 0x36, 0x38, 0xb6, 0x32,
+ 0x90, 0xa1, 0x95, 0x15, 0x10, 0x2a, 0xa1, 0xa0, 0xa0, 0x21, 0x42, 0xc2,
+ 0x06, 0x43, 0x8c, 0x64, 0x0d, 0x92, 0x36, 0x58, 0x92, 0x21, 0x46, 0xe2,
+ 0x06, 0x89, 0x1b, 0x2c, 0xc9, 0x88, 0x88, 0x1d, 0xd8, 0xc1, 0x1e, 0xda,
+ 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, 0xa1, 0x1c, 0xdc,
+ 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, 0x04, 0xc1, 0x08,
+ 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c, 0xca,
+ 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x30, 0x8c, 0x58, 0xc2, 0x21, 0x1d, 0xe4,
+ 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc,
+ 0x61, 0x4a, 0x40, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8,
+ 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c, 0x7e,
+ 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xa6,
+ 0x04, 0xc6, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde,
+ 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d, 0xe0,
+ 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x88, 0xc2,
+ 0x38, 0x23, 0x94, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07,
+ 0x79, 0xa0, 0x87, 0x72, 0xc0, 0x87, 0x29, 0x81, 0x1a, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+ 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+ 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+ 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+ 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+ 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+ 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+ 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+ 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+ 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+ 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+ 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+ 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+ 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+ 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+ 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+ 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+ 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+ 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+ 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+ 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+ 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
+ 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
+ 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
+ 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
+ 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
+ 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
+ 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
+ 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb1, 0x5d,
+ 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x45, 0x44, 0x13, 0x71, 0x01, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xd4, 0x63, 0x11, 0xc3,
+ 0x30, 0x0c, 0x63, 0x11, 0x82, 0x20, 0x08, 0x63, 0x11, 0x41, 0x10, 0x04,
+ 0x23, 0x00, 0xb4, 0x25, 0x50, 0x06, 0x45, 0x40, 0x33, 0x03, 0x40, 0x32,
+ 0x03, 0x40, 0x31, 0x03, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcc, 0x63, 0x3d, 0x14, 0x94, 0xf1,
+ 0x88, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3, 0x60, 0x30, 0x26, 0x04,
+ 0xf2, 0x19, 0x8f, 0x98, 0x2a, 0xae, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x4a,
+ 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x60, 0x5a, 0x18,
+ 0x40, 0x14, 0x94, 0x41, 0x06, 0xe6, 0xb9, 0x4c, 0x08, 0xe4, 0x63, 0x45,
+ 0x00, 0x9f, 0xf1, 0x88, 0xee, 0x33, 0x03, 0x8b, 0x82, 0x32, 0xc8, 0x10,
+ 0x51, 0x9d, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0, 0x33, 0x1e, 0x11, 0x06,
+ 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21, 0xc8, 0x3e, 0x0b, 0x2a,
+ 0xf9, 0x0c, 0x32, 0x0c, 0x9b, 0x18, 0x58, 0x30, 0xc9, 0xc7, 0x86, 0x00,
+ 0x3e, 0x83, 0x0c, 0x86, 0x67, 0x06, 0x16, 0x44, 0xf2, 0xb1, 0x21, 0x80,
+ 0xcf, 0x20, 0x43, 0x12, 0x06, 0x6a, 0x60, 0xc1, 0x23, 0x1f, 0x1b, 0x02,
+ 0xf8, 0x8c, 0x47, 0xb8, 0x41, 0x1c, 0xe0, 0x01, 0x1a, 0x50, 0x50, 0x06,
+ 0x19, 0x02, 0x33, 0x60, 0x03, 0x0b, 0xc4, 0x40, 0x3e, 0x83, 0x0c, 0x03,
+ 0x1a, 0xbc, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41, 0x86, 0x42, 0x0d, 0xe4,
+ 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0x07, 0x1b, 0xd4, 0x81, 0x05, 0x9a,
+ 0x7c, 0x06, 0x19, 0xf4, 0x00, 0x0e, 0xe8, 0xc0, 0xb2, 0x40, 0x3e, 0x83,
+ 0x0c, 0x7c, 0x20, 0x07, 0x77, 0x60, 0x4e, 0x20, 0x1f, 0x4b, 0x06, 0xf8,
+ 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16, 0x20, 0xf0, 0xb1, 0xa0,
+ 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c, 0x43, 0x70, 0x07, 0x41,
+ 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x78,
+ 0x83, 0x2d, 0xc3, 0x10, 0xbc, 0xc1, 0x96, 0xe1, 0x08, 0xde, 0x60, 0xcb,
+ 0xc0, 0x04, 0x6f, 0xb0, 0x65, 0x88, 0x82, 0x37, 0xd8, 0x32, 0x58, 0xc1,
+ 0x1b, 0x6c, 0x19, 0xc6, 0x20, 0x78, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x88, 0x0b, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+ 0xdf, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+ 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
+ 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
+ 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
+ 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
+ 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36,
+ 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36,
+ 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77,
+ 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77,
+ 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1,
+ 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1,
+ 0x1d, 0xe0, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61,
+ 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
+ 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
+ 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x80, 0x08, 0x03, 0x90, 0x00, 0x0b, 0x50, 0x6d, 0x40, 0x06, 0x02,
+ 0x48, 0x80, 0x05, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c,
+ 0x10, 0x3c, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0xe7,
+ 0x49, 0x53, 0x44, 0x09, 0x93, 0xcf, 0x39, 0x0f, 0xf6, 0x12, 0xd1, 0x44,
+ 0x5c, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x3f, 0x80, 0xa0, 0x10, 0x03, 0x16,
+ 0x42, 0x92, 0x20, 0x66, 0xa2, 0xe6, 0x81, 0x1e, 0xe4, 0xa1, 0x1e, 0xc6,
+ 0x81, 0x1e, 0xdc, 0xa0, 0x1d, 0xca, 0x81, 0x1e, 0xc2, 0x81, 0x1d, 0xf4,
+ 0x40, 0x0f, 0xda, 0x21, 0x1c, 0xe8, 0x41, 0x1e, 0xd2, 0x01, 0x1f, 0x50,
+ 0x40, 0x83, 0x08, 0x85, 0x50, 0x8a, 0x11, 0x31, 0xa3, 0x1b, 0x08, 0x98,
+ 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18, 0x44, 0x08, 0x84, 0x61, 0x04,
+ 0x42, 0x19, 0x01, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
+ 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
+ 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
+ 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
+ 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
+ 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
+ 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
+ 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
+ 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x43, 0x18, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x2c, 0x10, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x10,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xd2,
+ 0x12, 0x18, 0x01, 0x28, 0xc0, 0x80, 0x22, 0x28, 0x90, 0x32, 0x28, 0x84,
+ 0x82, 0xa0, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x86, 0x12, 0x24, 0x80,
+ 0x72, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66, 0x52, 0x86, 0x08, 0x89,
+ 0x30, 0xc4, 0x50, 0x02, 0x05, 0x51, 0x04, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa4, 0x50, 0x02, 0x25, 0x50, 0x04, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe4, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x48,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x21, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa4, 0x21, 0x13, 0x96, 0x26,
+ 0xe7, 0x02, 0xf7, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0xc6, 0x28, 0x2c,
+ 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb,
+ 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0x0d, 0x99,
+ 0xb0, 0x34, 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32,
+ 0x22, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x94, 0xe4,
+ 0x49, 0xa0, 0x24, 0x4a, 0xa4, 0x64, 0x62, 0x14, 0x96, 0x26, 0xe7, 0x62,
+ 0x57, 0x26, 0x47, 0x57, 0x86, 0xf7, 0xf5, 0x56, 0x47, 0x07, 0x57, 0x47,
+ 0xc7, 0xec, 0xac, 0xcc, 0xad, 0x4c, 0x2e, 0x8c, 0xae, 0x8c, 0x0c, 0x05,
+ 0x87, 0xae, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x8e, 0x8c, 0xc8, 0x4e, 0xe6,
+ 0xcb, 0x2c, 0x85, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x9d, 0x0c, 0x11, 0xba,
+ 0x32, 0xbc, 0xb1, 0xb7, 0x37, 0x39, 0xb2, 0x21, 0x4c, 0x52, 0x25, 0x56,
+ 0x02, 0x25, 0x57, 0x22, 0x25, 0xd8, 0x10, 0x22, 0xa1, 0x92, 0x8c, 0x50,
+ 0x58, 0x9a, 0x9c, 0x8b, 0x5d, 0x99, 0x1c, 0x5d, 0x19, 0xde, 0x57, 0x9a,
+ 0x1b, 0x5c, 0x1d, 0x1d, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1,
+ 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x66,
+ 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x28, 0x38, 0x70,
+ 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x76, 0x32, 0x5f, 0x66,
+ 0x29, 0x43, 0x28, 0x45, 0x48, 0xb6, 0x84, 0x53, 0x04, 0x25, 0x48, 0xba,
+ 0x04, 0x4a, 0xae, 0x44, 0x4a, 0xa6, 0x21, 0x94, 0x12, 0x24, 0x5b, 0xc2,
+ 0x29, 0x81, 0x12, 0x24, 0x56, 0x02, 0x25, 0x57, 0x22, 0x25, 0x18, 0x95,
+ 0xb0, 0x34, 0x39, 0x17, 0xb1, 0x3a, 0x33, 0xb3, 0x32, 0x39, 0x3e, 0x61,
+ 0x69, 0x72, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x69,
+ 0x7a, 0x65, 0x44, 0xc2, 0xd2, 0xe4, 0x5c, 0xe4, 0xca, 0xc2, 0xc8, 0x18,
+ 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95,
+ 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0xf1, 0x0a, 0x4b, 0x93, 0x73, 0x09, 0x93,
+ 0x3b, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x0a, 0x63, 0x4b, 0x3b, 0x73,
+ 0xfb, 0x9a, 0x4b, 0xd3, 0x2b, 0x23, 0x62, 0xc6, 0xf6, 0x16, 0x46, 0x47,
+ 0x83, 0x47, 0x43, 0x05, 0x4e, 0xee, 0x4d, 0xad, 0x6c, 0x8c, 0x2e, 0xed,
+ 0xcd, 0x6d, 0x08, 0x18, 0x28, 0x44, 0x02, 0x06, 0x49, 0x18, 0x28, 0x43,
+ 0xc2, 0x29, 0x84, 0x12, 0x24, 0x62, 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64,
+ 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41, 0x22, 0x25, 0x66, 0xc0, 0x84, 0x4e,
+ 0x2e, 0xcc, 0x6d, 0xce, 0xec, 0x4d, 0xae, 0x6d, 0x08, 0x18, 0x28, 0x46,
+ 0x02, 0x06, 0x49, 0x18, 0x28, 0x43, 0xc2, 0x29, 0x86, 0x12, 0x24, 0x62,
+ 0x90, 0x8c, 0x81, 0x32, 0x24, 0x64, 0xa0, 0x14, 0x09, 0x94, 0x94, 0x41,
+ 0x22, 0x25, 0x68, 0x30, 0x04, 0x49, 0xbc, 0xe4, 0x4b, 0xce, 0x20, 0x49,
+ 0x83, 0x21, 0x06, 0x02, 0x24, 0x5a, 0xa2, 0x06, 0x7c, 0xde, 0xda, 0xdc,
+ 0xd2, 0xe0, 0xde, 0xe8, 0xca, 0xdc, 0xe8, 0x40, 0xc6, 0xd0, 0xc2, 0xe4,
+ 0xf8, 0x4c, 0xa5, 0xb5, 0xc1, 0xb1, 0x95, 0x81, 0x0c, 0xad, 0xac, 0x80,
+ 0x50, 0x09, 0x05, 0x05, 0x0d, 0x11, 0x92, 0x36, 0x18, 0x62, 0x24, 0x6c,
+ 0x90, 0xb8, 0xc1, 0x92, 0x0c, 0x31, 0x92, 0x37, 0x48, 0xde, 0x60, 0x49,
+ 0x46, 0x44, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0xd0, 0x0e, 0xef,
+ 0x40, 0x0e, 0xf5, 0xc0, 0x0e, 0xe5, 0xe0, 0x06, 0xe6, 0xc0, 0x0e, 0xe1,
+ 0x70, 0x0e, 0xf3, 0x30, 0x25, 0x08, 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6,
+ 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53,
+ 0x82, 0x61, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5,
+ 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62, 0x04,
+ 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7,
+ 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2,
+ 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x30, 0x46, 0x4c, 0xe1,
+ 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9,
+ 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef,
+ 0xe0, 0x0e, 0xf3, 0x30, 0x85, 0x40, 0x14, 0xc6, 0x19, 0xa1, 0x84, 0x43,
+ 0x3a, 0xc8, 0x83, 0x1b, 0xd8, 0x43, 0x39, 0xc8, 0x03, 0x3d, 0x94, 0x03,
+ 0x3e, 0x4c, 0x09, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66,
+ 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07,
+ 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10,
+ 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce,
+ 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b,
+ 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c,
+ 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07,
+ 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11,
+ 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0,
+ 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8,
+ 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b,
+ 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b,
+ 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87,
+ 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07,
+ 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87,
+ 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81,
+ 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30,
+ 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca,
+ 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39,
+ 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b,
+ 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b,
+ 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83,
+ 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87,
+ 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90,
+ 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20,
+ 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc,
+ 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66,
+ 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24,
+ 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07,
+ 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e,
+ 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e,
+ 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54,
+ 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39,
+ 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c,
+ 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07,
+ 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83,
+ 0xfd, 0x15, 0x11, 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x50, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0xd4, 0x63, 0x11, 0xc3, 0x30, 0x0c, 0x63, 0x11,
+ 0x82, 0x20, 0x08, 0x63, 0x11, 0x41, 0x10, 0x04, 0xb4, 0x25, 0x50, 0x06,
+ 0x45, 0x40, 0x3d, 0x02, 0x40, 0x33, 0x03, 0x40, 0x32, 0x03, 0x40, 0x31,
+ 0x03, 0x00, 0x00, 0x00, 0xe3, 0x11, 0xcb, 0x63, 0x3d, 0x14, 0x94, 0xf1,
+ 0x08, 0x27, 0xc2, 0x22, 0x0a, 0xca, 0x20, 0xc3, 0x50, 0x20, 0x26, 0x04,
+ 0xf2, 0x19, 0x8f, 0x90, 0x2a, 0xae, 0xa1, 0xa0, 0x0c, 0x32, 0x1c, 0x09,
+ 0x64, 0x42, 0x20, 0x1f, 0x0b, 0x0a, 0xf8, 0x8c, 0x47, 0x5c, 0x5a, 0x18,
+ 0x40, 0x14, 0x94, 0x41, 0x06, 0xc6, 0xb1, 0x4c, 0x08, 0xe4, 0x63, 0x45,
+ 0x00, 0x9f, 0xf1, 0x08, 0xee, 0x33, 0x03, 0x8b, 0x82, 0x32, 0xc8, 0x10,
+ 0x4d, 0x9c, 0x09, 0x81, 0x7c, 0xac, 0x08, 0xe0, 0x33, 0x1e, 0x01, 0x06,
+ 0x64, 0xb0, 0x06, 0x1c, 0x05, 0x65, 0x90, 0x21, 0xc0, 0x36, 0x0b, 0x2a,
+ 0xf9, 0x0c, 0x32, 0x0c, 0x5a, 0x18, 0x58, 0x30, 0xc9, 0xc7, 0x86, 0x00,
+ 0x3e, 0x83, 0x0c, 0x46, 0x57, 0x06, 0x16, 0x44, 0xf2, 0xb1, 0x21, 0x80,
+ 0xcf, 0x20, 0x43, 0x02, 0x06, 0x69, 0x60, 0xc1, 0x23, 0x1f, 0x1b, 0x02,
+ 0xf8, 0x8c, 0x47, 0xb4, 0x41, 0x1c, 0xe0, 0x01, 0x1a, 0x50, 0x50, 0x06,
+ 0x19, 0x82, 0x32, 0x40, 0x03, 0x0b, 0xc4, 0x40, 0x3e, 0x83, 0x0c, 0xc3,
+ 0x19, 0xb8, 0x81, 0x05, 0x60, 0x20, 0x9f, 0x41, 0x86, 0x22, 0x0d, 0xe2,
+ 0xc0, 0x82, 0x4e, 0x3e, 0x83, 0x0c, 0xc7, 0x1a, 0xd0, 0x81, 0x05, 0x9a,
+ 0x7c, 0x06, 0x19, 0xf4, 0xc0, 0x0d, 0xe0, 0xc0, 0xb2, 0x40, 0x3e, 0x83,
+ 0x0c, 0x7c, 0x00, 0x07, 0x76, 0x60, 0x4e, 0x20, 0x1f, 0x4b, 0x06, 0xf8,
+ 0x58, 0xc0, 0xc0, 0xc7, 0x82, 0x04, 0x3e, 0x16, 0x20, 0xf0, 0xb1, 0xa0,
+ 0x80, 0xcf, 0x6c, 0x03, 0x1e, 0x04, 0xc0, 0x6c, 0x43, 0x30, 0x0a, 0x41,
+ 0x06, 0x01, 0x31, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x80,
+ 0x83, 0x2d, 0xc3, 0x10, 0xc0, 0xc1, 0x96, 0xe1, 0x08, 0xe0, 0x60, 0xcb,
+ 0xc0, 0x04, 0x70, 0xb0, 0x65, 0x88, 0x02, 0x38, 0xd8, 0x32, 0x58, 0x01,
+ 0x1c, 0x6c, 0x19, 0xc6, 0x20, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+ 0x47, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+ 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
+ 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
+ 0x1b, 0xf6, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x80, 0x8a,
+ 0x18, 0x87, 0x77, 0x90, 0x07, 0x79, 0x28, 0x87, 0x71, 0xa0, 0x07, 0x76,
+ 0xc8, 0x87, 0x36, 0x90, 0x87, 0x77, 0xa8, 0x07, 0x77, 0x20, 0x87, 0x72,
+ 0x20, 0x87, 0x36, 0x20, 0x87, 0x74, 0xb0, 0x87, 0x74, 0x20, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x88, 0x07, 0x79, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0xc0, 0x1c, 0xc2, 0x81,
+ 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0x82, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41,
+ 0x1c, 0xd8, 0xa1, 0x1c, 0xda, 0x80, 0x1e, 0xc2, 0x21, 0x1d, 0xd8, 0xa1,
+ 0x0d, 0xc6, 0x21, 0x1c, 0xd8, 0x81, 0x1d, 0xe6, 0x01, 0x30, 0x87, 0x70,
+ 0x60, 0x87, 0x79, 0x28, 0x07, 0x80, 0x60, 0x87, 0x72, 0x98, 0x87, 0x79,
+ 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, 0x72,
+ 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0xc0,
+ 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, 0xde, 0x21,
+ 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, 0xd8, 0x21,
+ 0x1d, 0xda, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x06, 0x77,
+ 0x78, 0x87, 0x36, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x87, 0x36,
+ 0x80, 0x87, 0x77, 0x48, 0x07, 0x77, 0xa0, 0x87, 0x72, 0x90, 0x87, 0x36,
+ 0x28, 0x07, 0x76, 0x48, 0x87, 0x76, 0x68, 0x03, 0x77, 0x78, 0x07, 0x77,
+ 0x68, 0x03, 0x76, 0x28, 0x87, 0x70, 0x30, 0x07, 0x80, 0x70, 0x87, 0x77,
+ 0x68, 0x83, 0x74, 0x70, 0x07, 0x73, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78,
+ 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1,
+ 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x40, 0x1d, 0xea, 0xa1,
+ 0x1d, 0xe0, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61,
+ 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x70, 0x87, 0x70, 0x70, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xe6, 0x21,
+ 0x1d, 0xce, 0xc1, 0x1d, 0xca, 0x81, 0x1c, 0xda, 0x40, 0x1f, 0xca, 0x41,
+ 0x1e, 0xde, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21,
+ 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x7a, 0x90, 0x87, 0x70, 0x80, 0x07, 0x78,
+ 0x48, 0x07, 0x77, 0x38, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74,
+ 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0x62, 0x1e, 0xe8, 0x21,
+ 0x1c, 0xc6, 0x61, 0x1d, 0xda, 0x00, 0x1e, 0xe4, 0xe1, 0x1d, 0xe8, 0xa1,
+ 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xda, 0x40, 0x1c, 0xea, 0xc1,
+ 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xe6, 0x21, 0x1d, 0xf4, 0xa1,
+ 0x1c, 0x00, 0x3c, 0x00, 0x08, 0x7a, 0x08, 0x07, 0x79, 0x38, 0x87, 0x72,
+ 0xa0, 0x87, 0x36, 0x30, 0x87, 0x72, 0x08, 0x07, 0x7a, 0xa8, 0x07, 0x79,
+ 0x28, 0x87, 0x79, 0x00, 0xda, 0xc0, 0x1c, 0xe0, 0x21, 0x0e, 0xec, 0x00,
+ 0x20, 0xea, 0xc1, 0x1d, 0xe6, 0x21, 0x1c, 0xcc, 0xa1, 0x1c, 0xda, 0xc0,
+ 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a,
+ 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0xa8, 0x87, 0x79, 0x28, 0x87, 0x36,
+ 0x98, 0x87, 0x77, 0x30, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x60, 0x87, 0x77,
+ 0x08, 0x07, 0x7a, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01,
+ 0xd8, 0x80, 0x08, 0x01, 0x90, 0x00, 0x0b, 0x50, 0x01, 0x00, 0x00, 0x00,
+ 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c,
+ 0x10, 0x24, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x88, 0x10, 0x04, 0x45,
+ 0x08, 0xa1, 0x19, 0x08, 0x98, 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18,
+ 0x01, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
+ 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
+ 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
+ 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
+ 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
+ 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
+ 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
+ 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
+ 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x43, 0x18, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x2c, 0x10, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x0c,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0xb2,
+ 0x12, 0x18, 0x01, 0x28, 0x90, 0x42, 0x28, 0x08, 0xba, 0x11, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x86, 0x11, 0x14, 0x80, 0x41, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66,
+ 0x52, 0x86, 0x08, 0x85, 0x30, 0xc4, 0x30, 0x02, 0xa3, 0x30, 0x04, 0x16,
+ 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x90, 0xa2, 0x30, 0x02, 0x23, 0x30,
+ 0x04, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xe2, 0x20, 0x17, 0x96, 0x26,
+ 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36,
+ 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6,
+ 0x56, 0x36, 0x44, 0x28, 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8,
+ 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda,
+ 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0xa1, 0x58, 0x18, 0x06,
+ 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e,
+ 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+ 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa2,
+ 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7,
+ 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25,
+ 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad,
+ 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0xa4, 0x78, 0x0c,
+ 0xa1, 0x80, 0x8a, 0x68, 0x88, 0x50, 0x48, 0x54, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xc4, 0xea, 0xcc, 0xcc, 0xca, 0xe4, 0xf8, 0x84, 0xa5, 0xc9, 0xb9, 0x88,
+ 0xd5, 0x99, 0x99, 0x95, 0xc9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x51, 0x0a,
+ 0x4b, 0x93, 0x73, 0x61, 0x7b, 0x1b, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0xfb,
+ 0x4a, 0x73, 0x23, 0x2b, 0xc3, 0x23, 0x12, 0x96, 0x26, 0xe7, 0x22, 0x57,
+ 0x16, 0x46, 0xc6, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0x6b, 0x2e, 0x4d, 0xaf, 0x8c, 0x57, 0x58, 0x9a,
+ 0x9c, 0x4b, 0x98, 0xdc, 0xd9, 0x17, 0x5d, 0x1e, 0x5c, 0xd9, 0x57, 0x18,
+ 0x5b, 0xda, 0x99, 0xdb, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0x99, 0xb0, 0x34,
+ 0x39, 0x97, 0x30, 0xb9, 0xb3, 0x2f, 0xb7, 0xb0, 0xb6, 0x32, 0x0e, 0x63,
+ 0x6f, 0x6c, 0x43, 0xc0, 0xc0, 0x10, 0x0a, 0xaa, 0xa8, 0x8c, 0xa1, 0xb0,
+ 0x0c, 0xc1, 0x08, 0x8a, 0xab, 0xc0, 0x8c, 0xa1, 0xc8, 0x8c, 0xa1, 0x80,
+ 0x8a, 0xa8, 0xd0, 0x8a, 0x6d, 0x88, 0x50, 0x70, 0x43, 0x0c, 0x02, 0x28,
+ 0xa6, 0xa2, 0xe3, 0xf3, 0xd6, 0xe6, 0x96, 0x06, 0xf7, 0x46, 0x57, 0xe6,
+ 0x46, 0x07, 0x32, 0x86, 0x16, 0x26, 0xc7, 0x67, 0x2a, 0xad, 0x0d, 0x8e,
+ 0xad, 0x0c, 0x64, 0x68, 0x65, 0x05, 0x84, 0x4a, 0x28, 0x28, 0x68, 0x88,
+ 0x50, 0x80, 0xc1, 0x10, 0xa3, 0xf8, 0x8a, 0x30, 0x38, 0x8c, 0x21, 0x46,
+ 0x21, 0x06, 0x85, 0x18, 0x1c, 0xc6, 0x88, 0x88, 0x1d, 0xd8, 0xc1, 0x1e,
+ 0xda, 0xc1, 0x0d, 0xda, 0xe1, 0x1d, 0xc8, 0xa1, 0x1e, 0xd8, 0xa1, 0x1c,
+ 0xdc, 0xc0, 0x1c, 0xd8, 0x21, 0x1c, 0xce, 0x61, 0x1e, 0xa6, 0x04, 0xc1,
+ 0x08, 0x85, 0x1d, 0xd8, 0xc1, 0x1e, 0xda, 0xc1, 0x0d, 0xd2, 0x81, 0x1c,
+ 0xca, 0xc1, 0x1d, 0xe8, 0x61, 0x4a, 0x30, 0x8c, 0x58, 0xc2, 0x21, 0x1d,
+ 0xe4, 0xc1, 0x0d, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d,
+ 0xdc, 0x61, 0x4a, 0x40, 0x8c, 0xa0, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d,
+ 0xd8, 0x21, 0x1c, 0xdc, 0xe1, 0x1c, 0xea, 0x21, 0x1c, 0xce, 0xa1, 0x1c,
+ 0x7e, 0xc1, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d,
+ 0xa6, 0x04, 0xc6, 0x88, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c,
+ 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0x7e, 0xe1, 0x1d,
+ 0xe0, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x1e, 0xa6, 0x10, 0x88,
+ 0xc2, 0x38, 0x23, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x73, 0x90,
+ 0x87, 0x70, 0x38, 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0x81,
+ 0x07, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x06, 0x20, 0xb1, 0x5d, 0xf9, 0xb3, 0xce, 0x82, 0x0c, 0x7f, 0x11, 0x01,
+ 0x06, 0x43, 0x34, 0x13, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05, 0x25, 0x83, 0x80, 0x18,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x20, 0x18, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0xfc, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+ 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
+ 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
+ 0x93, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x63, 0x20, 0x80, 0x05, 0xa8, 0x36, 0x18, 0x44, 0x01,
+ 0x2c, 0x40, 0xb5, 0x01, 0x29, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x18,
+ 0x40, 0x02, 0xaa, 0x0d, 0x86, 0x11, 0x00, 0x0b, 0x50, 0x6d, 0x30, 0x0e,
+ 0x01, 0x58, 0x80, 0x0a, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x13, 0x88, 0x40, 0x18, 0x88, 0x09, 0x43, 0x61, 0x1c, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
+ 0x10, 0x48, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
+ 0x08, 0x41, 0x70, 0x94, 0x34, 0x45, 0x94, 0x30, 0xf9, 0xff, 0x44, 0x5c,
+ 0x13, 0x15, 0x11, 0xbf, 0x3d, 0xfc, 0xd3, 0x18, 0x01, 0x30, 0x88, 0x40,
+ 0x04, 0x17, 0x49, 0x53, 0x44, 0x09, 0x93, 0xff, 0x4b, 0x00, 0xf3, 0x2c,
+ 0x44, 0xf4, 0x4f, 0x63, 0x04, 0xc0, 0x20, 0x82, 0x21, 0x14, 0x23, 0x04,
+ 0x31, 0xca, 0x21, 0x34, 0x47, 0x10, 0xcc, 0x11, 0x80, 0xc1, 0x30, 0x82,
+ 0xb0, 0x14, 0x24, 0x94, 0x23, 0x14, 0x53, 0x80, 0xda, 0x40, 0xc0, 0x1c,
+ 0x01, 0x28, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48,
+ 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
+ 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80,
+ 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d,
+ 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9,
+ 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78,
+ 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6,
+ 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
+ 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74,
+ 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6,
+ 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a,
+ 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
+ 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76,
+ 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75,
+ 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6,
+ 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72,
+ 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6,
+ 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x98, 0x04, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x16, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0x5a, 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x10,
+ 0x45, 0x50, 0x06, 0x04, 0x47, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0xec, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0xc6, 0x22, 0x3c, 0xc0,
+ 0x52, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66, 0x52, 0x86, 0x08, 0x8f,
+ 0x30, 0xc4, 0x58, 0x84, 0xc5, 0x58, 0x06, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x90, 0xa7, 0x58, 0x84, 0x45, 0x58, 0x06, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x84, 0xe7, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0x78,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0xe1, 0x59, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x84, 0xa7, 0x61, 0x14, 0x96, 0x26,
+ 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77,
+ 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb,
+ 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0xe4, 0x79, 0x96, 0xe1, 0x81, 0x9e, 0x68,
+ 0x88, 0xf0, 0x48, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2,
+ 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9,
+ 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82,
+ 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13,
+ 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46,
+ 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0xb4, 0x0c,
+ 0x0f, 0xf5, 0x54, 0x8f, 0xf5, 0x40, 0x4f, 0xf4, 0x5c, 0x0f, 0x46, 0x29,
+ 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee,
+ 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c,
+ 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b,
+ 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39,
+ 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32,
+ 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6,
+ 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0x8b, 0xf0, 0x68, 0xcf, 0xf6, 0x54,
+ 0x0f, 0xf7, 0x40, 0x4f, 0xf7, 0x5c, 0x8f, 0x47, 0x25, 0x2c, 0x4d, 0xce,
+ 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5,
+ 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7,
+ 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72,
+ 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
+ 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5,
+ 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85,
+ 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b,
+ 0x63, 0x1b, 0x02, 0x06, 0xcb, 0xf1, 0x80, 0xc1, 0x13, 0x06, 0x0b, 0xf1,
+ 0x88, 0xc1, 0x32, 0x2c, 0xc2, 0x33, 0x06, 0x0f, 0x19, 0x2c, 0xc4, 0x53,
+ 0x06, 0x0b, 0xf1, 0x40, 0x4f, 0xf4, 0x5c, 0x8f, 0x19, 0x70, 0x09, 0x4b,
+ 0x93, 0x73, 0xa1, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0xa3, 0x12, 0x96,
+ 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x46, 0x8c, 0xae, 0x0c,
+ 0x8f, 0xae, 0x4e, 0xae, 0x4c, 0x86, 0x8c, 0xc7, 0x8c, 0xed, 0x2d, 0x8c,
+ 0x8e, 0x05, 0x64, 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0xcc, 0x87, 0x03, 0x5d,
+ 0x19, 0xde, 0x10, 0x6a, 0x41, 0x1e, 0x34, 0x78, 0xc4, 0x60, 0x19, 0x16,
+ 0xe1, 0x49, 0x83, 0x07, 0x7a, 0xd4, 0xe0, 0xb9, 0x9e, 0x35, 0xe0, 0x12,
+ 0x96, 0x26, 0xe7, 0x32, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xc7, 0x63,
+ 0x2e, 0xac, 0x0d, 0x8e, 0xad, 0x4c, 0x8e, 0xc1, 0xdc, 0x10, 0x69, 0x29,
+ 0x9e, 0x36, 0x78, 0xc4, 0x60, 0x19, 0x16, 0xe1, 0x81, 0x1e, 0x37, 0x78,
+ 0xae, 0xe7, 0x0d, 0x86, 0x28, 0x4f, 0xf6, 0x7c, 0xcf, 0x19, 0x3c, 0x6c,
+ 0xf0, 0xc0, 0xc1, 0x10, 0x23, 0x01, 0x9e, 0xe9, 0x89, 0x03, 0x3e, 0x6f,
+ 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56,
+ 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x0f, 0x1d, 0x0c, 0x31,
+ 0x9e, 0x39, 0x78, 0xea, 0x00, 0x4a, 0x86, 0x18, 0x8f, 0x1d, 0x3c, 0x76,
+ 0x00, 0x25, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68,
+ 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03, 0x73, 0x60,
+ 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14, 0x76, 0x60,
+ 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0,
+ 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0,
+ 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87, 0x29, 0x01,
+ 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87, 0x70, 0x70,
+ 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28,
+ 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12, 0x18, 0x23,
+ 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80,
+ 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48,
+ 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60,
+ 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c,
+ 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x72, 0x00, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+ 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+ 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+ 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+ 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+ 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+ 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+ 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+ 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+ 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+ 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+ 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+ 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+ 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+ 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+ 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+ 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+ 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+ 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+ 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+ 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+ 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
+ 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
+ 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
+ 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
+ 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
+ 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
+ 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
+ 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d,
+ 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16,
+ 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7,
+ 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc4, 0x46, 0x00, 0x48,
+ 0xd5, 0xc0, 0x08, 0x00, 0x81, 0x11, 0x00, 0x00, 0x23, 0x06, 0x8a, 0x10,
+ 0x48, 0x46, 0x81, 0x0c, 0x84, 0x10, 0x10, 0x52, 0x2c, 0x10, 0xe4, 0x93,
+ 0x41, 0x40, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0xb8,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x28, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0x47, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+ 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
+ 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
+ 0x98, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x64, 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41,
+ 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xe2, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x18, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x12, 0x40, 0x6d, 0x40, 0x8e,
+ 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x06, 0x90, 0x80, 0x6a, 0x83, 0x81,
+ 0x04, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0x44, 0x00, 0x16, 0xa0, 0x02, 0x00,
+ 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x8a, 0x40, 0x18,
+ 0x88, 0x62, 0x42, 0x60, 0x4c, 0x18, 0x0e, 0x24, 0x01, 0x00, 0x00, 0x00,
+ 0x89, 0x20, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
+ 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3,
+ 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c,
+ 0x10, 0x78, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83,
+ 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93,
+ 0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06,
+ 0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8,
+ 0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1,
+ 0x08, 0x4e, 0x93, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x9f, 0x88, 0x6b, 0xa2,
+ 0x22, 0xe2, 0xb7, 0x87, 0x1f, 0x88, 0x22, 0x00, 0xfb, 0xa7, 0x31, 0x02,
+ 0x60, 0x10, 0x21, 0x09, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff, 0x97,
+ 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84, 0x45,
+ 0x28, 0x48, 0x08, 0x62, 0x18, 0xa4, 0x18, 0xb5, 0x32, 0x00, 0x42, 0xe8,
+ 0xcd, 0x11, 0x80, 0xc1, 0x1c, 0x41, 0x30, 0x8c, 0x20, 0x44, 0x25, 0x09,
+ 0x8a, 0x89, 0x28, 0xa7, 0x04, 0x44, 0x0b, 0x12, 0x10, 0x13, 0x72, 0x4a,
+ 0x40, 0x76, 0x20, 0x60, 0x18, 0x61, 0x88, 0x06, 0x11, 0x02, 0x61, 0x8e,
+ 0x00, 0x14, 0x06, 0x11, 0x08, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70,
+ 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79,
+ 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e,
+ 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07,
+ 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07,
+ 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07,
+ 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07,
+ 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06,
+ 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07,
+ 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07,
+ 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07,
+ 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06,
+ 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07,
+ 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07,
+ 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07,
+ 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07,
+ 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06,
+ 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07,
+ 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07,
+ 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07,
+ 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07,
+ 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06,
+ 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07,
+ 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07,
+ 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07,
+ 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07,
+ 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07,
+ 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07,
+ 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07,
+ 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x07,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x0c, 0x04, 0x04,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xa6, 0x02, 0x02, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x73, 0x01, 0x01, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x05, 0x02, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+ 0xc6, 0x04, 0x43, 0x8a, 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80,
+ 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40,
+ 0x7b, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00,
+ 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9,
+ 0x34, 0xbd, 0xb2, 0x21, 0x46, 0x44, 0x60, 0x40, 0x74, 0x50, 0x0d, 0x82,
+ 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca,
+ 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40,
+ 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64,
+ 0x5c, 0x66, 0x5c, 0x66, 0x52, 0x86, 0x08, 0x98, 0x30, 0xc4, 0x88, 0x88,
+ 0x28, 0x89, 0x0a, 0x16, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10, 0xac,
+ 0x88, 0x88, 0x88, 0x88, 0x0a, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xec,
+ 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56,
+ 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55,
+ 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xc0, 0x12, 0x92, 0x41, 0x58,
+ 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99,
+ 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59,
+ 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10,
+ 0x01, 0x5b, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70,
+ 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64,
+ 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x04, 0xac, 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6,
+ 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28,
+ 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec,
+ 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd,
+ 0x10, 0x04, 0x7b, 0xa2, 0x02, 0x83, 0xb0, 0x68, 0x88, 0x80, 0x49, 0x64,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc,
+ 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51,
+ 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83,
+ 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12,
+ 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e,
+ 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x14, 0x15, 0x18, 0x85, 0x55, 0x98,
+ 0x85, 0x41, 0x58, 0x84, 0x5d, 0x18, 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5,
+ 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae,
+ 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19,
+ 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d,
+ 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9,
+ 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f,
+ 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8,
+ 0x86, 0x48, 0x11, 0x81, 0x69, 0xd8, 0x86, 0x55, 0x18, 0x87, 0x41, 0x58,
+ 0x87, 0x5d, 0x98, 0x47, 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc,
+ 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17,
+ 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2,
+ 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca,
+ 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9,
+ 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9,
+ 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06,
+ 0x91, 0x82, 0x81, 0x01, 0x16, 0x06, 0x91, 0x81, 0x89, 0x41, 0x54, 0x44,
+ 0x04, 0x36, 0x06, 0x18, 0x19, 0x44, 0x06, 0x56, 0x06, 0x91, 0x81, 0x41,
+ 0x58, 0x84, 0x5d, 0x98, 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3,
+ 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73,
+ 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd,
+ 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19,
+ 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65,
+ 0x66, 0x66, 0x43, 0xd0, 0x20, 0x2a, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0,
+ 0xd4, 0x20, 0x32, 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd6, 0x20, 0x62,
+ 0x22, 0x23, 0x2a, 0xb0, 0x34, 0xc0, 0xd8, 0x20, 0x6a, 0x22, 0x23, 0x2a,
+ 0xb0, 0x34, 0xc0, 0xda, 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8,
+ 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64,
+ 0x10, 0x2d, 0x18, 0x18, 0x60, 0x61, 0x10, 0x21, 0x98, 0x18, 0x44, 0x44,
+ 0x44, 0x60, 0x63, 0x80, 0xa1, 0x01, 0xe6, 0x06, 0x18, 0x19, 0x44, 0x08,
+ 0x56, 0x06, 0x91, 0x81, 0x41, 0xd8, 0x1b, 0x60, 0x17, 0x06, 0x07, 0x5c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8,
+ 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3,
+ 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b,
+ 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21,
+ 0x41, 0x57, 0x86, 0x97, 0x35, 0x84, 0x8a, 0x0e, 0x4c, 0x0e, 0x30, 0x31,
+ 0x88, 0x8a, 0x88, 0xc0, 0xe6, 0x00, 0x83, 0x30, 0x3a, 0xc0, 0x2e, 0xac,
+ 0x0e, 0xe8, 0xd1, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, 0x95, 0xc9, 0x90, 0x7d,
+ 0x85, 0xc9, 0xc9, 0x85, 0xe5, 0xf1, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xb1,
+ 0x80, 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xf9, 0xb0, 0xa0, 0x2b, 0xc3,
+ 0xab, 0xb2, 0x1a, 0x42, 0x45, 0x0e, 0x26, 0x07, 0x98, 0x18, 0x44, 0x44,
+ 0x44, 0x60, 0x73, 0x80, 0x41, 0xd8, 0x1d, 0x60, 0x17, 0x86, 0x07, 0x5c,
+ 0xc2, 0xd2, 0xe4, 0x5c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x78,
+ 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0xc9, 0x31, 0x98, 0x1b, 0x22, 0x45,
+ 0x0f, 0xa6, 0x07, 0x98, 0x18, 0x44, 0x45, 0x44, 0x60, 0x10, 0xb6, 0x07,
+ 0xd8, 0x85, 0xf1, 0xc1, 0x10, 0x07, 0xcb, 0xb0, 0x0f, 0x3b, 0x03, 0x2c,
+ 0x0e, 0x30, 0x3b, 0xc0, 0xf2, 0x00, 0xeb, 0x83, 0x21, 0x86, 0x03, 0x60,
+ 0x13, 0xe6, 0x07, 0x7c, 0xde, 0xda, 0xdc, 0xd2, 0xe0, 0xde, 0xe8, 0xca,
+ 0xdc, 0xe8, 0x40, 0xc6, 0xd0, 0xc2, 0xe4, 0xf8, 0x4c, 0xa5, 0xb5, 0xc1,
+ 0xb1, 0x95, 0x81, 0x0c, 0xad, 0xac, 0x80, 0x50, 0x09, 0x05, 0x05, 0x0d,
+ 0x11, 0xb0, 0x50, 0x18, 0x62, 0x60, 0xa0, 0x80, 0x89, 0xc2, 0x06, 0x0d,
+ 0x31, 0xb0, 0x51, 0xc0, 0x46, 0x61, 0x83, 0x46, 0x44, 0xec, 0xc0, 0x0e,
+ 0xf6, 0xd0, 0x0e, 0x6e, 0xd0, 0x0e, 0xef, 0x40, 0x0e, 0xf5, 0xc0, 0x0e,
+ 0xe5, 0xe0, 0x06, 0xe6, 0xc0, 0x0e, 0xe1, 0x70, 0x0e, 0xf3, 0x30, 0x25,
+ 0x08, 0x46, 0x28, 0xec, 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e,
+ 0xe4, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x61, 0xc4, 0x12, 0x0e,
+ 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e,
+ 0xef, 0xe0, 0x0e, 0x53, 0x02, 0x62, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f,
+ 0x6e, 0xc0, 0x0e, 0xe1, 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e,
+ 0xe5, 0xf0, 0x0b, 0xf6, 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e,
+ 0xee, 0x30, 0x25, 0x30, 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06,
+ 0xe3, 0xf0, 0x0e, 0xed, 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b,
+ 0xef, 0x00, 0x0f, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x85,
+ 0x40, 0x14, 0xc6, 0x19, 0xc1, 0x84, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x98,
+ 0x83, 0x3c, 0x84, 0xc3, 0x39, 0xb4, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x4c,
+ 0x09, 0xfe, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x26, 0x10, 0x06, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c, 0x0b, 0xf1, 0x4f,
+ 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0xc3, 0x0f, 0x44, 0x11, 0x80, 0xf9,
+ 0x15, 0x5e, 0xdc, 0xb6, 0x05, 0x34, 0x00, 0x12, 0xf9, 0x83, 0x33, 0xf9,
+ 0xd5, 0x5d, 0xdc, 0xb6, 0x0d, 0x6c, 0x00, 0x12, 0xf9, 0x12, 0xc0, 0x3c,
+ 0x0b, 0xf1, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xf1, 0xdb, 0x83, 0x5f, 0xe1,
+ 0xc5, 0x6d, 0x1b, 0x00, 0xc4, 0x76, 0xe5, 0x2f, 0xbb, 0xef, 0x5f, 0x44,
+ 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
+ 0x3b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
+ 0x0b, 0x00, 0x00, 0x00, 0x94, 0xe7, 0x18, 0x8a, 0xae, 0x1b, 0x6b, 0x00,
+ 0x02, 0x81, 0xe6, 0x08, 0x00, 0xc9, 0x11, 0x80, 0x1a, 0xa0, 0x38, 0x03,
+ 0x40, 0x61, 0x0e, 0x22, 0x0c, 0xc2, 0x20, 0x0c, 0xc0, 0x60, 0x06, 0x80,
+ 0xc0, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfe, 0xcd, 0x00, 0x8c, 0x00, 0x00,
+ 0x23, 0x06, 0xca, 0x10, 0x80, 0x81, 0xc3, 0x44, 0x47, 0x82, 0x04, 0x83,
+ 0x0c, 0x41, 0xc1, 0x8c, 0x18, 0x2c, 0x43, 0x30, 0x06, 0x8f, 0x33, 0x81,
+ 0x41, 0xb2, 0x28, 0xc3, 0x18, 0x42, 0x10, 0x06, 0x73, 0x0c, 0x43, 0x30,
+ 0x06, 0x23, 0x06, 0xcb, 0x10, 0x98, 0x81, 0x14, 0x59, 0x64, 0xc0, 0x38,
+ 0x8d, 0x31, 0x86, 0x10, 0x90, 0xc1, 0x1c, 0xc3, 0x10, 0x80, 0xc1, 0x5d,
+ 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x43, 0x19, 0x11, 0xc0, 0x87, 0xb8,
+ 0x32, 0xde, 0xc0, 0x81, 0x01, 0x1b, 0x5c, 0xa0, 0x97, 0x82, 0x32, 0xc8,
+ 0x10, 0x50, 0xda, 0x88, 0x41, 0x21, 0x04, 0x73, 0x60, 0x04, 0xe3, 0x0d,
+ 0x61, 0x50, 0x06, 0x6b, 0x70, 0x81, 0x5e, 0x0a, 0xca, 0x20, 0x43, 0x90,
+ 0x7d, 0x23, 0x06, 0x85, 0x10, 0xe0, 0xc1, 0x12, 0x8c, 0x37, 0x98, 0x81,
+ 0x1a, 0xbc, 0xc1, 0x05, 0x7a, 0x29, 0x28, 0x83, 0x0c, 0x81, 0x47, 0x06,
+ 0x23, 0x06, 0x85, 0x10, 0xf4, 0x01, 0x14, 0xcc, 0x31, 0x84, 0xc1, 0xa2,
+ 0x07, 0x73, 0x0c, 0xc1, 0xc1, 0x07, 0x73, 0x0c, 0xc1, 0x70, 0x07, 0x16,
+ 0x4c, 0xf2, 0xc9, 0x20, 0x20, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x5b, 0x06, 0x26, 0x20, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xb8, 0x0c, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
+ 0x2b, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49,
+ 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19,
+ 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42,
+ 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24,
+ 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72,
+ 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0,
+ 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00,
+ 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x60, 0x00, 0x09,
+ 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87, 0x72, 0x18, 0x07, 0x7a,
+ 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87, 0x7a, 0x70, 0x07, 0x72,
+ 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07, 0x7b, 0x48, 0x07, 0x72,
+ 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07, 0x7a, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xcc, 0x21,
+ 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8, 0x21, 0x1d, 0xe6, 0x21,
+ 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8, 0x21, 0x1c, 0xd2, 0x81,
+ 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8, 0x61, 0x1e, 0x00, 0x73,
+ 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08, 0x76, 0x28, 0x87, 0x79,
+ 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87, 0x71, 0x48, 0x87, 0x79,
+ 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87, 0x70, 0x20, 0x07, 0xc0,
+ 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1,
+ 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1,
+ 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81,
+ 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72,
+ 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79,
+ 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87, 0x36, 0x70, 0x87, 0x77,
+ 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07, 0x73, 0x00, 0x08, 0x77,
+ 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73,
+ 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41,
+ 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xd4, 0xa1,
+ 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1,
+ 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87, 0x79, 0x28, 0x07, 0x80,
+ 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, 0x87, 0x36,
+ 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80,
+ 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc, 0xe1, 0x1d, 0xda, 0x60,
+ 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8, 0xa1, 0x0d, 0xf4, 0xa1,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0,
+ 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72,
+ 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07, 0x79, 0x08, 0x07, 0x78,
+ 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a,
+ 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81,
+ 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81,
+ 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1,
+ 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41,
+ 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73,
+ 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87, 0x70, 0xa0, 0x87, 0x7a,
+ 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc, 0x01, 0x1e, 0xe2, 0xc0,
+ 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, 0xc1, 0x1c, 0xca, 0xa1,
+ 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01,
+ 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, 0x7a, 0x98, 0x87, 0x72,
+ 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87, 0x36, 0x30, 0x07, 0x76,
+ 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1,
+ 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0, 0x00, 0xd5, 0x06, 0x64,
+ 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41, 0x14, 0xc0, 0x02, 0x54,
+ 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x18, 0x07, 0xb0, 0x00,
+ 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x6a,
+ 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00, 0x30, 0x80, 0x04, 0x54,
+ 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60, 0x28, 0x02, 0xb0, 0x00,
+ 0x15, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10, 0x1c, 0x13, 0x06, 0x24,
+ 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+ 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84,
+ 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c,
+ 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30,
+ 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c, 0x30, 0x00, 0x07, 0x49,
+ 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47, 0x08, 0xce, 0x40, 0x20,
+ 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28, 0x69, 0x8a, 0x28, 0x61,
+ 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e, 0x7b, 0xf8, 0xa7, 0x31,
+ 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6, 0x88, 0x12, 0x26, 0xff,
+ 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6, 0x08, 0x80, 0x41, 0x84,
+ 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14, 0xad, 0x32, 0x00, 0x42,
+ 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30, 0x8c, 0x20, 0x40, 0x05,
+ 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10, 0x30, 0x8c, 0x30, 0x40,
+ 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83, 0x08, 0x84, 0x30, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03,
+ 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83,
+ 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80, 0x03, 0x37, 0x80, 0x83,
+ 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe9, 0x10,
+ 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0,
+ 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xe9, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+ 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80,
+ 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20,
+ 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60,
+ 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x74, 0xa0,
+ 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x30,
+ 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+ 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60,
+ 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40,
+ 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x90, 0x07, 0x76, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80,
+ 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x90,
+ 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50,
+ 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20,
+ 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60,
+ 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xa0,
+ 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x70, 0x20,
+ 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10,
+ 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0,
+ 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0,
+ 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20,
+ 0x07, 0x43, 0x18, 0x06, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10,
+ 0x66, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04,
+ 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
+ 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82, 0x25, 0x30, 0x02, 0x50,
+ 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04, 0x65, 0x50, 0x40, 0x05,
+ 0x56, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00,
+ 0x19, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10, 0x95, 0xbb, 0x31, 0xb4,
+ 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21, 0x06, 0x34, 0x50, 0x00,
+ 0x64, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca, 0x40, 0x98, 0x98, 0xac,
+ 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0x40, 0x72, 0x60,
+ 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8, 0xc2, 0xd8, 0xcc, 0xca,
+ 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66, 0x52, 0x86, 0x08, 0x94,
+ 0x30, 0xc4, 0x80, 0x06, 0x08, 0x81, 0x08, 0x16, 0x4d, 0x65, 0x74, 0x61,
+ 0x6c, 0x43, 0x10, 0xaa, 0x80, 0x06, 0x68, 0x80, 0x08, 0x6e, 0x61, 0x69,
+ 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x64, 0x65,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c,
+ 0x65, 0x43, 0x04, 0xea, 0x20, 0x17, 0x96, 0x26, 0xe7, 0x32, 0xf6, 0xd6,
+ 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36, 0x47, 0xf7, 0xd5, 0x16,
+ 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6, 0x56, 0x36, 0x44, 0xa0,
+ 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8, 0x5b, 0x1b, 0x5c, 0x1a,
+ 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99, 0x58, 0x9d, 0x99, 0x59,
+ 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda, 0x57, 0x99, 0x5b, 0x98,
+ 0x18, 0x5b, 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06, 0x61, 0x69, 0x72, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e, 0x6e, 0x61, 0x74, 0x69,
+ 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa, 0x61, 0x14, 0x96, 0x26,
+ 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7, 0x45, 0x17, 0x26, 0x77,
+ 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25, 0x4c, 0xee, 0xec, 0x8b,
+ 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad, 0x8c, 0x86, 0x19, 0xdb,
+ 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20, 0x82, 0x82, 0xa8, 0x68,
+ 0x88, 0x40, 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c, 0xe0, 0xde, 0xe6, 0xd2,
+ 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0x8c, 0x95, 0xb9,
+ 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73, 0x71, 0x7b, 0xfb, 0x82,
+ 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b, 0xb3, 0x2b, 0x23, 0x13,
+ 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5, 0x16, 0xd6, 0x56, 0x46,
+ 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, 0x6d, 0x08, 0x04, 0x11,
+ 0x14, 0x45, 0x55, 0x94, 0x45, 0x41, 0x54, 0x44, 0x5d, 0x14, 0x46, 0x29,
+ 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac, 0xad, 0xcc, 0x8d, 0xee,
+ 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59, 0x99, 0x5b, 0x99, 0x5c,
+ 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19, 0xde, 0xd8, 0xdb, 0x9b,
+ 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a, 0x9f, 0xb0, 0x34, 0x39,
+ 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31, 0xba, 0x34, 0xbb, 0x32,
+ 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44, 0xe8, 0xca, 0xf0, 0xc6,
+ 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40, 0x69, 0xd4, 0x46, 0x55,
+ 0x14, 0x47, 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47, 0x25, 0x2c, 0x4d, 0xce,
+ 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f, 0x58, 0x9a, 0x9c, 0x8b,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c, 0x9a, 0x5e, 0x19, 0xa5,
+ 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30, 0xba, 0xb4, 0x37, 0xb7,
+ 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61, 0x69, 0x72, 0x2e, 0x72,
+ 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c, 0xc2, 0xe4, 0xce, 0xbe,
+ 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4, 0xca, 0x78, 0x85, 0xa5,
+ 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5, 0xc1, 0x95, 0x7d, 0x85,
+ 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9, 0x95, 0x71, 0x18, 0x7b,
+ 0x63, 0x1b, 0x02, 0x06, 0x50, 0x42, 0x81, 0x01, 0x15, 0x06, 0x50, 0x41,
+ 0x89, 0x01, 0x44, 0x40, 0x03, 0x35, 0x06, 0x14, 0x19, 0x40, 0x05, 0x55,
+ 0x06, 0x50, 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94, 0x19, 0x90, 0x0a, 0x4b,
+ 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3, 0xfb, 0xa2, 0xcb, 0x83,
+ 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61, 0xc6, 0xf6, 0x16, 0x46,
+ 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c, 0x8e, 0x86, 0xd4, 0xd8,
+ 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7, 0x32, 0x33, 0x33, 0x1a,
+ 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0, 0x00, 0x22, 0xa0, 0x02,
+ 0x22, 0xa8, 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0, 0x02, 0x22, 0xa8, 0x34,
+ 0xa0, 0xd6, 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd8, 0x00,
+ 0x62, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda, 0x80, 0x49, 0x56, 0x95,
+ 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d, 0xb2, 0xb2, 0xb1, 0x37,
+ 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x29, 0x14, 0x18, 0x50, 0x61, 0x00, 0x1d,
+ 0x94, 0x18, 0x40, 0x03, 0x34, 0x50, 0x63, 0x40, 0xa1, 0x01, 0xe5, 0x06,
+ 0x14, 0x19, 0x40, 0x07, 0x55, 0x06, 0x50, 0x41, 0x41, 0xd4, 0x1b, 0x50,
+ 0x17, 0x05, 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c, 0xe8, 0xca, 0xf0, 0xe8,
+ 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9, 0xcc, 0x85, 0xb5, 0xc1,
+ 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x93, 0x21,
+ 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01, 0x99, 0x0b, 0x6b, 0x83,
+ 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97, 0x35, 0x84, 0x82, 0x0c,
+ 0x4a, 0x0e, 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0, 0xe6, 0x80, 0x82, 0x28,
+ 0x3a, 0xa0, 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95, 0xe1, 0x55, 0x59, 0x0d,
+ 0xa1, 0xa0, 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0, 0x01, 0x1a, 0xa8, 0x39,
+ 0xa0, 0x20, 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03, 0x2e, 0x61, 0x69, 0x72,
+ 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x3c, 0xe6, 0xc2, 0xda,
+ 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91, 0x20, 0x87, 0xca, 0x03,
+ 0x4a, 0x0c, 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2, 0x03, 0xea, 0xa2, 0xf6,
+ 0x60, 0x88, 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01, 0x15, 0x07, 0x94, 0x1d,
+ 0x50, 0x78, 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01, 0xa8, 0x89, 0xea, 0x03,
+ 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda, 0xe0, 0xd8, 0xca, 0x40,
+ 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82, 0x86, 0x08, 0x14, 0x28,
+ 0x0c, 0x31, 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a, 0x86, 0x18, 0x94, 0x28,
+ 0x50, 0xa2, 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07,
+ 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60, 0x87, 0x72, 0x70, 0x03,
+ 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98, 0x12, 0x04, 0x23, 0x14,
+ 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48, 0x07, 0x72, 0x28, 0x07,
+ 0x77, 0xa0, 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09, 0x87, 0x74, 0x90, 0x07,
+ 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48, 0x87, 0x77, 0x70, 0x87,
+ 0x29, 0x01, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90, 0x07, 0x37, 0x60, 0x87,
+ 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38, 0x87, 0x72, 0xf8, 0x05,
+ 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78, 0x07, 0x77, 0x98, 0x12,
+ 0x18, 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87,
+ 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8, 0x85, 0x77, 0x80, 0x07,
+ 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98, 0x42, 0x20, 0x0a, 0xe3,
+ 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2,
+ 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0x7e, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c,
+ 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3,
+ 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6,
+ 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e,
+ 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43,
+ 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03,
+ 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48,
+ 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20,
+ 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e,
+ 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d,
+ 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89,
+ 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83,
+ 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68,
+ 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90,
+ 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78,
+ 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98,
+ 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5,
+ 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c,
+ 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c,
+ 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43,
+ 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43,
+ 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82,
+ 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7, 0x69, 0x87, 0x70, 0x58,
+ 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78, 0x60, 0x87, 0x74, 0x18,
+ 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f, 0xee, 0x00, 0x0f, 0xf2,
+ 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f, 0xe1, 0x20, 0x0e, 0xec,
+ 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1, 0x1e, 0xc2, 0x41, 0x1e,
+ 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0, 0x1c, 0xe4, 0xe1, 0x1d,
+ 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0, 0x43, 0x3a, 0x9c, 0x83,
+ 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x60,
+ 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c, 0xf4, 0x90, 0x0f, 0xf0,
+ 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0x21, 0x1d,
+ 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1, 0x1c, 0xcc, 0x21, 0x1d,
+ 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc, 0xc3, 0x3b, 0xb0, 0x43,
+ 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4, 0x43, 0x3b, 0x88, 0xc3,
+ 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79, 0x98, 0x87, 0x77, 0x18,
+ 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72, 0x00, 0x00, 0x00, 0x00,
+ 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x16, 0xd0, 0x00, 0x48,
+ 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb, 0x26, 0xb0, 0x01, 0x48,
+ 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4,
+ 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00, 0x11, 0xdb, 0x95, 0xff,
+ 0xf9, 0xd6, 0xf6, 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00,
+ 0x61, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c,
+ 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x54, 0xc7, 0x1a, 0x80,
+ 0x81, 0x98, 0x63, 0x20, 0x06, 0x6f, 0x8e, 0x81, 0xf0, 0xbc, 0xb1, 0x06,
+ 0x20, 0x10, 0x28, 0x8e, 0x00, 0xd0, 0xab, 0x81, 0x11, 0x00, 0x82, 0x33,
+ 0x00, 0x14, 0xe6, 0x20, 0xc6, 0x60, 0x0c, 0xc6, 0x20, 0x0c, 0x66, 0x00,
+ 0x08, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, 0x08, 0xc0, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10, 0x88, 0x01, 0xe4, 0x4c,
+ 0x48, 0x72, 0x08, 0x83, 0x0c, 0x41, 0xc1, 0x8c, 0x18, 0x28, 0x43, 0x40,
+ 0x06, 0x11, 0x54, 0x29, 0x4b, 0x42, 0x0c, 0x32, 0x04, 0xc7, 0x33, 0xc8,
+ 0x30, 0x04, 0xd1, 0x59, 0x76, 0x29, 0x28, 0x83, 0x0c, 0xc1, 0x12, 0x19,
+ 0x11, 0xc0, 0x87, 0xb6, 0x32, 0xde, 0xb0, 0x7d, 0x6b, 0x70, 0x81, 0x5d,
+ 0x0a, 0xca, 0x20, 0x43, 0x10, 0x5d, 0x23, 0x06, 0x85, 0x10, 0xc4, 0x81,
+ 0x11, 0x8c, 0x37, 0x80, 0x01, 0x19, 0xa8, 0xc1, 0x05, 0x76, 0x29, 0x28,
+ 0x83, 0x0c, 0x81, 0xc5, 0x8d, 0x18, 0x14, 0x42, 0x60, 0x07, 0x4b, 0x30,
+ 0xde, 0x50, 0x06, 0x69, 0xe0, 0x06, 0x17, 0xd8, 0xa5, 0xa0, 0x0c, 0x32,
+ 0x04, 0x5b, 0x18, 0x8c, 0x18, 0x14, 0x42, 0xb0, 0x07, 0x50, 0x30, 0xc7,
+ 0xe0, 0x2d, 0x79, 0x30, 0xc7, 0x10, 0x1c, 0x7b, 0x30, 0xc7, 0x10, 0x0c,
+ 0x76, 0x60, 0xc1, 0x24, 0x9f, 0x0c, 0x02, 0x62, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x24, 0x18, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0xc0, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde,
+ 0x21, 0x0c, 0x00, 0x00, 0x2d, 0x03, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
+ 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
+ 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02,
+ 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49,
+ 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80,
+ 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, 0x62, 0xa8, 0xa0,
+ 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00,
+ 0x9a, 0x00, 0x00, 0x00, 0x1b, 0xfa, 0x25, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x60, 0x00, 0x09, 0xa8, 0x88, 0x71, 0x78, 0x07, 0x79, 0x90, 0x87,
+ 0x72, 0x18, 0x07, 0x7a, 0x60, 0x87, 0x7c, 0x68, 0x03, 0x79, 0x78, 0x87,
+ 0x7a, 0x70, 0x07, 0x72, 0x28, 0x07, 0x72, 0x68, 0x03, 0x72, 0x48, 0x07,
+ 0x7b, 0x48, 0x07, 0x72, 0x28, 0x87, 0x36, 0x98, 0x87, 0x78, 0x90, 0x07,
+ 0x7a, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xcc, 0x21, 0x1c, 0xd8, 0x61, 0x1e, 0xca, 0x01, 0x20, 0xc8,
+ 0x21, 0x1d, 0xe6, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0xa1, 0x0d, 0xe8,
+ 0x21, 0x1c, 0xd2, 0x81, 0x1d, 0xda, 0x60, 0x1c, 0xc2, 0x81, 0x1d, 0xd8,
+ 0x61, 0x1e, 0x00, 0x73, 0x08, 0x07, 0x76, 0x98, 0x87, 0x72, 0x00, 0x08,
+ 0x76, 0x28, 0x87, 0x79, 0x98, 0x87, 0x36, 0x80, 0x07, 0x79, 0x28, 0x87,
+ 0x71, 0x48, 0x87, 0x79, 0x28, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x87,
+ 0x70, 0x20, 0x07, 0xc0, 0x1c, 0xc2, 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x00,
+ 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca,
+ 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4,
+ 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87,
+ 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, 0x87,
+ 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, 0x07,
+ 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, 0x87,
+ 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, 0x36, 0x60, 0x87, 0x72, 0x08, 0x07,
+ 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0x48, 0x07, 0x77, 0x30, 0x87,
+ 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07,
+ 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde,
+ 0xa1, 0x0d, 0xd4, 0xa1, 0x1e, 0xda, 0x01, 0x1e, 0xda, 0x80, 0x1e, 0xc2,
+ 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0xe6, 0x01, 0x30, 0x87, 0x70, 0x60, 0x87,
+ 0x79, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07,
+ 0x77, 0x98, 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07,
+ 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xdc,
+ 0xe1, 0x1d, 0xda, 0x60, 0x1e, 0xd2, 0xe1, 0x1c, 0xdc, 0xa1, 0x1c, 0xc8,
+ 0xa1, 0x0d, 0xf4, 0xa1, 0x1c, 0xe4, 0xe1, 0x1d, 0xe6, 0xa1, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07,
+ 0x79, 0xa8, 0x87, 0x72, 0x00, 0x08, 0x77, 0x78, 0x87, 0x36, 0xa0, 0x07,
+ 0x79, 0x08, 0x07, 0x78, 0x80, 0x87, 0x74, 0x70, 0x87, 0x73, 0x68, 0x83,
+ 0x76, 0x08, 0x07, 0x7a, 0x40, 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca,
+ 0x01, 0x20, 0xe6, 0x81, 0x1e, 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0,
+ 0x41, 0x1e, 0xde, 0x81, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4,
+ 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda,
+ 0x60, 0x1e, 0xd2, 0x41, 0x1f, 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa0, 0x87,
+ 0x70, 0x90, 0x87, 0x73, 0x28, 0x07, 0x7a, 0x68, 0x03, 0x73, 0x28, 0x87,
+ 0x70, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x98, 0x07, 0xa0, 0x0d, 0xcc,
+ 0x01, 0x1e, 0xe2, 0xc0, 0x0e, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2,
+ 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2,
+ 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88,
+ 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87,
+ 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2,
+ 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x88, 0x30, 0x00, 0x09, 0xb0,
+ 0x00, 0xd5, 0x06, 0x64, 0x20, 0x80, 0x04, 0x58, 0x80, 0x6a, 0x83, 0x41,
+ 0x14, 0xc0, 0x02, 0x54, 0x1b, 0x8c, 0xc2, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x18, 0x07, 0xb0, 0x00, 0xd5, 0x06, 0xe3, 0xf8, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x90, 0x00, 0x6a, 0x03, 0x82, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x30, 0x80, 0x04, 0x54, 0x1b, 0x8c, 0x24, 0x00, 0x16, 0xa0, 0xda, 0x60,
+ 0x28, 0x02, 0xb0, 0x00, 0x15, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x13, 0x8c, 0x40, 0x18, 0x88, 0xc2, 0x98, 0x10,
+ 0x1c, 0x13, 0x06, 0x24, 0x51, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00,
+ 0x28, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04,
+ 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14,
+ 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x33, 0x00,
+ 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x83, 0x08, 0x41, 0x30, 0x8c,
+ 0x30, 0x00, 0x07, 0x49, 0x53, 0x44, 0x09, 0x93, 0x2f, 0xbb, 0x6f, 0x47,
+ 0x08, 0xce, 0x40, 0x20, 0x82, 0x10, 0x42, 0x06, 0x11, 0x0a, 0xe1, 0x28,
+ 0x69, 0x8a, 0x28, 0x61, 0xf2, 0xff, 0x89, 0xb8, 0x26, 0x2a, 0x22, 0x7e,
+ 0x7b, 0xf8, 0xa7, 0x31, 0x02, 0x60, 0x10, 0xe1, 0x08, 0x2e, 0x92, 0xa6,
+ 0x88, 0x12, 0x26, 0xff, 0x97, 0x00, 0xe6, 0x59, 0x88, 0xe8, 0x9f, 0xc6,
+ 0x08, 0x80, 0x41, 0x84, 0x44, 0x28, 0x48, 0x08, 0x62, 0x18, 0x84, 0x14,
+ 0xad, 0x32, 0x00, 0x42, 0xa8, 0xcd, 0x11, 0x04, 0x73, 0x04, 0x60, 0x30,
+ 0x8c, 0x20, 0x40, 0x05, 0x09, 0x48, 0x89, 0x17, 0x1f, 0x20, 0x39, 0x10,
+ 0x30, 0x8c, 0x30, 0x40, 0x83, 0x08, 0x81, 0x30, 0x47, 0x00, 0x0a, 0x83,
+ 0x08, 0x84, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa8, 0x70, 0x48,
+ 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, 0x60,
+ 0x87, 0x72, 0x68, 0x83, 0x74, 0x78, 0x87, 0x79, 0xc8, 0x03, 0x37, 0x80,
+ 0x03, 0x37, 0x80, 0x83, 0x0d, 0xef, 0x51, 0x0e, 0x6d, 0x00, 0x0f, 0x7a,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe9, 0x10, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d,
+ 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9,
+ 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x30, 0x07, 0x72,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6,
+ 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74,
+ 0xd0, 0x06, 0xe6, 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78,
+ 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xd0, 0x06, 0xf6,
+ 0x20, 0x07, 0x74, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72,
+ 0xd0, 0x06, 0xf6, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x7a,
+ 0x30, 0x07, 0x72, 0xd0, 0x06, 0xf6, 0x40, 0x07, 0x78, 0xa0, 0x07, 0x76,
+ 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6, 0x60, 0x07, 0x74,
+ 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xf6,
+ 0x90, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a,
+ 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d,
+ 0x60, 0x0f, 0x71, 0x90, 0x07, 0x72, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76,
+ 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75,
+ 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x75, 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75,
+ 0x10, 0x07, 0x72, 0xa0, 0x07, 0x75, 0x10, 0x07, 0x72, 0xd0, 0x06, 0xf6,
+ 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72,
+ 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xd0, 0x06, 0xe6,
+ 0x80, 0x07, 0x70, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71,
+ 0x20, 0x07, 0x78, 0xd0, 0x06, 0xee, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x76,
+ 0xa0, 0x07, 0x73, 0x20, 0x07, 0x43, 0x18, 0x06, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x21, 0x8c, 0x03, 0x04, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0x10, 0x66, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x0b, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14,
+ 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x82,
+ 0x25, 0x30, 0x02, 0x50, 0x20, 0x85, 0x50, 0x80, 0x01, 0x05, 0x51, 0x04,
+ 0x65, 0x50, 0x40, 0x05, 0x56, 0x0a, 0xc5, 0x40, 0x77, 0x04, 0x00, 0x00,
+ 0x79, 0x18, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x10,
+ 0x95, 0xbb, 0x31, 0xb4, 0x30, 0xb9, 0xaf, 0xb9, 0x34, 0xbd, 0xb2, 0x21,
+ 0x06, 0x34, 0x50, 0x00, 0x64, 0x50, 0x0d, 0x82, 0xe0, 0xe0, 0xd8, 0xca,
+ 0x40, 0x98, 0x98, 0xac, 0x9a, 0x40, 0xec, 0xca, 0xe4, 0xe6, 0xd2, 0xde,
+ 0xdc, 0x40, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x40, 0x50, 0xda, 0xca, 0xe8,
+ 0xc2, 0xd8, 0xcc, 0xca, 0x5a, 0x72, 0x60, 0x64, 0x5c, 0x66, 0x5c, 0x66,
+ 0x52, 0x86, 0x08, 0x94, 0x30, 0xc4, 0x80, 0x06, 0x08, 0x81, 0x08, 0x16,
+ 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x43, 0x10, 0xaa, 0x80, 0x06, 0x68, 0x80,
+ 0x08, 0x6e, 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x6f, 0x72, 0x6d, 0x73, 0x5f, 0x64, 0x69,
+ 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xea, 0x20, 0x17, 0x96, 0x26,
+ 0xe7, 0x32, 0xf6, 0xd6, 0x06, 0x97, 0xc6, 0x56, 0xe6, 0x62, 0x16, 0x36,
+ 0x47, 0xf7, 0xd5, 0x16, 0x46, 0x87, 0xf6, 0x55, 0xe6, 0x16, 0x26, 0xc6,
+ 0x56, 0x36, 0x44, 0xa0, 0x12, 0x92, 0x41, 0x58, 0x9a, 0x9c, 0xcb, 0xd8,
+ 0x5b, 0x1b, 0x5c, 0x1a, 0x5b, 0x99, 0x8b, 0x99, 0x5c, 0x58, 0x5b, 0x99,
+ 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0x97, 0x59, 0x19, 0xdd, 0x18, 0xda,
+ 0x57, 0x99, 0x5b, 0x98, 0x18, 0x5b, 0xd9, 0x10, 0x81, 0x5a, 0x18, 0x06,
+ 0x61, 0x69, 0x72, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x2e,
+ 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c,
+ 0x65, 0x5f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x04, 0xaa,
+ 0x61, 0x14, 0x96, 0x26, 0xe7, 0x22, 0x57, 0xe6, 0x46, 0x56, 0x26, 0xf7,
+ 0x45, 0x17, 0x26, 0x77, 0x56, 0x46, 0xc7, 0x28, 0x2c, 0x4d, 0xce, 0x25,
+ 0x4c, 0xee, 0xec, 0x8b, 0x2e, 0x0f, 0xae, 0xec, 0xcb, 0x2d, 0xac, 0xad,
+ 0x8c, 0x86, 0x19, 0xdb, 0x5b, 0x18, 0x1d, 0xcd, 0x10, 0x84, 0x7a, 0x20,
+ 0x82, 0x82, 0xa8, 0x68, 0x88, 0x40, 0x49, 0x64, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xe0, 0xde, 0xe6, 0xd2, 0xe8, 0xd2, 0xde, 0xdc, 0xa8, 0x84, 0xa5, 0xc9,
+ 0xb9, 0x8c, 0x95, 0xb9, 0xd1, 0x95, 0xc9, 0x51, 0x0a, 0x4b, 0x93, 0x73,
+ 0x71, 0x7b, 0xfb, 0x82, 0x2b, 0x93, 0x9b, 0x83, 0x2b, 0x1b, 0xa3, 0x4b,
+ 0xb3, 0x2b, 0x23, 0x13, 0x96, 0x26, 0xe7, 0x12, 0x26, 0x77, 0xf6, 0xe5,
+ 0x16, 0xd6, 0x56, 0x46, 0x04, 0xee, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd,
+ 0x6d, 0x08, 0x04, 0x11, 0x14, 0x45, 0x55, 0x94, 0x45, 0x41, 0x54, 0x44,
+ 0x5d, 0x14, 0x46, 0x29, 0x2c, 0x4d, 0xce, 0xc5, 0x4c, 0x2e, 0xec, 0xac,
+ 0xad, 0xcc, 0x8d, 0xee, 0x2b, 0xcd, 0x0d, 0xae, 0x8e, 0x8e, 0xd9, 0x59,
+ 0x99, 0x5b, 0x99, 0x5c, 0x18, 0x5d, 0x19, 0x19, 0x0a, 0x0e, 0x5d, 0x19,
+ 0xde, 0xd8, 0xdb, 0x9b, 0x1c, 0x19, 0x91, 0x9d, 0xcc, 0x97, 0x59, 0x0a,
+ 0x9f, 0xb0, 0x34, 0x39, 0x17, 0xb8, 0x32, 0xb9, 0x39, 0xb8, 0xb2, 0x31,
+ 0xba, 0x34, 0xbb, 0x32, 0x1a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x44,
+ 0xe8, 0xca, 0xf0, 0xc6, 0xde, 0xde, 0xe4, 0xc8, 0x86, 0x48, 0xd0, 0x40,
+ 0x69, 0xd4, 0x46, 0x55, 0x14, 0x47, 0x41, 0x54, 0x47, 0x5d, 0x94, 0x47,
+ 0x25, 0x2c, 0x4d, 0xce, 0x45, 0xac, 0xce, 0xcc, 0xac, 0x4c, 0x8e, 0x4f,
+ 0x58, 0x9a, 0x9c, 0x8b, 0x58, 0x9d, 0x99, 0x59, 0x99, 0xdc, 0xd7, 0x5c,
+ 0x9a, 0x5e, 0x19, 0xa5, 0xb0, 0x34, 0x39, 0x17, 0xb6, 0xb7, 0xb1, 0x30,
+ 0xba, 0xb4, 0x37, 0xb7, 0xaf, 0x34, 0x37, 0xb2, 0x32, 0x3c, 0x22, 0x61,
+ 0x69, 0x72, 0x2e, 0x72, 0x65, 0x61, 0x64, 0x8c, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xc2, 0xe4, 0xce, 0xbe, 0xe8, 0xf2, 0xe0, 0xca, 0xbe, 0xe6, 0xd2, 0xf4,
+ 0xca, 0x78, 0x85, 0xa5, 0xc9, 0xb9, 0x84, 0xc9, 0x9d, 0x7d, 0xd1, 0xe5,
+ 0xc1, 0x95, 0x7d, 0x85, 0xb1, 0xa5, 0x9d, 0xb9, 0x7d, 0xcd, 0xa5, 0xe9,
+ 0x95, 0x71, 0x18, 0x7b, 0x63, 0x1b, 0x02, 0x06, 0x50, 0x42, 0x81, 0x01,
+ 0x15, 0x06, 0x50, 0x41, 0x89, 0x01, 0x44, 0x40, 0x03, 0x35, 0x06, 0x14,
+ 0x19, 0x40, 0x05, 0x55, 0x06, 0x50, 0x41, 0x41, 0x54, 0x44, 0x5d, 0x94,
+ 0x19, 0x90, 0x0a, 0x4b, 0x93, 0x73, 0x99, 0xa3, 0x93, 0xab, 0x1b, 0xa3,
+ 0xfb, 0xa2, 0xcb, 0x83, 0x2b, 0xfb, 0x4a, 0x73, 0x33, 0x7b, 0xa3, 0x61,
+ 0xc6, 0xf6, 0x16, 0x46, 0x37, 0x43, 0xe3, 0xcd, 0xcc, 0x6c, 0xae, 0x8c,
+ 0x8e, 0x86, 0xd4, 0xd8, 0x5b, 0x99, 0x99, 0x19, 0x8d, 0xa3, 0xb1, 0xb7,
+ 0x32, 0x33, 0x33, 0x1a, 0x42, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x43, 0xd0,
+ 0x00, 0x22, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd4, 0x00, 0x2a, 0xa0,
+ 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xd6, 0x00, 0x5a, 0xa0, 0x02, 0x22, 0xa8,
+ 0x34, 0xa0, 0xd8, 0x00, 0x62, 0xa0, 0x02, 0x22, 0xa8, 0x34, 0xa0, 0xda,
+ 0x80, 0x49, 0x56, 0x95, 0x15, 0x51, 0xd9, 0xd8, 0x1b, 0x59, 0x19, 0x0d,
+ 0xb2, 0xb2, 0xb1, 0x37, 0xb2, 0xb2, 0x21, 0x64, 0x00, 0x29, 0x14, 0x18,
+ 0x50, 0x61, 0x00, 0x1d, 0x94, 0x18, 0x40, 0x03, 0x34, 0x50, 0x63, 0x40,
+ 0xa1, 0x01, 0xe5, 0x06, 0x14, 0x19, 0x40, 0x07, 0x55, 0x06, 0x50, 0x41,
+ 0x41, 0xd4, 0x1b, 0x50, 0x17, 0x05, 0x07, 0x5c, 0xc2, 0xd2, 0xe4, 0x5c,
+ 0xe8, 0xca, 0xf0, 0xe8, 0xea, 0xe4, 0xca, 0xa8, 0x84, 0xa5, 0xc9, 0xb9,
+ 0xcc, 0x85, 0xb5, 0xc1, 0xb1, 0x95, 0x11, 0xa3, 0x2b, 0xc3, 0xa3, 0xab,
+ 0x93, 0x2b, 0x93, 0x21, 0xe3, 0x31, 0x63, 0x7b, 0x0b, 0xa3, 0x63, 0x01,
+ 0x99, 0x0b, 0x6b, 0x83, 0x63, 0x2b, 0xf3, 0x21, 0x41, 0x57, 0x86, 0x97,
+ 0x35, 0x84, 0x82, 0x0c, 0x4a, 0x0e, 0x28, 0x31, 0x80, 0x08, 0x68, 0xa0,
+ 0xe6, 0x80, 0x82, 0x28, 0x3a, 0xa0, 0x2e, 0xaa, 0x0e, 0x58, 0xd0, 0x95,
+ 0xe1, 0x55, 0x59, 0x0d, 0xa1, 0xa0, 0x86, 0x92, 0x03, 0x4a, 0x0c, 0xa0,
+ 0x01, 0x1a, 0xa8, 0x39, 0xa0, 0x20, 0x8a, 0x0e, 0xa8, 0x8b, 0xba, 0x03,
+ 0x2e, 0x61, 0x69, 0x72, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72,
+ 0x3c, 0xe6, 0xc2, 0xda, 0xe0, 0xd8, 0xca, 0xe4, 0x18, 0xcc, 0x0d, 0x91,
+ 0x20, 0x87, 0xca, 0x03, 0x4a, 0x0c, 0x20, 0x02, 0x1a, 0x28, 0x88, 0xd2,
+ 0x03, 0xea, 0xa2, 0xf6, 0x60, 0x88, 0x43, 0x65, 0xd4, 0x47, 0x9d, 0x01,
+ 0x15, 0x07, 0x94, 0x1d, 0x50, 0x78, 0x40, 0xf1, 0xc1, 0x10, 0x83, 0x01,
+ 0xa8, 0x89, 0xea, 0x03, 0x3e, 0x6f, 0x6d, 0x6e, 0x69, 0x70, 0x6f, 0x74,
+ 0x65, 0x6e, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x7c, 0xa6, 0xd2, 0xda,
+ 0xe0, 0xd8, 0xca, 0x40, 0x86, 0x56, 0x56, 0x40, 0xa8, 0x84, 0x82, 0x82,
+ 0x86, 0x08, 0x14, 0x28, 0x0c, 0x31, 0xa8, 0x3f, 0xa0, 0x42, 0xe1, 0x7a,
+ 0x86, 0x18, 0x94, 0x28, 0x50, 0xa2, 0x70, 0x3d, 0x23, 0x22, 0x76, 0x60,
+ 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x77, 0x20, 0x87, 0x7a, 0x60,
+ 0x87, 0x72, 0x70, 0x03, 0x73, 0x60, 0x87, 0x70, 0x38, 0x87, 0x79, 0x98,
+ 0x12, 0x04, 0x23, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x48,
+ 0x07, 0x72, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x29, 0xc1, 0x30, 0x62, 0x09,
+ 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90, 0x87, 0x79, 0x48,
+ 0x87, 0x77, 0x70, 0x87, 0x29, 0x01, 0x31, 0x82, 0x0a, 0x87, 0x74, 0x90,
+ 0x07, 0x37, 0x60, 0x87, 0x70, 0x70, 0x87, 0x73, 0xa8, 0x87, 0x70, 0x38,
+ 0x87, 0x72, 0xf8, 0x05, 0x7b, 0x28, 0x07, 0x79, 0x98, 0x87, 0x74, 0x78,
+ 0x07, 0x77, 0x98, 0x12, 0x18, 0x23, 0xa6, 0x70, 0x48, 0x07, 0x79, 0x70,
+ 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0xf8,
+ 0x85, 0x77, 0x80, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x79, 0x98,
+ 0x42, 0x20, 0x0a, 0xe3, 0x8c, 0x60, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d,
+ 0xcc, 0x41, 0x1e, 0xc2, 0xe1, 0x1c, 0xda, 0xa1, 0x1c, 0xdc, 0x81, 0x1e,
+ 0xa6, 0x04, 0x7e, 0x00, 0x79, 0x18, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+ 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88,
+ 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73,
+ 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e,
+ 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30,
+ 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8,
+ 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b,
+ 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76,
+ 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e,
+ 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e,
+ 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61,
+ 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4,
+ 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76,
+ 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37,
+ 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76,
+ 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71,
+ 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e,
+ 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1,
+ 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61,
+ 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90,
+ 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8,
+ 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc,
+ 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc7,
+ 0x69, 0x87, 0x70, 0x58, 0x87, 0x72, 0x70, 0x83, 0x74, 0x68, 0x07, 0x78,
+ 0x60, 0x87, 0x74, 0x18, 0x87, 0x74, 0xa0, 0x87, 0x19, 0xce, 0x53, 0x0f,
+ 0xee, 0x00, 0x0f, 0xf2, 0x50, 0x0e, 0xe4, 0x90, 0x0e, 0xe3, 0x40, 0x0f,
+ 0xe1, 0x20, 0x0e, 0xec, 0x50, 0x0e, 0x33, 0x20, 0x28, 0x1d, 0xdc, 0xc1,
+ 0x1e, 0xc2, 0x41, 0x1e, 0xd2, 0x21, 0x1c, 0xdc, 0x81, 0x1e, 0xdc, 0xe0,
+ 0x1c, 0xe4, 0xe1, 0x1d, 0xea, 0x01, 0x1e, 0x66, 0x18, 0x51, 0x38, 0xb0,
+ 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xcc, 0x50, 0x24, 0x76, 0x60, 0x07, 0x7b,
+ 0x68, 0x07, 0x37, 0x60, 0x87, 0x77, 0x78, 0x07, 0x78, 0x98, 0x51, 0x4c,
+ 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0x33, 0x1e, 0x6a, 0x1e, 0xca, 0x61,
+ 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x01, 0x1e, 0xe4, 0xa1,
+ 0x1c, 0xcc, 0x21, 0x1d, 0xf0, 0x61, 0x06, 0x54, 0x85, 0x83, 0x38, 0xcc,
+ 0xc3, 0x3b, 0xb0, 0x43, 0x3d, 0xd0, 0x43, 0x39, 0xfc, 0xc2, 0x3c, 0xe4,
+ 0x43, 0x3b, 0x88, 0xc3, 0x3b, 0xb0, 0xc3, 0x8c, 0xc5, 0x0a, 0x87, 0x79,
+ 0x98, 0x87, 0x77, 0x18, 0x87, 0x74, 0x08, 0x07, 0x7a, 0x28, 0x07, 0x72,
+ 0x00, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+ 0x16, 0xd0, 0x00, 0x48, 0xe4, 0x0f, 0xce, 0xe4, 0x57, 0x77, 0x71, 0xdb,
+ 0x26, 0xb0, 0x01, 0x48, 0xe4, 0x4b, 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11,
+ 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, 0x7e, 0x85, 0x17, 0xb7, 0x6d, 0x00,
+ 0x11, 0xdb, 0x95, 0xff, 0xf9, 0xda, 0xf5, 0x5f, 0x44, 0x80, 0xc1, 0x10,
+ 0xcd, 0x04, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00,
+ 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
+ 0x54, 0xc7, 0x1a, 0x80, 0x81, 0x98, 0x63, 0x20, 0x86, 0x6f, 0x8e, 0x81,
+ 0xf8, 0xbe, 0xb1, 0x06, 0x20, 0x10, 0x28, 0x8e, 0x25, 0x04, 0xc0, 0x08,
+ 0x00, 0xbd, 0x1a, 0x18, 0x01, 0x20, 0x38, 0x03, 0x40, 0x62, 0x06, 0x80,
+ 0xc2, 0x1c, 0x44, 0x19, 0x94, 0x41, 0x19, 0x8c, 0xc1, 0x0c, 0x00, 0x81,
+ 0x31, 0x02, 0x10, 0x04, 0x41, 0xfc, 0x1b, 0x01, 0x98, 0x01, 0x00, 0x00,
+ 0x23, 0x06, 0xca, 0x10, 0x90, 0x81, 0x04, 0x55, 0x89, 0x82, 0x08, 0x83,
+ 0x0c, 0x41, 0xe1, 0x8c, 0x18, 0x28, 0x43, 0x60, 0x06, 0x93, 0x74, 0x2d,
+ 0x8c, 0x42, 0x0c, 0x32, 0x04, 0x87, 0x33, 0xc8, 0x10, 0x28, 0xd2, 0x20,
+ 0x03, 0x11, 0x50, 0x97, 0xd9, 0xa5, 0xa0, 0x0c, 0x32, 0x04, 0x0c, 0x65,
+ 0x44, 0x00, 0x1f, 0xf2, 0xca, 0x78, 0x83, 0x27, 0x06, 0x6e, 0x70, 0x81,
+ 0x5d, 0x0a, 0xca, 0x20, 0x43, 0x20, 0x69, 0x23, 0x06, 0x85, 0x10, 0xd0,
+ 0x81, 0x11, 0x8c, 0x37, 0x8c, 0xc1, 0x19, 0xb4, 0xc1, 0x05, 0x76, 0x29,
+ 0x28, 0x83, 0x0c, 0xc1, 0xf5, 0x8d, 0x18, 0x14, 0x42, 0x90, 0x07, 0x4b,
+ 0x30, 0xde, 0x80, 0x06, 0x6c, 0x10, 0x07, 0x17, 0xd8, 0xa5, 0xa0, 0x0c,
+ 0x32, 0x04, 0x1c, 0x19, 0x8c, 0x18, 0x14, 0x42, 0xe0, 0x07, 0x50, 0x30,
+ 0xc7, 0xf0, 0x2d, 0x7c, 0x30, 0xc7, 0x10, 0x1c, 0x7e, 0x30, 0xc7, 0x10,
+ 0x0c, 0x79, 0x60, 0xc1, 0x24, 0x9f, 0x0c, 0x02, 0x62, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, 0x25, 0x18, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+const unsigned int sdl_metallib_len = 22208;
--- a/external/SDL2/src/render/metal/build-metal-shaders.sh
+++ b/external/SDL2/src/render/metal/build-metal-shaders.sh
@@ -6,13 +6,17 @@
generate_shaders()
{
- platform=$1
- /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal -std=$platform-metal1.1 -Wall -O3 -o ./sdl.air ./SDL_shaders_metal.metal || exit $?
- /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal-ar rc sdl.metalar sdl.air || exit $?
- /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metallib -o sdl.metallib sdl.metalar || exit $?
- xxd -i sdl.metallib | perl -w -p -e 's/\Aunsigned /const unsigned /;' >./SDL_shaders_metal_$platform.h
+ fileplatform=$1
+ compileplatform=$2
+ sdkplatform=$3
+ minversion=$4
+ xcrun -sdk $sdkplatform metal -c -std=$compileplatform-metal1.1 -m$sdkplatform-version-min=$minversion -Wall -O3 -o ./sdl.air ./SDL_shaders_metal.metal || exit $?
+ xcrun -sdk $sdkplatform metal-ar rc sdl.metalar sdl.air || exit $?
+ xcrun -sdk $sdkplatform metallib -o sdl.metallib sdl.metalar || exit $?
+ xxd -i sdl.metallib | perl -w -p -e 's/\Aunsigned /const unsigned /;' >./SDL_shaders_metal_$fileplatform.h
rm -f sdl.air sdl.metalar sdl.metallib
}
-generate_shaders osx
-generate_shaders ios
+generate_shaders osx osx macosx 10.11
+generate_shaders ios ios iphoneos 8.0
+generate_shaders tvos ios appletvos 9.0
--- a/external/SDL2/src/render/opengl/SDL_glfuncs.h
+++ b/external/SDL2/src/render/opengl/SDL_glfuncs.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/opengl/SDL_render_gl.c
+++ b/external/SDL2/src/render/opengl/SDL_render_gl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -180,7 +180,7 @@
}
} else if (data->glGetError != NULL) {
while (data->glGetError() != GL_NO_ERROR) {
- continue;
+ /* continue; */
}
}
}
@@ -768,6 +768,43 @@
GL_UpdateTexture(renderer, texture, rect, pixels, data->pitch);
}
+static void
+GL_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata;
+ const GLenum textype = renderdata->textype;
+ GL_TextureData *data = (GL_TextureData *) texture->driverdata;
+ GLenum glScaleMode = (scaleMode == SDL_ScaleModeNearest) ? GL_NEAREST : GL_LINEAR;
+
+ renderdata->glEnable(textype);
+ renderdata->glBindTexture(textype, data->texture);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode);
+ renderdata->glDisable(textype);
+
+ if (texture->format == SDL_PIXELFORMAT_YV12 ||
+ texture->format == SDL_PIXELFORMAT_IYUV) {
+ renderdata->glEnable(textype);
+ renderdata->glBindTexture(textype, data->utexture);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode);
+
+ renderdata->glBindTexture(textype, data->vtexture);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode);
+ renderdata->glDisable(textype);
+ }
+
+ if (texture->format == SDL_PIXELFORMAT_NV12 ||
+ texture->format == SDL_PIXELFORMAT_NV21) {
+ renderdata->glEnable(textype);
+ renderdata->glBindTexture(textype, data->utexture);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, glScaleMode);
+ renderdata->glDisable(textype);
+ }
+}
+
static int
GL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -1166,9 +1203,9 @@
data->drawstate.clear_color = color;
}
- if (data->drawstate.cliprect_enabled) {
+ if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) {
data->glDisable(GL_SCISSOR_TEST);
- data->drawstate.cliprect_enabled_dirty = SDL_TRUE;
+ data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled;
}
data->glClear(GL_COLOR_BUFFER_BIT);
@@ -1210,6 +1247,7 @@
data->glVertex2f(verts[0], verts[1]);
}
data->glEnd();
+ verts -= 2 * count;
/* The line is half open, so we need one more point to complete it.
* http://www.opengl.org/documentation/specs/version1.1/glspec1.1/node47.html
@@ -1576,6 +1614,7 @@
renderer->UpdateTextureYUV = GL_UpdateTextureYUV;
renderer->LockTexture = GL_LockTexture;
renderer->UnlockTexture = GL_UnlockTexture;
+ renderer->SetTextureScaleMode = GL_SetTextureScaleMode;
renderer->SetRenderTarget = GL_SetRenderTarget;
renderer->QueueSetViewport = GL_QueueSetViewport;
renderer->QueueSetDrawColor = GL_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/opengl/SDL_shaders_gl.c
+++ b/external/SDL2/src/render/opengl/SDL_shaders_gl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/opengl/SDL_shaders_gl.h
+++ b/external/SDL2/src/render/opengl/SDL_shaders_gl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/opengles/SDL_glesfuncs.h
+++ b/external/SDL2/src/render/opengles/SDL_glesfuncs.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/opengles/SDL_render_gles.c
+++ b/external/SDL2/src/render/opengles/SDL_render_gles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,7 @@
#if SDL_VIDEO_RENDER_OGL_ES && !SDL_RENDER_DISABLED
+#include "SDL_assert.h"
#include "SDL_hints.h"
#include "SDL_opengles.h"
#include "../SDL_sysrender.h"
@@ -492,6 +493,18 @@
GLES_UpdateTexture(renderer, texture, &rect, data->pixels, data->pitch);
}
+static void
+GLES_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata;
+ GLES_TextureData *data = (GLES_TextureData *) texture->driverdata;
+ GLenum glScaleMode = (scaleMode == SDL_ScaleModeNearest) ? GL_NEAREST : GL_LINEAR;
+
+ renderdata->glBindTexture(data->type, data->texture);
+ renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, glScaleMode);
+}
+
static int
GLES_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -866,9 +879,9 @@
data->drawstate.clear_color = color;
}
- if (data->drawstate.cliprect_enabled) {
+ if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) {
data->glDisable(GL_SCISSOR_TEST);
- data->drawstate.cliprect_enabled_dirty = SDL_TRUE;
+ data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled;
}
data->glClear(GL_COLOR_BUFFER_BIT);
@@ -1141,6 +1154,7 @@
renderer->UpdateTexture = GLES_UpdateTexture;
renderer->LockTexture = GLES_LockTexture;
renderer->UnlockTexture = GLES_UnlockTexture;
+ renderer->SetTextureScaleMode = GLES_SetTextureScaleMode;
renderer->SetRenderTarget = GLES_SetRenderTarget;
renderer->QueueSetViewport = GLES_QueueSetViewport;
renderer->QueueSetDrawColor = GLES_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/opengles2/SDL_gles2funcs.h
+++ b/external/SDL2/src/render/opengles2/SDL_gles2funcs.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -54,7 +54,7 @@
SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei))
SDL_PROC(void, glShaderBinary, (GLsizei, const GLuint *, GLenum, const void *, GLsizei))
-#if __NACL__ || __ANDROID__
+#if __NACL__
SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar **, const GLint *))
#else
SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar* const*, const GLint *))
--- a/external/SDL2/src/render/opengles2/SDL_render_gles2.c
+++ b/external/SDL2/src/render/opengles2/SDL_render_gles2.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -208,7 +208,7 @@
return;
}
while (data->glGetError() != GL_NO_ERROR) {
- continue;
+ /* continue; */
}
}
@@ -1277,9 +1277,9 @@
data->drawstate.clear_color = color;
}
- if (data->drawstate.cliprect_enabled) {
+ if (data->drawstate.cliprect_enabled || data->drawstate.cliprect_enabled_dirty) {
data->glDisable(GL_SCISSOR_TEST);
- data->drawstate.cliprect_enabled_dirty = SDL_TRUE;
+ data->drawstate.cliprect_enabled_dirty = data->drawstate.cliprect_enabled;
}
data->glClear(GL_COLOR_BUFFER_BIT);
@@ -1743,6 +1743,36 @@
GLES2_UpdateTexture(renderer, texture, &rect, tdata->pixel_data, tdata->pitch);
}
+static void
+GLES2_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ GLES2_RenderData *renderdata = (GLES2_RenderData *) renderer->driverdata;
+ GLES2_TextureData *data = (GLES2_TextureData *) texture->driverdata;
+ GLenum glScaleMode = (scaleMode == SDL_ScaleModeNearest) ? GL_NEAREST : GL_LINEAR;
+
+ if (data->yuv) {
+ renderdata->glActiveTexture(GL_TEXTURE2);
+ renderdata->glBindTexture(data->texture_type, data->texture_v);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode);
+
+ renderdata->glActiveTexture(GL_TEXTURE1);
+ renderdata->glBindTexture(data->texture_type, data->texture_u);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode);
+ } else if (data->nv12) {
+ renderdata->glActiveTexture(GL_TEXTURE1);
+ renderdata->glBindTexture(data->texture_type, data->texture_u);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode);
+ }
+
+ renderdata->glActiveTexture(GL_TEXTURE0);
+ renderdata->glBindTexture(data->texture_type, data->texture);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, glScaleMode);
+ renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, glScaleMode);
+}
+
static int
GLES2_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -1812,7 +1842,7 @@
int status;
temp_pitch = rect->w * SDL_BYTESPERPIXEL(temp_format);
- buflen = (size_t) (rect->h * temp_pitch);
+ buflen = rect->h * temp_pitch;
if (buflen == 0) {
return 0; /* nothing to do. */
}
@@ -2064,6 +2094,7 @@
renderer->UpdateTextureYUV = GLES2_UpdateTextureYUV;
renderer->LockTexture = GLES2_LockTexture;
renderer->UnlockTexture = GLES2_UnlockTexture;
+ renderer->SetTextureScaleMode = GLES2_SetTextureScaleMode;
renderer->SetRenderTarget = GLES2_SetRenderTarget;
renderer->QueueSetViewport = GLES2_QueueSetViewport;
renderer->QueueSetDrawColor = GLES2_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/opengles2/SDL_shaders_gles2.c
+++ b/external/SDL2/src/render/opengles2/SDL_shaders_gles2.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/opengles2/SDL_shaders_gles2.h
+++ b/external/SDL2/src/render/opengles2/SDL_shaders_gles2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/psp/SDL_render_psp.c
+++ b/external/SDL2/src/render/psp/SDL_render_psp.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -428,6 +428,12 @@
PSP_UpdateTexture(renderer, texture, &rect, psp_texture->data, psp_texture->pitch);
}
+static void
+PSP_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+ /* Nothing to do because TextureActivate takes care of it */
+}
+
static int
PSP_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -670,8 +676,13 @@
case SDL_BLENDMODE_MOD:
sceGuTexFunc(GU_TFX_MODULATE , GU_TCC_RGBA);
sceGuEnable(GU_BLEND);
- sceGuBlendFunc( GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0);
+ sceGuBlendFunc(GU_ADD, GU_FIX, GU_SRC_COLOR, 0, 0);
break;
+ case SDL_BLENDMODE_MUL:
+ sceGuTexFunc(GU_TFX_MODULATE , GU_TCC_RGBA);
+ sceGuEnable(GU_BLEND);
+ sceGuBlendFunc(GU_ADD, GU_DST_COLOR, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
+ break;
}
data->currentBlendMode = blendMode;
}
@@ -938,6 +949,7 @@
renderer->UpdateTexture = PSP_UpdateTexture;
renderer->LockTexture = PSP_LockTexture;
renderer->UnlockTexture = PSP_UnlockTexture;
+ renderer->SetTextureScaleMode = PSP_SetTextureScaleMode;
renderer->SetRenderTarget = PSP_SetRenderTarget;
renderer->QueueSetViewport = PSP_QueueSetViewport;
renderer->QueueSetDrawColor = PSP_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
--- a/external/SDL2/src/render/software/SDL_blendfillrect.c
+++ b/external/SDL2/src/render/software/SDL_blendfillrect.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "SDL_draw.h"
#include "SDL_blendfillrect.h"
@@ -42,6 +42,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB555);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB555);
+ break;
default:
FILLRECT(Uint16, DRAW_SETPIXEL_RGB555);
break;
@@ -65,6 +68,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB565);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB565);
+ break;
default:
FILLRECT(Uint16, DRAW_SETPIXEL_RGB565);
break;
@@ -88,6 +94,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB888);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB888);
+ break;
default:
FILLRECT(Uint32, DRAW_SETPIXEL_RGB888);
break;
@@ -111,6 +120,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint32, DRAW_SETPIXEL_MOD_ARGB8888);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint32, DRAW_SETPIXEL_MUL_ARGB8888);
+ break;
default:
FILLRECT(Uint32, DRAW_SETPIXEL_ARGB8888);
break;
@@ -137,6 +149,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB);
+ break;
default:
FILLRECT(Uint16, DRAW_SETPIXEL_RGB);
break;
@@ -153,6 +168,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB);
+ break;
default:
FILLRECT(Uint32, DRAW_SETPIXEL_RGB);
break;
@@ -182,6 +200,9 @@
case SDL_BLENDMODE_MOD:
FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGBA);
break;
+ case SDL_BLENDMODE_MUL:
+ FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGBA);
+ break;
default:
FILLRECT(Uint32, DRAW_SETPIXEL_RGBA);
break;
@@ -331,6 +352,6 @@
return status;
}
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_blendfillrect.h
+++ b/external/SDL2/src/render/software/SDL_blendfillrect.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_blendline.c
+++ b/external/SDL2/src/render/software/SDL_blendline.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "SDL_draw.h"
#include "SDL_blendline.h"
@@ -59,6 +59,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
HLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -74,6 +77,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
VLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -89,6 +95,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
DLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -110,6 +119,11 @@
DRAW_SETPIXELXY2_MOD_RGB, DRAW_SETPIXELXY2_MOD_RGB,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY2_MUL_RGB, DRAW_SETPIXELXY2_MUL_RGB,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY2_RGB, DRAW_SETPIXELXY2_BLEND_RGB,
@@ -150,6 +164,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
+ break;
default:
HLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
break;
@@ -165,6 +182,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
+ break;
default:
VLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
break;
@@ -180,6 +200,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
+ break;
default:
DLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
break;
@@ -201,6 +224,11 @@
DRAW_SETPIXELXY_MOD_RGB555, DRAW_SETPIXELXY_MOD_RGB555,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY_MUL_RGB555, DRAW_SETPIXELXY_MUL_RGB555,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY_RGB555, DRAW_SETPIXELXY_BLEND_RGB555,
@@ -241,6 +269,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
+ break;
default:
HLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
break;
@@ -256,6 +287,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
+ break;
default:
VLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
break;
@@ -271,6 +305,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
+ break;
default:
DLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
break;
@@ -292,6 +329,11 @@
DRAW_SETPIXELXY_MOD_RGB565, DRAW_SETPIXELXY_MOD_RGB565,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY_MUL_RGB565, DRAW_SETPIXELXY_MUL_RGB565,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY_RGB565, DRAW_SETPIXELXY_BLEND_RGB565,
@@ -333,6 +375,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
HLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -348,6 +393,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
VLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -363,6 +411,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
+ break;
default:
DLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
break;
@@ -384,6 +435,11 @@
DRAW_SETPIXELXY4_MOD_RGB, DRAW_SETPIXELXY4_MOD_RGB,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY4_MUL_RGB, DRAW_SETPIXELXY4_MUL_RGB,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY4_RGB, DRAW_SETPIXELXY4_BLEND_RGB,
@@ -425,6 +481,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
+ break;
default:
HLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
break;
@@ -440,6 +499,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
+ break;
default:
VLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
break;
@@ -455,6 +517,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
+ break;
default:
DLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
break;
@@ -476,6 +541,11 @@
DRAW_SETPIXELXY4_MOD_RGBA, DRAW_SETPIXELXY4_MOD_RGBA,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY4_MUL_RGBA, DRAW_SETPIXELXY4_MUL_RGBA,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY4_RGBA, DRAW_SETPIXELXY4_BLEND_RGBA,
@@ -516,6 +586,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end);
+ break;
default:
HLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end);
break;
@@ -531,6 +604,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end);
+ break;
default:
VLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end);
break;
@@ -546,6 +622,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB888, draw_end);
+ break;
default:
DLINE(Uint32, DRAW_SETPIXEL_RGB888, draw_end);
break;
@@ -567,6 +646,11 @@
DRAW_SETPIXELXY_MOD_RGB888, DRAW_SETPIXELXY_MOD_RGB888,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY_MUL_RGB888, DRAW_SETPIXELXY_MUL_RGB888,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY_RGB888, DRAW_SETPIXELXY_BLEND_RGB888,
@@ -607,6 +691,9 @@
case SDL_BLENDMODE_MOD:
HLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ HLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end);
+ break;
default:
HLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end);
break;
@@ -622,6 +709,9 @@
case SDL_BLENDMODE_MOD:
VLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ VLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end);
+ break;
default:
VLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end);
break;
@@ -637,6 +727,9 @@
case SDL_BLENDMODE_MOD:
DLINE(Uint32, DRAW_SETPIXEL_MOD_ARGB8888, draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ DLINE(Uint32, DRAW_SETPIXEL_MUL_ARGB8888, draw_end);
+ break;
default:
DLINE(Uint32, DRAW_SETPIXEL_ARGB8888, draw_end);
break;
@@ -658,6 +751,11 @@
DRAW_SETPIXELXY_MOD_ARGB8888, DRAW_SETPIXELXY_MOD_ARGB8888,
draw_end);
break;
+ case SDL_BLENDMODE_MUL:
+ AALINE(x1, y1, x2, y2,
+ DRAW_SETPIXELXY_MUL_ARGB8888, DRAW_SETPIXELXY_MUL_ARGB8888,
+ draw_end);
+ break;
default:
AALINE(x1, y1, x2, y2,
DRAW_SETPIXELXY_ARGB8888, DRAW_SETPIXELXY_BLEND_ARGB8888,
@@ -772,6 +870,6 @@
return 0;
}
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_blendline.h
+++ b/external/SDL2/src/render/software/SDL_blendline.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_blendpoint.c
+++ b/external/SDL2/src/render/software/SDL_blendpoint.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "SDL_draw.h"
#include "SDL_blendpoint.h"
@@ -42,6 +42,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY_MOD_RGB555(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY_MUL_RGB555(x, y);
+ break;
default:
DRAW_SETPIXELXY_RGB555(x, y);
break;
@@ -65,6 +68,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY_MOD_RGB565(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY_MUL_RGB565(x, y);
+ break;
default:
DRAW_SETPIXELXY_RGB565(x, y);
break;
@@ -88,6 +94,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY_MOD_RGB888(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY_MUL_RGB888(x, y);
+ break;
default:
DRAW_SETPIXELXY_RGB888(x, y);
break;
@@ -111,6 +120,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY_MOD_ARGB8888(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY_MUL_ARGB8888(x, y);
+ break;
default:
DRAW_SETPIXELXY_ARGB8888(x, y);
break;
@@ -137,6 +149,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY2_MOD_RGB(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY2_MUL_RGB(x, y);
+ break;
default:
DRAW_SETPIXELXY2_RGB(x, y);
break;
@@ -153,6 +168,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY4_MOD_RGB(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY4_MUL_RGB(x, y);
+ break;
default:
DRAW_SETPIXELXY4_RGB(x, y);
break;
@@ -182,6 +200,9 @@
case SDL_BLENDMODE_MOD:
DRAW_SETPIXELXY4_MOD_RGBA(x, y);
break;
+ case SDL_BLENDMODE_MUL:
+ DRAW_SETPIXELXY4_MUL_RGBA(x, y);
+ break;
default:
DRAW_SETPIXELXY4_RGBA(x, y);
break;
@@ -336,6 +357,6 @@
return status;
}
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_blendpoint.h
+++ b/external/SDL2/src/render/software/SDL_blendpoint.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_draw.h
+++ b/external/SDL2/src/render/software/SDL_draw.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -80,6 +80,17 @@
setpixel; \
} while (0)
+#define DRAW_SETPIXEL_MUL(getpixel, setpixel) \
+do { \
+ unsigned sr, sg, sb, sa; sa = 0xFF; \
+ getpixel; \
+ sr = DRAW_MUL(sr, r) + DRAW_MUL(inva, sr); if (sr > 0xff) sr = 0xff; \
+ sg = DRAW_MUL(sg, g) + DRAW_MUL(inva, sg); if (sg > 0xff) sg = 0xff; \
+ sb = DRAW_MUL(sb, b) + DRAW_MUL(inva, sb); if (sb > 0xff) sb = 0xff; \
+ sa = DRAW_MUL(sa, a) + DRAW_MUL(inva, sa); if (sa > 0xff) sa = 0xff; \
+ setpixel; \
+} while (0)
+
#define DRAW_SETPIXELXY(x, y, type, bpp, op) \
do { \
type *pixel = (type *)((Uint8 *)dst->pixels + (y) * dst->pitch \
@@ -106,6 +117,10 @@
DRAW_SETPIXEL_MOD(RGB_FROM_RGB555(*pixel, sr, sg, sb), \
RGB555_FROM_RGB(*pixel, sr, sg, sb))
+#define DRAW_SETPIXEL_MUL_RGB555 \
+ DRAW_SETPIXEL_MUL(RGB_FROM_RGB555(*pixel, sr, sg, sb), \
+ RGB555_FROM_RGB(*pixel, sr, sg, sb))
+
#define DRAW_SETPIXELXY_RGB555(x, y) \
DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB555)
@@ -118,6 +133,9 @@
#define DRAW_SETPIXELXY_MOD_RGB555(x, y) \
DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MOD_RGB555)
+#define DRAW_SETPIXELXY_MUL_RGB555(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB555)
+
/*
* Define draw operators for RGB565
*/
@@ -137,6 +155,10 @@
DRAW_SETPIXEL_MOD(RGB_FROM_RGB565(*pixel, sr, sg, sb), \
RGB565_FROM_RGB(*pixel, sr, sg, sb))
+#define DRAW_SETPIXEL_MUL_RGB565 \
+ DRAW_SETPIXEL_MUL(RGB_FROM_RGB565(*pixel, sr, sg, sb), \
+ RGB565_FROM_RGB(*pixel, sr, sg, sb))
+
#define DRAW_SETPIXELXY_RGB565(x, y) \
DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB565)
@@ -149,6 +171,9 @@
#define DRAW_SETPIXELXY_MOD_RGB565(x, y) \
DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MOD_RGB565)
+#define DRAW_SETPIXELXY_MUL_RGB565(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB565)
+
/*
* Define draw operators for RGB888
*/
@@ -168,6 +193,10 @@
DRAW_SETPIXEL_MOD(RGB_FROM_RGB888(*pixel, sr, sg, sb), \
RGB888_FROM_RGB(*pixel, sr, sg, sb))
+#define DRAW_SETPIXEL_MUL_RGB888 \
+ DRAW_SETPIXEL_MUL(RGB_FROM_RGB888(*pixel, sr, sg, sb), \
+ RGB888_FROM_RGB(*pixel, sr, sg, sb))
+
#define DRAW_SETPIXELXY_RGB888(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_RGB888)
@@ -180,6 +209,9 @@
#define DRAW_SETPIXELXY_MOD_RGB888(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_RGB888)
+#define DRAW_SETPIXELXY_MUL_RGB888(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_RGB888)
+
/*
* Define draw operators for ARGB8888
*/
@@ -199,6 +231,10 @@
DRAW_SETPIXEL_MOD(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \
ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa))
+#define DRAW_SETPIXEL_MUL_ARGB8888 \
+ DRAW_SETPIXEL_MUL(RGBA_FROM_ARGB8888(*pixel, sr, sg, sb, sa), \
+ ARGB8888_FROM_RGBA(*pixel, sr, sg, sb, sa))
+
#define DRAW_SETPIXELXY_ARGB8888(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_ARGB8888)
@@ -211,6 +247,9 @@
#define DRAW_SETPIXELXY_MOD_ARGB8888(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_ARGB8888)
+#define DRAW_SETPIXELXY_MUL_ARGB8888(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_ARGB8888)
+
/*
* Define draw operators for general RGB
*/
@@ -230,6 +269,10 @@
DRAW_SETPIXEL_MOD(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \
PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb))
+#define DRAW_SETPIXEL_MUL_RGB \
+ DRAW_SETPIXEL_MUL(RGB_FROM_PIXEL(*pixel, fmt, sr, sg, sb), \
+ PIXEL_FROM_RGB(*pixel, fmt, sr, sg, sb))
+
#define DRAW_SETPIXELXY2_RGB(x, y) \
DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_RGB)
@@ -254,7 +297,13 @@
#define DRAW_SETPIXELXY4_MOD_RGB(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_RGB)
+#define DRAW_SETPIXELXY2_MUL_RGB(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint16, 2, DRAW_SETPIXEL_MUL_RGB)
+#define DRAW_SETPIXELXY4_MUL_RGB(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_RGB)
+
+
/*
* Define draw operators for general RGBA
*/
@@ -274,6 +323,10 @@
DRAW_SETPIXEL_MOD(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \
PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa))
+#define DRAW_SETPIXEL_MUL_RGBA \
+ DRAW_SETPIXEL_MUL(RGBA_FROM_PIXEL(*pixel, fmt, sr, sg, sb, sa), \
+ PIXEL_FROM_RGBA(*pixel, fmt, sr, sg, sb, sa))
+
#define DRAW_SETPIXELXY4_RGBA(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_RGBA)
@@ -285,6 +338,9 @@
#define DRAW_SETPIXELXY4_MOD_RGBA(x, y) \
DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MOD_RGBA)
+
+#define DRAW_SETPIXELXY4_MUL_RGBA(x, y) \
+ DRAW_SETPIXELXY(x, y, Uint32, 4, DRAW_SETPIXEL_MUL_RGBA)
/*
* Define line drawing macro
--- a/external/SDL2/src/render/software/SDL_drawline.c
+++ b/external/SDL2/src/render/software/SDL_drawline.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "SDL_draw.h"
#include "SDL_drawline.h"
@@ -204,6 +204,6 @@
return 0;
}
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_drawline.h
+++ b/external/SDL2/src/render/software/SDL_drawline.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_drawpoint.c
+++ b/external/SDL2/src/render/software/SDL_drawpoint.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "SDL_draw.h"
#include "SDL_drawpoint.h"
@@ -109,6 +109,6 @@
return 0;
}
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_drawpoint.h
+++ b/external/SDL2/src/render/software/SDL_drawpoint.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_render_sw.c
+++ b/external/SDL2/src/render/software/SDL_render_sw.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if !SDL_RENDER_DISABLED
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
#include "../SDL_sysrender.h"
#include "SDL_render_sw_c.h"
@@ -179,6 +179,11 @@
{
}
+static void
+SW_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
+{
+}
+
static int
SW_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
@@ -394,8 +399,8 @@
blitRequired = SDL_TRUE;
}
- /* The color and alpha modulation has to be applied before the rotation when using the NONE and MOD blend modes. */
- if ((blendmode == SDL_BLENDMODE_NONE || blendmode == SDL_BLENDMODE_MOD) && (alphaMod & rMod & gMod & bMod) != 255) {
+ /* The color and alpha modulation has to be applied before the rotation when using the NONE, MOD or MUL blend modes. */
+ if ((blendmode == SDL_BLENDMODE_NONE || blendmode == SDL_BLENDMODE_MOD || blendmode == SDL_BLENDMODE_MUL) && (alphaMod & rMod & gMod & bMod) != 255) {
applyModulation = SDL_TRUE;
SDL_SetSurfaceAlphaMod(src_clone, alphaMod);
SDL_SetSurfaceColorMod(src_clone, rMod, gMod, bMod);
@@ -568,7 +573,7 @@
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
const SDL_bool colormod = ((r & g & b) != 0xFF);
const SDL_bool alphamod = (a != 0xFF);
- const SDL_bool blending = ((blend == SDL_BLENDMODE_ADD) || (blend == SDL_BLENDMODE_MOD));
+ const SDL_bool blending = ((blend == SDL_BLENDMODE_ADD) || (blend == SDL_BLENDMODE_MOD) || (blend == SDL_BLENDMODE_MUL));
if (colormod || alphamod || blending) {
SDL_SetSurfaceRLE(surface, 0);
@@ -830,6 +835,7 @@
renderer->UpdateTexture = SW_UpdateTexture;
renderer->LockTexture = SW_LockTexture;
renderer->UnlockTexture = SW_UnlockTexture;
+ renderer->SetTextureScaleMode = SW_SetTextureScaleMode;
renderer->SetRenderTarget = SW_SetRenderTarget;
renderer->QueueSetViewport = SW_QueueSetViewport;
renderer->QueueSetDrawColor = SW_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
@@ -883,6 +889,6 @@
0}
};
-#endif /* !SDL_RENDER_DISABLED */
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/render/software/SDL_render_sw_c.h
+++ b/external/SDL2/src/render/software/SDL_render_sw_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/render/software/SDL_rotate.c
+++ b/external/SDL2/src/render/software/SDL_rotate.c
@@ -30,6 +30,8 @@
*/
#include "../../SDL_internal.h"
+#if SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED
+
#if defined(__WIN32__)
#include "../../core/windows/SDL_windows.h"
#endif
@@ -474,8 +476,8 @@
SDL_FillRect(rz_dst, NULL, colorkey);
} else if (blendmode == SDL_BLENDMODE_NONE) {
blendmode = SDL_BLENDMODE_BLEND;
- } else if (blendmode == SDL_BLENDMODE_MOD) {
- /* Without a colorkey, the target texture has to be white for the MOD blend mode so
+ } else if (blendmode == SDL_BLENDMODE_MOD || blendmode == SDL_BLENDMODE_MUL) {
+ /* Without a colorkey, the target texture has to be white for the MOD and MUL blend mode so
* that the pixels outside the rotated area don't affect the destination surface.
*/
colorkey = SDL_MapRGBA(rz_dst->format, 255, 255, 255, 0);
@@ -532,3 +534,5 @@
/* Return rotated surface */
return rz_dst;
}
+
+#endif /* SDL_VIDEO_RENDER_SW && !SDL_RENDER_DISABLED */
--- a/external/SDL2/src/render/software/SDL_rotate.h
+++ b/external/SDL2/src/render/software/SDL_rotate.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/SDL_sensor.c
+++ b/external/SDL2/src/sensor/SDL_sensor.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -486,7 +486,7 @@
/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
- if (SDL_GetEventState(SDL_JOYAXISMOTION) == SDL_ENABLE) {
+ if (SDL_GetEventState(SDL_SENSORUPDATE) == SDL_ENABLE) {
SDL_Event event;
event.type = SDL_SENSORUPDATE;
event.sensor.which = sensor->instance_id;
@@ -503,7 +503,7 @@
SDL_SensorUpdate(void)
{
int i;
- SDL_Sensor *sensor;
+ SDL_Sensor *sensor, *next;
if (!SDL_WasInit(SDL_INIT_SENSOR)) {
return;
@@ -531,7 +531,8 @@
SDL_updating_sensor = SDL_FALSE;
/* If any sensors were closed while updating, free them here */
- for (sensor = SDL_sensors; sensor; sensor = sensor->next) {
+ for (sensor = SDL_sensors; sensor; sensor = next) {
+ next = sensor->next;
if (sensor->ref_count <= 0) {
SDL_SensorClose(sensor);
}
--- a/external/SDL2/src/sensor/SDL_sensor_c.h
+++ b/external/SDL2/src/sensor/SDL_sensor_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/SDL_syssensor.h
+++ b/external/SDL2/src/sensor/SDL_syssensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/android/SDL_androidsensor.c
+++ b/external/SDL2/src/sensor/android/SDL_androidsensor.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/android/SDL_androidsensor.h
+++ b/external/SDL2/src/sensor/android/SDL_androidsensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/coremotion/SDL_coremotionsensor.h
+++ b/external/SDL2/src/sensor/coremotion/SDL_coremotionsensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/coremotion/SDL_coremotionsensor.m
+++ b/external/SDL2/src/sensor/coremotion/SDL_coremotionsensor.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/dummy/SDL_dummysensor.c
+++ b/external/SDL2/src/sensor/dummy/SDL_dummysensor.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/sensor/dummy/SDL_dummysensor.h
+++ b/external/SDL2/src/sensor/dummy/SDL_dummysensor.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/stdlib/SDL_getenv.c
+++ b/external/SDL2/src/stdlib/SDL_getenv.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/stdlib/SDL_iconv.c
+++ b/external/SDL2/src/stdlib/SDL_iconv.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -888,7 +888,7 @@
}
stringsize = inbytesleft > 4 ? inbytesleft : 4;
- string = SDL_malloc(stringsize);
+ string = (char *) SDL_malloc(stringsize);
if (!string) {
SDL_iconv_close(cd);
return NULL;
@@ -898,6 +898,7 @@
SDL_memset(outbuf, 0, 4);
while (inbytesleft > 0) {
+ const size_t oldinbytesleft = inbytesleft;
retCode = SDL_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
switch (retCode) {
case SDL_ICONV_E2BIG:
@@ -904,7 +905,7 @@
{
char *oldstring = string;
stringsize *= 2;
- string = SDL_realloc(string, stringsize);
+ string = (char *) SDL_realloc(string, stringsize);
if (!string) {
SDL_iconv_close(cd);
return NULL;
@@ -923,6 +924,11 @@
case SDL_ICONV_ERROR:
/* We can't continue... */
inbytesleft = 0;
+ break;
+ }
+ /* Avoid infinite loops when nothing gets converted */
+ if (oldinbytesleft == inbytesleft)
+ {
break;
}
}
--- a/external/SDL2/src/stdlib/SDL_malloc.c
+++ b/external/SDL2/src/stdlib/SDL_malloc.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/stdlib/SDL_qsort.c
+++ b/external/SDL2/src/stdlib/SDL_qsort.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -64,7 +64,7 @@
/*
This code came from Gareth McCaughan, under the zlib license.
-Specifically this: https://www.mccaughan.org.uk/software/qsort.c-1.14
+Specifically this: https://www.mccaughan.org.uk/software/qsort.c-1.15
Everything below this comment until the HAVE_QSORT #endif was from Gareth
(any minor changes will be noted inline).
@@ -143,6 +143,10 @@
* 2016-02-21 v1.14 Replace licence with 2-clause BSD,
* and clarify a couple of things in
* comments. No code changes.
+ * 2016-03-10 v1.15 Fix bug kindly reported by Ryan Gordon
+ * (pre-insertion-sort messed up).
+ * Disable DEBUG_QSORT by default.
+ * Tweak comments very slightly.
*/
/* BEGIN SDL CHANGE ... commented this out with an #if 0 block. --ryan. */
@@ -151,9 +155,9 @@
#include <stdlib.h>
#include <string.h>
-#define DEBUG_QSORT
+#undef DEBUG_QSORT
-static char _ID[]="<qsort.c gjm 1.14 2016-02-21>";
+static char _ID[]="<qsort.c gjm 1.15 2016-03-10>";
#endif
/* END SDL CHANGE ... commented this out with an #if 0 block. --ryan. */
@@ -316,7 +320,9 @@
* We find the smallest element from the first |nmemb|,
* or the first |limit|, whichever is smaller;
* therefore we must have ensured that the globally smallest
- * element is in the first |limit|.
+ * element is in the first |limit| (because our
+ * quicksort recursion bottoms out only once we
+ * reach subarrays smaller than |limit|).
*/
#define PreInsertion(swapper,limit,sz) \
first=base; \
@@ -499,7 +505,7 @@
Recurse(TRUNC_words)
}
}
- PreInsertion(SWAP_words,(TRUNC_words/WORD_BYTES),WORD_BYTES);
+ PreInsertion(SWAP_words,TRUNC_words/WORD_BYTES,WORD_BYTES);
/* Now do insertion sort. */
last=((char*)base)+nmemb*WORD_BYTES;
for (first=((char*)base)+WORD_BYTES;first!=last;first+=WORD_BYTES) {
@@ -526,7 +532,6 @@
else
qsort_words(base,nmemb,compare);
}
-
#endif /* HAVE_QSORT */
--- a/external/SDL2/src/stdlib/SDL_stdlib.c
+++ b/external/SDL2/src/stdlib/SDL_stdlib.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -438,11 +438,15 @@
#if defined(HAVE_CTYPE_H)
int SDL_isdigit(int x) { return isdigit(x); }
int SDL_isspace(int x) { return isspace(x); }
+int SDL_isupper(int x) { return isupper(x); }
+int SDL_islower(int x) { return islower(x); }
int SDL_toupper(int x) { return toupper(x); }
int SDL_tolower(int x) { return tolower(x); }
#else
int SDL_isdigit(int x) { return ((x) >= '0') && ((x) <= '9'); }
int SDL_isspace(int x) { return ((x) == ' ') || ((x) == '\t') || ((x) == '\r') || ((x) == '\n') || ((x) == '\f') || ((x) == '\v'); }
+int SDL_isupper(int x) { return ((x) >= 'A') && ((x) <= 'Z'); }
+int SDL_islower(int x) { return ((x) >= 'a') && ((x) <= 'z'); }
int SDL_toupper(int x) { return ((x) >= 'a') && ((x) <= 'z') ? ('A'+((x)-'a')) : (x); }
int SDL_tolower(int x) { return ((x) >= 'A') && ((x) <= 'Z') ? ('a'+((x)-'A')) : (x); }
#endif
--- a/external/SDL2/src/stdlib/SDL_string.c
+++ b/external/SDL2/src/stdlib/SDL_string.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -421,17 +421,6 @@
#endif /* HAVE_STRLEN */
}
-wchar_t *
-SDL_wcsdup(const wchar_t *string)
-{
- size_t len = ((SDL_wcslen(string) + 1) * sizeof(wchar_t));
- wchar_t *newstr = (wchar_t *)SDL_malloc(len);
- if (newstr) {
- SDL_memcpy(newstr, string, len);
- }
- return newstr;
-}
-
size_t
SDL_wcslen(const wchar_t * string)
{
@@ -477,6 +466,34 @@
#endif /* HAVE_WCSLCAT */
}
+wchar_t *
+SDL_wcsdup(const wchar_t *string)
+{
+ size_t len = ((SDL_wcslen(string) + 1) * sizeof(wchar_t));
+ wchar_t *newstr = (wchar_t *)SDL_malloc(len);
+ if (newstr) {
+ SDL_memcpy(newstr, string, len);
+ }
+ return newstr;
+}
+
+wchar_t *
+SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle)
+{
+#if defined(HAVE_WCSSTR)
+ return SDL_const_cast(wchar_t*,wcsstr(haystack, needle));
+#else
+ size_t length = SDL_wcslen(needle);
+ while (*haystack) {
+ if (SDL_wcsncmp(haystack, needle, length) == 0) {
+ return (wchar_t *)haystack;
+ }
+ ++haystack;
+ }
+ return NULL;
+#endif /* HAVE_WCSSTR */
+}
+
int
SDL_wcscmp(const wchar_t *str1, const wchar_t *str2)
{
@@ -493,6 +510,22 @@
#endif /* HAVE_WCSCMP */
}
+int
+SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen)
+{
+#if defined(HAVE_WCSNCMP)
+ return wcsncmp(str1, str2, maxlen);
+#else
+ while (*str1 && *str2) {
+ if (*str1 != *str2)
+ break;
+ ++str1;
+ ++str2;
+ }
+ return (int)(*str1 - *str2);
+#endif /* HAVE_WCSNCMP */
+}
+
size_t
SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen)
{
@@ -549,7 +582,7 @@
const char *p = str;
char ch;
- while ((ch = *(p++))) {
+ while ((ch = *(p++)) != 0) {
/* if top two bits are 1 and 0, it's a continuation byte. */
if ((ch & 0xc0) != 0x80) {
retval++;
@@ -818,7 +851,7 @@
double SDL_atof(const char *string)
{
#ifdef HAVE_ATOF
- return (double) atof(string);
+ return atof(string);
#else
return SDL_strtod(string, NULL);
#endif /* HAVE_ATOF */
@@ -1387,15 +1420,18 @@
sz = SDL_strlen(string);
if (info && info->width > 0 && (size_t)info->width > sz) {
- char fill = info->pad_zeroes ? '0' : ' ';
+ const char fill = info->pad_zeroes ? '0' : ' ';
size_t width = info->width - sz;
+ size_t filllen;
+
if (info->precision >= 0 && (size_t)info->precision < sz)
width += sz - (size_t)info->precision;
- while (width-- > 0 && maxlen > 0) {
- *text++ = fill;
- ++length;
- --maxlen;
- }
+
+ filllen = SDL_min(width, maxlen);
+ SDL_memset(text, fill, filllen);
+ text += filllen;
+ length += filllen;
+ maxlen -= filllen;
}
slen = SDL_strlcpy(text, string, maxlen);
@@ -1580,7 +1616,7 @@
width = info->width - (int)(text - textstart);
if (width > 0) {
- char fill = info->pad_zeroes ? '0' : ' ';
+ const char fill = info->pad_zeroes ? '0' : ' ';
char *end = text+left-1;
len = (text - textstart);
for (len = (text - textstart); len--; ) {
@@ -1596,10 +1632,10 @@
text += len;
left -= len;
}
- while (len--) {
- if (textstart+len < end) {
- textstart[len] = fill;
- }
+
+ if (end != textstart) {
+ const size_t filllen = SDL_min(len, ((size_t) (end - textstart)) - 1);
+ SDL_memset(textstart, fill, filllen);
}
}
--- /dev/null
+++ b/external/SDL2/src/stdlib/SDL_strtokr.c
@@ -1,0 +1,103 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+#if defined(__clang_analyzer__)
+#define SDL_DISABLE_ANALYZE_MACROS 1
+#endif
+
+#include "../SDL_internal.h"
+
+#include "SDL_stdinc.h"
+
+char *SDL_strtokr(char *s1, const char *s2, char **ptr)
+{
+#if defined(HAVE_STRTOK_R)
+ return strtok_r(s1, s2, ptr);
+
+#elif defined(_MSC_VER) && defined(HAVE_STRTOK_S)
+ return strtok_s(s1, s2, ptr);
+
+#else /* SDL implementation */
+/*
+ * Adapted from _PDCLIB_strtok() of PDClib library at
+ * https://github.com/DevSolar/pdclib.git
+ *
+ * The code was under CC0 license:
+ * https://creativecommons.org/publicdomain/zero/1.0/legalcode :
+ *
+ * No Copyright
+ *
+ * The person who associated a work with this deed has dedicated the
+ * work to the public domain by waiving all of his or her rights to
+ * the work worldwide under copyright law, including all related and
+ * neighboring rights, to the extent allowed by law.
+ *
+ * You can copy, modify, distribute and perform the work, even for
+ * commercial purposes, all without asking permission. See Other
+ * Information below.
+ */
+ const char *p = s2;
+
+ if (!s2 || !ptr || (!s1 && !*ptr)) return NULL;
+
+ if (s1 != NULL) { /* new string */
+ *ptr = s1;
+ } else { /* old string continued */
+ if (*ptr == NULL) {
+ /* No old string, no new string, nothing to do */
+ return NULL;
+ }
+ s1 = *ptr;
+ }
+
+ /* skip leading s2 characters */
+ while (*p && *s1) {
+ if (*s1 == *p) {
+ /* found separator; skip and start over */
+ ++s1;
+ p = s2;
+ continue;
+ }
+ ++p;
+ }
+
+ if (! *s1) { /* no more to parse */
+ *ptr = s1;
+ return NULL;
+ }
+
+ /* skipping non-s2 characters */
+ *ptr = s1;
+ while (**ptr) {
+ p = s2;
+ while (*p) {
+ if (**ptr == *p++) {
+ /* found separator; overwrite with '\0', position *ptr, return */
+ *((*ptr)++) = '\0';
+ return s1;
+ }
+ }
+ ++(*ptr);
+ }
+
+ /* parsed to end of string */
+ return s1;
+#endif
+}
--- a/external/SDL2/src/test/SDL_test_assert.c
+++ b/external/SDL2/src/test/SDL_test_assert.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_common.c
+++ b/external/SDL2/src/test/SDL_test_common.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -19,7 +19,7 @@
3. This notice may not be removed or altered from any source distribution.
*/
-/* Ported from original test\common.c file. */
+/* Ported from original test/common.c file. */
#include "SDL_config.h"
#include "SDL_test.h"
@@ -35,7 +35,7 @@
"[--min-geometry WxH]", "[--max-geometry WxH]", "[--logical WxH]",
"[--scale N]", "[--depth N]", "[--refresh R]", "[--vsync]", "[--noframe]",
"[--resize]", "[--minimize]", "[--maximize]", "[--grab]",
- "[--allow-highdpi]"
+ "[--allow-highdpi]", "[--usable-bounds]"
};
static const char *audio_usage[] = {
@@ -282,6 +282,15 @@
state->window_y = SDL_atoi(y);
return 2;
}
+ if (SDL_strcasecmp(argv[index], "--usable-bounds") == 0) {
+ /* !!! FIXME: this is a bit of a hack, but I don't want to add a
+ !!! FIXME: flag to the public structure in 2.0.x */
+ state->window_x = -1;
+ state->window_y = -1;
+ state->window_w = -1;
+ state->window_h = -1;
+ return 1;
+ }
if (SDL_strcasecmp(argv[index], "--geometry") == 0) {
char *w, *h;
++index;
@@ -512,6 +521,65 @@
}
}
+static const char *
+BuildCommonUsageString(char **pstr, const char **strlist, const int numitems, const char **strlist2, const int numitems2)
+{
+ char *str = *pstr;
+ if (!str) {
+ size_t len = SDL_strlen("[--trackmem]") + 2;
+ int i;
+ for (i = 0; i < numitems; i++) {
+ len += SDL_strlen(strlist[i]) + 1;
+ }
+ if (strlist2) {
+ for (i = 0; i < numitems2; i++) {
+ len += SDL_strlen(strlist2[i]) + 1;
+ }
+ }
+ str = (char *) SDL_calloc(1, len);
+ if (!str) {
+ return ""; /* oh well. */
+ }
+ SDL_strlcat(str, "[--trackmem] ", len);
+ for (i = 0; i < numitems-1; i++) {
+ SDL_strlcat(str, strlist[i], len);
+ SDL_strlcat(str, " ", len);
+ }
+ SDL_strlcat(str, strlist[i], len);
+ if (strlist2) {
+ SDL_strlcat(str, " ", len);
+ for (i = 0; i < numitems2-1; i++) {
+ SDL_strlcat(str, strlist2[i], len);
+ SDL_strlcat(str, " ", len);
+ }
+ SDL_strlcat(str, strlist2[i], len);
+ }
+ *pstr = str;
+ }
+ return str;
+}
+
+static char *common_usage_video = NULL;
+static char *common_usage_audio = NULL;
+static char *common_usage_videoaudio = NULL;
+
+const char *
+SDLTest_CommonUsage(SDLTest_CommonState * state)
+{
+
+ switch (state->flags & (SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
+ case SDL_INIT_VIDEO:
+ return BuildCommonUsageString(&common_usage_video, video_usage, SDL_arraysize(video_usage), NULL, 0);
+ case SDL_INIT_AUDIO:
+ return BuildCommonUsageString(&common_usage_audio, audio_usage, SDL_arraysize(audio_usage), NULL, 0);
+ case (SDL_INIT_VIDEO | SDL_INIT_AUDIO):
+ return BuildCommonUsageString(&common_usage_videoaudio, video_usage, SDL_arraysize(video_usage), audio_usage, SDL_arraysize(audio_usage));
+ default:
+ return "[--trackmem]";
+ }
+}
+
+
SDL_bool
SDLTest_CommonDefaultArgs(SDLTest_CommonState *state, const int argc, char **argv)
{
@@ -577,6 +645,9 @@
case SDL_PIXELFORMAT_RGB444:
SDL_snprintfcat(text, maxlen, "RGB444");
break;
+ case SDL_PIXELFORMAT_BGR444:
+ SDL_snprintfcat(text, maxlen, "BGR444");
+ break;
case SDL_PIXELFORMAT_RGB555:
SDL_snprintfcat(text, maxlen, "RGB555");
break;
@@ -956,7 +1027,16 @@
}
for (i = 0; i < state->num_windows; ++i) {
char title[1024];
+ SDL_Rect r = {
+ state->window_x, state->window_y,
+ state->window_w, state->window_h
+ };
+ /* !!! FIXME: hack to make --usable-bounds work for now. */
+ if ((r.x == -1) && (r.y == -1) && (r.w == -1) && (r.h == -1)) {
+ SDL_GetDisplayUsableBounds(state->display, &r);
+ }
+
if (state->num_windows > 1) {
SDL_snprintf(title, SDL_arraysize(title), "%s %d",
state->window_title, i + 1);
@@ -964,9 +1044,7 @@
SDL_strlcpy(title, state->window_title, SDL_arraysize(title));
}
state->windows[i] =
- SDL_CreateWindow(title, state->window_x, state->window_y,
- state->window_w, state->window_h,
- state->window_flags);
+ SDL_CreateWindow(title, r.x, r.y, r.w, r.h, state->window_flags);
if (!state->windows[i]) {
SDL_Log("Couldn't create window: %s\n",
SDL_GetError());
@@ -1072,7 +1150,7 @@
SDL_GetError());
return SDL_FALSE;
}
- if (state->verbose & VERBOSE_VIDEO) {
+ if (state->verbose & VERBOSE_AUDIO) {
SDL_Log("Audio driver: %s\n",
SDL_GetCurrentAudioDriver());
}
@@ -1832,6 +1910,13 @@
SDLTest_CommonQuit(SDLTest_CommonState * state)
{
int i;
+
+ SDL_free(common_usage_video);
+ SDL_free(common_usage_audio);
+ SDL_free(common_usage_videoaudio);
+ common_usage_video = NULL;
+ common_usage_audio = NULL;
+ common_usage_videoaudio = NULL;
SDL_free(state->windows);
if (state->targets) {
--- a/external/SDL2/src/test/SDL_test_compare.c
+++ b/external/SDL2/src/test/SDL_test_compare.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_crc32.c
+++ b/external/SDL2/src/test/SDL_test_crc32.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_font.c
+++ b/external/SDL2/src/test/SDL_test_font.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_fuzzer.c
+++ b/external/SDL2/src/test/SDL_test_fuzzer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -307,7 +307,7 @@
/* max value for Uint64 */
const Uint64 maxValue = UINT64_MAX;
return SDLTest_GenerateUnsignedBoundaryValues(maxValue,
- (Uint64) boundary1, (Uint64) boundary2,
+ boundary1, boundary2,
validDomain);
}
@@ -457,7 +457,7 @@
float
SDLTest_RandomFloat()
{
- return (float) (SDLTest_RandomUnitDouble() * (double)2.0 * (double)FLT_MAX - (double)(FLT_MAX));
+ return (float) (SDLTest_RandomUnitDouble() * 2.0 * (double)FLT_MAX - (double)(FLT_MAX));
}
double
--- a/external/SDL2/src/test/SDL_test_harness.c
+++ b/external/SDL2/src/test/SDL_test_harness.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -169,7 +169,7 @@
* \return Timer id or -1 on failure.
*/
static SDL_TimerID
-SDLTest_SetTestTimeout(int timeout, void (*callback)())
+SDLTest_SetTestTimeout(int timeout, void (*callback)(void))
{
Uint32 timeoutInMilliseconds;
SDL_TimerID timerID;
@@ -210,7 +210,7 @@
#pragma aux SDLTest_BailOut aborts;
#endif
static SDL_NORETURN void
-SDLTest_BailOut()
+SDLTest_BailOut(void)
{
SDLTest_LogError("TestCaseTimeout timer expired. Aborting test run.");
exit(TEST_ABORTED); /* bail out from the test */
@@ -434,7 +434,7 @@
/* Count the total number of tests */
suiteCounter = 0;
while (testSuites[suiteCounter]) {
- testSuite=(SDLTest_TestSuiteReference *)testSuites[suiteCounter];
+ testSuite = testSuites[suiteCounter];
suiteCounter++;
testCounter = 0;
while (testSuite->testCases[testCounter])
@@ -457,7 +457,7 @@
/* Loop over all suites to check if we have a filter match */
suiteCounter = 0;
while (testSuites[suiteCounter] && suiteFilter == 0) {
- testSuite=(SDLTest_TestSuiteReference *)testSuites[suiteCounter];
+ testSuite = testSuites[suiteCounter];
suiteCounter++;
if (testSuite->name != NULL && SDL_strcmp(filter, testSuite->name) == 0) {
/* Matched a suite name */
@@ -496,8 +496,8 @@
/* Loop over all suites */
suiteCounter = 0;
while(testSuites[suiteCounter]) {
- testSuite=(SDLTest_TestSuiteReference *)testSuites[suiteCounter];
- currentSuiteName = (char *)((testSuite->name) ? testSuite->name : SDLTEST_INVALID_NAME_FORMAT);
+ testSuite = testSuites[suiteCounter];
+ currentSuiteName = (testSuite->name ? testSuite->name : SDLTEST_INVALID_NAME_FORMAT);
suiteCounter++;
/* Filter suite if flag set and we have a name */
@@ -527,7 +527,7 @@
while(testSuite->testCases[testCounter])
{
testCase = testSuite->testCases[testCounter];
- currentTestName = (char *)((testCase->name) ? testCase->name : SDLTEST_INVALID_NAME_FORMAT);
+ currentTestName = (testCase->name ? testCase->name : SDLTEST_INVALID_NAME_FORMAT);
testCounter++;
/* Filter tests if flag set and we have a name */
--- a/external/SDL2/src/test/SDL_test_imageBlit.c
+++ b/external/SDL2/src/test/SDL_test_imageBlit.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_imageBlitBlend.c
+++ b/external/SDL2/src/test/SDL_test_imageBlitBlend.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_imageFace.c
+++ b/external/SDL2/src/test/SDL_test_imageFace.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_imagePrimitives.c
+++ b/external/SDL2/src/test/SDL_test_imagePrimitives.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_imagePrimitivesBlend.c
+++ b/external/SDL2/src/test/SDL_test_imagePrimitivesBlend.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_log.c
+++ b/external/SDL2/src/test/SDL_test_log.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/test/SDL_test_md5.c
+++ b/external/SDL2/src/test/SDL_test_md5.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -56,7 +56,7 @@
#include "SDL_test.h"
/* Forward declaration of static helper function */
-static void SDLTest_Md5Transform(MD5UINT4 * buf, MD5UINT4 * in);
+static void SDLTest_Md5Transform(MD5UINT4 * buf, const MD5UINT4 * in);
static unsigned char MD5PADDING[64] = {
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -229,7 +229,7 @@
/* Basic MD5 step. Transforms buf based on in.
*/
-static void SDLTest_Md5Transform(MD5UINT4 * buf, MD5UINT4 * in)
+static void SDLTest_Md5Transform(MD5UINT4 * buf, const MD5UINT4 * in)
{
MD5UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
--- a/external/SDL2/src/test/SDL_test_memory.c
+++ b/external/SDL2/src/test/SDL_test_memory.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -90,7 +90,7 @@
entry->size = size;
/* Generate the stack trace for the allocation */
- SDL_zero(entry->stack);
+ SDL_zeroa(entry->stack);
#ifdef HAVE_LIBUNWIND_H
{
int stack_index;
--- a/external/SDL2/src/test/SDL_test_random.c
+++ b/external/SDL2/src/test/SDL_test_random.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/SDL_systhread.h
+++ b/external/SDL2/src/thread/SDL_systhread.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/SDL_thread.c
+++ b/external/SDL2/src/thread/SDL_thread.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -205,6 +205,11 @@
SDL_error *
SDL_GetErrBuf(void)
{
+#if SDL_THREADS_DISABLED
+ /* Non-thread-safe global error variable */
+ static SDL_error SDL_global_error;
+ return &SDL_global_error;
+#else
static SDL_SpinLock tls_lock;
static SDL_bool tls_being_created;
static SDL_TLSID tls_errbuf;
@@ -249,6 +254,7 @@
SDL_TLSSet(tls_errbuf, errbuf, SDL_free);
}
return errbuf;
+#endif /* SDL_THREADS_DISABLED */
}
--- a/external/SDL2/src/thread/SDL_thread_c.h
+++ b/external/SDL2/src/thread/SDL_thread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_syscond.c
+++ b/external/SDL2/src/thread/generic/SDL_syscond.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_sysmutex.c
+++ b/external/SDL2/src/thread/generic/SDL_sysmutex.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_sysmutex_c.h
+++ b/external/SDL2/src/thread/generic/SDL_sysmutex_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_syssem.c
+++ b/external/SDL2/src/thread/generic/SDL_syssem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_systhread.c
+++ b/external/SDL2/src/thread/generic/SDL_systhread.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_systhread_c.h
+++ b/external/SDL2/src/thread/generic/SDL_systhread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/generic/SDL_systls.c
+++ b/external/SDL2/src/thread/generic/SDL_systls.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_syscond.c
+++ b/external/SDL2/src/thread/psp/SDL_syscond.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_sysmutex.c
+++ b/external/SDL2/src/thread/psp/SDL_sysmutex.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_sysmutex_c.h
+++ b/external/SDL2/src/thread/psp/SDL_sysmutex_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_syssem.c
+++ b/external/SDL2/src/thread/psp/SDL_syssem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_systhread.c
+++ b/external/SDL2/src/thread/psp/SDL_systhread.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/psp/SDL_systhread_c.h
+++ b/external/SDL2/src/thread/psp/SDL_systhread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_syscond.c
+++ b/external/SDL2/src/thread/pthread/SDL_syscond.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_sysmutex.c
+++ b/external/SDL2/src/thread/pthread/SDL_sysmutex.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_sysmutex_c.h
+++ b/external/SDL2/src/thread/pthread/SDL_sysmutex_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_syssem.c
+++ b/external/SDL2/src/thread/pthread/SDL_syssem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_systhread.c
+++ b/external/SDL2/src/thread/pthread/SDL_systhread.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -113,7 +113,7 @@
/* Set caller-requested stack size. Otherwise: use the system default. */
if (thread->stacksize) {
- pthread_attr_setstacksize(&type, (size_t) thread->stacksize);
+ pthread_attr_setstacksize(&type, thread->stacksize);
}
/* Create the thread and go! */
@@ -188,7 +188,7 @@
int
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
{
-#if __NACL__
+#if __NACL__ || __RISCOS__
/* FIXME: Setting thread priority does not seem to be supported in NACL */
return 0;
#elif __LINUX__
--- a/external/SDL2/src/thread/pthread/SDL_systhread_c.h
+++ b/external/SDL2/src/thread/pthread/SDL_systhread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/pthread/SDL_systls.c
+++ b/external/SDL2/src/thread/pthread/SDL_systls.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/stdcpp/SDL_syscond.cpp
+++ b/external/SDL2/src/thread/stdcpp/SDL_syscond.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/stdcpp/SDL_sysmutex.cpp
+++ b/external/SDL2/src/thread/stdcpp/SDL_sysmutex.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/stdcpp/SDL_sysmutex_c.h
+++ b/external/SDL2/src/thread/stdcpp/SDL_sysmutex_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/stdcpp/SDL_systhread.cpp
+++ b/external/SDL2/src/thread/stdcpp/SDL_systhread.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -96,19 +96,30 @@
int
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
{
- // Thread priorities do not look to be settable via C++11's thread
- // interface, at least as of this writing (Nov 2012). std::thread does
- // provide access to the OS' native handle, however, and some form of
- // priority-setting could, in theory, be done through this interface.
- //
- // WinRT: UPDATE (Aug 20, 2013): thread priorities cannot be changed
- // on WinRT, at least not for any thread that's already been created.
- // WinRT threads appear to be based off of the WinRT class,
- // ThreadPool, more info on which can be found at:
- // http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.threading.threadpool.aspx
- //
- // For compatibility sake, 0 will be returned here.
- return (0);
+#ifdef __WINRT__
+ int value;
+
+ if (priority == SDL_THREAD_PRIORITY_LOW) {
+ value = THREAD_PRIORITY_LOWEST;
+ }
+ else if (priority == SDL_THREAD_PRIORITY_HIGH) {
+ value = THREAD_PRIORITY_HIGHEST;
+ }
+ else if (priority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
+ // FIXME: WinRT does not support TIME_CRITICAL! -flibit
+ SDL_LogWarn(SDL_LOG_CATEGORY_SYSTEM, "TIME_CRITICAL unsupported, falling back to HIGHEST");
+ value = THREAD_PRIORITY_HIGHEST;
+ }
+ else {
+ value = THREAD_PRIORITY_NORMAL;
+ }
+ if (!SetThreadPriority(GetCurrentThread(), value)) {
+ return WIN_SetError("SetThreadPriority()");
+ }
+ return 0;
+#else
+ return SDL_Unsupported();
+#endif
}
extern "C"
--- a/external/SDL2/src/thread/stdcpp/SDL_systhread_c.h
+++ b/external/SDL2/src/thread/stdcpp/SDL_systhread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/windows/SDL_sysmutex.c
+++ b/external/SDL2/src/thread/windows/SDL_sysmutex.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/windows/SDL_syssem.c
+++ b/external/SDL2/src/thread/windows/SDL_syssem.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/windows/SDL_systhread.c
+++ b/external/SDL2/src/thread/windows/SDL_systhread.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/windows/SDL_systhread_c.h
+++ b/external/SDL2/src/thread/windows/SDL_systhread_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/thread/windows/SDL_systls.c
+++ b/external/SDL2/src/thread/windows/SDL_systls.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/SDL_timer.c
+++ b/external/SDL2/src/timer/SDL_timer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/SDL_timer_c.h
+++ b/external/SDL2/src/timer/SDL_timer_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/dummy/SDL_systimer.c
+++ b/external/SDL2/src/timer/dummy/SDL_systimer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/haiku/SDL_systimer.c
+++ b/external/SDL2/src/timer/haiku/SDL_systimer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/psp/SDL_systimer.c
+++ b/external/SDL2/src/timer/psp/SDL_systimer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/unix/SDL_systimer.c
+++ b/external/SDL2/src/timer/unix/SDL_systimer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/timer/windows/SDL_systimer.c
+++ b/external/SDL2/src/timer/windows/SDL_systimer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_RLEaccel.c
+++ b/external/SDL2/src/video/SDL_RLEaccel.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,6 +20,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_RLE
+
/*
* RLE encoding for software colorkey and alpha-channel acceleration
*
@@ -295,10 +297,10 @@
} while(0)
#define ALPHA_BLIT16_565_50(to, from, length, bpp, alpha) \
- ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xf7de)
+ ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xf7deU)
#define ALPHA_BLIT16_555_50(to, from, length, bpp, alpha) \
- ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xfbde)
+ ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xfbdeU)
#define CHOOSE_BLIT(blitter, alpha, fmt) \
do { \
@@ -445,7 +447,7 @@
/* blit a colorkeyed RLE surface */
-int SDLCALL
+static int SDLCALL
SDL_RLEBlit(SDL_Surface * surf_src, SDL_Rect * srcrect,
SDL_Surface * surf_dst, SDL_Rect * dstrect)
{
@@ -723,7 +725,7 @@
}
/* blit a pixel-alpha RLE surface */
-int SDLCALL
+static int SDLCALL
SDL_RLEAlphaBlit(SDL_Surface * surf_src, SDL_Rect * srcrect,
SDL_Surface * surf_dst, SDL_Rect * dstrect)
{
@@ -1237,19 +1239,19 @@
}
static Uint32
-getpix_8(Uint8 * srcbuf)
+getpix_8(const Uint8 * srcbuf)
{
return *srcbuf;
}
static Uint32
-getpix_16(Uint8 * srcbuf)
+getpix_16(const Uint8 * srcbuf)
{
- return *(Uint16 *) srcbuf;
+ return *(const Uint16 *) srcbuf;
}
static Uint32
-getpix_24(Uint8 * srcbuf)
+getpix_24(const Uint8 * srcbuf)
{
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
return srcbuf[0] + (srcbuf[1] << 8) + (srcbuf[2] << 16);
@@ -1259,12 +1261,12 @@
}
static Uint32
-getpix_32(Uint8 * srcbuf)
+getpix_32(const Uint8 * srcbuf)
{
- return *(Uint32 *) srcbuf;
+ return *(const Uint32 *) srcbuf;
}
-typedef Uint32(*getpix_func) (Uint8 *);
+typedef Uint32(*getpix_func) (const Uint8 *);
static const getpix_func getpixes[4] = {
getpix_8, getpix_16, getpix_24, getpix_32
@@ -1430,7 +1432,7 @@
/* Pass on combinations not supported */
if ((flags & SDL_COPY_MODULATE_COLOR) ||
((flags & SDL_COPY_MODULATE_ALPHA) && surface->format->Amask) ||
- (flags & (SDL_COPY_ADD | SDL_COPY_MOD)) ||
+ (flags & (SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) ||
(flags & SDL_COPY_NEAREST)) {
return -1;
}
@@ -1583,5 +1585,7 @@
surface->map->data = NULL;
}
}
+
+#endif /* SDL_HAVE_RLE */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_RLEaccel_c.h
+++ b/external/SDL2/src/video/SDL_RLEaccel_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,10 +27,6 @@
/* Useful functions and variables from SDL_RLEaccel.c */
extern int SDL_RLESurface(SDL_Surface * surface);
-extern int SDLCALL SDL_RLEBlit (SDL_Surface * src, SDL_Rect * srcrect,
- SDL_Surface * dst, SDL_Rect * dstrect);
-extern int SDLCALL SDL_RLEAlphaBlit(SDL_Surface * src, SDL_Rect * srcrect,
- SDL_Surface * dst, SDL_Rect * dstrect);
extern void SDL_UnRLESurface(SDL_Surface * surface, int recode);
#endif /* SDL_RLEaccel_c_h_ */
--- a/external/SDL2/src/video/SDL_blit.c
+++ b/external/SDL2/src/video/SDL_blit.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -99,6 +99,8 @@
return (okay ? 0 : -1);
}
+#if SDL_HAVE_BLIT_AUTO
+
#ifdef __MACOSX__
#include <sys/sysctl.h>
@@ -128,11 +130,11 @@
SDL_ChooseBlitFunc(Uint32 src_format, Uint32 dst_format, int flags,
SDL_BlitFuncEntry * entries)
{
- int i, flagcheck;
- static Uint32 features = 0xffffffff;
+ int i, flagcheck = (flags & (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_COLORKEY | SDL_COPY_NEAREST));
+ static int features = 0x7fffffff;
/* Get the available CPU features */
- if (features == 0xffffffff) {
+ if (features == 0x7fffffff) {
const char *override = SDL_getenv("SDL_BLIT_CPU_FEATURES");
features = SDL_CPU_ANY;
@@ -172,36 +174,13 @@
continue;
}
- /* Check modulation flags */
- flagcheck =
- (flags & (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA));
+ /* Check flags */
if ((flagcheck & entries[i].flags) != flagcheck) {
continue;
}
- /* Check blend flags */
- flagcheck =
- (flags &
- (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD));
- if ((flagcheck & entries[i].flags) != flagcheck) {
- continue;
- }
-
- /* Check colorkey flag */
- flagcheck = (flags & SDL_COPY_COLORKEY);
- if ((flagcheck & entries[i].flags) != flagcheck) {
- continue;
- }
-
- /* Check scaling flags */
- flagcheck = (flags & SDL_COPY_NEAREST);
- if ((flagcheck & entries[i].flags) != flagcheck) {
- continue;
- }
-
/* Check CPU features */
- flagcheck = entries[i].cpu;
- if ((flagcheck & features) != flagcheck) {
+ if ((entries[i].cpu & features) != entries[i].cpu) {
continue;
}
@@ -210,6 +189,7 @@
}
return NULL;
}
+#endif /* SDL_HAVE_BLIT_AUTO */
/* Figure out which of many blit routines to set up on a surface */
int
@@ -225,10 +205,13 @@
return SDL_SetError("Blit combination not supported");
}
+#if SDL_HAVE_RLE
/* Clean everything out to start */
if ((surface->flags & SDL_RLEACCEL) == SDL_RLEACCEL) {
SDL_UnRLESurface(surface, 1);
}
+#endif
+
map->blit = SDL_SoftBlit;
map->info.src_fmt = surface->format;
map->info.src_pitch = surface->pitch;
@@ -235,6 +218,7 @@
map->info.dst_fmt = dst->format;
map->info.dst_pitch = dst->pitch;
+#if SDL_HAVE_RLE
/* See if we can do RLE acceleration */
if (map->info.flags & SDL_COPY_RLE_DESIRED) {
if (SDL_RLESurface(surface) == 0) {
@@ -241,6 +225,7 @@
return 0;
}
}
+#endif
/* Choose a standard blit function */
if (map->identity && !(map->info.flags & ~SDL_COPY_RLE_DESIRED)) {
@@ -249,17 +234,30 @@
/* Greater than 8 bits per channel not supported yet */
SDL_InvalidateMap(map);
return SDL_SetError("Blit combination not supported");
- } else if (surface->format->BitsPerPixel < 8 &&
+ }
+#if SDL_HAVE_BLIT_0
+ else if (surface->format->BitsPerPixel < 8 &&
SDL_ISPIXELFORMAT_INDEXED(surface->format->format)) {
blit = SDL_CalculateBlit0(surface);
- } else if (surface->format->BytesPerPixel == 1 &&
+ }
+#endif
+#if SDL_HAVE_BLIT_1
+ else if (surface->format->BytesPerPixel == 1 &&
SDL_ISPIXELFORMAT_INDEXED(surface->format->format)) {
blit = SDL_CalculateBlit1(surface);
- } else if (map->info.flags & SDL_COPY_BLEND) {
+ }
+#endif
+#if SDL_HAVE_BLIT_A
+ else if (map->info.flags & SDL_COPY_BLEND) {
blit = SDL_CalculateBlitA(surface);
- } else {
+ }
+#endif
+#if SDL_HAVE_BLIT_N
+ else {
blit = SDL_CalculateBlitN(surface);
}
+#endif
+#if SDL_HAVE_BLIT_AUTO
if (blit == NULL) {
Uint32 src_format = surface->format->format;
Uint32 dst_format = dst->format->format;
@@ -268,6 +266,8 @@
SDL_ChooseBlitFunc(src_format, dst_format, map->info.flags,
SDL_GeneratedBlitFuncTable);
}
+#endif
+
#ifndef TEST_SLOW_BLIT
if (blit == NULL)
#endif
--- a/external/SDL2/src/video/SDL_blit.h
+++ b/external/SDL2/src/video/SDL_blit.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,6 +36,7 @@
#define SDL_COPY_BLEND 0x00000010
#define SDL_COPY_ADD 0x00000020
#define SDL_COPY_MOD 0x00000040
+#define SDL_COPY_MUL 0x00000080
#define SDL_COPY_COLORKEY 0x00000100
#define SDL_COPY_NEAREST 0x00000200
#define SDL_COPY_RLE_DESIRED 0x00001000
--- a/external/SDL2/src/video/SDL_blit_0.c
+++ b/external/SDL2/src/video/SDL_blit_0.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,6 +20,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_0
+
#include "SDL_video.h"
#include "SDL_blit.h"
@@ -479,5 +481,7 @@
}
return (SDL_BlitFunc) NULL;
}
+
+#endif /* SDL_HAVE_BLIT_0 */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_1.c
+++ b/external/SDL2/src/video/SDL_blit_1.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,6 +20,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_1
+
#include "SDL_video.h"
#include "SDL_blit.h"
#include "SDL_sysvideo.h"
@@ -548,5 +550,7 @@
}
return (SDL_BlitFunc) NULL;
}
+
+#endif /* SDL_HAVE_BLIT_1 */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_A.c
+++ b/external/SDL2/src/video/SDL_blit_A.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,6 +20,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_A
+
#include "SDL_video.h"
#include "SDL_blit.h"
@@ -389,6 +391,70 @@
#endif /* __MMX__ */
+#if SDL_ARM_SIMD_BLITTERS
+void BlitARGBto565PixelAlphaARMSIMDAsm(int32_t w, int32_t h, uint16_t *dst, int32_t dst_stride, uint32_t *src, int32_t src_stride);
+
+static void
+BlitARGBto565PixelAlphaARMSIMD(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint16_t *dstp = (uint16_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 1);
+ uint32_t *srcp = (uint32_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 2);
+
+ BlitARGBto565PixelAlphaARMSIMDAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+
+void BlitRGBtoRGBPixelAlphaARMSIMDAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint32_t *src, int32_t src_stride);
+
+static void
+BlitRGBtoRGBPixelAlphaARMSIMD(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint32_t *dstp = (uint32_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 2);
+ uint32_t *srcp = (uint32_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 2);
+
+ BlitRGBtoRGBPixelAlphaARMSIMDAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+#endif
+
+#if SDL_ARM_NEON_BLITTERS
+void BlitARGBto565PixelAlphaARMNEONAsm(int32_t w, int32_t h, uint16_t *dst, int32_t dst_stride, uint32_t *src, int32_t src_stride);
+
+static void
+BlitARGBto565PixelAlphaARMNEON(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint16_t *dstp = (uint16_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 1);
+ uint32_t *srcp = (uint32_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 2);
+
+ BlitARGBto565PixelAlphaARMNEONAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+
+void BlitRGBtoRGBPixelAlphaARMNEONAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint32_t *src, int32_t src_stride);
+
+static void
+BlitRGBtoRGBPixelAlphaARMNEON(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint32_t *dstp = (uint32_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 2);
+ uint32_t *srcp = (uint32_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 2);
+
+ BlitRGBtoRGBPixelAlphaARMNEONAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+#endif
+
/* fast RGB888->(A)RGB888 blending with surface alpha=128 special case */
static void
BlitRGBtoRGBSurfaceAlpha128(SDL_BlitInfo * info)
@@ -1284,7 +1350,23 @@
}
case 2:
+#if SDL_ARM_NEON_BLITTERS || SDL_ARM_SIMD_BLITTERS
if (sf->BytesPerPixel == 4 && sf->Amask == 0xff000000
+ && sf->Gmask == 0xff00 && df->Gmask == 0x7e0
+ && ((sf->Rmask == 0xff && df->Rmask == 0x1f)
+ || (sf->Bmask == 0xff && df->Bmask == 0x1f)))
+ {
+#if SDL_ARM_NEON_BLITTERS
+ if (SDL_HasNEON())
+ return BlitARGBto565PixelAlphaARMNEON;
+#endif
+#if SDL_ARM_SIMD_BLITTERS
+ if (SDL_HasARMSIMD())
+ return BlitARGBto565PixelAlphaARMSIMD;
+#endif
+ }
+#endif
+ if (sf->BytesPerPixel == 4 && sf->Amask == 0xff000000
&& sf->Gmask == 0xff00
&& ((sf->Rmask == 0xff && df->Rmask == 0x1f)
|| (sf->Bmask == 0xff && df->Bmask == 0x1f))) {
@@ -1315,6 +1397,14 @@
}
#endif /* __MMX__ || __3dNOW__ */
if (sf->Amask == 0xff000000) {
+#if SDL_ARM_NEON_BLITTERS
+ if (SDL_HasNEON())
+ return BlitRGBtoRGBPixelAlphaARMNEON;
+#endif
+#if SDL_ARM_SIMD_BLITTERS
+ if (SDL_HasARMSIMD())
+ return BlitRGBtoRGBPixelAlphaARMSIMD;
+#endif
return BlitRGBtoRGBPixelAlpha;
}
}
@@ -1400,5 +1490,7 @@
return NULL;
}
+
+#endif /* SDL_HAVE_BLIT_A */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_N.c
+++ b/external/SDL2/src/video/SDL_blit_N.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,6 +20,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_N
+
#include "SDL_video.h"
#include "SDL_endian.h"
#include "SDL_cpuinfo.h"
@@ -38,6 +40,14 @@
/* Functions to blit from N-bit surfaces to other surfaces */
+enum blit_features {
+ BLIT_FEATURE_NONE = 0,
+ BLIT_FEATURE_HAS_MMX = 1,
+ BLIT_FEATURE_HAS_ALTIVEC = 2,
+ BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH = 4,
+ BLIT_FEATURE_HAS_ARM_SIMD = 8
+};
+
#if SDL_ALTIVEC_BLITTERS
#ifdef HAVE_ALTIVEC_H
#include <altivec.h>
@@ -165,6 +175,34 @@
return (vswiz);
}
+#if defined(__powerpc__) && (SDL_BYTEORDER == SDL_LIL_ENDIAN)
+/* reorder bytes for PowerPC little endian */
+static vector unsigned char reorder_ppc64le_vec(vector unsigned char vpermute)
+{
+ /* The result vector of calc_swizzle32 reorder bytes using vec_perm.
+ The LE transformation for vec_perm has an implicit assumption
+ that the permutation is being used to reorder vector elements,
+ not to reorder bytes within those elements.
+ Unfortunatly the result order is not the expected one for powerpc
+ little endian when the two first vector parameters of vec_perm are
+ not of type 'vector char'. This is because the numbering from the
+ left for BE, and numbering from the right for LE, produces a
+ different interpretation of what the odd and even lanes are.
+ Refer to fedora bug 1392465
+ */
+
+ const vector unsigned char ppc64le_reorder = VECUINT8_LITERAL(
+ 0x01, 0x00, 0x03, 0x02,
+ 0x05, 0x04, 0x07, 0x06,
+ 0x09, 0x08, 0x0B, 0x0A,
+ 0x0D, 0x0C, 0x0F, 0x0E );
+
+ vector unsigned char vswiz_ppc64le;
+ vswiz_ppc64le = vec_perm(vpermute, vpermute, ppc64le_reorder);
+ return(vswiz_ppc64le);
+}
+#endif
+
static void Blit_RGB888_RGB565(SDL_BlitInfo * info);
static void
Blit_RGB888_RGB565Altivec(SDL_BlitInfo * info)
@@ -658,6 +696,10 @@
/* vsel is set for items that match the key */
vsel = (vector unsigned char) vec_and(vs, vrgbmask);
vsel = (vector unsigned char) vec_cmpeq(vs, vckey);
+#if defined(__powerpc__) && (SDL_BYTEORDER == SDL_LIL_ENDIAN)
+ /* reorder bytes for PowerPC little endian */
+ vpermute = reorder_ppc64le_vec(vpermute);
+#endif
/* permute the src vec to the dest format */
vs = vec_perm(vs, valpha, vpermute);
/* load the destination vec */
@@ -737,6 +779,10 @@
src += 4;
width -= 4;
vbits = vec_perm(vbits, voverflow, valigner); /* src is ready. */
+#if defined(__powerpc__) && (SDL_BYTEORDER == SDL_LIL_ENDIAN)
+ /* reorder bytes for PowerPC little endian */
+ vpermute = reorder_ppc64le_vec(vpermute);
+#endif
vbits = vec_perm(vbits, vzero, vpermute); /* swizzle it. */
vec_st(vbits, 0, dst); /* store it back out. */
dst += 4;
@@ -828,6 +874,10 @@
src += 4;
width -= 4;
vbits = vec_perm(vbits, voverflow, valigner); /* src is ready. */
+#if defined(__powerpc__) && (SDL_BYTEORDER == SDL_LIL_ENDIAN)
+ /* reorder bytes for PowerPC little endian */
+ vpermute = reorder_ppc64le_vec(vpermute);
+#endif
vbits = vec_perm(vbits, vzero, vpermute); /* swizzle it. */
vec_st(vbits, 0, dst); /* store it back out. */
dst += 4;
@@ -854,25 +904,26 @@
vec_dss(DST_CHAN_DEST);
}
-static Uint32
+static enum blit_features
GetBlitFeatures(void)
{
- static Uint32 features = 0xffffffff;
- if (features == 0xffffffff) {
+ static enum blit_features features = -1;
+ if (features == (enum blit_features) -1) {
/* Provide an override for testing .. */
char *override = SDL_getenv("SDL_ALTIVEC_BLIT_FEATURES");
if (override) {
- features = 0;
- SDL_sscanf(override, "%u", &features);
+ unsigned int features_as_uint = 0;
+ SDL_sscanf(override, "%u", &features_as_uint);
+ features = (enum blit_features) features_as_uint;
} else {
features = (0
/* Feature 1 is has-MMX */
- | ((SDL_HasMMX())? 1 : 0)
+ | ((SDL_HasMMX())? BLIT_FEATURE_HAS_MMX : 0)
/* Feature 2 is has-AltiVec */
- | ((SDL_HasAltiVec())? 2 : 0)
+ | ((SDL_HasAltiVec())? BLIT_FEATURE_HAS_ALTIVEC : 0)
/* Feature 4 is dont-use-prefetch */
/* !!!! FIXME: Check for G5 or later, not the cache size! Always prefetch on a G4. */
- | ((GetL3CacheSize() == 0) ? 4 : 0)
+ | ((GetL3CacheSize() == 0) ? BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH : 0)
);
}
}
@@ -884,9 +935,41 @@
#endif
#else
/* Feature 1 is has-MMX */
-#define GetBlitFeatures() ((Uint32)(SDL_HasMMX() ? 1 : 0))
+#define GetBlitFeatures() ((SDL_HasMMX() ? BLIT_FEATURE_HAS_MMX : 0) | (SDL_HasARMSIMD() ? BLIT_FEATURE_HAS_ARM_SIMD : 0))
#endif
+#if SDL_ARM_SIMD_BLITTERS
+void Blit_BGR888_RGB888ARMSIMDAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint32_t *src, int32_t src_stride);
+
+static void
+Blit_BGR888_RGB888ARMSIMD(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint32_t *dstp = (uint32_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 2);
+ uint32_t *srcp = (uint32_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 2);
+
+ Blit_BGR888_RGB888ARMSIMDAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+
+void Blit_RGB444_RGB888ARMSIMDAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint16_t *src, int32_t src_stride);
+
+static void
+Blit_RGB444_RGB888ARMSIMD(SDL_BlitInfo * info)
+{
+ int32_t width = info->dst_w;
+ int32_t height = info->dst_h;
+ uint32_t *dstp = (uint32_t *)info->dst;
+ int32_t dststride = width + (info->dst_skip >> 2);
+ uint16_t *srcp = (uint16_t *)info->src;
+ int32_t srcstride = width + (info->src_skip >> 1);
+
+ Blit_RGB444_RGB888ARMSIMDAsm(width, height, dstp, dststride, srcp, srcstride);
+}
+#endif
+
/* This is now endian dependent */
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
#define HI 1
@@ -1369,6 +1452,8 @@
}
+#if SDL_HAVE_BLIT_N_RGB565
+
/* Special optimized blit for RGB 5-6-5 --> 32-bit RGB surfaces */
#define RGB565_32(dst, src, map) (map[src[LO]*2] + map[src[HI]*2+1])
static void
@@ -1385,7 +1470,7 @@
/* Set up some basic variables */
width = info->dst_w;
height = info->dst_h;
- src = (Uint8 *) info->src;
+ src = info->src;
srcskip = info->src_skip;
dst = (Uint32 *) info->dst;
dstskip = info->dst_skip / 4;
@@ -1987,6 +2072,8 @@
Blit_RGB565_32(info, RGB565_BGRA8888_LUT);
}
+#endif /* SDL_HAVE_BLIT_N_RGB565 */
+
static void
BlitNto1(SDL_BlitInfo * info)
{
@@ -2236,7 +2323,6 @@
if (_alpha_channel) {
*_alpha_channel = alpha_channel;
}
- return;
}
@@ -3028,7 +3114,6 @@
dst += dstskip;
}
}
- return;
}
/* Blit_3or4_to_3or4__inversed_rgb: 3 or 4 bpp, inversed RGB triplet */
@@ -3133,7 +3218,6 @@
dst += dstskip;
}
}
- return;
}
/* Normal N to N optimized blitters */
@@ -3145,7 +3229,7 @@
Uint32 srcR, srcG, srcB;
int dstbpp;
Uint32 dstR, dstG, dstB;
- Uint32 blit_features;
+ enum blit_features blit_features;
SDL_BlitFunc blitfunc;
Uint32 alpha; /* bitwise NO_ALPHA, SET_ALPHA, COPY_ALPHA */
};
@@ -3158,10 +3242,15 @@
#if SDL_ALTIVEC_BLITTERS
/* has-altivec */
{0x0000F800, 0x000007E0, 0x0000001F, 4, 0x00000000, 0x00000000, 0x00000000,
- 2, Blit_RGB565_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
+ BLIT_FEATURE_HAS_ALTIVEC, Blit_RGB565_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
{0x00007C00, 0x000003E0, 0x0000001F, 4, 0x00000000, 0x00000000, 0x00000000,
- 2, Blit_RGB555_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
+ BLIT_FEATURE_HAS_ALTIVEC, Blit_RGB555_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
#endif
+#if SDL_ARM_SIMD_BLITTERS
+ {0x00000F00, 0x000000F0, 0x0000000F, 4, 0x00FF0000, 0x0000FF00, 0x000000FF,
+ BLIT_FEATURE_HAS_ARM_SIMD, Blit_RGB444_RGB888ARMSIMD, NO_ALPHA | COPY_ALPHA},
+#endif
+#if SDL_HAVE_BLIT_N_RGB565
{0x0000F800, 0x000007E0, 0x0000001F, 4, 0x00FF0000, 0x0000FF00, 0x000000FF,
0, Blit_RGB565_ARGB8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
{0x0000F800, 0x000007E0, 0x0000001F, 4, 0x000000FF, 0x0000FF00, 0x00FF0000,
@@ -3170,6 +3259,7 @@
0, Blit_RGB565_RGBA8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
{0x0000F800, 0x000007E0, 0x0000001F, 4, 0x0000FF00, 0x00FF0000, 0xFF000000,
0, Blit_RGB565_BGRA8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
+#endif
/* Default for 16-bit RGB source, used if no other blitter matches */
{0, 0, 0, 0, 0, 0, 0, 0, BlitNtoN, 0}
@@ -3215,14 +3305,18 @@
#if SDL_ALTIVEC_BLITTERS
/* has-altivec | dont-use-prefetch */
{0x00000000, 0x00000000, 0x00000000, 4, 0x00000000, 0x00000000, 0x00000000,
- 6, ConvertAltivec32to32_noprefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
+ BLIT_FEATURE_HAS_ALTIVEC | BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH, ConvertAltivec32to32_noprefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
/* has-altivec */
{0x00000000, 0x00000000, 0x00000000, 4, 0x00000000, 0x00000000, 0x00000000,
- 2, ConvertAltivec32to32_prefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
+ BLIT_FEATURE_HAS_ALTIVEC, ConvertAltivec32to32_prefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA},
/* has-altivec */
{0x00000000, 0x00000000, 0x00000000, 2, 0x0000F800, 0x000007E0, 0x0000001F,
- 2, Blit_RGB888_RGB565Altivec, NO_ALPHA},
+ BLIT_FEATURE_HAS_ALTIVEC, Blit_RGB888_RGB565Altivec, NO_ALPHA},
#endif
+#if SDL_ARM_SIMD_BLITTERS
+ {0x000000FF, 0x0000FF00, 0x00FF0000, 4, 0x00FF0000, 0x0000FF00, 0x000000FF,
+ BLIT_FEATURE_HAS_ARM_SIMD, Blit_BGR888_RGB888ARMSIMD, NO_ALPHA | COPY_ALPHA },
+#endif
/* 4->3 with same rgb triplet */
{0x000000FF, 0x0000FF00, 0x00FF0000, 3, 0x000000FF, 0x0000FF00, 0x00FF0000,
0, Blit_3or4_to_3or4__same_rgb, NO_ALPHA | SET_ALPHA},
@@ -3372,5 +3466,7 @@
return NULL;
}
+
+#endif /* SDL_HAVE_BLIT_N */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_auto.c
+++ b/external/SDL2/src/video/SDL_blit_auto.c
@@ -1,7 +1,7 @@
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,6 +21,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_AUTO
+
/* *INDENT-OFF* */
#include "SDL_video.h"
@@ -69,7 +71,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -79,22 +81,14 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -106,8 +100,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -121,7 +120,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -152,22 +151,14 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -179,8 +170,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -211,7 +207,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -263,7 +259,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -281,7 +277,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -291,7 +288,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -299,9 +296,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -310,7 +304,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -326,8 +320,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -345,7 +344,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -376,7 +376,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -384,9 +384,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -395,7 +392,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -411,8 +408,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -455,7 +457,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -469,7 +471,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -479,22 +481,14 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -506,8 +500,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -521,7 +520,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -552,22 +551,14 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -579,8 +570,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -611,7 +607,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -663,7 +659,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -681,7 +677,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -691,7 +688,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -699,9 +696,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -710,7 +704,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -726,8 +720,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -745,7 +744,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -776,7 +776,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -784,9 +784,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -795,7 +792,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -811,8 +808,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -825,7 +827,8 @@
static void SDL_Blit_RGB888_ARGB8888_Scale(SDL_BlitInfo *info)
{
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = 0xFF;
+ Uint32 R, G, B;
int srcy, srcx;
int posy, posx;
int incy, incx;
@@ -854,8 +857,8 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
pixel = *src;
- R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF;
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -869,7 +872,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
@@ -879,23 +882,15 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
- dstA = srcA + ((255 - srcA) * dstA) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
+ dstA = 0xFF;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -907,8 +902,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ dstA = 0xFF;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -922,7 +923,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
int srcy, srcx;
@@ -953,23 +954,15 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
- dstA = srcA + ((255 - srcA) * dstA) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
+ dstA = 0xFF;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -981,8 +974,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ dstA = 0xFF;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -1000,7 +999,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 R, G, B;
while (info->dst_h--) {
Uint32 *src = (Uint32 *)info->src;
@@ -1008,16 +1008,13 @@
int n = info->dst_w;
while (n--) {
pixel = *src;
- R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF;
+ R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
R = (R * modulateR) / 255;
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- A = (A * modulateA) / 255;
- }
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -1035,7 +1032,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 R, G, B;
int srcy, srcx;
int posy, posx;
int incy, incx;
@@ -1064,16 +1062,13 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
pixel = *src;
- R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF;
+ R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
R = (R * modulateR) / 255;
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- A = (A * modulateA) / 255;
- }
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -1091,7 +1086,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
@@ -1101,7 +1097,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1109,9 +1105,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -1120,7 +1113,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -1137,8 +1130,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -1156,7 +1155,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
int srcy, srcx;
@@ -1187,7 +1187,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF;
+ srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1195,9 +1195,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -1206,7 +1203,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -1223,8 +1220,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -1267,7 +1270,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -1281,7 +1284,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -1291,22 +1294,14 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -1318,8 +1313,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -1333,7 +1333,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -1364,22 +1364,14 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -1391,8 +1383,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -1423,7 +1420,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -1475,7 +1472,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -1493,7 +1490,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -1503,7 +1501,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1511,9 +1509,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -1522,7 +1517,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -1538,8 +1533,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -1557,7 +1557,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -1588,7 +1589,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1596,9 +1597,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -1607,7 +1605,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -1623,8 +1621,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -1676,7 +1679,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -1686,22 +1689,14 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -1713,8 +1708,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -1728,7 +1728,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -1759,22 +1759,14 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -1786,8 +1778,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -1818,7 +1815,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -1870,7 +1867,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -1888,7 +1885,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
@@ -1898,7 +1896,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1906,9 +1904,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -1917,7 +1912,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -1933,8 +1928,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -1952,7 +1952,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB;
int srcy, srcx;
@@ -1983,7 +1984,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -1991,9 +1992,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -2002,7 +2000,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2018,8 +2016,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -2032,7 +2035,8 @@
static void SDL_Blit_BGR888_ARGB8888_Scale(SDL_BlitInfo *info)
{
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = 0xFF;
+ Uint32 R, G, B;
int srcy, srcx;
int posy, posx;
int incy, incx;
@@ -2061,8 +2065,8 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
pixel = *src;
- B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF;
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -2076,7 +2080,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
@@ -2086,23 +2090,15 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
- dstA = srcA + ((255 - srcA) * dstA) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
+ dstA = 0xFF;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -2114,8 +2110,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ dstA = 0xFF;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -2129,7 +2131,7 @@
{
const int flags = info->flags;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
int srcy, srcx;
@@ -2160,23 +2162,15 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
- if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
- /* This goes away if we ever use premultiplied alpha */
- if (srcA < 255) {
- srcR = (srcR * srcA) / 255;
- srcG = (srcG * srcA) / 255;
- srcB = (srcB * srcA) / 255;
- }
- }
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
- dstR = srcR + ((255 - srcA) * dstR) / 255;
- dstG = srcG + ((255 - srcA) * dstG) / 255;
- dstB = srcB + ((255 - srcA) * dstB) / 255;
- dstA = srcA + ((255 - srcA) * dstA) / 255;
+ dstR = srcR;
+ dstG = srcG;
+ dstB = srcB;
+ dstA = 0xFF;
break;
case SDL_COPY_ADD:
dstR = srcR + dstR; if (dstR > 255) dstR = 255;
@@ -2188,8 +2182,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = (srcR * dstR) / 255;
+ dstG = (srcG * dstG) / 255;
+ dstB = (srcB * dstB) / 255;
+ dstA = 0xFF;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -2207,7 +2207,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 R, G, B;
while (info->dst_h--) {
Uint32 *src = (Uint32 *)info->src;
@@ -2215,16 +2216,13 @@
int n = info->dst_w;
while (n--) {
pixel = *src;
- B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF;
+ B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
R = (R * modulateR) / 255;
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- A = (A * modulateA) / 255;
- }
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -2242,7 +2240,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 pixel;
- Uint32 R, G, B, A;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 R, G, B;
int srcy, srcx;
int posy, posx;
int incy, incx;
@@ -2271,16 +2270,13 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
pixel = *src;
- B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF;
+ B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
if (flags & SDL_COPY_MODULATE_COLOR) {
R = (R * modulateR) / 255;
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- A = (A * modulateA) / 255;
- }
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -2298,7 +2294,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
@@ -2308,7 +2305,7 @@
int n = info->dst_w;
while (n--) {
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -2316,9 +2313,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -2327,7 +2321,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2344,8 +2338,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -2363,7 +2363,8 @@
const Uint32 modulateB = info->b;
const Uint32 modulateA = info->a;
Uint32 srcpixel;
- Uint32 srcR, srcG, srcB, srcA;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+ Uint32 srcR, srcG, srcB;
Uint32 dstpixel;
Uint32 dstR, dstG, dstB, dstA;
int srcy, srcx;
@@ -2394,7 +2395,7 @@
src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4));
}
srcpixel = *src;
- srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF;
+ srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel;
dstpixel = *dst;
dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24);
if (flags & SDL_COPY_MODULATE_COLOR) {
@@ -2402,9 +2403,6 @@
srcG = (srcG * modulateG) / 255;
srcB = (srcB * modulateB) / 255;
}
- if (flags & SDL_COPY_MODULATE_ALPHA) {
- srcA = (srcA * modulateA) / 255;
- }
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (srcA < 255) {
@@ -2413,7 +2411,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2430,8 +2428,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -2474,7 +2478,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -2509,7 +2513,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2525,8 +2529,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -2582,7 +2591,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2598,8 +2607,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -2630,7 +2644,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -2682,7 +2696,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -2729,7 +2743,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2745,8 +2759,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -2814,7 +2833,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2830,8 +2849,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -2874,7 +2898,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel;
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -2909,7 +2933,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2925,8 +2949,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -2982,7 +3011,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -2998,8 +3027,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -3030,7 +3064,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -3082,7 +3116,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -3129,7 +3163,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3145,8 +3179,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -3214,7 +3253,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3230,8 +3269,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -3304,7 +3348,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3321,8 +3365,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -3378,7 +3428,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3395,8 +3445,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -3431,7 +3487,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -3487,7 +3543,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -3534,7 +3590,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3551,8 +3607,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -3620,7 +3682,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3637,8 +3699,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -3681,7 +3749,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8);
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -3716,7 +3784,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3732,8 +3800,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -3789,7 +3862,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3805,8 +3878,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -3837,7 +3915,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -3889,7 +3967,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -3936,7 +4014,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -3952,8 +4030,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -4021,7 +4104,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4037,8 +4120,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -4081,7 +4169,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8);
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -4116,7 +4204,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4132,8 +4220,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -4189,7 +4282,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4205,8 +4298,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -4237,7 +4335,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -4289,7 +4387,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -4336,7 +4434,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4352,8 +4450,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -4421,7 +4524,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4437,8 +4540,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -4481,7 +4589,7 @@
}
pixel = *src;
R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel;
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -4516,7 +4624,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4533,8 +4641,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -4590,7 +4704,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4607,8 +4721,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -4643,7 +4763,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -4699,7 +4819,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -4746,7 +4866,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4763,8 +4883,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -4832,7 +4958,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4849,8 +4975,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -4893,7 +5025,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -4928,7 +5060,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -4944,8 +5076,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -5001,7 +5138,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5017,8 +5154,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -5049,7 +5191,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -5101,7 +5243,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -5148,7 +5290,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5164,8 +5306,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -5233,7 +5380,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5249,8 +5396,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -5293,7 +5445,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel;
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -5328,7 +5480,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5344,8 +5496,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -5401,7 +5558,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5417,8 +5574,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -5449,7 +5611,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -5501,7 +5663,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -5548,7 +5710,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5564,8 +5726,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -5633,7 +5800,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5649,8 +5816,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -5693,7 +5865,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = (Uint8)(pixel >> 24);
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -5728,7 +5900,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5745,8 +5917,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -5802,7 +5980,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5819,8 +5997,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -5855,7 +6039,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -5911,7 +6095,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -5958,7 +6142,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -5975,8 +6159,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -6044,7 +6234,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6061,8 +6251,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -6105,7 +6301,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8);
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -6140,7 +6336,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6156,8 +6352,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -6213,7 +6414,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6229,8 +6430,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -6261,7 +6467,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -6313,7 +6519,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -6360,7 +6566,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6376,8 +6582,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -6445,7 +6656,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6461,8 +6672,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -6505,7 +6721,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8);
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -6540,7 +6756,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6556,8 +6772,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -6613,7 +6834,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6629,8 +6850,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -6661,7 +6887,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
++src;
++dst;
@@ -6713,7 +6939,7 @@
G = (G * modulateG) / 255;
B = (B * modulateB) / 255;
}
- pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R;
+ pixel = (B << 16) | (G << 8) | R;
*dst = pixel;
posx += incx;
++dst;
@@ -6760,7 +6986,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6776,8 +7002,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
++src;
++dst;
@@ -6845,7 +7076,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6861,8 +7092,13 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ break;
}
- dstpixel = ((Uint32)dstB << 16) | ((Uint32)dstG << 8) | dstR;
+ dstpixel = (dstB << 16) | (dstG << 8) | dstR;
*dst = dstpixel;
posx += incx;
++dst;
@@ -6905,7 +7141,7 @@
}
pixel = *src;
B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel;
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -6940,7 +7176,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -6957,8 +7193,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -7014,7 +7256,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -7031,8 +7273,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -7067,7 +7315,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
++src;
++dst;
@@ -7123,7 +7371,7 @@
if (flags & SDL_COPY_MODULATE_ALPHA) {
A = (A * modulateA) / 255;
}
- pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B;
+ pixel = (A << 24) | (R << 16) | (G << 8) | B;
*dst = pixel;
posx += incx;
++dst;
@@ -7170,7 +7418,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -7187,8 +7435,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
++src;
++dst;
@@ -7256,7 +7510,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
dstR = srcR + ((255 - srcA) * dstR) / 255;
dstG = srcG + ((255 - srcA) * dstG) / 255;
@@ -7273,8 +7527,14 @@
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255; if (dstR > 255) dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255; if (dstG > 255) dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255; if (dstB > 255) dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255; if (dstA > 255) dstA = 255;
+ break;
}
- dstpixel = ((Uint32)dstA << 24) | ((Uint32)dstR << 16) | ((Uint32)dstG << 8) | dstB;
+ dstpixel = (dstA << 24) | (dstR << 16) | (dstG << 8) | dstB;
*dst = dstpixel;
posx += incx;
++dst;
@@ -7286,134 +7546,136 @@
SDL_BlitFuncEntry SDL_GeneratedBlitFuncTable[] = {
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGB888_ARGB8888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGR888_ARGB8888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_RGB888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_BGR888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Blend_Scale },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate },
{ SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate_Scale },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend },
- { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend_Scale },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend },
+ { SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_ARGB8888, (SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL | SDL_COPY_NEAREST), SDL_CPU_ANY, SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend_Scale },
{ 0, 0, 0, 0, NULL }
};
/* *INDENT-ON* */
+
+#endif /* SDL_HAVE_BLIT_AUTO */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_auto.h
+++ b/external/SDL2/src/video/SDL_blit_auto.h
@@ -1,7 +1,7 @@
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,10 +21,14 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_AUTO
+
/* *INDENT-OFF* */
extern SDL_BlitFuncEntry SDL_GeneratedBlitFuncTable[];
/* *INDENT-ON* */
+
+#endif /* SDL_HAVE_BLIT_AUTO */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_blit_copy.c
+++ b/external/SDL2/src/video/SDL_blit_copy.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_blit_copy.h
+++ b/external/SDL2/src/video/SDL_blit_copy.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_blit_slow.c
+++ b/external/SDL2/src/video/SDL_blit_slow.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -56,7 +56,7 @@
while (info->dst_h--) {
Uint8 *src = 0;
- Uint8 *dst = (Uint8 *) info->dst;
+ Uint8 *dst = info->dst;
int n = info->dst_w;
srcx = -1;
posx = 0x10000L;
@@ -118,7 +118,7 @@
srcB = (srcB * srcA) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD)) {
+ switch (flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) {
case 0:
dstR = srcR;
dstG = srcG;
@@ -146,6 +146,20 @@
dstR = (srcR * dstR) / 255;
dstG = (srcG * dstG) / 255;
dstB = (srcB * dstB) / 255;
+ break;
+ case SDL_COPY_MUL:
+ dstR = ((srcR * dstR) + (dstR * (255 - srcA))) / 255;
+ if (dstR > 255)
+ dstR = 255;
+ dstG = ((srcG * dstG) + (dstG * (255 - srcA))) / 255;
+ if (dstG > 255)
+ dstG = 255;
+ dstB = ((srcB * dstB) + (dstB * (255 - srcA))) / 255;
+ if (dstB > 255)
+ dstB = 255;
+ dstA = ((srcA * dstA) + (dstA * (255 - srcA))) / 255;
+ if (dstA > 255)
+ dstA = 255;
break;
}
if (dst_fmt->Amask) {
--- a/external/SDL2/src/video/SDL_blit_slow.h
+++ b/external/SDL2/src/video/SDL_blit_slow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_bmp.c
+++ b/external/SDL2/src/video/SDL_bmp.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -54,6 +54,92 @@
#define LCS_WINDOWS_COLOR_SPACE 0x57696E20
#endif
+static int readRlePixels(SDL_Surface * surface, SDL_RWops * src, int isRle8)
+{
+ /*
+ | Sets the surface pixels from src. A bmp image is upside down.
+ */
+ int pitch = surface->pitch;
+ int height = surface->h;
+ Uint8 *start = (Uint8 *)surface->pixels;
+ Uint8 *end = start + (height*pitch);
+ Uint8 *bits = end-pitch, *spot;
+ int ofs = 0;
+ Uint8 ch;
+ Uint8 needsPad;
+
+#define COPY_PIXEL(x) spot = &bits[ofs++]; if(spot >= start && spot < end) *spot = (x)
+
+ for (;;) {
+ if (!SDL_RWread(src, &ch, 1, 1)) return 1;
+ /*
+ | encoded mode starts with a run length, and then a byte
+ | with two colour indexes to alternate between for the run
+ */
+ if (ch) {
+ Uint8 pixel;
+ if (!SDL_RWread(src, &pixel, 1, 1)) return 1;
+ if (isRle8) { /* 256-color bitmap, compressed */
+ do {
+ COPY_PIXEL(pixel);
+ } while (--ch);
+ } else { /* 16-color bitmap, compressed */
+ Uint8 pixel0 = pixel >> 4;
+ Uint8 pixel1 = pixel & 0x0F;
+ for (;;) {
+ COPY_PIXEL(pixel0); /* even count, high nibble */
+ if (!--ch) break;
+ COPY_PIXEL(pixel1); /* odd count, low nibble */
+ if (!--ch) break;
+ }
+ }
+ } else {
+ /*
+ | A leading zero is an escape; it may signal the end of the bitmap,
+ | a cursor move, or some absolute data.
+ | zero tag may be absolute mode or an escape
+ */
+ if (!SDL_RWread(src, &ch, 1, 1)) return 1;
+ switch (ch) {
+ case 0: /* end of line */
+ ofs = 0;
+ bits -= pitch; /* go to previous */
+ break;
+ case 1: /* end of bitmap */
+ return 0; /* success! */
+ case 2: /* delta */
+ if (!SDL_RWread(src, &ch, 1, 1)) return 1;
+ ofs += ch;
+ if (!SDL_RWread(src, &ch, 1, 1)) return 1;
+ bits -= (ch * pitch);
+ break;
+ default: /* no compression */
+ if (isRle8) {
+ needsPad = (ch & 1);
+ do {
+ Uint8 pixel;
+ if (!SDL_RWread(src, &pixel, 1, 1)) return 1;
+ COPY_PIXEL(pixel);
+ } while (--ch);
+ } else {
+ needsPad = (((ch+1)>>1) & 1); /* (ch+1)>>1: bytes size */
+ for (;;) {
+ Uint8 pixel;
+ if (!SDL_RWread(src, &pixel, 1, 1)) return 1;
+ COPY_PIXEL(pixel >> 4);
+ if (!--ch) break;
+ COPY_PIXEL(pixel & 0x0F);
+ if (!--ch) break;
+ }
+ }
+ /* pad at even boundary */
+ if (needsPad && !SDL_RWread(src, &ch, 1, 1)) return 1;
+ break;
+ }
+ }
+ }
+}
+
static void CorrectAlphaChannel(SDL_Surface *surface)
{
/* Check to see if there is any alpha channel data */
@@ -106,27 +192,24 @@
/* The Win32 BMP file header (14 bytes) */
char magic[2];
- /* Uint32 bfSize = 0; */
- /* Uint16 bfReserved1 = 0; */
- /* Uint16 bfReserved2 = 0; */
- Uint32 bfOffBits = 0;
+ /* Uint32 bfSize; */
+ /* Uint16 bfReserved1; */
+ /* Uint16 bfReserved2; */
+ Uint32 bfOffBits;
/* The Win32 BITMAPINFOHEADER struct (40 bytes) */
- Uint32 biSize = 0;
+ Uint32 biSize;
Sint32 biWidth = 0;
Sint32 biHeight = 0;
- /* Uint16 biPlanes = 0; */
+ /* Uint16 biPlanes; */
Uint16 biBitCount = 0;
Uint32 biCompression = 0;
- /* Uint32 biSizeImage = 0; */
- /* Sint32 biXPelsPerMeter = 0; */
- /* Sint32 biYPelsPerMeter = 0; */
+ /* Uint32 biSizeImage; */
+ /* Sint32 biXPelsPerMeter; */
+ /* Sint32 biYPelsPerMeter; */
Uint32 biClrUsed = 0;
- /* Uint32 biClrImportant = 0; */
+ /* Uint32 biClrImportant; */
- (void) haveRGBMasks;
- (void) haveAlphaMask;
-
/* Make sure we are passed a valid data source */
surface = NULL;
was_error = SDL_FALSE;
@@ -148,10 +231,10 @@
was_error = SDL_TRUE;
goto done;
}
- /* bfSize = */ SDL_ReadLE32(src);
+ /* bfSize = */ SDL_ReadLE32(src);
/* bfReserved1 = */ SDL_ReadLE16(src);
/* bfReserved2 = */ SDL_ReadLE16(src);
- bfOffBits = SDL_ReadLE32(src);
+ bfOffBits = SDL_ReadLE32(src);
/* Read the Win32 BITMAPINFOHEADER */
biSize = SDL_ReadLE32(src);
@@ -161,6 +244,11 @@
/* biPlanes = */ SDL_ReadLE16(src);
biBitCount = SDL_ReadLE16(src);
biCompression = BI_RGB;
+ /* biSizeImage = 0; */
+ /* biXPelsPerMeter = 0; */
+ /* biYPelsPerMeter = 0; */
+ biClrUsed = 0;
+ /* biClrImportant = 0; */
} else if (biSize >= 40) { /* some version of BITMAPINFOHEADER */
Uint32 headerSize;
biWidth = SDL_ReadLE32(src);
@@ -175,15 +263,7 @@
/* biClrImportant = */ SDL_ReadLE32(src);
/* 64 == BITMAPCOREHEADER2, an incompatible OS/2 2.x extension. Skip this stuff for now. */
- if (biSize == 64) {
- /* ignore these extra fields. */
- if (biCompression == BI_BITFIELDS) {
- /* this value is actually huffman compression in this variant. */
- SDL_SetError("Compressed BMP files not supported");
- was_error = SDL_TRUE;
- goto done;
- }
- } else {
+ if (biSize != 64) {
/* This is complicated. If compression is BI_BITFIELDS, then
we have 3 DWORDS that specify the RGB masks. This is either
stored here in an BITMAPV2INFOHEADER (which only differs in
@@ -226,6 +306,11 @@
SDL_RWseek(src, (biSize - headerSize), RW_SEEK_CUR);
}
}
+ if (biWidth <= 0 || biHeight == 0) {
+ SDL_SetError("BMP file with bad dimensions (%dx%d)", biWidth, biHeight);
+ was_error = SDL_TRUE;
+ goto done;
+ }
if (biHeight < 0) {
topDown = SDL_TRUE;
biHeight = -biHeight;
@@ -246,12 +331,13 @@
ExpandBMP = biBitCount;
biBitCount = 8;
break;
+ case 0:
case 2:
case 3:
case 5:
case 6:
case 7:
- SDL_SetError("%d-bpp BMP images are not supported", biBitCount);
+ SDL_SetError("%d-bpp BMP images are not supported", biBitCount);
was_error = SDL_TRUE;
goto done;
default:
@@ -259,7 +345,7 @@
break;
}
- /* We don't support any BMP compression right now */
+ /* RLE4 and RLE8 BMP compression is supported */
switch (biCompression) {
case BI_RGB:
/* If there are no masks, use the defaults */
@@ -301,9 +387,7 @@
break; /* we handled this in the info header. */
default:
- SDL_SetError("Compressed BMP files not supported");
- was_error = SDL_TRUE;
- goto done;
+ break;
}
/* Create a compatible surface, note that the colors are RGB ordered */
@@ -318,31 +402,19 @@
/* Load the palette, if any */
palette = (surface->format)->palette;
if (palette) {
- SDL_assert(biBitCount <= 8);
- if (biClrUsed == 0) {
- biClrUsed = 1 << biBitCount;
- } else if (biClrUsed > (Uint32)(1 << biBitCount)) {
- SDL_SetError("BMP file has an invalid number of colors");
- was_error = SDL_TRUE;
- goto done;
+ if (SDL_RWseek(src, fp_offset+14+biSize, RW_SEEK_SET) < 0) {
+ SDL_Error(SDL_EFSEEK);
+ was_error = SDL_TRUE;
+ goto done;
}
- if ((int) biClrUsed > palette->ncolors) {
- SDL_Color *colors;
- int ncolors = biClrUsed;
- colors =
- (SDL_Color *) SDL_realloc(palette->colors,
- ncolors *
- sizeof(*palette->colors));
- if (!colors) {
- SDL_OutOfMemory();
- was_error = SDL_TRUE;
- goto done;
- }
- palette->ncolors = ncolors;
- palette->colors = colors;
- } else if ((int) biClrUsed < palette->ncolors) {
- palette->ncolors = biClrUsed;
- }
+
+ /*
+ | guich: always use 1<<bpp b/c some bitmaps can bring wrong information
+ | for colorsUsed
+ */
+ /* if (biClrUsed == 0) { */
+ biClrUsed = 1 << biBitCount;
+ /* } */
if (biSize == 12) {
for (i = 0; i < (int) biClrUsed; ++i) {
SDL_RWread(src, &palette->colors[i].b, 1, 1);
@@ -364,6 +436,7 @@
palette->colors[i].a = SDL_ALPHA_OPAQUE;
}
}
+ palette->ncolors = biClrUsed;
}
/* Read the surface pixels. Note that the bmp image is upside down */
@@ -372,6 +445,11 @@
was_error = SDL_TRUE;
goto done;
}
+ if ((biCompression == BI_RLE4) || (biCompression == BI_RLE8)) {
+ was_error = (SDL_bool)readRlePixels(surface, src, biCompression == BI_RLE8);
+ if (was_error) SDL_SetError("Error reading from BMP");
+ goto done;
+ }
top = (Uint8 *)surface->pixels;
end = (Uint8 *)surface->pixels+(surface->h*surface->pitch);
switch (ExpandBMP) {
@@ -407,11 +485,11 @@
}
}
bits[i] = (pixel >> shift);
- if (bits[i] >= biClrUsed) {
- SDL_SetError("A BMP image contains a pixel with a color out of the palette");
- was_error = SDL_TRUE;
- goto done;
- }
+ if (bits[i] >= biClrUsed) {
+ SDL_SetError("A BMP image contains a pixel with a color out of the palette");
+ was_error = SDL_TRUE;
+ goto done;
+ }
pixel <<= ExpandBMP;
}
}
@@ -423,15 +501,15 @@
was_error = SDL_TRUE;
goto done;
}
- if (biBitCount == 8 && palette && biClrUsed < (Uint32)(1 << biBitCount)) {
- for (i = 0; i < surface->w; ++i) {
- if (bits[i] >= biClrUsed) {
- SDL_SetError("A BMP image contains a pixel with a color out of the palette");
- was_error = SDL_TRUE;
- goto done;
- }
- }
- }
+ if (biBitCount == 8 && palette && biClrUsed < (1u << biBitCount)) {
+ for (i = 0; i < surface->w; ++i) {
+ if (bits[i] >= biClrUsed) {
+ SDL_SetError("A BMP image contains a pixel with a color out of the palette");
+ was_error = SDL_TRUE;
+ goto done;
+ }
+ }
+ }
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
/* Byte-swap the pixels if needed. Note that the 24bpp
case has already been taken care of above. */
@@ -475,7 +553,9 @@
if (src) {
SDL_RWseek(src, fp_offset, RW_SEEK_SET);
}
- SDL_FreeSurface(surface);
+ if (surface) {
+ SDL_FreeSurface(surface);
+ }
surface = NULL;
}
if (freesrc && src) {
--- a/external/SDL2/src/video/SDL_clipboard.c
+++ b/external/SDL2/src/video/SDL_clipboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_egl.c
+++ b/external/SDL2/src/video/SDL_egl.c
@@ -1,6 +1,6 @@
/*
* Simple DirectMedia Layer
- * Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ * Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
@@ -82,6 +82,13 @@
#define DEFAULT_OGL_ES "libGLESv1_CM.so.1"
#endif /* SDL_VIDEO_DRIVER_RPI */
+/** If we happen to not have this defined because of an older EGL version, just define it 0x0
+ as eglGetPlatformDisplayEXT will most likely be NULL if this is missing
+*/
+#ifndef EGL_PLATFORM_DEVICE_EXT
+#define EGL_PLATFORM_DEVICE_EXT 0x0
+#endif
+
#ifdef SDL_VIDEO_STATIC_ANGLE
#define LOAD_FUNC(NAME) \
_this->egl_data->NAME = (void *)NAME;
@@ -94,6 +101,11 @@
}
#endif
+/* it is allowed to not have some of the EGL extensions on start - attempts to use them will fail later. */
+#define LOAD_FUNC_EGLEXT(NAME) \
+ _this->egl_data->NAME = _this->egl_data->eglGetProcAddress(#NAME);
+
+
static const char * SDL_EGL_GetErrorName(EGLint eglErrorCode)
{
#define SDL_EGL_ERROR_TRANSLATE(e) case e: return #e;
@@ -210,25 +222,35 @@
void *
SDL_EGL_GetProcAddress(_THIS, const char *proc)
{
- static char procname[1024];
- void *retval;
-
- /* eglGetProcAddress is busted on Android http://code.google.com/p/android/issues/detail?id=7681 */
-#if !defined(SDL_VIDEO_DRIVER_ANDROID)
- if (_this->egl_data->eglGetProcAddress) {
+ const Uint32 eglver = (((Uint32) _this->egl_data->egl_version_major) << 16) | ((Uint32) _this->egl_data->egl_version_minor);
+ const SDL_bool is_egl_15_or_later = eglver >= ((((Uint32) 1) << 16) | 5);
+ void *retval = NULL;
+
+ /* EGL 1.5 can use eglGetProcAddress() for any symbol. 1.4 and earlier can't use it for core entry points. */
+ if (!retval && is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
retval = _this->egl_data->eglGetProcAddress(proc);
+ }
+
+ /* Try SDL_LoadFunction() first for EGL <= 1.4, or as a fallback for >= 1.5. */
+ if (!retval) {
+ static char procname[64];
+ retval = SDL_LoadFunction(_this->egl_data->egl_dll_handle, proc);
+ /* just in case you need an underscore prepended... */
+ if (!retval && (SDL_strlen(proc) < (sizeof (procname) - 1))) {
+ procname[0] = '_';
+ SDL_strlcpy(procname + 1, proc, sizeof (procname) - 1);
+ retval = SDL_LoadFunction(_this->egl_data->egl_dll_handle, procname);
+ }
+ }
+
+ /* Try eglGetProcAddress if we on <= 1.4 and still searching... */
+ if (!retval && !is_egl_15_or_later && _this->egl_data->eglGetProcAddress) {
+ retval = _this->egl_data->eglGetProcAddress(proc);
if (retval) {
return retval;
}
}
-#endif
-
- retval = SDL_LoadFunction(_this->egl_data->egl_dll_handle, proc);
- if (!retval && SDL_strlen(proc) <= 1022) {
- procname[0] = '_';
- SDL_strlcpy(procname + 1, proc, 1022);
- retval = SDL_LoadFunction(_this->egl_data->egl_dll_handle, procname);
- }
+
return retval;
}
@@ -256,11 +278,10 @@
}
int
-SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_display, EGLenum platform)
+SDL_EGL_LoadLibraryOnly(_THIS, const char *egl_path)
{
void *dll_handle = NULL, *egl_dll_handle = NULL; /* The naming is counter intuitive, but hey, I just work here -- Gabriel */
const char *path = NULL;
- int egl_version_major = 0, egl_version_minor = 0;
#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT
const char *d3dcompiler;
#endif
@@ -406,24 +427,54 @@
LOAD_FUNC(eglWaitNative);
LOAD_FUNC(eglWaitGL);
LOAD_FUNC(eglBindAPI);
+ LOAD_FUNC(eglQueryAPI);
LOAD_FUNC(eglQueryString);
LOAD_FUNC(eglGetError);
+ LOAD_FUNC_EGLEXT(eglQueryDevicesEXT);
+ LOAD_FUNC_EGLEXT(eglGetPlatformDisplayEXT);
+ _this->gl_config.driver_loaded = 1;
+
+ if (path) {
+ SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1);
+ } else {
+ *_this->gl_config.driver_path = '\0';
+ }
+
+ return 0;
+}
+
+static void
+SDL_EGL_GetVersion(_THIS) {
if (_this->egl_data->eglQueryString) {
- /* EGL 1.5 allows querying for client version */
- const char *egl_version = _this->egl_data->eglQueryString(EGL_NO_DISPLAY, EGL_VERSION);
- if (egl_version != NULL) {
- if (SDL_sscanf(egl_version, "%d.%d", &egl_version_major, &egl_version_minor) != 2) {
- egl_version_major = 0;
- egl_version_minor = 0;
+ const char *egl_version = _this->egl_data->eglQueryString(_this->egl_data->egl_display, EGL_VERSION);
+ if (egl_version) {
+ int major = 0, minor = 0;
+ if (SDL_sscanf(egl_version, "%d.%d", &major, &minor) == 2) {
+ _this->egl_data->egl_version_major = major;
+ _this->egl_data->egl_version_minor = minor;
+ } else {
SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Could not parse EGL version string: %s", egl_version);
}
}
}
+}
- _this->egl_data->egl_version_major = egl_version_major;
- _this->egl_data->egl_version_minor = egl_version_minor;
+int
+SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_display, EGLenum platform)
+{
+ int egl_version_major, egl_version_minor;
+ int library_load_retcode = SDL_EGL_LoadLibraryOnly(_this, egl_path);
+ if (library_load_retcode != 0) {
+ return library_load_retcode;
+ }
+ /* EGL 1.5 allows querying for client version with EGL_NO_DISPLAY */
+ SDL_EGL_GetVersion(_this);
+
+ egl_version_major = _this->egl_data->egl_version_major;
+ egl_version_minor = _this->egl_data->egl_version_minor;
+
if (egl_version_major == 1 && egl_version_minor == 5) {
LOAD_FUNC(eglGetPlatformDisplay);
}
@@ -447,20 +498,111 @@
_this->egl_data->egl_display = _this->egl_data->eglGetDisplay(native_display);
}
if (_this->egl_data->egl_display == EGL_NO_DISPLAY) {
+ _this->gl_config.driver_loaded = 0;
+ *_this->gl_config.driver_path = '\0';
return SDL_SetError("Could not get EGL display");
}
if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) {
+ _this->gl_config.driver_loaded = 0;
+ *_this->gl_config.driver_path = '\0';
return SDL_SetError("Could not initialize EGL");
}
#endif
- if (path) {
- SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1);
- } else {
- *_this->gl_config.driver_path = '\0';
+ /* Get the EGL version with a valid egl_display, for EGL <= 1.4 */
+ SDL_EGL_GetVersion(_this);
+
+ _this->egl_data->is_offscreen = 0;
+
+ return 0;
+}
+
+/**
+ On multi GPU machines EGL device 0 is not always the first valid GPU.
+ Container environments can restrict access to some GPUs that are still listed in the EGL
+ device list. If the requested device is a restricted GPU and cannot be used
+ (eglInitialize() will fail) then attempt to automatically and silently select the next
+ valid available GPU for EGL to use.
+*/
+
+int
+SDL_EGL_InitializeOffscreen(_THIS, int device)
+{
+ void *egl_devices[SDL_EGL_MAX_DEVICES];
+ EGLint num_egl_devices = 0;
+ const char *egl_device_hint;
+
+ if (_this->gl_config.driver_loaded != 1) {
+ return SDL_SetError("SDL_EGL_LoadLibraryOnly() has not been called or has failed.");
}
-
+
+ /* Check for all extensions that are optional until used and fail if any is missing */
+ if (_this->egl_data->eglQueryDevicesEXT == NULL) {
+ return SDL_SetError("eglQueryDevicesEXT is missing (EXT_device_enumeration not supported by the drivers?)");
+ }
+
+ if (_this->egl_data->eglGetPlatformDisplayEXT == NULL) {
+ return SDL_SetError("eglGetPlatformDisplayEXT is missing (EXT_platform_base not supported by the drivers?)");
+ }
+
+ if (_this->egl_data->eglQueryDevicesEXT(SDL_EGL_MAX_DEVICES, egl_devices, &num_egl_devices) != EGL_TRUE) {
+ return SDL_SetError("eglQueryDevicesEXT() failed");
+ }
+
+ egl_device_hint = SDL_GetHint("SDL_HINT_EGL_DEVICE");
+ if (egl_device_hint) {
+ device = SDL_atoi(egl_device_hint);
+
+ if (device >= num_egl_devices) {
+ return SDL_SetError("Invalid EGL device is requested.");
+ }
+
+ _this->egl_data->egl_display = _this->egl_data->eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT, egl_devices[device], NULL);
+
+ if (_this->egl_data->egl_display == EGL_NO_DISPLAY) {
+ return SDL_SetError("eglGetPlatformDisplayEXT() failed.");
+ }
+
+ if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) {
+ return SDL_SetError("Could not initialize EGL");
+ }
+ }
+ else {
+ int i;
+ SDL_bool found = SDL_FALSE;
+ EGLDisplay attempted_egl_display;
+
+ /* If no hint is provided lets look for the first device/display that will allow us to eglInit */
+ for (i = 0; i < num_egl_devices; i++) {
+ attempted_egl_display = _this->egl_data->eglGetPlatformDisplayEXT(EGL_PLATFORM_DEVICE_EXT, egl_devices[i], NULL);
+
+ if (attempted_egl_display == EGL_NO_DISPLAY) {
+ continue;
+ }
+
+ if (_this->egl_data->eglInitialize(attempted_egl_display, NULL, NULL) != EGL_TRUE) {
+ _this->egl_data->eglTerminate(attempted_egl_display);
+ continue;
+ }
+
+ /* We did not fail, we'll pick this one! */
+ _this->egl_data->egl_display = attempted_egl_display;
+ found = SDL_TRUE;
+
+ break;
+ }
+
+ if (!found) {
+ return SDL_SetError("Could not find a valid EGL device to initialize");
+ }
+ }
+
+ /* Get the EGL version with a valid egl_display, for EGL <= 1.4 */
+ SDL_EGL_GetVersion(_this);
+
+ _this->egl_data->is_offscreen = 1;
+
return 0;
}
@@ -580,6 +722,11 @@
attribs[i++] = _this->gl_config.multisamplesamples;
}
+ if (_this->egl_data->is_offscreen) {
+ attribs[i++] = EGL_SURFACE_TYPE;
+ attribs[i++] = EGL_PBUFFER_BIT;
+ }
+
attribs[i++] = EGL_RENDERABLE_TYPE;
if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) {
#ifdef EGL_KHR_create_context
@@ -929,6 +1076,25 @@
SDL_EGL_SetError("unable to create an EGL window surface", "eglCreateWindowSurface");
}
return surface;
+}
+
+EGLSurface
+SDL_EGL_CreateOffscreenSurface(_THIS, int width, int height)
+{
+ EGLint attributes[] = {
+ EGL_WIDTH, width,
+ EGL_HEIGHT, height,
+ EGL_NONE
+ };
+
+ if (SDL_EGL_ChooseConfig(_this) != 0) {
+ return EGL_NO_SURFACE;
+ }
+
+ return _this->egl_data->eglCreatePbufferSurface(
+ _this->egl_data->egl_display,
+ _this->egl_data->egl_config,
+ attributes);
}
void
--- a/external/SDL2/src/video/SDL_egl_c.h
+++ b/external/SDL2/src/video/SDL_egl_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -29,6 +29,8 @@
#include "SDL_sysvideo.h"
+#define SDL_EGL_MAX_DEVICES 8
+
typedef struct SDL_EGL_VideoData
{
void *egl_dll_handle, *dll_handle;
@@ -81,6 +83,8 @@
EGLBoolean(EGLAPIENTRY *eglSwapInterval) (EGLDisplay dpy, EGLint interval);
const char *(EGLAPIENTRY *eglQueryString) (EGLDisplay dpy, EGLint name);
+
+ EGLenum(EGLAPIENTRY *eglQueryAPI)(void);
EGLBoolean(EGLAPIENTRY *eglGetConfigAttrib) (EGLDisplay dpy, EGLConfig config,
EGLint attribute, EGLint * value);
@@ -93,6 +97,13 @@
EGLint(EGLAPIENTRY *eglGetError)(void);
+ EGLBoolean(EGLAPIENTRY *eglQueryDevicesEXT)(EGLint max_devices,
+ void **devices,
+ EGLint *num_devices);
+
+ /* whether EGL display was offscreen */
+ int is_offscreen;
+
} SDL_EGL_VideoData;
/* OpenGLES functions */
@@ -100,6 +111,7 @@
/* SDL_EGL_LoadLibrary can get a display for a specific platform (EGL_PLATFORM_*)
* or, if 0 is passed, let the implementation decide.
*/
+extern int SDL_EGL_LoadLibraryOnly(_THIS, const char *path);
extern int SDL_EGL_LoadLibrary(_THIS, const char *path, NativeDisplayType native_display, EGLenum platform);
extern void *SDL_EGL_GetProcAddress(_THIS, const char *proc);
extern void SDL_EGL_UnloadLibrary(_THIS);
@@ -110,6 +122,10 @@
extern void SDL_EGL_DeleteContext(_THIS, SDL_GLContext context);
extern EGLSurface *SDL_EGL_CreateSurface(_THIS, NativeWindowType nw);
extern void SDL_EGL_DestroySurface(_THIS, EGLSurface egl_surface);
+
+extern EGLSurface SDL_EGL_CreateOffscreenSurface(_THIS, int width, int height);
+/* Assumes that LoadLibraryOnly() has succeeded */
+extern int SDL_EGL_InitializeOffscreen(_THIS, int device);
/* These need to be wrapped to get the surface for the window by the platform GLES implementation */
extern SDL_GLContext SDL_EGL_CreateContext(_THIS, EGLSurface egl_surface);
--- a/external/SDL2/src/video/SDL_fillrect.c
+++ b/external/SDL2/src/video/SDL_fillrect.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,7 @@
#include "SDL_video.h"
#include "SDL_blit.h"
+#include "SDL_cpuinfo.h"
#ifdef __SSE__
@@ -236,26 +237,12 @@
int
SDL_FillRect(SDL_Surface * dst, const SDL_Rect * rect, Uint32 color)
{
- SDL_Rect clipped;
- Uint8 *pixels;
-
if (!dst) {
return SDL_SetError("Passed NULL destination surface");
}
- /* This function doesn't work on surfaces < 8 bpp */
- if (dst->format->BitsPerPixel < 8) {
- return SDL_SetError("SDL_FillRect(): Unsupported surface format");
- }
-
/* If 'rect' == NULL, then fill the whole surface */
- if (rect) {
- /* Perform clipping */
- if (!SDL_IntersectRect(rect, &dst->clip_rect, &clipped)) {
- return 0;
- }
- rect = &clipped;
- } else {
+ if (!rect) {
rect = &dst->clip_rect;
/* Don't attempt to fill if the surface's clip_rect is empty */
if (SDL_RectEmpty(rect)) {
@@ -263,81 +250,179 @@
}
}
+ return SDL_FillRects(dst, rect, 1, color);
+}
+
+#if SDL_ARM_NEON_BLITTERS
+void FillRect8ARMNEONAsm(int32_t w, int32_t h, uint8_t *dst, int32_t dst_stride, uint8_t src);
+void FillRect16ARMNEONAsm(int32_t w, int32_t h, uint16_t *dst, int32_t dst_stride, uint16_t src);
+void FillRect32ARMNEONAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint32_t src);
+
+static void fill_8_neon(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect8ARMNEONAsm(w, h, (uint8_t *) pixels, pitch >> 0, color);
+ return;
+}
+
+static void fill_16_neon(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect16ARMNEONAsm(w, h, (uint16_t *) pixels, pitch >> 1, color);
+ return;
+}
+
+static void fill_32_neon(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect32ARMNEONAsm(w, h, (uint32_t *) pixels, pitch >> 2, color);
+ return;
+}
+#endif
+
+#if SDL_ARM_SIMD_BLITTERS
+void FillRect8ARMSIMDAsm(int32_t w, int32_t h, uint8_t *dst, int32_t dst_stride, uint8_t src);
+void FillRect16ARMSIMDAsm(int32_t w, int32_t h, uint16_t *dst, int32_t dst_stride, uint16_t src);
+void FillRect32ARMSIMDAsm(int32_t w, int32_t h, uint32_t *dst, int32_t dst_stride, uint32_t src);
+
+static void fill_8_simd(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect8ARMSIMDAsm(w, h, (uint8_t *) pixels, pitch >> 0, color);
+ return;
+}
+
+static void fill_16_simd(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect16ARMSIMDAsm(w, h, (uint16_t *) pixels, pitch >> 1, color);
+ return;
+}
+
+static void fill_32_simd(Uint8 * pixels, int pitch, Uint32 color, int w, int h) {
+ FillRect32ARMSIMDAsm(w, h, (uint32_t *) pixels, pitch >> 2, color);
+ return;
+}
+#endif
+
+int
+SDL_FillRects(SDL_Surface * dst, const SDL_Rect * rects, int count,
+ Uint32 color)
+{
+ SDL_Rect clipped;
+ Uint8 *pixels;
+ const SDL_Rect* rect;
+ void (*fill_function)(Uint8 * pixels, int pitch, Uint32 color, int w, int h) = NULL;
+ int i;
+
+ if (!dst) {
+ return SDL_SetError("Passed NULL destination surface");
+ }
+
+ /* This function doesn't work on surfaces < 8 bpp */
+ if (dst->format->BitsPerPixel < 8) {
+ return SDL_SetError("SDL_FillRect(): Unsupported surface format");
+ }
+
/* Perform software fill */
if (!dst->pixels) {
return SDL_SetError("SDL_FillRect(): You must lock the surface");
}
- pixels = (Uint8 *) dst->pixels + rect->y * dst->pitch +
- rect->x * dst->format->BytesPerPixel;
+ if (!rects) {
+ return SDL_SetError("SDL_FillRects() passed NULL rects");
+ }
- switch (dst->format->BytesPerPixel) {
- case 1:
- {
- color |= (color << 8);
- color |= (color << 16);
-#ifdef __SSE__
- if (SDL_HasSSE()) {
- SDL_FillRect1SSE(pixels, dst->pitch, color, rect->w, rect->h);
- break;
- }
+#if SDL_ARM_NEON_BLITTERS
+ if (SDL_HasNEON() && dst->format->BytesPerPixel != 3 && fill_function == NULL) {
+ switch (dst->format->BytesPerPixel) {
+ case 1:
+ fill_function = fill_8_neon;
+ break;
+ case 2:
+ fill_function = fill_16_neon;
+ break;
+ case 4:
+ fill_function = fill_32_neon;
+ break;
+ }
+ }
#endif
- SDL_FillRect1(pixels, dst->pitch, color, rect->w, rect->h);
+#if SDL_ARM_SIMD_BLITTERS
+ if (SDL_HasARMSIMD() && dst->format->BytesPerPixel != 3 && fill_function == NULL) {
+ switch (dst->format->BytesPerPixel) {
+ case 1:
+ fill_function = fill_8_simd;
break;
+ case 2:
+ fill_function = fill_16_simd;
+ break;
+ case 4:
+ fill_function = fill_32_simd;
+ break;
}
+ }
+#endif
- case 2:
- {
- color |= (color << 16);
+ if (fill_function == NULL) {
+ switch (dst->format->BytesPerPixel) {
+ case 1:
+ {
+ color |= (color << 8);
+ color |= (color << 16);
#ifdef __SSE__
- if (SDL_HasSSE()) {
- SDL_FillRect2SSE(pixels, dst->pitch, color, rect->w, rect->h);
+ if (SDL_HasSSE()) {
+ fill_function = SDL_FillRect1SSE;
+ break;
+ }
+#endif
+ fill_function = SDL_FillRect1;
break;
}
+
+ case 2:
+ {
+ color |= (color << 16);
+#ifdef __SSE__
+ if (SDL_HasSSE()) {
+ fill_function = SDL_FillRect2SSE;
+ break;
+ }
#endif
- SDL_FillRect2(pixels, dst->pitch, color, rect->w, rect->h);
- break;
- }
+ fill_function = SDL_FillRect2;
+ break;
+ }
- case 3:
- /* 24-bit RGB is a slow path, at least for now. */
- {
- SDL_FillRect3(pixels, dst->pitch, color, rect->w, rect->h);
- break;
- }
+ case 3:
+ /* 24-bit RGB is a slow path, at least for now. */
+ {
+ fill_function = SDL_FillRect3;
+ break;
+ }
- case 4:
- {
+ case 4:
+ {
#ifdef __SSE__
- if (SDL_HasSSE()) {
- SDL_FillRect4SSE(pixels, dst->pitch, color, rect->w, rect->h);
+ if (SDL_HasSSE()) {
+ fill_function = SDL_FillRect4SSE;
+ break;
+ }
+#endif
+ fill_function = SDL_FillRect4;
break;
}
-#endif
- SDL_FillRect4(pixels, dst->pitch, color, rect->w, rect->h);
- break;
+
+ default:
+ return SDL_SetError("Unsupported pixel format");
}
}
- /* We're done! */
- return 0;
-}
+ for (i = 0; i < count; ++i) {
+ rect = &rects[i];
+ /* Perform clipping */
+ if (!SDL_IntersectRect(rect, &dst->clip_rect, &clipped)) {
+ continue;
+ }
+ rect = &clipped;
-int
-SDL_FillRects(SDL_Surface * dst, const SDL_Rect * rects, int count,
- Uint32 color)
-{
- int i;
- int status = 0;
+ pixels = (Uint8 *) dst->pixels + rect->y * dst->pitch +
+ rect->x * dst->format->BytesPerPixel;
- if (!rects) {
- return SDL_SetError("SDL_FillRects() passed NULL rects");
+ fill_function(pixels, dst->pitch, color, rect->w, rect->h);
}
- for (i = 0; i < count; ++i) {
- status += SDL_FillRect(dst, &rects[i], color);
- }
- return status;
+ /* We're done! */
+ return 0;
}
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_pixels.c
+++ b/external/SDL2/src/video/SDL_pixels.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -94,6 +94,7 @@
CASE(SDL_PIXELFORMAT_INDEX8)
CASE(SDL_PIXELFORMAT_RGB332)
CASE(SDL_PIXELFORMAT_RGB444)
+ CASE(SDL_PIXELFORMAT_BGR444)
CASE(SDL_PIXELFORMAT_RGB555)
CASE(SDL_PIXELFORMAT_BGR555)
CASE(SDL_PIXELFORMAT_ARGB4444)
@@ -321,6 +322,12 @@
Amask == 0x0000) {
return SDL_PIXELFORMAT_RGB444;
}
+ if (Rmask == 0x000F &&
+ Gmask == 0x00F0 &&
+ Bmask == 0x0F00 &&
+ Amask == 0x0000) {
+ return SDL_PIXELFORMAT_BGR444;
+ }
break;
case 15:
if (Rmask == 0) {
@@ -996,9 +1003,11 @@
/* Clear out any previous mapping */
map = src->map;
+#if SDL_HAVE_RLE
if ((src->flags & SDL_RLEACCEL) == SDL_RLEACCEL) {
SDL_UnRLESurface(src, 1);
}
+#endif
SDL_InvalidateMap(map);
/* Figure out what kind of mapping we're doing */
--- a/external/SDL2/src/video/SDL_pixels_c.h
+++ b/external/SDL2/src/video/SDL_pixels_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_rect.c
+++ b/external/SDL2/src/video/SDL_rect.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_rect_c.h
+++ b/external/SDL2/src/video/SDL_rect_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_shape.c
+++ b/external/SDL2/src/video/SDL_shape.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -88,7 +88,7 @@
pixel = (Uint8 *)(shape->pixels) + (y*shape->pitch) + (x*shape->format->BytesPerPixel);
switch(shape->format->BytesPerPixel) {
case(1):
- pixel_value = *(Uint8*)pixel;
+ pixel_value = *pixel;
break;
case(2):
pixel_value = *(Uint16*)pixel;
@@ -141,7 +141,7 @@
pixel = (Uint8 *)(mask->pixels) + (y*mask->pitch) + (x*mask->format->BytesPerPixel);
switch(mask->format->BytesPerPixel) {
case(1):
- pixel_value = *(Uint8*)pixel;
+ pixel_value = *pixel;
break;
case(2):
pixel_value = *(Uint16*)pixel;
--- a/external/SDL2/src/video/SDL_shape_internals.h
+++ b/external/SDL2/src/video/SDL_shape_internals.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_stretch.c
+++ b/external/SDL2/src/video/SDL_stretch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_surface.c
+++ b/external/SDL2/src/video/SDL_surface.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -42,19 +42,12 @@
{
int pitch;
- /* Surface should be 4-byte aligned for speed */
- pitch = width * SDL_BYTESPERPIXEL(format);
- switch (SDL_BITSPERPIXEL(format)) {
- case 1:
- pitch = (pitch + 7) / 8;
- break;
- case 4:
- pitch = (pitch + 1) / 2;
- break;
- default:
- break;
+ if (SDL_ISPIXELFORMAT_FOURCC(format) || SDL_BITSPERPIXEL(format) >= 8) {
+ pitch = (width * SDL_BYTESPERPIXEL(format));
+ } else {
+ pitch = ((width * SDL_BITSPERPIXEL(format)) + 7) / 8;
}
- pitch = (pitch + 3) & ~3; /* 4-byte aligning */
+ pitch = (pitch + 3) & ~3; /* 4-byte aligning for speed */
return pitch;
}
@@ -502,7 +495,7 @@
status = 0;
flags = surface->map->info.flags;
surface->map->info.flags &=
- ~(SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD);
+ ~(SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL);
switch (blendMode) {
case SDL_BLENDMODE_NONE:
break;
@@ -515,6 +508,9 @@
case SDL_BLENDMODE_MOD:
surface->map->info.flags |= SDL_COPY_MOD;
break;
+ case SDL_BLENDMODE_MUL:
+ surface->map->info.flags |= SDL_COPY_MUL;
+ break;
default:
status = SDL_Unsupported();
break;
@@ -539,7 +535,7 @@
}
switch (surface->map->
- info.flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD)) {
+ info.flags & (SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
*blendMode = SDL_BLENDMODE_BLEND;
break;
@@ -549,6 +545,9 @@
case SDL_COPY_MOD:
*blendMode = SDL_BLENDMODE_MOD;
break;
+ case SDL_COPY_MUL:
+ *blendMode = SDL_BLENDMODE_MUL;
+ break;
default:
*blendMode = SDL_BLENDMODE_NONE;
break;
@@ -881,7 +880,7 @@
{
static const Uint32 complex_copy_flags = (
SDL_COPY_MODULATE_COLOR | SDL_COPY_MODULATE_ALPHA |
- SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD |
+ SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL |
SDL_COPY_COLORKEY
);
@@ -906,11 +905,13 @@
SDL_LockSurface(SDL_Surface * surface)
{
if (!surface->locked) {
+#if SDL_HAVE_RLE
/* Perform the lock */
if (surface->flags & SDL_RLEACCEL) {
SDL_UnRLESurface(surface, 1);
surface->flags |= SDL_RLEACCEL; /* save accel'd state */
}
+#endif
}
/* Increment the surface lock count, for recursive locks */
@@ -931,11 +932,13 @@
return;
}
+#if SDL_HAVE_RLE
/* Update RLE encoded surface with new data */
if ((surface->flags & SDL_RLEACCEL) == SDL_RLEACCEL) {
surface->flags &= ~SDL_RLEACCEL; /* stop lying */
SDL_RLESurface(surface);
}
+#endif
}
/*
@@ -959,6 +962,10 @@
SDL_Color copy_color;
SDL_Rect bounds;
int ret;
+ SDL_bool palette_ck_transform = SDL_FALSE;
+ int palette_ck_value = 0;
+ SDL_bool palette_has_alpha = SDL_FALSE;
+ Uint8 *palette_saved_alpha = NULL;
if (!surface) {
SDL_InvalidParamError("surface");
@@ -1019,8 +1026,67 @@
bounds.y = 0;
bounds.w = surface->w;
bounds.h = surface->h;
+
+ /* Source surface has a palette with no real alpha (0 or OPAQUE).
+ * Destination format has alpha.
+ * -> set alpha channel to be opaque */
+ if (surface->format->palette && format->Amask) {
+ SDL_bool set_opaque = SDL_FALSE;
+ {
+ int i;
+ for (i = 0; i < surface->format->palette->ncolors; i++) {
+ Uint8 alpha_value = surface->format->palette->colors[i].a;
+
+ if (alpha_value != 0 && alpha_value != SDL_ALPHA_OPAQUE) {
+ /* Palette has at least one alpha value. Don't do anything */
+ set_opaque = SDL_FALSE;
+ palette_has_alpha = SDL_TRUE;
+ break;
+ }
+
+ if (alpha_value == 0) {
+ set_opaque = SDL_TRUE;
+ }
+ }
+ }
+
+ /* Set opaque and backup palette alpha values */
+ if (set_opaque) {
+ int i;
+ palette_saved_alpha = SDL_stack_alloc(Uint8, surface->format->palette->ncolors);
+ for (i = 0; i < surface->format->palette->ncolors; i++) {
+ palette_saved_alpha[i] = surface->format->palette->colors[i].a;
+ surface->format->palette->colors[i].a = SDL_ALPHA_OPAQUE;
+ }
+ }
+ }
+
+ /* Transform colorkey to alpha. for cases where source palette has duplicate values, and colorkey is one of them */
+ if (copy_flags & SDL_COPY_COLORKEY) {
+ if (surface->format->palette && !format->palette) {
+ palette_ck_transform = SDL_TRUE;
+ palette_has_alpha = SDL_TRUE;
+ palette_ck_value = surface->format->palette->colors[surface->map->info.colorkey].a;
+ surface->format->palette->colors[surface->map->info.colorkey].a = SDL_ALPHA_TRANSPARENT;
+ }
+ }
+
ret = SDL_LowerBlit(surface, &bounds, convert, &bounds);
+ /* Restore colorkey alpha value */
+ if (palette_ck_transform) {
+ surface->format->palette->colors[surface->map->info.colorkey].a = palette_ck_value;
+ }
+
+ /* Restore palette alpha values */
+ if (palette_saved_alpha) {
+ int i;
+ for (i = 0; i < surface->format->palette->ncolors; i++) {
+ surface->format->palette->colors[i].a = palette_saved_alpha[i];
+ }
+ SDL_stack_free(palette_saved_alpha);
+ }
+
/* Clean up the original surface, and update converted surface */
convert->map->info.r = copy_color.r;
convert->map->info.g = copy_color.g;
@@ -1046,7 +1112,6 @@
if (copy_flags & SDL_COPY_COLORKEY) {
SDL_bool set_colorkey_by_color = SDL_FALSE;
- SDL_bool ignore_alpha = SDL_TRUE; /* Ignore, or not, alpha in colorkey comparison */
if (surface->format->palette) {
if (format->palette &&
@@ -1055,9 +1120,8 @@
surface->format->palette->ncolors * sizeof(SDL_Color)) == 0)) {
/* The palette is identical, just set the same colorkey */
SDL_SetColorKey(convert, 1, surface->map->info.colorkey);
- } else if (format->Amask) {
- set_colorkey_by_color = SDL_TRUE;
- ignore_alpha = SDL_FALSE;
+ } else if (!format->palette) {
+ /* Was done by 'palette_ck_transform' */
} else {
set_colorkey_by_color = SDL_TRUE;
}
@@ -1098,7 +1162,7 @@
SDL_SetColorKey(convert, 1, converted_colorkey);
/* This is needed when converting for 3D texture upload */
- SDL_ConvertColorkeyToAlpha(convert, ignore_alpha);
+ SDL_ConvertColorkeyToAlpha(convert, SDL_TRUE);
}
}
SDL_SetClipRect(convert, &surface->clip_rect);
@@ -1106,6 +1170,7 @@
/* Enable alpha blending by default if the new surface has an
* alpha channel or alpha modulation */
if ((surface->format->Amask && format->Amask) ||
+ (palette_has_alpha && format->Amask) ||
(copy_flags & SDL_COPY_MODULATE_ALPHA)) {
SDL_SetSurfaceBlendMode(convert, SDL_BLENDMODE_BLEND);
}
@@ -1192,6 +1257,7 @@
return SDL_InvalidParamError("dst_pitch");
}
+#if SDL_HAVE_YUV
if (SDL_ISPIXELFORMAT_FOURCC(src_format) && SDL_ISPIXELFORMAT_FOURCC(dst_format)) {
return SDL_ConvertPixels_YUV_to_YUV(width, height, src_format, src, src_pitch, dst_format, dst, dst_pitch);
} else if (SDL_ISPIXELFORMAT_FOURCC(src_format)) {
@@ -1199,6 +1265,12 @@
} else if (SDL_ISPIXELFORMAT_FOURCC(dst_format)) {
return SDL_ConvertPixels_RGB_to_YUV(width, height, src_format, src, src_pitch, dst_format, dst, dst_pitch);
}
+#else
+ if (SDL_ISPIXELFORMAT_FOURCC(src_format) || SDL_ISPIXELFORMAT_FOURCC(dst_format)) {
+ SDL_SetError("SDL not built with YUV support");
+ return -1;
+ }
+#endif
/* Fast path for same format copy */
if (src_format == dst_format) {
@@ -1251,9 +1323,11 @@
while (surface->locked > 0) {
SDL_UnlockSurface(surface);
}
+#if SDL_HAVE_RLE
if (surface->flags & SDL_RLEACCEL) {
SDL_UnRLESurface(surface, 0);
}
+#endif
if (surface->format) {
SDL_SetSurfacePalette(surface, NULL);
SDL_FreeFormat(surface->format);
--- a/external/SDL2/src/video/SDL_sysvideo.h
+++ b/external/SDL2/src/video/SDL_sysvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,6 +26,7 @@
#include "SDL_messagebox.h"
#include "SDL_shape.h"
#include "SDL_thread.h"
+#include "SDL_metal.h"
#include "SDL_vulkan_internal.h"
@@ -276,6 +277,13 @@
/* * * */
/*
+ * Metal support
+ */
+ SDL_MetalView (*Metal_CreateView) (_THIS, SDL_Window * window);
+ void (*Metal_DestroyView) (_THIS, SDL_MetalView view);
+
+ /* * * */
+ /*
* Event manager functions
*/
void (*PumpEvents) (_THIS);
@@ -421,6 +429,7 @@
extern VideoBootStrap VIVANTE_bootstrap;
extern VideoBootStrap Emscripten_bootstrap;
extern VideoBootStrap QNX_bootstrap;
+extern VideoBootStrap OFFSCREEN_bootstrap;
extern SDL_VideoDevice *SDL_GetVideoDevice(void);
extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
@@ -430,6 +439,7 @@
extern SDL_VideoDisplay *SDL_GetDisplay(int displayIndex);
extern SDL_VideoDisplay *SDL_GetDisplayForWindow(SDL_Window *window);
extern void *SDL_GetDisplayDriverData( int displayIndex );
+extern SDL_bool SDL_IsVideoContextExternal(void);
extern void SDL_GL_DeduceMaxSupportedESProfile(int* major, int* minor);
@@ -451,13 +461,6 @@
extern SDL_bool SDL_ShouldAllowTopmost(void);
extern float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches);
-
-extern void SDL_OnApplicationWillTerminate(void);
-extern void SDL_OnApplicationDidReceiveMemoryWarning(void);
-extern void SDL_OnApplicationWillResignActive(void);
-extern void SDL_OnApplicationDidEnterBackground(void);
-extern void SDL_OnApplicationWillEnterForeground(void);
-extern void SDL_OnApplicationDidBecomeActive(void);
extern void SDL_ToggleDragAndDropSupport(void);
--- a/external/SDL2/src/video/SDL_video.c
+++ b/external/SDL2/src/video/SDL_video.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,9 +37,9 @@
#include "SDL_opengl.h"
#endif /* SDL_VIDEO_OPENGL */
-#if SDL_VIDEO_OPENGL_ES
+#if SDL_VIDEO_OPENGL_ES && !SDL_VIDEO_OPENGL
#include "SDL_opengles.h"
-#endif /* SDL_VIDEO_OPENGL_ES */
+#endif /* SDL_VIDEO_OPENGL_ES && !SDL_VIDEO_OPENGL */
/* GL and GLES2 headers conflict on Linux 32 bits */
#if SDL_VIDEO_OPENGL_ES2 && !SDL_VIDEO_OPENGL
@@ -109,6 +109,9 @@
#if SDL_VIDEO_DRIVER_QNX
&QNX_bootstrap,
#endif
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+ &OFFSCREEN_bootstrap,
+#endif
#if SDL_VIDEO_DRIVER_DUMMY
&DUMMY_bootstrap,
#endif
@@ -661,6 +664,12 @@
return _this->displays[displayIndex].driverdata;
}
+SDL_bool
+SDL_IsVideoContextExternal(void)
+{
+ return SDL_GetHintBoolean(SDL_HINT_VIDEO_EXTERNAL_CONTEXT, SDL_FALSE);
+}
+
const char *
SDL_GetDisplayName(int displayIndex)
{
@@ -697,13 +706,25 @@
return 0; /* !!! FIXME: should this be an error if (rect==NULL) ? */
}
-int SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect)
+static int
+ParseDisplayUsableBoundsHint(SDL_Rect *rect)
{
+ const char *hint = SDL_GetHint(SDL_HINT_DISPLAY_USABLE_BOUNDS);
+ return hint && (SDL_sscanf(hint, "%d,%d,%d,%d", &rect->x, &rect->y, &rect->w, &rect->h) == 4);
+}
+
+int
+SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect)
+{
CHECK_DISPLAY_INDEX(displayIndex, -1);
if (rect) {
SDL_VideoDisplay *display = &_this->displays[displayIndex];
+ if ((displayIndex == 0) && ParseDisplayUsableBoundsHint(rect)) {
+ return 0;
+ }
+
if (_this->GetDisplayUsableBounds) {
if (_this->GetDisplayUsableBounds(_this, display, rect) == 0) {
return 0;
@@ -1434,7 +1455,7 @@
/* Some platforms have OpenGL enabled by default */
#if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__
- if (!_this->is_dummy && !(flags & SDL_WINDOW_VULKAN)) {
+ if (!_this->is_dummy && !(flags & SDL_WINDOW_VULKAN) && !SDL_IsVideoContextExternal()) {
flags |= SDL_WINDOW_OPENGL;
}
#endif
@@ -3843,9 +3864,12 @@
#if SDL_VIDEO_DRIVER_X11
#include "x11/SDL_x11messagebox.h"
#endif
+#if SDL_VIDEO_DRIVER_HAIKU
+#include "haiku/SDL_bmessagebox.h"
+#endif
-#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11
+#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11 || SDL_VIDEO_DRIVER_HAIKU
static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype)
{
SDL_SysWMinfo info;
@@ -3938,6 +3962,13 @@
retval = 0;
}
#endif
+#if SDL_VIDEO_DRIVER_HAIKU
+ if (retval == -1 &&
+ SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_HAIKU) &&
+ HAIKU_ShowMessageBox(messageboxdata, buttonid) == 0) {
+ retval = 0;
+ }
+#endif
if (retval == -1) {
SDL_SetError("No message system available");
}
@@ -4180,6 +4211,27 @@
_this->Vulkan_GetDrawableSize(_this, window, w, h);
} else {
SDL_GetWindowSize(window, w, h);
+ }
+}
+
+SDL_MetalView
+SDL_Metal_CreateView(SDL_Window * window)
+{
+ CHECK_WINDOW_MAGIC(window, NULL);
+
+ if (_this->Metal_CreateView) {
+ return _this->Metal_CreateView(_this, window);
+ } else {
+ SDL_SetError("Metal is not supported.");
+ return NULL;
+ }
+}
+
+void
+SDL_Metal_DestroyView(SDL_MetalView view)
+{
+ if (_this && view && _this->Metal_DestroyView) {
+ _this->Metal_DestroyView(_this, view);
}
}
--- a/external/SDL2/src/video/SDL_vulkan_internal.h
+++ b/external/SDL2/src/video/SDL_vulkan_internal.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_vulkan_utils.c
+++ b/external/SDL2/src/video/SDL_vulkan_utils.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/SDL_yuv.c
+++ b/external/SDL2/src/video/SDL_yuv.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -56,6 +56,8 @@
return mode;
}
+#if SDL_HAVE_YUV
+
static int GetYUVConversionType(int width, int height, YCbCrType *yuv_type)
{
switch (SDL_GetYUVConversionModeForResolution(width, height)) {
@@ -1221,6 +1223,7 @@
return SDL_SetError("SDL_ConvertPixels_Planar2x2_to_Planar2x2: Unsupported YUV conversion: %s -> %s", SDL_GetPixelFormatName(src_format), SDL_GetPixelFormatName(dst_format));
}
+#ifdef __SSE2__
#define PACKED4_TO_PACKED4_ROW_SSE2(shuffle) \
while (x >= 4) { \
__m128i yuv = _mm_loadu_si128((__m128i*)srcYUV); \
@@ -1237,6 +1240,8 @@
x -= 4; \
} \
+#endif
+
static int
SDL_ConvertPixels_YUY2_to_UYVY(int width, int height, const void *src, int src_pitch, void *dst, int dst_pitch)
{
@@ -1806,11 +1811,14 @@
return 0;
}
+#endif /* SDL_HAVE_YUV */
+
int
SDL_ConvertPixels_YUV_to_YUV(int width, int height,
Uint32 src_format, const void *src, int src_pitch,
Uint32 dst_format, void *dst, int dst_pitch)
{
+#if SDL_HAVE_YUV
if (src_format == dst_format) {
if (src == dst) {
/* Nothing to do */
@@ -1830,6 +1838,9 @@
} else {
return SDL_SetError("SDL_ConvertPixels_YUV_to_YUV: Unsupported YUV conversion: %s -> %s", SDL_GetPixelFormatName(src_format), SDL_GetPixelFormatName(dst_format));
}
+#else
+ return SDL_SetError("SDL not built with YUV support");
+#endif
}
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/SDL_yuv_c.h
+++ b/external/SDL2/src/video/SDL_yuv_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidclipboard.c
+++ b/external/SDL2/src/video/android/SDL_androidclipboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidclipboard.h
+++ b/external/SDL2/src/video/android/SDL_androidclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidevents.c
+++ b/external/SDL2/src/video/android/SDL_androidevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,6 +26,8 @@
#include "SDL_events.h"
#include "SDL_androidkeyboard.h"
#include "SDL_androidwindow.h"
+#include "../SDL_sysvideo.h"
+#include "../../events/SDL_events_c.h"
/* Can't include sysaudio "../../audio/android/SDL_androidaudio.h"
* because of THIS redefinition */
@@ -66,6 +68,7 @@
event.type = SDL_RENDER_DEVICE_RESET;
SDL_PushEvent(&event);
}
+ data->backup_done = 0;
}
}
@@ -78,6 +81,7 @@
data->egl_context = SDL_GL_GetCurrentContext();
/* We need to do this so the EGLSurface can be freed */
SDL_GL_MakeCurrent(window, NULL);
+ data->backup_done = 1;
}
}
@@ -95,11 +99,14 @@
SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
if (videodata->isPaused) {
+ SDL_bool isContextExternal = SDL_IsVideoContextExternal();
/* Make sure this is the last thing we do before pausing */
- SDL_LockMutex(Android_ActivityMutex);
- android_egl_context_backup(Android_Window);
- SDL_UnlockMutex(Android_ActivityMutex);
+ if (!isContextExternal) {
+ SDL_LockMutex(Android_ActivityMutex);
+ android_egl_context_backup(Android_Window);
+ SDL_UnlockMutex(Android_ActivityMutex);
+ }
ANDROIDAUDIO_PauseDevices();
openslES_PauseDevices();
@@ -108,11 +115,16 @@
videodata->isPaused = 0;
+ /* Android_ResumeSem was signaled */
+ SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND);
+ SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
+ SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0);
+
ANDROIDAUDIO_ResumeDevices();
openslES_ResumeDevices();
/* Restore the GL Context from here, as this operation is thread dependent */
- if (!SDL_HasEvent(SDL_QUIT)) {
+ if (!isContextExternal && !SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_restore(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
@@ -125,6 +137,14 @@
}
} else {
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
+
+ /* Android_PauseSem was signaled */
+ if (videodata->isPausing == 0) {
+ SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
+ SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
+ SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
+ }
+
/* We've been signaled to pause (potentially several times), but before we block ourselves,
* we need to make sure that the very last event (of the first pause sequence, if several)
* has reached the app */
@@ -146,11 +166,14 @@
if (videodata->isPaused) {
+ SDL_bool isContextExternal = SDL_IsVideoContextExternal();
if (backup_context) {
- SDL_LockMutex(Android_ActivityMutex);
- android_egl_context_backup(Android_Window);
- SDL_UnlockMutex(Android_ActivityMutex);
+ if (!isContextExternal) {
+ SDL_LockMutex(Android_ActivityMutex);
+ android_egl_context_backup(Android_Window);
+ SDL_UnlockMutex(Android_ActivityMutex);
+ }
ANDROIDAUDIO_PauseDevices();
openslES_PauseDevices();
@@ -163,11 +186,16 @@
videodata->isPaused = 0;
+ /* Android_ResumeSem was signaled */
+ SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND);
+ SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
+ SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESTORED, 0, 0);
+
ANDROIDAUDIO_ResumeDevices();
openslES_ResumeDevices();
/* Restore the GL Context from here, as this operation is thread dependent */
- if (!SDL_HasEvent(SDL_QUIT)) {
+ if (!isContextExternal && !SDL_HasEvent(SDL_QUIT)) {
SDL_LockMutex(Android_ActivityMutex);
android_egl_context_restore(Android_Window);
SDL_UnlockMutex(Android_ActivityMutex);
@@ -180,6 +208,14 @@
}
} else {
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
+
+ /* Android_PauseSem was signaled */
+ if (videodata->isPausing == 0) {
+ SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
+ SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
+ SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
+ }
+
/* We've been signaled to pause (potentially several times), but before we block ourselves,
* we need to make sure that the very last event (of the first pause sequence, if several)
* has reached the app */
--- a/external/SDL2/src/video/android/SDL_androidevents.h
+++ b/external/SDL2/src/video/android/SDL_androidevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidgl.c
+++ b/external/SDL2/src/video/android/SDL_androidgl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidgl.h
+++ b/external/SDL2/src/video/android/SDL_androidgl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidkeyboard.c
+++ b/external/SDL2/src/video/android/SDL_androidkeyboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidkeyboard.h
+++ b/external/SDL2/src/video/android/SDL_androidkeyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidmessagebox.c
+++ b/external/SDL2/src/video/android/SDL_androidmessagebox.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidmessagebox.h
+++ b/external/SDL2/src/video/android/SDL_androidmessagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidmouse.c
+++ b/external/SDL2/src/video/android/SDL_androidmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidmouse.h
+++ b/external/SDL2/src/video/android/SDL_androidmouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidtouch.c
+++ b/external/SDL2/src/video/android/SDL_androidtouch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -35,8 +35,8 @@
#define ACTION_DOWN 0
#define ACTION_UP 1
#define ACTION_MOVE 2
-#define ACTION_CANCEL 3
-#define ACTION_OUTSIDE 4
+/* #define ACTION_CANCEL 3 */
+/* #define ACTION_OUTSIDE 4 */
#define ACTION_POINTER_DOWN 5
#define ACTION_POINTER_UP 6
@@ -48,7 +48,6 @@
void Android_QuitTouch(void)
{
- return;
}
void Android_OnTouch(SDL_Window *window, int touch_device_id_in, int pointer_finger_id_in, int action, float x, float y, float p)
@@ -69,16 +68,16 @@
switch (action) {
case ACTION_DOWN:
case ACTION_POINTER_DOWN:
- SDL_SendTouch(touchDeviceId, fingerId, SDL_TRUE, x, y, p);
+ SDL_SendTouch(touchDeviceId, fingerId, window, SDL_TRUE, x, y, p);
break;
case ACTION_MOVE:
- SDL_SendTouchMotion(touchDeviceId, fingerId, x, y, p);
+ SDL_SendTouchMotion(touchDeviceId, fingerId, window, x, y, p);
break;
case ACTION_UP:
case ACTION_POINTER_UP:
- SDL_SendTouch(touchDeviceId, fingerId, SDL_FALSE, x, y, p);
+ SDL_SendTouch(touchDeviceId, fingerId, window, SDL_FALSE, x, y, p);
break;
default:
--- a/external/SDL2/src/video/android/SDL_androidtouch.h
+++ b/external/SDL2/src/video/android/SDL_androidtouch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidvideo.c
+++ b/external/SDL2/src/video/android/SDL_androidvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidvideo.h
+++ b/external/SDL2/src/video/android/SDL_androidvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidvulkan.c
+++ b/external/SDL2/src/video/android/SDL_androidvulkan.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -137,7 +137,7 @@
(PFN_vkGetInstanceProcAddr)_this->vulkan_config.vkGetInstanceProcAddr;
PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR =
(PFN_vkCreateAndroidSurfaceKHR)vkGetInstanceProcAddr(
- (VkInstance)instance,
+ instance,
"vkCreateAndroidSurfaceKHR");
VkAndroidSurfaceCreateInfoKHR createInfo;
VkResult result;
--- a/external/SDL2/src/video/android/SDL_androidvulkan.h
+++ b/external/SDL2/src/video/android/SDL_androidvulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/android/SDL_androidwindow.c
+++ b/external/SDL2/src/video/android/SDL_androidwindow.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -58,7 +58,6 @@
window->w = Android_SurfaceWidth;
window->h = Android_SurfaceHeight;
- window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */
window->flags &= ~SDL_WINDOW_HIDDEN;
window->flags |= SDL_WINDOW_SHOWN; /* only one window on Android */
@@ -82,7 +81,7 @@
/* Do not create EGLSurface for Vulkan window since it will then make the window
incompatible with vkCreateAndroidSurfaceKHR */
- if ((window->flags & SDL_WINDOW_VULKAN) == 0) {
+ if ((window->flags & SDL_WINDOW_OPENGL) != 0) {
data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window);
if (data->egl_surface == EGL_NO_SURFACE) {
--- a/external/SDL2/src/video/android/SDL_androidwindow.h
+++ b/external/SDL2/src/video/android/SDL_androidwindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -39,6 +39,7 @@
{
EGLSurface egl_surface;
EGLContext egl_context; /* We use this to preserve the context when losing focus */
+ SDL_bool backup_done;
ANativeWindow *native_window;
} SDL_WindowData;
--- /dev/null
+++ b/external/SDL2/src/video/arm/pixman-arm-asm.h
@@ -1,0 +1,36 @@
+/*
+ * Copyright © 2010 Nokia Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Mozilla Corporation not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Mozilla Corporation makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
+ *
+ */
+
+/* Supplementary macro for setting function attributes */
+.macro pixman_asm_function fname
+ .func fname
+ .global fname
+#ifdef __ELF__
+ .hidden fname
+ .type fname, %function
+#endif
+fname:
+.endm
--- /dev/null
+++ b/external/SDL2/src/video/arm/pixman-arm-neon-asm.S
@@ -1,0 +1,375 @@
+/*
+ * Copyright © 2009 Nokia Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
+ */
+
+/*
+ * Copyright (c) 2018 RISC OS Open Ltd
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/* Prevent the stack from becoming executable for no reason... */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+ .text
+ .fpu neon
+ .arch armv7a
+ .object_arch armv4
+ .eabi_attribute 10, 0 /* suppress Tag_FP_arch */
+ .eabi_attribute 12, 0 /* suppress Tag_Advanced_SIMD_arch */
+ .arm
+ .altmacro
+ .p2align 2
+
+#include "pixman-arm-asm.h"
+#include "pixman-arm-neon-asm.h"
+
+/* Global configuration options and preferences */
+
+/*
+ * The code can optionally make use of unaligned memory accesses to improve
+ * performance of handling leading/trailing pixels for each scanline.
+ * Configuration variable RESPECT_STRICT_ALIGNMENT can be set to 0 for
+ * example in linux if unaligned memory accesses are not configured to
+ * generate.exceptions.
+ */
+.set RESPECT_STRICT_ALIGNMENT, 1
+
+/*
+ * Set default prefetch type. There is a choice between the following options:
+ *
+ * PREFETCH_TYPE_NONE (may be useful for the ARM cores where PLD is set to work
+ * as NOP to workaround some HW bugs or for whatever other reason)
+ *
+ * PREFETCH_TYPE_SIMPLE (may be useful for simple single-issue ARM cores where
+ * advanced prefetch intruduces heavy overhead)
+ *
+ * PREFETCH_TYPE_ADVANCED (useful for superscalar cores such as ARM Cortex-A8
+ * which can run ARM and NEON instructions simultaneously so that extra ARM
+ * instructions do not add (many) extra cycles, but improve prefetch efficiency)
+ *
+ * Note: some types of function can't support advanced prefetch and fallback
+ * to simple one (those which handle 24bpp pixels)
+ */
+.set PREFETCH_TYPE_DEFAULT, PREFETCH_TYPE_ADVANCED
+
+/* Prefetch distance in pixels for simple prefetch */
+.set PREFETCH_DISTANCE_SIMPLE, 64
+
+/******************************************************************************/
+
+/* We can actually do significantly better than the Pixman macros, at least for
+ * the case of fills, by using a carefully scheduled inner loop. Cortex-A53
+ * shows an improvement of up to 78% in ideal cases (large fills to L1 cache).
+ */
+
+.macro generate_fillrect_function name, bpp, log2Bpp
+/*
+ * void name(int32_t w, int32_t h, uint8_t *dst, int32_t dst_stride, uint8_t src);
+ * On entry:
+ * a1 = width, pixels
+ * a2 = height, rows
+ * a3 = pointer to top-left destination pixel
+ * a4 = stride, pixels
+ * [sp] = pixel value to fill with
+ * Within the function:
+ * v1 = width remaining
+ * v2 = vst offset
+ * v3 = alternate pointer
+ * ip = data ARM register
+ */
+pixman_asm_function name
+ vld1.\bpp {d0[],d1[]}, [sp]
+ sub a4, a1
+ vld1.\bpp {d2[],d3[]}, [sp]
+ cmp a1, #(15+64) >> \log2Bpp
+ push {v1-v3,lr}
+ vmov ip, s0
+ blo 51f
+
+ /* Long-row case */
+ mov v2, #64
+1: mov v1, a1
+ ands v3, a3, #15
+ beq 2f
+ /* Leading pixels */
+ rsb v3, v3, #16 /* number of leading bytes until 16-byte aligned */
+ sub v1, v1, v3, lsr #\log2Bpp
+ rbit v3, v3
+.if bpp <= 16
+.if bpp == 8
+ tst a3, #1 /* bit 0 unaffected by rsb so can avoid register interlock */
+ strneb ip, [a3], #1
+ tst v3, #1<<30
+.else
+ tst a3, #2 /* bit 1 unaffected by rsb (assuming halfword alignment) so can avoid register interlock */
+.endif
+ strneh ip, [a3], #2
+.endif
+ movs v3, v3, lsl #3
+ vstmcs a3!, {s0}
+ vstmmi a3!, {d0}
+2: sub v1, v1, #64 >> \log2Bpp /* simplifies inner loop termination */
+ add v3, a3, #32
+ /* Inner loop */
+3: vst1.\bpp {q0-q1}, [a3 :128], v2
+ subs v1, v1, #64 >> \log2Bpp
+ vst1.\bpp {q0-q1}, [v3 :128], v2
+ bhs 3b
+ /* Trailing pixels */
+4: movs v1, v1, lsl #27 + \log2Bpp
+ bcc 5f
+ vst1.\bpp {q0-q1}, [a3 :128]!
+5: bpl 6f
+ vst1.\bpp {q0}, [a3 :128]!
+6: movs v1, v1, lsl #2
+ vstmcs a3!, {d0}
+ vstmmi a3!, {s0}
+.if bpp <= 16
+ movs v1, v1, lsl #2
+ strcsh ip, [a3], #2
+.if bpp == 8
+ strmib ip, [a3], #1
+.endif
+.endif
+ subs a2, a2, #1
+ add a3, a3, a4, lsl #\log2Bpp
+ bhi 1b
+ pop {v1-v3,pc}
+
+ /* Short-row case */
+51: movs v1, a1
+.if bpp == 8
+ tst a3, #3
+ beq 53f
+52: subs v1, v1, #1
+ blo 57f
+ strb ip, [a3], #1
+ tst a3, #3
+ bne 52b
+.elseif bpp == 16
+ tstne a3, #2
+ subne v1, v1, #1
+ strneh ip, [a3], #2
+.endif
+53: cmp v1, #32 >> \log2Bpp
+ bcc 54f
+ vst1.\bpp {q0-q1}, [a3]!
+ sub v1, v1, #32 >> \log2Bpp
+ /* Trailing pixels */
+54: movs v1, v1, lsl #27 + \log2Bpp
+ bcc 55f
+ vst1.\bpp {q0-q1}, [a3]!
+55: bpl 56f
+ vst1.\bpp {q0}, [a3]!
+56: movs v1, v1, lsl #2
+ vstmcs a3!, {d0}
+ vstmmi a3!, {s0}
+.if bpp <= 16
+ movs v1, v1, lsl #2
+ strcsh ip, [a3], #2
+.if bpp == 8
+ strmib ip, [a3], #1
+.endif
+.endif
+ subs a2, a2, #1
+ add a3, a3, a4, lsl #\log2Bpp
+ bhi 51b
+57: pop {v1-v3,pc}
+
+.endfunc
+.endm
+
+generate_fillrect_function FillRect32ARMNEONAsm, 32, 2
+generate_fillrect_function FillRect16ARMNEONAsm, 16, 1
+generate_fillrect_function FillRect8ARMNEONAsm, 8, 0
+
+/******************************************************************************/
+
+.macro RGBtoRGBPixelAlpha_process_pixblock_head
+ vmvn d30, d3 /* get inverted source alpha */
+ vmov d31, d7 /* dest alpha is always unchanged */
+ vmull.u8 q14, d0, d3
+ vmlal.u8 q14, d4, d30
+ vmull.u8 q0, d1, d3
+ vmlal.u8 q0, d5, d30
+ vmull.u8 q1, d2, d3
+ vmlal.u8 q1, d6, d30
+ vrshr.u16 q2, q14, #8
+ vrshr.u16 q3, q0, #8
+ vraddhn.u16 d28, q14, q2
+ vrshr.u16 q2, q1, #8
+ vraddhn.u16 d29, q0, q3
+ vraddhn.u16 d30, q1, q2
+.endm
+
+.macro RGBtoRGBPixelAlpha_process_pixblock_tail
+ /* nothing */
+.endm
+
+.macro RGBtoRGBPixelAlpha_process_pixblock_tail_head
+ vld4.8 {d0-d3}, [SRC]!
+ PF add PF_X, PF_X, #8
+ vst4.8 {d28-d31}, [DST_W :128]!
+ PF tst PF_CTL, #0xF
+ vld4.8 {d4-d7}, [DST_R :128]!
+ PF addne PF_X, PF_X, #8
+ vmvn d30, d3 /* get inverted source alpha */
+ vmov d31, d7 /* dest alpha is always unchanged */
+ vmull.u8 q14, d0, d3
+ PF subne PF_CTL, PF_CTL, #1
+ vmlal.u8 q14, d4, d30
+ PF cmp PF_X, ORIG_W
+ vmull.u8 q0, d1, d3
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmlal.u8 q0, d5, d30
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vmull.u8 q1, d2, d3
+ PF subge PF_X, PF_X, ORIG_W
+ vmlal.u8 q1, d6, d30
+ PF subges PF_CTL, PF_CTL, #0x10
+ vrshr.u16 q2, q14, #8
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vrshr.u16 q3, q0, #8
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vraddhn.u16 d28, q14, q2
+ vrshr.u16 q2, q1, #8
+ vraddhn.u16 d29, q0, q3
+ vraddhn.u16 d30, q1, q2
+.endm
+
+generate_composite_function \
+ BlitRGBtoRGBPixelAlphaARMNEONAsm, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 5, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ RGBtoRGBPixelAlpha_process_pixblock_head, \
+ RGBtoRGBPixelAlpha_process_pixblock_tail, \
+ RGBtoRGBPixelAlpha_process_pixblock_tail_head
+
+ /******************************************************************************/
+
+.macro ARGBto565PixelAlpha_process_pixblock_head
+ vmvn d6, d3
+ vshr.u8 d1, #2
+ vshr.u8 d3, #3
+ vshr.u8 d0, #3
+ vshrn.u16 d7, q2, #3
+ vshrn.u16 d25, q2, #8
+ vbic.i16 q2, #0xe0
+ vshr.u8 d6, #3
+ vshr.u8 d7, #2
+ vshr.u8 d2, #3
+ vmovn.u16 d24, q2
+ vshr.u8 d25, #3
+ vmull.u8 q13, d1, d3
+ vmlal.u8 q13, d7, d6
+ vmull.u8 q14, d0, d3
+ vmlal.u8 q14, d24, d6
+ vmull.u8 q15, d2, d3
+ vmlal.u8 q15, d25, d6
+.endm
+
+.macro ARGBto565PixelAlpha_process_pixblock_tail
+ vsra.u16 q13, #5
+ vsra.u16 q14, #5
+ vsra.u16 q15, #5
+ vrshr.u16 q13, #5
+ vrshr.u16 q14, #5
+ vrshr.u16 q15, #5
+ vsli.u16 q14, q13, #5
+ vsli.u16 q14, q15, #11
+.endm
+
+.macro ARGBto565PixelAlpha_process_pixblock_tail_head
+ vld4.8 {d0-d3}, [SRC]!
+ PF add PF_X, PF_X, #8
+ vsra.u16 q13, #5
+ PF tst PF_CTL, #0xF
+ vsra.u16 q14, #5
+ PF addne PF_X, PF_X, #8
+ vsra.u16 q15, #5
+ PF subne PF_CTL, PF_CTL, #1
+ vrshr.u16 q13, #5
+ PF cmp PF_X, ORIG_W
+ vrshr.u16 q14, #5
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vrshr.u16 q15, #5
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vld1.8 {d4-d5}, [DST_R]!
+ PF subge PF_X, PF_X, ORIG_W
+ vsli.u16 q14, q13, #5
+ PF subges PF_CTL, PF_CTL, #0x10
+ vsli.u16 q14, q15, #11
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vst1.8 {q14}, [DST_W :128]!
+ vmvn d6, d3
+ vshr.u8 d1, #2
+ vshr.u8 d3, #3
+ vshr.u8 d0, #3
+ vshrn.u16 d7, q2, #3
+ vshrn.u16 d25, q2, #8
+ vbic.i16 q2, #0xe0
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vshr.u8 d6, #3
+ vshr.u8 d7, #2
+ vshr.u8 d2, #3
+ vmovn.u16 d24, q2
+ vshr.u8 d25, #3
+ vmull.u8 q13, d1, d3
+ vmlal.u8 q13, d7, d6
+ vmull.u8 q14, d0, d3
+ vmlal.u8 q14, d24, d6
+ vmull.u8 q15, d2, d3
+ vmlal.u8 q15, d25, d6
+.endm
+
+generate_composite_function \
+ BlitARGBto565PixelAlphaARMNEONAsm, 32, 0, 16, \
+ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
+ 8, /* number of pixels, processed in a single block */ \
+ 6, /* prefetch distance */ \
+ default_init, \
+ default_cleanup, \
+ ARGBto565PixelAlpha_process_pixblock_head, \
+ ARGBto565PixelAlpha_process_pixblock_tail, \
+ ARGBto565PixelAlpha_process_pixblock_tail_head
--- /dev/null
+++ b/external/SDL2/src/video/arm/pixman-arm-neon-asm.h
@@ -1,0 +1,1184 @@
+/*
+ * Copyright © 2009 Nokia Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Siarhei Siamashka (siarhei.siamashka@nokia.com)
+ */
+
+/*
+ * This file contains a macro ('generate_composite_function') which can
+ * construct 2D image processing functions, based on a common template.
+ * Any combinations of source, destination and mask images with 8bpp,
+ * 16bpp, 24bpp, 32bpp color formats are supported.
+ *
+ * This macro takes care of:
+ * - handling of leading and trailing unaligned pixels
+ * - doing most of the work related to L2 cache preload
+ * - encourages the use of software pipelining for better instructions
+ * scheduling
+ *
+ * The user of this macro has to provide some configuration parameters
+ * (bit depths for the images, prefetch distance, etc.) and a set of
+ * macros, which should implement basic code chunks responsible for
+ * pixels processing. See 'pixman-arm-neon-asm.S' file for the usage
+ * examples.
+ *
+ * TODO:
+ * - try overlapped pixel method (from Ian Rickards) when processing
+ * exactly two blocks of pixels
+ * - maybe add an option to do reverse scanline processing
+ */
+
+/*
+ * Bit flags for 'generate_composite_function' macro which are used
+ * to tune generated functions behavior.
+ */
+.set FLAG_DST_WRITEONLY, 0
+.set FLAG_DST_READWRITE, 1
+.set FLAG_DEINTERLEAVE_32BPP, 2
+
+/*
+ * Offset in stack where mask and source pointer/stride can be accessed
+ * from 'init' macro. This is useful for doing special handling for solid mask.
+ */
+.set ARGS_STACK_OFFSET, 40
+
+/*
+ * Constants for selecting preferable prefetch type.
+ */
+.set PREFETCH_TYPE_NONE, 0 /* No prefetch at all */
+.set PREFETCH_TYPE_SIMPLE, 1 /* A simple, fixed-distance-ahead prefetch */
+.set PREFETCH_TYPE_ADVANCED, 2 /* Advanced fine-grained prefetch */
+
+/*
+ * Definitions of supplementary pixld/pixst macros (for partial load/store of
+ * pixel data).
+ */
+
+.macro pixldst1 op, elem_size, reg1, mem_operand, abits
+.if abits > 0
+ op&.&elem_size {d®1}, [&mem_operand&, :&abits&]!
+.else
+ op&.&elem_size {d®1}, [&mem_operand&]!
+.endif
+.endm
+
+.macro pixldst2 op, elem_size, reg1, reg2, mem_operand, abits
+.if abits > 0
+ op&.&elem_size {d®1, d®2}, [&mem_operand&, :&abits&]!
+.else
+ op&.&elem_size {d®1, d®2}, [&mem_operand&]!
+.endif
+.endm
+
+.macro pixldst4 op, elem_size, reg1, reg2, reg3, reg4, mem_operand, abits
+.if abits > 0
+ op&.&elem_size {d®1, d®2, d®3, d®4}, [&mem_operand&, :&abits&]!
+.else
+ op&.&elem_size {d®1, d®2, d®3, d®4}, [&mem_operand&]!
+.endif
+.endm
+
+.macro pixldst0 op, elem_size, reg1, idx, mem_operand, abits
+ op&.&elem_size {d®1[idx]}, [&mem_operand&]!
+.endm
+
+.macro pixldst3 op, elem_size, reg1, reg2, reg3, mem_operand
+ op&.&elem_size {d®1, d®2, d®3}, [&mem_operand&]!
+.endm
+
+.macro pixldst30 op, elem_size, reg1, reg2, reg3, idx, mem_operand
+ op&.&elem_size {d®1[idx], d®2[idx], d®3[idx]}, [&mem_operand&]!
+.endm
+
+.macro pixldst numbytes, op, elem_size, basereg, mem_operand, abits
+.if numbytes == 32
+ pixldst4 op, elem_size, %(basereg+4), %(basereg+5), \
+ %(basereg+6), %(basereg+7), mem_operand, abits
+.elseif numbytes == 16
+ pixldst2 op, elem_size, %(basereg+2), %(basereg+3), mem_operand, abits
+.elseif numbytes == 8
+ pixldst1 op, elem_size, %(basereg+1), mem_operand, abits
+.elseif numbytes == 4
+ .if !RESPECT_STRICT_ALIGNMENT || (elem_size == 32)
+ pixldst0 op, 32, %(basereg+0), 1, mem_operand, abits
+ .elseif elem_size == 16
+ pixldst0 op, 16, %(basereg+0), 2, mem_operand, abits
+ pixldst0 op, 16, %(basereg+0), 3, mem_operand, abits
+ .else
+ pixldst0 op, 8, %(basereg+0), 4, mem_operand, abits
+ pixldst0 op, 8, %(basereg+0), 5, mem_operand, abits
+ pixldst0 op, 8, %(basereg+0), 6, mem_operand, abits
+ pixldst0 op, 8, %(basereg+0), 7, mem_operand, abits
+ .endif
+.elseif numbytes == 2
+ .if !RESPECT_STRICT_ALIGNMENT || (elem_size == 16)
+ pixldst0 op, 16, %(basereg+0), 1, mem_operand, abits
+ .else
+ pixldst0 op, 8, %(basereg+0), 2, mem_operand, abits
+ pixldst0 op, 8, %(basereg+0), 3, mem_operand, abits
+ .endif
+.elseif numbytes == 1
+ pixldst0 op, 8, %(basereg+0), 1, mem_operand, abits
+.else
+ .error "unsupported size: numbytes"
+.endif
+.endm
+
+.macro pixld numpix, bpp, basereg, mem_operand, abits=0
+.if bpp > 0
+.if (bpp == 32) && (numpix == 8) && (DEINTERLEAVE_32BPP_ENABLED != 0)
+ pixldst4 vld4, 8, %(basereg+4), %(basereg+5), \
+ %(basereg+6), %(basereg+7), mem_operand, abits
+.elseif (bpp == 24) && (numpix == 8)
+ pixldst3 vld3, 8, %(basereg+3), %(basereg+4), %(basereg+5), mem_operand
+.elseif (bpp == 24) && (numpix == 4)
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 4, mem_operand
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 5, mem_operand
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 6, mem_operand
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 7, mem_operand
+.elseif (bpp == 24) && (numpix == 2)
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 2, mem_operand
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 3, mem_operand
+.elseif (bpp == 24) && (numpix == 1)
+ pixldst30 vld3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 1, mem_operand
+.else
+ pixldst %(numpix * bpp / 8), vld1, %(bpp), basereg, mem_operand, abits
+.endif
+.endif
+.endm
+
+.macro pixst numpix, bpp, basereg, mem_operand, abits=0
+.if bpp > 0
+.if (bpp == 32) && (numpix == 8) && (DEINTERLEAVE_32BPP_ENABLED != 0)
+ pixldst4 vst4, 8, %(basereg+4), %(basereg+5), \
+ %(basereg+6), %(basereg+7), mem_operand, abits
+.elseif (bpp == 24) && (numpix == 8)
+ pixldst3 vst3, 8, %(basereg+3), %(basereg+4), %(basereg+5), mem_operand
+.elseif (bpp == 24) && (numpix == 4)
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 4, mem_operand
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 5, mem_operand
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 6, mem_operand
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 7, mem_operand
+.elseif (bpp == 24) && (numpix == 2)
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 2, mem_operand
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 3, mem_operand
+.elseif (bpp == 24) && (numpix == 1)
+ pixldst30 vst3, 8, %(basereg+0), %(basereg+1), %(basereg+2), 1, mem_operand
+.else
+ pixldst %(numpix * bpp / 8), vst1, %(bpp), basereg, mem_operand, abits
+.endif
+.endif
+.endm
+
+.macro pixld_a numpix, bpp, basereg, mem_operand
+.if (bpp * numpix) <= 128
+ pixld numpix, bpp, basereg, mem_operand, %(bpp * numpix)
+.else
+ pixld numpix, bpp, basereg, mem_operand, 128
+.endif
+.endm
+
+.macro pixst_a numpix, bpp, basereg, mem_operand
+.if (bpp * numpix) <= 128
+ pixst numpix, bpp, basereg, mem_operand, %(bpp * numpix)
+.else
+ pixst numpix, bpp, basereg, mem_operand, 128
+.endif
+.endm
+
+/*
+ * Pixel fetcher for nearest scaling (needs TMP1, TMP2, VX, UNIT_X register
+ * aliases to be defined)
+ */
+.macro pixld1_s elem_size, reg1, mem_operand
+.if elem_size == 16
+ mov TMP1, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP1, mem_operand, TMP1, asl #1
+ mov TMP2, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP2, mem_operand, TMP2, asl #1
+ vld1.16 {d®1&[0]}, [TMP1, :16]
+ mov TMP1, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP1, mem_operand, TMP1, asl #1
+ vld1.16 {d®1&[1]}, [TMP2, :16]
+ mov TMP2, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP2, mem_operand, TMP2, asl #1
+ vld1.16 {d®1&[2]}, [TMP1, :16]
+ vld1.16 {d®1&[3]}, [TMP2, :16]
+.elseif elem_size == 32
+ mov TMP1, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP1, mem_operand, TMP1, asl #2
+ mov TMP2, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP2, mem_operand, TMP2, asl #2
+ vld1.32 {d®1&[0]}, [TMP1, :32]
+ vld1.32 {d®1&[1]}, [TMP2, :32]
+.else
+ .error "unsupported"
+.endif
+.endm
+
+.macro pixld2_s elem_size, reg1, reg2, mem_operand
+.if 0 /* elem_size == 32 */
+ mov TMP1, VX, asr #16
+ add VX, VX, UNIT_X, asl #1
+ add TMP1, mem_operand, TMP1, asl #2
+ mov TMP2, VX, asr #16
+ sub VX, VX, UNIT_X
+ add TMP2, mem_operand, TMP2, asl #2
+ vld1.32 {d®1&[0]}, [TMP1, :32]
+ mov TMP1, VX, asr #16
+ add VX, VX, UNIT_X, asl #1
+ add TMP1, mem_operand, TMP1, asl #2
+ vld1.32 {d®2&[0]}, [TMP2, :32]
+ mov TMP2, VX, asr #16
+ add VX, VX, UNIT_X
+ add TMP2, mem_operand, TMP2, asl #2
+ vld1.32 {d®1&[1]}, [TMP1, :32]
+ vld1.32 {d®2&[1]}, [TMP2, :32]
+.else
+ pixld1_s elem_size, reg1, mem_operand
+ pixld1_s elem_size, reg2, mem_operand
+.endif
+.endm
+
+.macro pixld0_s elem_size, reg1, idx, mem_operand
+.if elem_size == 16
+ mov TMP1, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP1, mem_operand, TMP1, asl #1
+ vld1.16 {d®1&[idx]}, [TMP1, :16]
+.elseif elem_size == 32
+ mov TMP1, VX, asr #16
+ adds VX, VX, UNIT_X
+5: subpls VX, VX, SRC_WIDTH_FIXED
+ bpl 5b
+ add TMP1, mem_operand, TMP1, asl #2
+ vld1.32 {d®1&[idx]}, [TMP1, :32]
+.endif
+.endm
+
+.macro pixld_s_internal numbytes, elem_size, basereg, mem_operand
+.if numbytes == 32
+ pixld2_s elem_size, %(basereg+4), %(basereg+5), mem_operand
+ pixld2_s elem_size, %(basereg+6), %(basereg+7), mem_operand
+ pixdeinterleave elem_size, %(basereg+4)
+.elseif numbytes == 16
+ pixld2_s elem_size, %(basereg+2), %(basereg+3), mem_operand
+.elseif numbytes == 8
+ pixld1_s elem_size, %(basereg+1), mem_operand
+.elseif numbytes == 4
+ .if elem_size == 32
+ pixld0_s elem_size, %(basereg+0), 1, mem_operand
+ .elseif elem_size == 16
+ pixld0_s elem_size, %(basereg+0), 2, mem_operand
+ pixld0_s elem_size, %(basereg+0), 3, mem_operand
+ .else
+ pixld0_s elem_size, %(basereg+0), 4, mem_operand
+ pixld0_s elem_size, %(basereg+0), 5, mem_operand
+ pixld0_s elem_size, %(basereg+0), 6, mem_operand
+ pixld0_s elem_size, %(basereg+0), 7, mem_operand
+ .endif
+.elseif numbytes == 2
+ .if elem_size == 16
+ pixld0_s elem_size, %(basereg+0), 1, mem_operand
+ .else
+ pixld0_s elem_size, %(basereg+0), 2, mem_operand
+ pixld0_s elem_size, %(basereg+0), 3, mem_operand
+ .endif
+.elseif numbytes == 1
+ pixld0_s elem_size, %(basereg+0), 1, mem_operand
+.else
+ .error "unsupported size: numbytes"
+.endif
+.endm
+
+.macro pixld_s numpix, bpp, basereg, mem_operand
+.if bpp > 0
+ pixld_s_internal %(numpix * bpp / 8), %(bpp), basereg, mem_operand
+.endif
+.endm
+
+.macro vuzp8 reg1, reg2
+ vuzp.8 d®1, d®2
+.endm
+
+.macro vzip8 reg1, reg2
+ vzip.8 d®1, d®2
+.endm
+
+/* deinterleave B, G, R, A channels for eight 32bpp pixels in 4 registers */
+.macro pixdeinterleave bpp, basereg
+.if (bpp == 32) && (DEINTERLEAVE_32BPP_ENABLED != 0)
+ vuzp8 %(basereg+0), %(basereg+1)
+ vuzp8 %(basereg+2), %(basereg+3)
+ vuzp8 %(basereg+1), %(basereg+3)
+ vuzp8 %(basereg+0), %(basereg+2)
+.endif
+.endm
+
+/* interleave B, G, R, A channels for eight 32bpp pixels in 4 registers */
+.macro pixinterleave bpp, basereg
+.if (bpp == 32) && (DEINTERLEAVE_32BPP_ENABLED != 0)
+ vzip8 %(basereg+0), %(basereg+2)
+ vzip8 %(basereg+1), %(basereg+3)
+ vzip8 %(basereg+2), %(basereg+3)
+ vzip8 %(basereg+0), %(basereg+1)
+.endif
+.endm
+
+/*
+ * This is a macro for implementing cache preload. The main idea is that
+ * cache preload logic is mostly independent from the rest of pixels
+ * processing code. It starts at the top left pixel and moves forward
+ * across pixels and can jump across scanlines. Prefetch distance is
+ * handled in an 'incremental' way: it starts from 0 and advances to the
+ * optimal distance over time. After reaching optimal prefetch distance,
+ * it is kept constant. There are some checks which prevent prefetching
+ * unneeded pixel lines below the image (but it still can prefetch a bit
+ * more data on the right side of the image - not a big issue and may
+ * be actually helpful when rendering text glyphs). Additional trick is
+ * the use of LDR instruction for prefetch instead of PLD when moving to
+ * the next line, the point is that we have a high chance of getting TLB
+ * miss in this case, and PLD would be useless.
+ *
+ * This sounds like it may introduce a noticeable overhead (when working with
+ * fully cached data). But in reality, due to having a separate pipeline and
+ * instruction queue for NEON unit in ARM Cortex-A8, normal ARM code can
+ * execute simultaneously with NEON and be completely shadowed by it. Thus
+ * we get no performance overhead at all (*). This looks like a very nice
+ * feature of Cortex-A8, if used wisely. We don't have a hardware prefetcher,
+ * but still can implement some rather advanced prefetch logic in software
+ * for almost zero cost!
+ *
+ * (*) The overhead of the prefetcher is visible when running some trivial
+ * pixels processing like simple copy. Anyway, having prefetch is a must
+ * when working with the graphics data.
+ */
+.macro PF a, x:vararg
+.if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_ADVANCED)
+ a x
+.endif
+.endm
+
+.macro cache_preload std_increment, boost_increment
+.if (src_bpp_shift >= 0) || (dst_r_bpp != 0) || (mask_bpp_shift >= 0)
+.if regs_shortage
+ PF ldr ORIG_W, [sp] /* If we are short on regs, ORIG_W is kept on stack */
+.endif
+.if std_increment != 0
+ PF add PF_X, PF_X, #std_increment
+.endif
+ PF tst PF_CTL, #0xF
+ PF addne PF_X, PF_X, #boost_increment
+ PF subne PF_CTL, PF_CTL, #1
+ PF cmp PF_X, ORIG_W
+.if src_bpp_shift >= 0
+ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+.endif
+.if dst_r_bpp != 0
+ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+.endif
+.if mask_bpp_shift >= 0
+ PF pld, [PF_MASK, PF_X, lsl #mask_bpp_shift]
+.endif
+ PF subge PF_X, PF_X, ORIG_W
+ PF subges PF_CTL, PF_CTL, #0x10
+.if src_bpp_shift >= 0
+ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+.endif
+.if dst_r_bpp != 0
+ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+.endif
+.if mask_bpp_shift >= 0
+ PF ldrgeb DUMMY, [PF_MASK, MASK_STRIDE, lsl #mask_bpp_shift]!
+.endif
+.endif
+.endm
+
+.macro cache_preload_simple
+.if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_SIMPLE)
+.if src_bpp > 0
+ pld [SRC, #(PREFETCH_DISTANCE_SIMPLE * src_bpp / 8)]
+.endif
+.if dst_r_bpp > 0
+ pld [DST_R, #(PREFETCH_DISTANCE_SIMPLE * dst_r_bpp / 8)]
+.endif
+.if mask_bpp > 0
+ pld [MASK, #(PREFETCH_DISTANCE_SIMPLE * mask_bpp / 8)]
+.endif
+.endif
+.endm
+
+.macro fetch_mask_pixblock
+ pixld pixblock_size, mask_bpp, \
+ (mask_basereg - pixblock_size * mask_bpp / 64), MASK
+.endm
+
+/*
+ * Macro which is used to process leading pixels until destination
+ * pointer is properly aligned (at 16 bytes boundary). When destination
+ * buffer uses 16bpp format, this is unnecessary, or even pointless.
+ */
+.macro ensure_destination_ptr_alignment process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+.if dst_w_bpp != 24
+ tst DST_R, #0xF
+ beq 2f
+
+.irp lowbit, 1, 2, 4, 8, 16
+local skip1
+.if (dst_w_bpp <= (lowbit * 8)) && ((lowbit * 8) < (pixblock_size * dst_w_bpp))
+.if lowbit < 16 /* we don't need more than 16-byte alignment */
+ tst DST_R, #lowbit
+ beq 1f
+.endif
+ pixld_src (lowbit * 8 / dst_w_bpp), src_bpp, src_basereg, SRC
+ pixld (lowbit * 8 / dst_w_bpp), mask_bpp, mask_basereg, MASK
+.if dst_r_bpp > 0
+ pixld_a (lowbit * 8 / dst_r_bpp), dst_r_bpp, dst_r_basereg, DST_R
+.else
+ add DST_R, DST_R, #lowbit
+.endif
+ PF add PF_X, PF_X, #(lowbit * 8 / dst_w_bpp)
+ sub W, W, #(lowbit * 8 / dst_w_bpp)
+1:
+.endif
+.endr
+ pixdeinterleave src_bpp, src_basereg
+ pixdeinterleave mask_bpp, mask_basereg
+ pixdeinterleave dst_r_bpp, dst_r_basereg
+
+ process_pixblock_head
+ cache_preload 0, pixblock_size
+ cache_preload_simple
+ process_pixblock_tail
+
+ pixinterleave dst_w_bpp, dst_w_basereg
+.irp lowbit, 1, 2, 4, 8, 16
+.if (dst_w_bpp <= (lowbit * 8)) && ((lowbit * 8) < (pixblock_size * dst_w_bpp))
+.if lowbit < 16 /* we don't need more than 16-byte alignment */
+ tst DST_W, #lowbit
+ beq 1f
+.endif
+ pixst_a (lowbit * 8 / dst_w_bpp), dst_w_bpp, dst_w_basereg, DST_W
+1:
+.endif
+.endr
+.endif
+2:
+.endm
+
+/*
+ * Special code for processing up to (pixblock_size - 1) remaining
+ * trailing pixels. As SIMD processing performs operation on
+ * pixblock_size pixels, anything smaller than this has to be loaded
+ * and stored in a special way. Loading and storing of pixel data is
+ * performed in such a way that we fill some 'slots' in the NEON
+ * registers (some slots naturally are unused), then perform compositing
+ * operation as usual. In the end, the data is taken from these 'slots'
+ * and saved to memory.
+ *
+ * cache_preload_flag - allows to suppress prefetch if
+ * set to 0
+ * dst_aligned_flag - selects whether destination buffer
+ * is aligned
+ */
+.macro process_trailing_pixels cache_preload_flag, \
+ dst_aligned_flag, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+ tst W, #(pixblock_size - 1)
+ beq 2f
+.irp chunk_size, 16, 8, 4, 2, 1
+.if pixblock_size > chunk_size
+ tst W, #chunk_size
+ beq 1f
+ pixld_src chunk_size, src_bpp, src_basereg, SRC
+ pixld chunk_size, mask_bpp, mask_basereg, MASK
+.if dst_aligned_flag != 0
+ pixld_a chunk_size, dst_r_bpp, dst_r_basereg, DST_R
+.else
+ pixld chunk_size, dst_r_bpp, dst_r_basereg, DST_R
+.endif
+.if cache_preload_flag != 0
+ PF add PF_X, PF_X, #chunk_size
+.endif
+1:
+.endif
+.endr
+ pixdeinterleave src_bpp, src_basereg
+ pixdeinterleave mask_bpp, mask_basereg
+ pixdeinterleave dst_r_bpp, dst_r_basereg
+
+ process_pixblock_head
+.if cache_preload_flag != 0
+ cache_preload 0, pixblock_size
+ cache_preload_simple
+.endif
+ process_pixblock_tail
+ pixinterleave dst_w_bpp, dst_w_basereg
+.irp chunk_size, 16, 8, 4, 2, 1
+.if pixblock_size > chunk_size
+ tst W, #chunk_size
+ beq 1f
+.if dst_aligned_flag != 0
+ pixst_a chunk_size, dst_w_bpp, dst_w_basereg, DST_W
+.else
+ pixst chunk_size, dst_w_bpp, dst_w_basereg, DST_W
+.endif
+1:
+.endif
+.endr
+2:
+.endm
+
+/*
+ * Macro, which performs all the needed operations to switch to the next
+ * scanline and start the next loop iteration unless all the scanlines
+ * are already processed.
+ */
+.macro advance_to_next_scanline start_of_loop_label
+.if regs_shortage
+ ldrd W, [sp] /* load W and H (width and height) from stack */
+.else
+ mov W, ORIG_W
+.endif
+ add DST_W, DST_W, DST_STRIDE, lsl #dst_bpp_shift
+.if src_bpp != 0
+ add SRC, SRC, SRC_STRIDE, lsl #src_bpp_shift
+.endif
+.if mask_bpp != 0
+ add MASK, MASK, MASK_STRIDE, lsl #mask_bpp_shift
+.endif
+.if (dst_w_bpp != 24)
+ sub DST_W, DST_W, W, lsl #dst_bpp_shift
+.endif
+.if (src_bpp != 24) && (src_bpp != 0)
+ sub SRC, SRC, W, lsl #src_bpp_shift
+.endif
+.if (mask_bpp != 24) && (mask_bpp != 0)
+ sub MASK, MASK, W, lsl #mask_bpp_shift
+.endif
+ subs H, H, #1
+ mov DST_R, DST_W
+.if regs_shortage
+ str H, [sp, #4] /* save updated height to stack */
+.endif
+ bge start_of_loop_label
+.endm
+
+/*
+ * Registers are allocated in the following way by default:
+ * d0, d1, d2, d3 - reserved for loading source pixel data
+ * d4, d5, d6, d7 - reserved for loading destination pixel data
+ * d24, d25, d26, d27 - reserved for loading mask pixel data
+ * d28, d29, d30, d31 - final destination pixel data for writeback to memory
+ */
+.macro generate_composite_function fname, \
+ src_bpp_, \
+ mask_bpp_, \
+ dst_w_bpp_, \
+ flags, \
+ pixblock_size_, \
+ prefetch_distance, \
+ init, \
+ cleanup, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head, \
+ dst_w_basereg_ = 28, \
+ dst_r_basereg_ = 4, \
+ src_basereg_ = 0, \
+ mask_basereg_ = 24
+
+ pixman_asm_function fname
+
+ push {r4-r12, lr} /* save all registers */
+
+/*
+ * Select prefetch type for this function. If prefetch distance is
+ * set to 0 or one of the color formats is 24bpp, SIMPLE prefetch
+ * has to be used instead of ADVANCED.
+ */
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_DEFAULT
+.if prefetch_distance == 0
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
+.elseif (PREFETCH_TYPE_CURRENT > PREFETCH_TYPE_SIMPLE) && \
+ ((src_bpp_ == 24) || (mask_bpp_ == 24) || (dst_w_bpp_ == 24))
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_SIMPLE
+.endif
+
+/*
+ * Make some macro arguments globally visible and accessible
+ * from other macros
+ */
+ .set src_bpp, src_bpp_
+ .set mask_bpp, mask_bpp_
+ .set dst_w_bpp, dst_w_bpp_
+ .set pixblock_size, pixblock_size_
+ .set dst_w_basereg, dst_w_basereg_
+ .set dst_r_basereg, dst_r_basereg_
+ .set src_basereg, src_basereg_
+ .set mask_basereg, mask_basereg_
+
+ .macro pixld_src x:vararg
+ pixld x
+ .endm
+ .macro fetch_src_pixblock
+ pixld_src pixblock_size, src_bpp, \
+ (src_basereg - pixblock_size * src_bpp / 64), SRC
+ .endm
+/*
+ * Assign symbolic names to registers
+ */
+ W .req r0 /* width (is updated during processing) */
+ H .req r1 /* height (is updated during processing) */
+ DST_W .req r2 /* destination buffer pointer for writes */
+ DST_STRIDE .req r3 /* destination image stride */
+ SRC .req r4 /* source buffer pointer */
+ SRC_STRIDE .req r5 /* source image stride */
+ DST_R .req r6 /* destination buffer pointer for reads */
+
+ MASK .req r7 /* mask pointer */
+ MASK_STRIDE .req r8 /* mask stride */
+
+ PF_CTL .req r9 /* combined lines counter and prefetch */
+ /* distance increment counter */
+ PF_X .req r10 /* pixel index in a scanline for current */
+ /* pretetch position */
+ PF_SRC .req r11 /* pointer to source scanline start */
+ /* for prefetch purposes */
+ PF_DST .req r12 /* pointer to destination scanline start */
+ /* for prefetch purposes */
+ PF_MASK .req r14 /* pointer to mask scanline start */
+ /* for prefetch purposes */
+/*
+ * Check whether we have enough registers for all the local variables.
+ * If we don't have enough registers, original width and height are
+ * kept on top of stack (and 'regs_shortage' variable is set to indicate
+ * this for the rest of code). Even if there are enough registers, the
+ * allocation scheme may be a bit different depending on whether source
+ * or mask is not used.
+ */
+.if (PREFETCH_TYPE_CURRENT < PREFETCH_TYPE_ADVANCED)
+ ORIG_W .req r10 /* saved original width */
+ DUMMY .req r12 /* temporary register */
+ .set regs_shortage, 0
+.elseif mask_bpp == 0
+ ORIG_W .req r7 /* saved original width */
+ DUMMY .req r8 /* temporary register */
+ .set regs_shortage, 0
+.elseif src_bpp == 0
+ ORIG_W .req r4 /* saved original width */
+ DUMMY .req r5 /* temporary register */
+ .set regs_shortage, 0
+.else
+ ORIG_W .req r1 /* saved original width */
+ DUMMY .req r1 /* temporary register */
+ .set regs_shortage, 1
+.endif
+
+ .set mask_bpp_shift, -1
+.if src_bpp == 32
+ .set src_bpp_shift, 2
+.elseif src_bpp == 24
+ .set src_bpp_shift, 0
+.elseif src_bpp == 16
+ .set src_bpp_shift, 1
+.elseif src_bpp == 8
+ .set src_bpp_shift, 0
+.elseif src_bpp == 0
+ .set src_bpp_shift, -1
+.else
+ .error "requested src bpp (src_bpp) is not supported"
+.endif
+.if mask_bpp == 32
+ .set mask_bpp_shift, 2
+.elseif mask_bpp == 24
+ .set mask_bpp_shift, 0
+.elseif mask_bpp == 8
+ .set mask_bpp_shift, 0
+.elseif mask_bpp == 0
+ .set mask_bpp_shift, -1
+.else
+ .error "requested mask bpp (mask_bpp) is not supported"
+.endif
+.if dst_w_bpp == 32
+ .set dst_bpp_shift, 2
+.elseif dst_w_bpp == 24
+ .set dst_bpp_shift, 0
+.elseif dst_w_bpp == 16
+ .set dst_bpp_shift, 1
+.elseif dst_w_bpp == 8
+ .set dst_bpp_shift, 0
+.else
+ .error "requested dst bpp (dst_w_bpp) is not supported"
+.endif
+
+.if (((flags) & FLAG_DST_READWRITE) != 0)
+ .set dst_r_bpp, dst_w_bpp
+.else
+ .set dst_r_bpp, 0
+.endif
+.if (((flags) & FLAG_DEINTERLEAVE_32BPP) != 0)
+ .set DEINTERLEAVE_32BPP_ENABLED, 1
+.else
+ .set DEINTERLEAVE_32BPP_ENABLED, 0
+.endif
+
+.if prefetch_distance < 0 || prefetch_distance > 15
+ .error "invalid prefetch distance (prefetch_distance)"
+.endif
+
+.if src_bpp > 0
+ ldr SRC, [sp, #40]
+.endif
+.if mask_bpp > 0
+ ldr MASK, [sp, #48]
+.endif
+ PF mov PF_X, #0
+.if src_bpp > 0
+ ldr SRC_STRIDE, [sp, #44]
+.endif
+.if mask_bpp > 0
+ ldr MASK_STRIDE, [sp, #52]
+.endif
+ mov DST_R, DST_W
+
+.if src_bpp == 24
+ sub SRC_STRIDE, SRC_STRIDE, W
+ sub SRC_STRIDE, SRC_STRIDE, W, lsl #1
+.endif
+.if mask_bpp == 24
+ sub MASK_STRIDE, MASK_STRIDE, W
+ sub MASK_STRIDE, MASK_STRIDE, W, lsl #1
+.endif
+.if dst_w_bpp == 24
+ sub DST_STRIDE, DST_STRIDE, W
+ sub DST_STRIDE, DST_STRIDE, W, lsl #1
+.endif
+
+/*
+ * Setup advanced prefetcher initial state
+ */
+ PF mov PF_SRC, SRC
+ PF mov PF_DST, DST_R
+ PF mov PF_MASK, MASK
+ /* PF_CTL = prefetch_distance | ((h - 1) << 4) */
+ PF mov PF_CTL, H, lsl #4
+ PF add PF_CTL, #(prefetch_distance - 0x10)
+
+ init
+.if regs_shortage
+ push {r0, r1}
+.endif
+ subs H, H, #1
+.if regs_shortage
+ str H, [sp, #4] /* save updated height to stack */
+.else
+ mov ORIG_W, W
+.endif
+ blt 9f
+ cmp W, #(pixblock_size * 2)
+ blt 8f
+/*
+ * This is the start of the pipelined loop, which if optimized for
+ * long scanlines
+ */
+0:
+ ensure_destination_ptr_alignment process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+
+ /* Implement "head (tail_head) ... (tail_head) tail" loop pattern */
+ pixld_a pixblock_size, dst_r_bpp, \
+ (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R
+ fetch_src_pixblock
+ pixld pixblock_size, mask_bpp, \
+ (mask_basereg - pixblock_size * mask_bpp / 64), MASK
+ PF add PF_X, PF_X, #pixblock_size
+ process_pixblock_head
+ cache_preload 0, pixblock_size
+ cache_preload_simple
+ subs W, W, #(pixblock_size * 2)
+ blt 2f
+1:
+ process_pixblock_tail_head
+ cache_preload_simple
+ subs W, W, #pixblock_size
+ bge 1b
+2:
+ process_pixblock_tail
+ pixst_a pixblock_size, dst_w_bpp, \
+ (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W
+
+ /* Process the remaining trailing pixels in the scanline */
+ process_trailing_pixels 1, 1, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+ advance_to_next_scanline 0b
+
+.if regs_shortage
+ pop {r0, r1}
+.endif
+ cleanup
+ pop {r4-r12, pc} /* exit */
+/*
+ * This is the start of the loop, designed to process images with small width
+ * (less than pixblock_size * 2 pixels). In this case neither pipelining
+ * nor prefetch are used.
+ */
+8:
+ /* Process exactly pixblock_size pixels if needed */
+ tst W, #pixblock_size
+ beq 1f
+ pixld pixblock_size, dst_r_bpp, \
+ (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R
+ fetch_src_pixblock
+ pixld pixblock_size, mask_bpp, \
+ (mask_basereg - pixblock_size * mask_bpp / 64), MASK
+ process_pixblock_head
+ process_pixblock_tail
+ pixst pixblock_size, dst_w_bpp, \
+ (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W
+1:
+ /* Process the remaining trailing pixels in the scanline */
+ process_trailing_pixels 0, 0, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+ advance_to_next_scanline 8b
+9:
+.if regs_shortage
+ pop {r0, r1}
+.endif
+ cleanup
+ pop {r4-r12, pc} /* exit */
+
+ .purgem fetch_src_pixblock
+ .purgem pixld_src
+
+ .unreq SRC
+ .unreq MASK
+ .unreq DST_R
+ .unreq DST_W
+ .unreq ORIG_W
+ .unreq W
+ .unreq H
+ .unreq SRC_STRIDE
+ .unreq DST_STRIDE
+ .unreq MASK_STRIDE
+ .unreq PF_CTL
+ .unreq PF_X
+ .unreq PF_SRC
+ .unreq PF_DST
+ .unreq PF_MASK
+ .unreq DUMMY
+ .endfunc
+.endm
+
+/*
+ * A simplified variant of function generation template for a single
+ * scanline processing (for implementing pixman combine functions)
+ */
+.macro generate_composite_function_scanline use_nearest_scaling, \
+ fname, \
+ src_bpp_, \
+ mask_bpp_, \
+ dst_w_bpp_, \
+ flags, \
+ pixblock_size_, \
+ init, \
+ cleanup, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head, \
+ dst_w_basereg_ = 28, \
+ dst_r_basereg_ = 4, \
+ src_basereg_ = 0, \
+ mask_basereg_ = 24
+
+ pixman_asm_function fname
+
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
+/*
+ * Make some macro arguments globally visible and accessible
+ * from other macros
+ */
+ .set src_bpp, src_bpp_
+ .set mask_bpp, mask_bpp_
+ .set dst_w_bpp, dst_w_bpp_
+ .set pixblock_size, pixblock_size_
+ .set dst_w_basereg, dst_w_basereg_
+ .set dst_r_basereg, dst_r_basereg_
+ .set src_basereg, src_basereg_
+ .set mask_basereg, mask_basereg_
+
+.if use_nearest_scaling != 0
+ /*
+ * Assign symbolic names to registers for nearest scaling
+ */
+ W .req r0
+ DST_W .req r1
+ SRC .req r2
+ VX .req r3
+ UNIT_X .req ip
+ MASK .req lr
+ TMP1 .req r4
+ TMP2 .req r5
+ DST_R .req r6
+ SRC_WIDTH_FIXED .req r7
+
+ .macro pixld_src x:vararg
+ pixld_s x
+ .endm
+
+ ldr UNIT_X, [sp]
+ push {r4-r8, lr}
+ ldr SRC_WIDTH_FIXED, [sp, #(24 + 4)]
+ .if mask_bpp != 0
+ ldr MASK, [sp, #(24 + 8)]
+ .endif
+.else
+ /*
+ * Assign symbolic names to registers
+ */
+ W .req r0 /* width (is updated during processing) */
+ DST_W .req r1 /* destination buffer pointer for writes */
+ SRC .req r2 /* source buffer pointer */
+ DST_R .req ip /* destination buffer pointer for reads */
+ MASK .req r3 /* mask pointer */
+
+ .macro pixld_src x:vararg
+ pixld x
+ .endm
+.endif
+
+.if (((flags) & FLAG_DST_READWRITE) != 0)
+ .set dst_r_bpp, dst_w_bpp
+.else
+ .set dst_r_bpp, 0
+.endif
+.if (((flags) & FLAG_DEINTERLEAVE_32BPP) != 0)
+ .set DEINTERLEAVE_32BPP_ENABLED, 1
+.else
+ .set DEINTERLEAVE_32BPP_ENABLED, 0
+.endif
+
+ .macro fetch_src_pixblock
+ pixld_src pixblock_size, src_bpp, \
+ (src_basereg - pixblock_size * src_bpp / 64), SRC
+ .endm
+
+ init
+ mov DST_R, DST_W
+
+ cmp W, #pixblock_size
+ blt 8f
+
+ ensure_destination_ptr_alignment process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+
+ subs W, W, #pixblock_size
+ blt 7f
+
+ /* Implement "head (tail_head) ... (tail_head) tail" loop pattern */
+ pixld_a pixblock_size, dst_r_bpp, \
+ (dst_r_basereg - pixblock_size * dst_r_bpp / 64), DST_R
+ fetch_src_pixblock
+ pixld pixblock_size, mask_bpp, \
+ (mask_basereg - pixblock_size * mask_bpp / 64), MASK
+ process_pixblock_head
+ subs W, W, #pixblock_size
+ blt 2f
+1:
+ process_pixblock_tail_head
+ subs W, W, #pixblock_size
+ bge 1b
+2:
+ process_pixblock_tail
+ pixst_a pixblock_size, dst_w_bpp, \
+ (dst_w_basereg - pixblock_size * dst_w_bpp / 64), DST_W
+7:
+ /* Process the remaining trailing pixels in the scanline (dst aligned) */
+ process_trailing_pixels 0, 1, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+
+ cleanup
+.if use_nearest_scaling != 0
+ pop {r4-r8, pc} /* exit */
+.else
+ bx lr /* exit */
+.endif
+8:
+ /* Process the remaining trailing pixels in the scanline (dst unaligned) */
+ process_trailing_pixels 0, 0, \
+ process_pixblock_head, \
+ process_pixblock_tail, \
+ process_pixblock_tail_head
+
+ cleanup
+
+.if use_nearest_scaling != 0
+ pop {r4-r8, pc} /* exit */
+
+ .unreq DST_R
+ .unreq SRC
+ .unreq W
+ .unreq VX
+ .unreq UNIT_X
+ .unreq TMP1
+ .unreq TMP2
+ .unreq DST_W
+ .unreq MASK
+ .unreq SRC_WIDTH_FIXED
+
+.else
+ bx lr /* exit */
+
+ .unreq SRC
+ .unreq MASK
+ .unreq DST_R
+ .unreq DST_W
+ .unreq W
+.endif
+
+ .purgem fetch_src_pixblock
+ .purgem pixld_src
+
+ .endfunc
+.endm
+
+.macro generate_composite_function_single_scanline x:vararg
+ generate_composite_function_scanline 0, x
+.endm
+
+.macro generate_composite_function_nearest_scanline x:vararg
+ generate_composite_function_scanline 1, x
+.endm
+
+/* Default prologue/epilogue, nothing special needs to be done */
+
+.macro default_init
+.endm
+
+.macro default_cleanup
+.endm
+
+/*
+ * Prologue/epilogue variant which additionally saves/restores d8-d15
+ * registers (they need to be saved/restored by callee according to ABI).
+ * This is required if the code needs to use all the NEON registers.
+ */
+
+.macro default_init_need_all_regs
+ vpush {d8-d15}
+.endm
+
+.macro default_cleanup_need_all_regs
+ vpop {d8-d15}
+.endm
+
+/******************************************************************************/
+
+/*
+ * Conversion of 8 r5g6b6 pixels packed in 128-bit register (in)
+ * into a planar a8r8g8b8 format (with a, r, g, b color components
+ * stored into 64-bit registers out_a, out_r, out_g, out_b respectively).
+ *
+ * Warning: the conversion is destructive and the original
+ * value (in) is lost.
+ */
+.macro convert_0565_to_8888 in, out_a, out_r, out_g, out_b
+ vshrn.u16 out_r, in, #8
+ vshrn.u16 out_g, in, #3
+ vsli.u16 in, in, #5
+ vmov.u8 out_a, #255
+ vsri.u8 out_r, out_r, #5
+ vsri.u8 out_g, out_g, #6
+ vshrn.u16 out_b, in, #2
+.endm
+
+.macro convert_0565_to_x888 in, out_r, out_g, out_b
+ vshrn.u16 out_r, in, #8
+ vshrn.u16 out_g, in, #3
+ vsli.u16 in, in, #5
+ vsri.u8 out_r, out_r, #5
+ vsri.u8 out_g, out_g, #6
+ vshrn.u16 out_b, in, #2
+.endm
+
+/*
+ * Conversion from planar a8r8g8b8 format (with a, r, g, b color components
+ * in 64-bit registers in_a, in_r, in_g, in_b respectively) into 8 r5g6b6
+ * pixels packed in 128-bit register (out). Requires two temporary 128-bit
+ * registers (tmp1, tmp2)
+ */
+.macro convert_8888_to_0565 in_r, in_g, in_b, out, tmp1, tmp2
+ vshll.u8 tmp1, in_g, #8
+ vshll.u8 out, in_r, #8
+ vshll.u8 tmp2, in_b, #8
+ vsri.u16 out, tmp1, #5
+ vsri.u16 out, tmp2, #11
+.endm
+
+/*
+ * Conversion of four r5g6b5 pixels (in) to four x8r8g8b8 pixels
+ * returned in (out0, out1) registers pair. Requires one temporary
+ * 64-bit register (tmp). 'out1' and 'in' may overlap, the original
+ * value from 'in' is lost
+ */
+.macro convert_four_0565_to_x888_packed in, out0, out1, tmp
+ vshl.u16 out0, in, #5 /* G top 6 bits */
+ vshl.u16 tmp, in, #11 /* B top 5 bits */
+ vsri.u16 in, in, #5 /* R is ready in top bits */
+ vsri.u16 out0, out0, #6 /* G is ready in top bits */
+ vsri.u16 tmp, tmp, #5 /* B is ready in top bits */
+ vshr.u16 out1, in, #8 /* R is in place */
+ vsri.u16 out0, tmp, #8 /* G & B is in place */
+ vzip.u16 out0, out1 /* everything is in place */
+.endm
--- /dev/null
+++ b/external/SDL2/src/video/arm/pixman-arm-simd-asm.S
@@ -1,0 +1,532 @@
+/*
+ * Copyright (c) 2016 RISC OS Open Ltd
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/* Prevent the stack from becoming executable */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+ .text
+ .arch armv6
+ .object_arch armv4
+ .arm
+ .altmacro
+ .p2align 2
+
+#include "pixman-arm-asm.h"
+#include "pixman-arm-simd-asm.h"
+
+/* A head macro should do all processing which results in an output of up to
+ * 16 bytes, as far as the final load instruction. The corresponding tail macro
+ * should complete the processing of the up-to-16 bytes. The calling macro will
+ * sometimes choose to insert a preload or a decrement of X between them.
+ * cond ARM condition code for code block
+ * numbytes Number of output bytes that should be generated this time
+ * firstreg First WK register in which to place output
+ * unaligned_src Whether to use non-wordaligned loads of source image
+ * unaligned_mask Whether to use non-wordaligned loads of mask image
+ * preload If outputting 16 bytes causes 64 bytes to be read, whether an extra preload should be output
+ */
+
+/******************************************************************************/
+
+.macro FillRect32_init
+ ldr SRC, [sp, #ARGS_STACK_OFFSET]
+ mov STRIDE_S, SRC
+ mov MASK, SRC
+ mov STRIDE_M, SRC
+.endm
+
+.macro FillRect16_init
+ ldrh SRC, [sp, #ARGS_STACK_OFFSET]
+ orr SRC, SRC, lsl #16
+ mov STRIDE_S, SRC
+ mov MASK, SRC
+ mov STRIDE_M, SRC
+.endm
+
+.macro FillRect8_init
+ ldrb SRC, [sp, #ARGS_STACK_OFFSET]
+ orr SRC, SRC, lsl #8
+ orr SRC, SRC, lsl #16
+ mov STRIDE_S, SRC
+ mov MASK, SRC
+ mov STRIDE_M, SRC
+.endm
+
+.macro FillRect_process_tail cond, numbytes, firstreg
+ WK4 .req SRC
+ WK5 .req STRIDE_S
+ WK6 .req MASK
+ WK7 .req STRIDE_M
+ pixst cond, numbytes, 4, DST
+ .unreq WK4
+ .unreq WK5
+ .unreq WK6
+ .unreq WK7
+.endm
+
+generate_composite_function \
+ FillRect32ARMSIMDAsm, 0, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH \
+ 0, /* prefetch distance doesn't apply */ \
+ FillRect32_init \
+ nop_macro, /* newline */ \
+ nop_macro /* cleanup */ \
+ nop_macro /* process head */ \
+ FillRect_process_tail
+
+generate_composite_function \
+ FillRect16ARMSIMDAsm, 0, 0, 16, \
+ FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH \
+ 0, /* prefetch distance doesn't apply */ \
+ FillRect16_init \
+ nop_macro, /* newline */ \
+ nop_macro /* cleanup */ \
+ nop_macro /* process head */ \
+ FillRect_process_tail
+
+generate_composite_function \
+ FillRect8ARMSIMDAsm, 0, 0, 8, \
+ FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH \
+ 0, /* prefetch distance doesn't apply */ \
+ FillRect8_init \
+ nop_macro, /* newline */ \
+ nop_macro /* cleanup */ \
+ nop_macro /* process head */ \
+ FillRect_process_tail
+
+/******************************************************************************/
+
+/* This differs from the over_8888_8888 routine in Pixman in that the destination
+ * alpha component is always left unchanged, and RGB components are not
+ * premultiplied by alpha. It differs from BlitRGBtoRGBPixelAlpha in that
+ * renormalisation is done by multiplying by 257/256 (with rounding) rather than
+ * simply shifting right by 8 bits - removing the need to special-case alpha=0xff.
+ */
+
+.macro RGBtoRGBPixelAlpha_init
+ line_saved_regs STRIDE_S, ORIG_W
+ mov MASK, #0x80
+.endm
+
+.macro RGBtoRGBPixelAlpha_1pixel_translucent s, d, tmp0, tmp1, tmp2, tmp3, half
+ uxtb tmp3, s
+ uxtb tmp0, d
+ sub tmp0, tmp3, tmp0
+ uxtb tmp3, s, ror #16
+ uxtb tmp1, d, ror #16
+ sub tmp1, tmp3, tmp1
+ uxtb tmp3, s, ror #8
+ mov s, s, lsr #24
+ uxtb tmp2, d, ror #8
+ sub tmp2, tmp3, tmp2
+ smlabb tmp0, tmp0, s, half
+ smlabb tmp1, tmp1, s, half
+ smlabb tmp2, tmp2, s, half
+ add tmp0, tmp0, asr #8
+ add tmp1, tmp1, asr #8
+ add tmp2, tmp2, asr #8
+ pkhbt tmp0, tmp0, tmp1, lsl #16
+ and tmp2, tmp2, #0xff00
+ uxtb16 tmp0, tmp0, ror #8
+ orr tmp0, tmp0, tmp2
+ uadd8 d, d, tmp0
+.endm
+
+.macro RGBtoRGBPixelAlpha_1pixel_opaque s, d
+ and d, d, #0xff000000
+ bic s, s, #0xff000000
+ orr d, d, s
+.endm
+
+.macro RGBtoRGBPixelAlpha_process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, preload
+ .if numbytes == 16
+ ldm SRC!, {WK0, WK1}
+ ldm SRC!, {STRIDE_S, STRIDE_M}
+ ldrd WK2, WK3, [DST], #16
+ orr SCRATCH, WK0, WK1
+ and ORIG_W, WK0, WK1
+ orr SCRATCH, SCRATCH, STRIDE_S
+ and ORIG_W, ORIG_W, STRIDE_S
+ orr SCRATCH, SCRATCH, STRIDE_M
+ and ORIG_W, ORIG_W, STRIDE_M
+ tst SCRATCH, #0xff000000
+ .elseif numbytes == 8
+ ldm SRC!, {WK0, WK1}
+ ldm DST!, {WK2, WK3}
+ orr SCRATCH, WK0, WK1
+ and ORIG_W, WK0, WK1
+ tst SCRATCH, #0xff000000
+ .else // numbytes == 4
+ ldr WK0, [SRC], #4
+ ldr WK2, [DST], #4
+ tst WK0, #0xff000000
+ .endif
+.endm
+
+.macro RGBtoRGBPixelAlpha_process_tail cond, numbytes, firstreg
+ beq 20f @ all transparent
+ .if numbytes == 16
+ cmp ORIG_W, #0xff000000
+ bhs 10f @ all opaque
+ RGBtoRGBPixelAlpha_1pixel_translucent WK0, WK2, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ RGBtoRGBPixelAlpha_1pixel_translucent WK1, WK3, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ strd WK2, WK3, [DST, #-16]
+ ldrd WK0, WK1, [SRC, #-8]
+ ldrd WK2, WK3, [DST, #-8]
+ RGBtoRGBPixelAlpha_1pixel_translucent WK0, WK2, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ RGBtoRGBPixelAlpha_1pixel_translucent WK1, WK3, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ b 19f
+10: RGBtoRGBPixelAlpha_1pixel_opaque WK0, WK2
+ RGBtoRGBPixelAlpha_1pixel_opaque WK1, WK3
+ strd WK2, WK3, [DST, #-16]
+ ldrd WK0, WK1, [SRC, #-8]
+ ldrd WK2, WK3, [DST, #-8]
+ RGBtoRGBPixelAlpha_1pixel_opaque WK0, WK2
+ RGBtoRGBPixelAlpha_1pixel_opaque WK1, WK3
+19: strd WK2, WK3, [DST, #-8]
+ .elseif numbytes == 8
+ cmp ORIG_W, #0xff000000
+ bhs 10f @ all opaque
+ RGBtoRGBPixelAlpha_1pixel_translucent WK0, WK2, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ RGBtoRGBPixelAlpha_1pixel_translucent WK1, WK3, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ b 19f
+10: RGBtoRGBPixelAlpha_1pixel_opaque WK0, WK2
+ RGBtoRGBPixelAlpha_1pixel_opaque WK1, WK3
+19: strd WK2, WK3, [DST, #-8]
+ .else // numbytes == 4
+ cmp WK0, #0xff000000
+ bhs 10f @ opaque
+ RGBtoRGBPixelAlpha_1pixel_translucent WK0, WK2, STRIDE_S, STRIDE_M, SCRATCH, ORIG_W, MASK
+ b 19f
+10: RGBtoRGBPixelAlpha_1pixel_opaque WK0, WK2
+19: str WK2, [DST, #-4]
+ .endif
+20:
+.endm
+
+generate_composite_function \
+ BlitRGBtoRGBPixelAlphaARMSIMDAsm, 32, 0, 32, \
+ FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_WK0, \
+ 2, /* prefetch distance */ \
+ RGBtoRGBPixelAlpha_init, \
+ nop_macro, /* newline */ \
+ nop_macro, /* cleanup */ \
+ RGBtoRGBPixelAlpha_process_head, \
+ RGBtoRGBPixelAlpha_process_tail
+
+/******************************************************************************/
+
+.macro ARGBto565PixelAlpha_init
+ line_saved_regs STRIDE_D, STRIDE_S, ORIG_W
+ mov MASK, #0x001f
+ mov STRIDE_M, #0x0010
+ orr MASK, MASK, MASK, lsl #16
+ orr STRIDE_M, STRIDE_M, STRIDE_M, lsl #16
+.endm
+
+.macro ARGBto565PixelAlpha_newline
+ mov STRIDE_S, #0x0200
+.endm
+
+/* On entry:
+ * s1 holds 1 32bpp source pixel
+ * d holds 1 16bpp destination pixel
+ * rbmask, rbhalf, ghalf hold 0x001f001f, 0x00100010, 0x00000200 respectively
+ * other registers are temporaries
+ * On exit:
+ * Constant registers preserved
+ */
+
+.macro ARGBto565PixelAlpha_1pixel_translucent s, d, rbmask, rbhalf, ghalf, alpha, rb, g, misc
+ mov alpha, s, lsr #27
+ and misc, s, #0xfc00
+ and g, d, #0x07e0
+ pkhbt rb, d, d, lsl #5
+ rsb misc, g, misc, lsr #5
+ and s, rbmask, s, lsr #3
+ and rb, rbmask, rb
+ sub s, s, rb
+ smlabb misc, misc, alpha, ghalf
+ mla s, s, alpha, rbhalf
+ add misc, misc, misc, lsl #5
+ add g, g, misc, asr #10
+ add s, s, s, lsl #5
+ and g, g, #0x07e0
+ add rb, rb, s, asr #10
+ and rb, rb, rbmask
+ pkhbt rb, rb, rb, lsl #11
+ orr d, rb, g
+ orr d, d, rb, lsr #16
+.endm
+
+/* On entry:
+ * s1 holds 1 32bpp source pixel
+ * d holds 1 16bpp destination pixel
+ * rbmask holds 0x001f001f
+ * On exit:
+ * Constant registers preserved
+ */
+
+.macro ARGBto565PixelAlpha_1pixel_opaque s, d, rbmask
+ and d, rbmask, s, lsr #3
+ and s, s, #0xfc00
+ orr d, d, d, lsr #5
+ orr d, d, s, lsr #5
+.endm
+
+/* On entry:
+ * s1, s2 hold 2 32bpp source pixels
+ * d holds 2 16bpp destination pixels
+ * rbmask, rbhalf, ghalf hold 0x001f001f, 0x00100010, 0x00000200 respectively
+ * other registers are temporaries
+ * On exit:
+ * Constant registers preserved
+ * Blended results have been written through destination pointer
+ */
+
+.macro ARGBto565PixelAlpha_2pixels_translucent s1, s2, d, rbmask, rbhalf, ghalf, alpha, rb, g, misc
+ mov alpha, s1, lsr #27
+ and misc, s1, #0xfc00
+ and g, d, #0x07e0
+ pkhbt rb, d, d, lsl #5
+ rsb misc, g, misc, lsr #5
+ and s1, rbmask, s1, lsr #3
+ and rb, rbmask, rb
+ sub s1, s1, rb
+ smlabb misc, misc, alpha, ghalf
+ mla s1, s1, alpha, rbhalf
+ uxth d, d, ror #16
+ add misc, misc, misc, lsl #5
+ mov alpha, s2, lsr #27
+ add g, g, misc, asr #10
+ add s1, s1, s1, lsl #5
+ and g, g, #0x07e0
+ add rb, rb, s1, asr #10
+ and rb, rb, rbmask
+ and misc, s2, #0xfc00
+ pkhbt rb, rb, rb, lsl #11
+ and s1, d, #0x07e0
+ pkhbt d, d, d, lsl #5
+ rsb misc, s1, misc, lsr #5
+ and s2, rbmask, s2, lsr #3
+ and d, rbmask, d
+ sub s2, s2, d
+ smlabb misc, misc, alpha, ghalf
+ mla s2, s2, alpha, rbhalf
+ orr alpha, rb, g
+ add misc, misc, misc, lsl #5
+ orr alpha, alpha, rb, lsr #16
+ add s1, s1, misc, asr #10
+ add s2, s2, s2, lsl #5
+ and s1, s1, #0x07e0
+ add d, d, s2, asr #10
+ and d, d, rbmask
+ strh alpha, [DST, #-4]
+ pkhbt d, d, d, lsl #11
+ orr alpha, d, s1
+ orr alpha, alpha, d, lsr #16
+ strh alpha, [DST, #-2]
+.endm
+
+/* On entry:
+ * s1, s2 hold 2 32bpp source pixels
+ * rbmask holds 0x001f001f
+ * other registers are temporaries
+ * On exit:
+ * Constant registers preserved
+ * Blended results have been written through destination pointer
+ */
+
+.macro ARGBto565PixelAlpha_2pixels_opaque s1, s2, d, rbmask, g
+ and g, s1, #0xfc00
+ and d, rbmask, s1, lsr #3
+ and s1, rbmask, s2, lsr #3
+ orr d, d, d, lsr #5
+ orr d, d, g, lsr #5
+ and g, s2, #0xfc00
+ strh d, [DST, #-4]
+ orr s1, s1, s1, lsr #5
+ orr s1, s1, g, lsr #5
+ strh s1, [DST, #-2]
+.endm
+
+.macro ARGBto565PixelAlpha_2pixels_head
+ ldrd WK0, WK1, [SRC], #8
+ ldr WK2, [DST], #4
+ orr SCRATCH, WK0, WK1
+ and ORIG_W, WK0, WK1
+ tst SCRATCH, #0xff000000
+.endm
+
+.macro ARGBto565PixelAlpha_2pixels_tail
+ beq 20f @ all transparent
+ cmp ORIG_W, #0xff000000
+ bhs 10f @ all opaque
+ ARGBto565PixelAlpha_2pixels_translucent WK0, WK1, WK2, MASK, STRIDE_M, STRIDE_S, STRIDE_D, WK3, SCRATCH, ORIG_W
+ b 20f
+10: ARGBto565PixelAlpha_2pixels_opaque WK0, WK1, WK2, MASK, SCRATCH
+20:
+.endm
+
+.macro ARGBto565PixelAlpha_process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, preload
+ .if numbytes == 16
+ ARGBto565PixelAlpha_2pixels_head
+ ARGBto565PixelAlpha_2pixels_tail
+ ARGBto565PixelAlpha_2pixels_head
+ ARGBto565PixelAlpha_2pixels_tail
+ .endif
+ .if numbytes >= 8
+ ARGBto565PixelAlpha_2pixels_head
+ ARGBto565PixelAlpha_2pixels_tail
+ .endif
+ .if numbytes >= 4
+ ARGBto565PixelAlpha_2pixels_head
+ .else // numbytes == 2
+ ldr WK0, [SRC], #4
+ ldrh WK2, [DST], #2
+ tst WK0, #0xff000000
+ .endif
+.endm
+
+.macro ARGBto565PixelAlpha_process_tail cond, numbytes, firstreg
+ .if numbytes >= 4
+ ARGBto565PixelAlpha_2pixels_tail
+ .else // numbytes == 2
+ beq 20f @ all transparent
+ cmp WK0, #0xff000000
+ bhs 10f @ opaque
+ ARGBto565PixelAlpha_1pixel_translucent WK0, WK2, MASK, STRIDE_M, STRIDE_S, STRIDE_D, WK3, SCRATCH, ORIG_W
+ b 19f
+10: ARGBto565PixelAlpha_1pixel_opaque WK0, WK2, MASK
+19: strh WK2, [DST, #-2]
+20:
+ .endif
+.endm
+
+generate_composite_function \
+ BlitARGBto565PixelAlphaARMSIMDAsm, 32, 0, 16, \
+ FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_WK0, \
+ 2, /* prefetch distance */ \
+ ARGBto565PixelAlpha_init, \
+ ARGBto565PixelAlpha_newline, \
+ nop_macro, /* cleanup */ \
+ ARGBto565PixelAlpha_process_head, \
+ ARGBto565PixelAlpha_process_tail
+
+ /******************************************************************************/
+
+.macro BGR888toRGB888_1pixel cond, reg, tmp
+ uxtb16&cond tmp, WK®, ror #8
+ uxtb16&cond WK®, WK®, ror #16
+ orr&cond WK®, WK®, tmp, lsl #8
+.endm
+
+.macro BGR888toRGB888_2pixels cond, reg1, reg2, tmp1, tmp2
+ uxtb16&cond tmp1, WK®1, ror #8
+ uxtb16&cond WK®1, WK®1, ror #16
+ uxtb16&cond tmp2, WK®2, ror #8
+ uxtb16&cond WK®2, WK®2, ror #16
+ orr&cond WK®1, WK®1, tmp1, lsl #8
+ orr&cond WK®2, WK®2, tmp2, lsl #8
+.endm
+
+.macro BGR888toRGB888_process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, preload
+ pixld cond, numbytes, firstreg, SRC, unaligned_src
+.endm
+
+.macro BGR888toRGB888_process_tail cond, numbytes, firstreg
+ .if numbytes >= 8
+ BGR888toRGB888_2pixels cond, %(firstreg+0), %(firstreg+1), MASK, STRIDE_M
+ .if numbytes == 16
+ BGR888toRGB888_2pixels cond, %(firstreg+2), %(firstreg+3), MASK, STRIDE_M
+ .endif
+ .else @ numbytes == 4
+ BGR888toRGB888_1pixel cond, %(firstreg+0), MASK
+ .endif
+.endm
+
+generate_composite_function \
+ Blit_BGR888_RGB888ARMSIMDAsm, 32, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_SCRATCH, \
+ 2, /* prefetch distance */ \
+ nop_macro, /* init */ \
+ nop_macro, /* newline */ \
+ nop_macro, /* cleanup */ \
+ BGR888toRGB888_process_head, \
+ BGR888toRGB888_process_tail
+
+/******************************************************************************/
+
+.macro RGB444toRGB888_init
+ ldr MASK, =0x0f0f0f0f
+ /* Set GE[3:0] to 0101 so SEL instructions do what we want */
+ msr CPSR_s, #0x50000
+.endm
+
+.macro RGB444toRGB888_1pixel reg, mask, tmp
+ pkhbt WK®, WK®, WK®, lsl #12 @ 0000aaaarrrrggggaaaarrrrggggbbbb
+ and WK®, mask, WK® @ 0000aaaa0000gggg0000rrrr0000bbbb
+ orr WK®, WK®, WK®, lsl #4 @ aaaaaaaaggggggggrrrrrrrrbbbbbbbb
+ pkhtb tmp, WK®, WK®, asr #8 @ aaaaaaaaggggggggggggggggrrrrrrrr
+ pkhbt WK®, WK®, WK®, lsl #8 @ ggggggggrrrrrrrrrrrrrrrrbbbbbbbb
+ sel WK®, WK®, tmp @ aaaaaaaarrrrrrrrggggggggbbbbbbbb
+.endm
+
+.macro RGB444toRGB888_2pixels in, out1, out2, mask, tmp1, tmp2
+ and tmp1, mask, WK&in @ 0000RRRR0000BBBB0000rrrr0000bbbb
+ and tmp2, mask, WK&in, lsr #4 @ 0000AAAA0000GGGG0000aaaa0000gggg
+ orr tmp1, tmp1, tmp1, lsl #4 @ RRRRRRRRBBBBBBBBrrrrrrrrbbbbbbbb
+ orr tmp2, tmp2, tmp2, lsl #4 @ AAAAAAAAGGGGGGGGaaaaaaaagggggggg
+ pkhtb WK&out2, tmp2, tmp1, asr #16 @ AAAAAAAAGGGGGGGGRRRRRRRRBBBBBBBB
+ pkhbt WK&out1, tmp1, tmp2, lsl #16 @ aaaaaaaaggggggggrrrrrrrrbbbbbbbb
+ pkhtb tmp2, WK&out2, WK&out2, asr #8 @ AAAAAAAAGGGGGGGGGGGGGGGGRRRRRRRR
+ pkhtb tmp1, WK&out1, WK&out1, asr #8 @ aaaaaaaaggggggggggggggggrrrrrrrr
+ pkhbt WK&out1, WK&out1, WK&out1, lsl #8 @ ggggggggrrrrrrrrrrrrrrrrbbbbbbbb
+ pkhbt WK&out2, WK&out2, WK&out2, lsl #8 @ GGGGGGGGRRRRRRRRRRRRRRRRBBBBBBBB
+ sel WK&out1, WK&out1, tmp1 @ aaaaaaaarrrrrrrrggggggggbbbbbbbb
+ sel WK&out2, WK&out2, tmp2 @ AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB
+.endm
+
+.macro RGB444toRGB888_process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, preload
+ pixld cond, numbytes/2, firstreg, SRC, unaligned_src
+.endm
+
+.macro RGB444toRGB888_process_tail cond, numbytes, firstreg
+ .if numbytes >= 8
+ .if numbytes == 16
+ RGB444toRGB888_2pixels %(firstreg+1), %(firstreg+2), %(firstreg+3), MASK, STRIDE_M, SCRATCH
+ .endif
+ RGB444toRGB888_2pixels %(firstreg+0), %(firstreg+0), %(firstreg+1), MASK, STRIDE_M, SCRATCH
+ .else @ numbytes == 4
+ RGB444toRGB888_1pixel %(firstreg+0), MASK, SCRATCH
+ .endif
+.endm
+
+generate_composite_function \
+ Blit_RGB444_RGB888ARMSIMDAsm, 16, 0, 32, \
+ FLAG_DST_WRITEONLY | FLAG_BRANCH_OVER, \
+ 2, /* prefetch distance */ \
+ RGB444toRGB888_init, \
+ nop_macro, /* newline */ \
+ nop_macro, /* cleanup */ \
+ RGB444toRGB888_process_head, \
+ RGB444toRGB888_process_tail
--- /dev/null
+++ b/external/SDL2/src/video/arm/pixman-arm-simd-asm.h
@@ -1,0 +1,1034 @@
+/*
+ * Copyright (c) 2012 Raspberry Pi Foundation
+ * Copyright (c) 2012 RISC OS Open Ltd
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Because the alignment of pixel data to cachelines, and even the number of
+ * cachelines per row can vary from row to row, and because of the need to
+ * preload each scanline once and only once, this prefetch strategy treats
+ * each row of pixels independently. When a pixel row is long enough, there
+ * are three distinct phases of prefetch:
+ * * an inner loop section, where each time a cacheline of data is
+ * processed, another cacheline is preloaded (the exact distance ahead is
+ * determined empirically using profiling results from lowlevel-blt-bench)
+ * * a leading section, where enough cachelines are preloaded to ensure no
+ * cachelines escape being preloaded when the inner loop starts
+ * * a trailing section, where a limited number (0 or more) of cachelines
+ * are preloaded to deal with data (if any) that hangs off the end of the
+ * last iteration of the inner loop, plus any trailing bytes that were not
+ * enough to make up one whole iteration of the inner loop
+ *
+ * There are (in general) three distinct code paths, selected between
+ * depending upon how long the pixel row is. If it is long enough that there
+ * is at least one iteration of the inner loop (as described above) then
+ * this is described as the "wide" case. If it is shorter than that, but
+ * there are still enough bytes output that there is at least one 16-byte-
+ * long, 16-byte-aligned write to the destination (the optimum type of
+ * write), then this is the "medium" case. If it is not even this long, then
+ * this is the "narrow" case, and there is no attempt to align writes to
+ * 16-byte boundaries. In the "medium" and "narrow" cases, all the
+ * cachelines containing data from the pixel row are prefetched up-front.
+ */
+
+/*
+ * Determine whether we put the arguments on the stack for debugging.
+ */
+#undef DEBUG_PARAMS
+
+/*
+ * Bit flags for 'generate_composite_function' macro which are used
+ * to tune generated functions behavior.
+ */
+.set FLAG_DST_WRITEONLY, 0
+.set FLAG_DST_READWRITE, 1
+.set FLAG_COND_EXEC, 0
+.set FLAG_BRANCH_OVER, 2
+.set FLAG_PROCESS_PRESERVES_PSR, 0
+.set FLAG_PROCESS_CORRUPTS_PSR, 4
+.set FLAG_PROCESS_DOESNT_STORE, 0
+.set FLAG_PROCESS_DOES_STORE, 8 /* usually because it needs to conditionally skip it */
+.set FLAG_NO_SPILL_LINE_VARS, 0
+.set FLAG_SPILL_LINE_VARS_WIDE, 16
+.set FLAG_SPILL_LINE_VARS_NON_WIDE, 32
+.set FLAG_SPILL_LINE_VARS, 48
+.set FLAG_PROCESS_CORRUPTS_SCRATCH, 0
+.set FLAG_PROCESS_PRESERVES_SCRATCH, 64
+.set FLAG_PROCESS_PRESERVES_WK0, 0
+.set FLAG_PROCESS_CORRUPTS_WK0, 128 /* if possible, use the specified register(s) instead so WK0 can hold number of leading pixels */
+.set FLAG_PRELOAD_DST, 0
+.set FLAG_NO_PRELOAD_DST, 256
+
+/*
+ * Number of bytes by which to adjust preload offset of destination
+ * buffer (allows preload instruction to be moved before the load(s))
+ */
+.set DST_PRELOAD_BIAS, 0
+
+/*
+ * Offset into stack where mask and source pointer/stride can be accessed.
+ */
+#ifdef DEBUG_PARAMS
+.set ARGS_STACK_OFFSET, (9*4+9*4)
+#else
+.set ARGS_STACK_OFFSET, (9*4)
+#endif
+
+/*
+ * Offset into stack where space allocated during init macro can be accessed.
+ */
+.set LOCALS_STACK_OFFSET, 0
+
+/*
+ * Constants for selecting preferable prefetch type.
+ */
+.set PREFETCH_TYPE_NONE, 0
+.set PREFETCH_TYPE_STANDARD, 1
+
+/*
+ * Definitions of macros for load/store of pixel data.
+ */
+
+.macro pixldst op, cond=al, numbytes, reg0, reg1, reg2, reg3, base, unaligned=0
+ .if numbytes == 16
+ .if unaligned == 1
+ op&r&cond WK®0, [base], #4
+ op&r&cond WK®1, [base], #4
+ op&r&cond WK®2, [base], #4
+ op&r&cond WK®3, [base], #4
+ .else
+ op&m&cond&ia base!, {WK®0,WK®1,WK®2,WK®3}
+ .endif
+ .elseif numbytes == 8
+ .if unaligned == 1
+ op&r&cond WK®0, [base], #4
+ op&r&cond WK®1, [base], #4
+ .else
+ op&m&cond&ia base!, {WK®0,WK®1}
+ .endif
+ .elseif numbytes == 4
+ op&r&cond WK®0, [base], #4
+ .elseif numbytes == 2
+ op&r&cond&h WK®0, [base], #2
+ .elseif numbytes == 1
+ op&r&cond&b WK®0, [base], #1
+ .else
+ .error "unsupported size: numbytes"
+ .endif
+.endm
+
+.macro pixst_baseupdated cond, numbytes, reg0, reg1, reg2, reg3, base
+ .if numbytes == 16
+ stm&cond&db base, {WK®0,WK®1,WK®2,WK®3}
+ .elseif numbytes == 8
+ stm&cond&db base, {WK®0,WK®1}
+ .elseif numbytes == 4
+ str&cond WK®0, [base, #-4]
+ .elseif numbytes == 2
+ str&cond&h WK®0, [base, #-2]
+ .elseif numbytes == 1
+ str&cond&b WK®0, [base, #-1]
+ .else
+ .error "unsupported size: numbytes"
+ .endif
+.endm
+
+.macro pixld cond, numbytes, firstreg, base, unaligned
+ pixldst ld, cond, numbytes, %(firstreg+0), %(firstreg+1), %(firstreg+2), %(firstreg+3), base, unaligned
+.endm
+
+.macro pixst cond, numbytes, firstreg, base
+ .if (flags) & FLAG_DST_READWRITE
+ pixst_baseupdated cond, numbytes, %(firstreg+0), %(firstreg+1), %(firstreg+2), %(firstreg+3), base
+ .else
+ pixldst st, cond, numbytes, %(firstreg+0), %(firstreg+1), %(firstreg+2), %(firstreg+3), base
+ .endif
+.endm
+
+.macro PF a, x:vararg
+ .if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_STANDARD)
+ a x
+ .endif
+.endm
+
+
+.macro preload_leading_step1 bpp, ptr, base
+/* If the destination is already 16-byte aligned, then we need to preload
+ * between 0 and prefetch_distance (inclusive) cache lines ahead so there
+ * are no gaps when the inner loop starts.
+ */
+ .if bpp > 0
+ PF bic, ptr, base, #31
+ .set OFFSET, 0
+ .rept prefetch_distance+1
+ PF pld, [ptr, #OFFSET]
+ .set OFFSET, OFFSET+32
+ .endr
+ .endif
+.endm
+
+.macro preload_leading_step2 bpp, bpp_shift, ptr, base
+/* However, if the destination is not 16-byte aligned, we may need to
+ * preload more cache lines than that. The question we need to ask is:
+ * are the bytes corresponding to the leading pixels more than the amount
+ * by which the source pointer will be rounded down for preloading, and if
+ * so, by how many cache lines? Effectively, we want to calculate
+ * leading_bytes = ((-dst)&15)*src_bpp/dst_bpp
+ * inner_loop_offset = (src+leading_bytes)&31
+ * extra_needed = leading_bytes - inner_loop_offset
+ * and test if extra_needed is <= 0, <= 32, or > 32 (where > 32 is only
+ * possible when there are 4 src bytes for every 1 dst byte).
+ */
+ .if bpp > 0
+ .ifc base,DST
+ /* The test can be simplified further when preloading the destination */
+ PF tst, base, #16
+ PF beq, 61f
+ .else
+ .if bpp/dst_w_bpp == 4
+ PF add, SCRATCH, base, WK0, lsl #bpp_shift-dst_bpp_shift
+ PF and, SCRATCH, SCRATCH, #31
+ PF rsb, SCRATCH, SCRATCH, WK0, lsl #bpp_shift-dst_bpp_shift
+ PF sub, SCRATCH, SCRATCH, #1 /* so now ranges are -16..-1 / 0..31 / 32..63 */
+ PF movs, SCRATCH, SCRATCH, lsl #32-6 /* so this sets NC / nc / Nc */
+ PF bcs, 61f
+ PF bpl, 60f
+ PF pld, [ptr, #32*(prefetch_distance+2)]
+ .else
+ PF mov, SCRATCH, base, lsl #32-5
+ PF add, SCRATCH, SCRATCH, WK0, lsl #32-5+bpp_shift-dst_bpp_shift
+ PF rsbs, SCRATCH, SCRATCH, WK0, lsl #32-5+bpp_shift-dst_bpp_shift
+ PF bls, 61f
+ .endif
+ .endif
+60: PF pld, [ptr, #32*(prefetch_distance+1)]
+61:
+ .endif
+.endm
+
+#define IS_END_OF_GROUP(INDEX,SIZE) ((SIZE) < 2 || ((INDEX) & ~((INDEX)+1)) & ((SIZE)/2))
+.macro preload_middle bpp, base, scratch_holds_offset
+ .if bpp > 0
+ /* prefetch distance = 256/bpp, stm distance = 128/dst_w_bpp */
+ .if IS_END_OF_GROUP(SUBBLOCK,256/128*dst_w_bpp/bpp)
+ .if scratch_holds_offset
+ PF pld, [base, SCRATCH]
+ .else
+ PF bic, SCRATCH, base, #31
+ PF pld, [SCRATCH, #32*prefetch_distance]
+ .endif
+ .endif
+ .endif
+.endm
+
+.macro preload_trailing bpp, bpp_shift, base
+ .if bpp > 0
+ .if bpp*pix_per_block > 256
+ /* Calculations are more complex if more than one fetch per block */
+ PF and, WK1, base, #31
+ PF add, WK1, WK1, WK0, lsl #bpp_shift
+ PF add, WK1, WK1, #32*(bpp*pix_per_block/256-1)*(prefetch_distance+1)
+ PF bic, SCRATCH, base, #31
+80: PF pld, [SCRATCH, #32*(prefetch_distance+1)]
+ PF add, SCRATCH, SCRATCH, #32
+ PF subs, WK1, WK1, #32
+ PF bhi, 80b
+ .else
+ /* If exactly one fetch per block, then we need either 0, 1 or 2 extra preloads */
+ PF mov, SCRATCH, base, lsl #32-5
+ PF adds, SCRATCH, SCRATCH, X, lsl #32-5+bpp_shift
+ PF adceqs, SCRATCH, SCRATCH, #0
+ /* The instruction above has two effects: ensures Z is only
+ * set if C was clear (so Z indicates that both shifted quantities
+ * were 0), and clears C if Z was set (so C indicates that the sum
+ * of the shifted quantities was greater and not equal to 32) */
+ PF beq, 82f
+ PF bic, SCRATCH, base, #31
+ PF bcc, 81f
+ PF pld, [SCRATCH, #32*(prefetch_distance+2)]
+81: PF pld, [SCRATCH, #32*(prefetch_distance+1)]
+82:
+ .endif
+ .endif
+.endm
+
+
+.macro preload_line narrow_case, bpp, bpp_shift, base
+/* "narrow_case" - just means that the macro was invoked from the "narrow"
+ * code path rather than the "medium" one - because in the narrow case,
+ * the row of pixels is known to output no more than 30 bytes, then
+ * (assuming the source pixels are no wider than the the destination
+ * pixels) they cannot possibly straddle more than 2 32-byte cachelines,
+ * meaning there's no need for a loop.
+ * "bpp" - number of bits per pixel in the channel (source, mask or
+ * destination) that's being preloaded, or 0 if this channel is not used
+ * for reading
+ * "bpp_shift" - log2 of ("bpp"/8) (except if "bpp"=0 of course)
+ * "base" - base address register of channel to preload (SRC, MASK or DST)
+ */
+ .if bpp > 0
+ .if narrow_case && (bpp <= dst_w_bpp)
+ /* In these cases, each line for each channel is in either 1 or 2 cache lines */
+ PF bic, WK0, base, #31
+ PF pld, [WK0]
+ PF add, WK1, base, X, LSL #bpp_shift
+ PF sub, WK1, WK1, #1
+ PF bic, WK1, WK1, #31
+ PF cmp, WK1, WK0
+ PF beq, 90f
+ PF pld, [WK1]
+90:
+ .else
+ PF bic, WK0, base, #31
+ PF pld, [WK0]
+ PF add, WK1, base, X, lsl #bpp_shift
+ PF sub, WK1, WK1, #1
+ PF bic, WK1, WK1, #31
+ PF cmp, WK1, WK0
+ PF beq, 92f
+91: PF add, WK0, WK0, #32
+ PF cmp, WK0, WK1
+ PF pld, [WK0]
+ PF bne, 91b
+92:
+ .endif
+ .endif
+.endm
+
+
+.macro conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx
+ process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, 0
+ .if decrementx
+ sub&cond X, X, #8*numbytes/dst_w_bpp
+ .endif
+ process_tail cond, numbytes, firstreg
+ .if !((flags) & FLAG_PROCESS_DOES_STORE)
+ pixst cond, numbytes, firstreg, DST
+ .endif
+.endm
+
+.macro conditional_process1 cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx
+ .if (flags) & FLAG_BRANCH_OVER
+ .ifc cond,mi
+ bpl 100f
+ .endif
+ .ifc cond,cs
+ bcc 100f
+ .endif
+ .ifc cond,ne
+ beq 100f
+ .endif
+ conditional_process1_helper , process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx
+100:
+ .else
+ conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx
+ .endif
+.endm
+
+.macro conditional_process2 test, cond1, cond2, process_head, process_tail, numbytes1, numbytes2, firstreg1, firstreg2, unaligned_src, unaligned_mask, decrementx
+ .if (flags) & (FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | FLAG_PROCESS_DOES_STORE)
+ /* Can't interleave reads and writes */
+ test
+ conditional_process1 cond1, process_head, process_tail, numbytes1, firstreg1, unaligned_src, unaligned_mask, decrementx
+ .if (flags) & FLAG_PROCESS_CORRUPTS_PSR
+ test
+ .endif
+ conditional_process1 cond2, process_head, process_tail, numbytes2, firstreg2, unaligned_src, unaligned_mask, decrementx
+ .else
+ /* Can interleave reads and writes for better scheduling */
+ test
+ process_head cond1, numbytes1, firstreg1, unaligned_src, unaligned_mask, 0
+ process_head cond2, numbytes2, firstreg2, unaligned_src, unaligned_mask, 0
+ .if decrementx
+ sub&cond1 X, X, #8*numbytes1/dst_w_bpp
+ sub&cond2 X, X, #8*numbytes2/dst_w_bpp
+ .endif
+ process_tail cond1, numbytes1, firstreg1
+ process_tail cond2, numbytes2, firstreg2
+ pixst cond1, numbytes1, firstreg1, DST
+ pixst cond2, numbytes2, firstreg2, DST
+ .endif
+.endm
+
+
+.macro test_bits_1_0_ptr
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ movs SCRATCH, X, lsl #32-1 /* C,N = bits 1,0 of DST */
+ .else
+ movs SCRATCH, WK0, lsl #32-1 /* C,N = bits 1,0 of DST */
+ .endif
+.endm
+
+.macro test_bits_3_2_ptr
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ movs SCRATCH, X, lsl #32-3 /* C,N = bits 3, 2 of DST */
+ .else
+ movs SCRATCH, WK0, lsl #32-3 /* C,N = bits 3, 2 of DST */
+ .endif
+.endm
+
+.macro leading_15bytes process_head, process_tail
+ /* On entry, WK0 bits 0-3 = number of bytes until destination is 16-byte aligned */
+ .set DECREMENT_X, 1
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ .set DECREMENT_X, 0
+ sub X, X, WK0, lsr #dst_bpp_shift
+ str X, [sp, #LINE_SAVED_REG_COUNT*4]
+ mov X, WK0
+ .endif
+ /* Use unaligned loads in all cases for simplicity */
+ .if dst_w_bpp == 8
+ conditional_process2 test_bits_1_0_ptr, mi, cs, process_head, process_tail, 1, 2, 1, 2, 1, 1, DECREMENT_X
+ .elseif dst_w_bpp == 16
+ test_bits_1_0_ptr
+ conditional_process1 cs, process_head, process_tail, 2, 2, 1, 1, DECREMENT_X
+ .endif
+ conditional_process2 test_bits_3_2_ptr, mi, cs, process_head, process_tail, 4, 8, 1, 2, 1, 1, DECREMENT_X
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ ldr X, [sp, #LINE_SAVED_REG_COUNT*4]
+ .endif
+.endm
+
+.macro test_bits_3_2_pix
+ movs SCRATCH, X, lsl #dst_bpp_shift+32-3
+.endm
+
+.macro test_bits_1_0_pix
+ .if dst_w_bpp == 8
+ movs SCRATCH, X, lsl #dst_bpp_shift+32-1
+ .else
+ movs SCRATCH, X, lsr #1
+ .endif
+.endm
+
+.macro trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask
+ conditional_process2 test_bits_3_2_pix, cs, mi, process_head, process_tail, 8, 4, 0, 2, unaligned_src, unaligned_mask, 0
+ .if dst_w_bpp == 16
+ test_bits_1_0_pix
+ conditional_process1 cs, process_head, process_tail, 2, 0, unaligned_src, unaligned_mask, 0
+ .elseif dst_w_bpp == 8
+ conditional_process2 test_bits_1_0_pix, cs, mi, process_head, process_tail, 2, 1, 0, 1, unaligned_src, unaligned_mask, 0
+ .endif
+.endm
+
+
+.macro wide_case_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, dst_alignment
+110:
+ .set SUBBLOCK, 0 /* this is a count of STMs; there can be up to 8 STMs per block */
+ .rept pix_per_block*dst_w_bpp/128
+ process_head , 16, 0, unaligned_src, unaligned_mask, 1
+ .if (src_bpp > 0) && (mask_bpp == 0) && ((flags) & FLAG_PROCESS_PRESERVES_SCRATCH)
+ preload_middle src_bpp, SRC, 1
+ .elseif (src_bpp == 0) && (mask_bpp > 0) && ((flags) & FLAG_PROCESS_PRESERVES_SCRATCH)
+ preload_middle mask_bpp, MASK, 1
+ .else
+ preload_middle src_bpp, SRC, 0
+ preload_middle mask_bpp, MASK, 0
+ .endif
+ .if (dst_r_bpp > 0) && ((SUBBLOCK % 2) == 0) && (((flags) & FLAG_NO_PRELOAD_DST) == 0)
+ /* Because we know that writes are 16-byte aligned, it's relatively easy to ensure that
+ * destination prefetches are 32-byte aligned. It's also the easiest channel to offset
+ * preloads for, to achieve staggered prefetches for multiple channels, because there are
+ * always two STMs per prefetch, so there is always an opposite STM on which to put the
+ * preload. Note, no need to BIC the base register here */
+ PF pld, [DST, #32*prefetch_distance - dst_alignment]
+ .endif
+ process_tail , 16, 0
+ .if !((flags) & FLAG_PROCESS_DOES_STORE)
+ pixst , 16, 0, DST
+ .endif
+ .set SUBBLOCK, SUBBLOCK+1
+ .endr
+ subs X, X, #pix_per_block
+ bhs 110b
+.endm
+
+.macro wide_case_inner_loop_and_trailing_pixels process_head, process_tail, process_inner_loop, exit_label, unaligned_src, unaligned_mask
+ /* Destination now 16-byte aligned; we have at least one block before we have to stop preloading */
+ .if dst_r_bpp > 0
+ tst DST, #16
+ bne 111f
+ process_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, 16 + DST_PRELOAD_BIAS
+ b 112f
+111:
+ .endif
+ process_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, 0 + DST_PRELOAD_BIAS
+112:
+ /* Just before the final (prefetch_distance+1) 32-byte blocks, deal with final preloads */
+ .if (src_bpp*pix_per_block > 256) || (mask_bpp*pix_per_block > 256) || (dst_r_bpp*pix_per_block > 256)
+ PF and, WK0, X, #pix_per_block-1
+ .endif
+ preload_trailing src_bpp, src_bpp_shift, SRC
+ preload_trailing mask_bpp, mask_bpp_shift, MASK
+ .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
+ preload_trailing dst_r_bpp, dst_bpp_shift, DST
+ .endif
+ add X, X, #(prefetch_distance+2)*pix_per_block - 128/dst_w_bpp
+ /* The remainder of the line is handled identically to the medium case */
+ medium_case_inner_loop_and_trailing_pixels process_head, process_tail,, exit_label, unaligned_src, unaligned_mask
+.endm
+
+.macro medium_case_inner_loop_and_trailing_pixels process_head, process_tail, unused, exit_label, unaligned_src, unaligned_mask
+120:
+ process_head , 16, 0, unaligned_src, unaligned_mask, 0
+ process_tail , 16, 0
+ .if !((flags) & FLAG_PROCESS_DOES_STORE)
+ pixst , 16, 0, DST
+ .endif
+ subs X, X, #128/dst_w_bpp
+ bhs 120b
+ /* Trailing pixels */
+ tst X, #128/dst_w_bpp - 1
+ beq exit_label
+ trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask
+.endm
+
+.macro narrow_case_inner_loop_and_trailing_pixels process_head, process_tail, unused, exit_label, unaligned_src, unaligned_mask
+ tst X, #16*8/dst_w_bpp
+ conditional_process1 ne, process_head, process_tail, 16, 0, unaligned_src, unaligned_mask, 0
+ /* Trailing pixels */
+ /* In narrow case, it's relatively unlikely to be aligned, so let's do without a branch here */
+ trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask
+.endm
+
+.macro switch_on_alignment action, process_head, process_tail, process_inner_loop, exit_label
+ /* Note that if we're reading the destination, it's already guaranteed to be aligned at this point */
+ .if mask_bpp == 8 || mask_bpp == 16
+ tst MASK, #3
+ bne 141f
+ .endif
+ .if src_bpp == 8 || src_bpp == 16
+ tst SRC, #3
+ bne 140f
+ .endif
+ action process_head, process_tail, process_inner_loop, exit_label, 0, 0
+ .if src_bpp == 8 || src_bpp == 16
+ b exit_label
+140:
+ action process_head, process_tail, process_inner_loop, exit_label, 1, 0
+ .endif
+ .if mask_bpp == 8 || mask_bpp == 16
+ b exit_label
+141:
+ .if src_bpp == 8 || src_bpp == 16
+ tst SRC, #3
+ bne 142f
+ .endif
+ action process_head, process_tail, process_inner_loop, exit_label, 0, 1
+ .if src_bpp == 8 || src_bpp == 16
+ b exit_label
+142:
+ action process_head, process_tail, process_inner_loop, exit_label, 1, 1
+ .endif
+ .endif
+.endm
+
+
+.macro end_of_line restore_x, vars_spilled, loop_label, last_one
+ .if SINGLE_SCANLINE
+ .ifc "last_one",""
+ b 198f
+ .endif
+ .else
+ .if vars_spilled
+ /* Sadly, GAS doesn't seem have an equivalent of the DCI directive? */
+ /* This is ldmia sp,{} */
+ .word 0xE89D0000 | LINE_SAVED_REGS
+ .endif
+ subs Y, Y, #1
+ .if vars_spilled
+ .if (LINE_SAVED_REGS) & (1<<1)
+ str Y, [sp]
+ .endif
+ .endif
+ add DST, DST, STRIDE_D
+ .if src_bpp > 0
+ add SRC, SRC, STRIDE_S
+ .endif
+ .if mask_bpp > 0
+ add MASK, MASK, STRIDE_M
+ .endif
+ .if restore_x
+ mov X, ORIG_W
+ .endif
+ bhs loop_label
+ .ifc "last_one",""
+ .if vars_spilled
+ b 197f
+ .else
+ b 198f
+ .endif
+ .else
+ .if (!vars_spilled) && ((flags) & FLAG_SPILL_LINE_VARS)
+ b 198f
+ .endif
+ .endif
+ .endif
+.endm
+
+
+.macro generate_composite_function_common fname, \
+ src_bpp_, \
+ mask_bpp_, \
+ dst_w_bpp_, \
+ flags_, \
+ prefetch_distance_, \
+ init, \
+ newline, \
+ cleanup, \
+ process_head, \
+ process_tail, \
+ process_inner_loop
+
+ pixman_asm_function fname
+
+/*
+ * Make some macro arguments globally visible and accessible
+ * from other macros
+ */
+ .set src_bpp, src_bpp_
+ .set mask_bpp, mask_bpp_
+ .set dst_w_bpp, dst_w_bpp_
+ .set flags, flags_
+ .set prefetch_distance, prefetch_distance_
+
+/*
+ * Select prefetch type for this function.
+ */
+ .if prefetch_distance == 0
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
+ .else
+ .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_STANDARD
+ .endif
+
+ .if src_bpp == 32
+ .set src_bpp_shift, 2
+ .elseif src_bpp == 24
+ .set src_bpp_shift, 0
+ .elseif src_bpp == 16
+ .set src_bpp_shift, 1
+ .elseif src_bpp == 8
+ .set src_bpp_shift, 0
+ .elseif src_bpp == 0
+ .set src_bpp_shift, -1
+ .else
+ .error "requested src bpp (src_bpp) is not supported"
+ .endif
+
+ .if mask_bpp == 32
+ .set mask_bpp_shift, 2
+ .elseif mask_bpp == 24
+ .set mask_bpp_shift, 0
+ .elseif mask_bpp == 8
+ .set mask_bpp_shift, 0
+ .elseif mask_bpp == 0
+ .set mask_bpp_shift, -1
+ .else
+ .error "requested mask bpp (mask_bpp) is not supported"
+ .endif
+
+ .if dst_w_bpp == 32
+ .set dst_bpp_shift, 2
+ .elseif dst_w_bpp == 24
+ .set dst_bpp_shift, 0
+ .elseif dst_w_bpp == 16
+ .set dst_bpp_shift, 1
+ .elseif dst_w_bpp == 8
+ .set dst_bpp_shift, 0
+ .else
+ .error "requested dst bpp (dst_w_bpp) is not supported"
+ .endif
+
+ .if (((flags) & FLAG_DST_READWRITE) != 0)
+ .set dst_r_bpp, dst_w_bpp
+ .else
+ .set dst_r_bpp, 0
+ .endif
+
+ .set pix_per_block, 16*8/dst_w_bpp
+ .if src_bpp != 0
+ .if 32*8/src_bpp > pix_per_block
+ .set pix_per_block, 32*8/src_bpp
+ .endif
+ .endif
+ .if mask_bpp != 0
+ .if 32*8/mask_bpp > pix_per_block
+ .set pix_per_block, 32*8/mask_bpp
+ .endif
+ .endif
+ .if dst_r_bpp != 0
+ .if 32*8/dst_r_bpp > pix_per_block
+ .set pix_per_block, 32*8/dst_r_bpp
+ .endif
+ .endif
+
+/* The standard entry conditions set up by pixman-arm-common.h are:
+ * r0 = width (pixels)
+ * r1 = height (rows)
+ * r2 = pointer to top-left pixel of destination
+ * r3 = destination stride (pixels)
+ * [sp] = source pixel value, or pointer to top-left pixel of source
+ * [sp,#4] = 0 or source stride (pixels)
+ * The following arguments are unused for non-mask operations
+ * [sp,#8] = mask pixel value, or pointer to top-left pixel of mask
+ * [sp,#12] = 0 or mask stride (pixels)
+ *
+ * or in the single-scanline case:
+ * r0 = width (pixels)
+ * r1 = pointer to top-left pixel of destination
+ * r2 = pointer to top-left pixel of source
+ * The following argument is unused for non-mask operations
+ * r3 = pointer to top-left pixel of mask
+ */
+
+/*
+ * Assign symbolic names to registers
+ */
+ X .req r0 /* pixels to go on this line */
+ .if SINGLE_SCANLINE
+ DST .req r1 /* destination pixel pointer */
+ SRC .req r2 /* source pixel pointer */
+ MASK .req r3 /* mask pixel pointer (if applicable) */
+ Y .req r4 /* temporary */
+ STRIDE_D .req r5 /* temporary */
+ STRIDE_S .req r6 /* temporary */
+ STRIDE_M .req r7 /* temporary */
+ .else
+ Y .req r1 /* lines to go */
+ DST .req r2 /* destination pixel pointer */
+ STRIDE_D .req r3 /* destination stride (bytes, minus width) */
+ SRC .req r4 /* source pixel pointer */
+ STRIDE_S .req r5 /* source stride (bytes, minus width) */
+ MASK .req r6 /* mask pixel pointer (if applicable) */
+ STRIDE_M .req r7 /* mask stride (bytes, minus width) */
+ .endif
+ WK0 .req r8 /* pixel data registers */
+ WK1 .req r9
+ WK2 .req r10
+ WK3 .req r11
+ SCRATCH .req r12
+ ORIG_W .req r14 /* width (pixels) */
+
+ push {r4-r11, lr} /* save all registers */
+
+ .if !SINGLE_SCANLINE
+ subs Y, Y, #1
+ blo 199f
+ .endif
+
+#ifdef DEBUG_PARAMS
+ sub sp, sp, #9*4
+#endif
+
+ .if !SINGLE_SCANLINE
+ .if src_bpp > 0
+ ldr SRC, [sp, #ARGS_STACK_OFFSET]
+ ldr STRIDE_S, [sp, #ARGS_STACK_OFFSET+4]
+ .endif
+ .if mask_bpp > 0
+ ldr MASK, [sp, #ARGS_STACK_OFFSET+8]
+ ldr STRIDE_M, [sp, #ARGS_STACK_OFFSET+12]
+ .endif
+ .endif
+
+#ifdef DEBUG_PARAMS
+ add Y, Y, #1
+ stmia sp, {r0-r7,pc}
+ sub Y, Y, #1
+#endif
+
+ init
+
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ /* Reserve a word in which to store X during leading pixels */
+ sub sp, sp, #4
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET+4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET+4
+ .endif
+
+ .if !SINGLE_SCANLINE
+ lsl STRIDE_D, #dst_bpp_shift /* stride in bytes */
+ sub STRIDE_D, STRIDE_D, X, lsl #dst_bpp_shift
+ .if src_bpp > 0
+ lsl STRIDE_S, #src_bpp_shift
+ sub STRIDE_S, STRIDE_S, X, lsl #src_bpp_shift
+ .endif
+ .if mask_bpp > 0
+ lsl STRIDE_M, #mask_bpp_shift
+ sub STRIDE_M, STRIDE_M, X, lsl #mask_bpp_shift
+ .endif
+ .endif
+
+ /* Are we not even wide enough to have one 16-byte aligned 16-byte block write? */
+ cmp X, #2*16*8/dst_w_bpp - 1
+ blo 170f
+ .if src_bpp || mask_bpp || dst_r_bpp /* Wide and medium cases are the same for fill */
+ /* To preload ahead on the current line, we need at least (prefetch_distance+2) 32-byte blocks on all prefetch channels */
+ cmp X, #(prefetch_distance+3)*pix_per_block - 1
+ blo 160f
+
+ /* Wide case */
+ /* Adjust X so that the decrement instruction can also test for
+ * inner loop termination. We want it to stop when there are
+ * (prefetch_distance+1) complete blocks to go. */
+ sub X, X, #(prefetch_distance+2)*pix_per_block
+ .if !SINGLE_SCANLINE
+ mov ORIG_W, X
+ .if (flags) & FLAG_SPILL_LINE_VARS_WIDE
+ /* This is stmdb sp!,{} */
+ .word 0xE92D0000 | LINE_SAVED_REGS
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
+ .endif
+ .endif
+151: /* New line */
+ newline
+ preload_leading_step1 src_bpp, WK1, SRC
+ preload_leading_step1 mask_bpp, WK2, MASK
+ .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
+ preload_leading_step1 dst_r_bpp, WK3, DST
+ .endif
+
+ ands WK0, DST, #15
+ beq 154f
+ rsb WK0, WK0, #16 /* number of leading bytes until destination aligned */
+
+ preload_leading_step2 src_bpp, src_bpp_shift, WK1, SRC
+ preload_leading_step2 mask_bpp, mask_bpp_shift, WK2, MASK
+ .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
+ preload_leading_step2 dst_r_bpp, dst_bpp_shift, WK3, DST
+ .endif
+
+ leading_15bytes process_head, process_tail
+
+154: /* Destination now 16-byte aligned; we have at least one prefetch on each channel as well as at least one 16-byte output block */
+ .if (src_bpp > 0) && (mask_bpp == 0) && ((flags) & FLAG_PROCESS_PRESERVES_SCRATCH)
+ and SCRATCH, SRC, #31
+ rsb SCRATCH, SCRATCH, #32*prefetch_distance
+ .elseif (src_bpp == 0) && (mask_bpp > 0) && ((flags) & FLAG_PROCESS_PRESERVES_SCRATCH)
+ and SCRATCH, MASK, #31
+ rsb SCRATCH, SCRATCH, #32*prefetch_distance
+ .endif
+ .ifc "process_inner_loop",""
+ switch_on_alignment wide_case_inner_loop_and_trailing_pixels, process_head, process_tail, wide_case_inner_loop, 157f
+ .else
+ switch_on_alignment wide_case_inner_loop_and_trailing_pixels, process_head, process_tail, process_inner_loop, 157f
+ .endif
+
+157: /* Check for another line */
+ end_of_line 1, %((flags) & FLAG_SPILL_LINE_VARS_WIDE), 151b
+ .if (!SINGLE_SCANLINE) && ((flags) & FLAG_SPILL_LINE_VARS_WIDE)
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
+ .endif
+ .endif
+
+ .ltorg
+
+160: /* Medium case */
+ .if !SINGLE_SCANLINE
+ mov ORIG_W, X
+ .if (flags) & FLAG_SPILL_LINE_VARS_NON_WIDE
+ /* This is stmdb sp!,{} */
+ .word 0xE92D0000 | LINE_SAVED_REGS
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
+ .endif
+ .endif
+161: /* New line */
+ newline
+ preload_line 0, src_bpp, src_bpp_shift, SRC /* in: X, corrupts: WK0-WK1 */
+ preload_line 0, mask_bpp, mask_bpp_shift, MASK
+ .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
+ preload_line 0, dst_r_bpp, dst_bpp_shift, DST
+ .endif
+
+ sub X, X, #128/dst_w_bpp /* simplifies inner loop termination */
+ ands WK0, DST, #15
+ beq 164f
+ rsb WK0, WK0, #16 /* number of leading bytes until destination aligned */
+
+ leading_15bytes process_head, process_tail
+
+164: /* Destination now 16-byte aligned; we have at least one 16-byte output block */
+ switch_on_alignment medium_case_inner_loop_and_trailing_pixels, process_head, process_tail,, 167f
+
+167: /* Check for another line */
+ end_of_line 1, %((flags) & FLAG_SPILL_LINE_VARS_NON_WIDE), 161b
+
+ .ltorg
+
+170: /* Narrow case, less than 31 bytes, so no guarantee of at least one 16-byte block */
+ .if !SINGLE_SCANLINE
+ .if dst_w_bpp < 32
+ mov ORIG_W, X
+ .endif
+ .if (flags) & FLAG_SPILL_LINE_VARS_NON_WIDE
+ /* This is stmdb sp!,{} */
+ .word 0xE92D0000 | LINE_SAVED_REGS
+ .endif
+ .endif
+171: /* New line */
+ newline
+ preload_line 1, src_bpp, src_bpp_shift, SRC /* in: X, corrupts: WK0-WK1 */
+ preload_line 1, mask_bpp, mask_bpp_shift, MASK
+ .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
+ preload_line 1, dst_r_bpp, dst_bpp_shift, DST
+ .endif
+
+ .if dst_w_bpp == 8
+ tst DST, #3
+ beq 174f
+172: subs X, X, #1
+ blo 177f
+ process_head , 1, 0, 1, 1, 0
+ process_tail , 1, 0
+ .if !((flags) & FLAG_PROCESS_DOES_STORE)
+ pixst , 1, 0, DST
+ .endif
+ tst DST, #3
+ bne 172b
+ .elseif dst_w_bpp == 16
+ tst DST, #2
+ beq 174f
+ subs X, X, #1
+ blo 177f
+ process_head , 2, 0, 1, 1, 0
+ process_tail , 2, 0
+ .if !((flags) & FLAG_PROCESS_DOES_STORE)
+ pixst , 2, 0, DST
+ .endif
+ .endif
+
+174: /* Destination now 4-byte aligned; we have 0 or more output bytes to go */
+ switch_on_alignment narrow_case_inner_loop_and_trailing_pixels, process_head, process_tail,, 177f
+
+177: /* Check for another line */
+ end_of_line %(dst_w_bpp < 32), %((flags) & FLAG_SPILL_LINE_VARS_NON_WIDE), 171b, last_one
+ .if (!SINGLE_SCANLINE) && ((flags) & FLAG_SPILL_LINE_VARS_NON_WIDE)
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
+ .endif
+
+197:
+ .if (!SINGLE_SCANLINE) && ((flags) & FLAG_SPILL_LINE_VARS)
+ add sp, sp, #LINE_SAVED_REG_COUNT*4
+ .endif
+198:
+ .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
+ .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET-4
+ .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET-4
+ add sp, sp, #4
+ .endif
+
+ cleanup
+
+#ifdef DEBUG_PARAMS
+ add sp, sp, #9*4 /* junk the debug copy of arguments */
+#endif
+199:
+ pop {r4-r11, pc} /* exit */
+
+ .ltorg
+
+ .unreq X
+ .unreq Y
+ .unreq DST
+ .unreq STRIDE_D
+ .unreq SRC
+ .unreq STRIDE_S
+ .unreq MASK
+ .unreq STRIDE_M
+ .unreq WK0
+ .unreq WK1
+ .unreq WK2
+ .unreq WK3
+ .unreq SCRATCH
+ .unreq ORIG_W
+ .endfunc
+.endm
+
+.macro generate_composite_function fname, \
+ src_bpp_, \
+ mask_bpp_, \
+ dst_w_bpp_, \
+ flags_, \
+ prefetch_distance_, \
+ init, \
+ newline, \
+ cleanup, \
+ process_head, \
+ process_tail, \
+ process_inner_loop
+ .set SINGLE_SCANLINE, 0
+generate_composite_function_common \
+ fname, src_bpp_, mask_bpp_, dst_w_bpp_, flags_, prefetch_distance_, \
+ init, newline, cleanup, process_head, process_tail, process_inner_loop
+.endm
+
+.macro generate_composite_function_single_scanline fname, \
+ src_bpp_, \
+ mask_bpp_, \
+ dst_w_bpp_, \
+ flags_, \
+ prefetch_distance_, \
+ init, \
+ newline, \
+ cleanup, \
+ process_head, \
+ process_tail, \
+ process_inner_loop
+ .set SINGLE_SCANLINE, 1
+generate_composite_function_common \
+ fname, src_bpp_, mask_bpp_, dst_w_bpp_, flags_, prefetch_distance_, \
+ init, newline, cleanup, process_head, process_tail, process_inner_loop
+.endm
+
+.macro line_saved_regs x:vararg
+ .set LINE_SAVED_REGS, 0
+ .set LINE_SAVED_REG_COUNT, 0
+ .irp SAVED_REG,x
+ .ifc "SAVED_REG","Y"
+ .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<1)
+ .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
+ .endif
+ .ifc "SAVED_REG","STRIDE_D"
+ .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<3)
+ .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
+ .endif
+ .ifc "SAVED_REG","STRIDE_S"
+ .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<5)
+ .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
+ .endif
+ .ifc "SAVED_REG","STRIDE_M"
+ .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<7)
+ .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
+ .endif
+ .ifc "SAVED_REG","ORIG_W"
+ .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<14)
+ .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
+ .endif
+ .endr
+ .if SINGLE_SCANLINE
+ .set LINE_SAVED_REG_COUNT, 0
+ .endif
+.endm
+
+.macro nop_macro x:vararg
+.endm
--- a/external/SDL2/src/video/cocoa/SDL_cocoaclipboard.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaclipboard.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaclipboard.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaevents.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaevents.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaevents.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,6 +21,7 @@
#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_COCOA
+
#include "SDL_timer.h"
#include "SDL_cocoavideo.h"
@@ -238,6 +239,12 @@
* of here. https://bugzilla.libsdl.org/show_bug.cgi?id=3051
*/
if (!SDL_GetHintBoolean(SDL_HINT_MAC_BACKGROUND_APP, SDL_FALSE)) {
+ /* Get more aggressive for Catalina: activate the Dock first so we definitely reset all activation state. */
+ for (NSRunningApplication *i in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.dock"]) {
+ [i activateWithOptions:NSApplicationActivateIgnoringOtherApps];
+ break;
+ }
+ SDL_Delay(300); /* !!! FIXME: this isn't right. */
[NSApp activateIgnoringOtherApps:YES];
}
@@ -267,6 +274,25 @@
return appName;
}
+static bool
+LoadMainMenuNibIfAvailable(void)
+{
+ NSDictionary *infoDict;
+ NSString *mainNibFileName;
+ bool success = false;
+
+ infoDict = [[NSBundle mainBundle] infoDictionary];
+ if (infoDict) {
+ mainNibFileName = [infoDict valueForKey:@"NSMainNibFile"];
+
+ if (mainNibFileName) {
+ success = [[NSBundle mainBundle] loadNibNamed:mainNibFileName owner:[NSApplication sharedApplication] topLevelObjects:nil];
+ }
+ }
+
+ return success;
+}
+
static void
CreateApplicationMenus(void)
{
@@ -281,7 +307,7 @@
if (NSApp == nil) {
return;
}
-
+
mainMenu = [[NSMenu alloc] init];
/* Create the main menu bar */
@@ -385,8 +411,17 @@
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
}
+ /* If there aren't already menus in place, look to see if there's
+ * a nib we should use. If not, then manually create the basic
+ * menus we meed.
+ */
if ([NSApp mainMenu] == nil) {
- CreateApplicationMenus();
+ bool nibLoaded;
+
+ nibLoaded = LoadMainMenuNibIfAvailable();
+ if (!nibLoaded) {
+ CreateApplicationMenus();
+ }
}
[NSApp finishLaunching];
if ([NSApp delegate]) {
--- a/external/SDL2/src/video/cocoa/SDL_cocoakeyboard.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoakeyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoakeyboard.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoakeyboard.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -473,7 +473,7 @@
SDL_SetScancodeName(SDL_SCANCODE_RALT, "Right Option");
SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Command");
- data->modifierFlags = [NSEvent modifierFlags];
+ data->modifierFlags = (unsigned int)[NSEvent modifierFlags];
SDL_ToggleModState(KMOD_CAPS, (data->modifierFlags & NSEventModifierFlagCapsLock) != 0);
}
@@ -590,7 +590,7 @@
break;
case NSEventTypeFlagsChanged:
/* FIXME CW 2007-08-14: check if this whole mess that takes up half of this file is really necessary */
- HandleModifiers(_this, scancode, [event modifierFlags]);
+ HandleModifiers(_this, scancode, (unsigned int)[event modifierFlags]);
break;
default: /* just to avoid compiler warnings */
break;
--- a/external/SDL2/src/video/cocoa/SDL_cocoamessagebox.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamessagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoamessagebox.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamessagebox.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -112,10 +112,19 @@
const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons;
int i;
for (i = 0; i < messageboxdata->numbuttons; ++i) {
- NSButton *button = [alert addButtonWithTitle:[NSString stringWithUTF8String:buttons[i].text]];
- if (buttons[i].flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
+ const SDL_MessageBoxButtonData *sdlButton;
+ NSButton *button;
+
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ } else {
+ sdlButton = &messageboxdata->buttons[i];
+ }
+
+ button = [alert addButtonWithTitle:[NSString stringWithUTF8String:sdlButton->text]];
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
[button setKeyEquivalent:@"\r"];
- } else if (buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
+ } else if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
[button setKeyEquivalent:@"\033"];
} else {
[button setKeyEquivalent:@""];
@@ -132,6 +141,9 @@
NSInteger clicked = presenter->clicked;
if (clicked >= NSAlertFirstButtonReturn) {
clicked -= NSAlertFirstButtonReturn;
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ clicked = messageboxdata->numbuttons - 1 - clicked;
+ }
*buttonid = buttons[clicked].buttonid;
} else {
returnValue = SDL_SetError("Did not get a valid `clicked button' id: %ld", (long)clicked);
--- a/external/SDL2/src/video/cocoa/SDL_cocoametalview.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoametalview.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -24,15 +24,17 @@
* Thanks to Alex Szpakowski, @slime73 on GitHub, for his gist showing
* how to add a CAMetalLayer backed view.
*/
+#include "../../SDL_internal.h"
#ifndef SDL_cocoametalview_h_
#define SDL_cocoametalview_h_
+#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL)
+
#import "../SDL_sysvideo.h"
+
#import "SDL_cocoawindow.h"
-#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL)
-
#import <Cocoa/Cocoa.h>
#import <Metal/Metal.h>
#import <QuartzCore/CAMetalLayer.h>
@@ -42,20 +44,25 @@
@interface SDL_cocoametalview : NSView
- (instancetype)initWithFrame:(NSRect)frame
- highDPI:(BOOL)highDPI;
+ highDPI:(BOOL)highDPI
+ windowID:(Uint32)windowID;
+- (void)updateDrawableSize;
+
/* Override superclass tag so this class can set it. */
@property (assign, readonly) NSInteger tag;
@property (nonatomic) BOOL highDPI;
+@property (nonatomic) Uint32 sdlWindowID;
@end
-SDL_cocoametalview* Cocoa_Mtl_AddMetalView(SDL_Window* window);
+SDL_MetalView Cocoa_Metal_CreateView(_THIS, SDL_Window * window);
+void Cocoa_Metal_DestroyView(_THIS, SDL_MetalView view);
-void Cocoa_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h);
+void Cocoa_Metal_GetDrawableSize(SDL_Window * window, int * w, int * h);
-#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) */
+#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL) */
#endif /* SDL_cocoametalview_h_ */
--- a/external/SDL2/src/video/cocoa/SDL_cocoametalview.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoametalview.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,10 +27,32 @@
#import "SDL_cocoametalview.h"
-#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL)
+#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL)
#include "SDL_assert.h"
+#include "SDL_events.h"
+static int SDLCALL
+SDL_MetalViewEventWatch(void *userdata, SDL_Event *event)
+{
+ /* Update the drawable size when SDL receives a size changed event for
+ * the window that contains the metal view. It would be nice to use
+ * - (void)resizeWithOldSuperviewSize:(NSSize)oldSize and
+ * - (void)viewDidChangeBackingProperties instead, but SDL's size change
+ * events don't always happen in the same frame (for example when a
+ * resizable window exits a fullscreen Space via the user pressing the OS
+ * exit-space button). */
+ if (event->type == SDL_WINDOWEVENT && event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
+ @autoreleasepool {
+ SDL_cocoametalview *view = (__bridge SDL_cocoametalview *)userdata;
+ if (view.sdlWindowID == event->window.windowID) {
+ [view updateDrawableSize];
+ }
+ }
+ }
+ return 0;
+}
+
@implementation SDL_cocoametalview
/* Return a Metal-compatible layer. */
@@ -55,14 +77,18 @@
- (instancetype)initWithFrame:(NSRect)frame
highDPI:(BOOL)highDPI
+ windowID:(Uint32)windowID;
{
if ((self = [super initWithFrame:frame])) {
self.highDPI = highDPI;
+ self.sdlWindowID = windowID;
self.wantsLayer = YES;
/* Allow resize. */
self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
+ SDL_AddEventWatch(SDL_MetalViewEventWatch, self);
+
[self updateDrawableSize];
}
@@ -69,6 +95,12 @@
return self;
}
+- (void)dealloc
+{
+ SDL_DelEventWatch(SDL_MetalViewEventWatch, self);
+ [super dealloc];
+}
+
- (NSInteger)tag
{
return METALVIEW_TAG;
@@ -77,8 +109,8 @@
- (void)updateDrawableSize
{
CAMetalLayer *metalLayer = (CAMetalLayer *)self.layer;
- CGSize size = self.bounds.size;
- CGSize backingSize = size;
+ NSSize size = self.bounds.size;
+ NSSize backingSize = size;
if (self.highDPI) {
/* Note: NSHighResolutionCapable must be set to true in the app's
@@ -88,34 +120,46 @@
}
metalLayer.contentsScale = backingSize.height / size.height;
- metalLayer.drawableSize = backingSize;
+ metalLayer.drawableSize = NSSizeToCGSize(backingSize);
}
-/* Set the size of the metal drawables when the view is resized. */
-- (void)resizeWithOldSuperviewSize:(NSSize)oldSize
-{
- [super resizeWithOldSuperviewSize:oldSize];
- [self updateDrawableSize];
-}
-
@end
-SDL_cocoametalview*
-Cocoa_Mtl_AddMetalView(SDL_Window* window)
-{
+SDL_MetalView
+Cocoa_Metal_CreateView(_THIS, SDL_Window * window)
+{ @autoreleasepool {
SDL_WindowData* data = (__bridge SDL_WindowData *)window->driverdata;
NSView *view = data->nswindow.contentView;
BOOL highDPI = (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) != 0;
- SDL_cocoametalview *metalview;
+ Uint32 windowID = SDL_GetWindowID(window);
+ SDL_cocoametalview *newview;
+ SDL_MetalView metalview;
- metalview = [[SDL_cocoametalview alloc] initWithFrame:view.frame highDPI:highDPI];
- [view addSubview:metalview];
+ newview = [[SDL_cocoametalview alloc] initWithFrame:view.frame
+ highDPI:highDPI
+ windowID:windowID];
+ if (newview == nil) {
+ return NULL;
+ }
+
+ [view addSubview:newview];
+
+ metalview = (SDL_MetalView)CFBridgingRetain(newview);
+ [newview release];
+
return metalview;
-}
+}}
void
-Cocoa_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h)
-{
+Cocoa_Metal_DestroyView(_THIS, SDL_MetalView view)
+{ @autoreleasepool {
+ SDL_cocoametalview *metalview = CFBridgingRelease(view);
+ [metalview removeFromSuperview];
+}}
+
+void
+Cocoa_Metal_GetDrawableSize(SDL_Window * window, int * w, int * h)
+{ @autoreleasepool {
SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata;
NSView *view = data->nswindow.contentView;
SDL_cocoametalview* metalview = [view viewWithTag:METALVIEW_TAG];
@@ -131,8 +175,8 @@
} else {
SDL_GetWindowSize(window, w, h);
}
-}
+}}
-#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) */
+#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL) */
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/cocoa/SDL_cocoamodes.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamodes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -30,7 +30,7 @@
typedef struct
{
- CGDisplayModeRef moderef;
+ CFMutableArrayRef modes;
} SDL_DisplayModeData;
extern void Cocoa_InitModes(_THIS);
--- a/external/SDL2/src/video/cocoa/SDL_cocoamodes.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamodes.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -38,7 +38,11 @@
/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */
#include <AvailabilityMacros.h>
+#ifndef MAC_OS_X_VERSION_10_13
+#define NSAppKitVersionNumber10_12 1504
+#endif
+
static void
Cocoa_ToggleMenuBar(const BOOL show)
{
@@ -99,69 +103,194 @@
return SDL_SetError("%s: %s", prefix, error);
}
+static int
+GetDisplayModeRefreshRate(CGDisplayModeRef vidmode, CVDisplayLinkRef link)
+{
+ int refreshRate = (int) (CGDisplayModeGetRefreshRate(vidmode) + 0.5);
+
+ /* CGDisplayModeGetRefreshRate can return 0 (eg for built-in displays). */
+ if (refreshRate == 0 && link != NULL) {
+ CVTime time = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link);
+ if ((time.flags & kCVTimeIsIndefinite) == 0 && time.timeValue != 0) {
+ refreshRate = (int) ((time.timeScale / (double) time.timeValue) + 0.5);
+ }
+ }
+
+ return refreshRate;
+}
+
static SDL_bool
-GetDisplayMode(_THIS, CGDisplayModeRef vidmode, CVDisplayLinkRef link, SDL_DisplayMode *mode)
+HasValidDisplayModeFlags(CGDisplayModeRef vidmode)
{
- SDL_DisplayModeData *data;
- int width = 0;
- int height = 0;
- int bpp = 0;
- int refreshRate = 0;
- CFStringRef fmt;
+ uint32_t ioflags = CGDisplayModeGetIOFlags(vidmode);
- data = (SDL_DisplayModeData *) SDL_malloc(sizeof(*data));
- if (!data) {
+ /* Filter out modes which have flags that we don't want. */
+ if (ioflags & (kDisplayModeNeverShowFlag | kDisplayModeNotGraphicsQualityFlag)) {
return SDL_FALSE;
}
- data->moderef = vidmode;
- fmt = CGDisplayModeCopyPixelEncoding(vidmode);
- width = (int) CGDisplayModeGetWidth(vidmode);
- height = (int) CGDisplayModeGetHeight(vidmode);
- refreshRate = (int) (CGDisplayModeGetRefreshRate(vidmode) + 0.5);
+ /* Filter out modes which don't have flags that we want. */
+ if (!(ioflags & kDisplayModeValidFlag) || !(ioflags & kDisplayModeSafeFlag)) {
+ return SDL_FALSE;
+ }
+ return SDL_TRUE;
+}
+
+static Uint32
+GetDisplayModePixelFormat(CGDisplayModeRef vidmode)
+{
+ /* This API is deprecated in 10.11 with no good replacement (as of 10.15). */
+ CFStringRef fmt = CGDisplayModeCopyPixelEncoding(vidmode);
+ Uint32 pixelformat = SDL_PIXELFORMAT_UNKNOWN;
+
if (CFStringCompare(fmt, CFSTR(IO32BitDirectPixels),
kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
- bpp = 32;
+ pixelformat = SDL_PIXELFORMAT_ARGB8888;
} else if (CFStringCompare(fmt, CFSTR(IO16BitDirectPixels),
kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
- bpp = 16;
+ pixelformat = SDL_PIXELFORMAT_ARGB1555;
} else if (CFStringCompare(fmt, CFSTR(kIO30BitDirectPixels),
kCFCompareCaseInsensitive) == kCFCompareEqualTo) {
- bpp = 30;
+ pixelformat = SDL_PIXELFORMAT_ARGB2101010;
} else {
- bpp = 0; /* ignore 8-bit and such for now. */
+ /* ignore 8-bit and such for now. */
}
CFRelease(fmt);
- /* CGDisplayModeGetRefreshRate returns 0 for many non-CRT displays. */
- if (refreshRate == 0 && link != NULL) {
- CVTime time = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link);
- if ((time.flags & kCVTimeIsIndefinite) == 0 && time.timeValue != 0) {
- refreshRate = (int) ((time.timeScale / (double) time.timeValue) + 0.5);
+ return pixelformat;
+}
+
+static SDL_bool
+GetDisplayMode(_THIS, CGDisplayModeRef vidmode, CFArrayRef modelist, CVDisplayLinkRef link, SDL_DisplayMode *mode)
+{
+ SDL_DisplayModeData *data;
+ bool usableForGUI = CGDisplayModeIsUsableForDesktopGUI(vidmode);
+ int width = (int) CGDisplayModeGetWidth(vidmode);
+ int height = (int) CGDisplayModeGetHeight(vidmode);
+ uint32_t ioflags = CGDisplayModeGetIOFlags(vidmode);
+ int refreshrate = GetDisplayModeRefreshRate(vidmode, link);
+ Uint32 format = GetDisplayModePixelFormat(vidmode);
+ bool interlaced = (ioflags & kDisplayModeInterlacedFlag) != 0;
+ CFMutableArrayRef modes;
+
+ if (format == SDL_PIXELFORMAT_UNKNOWN) {
+ return SDL_FALSE;
+ }
+
+ if (!HasValidDisplayModeFlags(vidmode)) {
+ return SDL_FALSE;
+ }
+
+ modes = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
+ CFArrayAppendValue(modes, vidmode);
+
+ /* If a list of possible diplay modes is passed in, use it to filter out
+ * modes that have duplicate sizes. We don't just rely on SDL's higher level
+ * duplicate filtering because this code can choose what properties are
+ * prefered, and it can add CGDisplayModes to the DisplayModeData's list of
+ * modes to try (see comment below for why that's necessary).
+ * CGDisplayModeGetPixelWidth and friends are only available in 10.8+. */
+#ifdef MAC_OS_X_VERSION_10_8
+ if (modelist != NULL && floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7) {
+ int pixelW = (int) CGDisplayModeGetPixelWidth(vidmode);
+ int pixelH = (int) CGDisplayModeGetPixelHeight(vidmode);
+
+ CFIndex modescount = CFArrayGetCount(modelist);
+
+ for (int i = 0; i < modescount; i++) {
+ CGDisplayModeRef othermode = (CGDisplayModeRef) CFArrayGetValueAtIndex(modelist, i);
+ uint32_t otherioflags = CGDisplayModeGetIOFlags(othermode);
+
+ if (CFEqual(vidmode, othermode)) {
+ continue;
+ }
+
+ if (!HasValidDisplayModeFlags(othermode)) {
+ continue;
+ }
+
+ int otherW = (int) CGDisplayModeGetWidth(othermode);
+ int otherH = (int) CGDisplayModeGetHeight(othermode);
+ int otherpixelW = (int) CGDisplayModeGetPixelWidth(othermode);
+ int otherpixelH = (int) CGDisplayModeGetPixelHeight(othermode);
+ int otherrefresh = GetDisplayModeRefreshRate(othermode, link);
+ Uint32 otherformat = GetDisplayModePixelFormat(othermode);
+ bool otherGUI = CGDisplayModeIsUsableForDesktopGUI(othermode);
+
+ /* Ignore this mode if it's low-dpi (@1x) and we have a high-dpi
+ * mode in the list with the same size in points.
+ */
+ if (width == pixelW && height == pixelH
+ && width == otherW && height == otherH
+ && refreshrate == otherrefresh && format == otherformat
+ && (otherpixelW != otherW || otherpixelH != otherH)) {
+ CFRelease(modes);
+ return SDL_FALSE;
+ }
+
+ /* Ignore this mode if it's interlaced and there's a non-interlaced
+ * mode in the list with the same properties.
+ */
+ if (interlaced && ((otherioflags & kDisplayModeInterlacedFlag) == 0)
+ && width == otherW && height == otherH && pixelW == otherpixelW
+ && pixelH == otherpixelH && refreshrate == otherrefresh
+ && format == otherformat && usableForGUI == otherGUI) {
+ CFRelease(modes);
+ return SDL_FALSE;
+ }
+
+ /* Ignore this mode if it's not usable for desktop UI and its
+ * properties are equal to another GUI-capable mode in the list.
+ */
+ if (width == otherW && height == otherH && pixelW == otherpixelW
+ && pixelH == otherpixelH && !usableForGUI && otherGUI
+ && refreshrate == otherrefresh && format == otherformat) {
+ CFRelease(modes);
+ return SDL_FALSE;
+ }
+
+ /* If multiple modes have the exact same properties, they'll all
+ * go in the list of modes to try when SetDisplayMode is called.
+ * This is needed because kCGDisplayShowDuplicateLowResolutionModes
+ * (which is used to expose highdpi display modes) can make the
+ * list of modes contain duplicates (according to their properties
+ * obtained via public APIs) which don't work with SetDisplayMode.
+ * Those duplicate non-functional modes *do* have different pixel
+ * formats according to their internal data structure viewed with
+ * NSLog, but currently no public API can detect that.
+ * https://bugzilla.libsdl.org/show_bug.cgi?id=4822
+ *
+ * As of macOS 10.15.0, those duplicates have the exact same
+ * properties via public APIs in every way (even their IO flags and
+ * CGDisplayModeGetIODisplayModeID is the same), so we could test
+ * those for equality here too, but I'm intentionally not doing that
+ * in case there are duplicate modes with different IO flags or IO
+ * display mode IDs in the future. In that case I think it's better
+ * to try them all in SetDisplayMode than to risk one of them being
+ * correct but it being filtered out by SDL_AddDisplayMode as being
+ * a duplicate.
+ */
+ if (width == otherW && height == otherH && pixelW == otherpixelW
+ && pixelH == otherpixelH && usableForGUI == otherGUI
+ && refreshrate == otherrefresh && format == otherformat) {
+ CFArrayAppendValue(modes, othermode);
+ }
}
}
+#endif
- mode->format = SDL_PIXELFORMAT_UNKNOWN;
- switch (bpp) {
- case 16:
- mode->format = SDL_PIXELFORMAT_ARGB1555;
- break;
- case 30:
- mode->format = SDL_PIXELFORMAT_ARGB2101010;
- break;
- case 32:
- mode->format = SDL_PIXELFORMAT_ARGB8888;
- break;
- case 8: /* We don't support palettized modes now */
- default: /* Totally unrecognizable bit depth. */
- SDL_free(data);
+ data = (SDL_DisplayModeData *) SDL_malloc(sizeof(*data));
+ if (!data) {
+ CFRelease(modes);
return SDL_FALSE;
}
+ data->modes = modes;
+ mode->format = format;
mode->w = width;
mode->h = height;
- mode->refresh_rate = refreshRate;
+ mode->refresh_rate = refreshrate;
mode->driverdata = data;
return SDL_TRUE;
}
@@ -169,7 +298,9 @@
static const char *
Cocoa_GetDisplayName(CGDirectDisplayID displayID)
{
- CFDictionaryRef deviceInfo = IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName);
+ /* This API is deprecated in 10.9 with no good replacement (as of 10.15). */
+ io_service_t servicePort = CGDisplayIOServicePort(displayID);
+ CFDictionaryRef deviceInfo = IODisplayCreateInfoDictionary(servicePort, kIODisplayOnlyPreferredName);
NSDictionary *localizedNames = [(NSDictionary *)deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
const char* displayName = NULL;
@@ -244,7 +375,7 @@
SDL_zero(display);
/* this returns a stddup'ed string */
display.name = (char *)Cocoa_GetDisplayName(displays[i]);
- if (!GetDisplayMode(_this, moderef, link, &mode)) {
+ if (!GetDisplayMode(_this, moderef, NULL, link, &mode)) {
CVDisplayLinkRelease(link);
CGDisplayModeRelease(moderef);
SDL_free(display.name);
@@ -253,6 +384,7 @@
}
CVDisplayLinkRelease(link);
+ CGDisplayModeRelease(moderef);
display.desktop_mode = mode;
display.current_mode = mode;
@@ -311,27 +443,41 @@
int
Cocoa_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi)
+{ @autoreleasepool
{
const float MM_IN_INCH = 25.4f;
SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata;
- CGSize displaySize = CGDisplayScreenSize(data->display);
- int pixelWidth = (int) CGDisplayPixelsWide(data->display);
- int pixelHeight = (int) CGDisplayPixelsHigh(data->display);
+ /* we need the backingScaleFactor for Retina displays, which is only exposed through NSScreen, not CGDisplay, afaik, so find our screen... */
+ CGFloat scaleFactor = 1.0f;
+ NSArray *screens = [NSScreen screens];
+ for (NSScreen *screen in screens) {
+ const CGDirectDisplayID dpyid = (const CGDirectDisplayID ) [[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue];
+ if (dpyid == data->display) {
+ if ([screen respondsToSelector:@selector(backingScaleFactor)]) { // Mac OS X 10.7 and later
+ scaleFactor = [screen backingScaleFactor];
+ break;
+ }
+ }
+ }
+ const CGSize displaySize = CGDisplayScreenSize(data->display);
+ const int pixelWidth = (int) CGDisplayPixelsWide(data->display);
+ const int pixelHeight = (int) CGDisplayPixelsHigh(data->display);
+
if (ddpi) {
- *ddpi = SDL_ComputeDiagonalDPI(pixelWidth, pixelHeight, displaySize.width / MM_IN_INCH, displaySize.height / MM_IN_INCH);
+ *ddpi = (SDL_ComputeDiagonalDPI(pixelWidth, pixelHeight, displaySize.width / MM_IN_INCH, displaySize.height / MM_IN_INCH)) * scaleFactor;
}
if (hdpi) {
- *hdpi = pixelWidth * MM_IN_INCH / displaySize.width;
+ *hdpi = (pixelWidth * MM_IN_INCH / displaySize.width) * scaleFactor;
}
if (vdpi) {
- *vdpi = pixelHeight * MM_IN_INCH / displaySize.height;
+ *vdpi = (pixelHeight * MM_IN_INCH / displaySize.height) * scaleFactor;
}
return 0;
-}
+}}
void
Cocoa_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
@@ -341,6 +487,7 @@
CGDisplayModeRef desktopmoderef;
SDL_DisplayMode desktopmode;
CFArrayRef modes;
+ CFDictionaryRef dict = NULL;
CVDisplayLinkCreateWithCGDisplay(data->display, &link);
@@ -352,17 +499,45 @@
* sure there are no duplicates so it's safe to always add the desktop mode
* even in cases where it is in the CopyAllDisplayModes list.
*/
- if (desktopmoderef && GetDisplayMode(_this, desktopmoderef, link, &desktopmode)) {
+ if (desktopmoderef && GetDisplayMode(_this, desktopmoderef, NULL, link, &desktopmode)) {
if (!SDL_AddDisplayMode(display, &desktopmode)) {
- CGDisplayModeRelease(desktopmoderef);
+ CFRelease(((SDL_DisplayModeData*)desktopmode.driverdata)->modes);
SDL_free(desktopmode.driverdata);
}
- } else {
- CGDisplayModeRelease(desktopmoderef);
}
- modes = CGDisplayCopyAllDisplayModes(data->display, NULL);
+ CGDisplayModeRelease(desktopmoderef);
+ /* By default, CGDisplayCopyAllDisplayModes will only get a subset of the
+ * system's available modes. For example on a 15" 2016 MBP, users can
+ * choose 1920x1080@2x in System Preferences but it won't show up here,
+ * unless we specify the option below.
+ * The display modes returned by CGDisplayCopyAllDisplayModes are also not
+ * high dpi-capable unless this option is set.
+ * macOS 10.15 also seems to have a bug where entering, exiting, and
+ * re-entering exclusive fullscreen with a low dpi display mode can cause
+ * the content of the screen to move up, which this setting avoids:
+ * https://bugzilla.libsdl.org/show_bug.cgi?id=4822
+ */
+#ifdef MAC_OS_X_VERSION_10_8
+ if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7) {
+ const CFStringRef dictkeys[] = {kCGDisplayShowDuplicateLowResolutionModes};
+ const CFBooleanRef dictvalues[] = {kCFBooleanTrue};
+ dict = CFDictionaryCreate(NULL,
+ (const void **)dictkeys,
+ (const void **)dictvalues,
+ 1,
+ &kCFCopyStringDictionaryKeyCallBacks,
+ &kCFTypeDictionaryValueCallBacks);
+ }
+#endif
+
+ modes = CGDisplayCopyAllDisplayModes(data->display, dict);
+
+ if (dict) {
+ CFRelease(dict);
+ }
+
if (modes) {
CFIndex i;
const CFIndex count = CFArrayGetCount(modes);
@@ -371,10 +546,9 @@
CGDisplayModeRef moderef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
SDL_DisplayMode mode;
- if (GetDisplayMode(_this, moderef, link, &mode)) {
- if (SDL_AddDisplayMode(display, &mode)) {
- CGDisplayModeRetain(moderef);
- } else {
+ if (GetDisplayMode(_this, moderef, modes, link, &mode)) {
+ if (!SDL_AddDisplayMode(display, &mode)) {
+ CFRelease(((SDL_DisplayModeData*)mode.driverdata)->modes);
SDL_free(mode.driverdata);
}
}
@@ -386,6 +560,25 @@
CVDisplayLinkRelease(link);
}
+static CGError
+SetDisplayModeForDisplay(CGDirectDisplayID display, SDL_DisplayModeData *data)
+{
+ /* SDL_DisplayModeData can contain multiple CGDisplayModes to try (with
+ * identical properties), some of which might not work. See GetDisplayMode.
+ */
+ CGError result = kCGErrorFailure;
+ for (CFIndex i = 0; i < CFArrayGetCount(data->modes); i++) {
+ CGDisplayModeRef moderef = (CGDisplayModeRef)CFArrayGetValueAtIndex(data->modes, i);
+ result = CGDisplaySetDisplayMode(display, moderef, NULL);
+ if (result == kCGErrorSuccess) {
+ /* If this mode works, try it first next time. */
+ CFArrayExchangeValuesAtIndices(data->modes, i, 0);
+ break;
+ }
+ }
+ return result;
+}
+
int
Cocoa_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
{
@@ -401,7 +594,7 @@
if (data == display->desktop_mode.driverdata) {
/* Restoring desktop mode */
- CGDisplaySetDisplayMode(displaydata->display, data->moderef, NULL);
+ SetDisplayModeForDisplay(displaydata->display, data);
if (CGDisplayIsMain(displaydata->display)) {
CGReleaseAllDisplays();
@@ -426,7 +619,7 @@
}
/* Do the physical switch */
- result = CGDisplaySetDisplayMode(displaydata->display, data->moderef, NULL);
+ result = SetDisplayModeForDisplay(displaydata->display, data);
if (result != kCGErrorSuccess) {
CG_SetError("CGDisplaySwitchToMode()", result);
goto ERR_NO_SWITCH;
@@ -448,7 +641,11 @@
/* Since the blanking window covers *all* windows (even force quit) correct recovery is crucial */
ERR_NO_SWITCH:
- CGDisplayRelease(displaydata->display);
+ if (CGDisplayIsMain(displaydata->display)) {
+ CGReleaseAllDisplays();
+ } else {
+ CGDisplayRelease(displaydata->display);
+ }
ERR_NO_CAPTURE:
if (fade_token != kCGDisplayFadeReservationInvalidToken) {
CGDisplayFade (fade_token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0.0, 0.0, 0.0, FALSE);
@@ -471,13 +668,12 @@
}
mode = (SDL_DisplayModeData *) display->desktop_mode.driverdata;
- CGDisplayModeRelease(mode->moderef);
+ CFRelease(mode->modes);
for (j = 0; j < display->num_display_modes; j++) {
mode = (SDL_DisplayModeData*) display->display_modes[j].driverdata;
- CGDisplayModeRelease(mode->moderef);
+ CFRelease(mode->modes);
}
-
}
Cocoa_ToggleMenuBar(YES);
}
--- a/external/SDL2/src/video/cocoa/SDL_cocoamouse.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoamouse.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamouse.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoamousetap.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamousetap.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoamousetap.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoamousetap.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaopengl.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaopengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaopengl.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaopengl.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaopengles.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoaopengles.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoaopengles.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoashape.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoashape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoashape.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoashape.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoavideo.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoavideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -113,9 +113,8 @@
/* Utility functions */
extern NSImage * Cocoa_CreateImage(SDL_Surface * surface);
-/* Fix build with the 10.10 SDK */
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 101100
-#define NSEventSubtypeTouch NSTouchEventSubtype
+/* Fix build with the 10.11 SDK */
+#if MAC_OS_X_VERSION_MAX_ALLOWED < 101200
#define NSEventSubtypeMouseEvent NSMouseEventSubtype
#endif
--- a/external/SDL2/src/video/cocoa/SDL_cocoavideo.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoavideo.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,6 +27,7 @@
#include "SDL_cocoavideo.h"
#include "SDL_cocoashape.h"
#include "SDL_cocoavulkan.h"
+#include "SDL_cocoametalview.h"
#include "SDL_assert.h"
/* Initialization/Query functions */
@@ -140,6 +141,11 @@
device->Vulkan_GetInstanceExtensions = Cocoa_Vulkan_GetInstanceExtensions;
device->Vulkan_CreateSurface = Cocoa_Vulkan_CreateSurface;
device->Vulkan_GetDrawableSize = Cocoa_Vulkan_GetDrawableSize;
+#endif
+
+#if SDL_VIDEO_METAL
+ device->Metal_CreateView = Cocoa_Metal_CreateView;
+ device->Metal_DestroyView = Cocoa_Metal_DestroyView;
#endif
device->StartTextInput = Cocoa_StartTextInput;
--- a/external/SDL2/src/video/cocoa/SDL_cocoavulkan.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoavulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/cocoa/SDL_cocoavulkan.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoavulkan.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -23,7 +23,6 @@
* @author Mark Callow, www.edgewise-consulting.com. Based on Jacob Lifshay's
* SDL_x11vulkan.c.
*/
-
#include "../../SDL_internal.h"
#if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA
@@ -194,6 +193,7 @@
"vkCreateMacOSSurfaceMVK");
VkMacOSSurfaceCreateInfoMVK createInfo = {};
VkResult result;
+ SDL_MetalView metalview;
if (!_this->vulkan_config.loader_handle) {
SDL_SetError("Vulkan is not loaded");
@@ -205,23 +205,38 @@
" extension is not enabled in the Vulkan instance.");
return SDL_FALSE;
}
+
+ metalview = Cocoa_Metal_CreateView(_this, window);
+ if (metalview == NULL) {
+ return SDL_FALSE;
+ }
+
createInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
createInfo.pNext = NULL;
createInfo.flags = 0;
- createInfo.pView = Cocoa_Mtl_AddMetalView(window);
+ createInfo.pView = (const void *)metalview;
result = vkCreateMacOSSurfaceMVK(instance, &createInfo,
NULL, surface);
if (result != VK_SUCCESS) {
+ Cocoa_Metal_DestroyView(_this, metalview);
SDL_SetError("vkCreateMacOSSurfaceMVK failed: %s",
SDL_Vulkan_GetResultString(result));
return SDL_FALSE;
}
+
+ /* Unfortunately there's no SDL_Vulkan_DestroySurface function we can call
+ * Metal_DestroyView from. Right now the metal view's ref count is +2 (one
+ * from returning a new view object in CreateView, and one because it's
+ * a subview of the window.) If we release the view here to make it +1, it
+ * will be destroyed when the window is destroyed. */
+ CFBridgingRelease(metalview);
+
return SDL_TRUE;
}
void Cocoa_Vulkan_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h)
{
- Cocoa_Mtl_GetDrawableSize(window, w, h);
+ Cocoa_Metal_GetDrawableSize(window, w, h);
}
#endif
--- a/external/SDL2/src/video/cocoa/SDL_cocoawindow.h
+++ b/external/SDL2/src/video/cocoa/SDL_cocoawindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -116,7 +116,7 @@
NSView *sdlContentView; /* nil if window is created via CreateWindowFrom */
NSMutableArray *nscontexts;
SDL_bool created;
- SDL_bool inWindowMove;
+ SDL_bool inWindowFullscreenTransition;
Cocoa_WindowListener *listener;
struct SDL_VideoData *videodata;
#if SDL_VIDEO_OPENGL_EGL
--- a/external/SDL2/src/video/cocoa/SDL_cocoawindow.m
+++ b/external/SDL2/src/video/cocoa/SDL_cocoawindow.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -262,6 +262,22 @@
}
static NSUInteger
+GetWindowWindowedStyle(SDL_Window * window)
+{
+ NSUInteger style = 0;
+
+ if (window->flags & SDL_WINDOW_BORDERLESS) {
+ style = NSWindowStyleMaskBorderless;
+ } else {
+ style = (NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskMiniaturizable);
+ }
+ if (window->flags & SDL_WINDOW_RESIZABLE) {
+ style |= NSWindowStyleMaskResizable;
+ }
+ return style;
+}
+
+static NSUInteger
GetWindowStyle(SDL_Window * window)
{
NSUInteger style = 0;
@@ -269,14 +285,7 @@
if (window->flags & SDL_WINDOW_FULLSCREEN) {
style = NSWindowStyleMaskBorderless;
} else {
- if (window->flags & SDL_WINDOW_BORDERLESS) {
- style = NSWindowStyleMaskBorderless;
- } else {
- style = (NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskMiniaturizable);
- }
- if (window->flags & SDL_WINDOW_RESIZABLE) {
- style |= NSWindowStyleMaskResizable;
- }
+ style = GetWindowWindowedStyle(window);
}
return style;
}
@@ -754,10 +763,15 @@
isFullscreenSpace = NO;
inFullscreenTransition = YES;
- /* As of OS X 10.11, the window seems to need to be resizable when exiting
+ /* As of macOS 10.11, the window seems to need to be resizable when exiting
a Space, in order for it to resize back to its windowed-mode size.
+ As of macOS 10.15, the window decorations can go missing sometimes after
+ certain fullscreen-desktop->exlusive-fullscreen->windowed mode flows
+ sometimes. Making sure the style mask always uses the windowed mode style
+ when returning to windowed mode from a space (instead of using a pending
+ fullscreen mode style mask) seems to work around that issue.
*/
- SetWindowStyle(window, GetWindowStyle(window) | NSWindowStyleMaskResizable);
+ SetWindowStyle(window, GetWindowWindowedStyle(window) | NSWindowStyleMaskResizable);
}
- (void)windowDidFailToExitFullScreen:(NSNotification *)aNotification
@@ -780,12 +794,23 @@
{
SDL_Window *window = _data->window;
NSWindow *nswindow = _data->nswindow;
+ NSButton *button = nil;
inFullscreenTransition = NO;
- SetWindowStyle(window, GetWindowStyle(window));
+ /* As of macOS 10.15, the window decorations can go missing sometimes after
+ certain fullscreen-desktop->exlusive-fullscreen->windowed mode flows
+ sometimes. Making sure the style mask always uses the windowed mode style
+ when returning to windowed mode from a space (instead of using a pending
+ fullscreen mode style mask) seems to work around that issue.
+ */
+ SetWindowStyle(window, GetWindowWindowedStyle(window));
- [nswindow setLevel:kCGNormalWindowLevel];
+ if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
+ [nswindow setLevel:NSFloatingWindowLevel];
+ } else {
+ [nswindow setLevel:kCGNormalWindowLevel];
+ }
if (pendingWindowOperation == PENDING_OPERATION_ENTER_FULLSCREEN) {
pendingWindowOperation = PENDING_OPERATION_NONE;
@@ -841,6 +866,22 @@
Cocoa_ShowWindow(SDL_GetVideoDevice(), window);
}
}
+
+ /* There's some state that isn't quite back to normal when
+ windowDidExitFullScreen triggers. For example, the minimize button on
+ the titlebar doesn't actually enable for another 200 milliseconds or
+ so on this MacBook. Camp here and wait for that to happen before
+ going on, in case we're exiting fullscreen to minimize, which need
+ that window state to be normal before it will work. */
+ button = [nswindow standardWindowButton:NSWindowMiniaturizeButton];
+ if (button) {
+ int iterations = 0;
+ while (![button isEnabled] && (iterations < 100)) {
+ SDL_Delay(10);
+ SDL_PumpEvents();
+ iterations++;
+ }
+ }
}
-(NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
@@ -1132,7 +1173,13 @@
DLog("Reset Lost Fingers: %d", numFingers);
for (--numFingers; numFingers >= 0; --numFingers) {
SDL_Finger* finger = SDL_GetTouchFinger(touchID, numFingers);
- SDL_SendTouch(touchID, finger->id, SDL_FALSE, 0, 0, 0);
+ /* trackpad touches have no window. If we really wanted one we could
+ * use the window that has mouse or keyboard focus.
+ * Sending a null window currently also prevents synthetic mouse
+ * events from being generated from touch events.
+ */
+ SDL_Window *window = NULL;
+ SDL_SendTouch(touchID, finger->id, window, SDL_FALSE, 0, 0, 0);
}
}
@@ -1167,10 +1214,24 @@
const SDL_TouchID touchId = istrackpad ? SDL_MOUSE_TOUCHID : (SDL_TouchID)(intptr_t)[touch device];
SDL_TouchDeviceType devtype = SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE;
+ /* trackpad touches have no window. If we really wanted one we could
+ * use the window that has mouse or keyboard focus.
+ * Sending a null window currently also prevents synthetic mouse events
+ * from being generated from touch events.
+ */
+ SDL_Window *window = NULL;
+
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101202 /* Added in the 10.12.2 SDK. */
if ([touch respondsToSelector:@selector(type)]) {
+ /* TODO: Before implementing direct touch support here, we need to
+ * figure out whether the OS generates mouse events from them on its
+ * own. If it does, we should prevent SendTouch from generating
+ * synthetic mouse events for these touches itself (while also
+ * sending a window.) It will also need to use normalized window-
+ * relative coordinates via [touch locationInView:].
+ */
if ([touch type] == NSTouchTypeDirect) {
- devtype = SDL_TOUCH_DEVICE_DIRECT;
+ continue;
}
}
#endif
@@ -1187,14 +1248,14 @@
switch (phase) {
case NSTouchPhaseBegan:
- SDL_SendTouch(touchId, fingerId, SDL_TRUE, x, y, 1.0f);
+ SDL_SendTouch(touchId, fingerId, window, SDL_TRUE, x, y, 1.0f);
break;
case NSTouchPhaseEnded:
case NSTouchPhaseCancelled:
- SDL_SendTouch(touchId, fingerId, SDL_FALSE, x, y, 1.0f);
+ SDL_SendTouch(touchId, fingerId, window, SDL_FALSE, x, y, 1.0f);
break;
case NSTouchPhaseMoved:
- SDL_SendTouchMotion(touchId, fingerId, x, y, 1.0f);
+ SDL_SendTouchMotion(touchId, fingerId, window, x, y, 1.0f);
break;
default:
break;
@@ -1226,23 +1287,32 @@
_sdlWindow = window;
}
-/* this is used on older macOS revisions. 10.8 and later use updateLayer. */
+/* this is used on older macOS revisions, and newer ones which emulate old
+ NSOpenGLContext behaviour while still using a layer under the hood. 10.8 and
+ later use updateLayer, up until 10.14.2 or so, which uses drawRect without
+ a GraphicsContext and with a layer active instead (for OpenGL contexts). */
- (void)drawRect:(NSRect)dirtyRect
{
/* Force the graphics context to clear to black so we don't get a flash of
white until the app is ready to draw. In practice on modern macOS, this
only gets called for window creation and other extraordinary events. */
- [[NSColor blackColor] setFill];
- NSRectFill(dirtyRect);
+ if ([NSGraphicsContext currentContext]) {
+ [[NSColor blackColor] setFill];
+ NSRectFill(dirtyRect);
+ } else if (self.layer) {
+ self.layer.backgroundColor = CGColorGetConstantColor(kCGColorBlack);
+ }
+
SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0);
}
--(BOOL) wantsUpdateLayer
+- (BOOL)wantsUpdateLayer
{
return YES;
}
--(void) updateLayer
+/* This is also called when a Metal layer is active. */
+- (void)updateLayer
{
/* Force the graphics context to clear to black so we don't get a flash of
white until the app is ready to draw. In practice on modern macOS, this
@@ -1436,6 +1506,10 @@
}
}
+ if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
+ [nswindow setLevel:NSFloatingWindowLevel];
+ }
+
/* Create a default view for this window */
rect = [nswindow contentRectForFrameRect:[nswindow frame]];
SDLView *contentView = [[SDLView alloc] initWithFrame:rect];
@@ -1446,10 +1520,11 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
- if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
- if ([contentView respondsToSelector:@selector(setWantsBestResolutionOpenGLSurface:)]) {
- [contentView setWantsBestResolutionOpenGLSurface:YES];
- }
+ /* Note: as of the macOS 10.15 SDK, this defaults to YES instead of NO when
+ * the NSHighResolutionCapable boolean is set in Info.plist. */
+ if ([contentView respondsToSelector:@selector(setWantsBestResolutionOpenGLSurface:)]) {
+ BOOL highdpi = (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) != 0;
+ [contentView setWantsBestResolutionOpenGLSurface:highdpi];
}
#ifdef __clang__
#pragma clang diagnostic pop
@@ -1665,7 +1740,6 @@
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
NSWindow *nswindow = data->nswindow;
-
if ([data->listener isInFullscreenSpaceTransition]) {
[data->listener addPendingWindowOperation:PENDING_OPERATION_MINIMIZE];
} else {
@@ -1735,10 +1809,17 @@
rect.size.height = bounds.h;
ConvertNSRect([nswindow screen], fullscreen, &rect);
- /* Hack to fix origin on Mac OS X 10.4 */
- NSRect screenRect = [[nswindow screen] frame];
- if (screenRect.size.height >= 1.0f) {
- rect.origin.y += (screenRect.size.height - rect.size.height);
+ /* Hack to fix origin on Mac OS X 10.4
+ This is no longer needed as of Mac OS X 10.15, according to bug 4822.
+ */
+ NSProcessInfo *processInfo = [NSProcessInfo processInfo];
+ NSOperatingSystemVersion version = { 10, 15, 0 };
+ if (![processInfo respondsToSelector:@selector(isOperatingSystemAtLeastVersion:)] ||
+ ![processInfo isOperatingSystemAtLeastVersion:version]) {
+ NSRect screenRect = [[nswindow screen] frame];
+ if (screenRect.size.height >= 1.0f) {
+ rect.origin.y += (screenRect.size.height - rect.size.height);
+ }
}
[nswindow setStyleMask:NSWindowStyleMaskBorderless];
@@ -1749,7 +1830,13 @@
rect.size.height = window->windowed.h;
ConvertNSRect([nswindow screen], fullscreen, &rect);
- [nswindow setStyleMask:GetWindowStyle(window)];
+ /* The window is not meant to be fullscreen, but its flags might have a
+ * fullscreen bit set if it's scheduled to go fullscreen immediately
+ * after. Always using the windowed mode style here works around bugs in
+ * macOS 10.15 where the window doesn't properly restore the windowed
+ * mode decorations after exiting fullscreen-desktop, when the window
+ * was created as fullscreen-desktop. */
+ [nswindow setStyleMask:GetWindowWindowedStyle(window)];
/* Hack to restore window decorations on Mac OS X 10.10 */
NSRect frameRect = [nswindow frame];
@@ -1775,6 +1862,8 @@
if (SDL_ShouldAllowTopmost() && fullscreen) {
/* OpenGL is rendering to the window, so make it visible! */
[nswindow setLevel:CGShieldingWindowLevel()];
+ } else if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
+ [nswindow setLevel:NSFloatingWindowLevel];
} else {
[nswindow setLevel:kCGNormalWindowLevel];
}
@@ -1868,6 +1957,8 @@
/* OpenGL is rendering to the window, so make it visible! */
/* Doing this in 10.11 while in a Space breaks things (bug #3152) */
[data->nswindow setLevel:CGShieldingWindowLevel()];
+ } else if (window->flags & SDL_WINDOW_ALWAYS_ON_TOP) {
+ [data->nswindow setLevel:NSFloatingWindowLevel];
} else {
[data->nswindow setLevel:kCGNormalWindowLevel];
}
@@ -1939,6 +2030,11 @@
SDL_bool succeeded = SDL_FALSE;
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
+ if (data->inWindowFullscreenTransition) {
+ return SDL_FALSE;
+ }
+
+ data->inWindowFullscreenTransition = SDL_TRUE;
if ([data->listener setFullscreenSpace:(state ? YES : NO)]) {
const int maxattempts = 3;
int attempt = 0;
@@ -1965,6 +2061,7 @@
/* Return TRUE to prevent non-space fullscreen logic from running */
succeeded = SDL_TRUE;
}
+ data->inWindowFullscreenTransition = SDL_FALSE;
return succeeded;
}}
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_WM.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_WM.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_WM.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_WM.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_dyn.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_dyn.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_dyn.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_dyn.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_events.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_events.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -236,7 +236,7 @@
/* printf("Scancode %d %d %d\n", keysym.scancode, evt->key_code, evt->key_id); */
SDL_SendKeyboardKey_ex(0, SDL_PRESSED, keysym.scancode);
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
- SDL_zero(text);
+ SDL_zeroa(text);
UnicodeToUtf8(unicode, text);
if (*text) {
SDL_SendKeyboardText_ex(0, text);
@@ -372,7 +372,7 @@
/* printf("Scancode %d %d %d\n", keysym.scancode, evt->key_code, evt->key_id); */
SDL_SendKeyboardKey_ex(kbd_idx, SDL_PRESSED, keysym.scancode);
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
- SDL_zero(text);
+ SDL_zeroa(text);
UnicodeToUtf8(unicode, text);
if (*text) {
SDL_SendKeyboardText_ex(kbd_idx, text);
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_events.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_modes.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_modes.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_modes.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_modes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_mouse.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_mouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_mouse.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_mouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_opengl.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_opengl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_opengl.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_opengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_render.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_render.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -199,6 +199,14 @@
break;
}
+ case SDL_BLENDMODE_MUL:
+ data->blitFlags = DSBLIT_BLEND_ALPHACHANNEL;
+ data->drawFlags = DSDRAW_BLEND;
+ SDL_DFB_CHECK(destsurf->SetSrcBlendFunction(destsurf, DSBF_DSTCOLOR));
+ SDL_DFB_CHECK(destsurf->SetDstBlendFunction(destsurf, DSBF_INVSRCALPHA));
+
+ break;
+ }
data->lastBlendMode = blendMode;
}
}
@@ -223,6 +231,7 @@
break;
case SDL_BLENDMODE_ADD:
case SDL_BLENDMODE_MOD:
+ case SDL_BLENDMODE_MUL:
r = ((int) r * (int) a) / 255;
g = ((int) g * (int) a) / 255;
b = ((int) b * (int) a) / 255;
@@ -550,6 +559,11 @@
}
}
+static void
+DirectFB_SetTextureScaleMode()
+{
+}
+
#if 0
static void
DirectFB_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
@@ -966,6 +980,7 @@
renderer->UpdateTexture = DirectFB_UpdateTexture;
renderer->LockTexture = DirectFB_LockTexture;
renderer->UnlockTexture = DirectFB_UnlockTexture;
+ renderer->SetTextureScaleMode = DirectFB_SetTextureScaleMode;
renderer->QueueSetViewport = DirectFB_QueueSetViewport;
renderer->QueueSetDrawColor = DirectFB_QueueSetViewport; /* SetViewport and SetDrawColor are (currently) no-ops. */
renderer->QueueDrawPoints = DirectFB_QueueDrawPoints;
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_render.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_render.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_shape.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_shape.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_shape.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_shape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_video.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_video.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_video.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_video.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_window.c
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_window.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/directfb/SDL_DirectFB_window.h
+++ b/external/SDL2/src/video/directfb/SDL_DirectFB_window.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullevents.c
+++ b/external/SDL2/src/video/dummy/SDL_nullevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullevents_c.h
+++ b/external/SDL2/src/video/dummy/SDL_nullevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullframebuffer.c
+++ b/external/SDL2/src/video/dummy/SDL_nullframebuffer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullframebuffer_c.h
+++ b/external/SDL2/src/video/dummy/SDL_nullframebuffer_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullvideo.c
+++ b/external/SDL2/src/video/dummy/SDL_nullvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/dummy/SDL_nullvideo.h
+++ b/external/SDL2/src/video/dummy/SDL_nullvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenevents.c
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -206,7 +206,7 @@
/* 160 */ SDL_SCANCODE_UNKNOWN,
/* 161 */ SDL_SCANCODE_UNKNOWN,
/* 162 */ SDL_SCANCODE_UNKNOWN,
- /* 163 */ SDL_SCANCODE_UNKNOWN,
+ /* 163 */ SDL_SCANCODE_KP_HASH, /*KaiOS phone keypad*/
/* 164 */ SDL_SCANCODE_UNKNOWN,
/* 165 */ SDL_SCANCODE_UNKNOWN,
/* 166 */ SDL_SCANCODE_UNKNOWN,
@@ -213,7 +213,7 @@
/* 167 */ SDL_SCANCODE_UNKNOWN,
/* 168 */ SDL_SCANCODE_UNKNOWN,
/* 169 */ SDL_SCANCODE_UNKNOWN,
- /* 170 */ SDL_SCANCODE_UNKNOWN,
+ /* 170 */ SDL_SCANCODE_KP_MULTIPLY, /*KaiOS phone keypad*/
/* 171 */ SDL_SCANCODE_UNKNOWN,
/* 172 */ SDL_SCANCODE_UNKNOWN,
/* 173 */ SDL_SCANCODE_MINUS, /*FX*/
@@ -455,7 +455,7 @@
y = touchEvent->touches[i].targetY / client_h;
if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) {
- SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f);
+ SDL_SendTouch(deviceId, id, window_data->window, SDL_TRUE, x, y, 1.0f);
/* disable browser scrolling/pinch-to-zoom if app handles touch events */
if (!preventDefault && SDL_GetEventState(SDL_FINGERDOWN) == SDL_ENABLE) {
@@ -462,9 +462,9 @@
preventDefault = 1;
}
} else if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) {
- SDL_SendTouchMotion(deviceId, id, x, y, 1.0f);
+ SDL_SendTouchMotion(deviceId, id, window_data->window, x, y, 1.0f);
} else {
- SDL_SendTouch(deviceId, id, SDL_FALSE, x, y, 1.0f);
+ SDL_SendTouch(deviceId, id, window_data->window, SDL_FALSE, x, y, 1.0f);
/* block browser's simulated mousedown/mouseup on touchscreen devices */
preventDefault = 1;
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenevents.h
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.c
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.h
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenmouse.c
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenmouse.h
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenmouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenopengles.c
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenopengles.h
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenvideo.c
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/emscripten/SDL_emscriptenvideo.h
+++ b/external/SDL2/src/video/emscripten/SDL_emscriptenvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_BWin.h
+++ b/external/SDL2/src/video/haiku/SDL_BWin.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -86,6 +86,7 @@
_buffer_locker = new BLocker();
_bitmap = NULL;
_clips = NULL;
+ _num_clips = 0;
#ifdef DRAWTHREAD
_draw_thread_id = spawn_thread(HAIKU_DrawThread, "drawing_thread",
@@ -139,6 +140,7 @@
_gl_type = gl_flags;
}
AddChild(_SDL_GLView);
+ _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY);
_SDL_GLView->EnableDirectMode(true);
_SDL_GLView->LockGL(); /* "New" GLViews are created */
Unlock();
@@ -179,13 +181,17 @@
_connected = true;
case B_DIRECT_MODIFY:
- if(_clips) {
- free(_clips);
- _clips = NULL;
+ if (info->clip_list_count > _num_clips)
+ {
+ if(_clips) {
+ free(_clips);
+ _clips = NULL;
+ }
}
_num_clips = info->clip_list_count;
- _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect));
+ if (_clips == NULL)
+ _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect));
if(_clips) {
memcpy(_clips, info->clip_list,
_num_clips*sizeof(clipping_rect));
@@ -314,22 +320,17 @@
&& msg->FindInt32("be:transit", &transit) == B_OK) {
_MouseMotionEvent(where, transit);
}
+ break;
- /* FIXME: Apparently a button press/release event might be dropped
- if made before before a different button is released. Does
- B_MOUSE_MOVED have the data needed to check if a mouse button
- state has changed? */
+ case B_MOUSE_DOWN:
if (msg->FindInt32("buttons", &buttons) == B_OK) {
- _MouseButtonEvent(buttons);
+ _MouseButtonEvent(buttons, SDL_PRESSED);
}
break;
- case B_MOUSE_DOWN:
case B_MOUSE_UP:
- /* _MouseButtonEvent() detects any and all buttons that may have
- changed state, as well as that button's new state */
if (msg->FindInt32("buttons", &buttons) == B_OK) {
- _MouseButtonEvent(buttons);
+ _MouseButtonEvent(buttons, SDL_RELEASED);
}
break;
@@ -492,26 +493,17 @@
if true: SDL_SetCursor(NULL); */
}
- void _MouseButtonEvent(int32 buttons) {
+ void _MouseButtonEvent(int32 buttons, Uint8 state) {
int32 buttonStateChange = buttons ^ _last_buttons;
- /* Make sure at least one button has changed state */
- if( !(buttonStateChange) ) {
- return;
- }
-
- /* Add any mouse button events */
if(buttonStateChange & B_PRIMARY_MOUSE_BUTTON) {
- _SendMouseButton(SDL_BUTTON_LEFT, buttons &
- B_PRIMARY_MOUSE_BUTTON);
+ _SendMouseButton(SDL_BUTTON_LEFT, state);
}
if(buttonStateChange & B_SECONDARY_MOUSE_BUTTON) {
- _SendMouseButton(SDL_BUTTON_RIGHT, buttons &
- B_PRIMARY_MOUSE_BUTTON);
+ _SendMouseButton(SDL_BUTTON_RIGHT, state);
}
if(buttonStateChange & B_TERTIARY_MOUSE_BUTTON) {
- _SendMouseButton(SDL_BUTTON_MIDDLE, buttons &
- B_PRIMARY_MOUSE_BUTTON);
+ _SendMouseButton(SDL_BUTTON_MIDDLE, state);
}
_last_buttons = buttons;
@@ -652,7 +644,7 @@
clipping_rect _bounds;
BLocker *_buffer_locker;
clipping_rect *_clips;
- int32 _num_clips;
+ uint32 _num_clips;
int32 _bytes_per_px;
thread_id _draw_thread_id;
--- a/external/SDL2/src/video/haiku/SDL_bclipboard.cc
+++ b/external/SDL2/src/video/haiku/SDL_bclipboard.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bclipboard.h
+++ b/external/SDL2/src/video/haiku/SDL_bclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bevents.cc
+++ b/external/SDL2/src/video/haiku/SDL_bevents.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bevents.h
+++ b/external/SDL2/src/video/haiku/SDL_bevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bframebuffer.cc
+++ b/external/SDL2/src/video/haiku/SDL_bframebuffer.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bframebuffer.h
+++ b/external/SDL2/src/video/haiku/SDL_bframebuffer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bkeyboard.cc
+++ b/external/SDL2/src/video/haiku/SDL_bkeyboard.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bkeyboard.h
+++ b/external/SDL2/src/video/haiku/SDL_bkeyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- /dev/null
+++ b/external/SDL2/src/video/haiku/SDL_bmessagebox.cc
@@ -1,0 +1,425 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 2018-2019 EXL <exlmotodev@gmail.com>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_HAIKU
+
+#include "SDL_messagebox.h"
+
+/* For application signature. */
+#include "../../main/haiku/SDL_BeApp.h"
+
+#include <Alert.h>
+#include <Application.h>
+#include <Button.h>
+#include <Font.h>
+#include <Layout.h>
+#include <String.h>
+#include <TextView.h>
+#include <View.h>
+#include <Window.h>
+
+#include <InterfaceDefs.h>
+#include <SupportDefs.h>
+#include <GraphicsDefs.h>
+
+#include <new>
+#include <vector>
+#include <algorithm>
+
+enum
+{
+ G_CLOSE_BUTTON_ID = -1,
+ G_DEFAULT_BUTTON_ID = 0,
+ G_MAX_STRING_LENGTH_BYTES = 120
+};
+
+class HAIKU_SDL_MessageBox : public BAlert
+{
+ float fComputedMessageBoxWidth;
+
+ BTextView *fMessageBoxTextView;
+
+ int fCloseButton;
+ int fDefaultButton;
+
+ bool fCustomColorScheme;
+ bool fThereIsLongLine;
+ rgb_color fTextColor;
+
+ const char *fTitle;
+ const char *HAIKU_SDL_DefTitle;
+ const char *HAIKU_SDL_DefMessage;
+ const char *HAIKU_SDL_DefButton;
+
+ std::vector<const SDL_MessageBoxButtonData *> fButtons;
+
+ static bool
+ SortButtonsPredicate(const SDL_MessageBoxButtonData *aButtonLeft,
+ const SDL_MessageBoxButtonData *aButtonRight)
+ {
+ return aButtonLeft->buttonid < aButtonRight->buttonid;
+ }
+
+ alert_type
+ ConvertMessageBoxType(const SDL_MessageBoxFlags aWindowType) const
+ {
+ switch (aWindowType)
+ {
+ default:
+ case SDL_MESSAGEBOX_WARNING:
+ {
+ return B_WARNING_ALERT;
+ }
+ case SDL_MESSAGEBOX_ERROR:
+ {
+ return B_STOP_ALERT;
+ }
+ case SDL_MESSAGEBOX_INFORMATION:
+ {
+ return B_INFO_ALERT;
+ }
+ }
+ }
+
+ rgb_color
+ ConvertColorType(const SDL_MessageBoxColor *aColor) const
+ {
+ rgb_color color = { aColor->r, aColor->g, aColor->b, color.alpha = 255 };
+ return color;
+ }
+
+ int32
+ GetLeftPanelWidth(void) const
+ {
+ // See file "haiku/src/kits/interface/Alert.cpp" for this magic numbers.
+ // IconStripeWidth = 30 * Scale
+ // IconSize = 32 * Scale
+ // Scale = max_c(1, ((int32)be_plain_font->Size() + 15) / 16)
+ // RealWidth = (IconStripeWidth * Scale) + (IconSize * Scale)
+
+ int32 scale = max_c(1, ((int32)be_plain_font->Size() + 15) / 16);
+ return (30 * scale) + (32 * scale);
+ }
+
+ void
+ UpdateTextViewWidth(void)
+ {
+ fComputedMessageBoxWidth = fMessageBoxTextView->PreferredSize().Width() + GetLeftPanelWidth();
+ }
+
+ void
+ ParseSdlMessageBoxData(const SDL_MessageBoxData *aMessageBoxData)
+ {
+ if (aMessageBoxData == NULL)
+ {
+ SetTitle(HAIKU_SDL_DefTitle);
+ SetMessageText(HAIKU_SDL_DefMessage);
+ AddButton(HAIKU_SDL_DefButton);
+ return;
+ }
+
+ if (aMessageBoxData->numbuttons <= 0)
+ {
+ AddButton(HAIKU_SDL_DefButton);
+ }
+ else
+ {
+ AddSdlButtons(aMessageBoxData->buttons, aMessageBoxData->numbuttons);
+ }
+
+ if (aMessageBoxData->colorScheme != NULL)
+ {
+ fCustomColorScheme = true;
+ ApplyAndParseColorScheme(aMessageBoxData->colorScheme);
+ }
+
+ (aMessageBoxData->title != NULL) ?
+ SetTitle(aMessageBoxData->title) : SetTitle(HAIKU_SDL_DefTitle);
+ (aMessageBoxData->message != NULL) ?
+ SetMessageText(aMessageBoxData->message) : SetMessageText(HAIKU_SDL_DefMessage);
+
+ SetType(ConvertMessageBoxType(static_cast<SDL_MessageBoxFlags>(aMessageBoxData->flags)));
+ }
+
+ void
+ ApplyAndParseColorScheme(const SDL_MessageBoxColorScheme *aColorScheme)
+ {
+ SetBackgroundColor(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]);
+ fTextColor = ConvertColorType(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_TEXT]);
+ SetButtonColors(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER],
+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND],
+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_TEXT],
+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]);
+ }
+
+ void
+ SetButtonColors(const SDL_MessageBoxColor *aBorderColor,
+ const SDL_MessageBoxColor *aBackgroundColor,
+ const SDL_MessageBoxColor *aTextColor,
+ const SDL_MessageBoxColor *aSelectedColor)
+ {
+ if (fCustomColorScheme)
+ {
+ int32 countButtons = CountButtons();
+ for (int i = 0; i < countButtons; ++i)
+ {
+ ButtonAt(i)->SetViewColor(ConvertColorType(aBorderColor));
+ ButtonAt(i)->SetLowColor(ConvertColorType(aBackgroundColor));
+
+ // This doesn't work. See this why:
+ // https://github.com/haiku/haiku/commit/de9c53f8f5008c7b3b0af75d944a628e17f6dffe
+ // Let it remain.
+ ButtonAt(i)->SetHighColor(ConvertColorType(aTextColor));
+ }
+ }
+ // TODO: Not Implemented.
+ // Is it even necessary?!
+ (void)aSelectedColor;
+ }
+
+ void
+ SetBackgroundColor(const SDL_MessageBoxColor *aColor)
+ {
+ rgb_color background = ConvertColorType(aColor);
+
+ GetLayout()->View()->SetViewColor(background);
+ // See file "haiku/src/kits/interface/Alert.cpp", the "TAlertView" is the internal name of the left panel.
+ FindView("TAlertView")->SetViewColor(background);
+ fMessageBoxTextView->SetViewColor(background);
+ }
+
+ bool
+ CheckLongLines(const char *aMessage)
+ {
+ int final = 0;
+
+ // This UTF-8 friendly.
+ BString message = aMessage;
+ int32 length = message.CountChars();
+
+ for (int i = 0, c = 0; i < length; ++i)
+ {
+ c++;
+ if (*(message.CharAt(i)) == '\n')
+ {
+ c = 0;
+ }
+ if (c > final)
+ {
+ final = c;
+ }
+ }
+
+ return (final > G_MAX_STRING_LENGTH_BYTES);
+ }
+
+ void
+ SetMessageText(const char *aMessage)
+ {
+ fThereIsLongLine = CheckLongLines(aMessage);
+ if (fThereIsLongLine)
+ {
+ fMessageBoxTextView->SetWordWrap(true);
+ }
+
+ rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR);
+ if (fCustomColorScheme)
+ {
+ textColor = fTextColor;
+ }
+
+ /*
+ if (fNoTitledWindow)
+ {
+ fMessageBoxTextView->SetFontAndColor(be_bold_font);
+ fMessageBoxTextView->Insert(fTitle);
+ fMessageBoxTextView->Insert("\n\n");
+ fMessageBoxTextView->SetFontAndColor(be_plain_font);
+ }
+ */
+
+ fMessageBoxTextView->SetFontAndColor(be_plain_font, B_FONT_ALL, &textColor);
+ fMessageBoxTextView->Insert(aMessage);
+
+ // Be sure to call update width method.
+ UpdateTextViewWidth();
+ }
+
+ void
+ AddSdlButtons(const SDL_MessageBoxButtonData *aButtons, int aNumButtons)
+ {
+ for (int i = 0; i < aNumButtons; ++i)
+ {
+ fButtons.push_back(&aButtons[i]);
+ }
+
+ std::sort(fButtons.begin(), fButtons.end(), &HAIKU_SDL_MessageBox::SortButtonsPredicate);
+
+ size_t countButtons = fButtons.size();
+ for (size_t i = 0; i < countButtons; ++i)
+ {
+ switch (fButtons[i]->flags)
+ {
+ case SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT:
+ {
+ fCloseButton = static_cast<int>(i);
+ break;
+ }
+ case SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT:
+ {
+ fDefaultButton = static_cast<int>(i);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ AddButton(fButtons[i]->text);
+ }
+
+ SetDefaultButton(ButtonAt(fDefaultButton));
+ }
+
+public:
+ explicit
+ HAIKU_SDL_MessageBox(const SDL_MessageBoxData *aMessageBoxData)
+ : BAlert(NULL, NULL, NULL, NULL, NULL, B_WIDTH_FROM_LABEL, B_WARNING_ALERT),
+ fComputedMessageBoxWidth(0.0f),
+ fCloseButton(G_CLOSE_BUTTON_ID), fDefaultButton(G_DEFAULT_BUTTON_ID),
+ fCustomColorScheme(false), fThereIsLongLine(false),
+ HAIKU_SDL_DefTitle("SDL2 MessageBox"),
+ HAIKU_SDL_DefMessage("Some information has been lost."),
+ HAIKU_SDL_DefButton("OK")
+ {
+ // MessageBox settings.
+ // We need a title to display it.
+ SetLook(B_TITLED_WINDOW_LOOK);
+ SetFlags(Flags() | B_CLOSE_ON_ESCAPE);
+
+ // MessageBox TextView settings.
+ fMessageBoxTextView = TextView();
+ fMessageBoxTextView->SetWordWrap(false);
+ fMessageBoxTextView->SetStylable(true);
+
+ ParseSdlMessageBoxData(aMessageBoxData);
+ }
+
+ int
+ GetCloseButtonId(void) const
+ {
+ return fCloseButton;
+ }
+
+ virtual
+ ~HAIKU_SDL_MessageBox(void)
+ {
+ fButtons.clear();
+ }
+
+protected:
+ virtual void
+ FrameResized(float aNewWidth, float aNewHeight)
+ {
+ if (fComputedMessageBoxWidth > aNewWidth)
+ {
+ ResizeTo(fComputedMessageBoxWidth, aNewHeight);
+ }
+ else
+ {
+ BAlert::FrameResized(aNewWidth, aNewHeight);
+ }
+ }
+
+ virtual void
+ SetTitle(const char* aTitle)
+ {
+ fTitle = aTitle;
+ BAlert::SetTitle(aTitle);
+ }
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int
+HAIKU_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
+{
+ // Initialize button by closed or error value first.
+ *buttonid = G_CLOSE_BUTTON_ID;
+
+ // We need to check "be_app" pointer to "NULL". The "messageboxdata->window" pointer isn't appropriate here
+ // because it is possible to create a MessageBox from another thread. This fixes the following errors:
+ // "You need a valid BApplication object before interacting with the app_server."
+ // "2 BApplication objects were created. Only one is allowed."
+ BApplication *application = NULL;
+ if (be_app == NULL)
+ {
+ application = new(std::nothrow) BApplication(signature);
+ if (application == NULL)
+ {
+ return SDL_SetError("Cannot create the BApplication object. Lack of memory?");
+ }
+ }
+
+ HAIKU_SDL_MessageBox *SDL_MessageBox = new(std::nothrow) HAIKU_SDL_MessageBox(messageboxdata);
+ if (SDL_MessageBox == NULL)
+ {
+ return SDL_SetError("Cannot create the HAIKU_SDL_MessageBox (BAlert inheritor) object. Lack of memory?");
+ }
+ const int closeButton = SDL_MessageBox->GetCloseButtonId();
+ int pushedButton = SDL_MessageBox->Go();
+
+ // The close button is equivalent to pressing Escape.
+ if (closeButton != G_CLOSE_BUTTON_ID && pushedButton == G_CLOSE_BUTTON_ID)
+ {
+ pushedButton = closeButton;
+ }
+
+ // It's deleted by itself after the "Go()" method was executed.
+ /*
+ if (messageBox != NULL)
+ {
+ delete messageBox;
+ }
+ */
+ if (application != NULL)
+ {
+ delete application;
+ }
+
+ // Initialize button by real pushed value then.
+ *buttonid = pushedButton;
+
+ return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/haiku/SDL_bmessagebox.h
@@ -1,0 +1,45 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 2018-2019 EXL <exlmotodev@gmail.com>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef SDL_BMESSAGEBOX_H
+#define SDL_BMESSAGEBOX_H
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_HAIKU
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int
+HAIKU_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SDL_VIDEO_DRIVER_HAIKU */
+
+#endif
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/haiku/SDL_bmodes.cc
+++ b/external/SDL2/src/video/haiku/SDL_bmodes.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bmodes.h
+++ b/external/SDL2/src/video/haiku/SDL_bmodes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bopengl.cc
+++ b/external/SDL2/src/video/haiku/SDL_bopengl.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -54,7 +54,7 @@
if( get_image_symbol(info.id, "glBegin", B_SYMBOL_TYPE_ANY,
&location) == B_OK) {
- _this->gl_config.dll_handle = (void *) (size_t) info.id;
+ _this->gl_config.dll_handle = (void *) (addr_t) info.id;
_this->gl_config.driver_loaded = 1;
SDL_strlcpy(_this->gl_config.driver_path, "libGL.so",
SDL_arraysize(_this->gl_config.driver_path));
@@ -69,7 +69,7 @@
void *location = NULL;
status_t err;
if ((err =
- get_image_symbol((image_id) (size_t) _this->gl_config.dll_handle,
+ get_image_symbol((image_id) (addr_t) _this->gl_config.dll_handle,
proc, B_SYMBOL_TYPE_ANY,
&location)) == B_OK) {
return location;
--- a/external/SDL2/src/video/haiku/SDL_bopengl.h
+++ b/external/SDL2/src/video/haiku/SDL_bopengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bvideo.cc
+++ b/external/SDL2/src/video/haiku/SDL_bvideo.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -19,6 +19,7 @@
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
+#include "../../main/haiku/SDL_BApp.h"
#if SDL_VIDEO_DRIVER_HAIKU
@@ -132,6 +133,33 @@
SDL_free(device);
}
+static int HAIKU_ShowCursor(SDL_Cursor *cur)
+{
+ SDL_Mouse *mouse = SDL_GetMouse();
+ int show;
+ if (!mouse)
+ return 0;
+ show = (cur || !mouse->focus);
+ if (show) {
+ if (be_app->IsCursorHidden())
+ be_app->ShowCursor();
+ } else {
+ if (!be_app->IsCursorHidden())
+ be_app->HideCursor();
+ }
+ return 0;
+}
+
+static void HAIKU_MouseInit(_THIS)
+{
+ SDL_Mouse *mouse = SDL_GetMouse();
+ if (!mouse)
+ return;
+ mouse->ShowCursor = HAIKU_ShowCursor;
+ mouse->cur_cursor = (SDL_Cursor*)0x1;
+ mouse->def_cursor = (SDL_Cursor*)0x2;
+}
+
int HAIKU_VideoInit(_THIS)
{
/* Initialize the Be Application for appserver interaction */
@@ -144,6 +172,8 @@
/* Init the keymap */
HAIKU_InitOSKeymap();
+
+ HAIKU_MouseInit(_this);
#if SDL_VIDEO_OPENGL
/* testgl application doesn't load library, just tries to load symbols */
--- a/external/SDL2/src/video/haiku/SDL_bvideo.h
+++ b/external/SDL2/src/video/haiku/SDL_bvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/haiku/SDL_bwindow.cc
+++ b/external/SDL2/src/video/haiku/SDL_bwindow.cc
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,6 +26,8 @@
#include "SDL_BWin.h"
#include <new>
+#include "SDL_syswm.h"
+
/* Define a path to window's BWIN data */
#ifdef __cplusplus
extern "C" {
@@ -217,7 +219,15 @@
SDL_bool HAIKU_GetWindowWMInfo(_THIS, SDL_Window * window,
struct SDL_SysWMinfo *info) {
/* FIXME: What is the point of this? What information should be included? */
- return SDL_FALSE;
+ if (info->version.major == SDL_MAJOR_VERSION &&
+ info->version.minor == SDL_MINOR_VERSION) {
+ info->subsystem = SDL_SYSWM_HAIKU;
+ return SDL_TRUE;
+ } else {
+ SDL_SetError("Application not compiled with SDL %d.%d",
+ SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
+ return SDL_FALSE;
+ }
}
--- a/external/SDL2/src/video/haiku/SDL_bwindow.h
+++ b/external/SDL2/src/video/haiku/SDL_bwindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.c
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -50,8 +50,8 @@
#endif
static kmsdrmdynlib kmsdrmlibs[] = {
- {NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC},
- {NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM}
+ {NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM},
+ {NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC}
};
static void *
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.c
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.c
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -49,19 +49,21 @@
KMSDRM_IsCursorSizeSupported (int w, int h, uint32_t bo_format) {
SDL_VideoDevice *dev = SDL_GetVideoDevice();
- SDL_VideoData *vdata = ((SDL_VideoData *)dev->driverdata);
+ SDL_VideoData *viddata = ((SDL_VideoData *)dev->driverdata);
+ SDL_DisplayData *dispdata = (SDL_DisplayData *)SDL_GetDisplayDriverData(0);
+
int ret;
uint32_t bo_handle;
- struct gbm_bo *bo = KMSDRM_gbm_bo_create(vdata->gbm, w, h, bo_format,
+ struct gbm_bo *bo = KMSDRM_gbm_bo_create(viddata->gbm, w, h, bo_format,
GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE);
- if (bo == NULL) {
+ if (!bo) {
SDL_SetError("Could not create GBM cursor BO width size %dx%d for size testing", w, h);
goto cleanup;
}
bo_handle = KMSDRM_gbm_bo_get_handle(bo).u32;
- ret = KMSDRM_drmModeSetCursor(vdata->drm_fd, vdata->crtc_id, bo_handle, w, h);
+ ret = KMSDRM_drmModeSetCursor(viddata->drm_fd, dispdata->crtc_id, bo_handle, w, h);
if (ret) {
goto cleanup;
@@ -72,7 +74,7 @@
}
cleanup:
- if (bo != NULL) {
+ if (bo) {
KMSDRM_gbm_bo_destroy(bo);
}
return SDL_FALSE;
@@ -83,7 +85,7 @@
KMSDRM_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y)
{
SDL_VideoDevice *dev = SDL_GetVideoDevice();
- SDL_VideoData *vdata = ((SDL_VideoData *)dev->driverdata);
+ SDL_VideoData *viddata = ((SDL_VideoData *)dev->driverdata);
SDL_PixelFormat *pixlfmt = surface->format;
KMSDRM_CursorData *curdata;
SDL_Cursor *cursor;
@@ -161,18 +163,18 @@
return NULL;
}
- if (!KMSDRM_gbm_device_is_format_supported(vdata->gbm, bo_format, GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE)) {
+ if (!KMSDRM_gbm_device_is_format_supported(viddata->gbm, bo_format, GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE)) {
SDL_SetError("Unsupported pixel format for cursor");
return NULL;
}
cursor = (SDL_Cursor *) SDL_calloc(1, sizeof(*cursor));
- if (cursor == NULL) {
+ if (!cursor) {
SDL_OutOfMemory();
return NULL;
}
curdata = (KMSDRM_CursorData *) SDL_calloc(1, sizeof(*curdata));
- if (curdata == NULL) {
+ if (!curdata) {
SDL_OutOfMemory();
SDL_free(cursor);
return NULL;
@@ -205,10 +207,10 @@
curdata->w = usable_cursor_w;
curdata->h = usable_cursor_h;
- curdata->bo = KMSDRM_gbm_bo_create(vdata->gbm, usable_cursor_w, usable_cursor_h, bo_format,
+ curdata->bo = KMSDRM_gbm_bo_create(viddata->gbm, usable_cursor_w, usable_cursor_h, bo_format,
GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE);
- if (curdata->bo == NULL) {
+ if (!curdata->bo) {
SDL_SetError("Could not create GBM cursor BO");
goto cleanup;
}
@@ -219,7 +221,7 @@
if (surface->pitch != bo_stride) {
/* pitch doesn't match stride, must be copied to temp buffer */
buffer = SDL_malloc(bufsize);
- if (buffer == NULL) {
+ if (!buffer) {
SDL_OutOfMemory();
goto cleanup;
}
@@ -279,14 +281,14 @@
return cursor;
cleanup:
- if (buffer != NULL) {
+ if (buffer) {
SDL_free(buffer);
}
- if (cursor != NULL) {
+ if (cursor) {
SDL_free(cursor);
}
- if (curdata != NULL) {
- if (curdata->bo != NULL) {
+ if (curdata) {
+ if (curdata->bo) {
KMSDRM_gbm_bo_destroy(curdata->bo);
}
SDL_free(curdata);
@@ -299,33 +301,33 @@
KMSDRM_ShowCursor(SDL_Cursor * cursor)
{
SDL_VideoDevice *dev = SDL_GetVideoDevice();
- SDL_VideoData *vdata = ((SDL_VideoData *)dev->driverdata);
+ SDL_VideoData *viddata = ((SDL_VideoData *)dev->driverdata);
SDL_Mouse *mouse;
KMSDRM_CursorData *curdata;
SDL_VideoDisplay *display = NULL;
- SDL_DisplayData *ddata = NULL;
+ SDL_DisplayData *dispdata = NULL;
int ret;
uint32_t bo_handle;
mouse = SDL_GetMouse();
- if (mouse == NULL) {
+ if (!mouse) {
return SDL_SetError("No mouse.");
}
- if (mouse->focus != NULL) {
+ if (mouse->focus) {
display = SDL_GetDisplayForWindow(mouse->focus);
- if (display != NULL) {
- ddata = (SDL_DisplayData*) display->driverdata;
+ if (display) {
+ dispdata = (SDL_DisplayData*) display->driverdata;
}
}
- if (cursor == NULL) {
+ if (!cursor) {
/* Hide current cursor */
- if ( mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
+ if (mouse->cur_cursor && mouse->cur_cursor->driverdata) {
curdata = (KMSDRM_CursorData *) mouse->cur_cursor->driverdata;
if (curdata->crtc_id != 0) {
- ret = KMSDRM_drmModeSetCursor(vdata->drm_fd, curdata->crtc_id, 0, 0, 0);
+ ret = KMSDRM_drmModeSetCursor(viddata->drm_fd, curdata->crtc_id, 0, 0, 0);
if (ret) {
SDL_SetError("Could not hide current cursor with drmModeSetCursor().");
return ret;
@@ -337,8 +339,8 @@
}
}
/* otherwise if possible, hide global cursor */
- if (ddata != NULL && ddata->crtc_id != 0) {
- ret = KMSDRM_drmModeSetCursor(vdata->drm_fd, ddata->crtc_id, 0, 0, 0);
+ if (dispdata && dispdata->crtc_id != 0) {
+ ret = KMSDRM_drmModeSetCursor(viddata->drm_fd, dispdata->crtc_id, 0, 0, 0);
if (ret) {
SDL_SetError("Could not hide display's cursor with drmModeSetCursor().");
return ret;
@@ -349,26 +351,25 @@
return SDL_SetError("Couldn't find cursor to hide.");
}
/* If cursor != NULL, show new cursor on display */
- if (display == NULL) {
+ if (!display) {
return SDL_SetError("Could not get display for mouse.");
}
- if (ddata == NULL) {
+ if (!dispdata) {
return SDL_SetError("Could not get display driverdata.");
}
curdata = (KMSDRM_CursorData *) cursor->driverdata;
- if (curdata == NULL || curdata->bo == NULL) {
+ if (!curdata || !curdata->bo) {
return SDL_SetError("Cursor not initialized properly.");
}
bo_handle = KMSDRM_gbm_bo_get_handle(curdata->bo).u32;
if (curdata->hot_x == 0 && curdata->hot_y == 0) {
- ret = KMSDRM_drmModeSetCursor(vdata->drm_fd, ddata->crtc_id, bo_handle,
+ ret = KMSDRM_drmModeSetCursor(viddata->drm_fd, dispdata->crtc_id, bo_handle,
curdata->w, curdata->h);
} else {
- ret = KMSDRM_drmModeSetCursor2(vdata->drm_fd, ddata->crtc_id, bo_handle,
- curdata->w, curdata->h,
- curdata->hot_x, curdata->hot_y);
+ ret = KMSDRM_drmModeSetCursor2(viddata->drm_fd, dispdata->crtc_id, bo_handle,
+ curdata->w, curdata->h, curdata->hot_x, curdata->hot_y);
}
if (ret) {
SDL_SetError("drmModeSetCursor failed.");
@@ -375,7 +376,7 @@
return ret;
}
- curdata->crtc_id = ddata->crtc_id;
+ curdata->crtc_id = dispdata->crtc_id;
return 0;
}
@@ -387,11 +388,11 @@
KMSDRM_CursorData *curdata;
int drm_fd;
- if (cursor != NULL) {
+ if (cursor) {
curdata = (KMSDRM_CursorData *) cursor->driverdata;
- if (curdata != NULL) {
- if (curdata->bo != NULL) {
+ if (curdata) {
+ if (curdata->bo) {
if (curdata->crtc_id != 0) {
drm_fd = KMSDRM_gbm_device_get_fd(KMSDRM_gbm_bo_get_device(curdata->bo));
/* Hide the cursor if previously shown on a CRTC */
@@ -422,13 +423,13 @@
KMSDRM_CursorData *curdata;
SDL_Mouse *mouse = SDL_GetMouse();
- if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
+ if (mouse && mouse->cur_cursor && mouse->cur_cursor->driverdata) {
/* Update internal mouse position. */
SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 0, x, y);
/* And now update the cursor graphic position on screen. */
curdata = (KMSDRM_CursorData *) mouse->cur_cursor->driverdata;
- if (curdata->bo != NULL) {
+ if (curdata->bo) {
if (curdata->crtc_id != 0) {
int ret, drm_fd;
@@ -485,7 +486,7 @@
/* We must NOT call SDL_SendMouseMotion() here or we will enter recursivity!
That's why we move the cursor graphic ONLY. */
- if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) {
+ if (mouse && mouse->cur_cursor && mouse->cur_cursor->driverdata) {
curdata = (KMSDRM_CursorData *) mouse->cur_cursor->driverdata;
drm_fd = KMSDRM_gbm_device_get_fd(KMSDRM_gbm_bo_get_device(curdata->bo));
ret = KMSDRM_drmModeMoveCursor(drm_fd, curdata->crtc_id, mouse->x, mouse->y);
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.c
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -37,45 +37,12 @@
int
KMSDRM_GLES_LoadLibrary(_THIS, const char *path) {
- return SDL_EGL_LoadLibrary(_this, path, ((SDL_VideoData *)_this->driverdata)->gbm, EGL_PLATFORM_GBM_MESA);
+ NativeDisplayType display = (NativeDisplayType)((SDL_VideoData *)_this->driverdata)->gbm;
+ return SDL_EGL_LoadLibrary(_this, path, display, EGL_PLATFORM_GBM_MESA);
}
SDL_EGL_CreateContext_impl(KMSDRM)
-SDL_bool
-KMSDRM_GLES_SetupCrtc(_THIS, SDL_Window * window) {
- SDL_WindowData *wdata = ((SDL_WindowData *) window->driverdata);
- SDL_DisplayData *displaydata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- KMSDRM_FBInfo *fb_info;
-
- if (!(_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, wdata->egl_surface))) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "eglSwapBuffers failed on CRTC setup");
- return SDL_FALSE;
- }
-
- wdata->crtc_bo = KMSDRM_gbm_surface_lock_front_buffer(wdata->gs);
- if (wdata->crtc_bo == NULL) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not lock GBM surface front buffer on CRTC setup");
- return SDL_FALSE;
- }
-
- fb_info = KMSDRM_FBFromBO(_this, wdata->crtc_bo);
- if (fb_info == NULL) {
- return SDL_FALSE;
- }
-
- if(KMSDRM_drmModeSetCrtc(vdata->drm_fd, displaydata->crtc_id, fb_info->fb_id,
- 0, 0, &vdata->saved_conn_id, 1, &displaydata->cur_mode) != 0) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Could not set up CRTC to a GBM buffer");
- return SDL_FALSE;
-
- }
-
- wdata->crtc_ready = SDL_TRUE;
- return SDL_TRUE;
-}
-
int KMSDRM_GLES_SetSwapInterval(_THIS, int interval) {
if (!_this->egl_data) {
return SDL_SetError("EGL not initialized");
@@ -92,90 +59,86 @@
int
KMSDRM_GLES_SwapWindow(_THIS, SDL_Window * window) {
- SDL_WindowData *wdata = ((SDL_WindowData *) window->driverdata);
- SDL_DisplayData *displaydata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
+ SDL_WindowData *windata = ((SDL_WindowData *) window->driverdata);
+ SDL_DisplayData *dispdata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
KMSDRM_FBInfo *fb_info;
- int ret;
+ int ret, timeout;
- /* Do we still need to wait for a flip? */
- int timeout = 0;
+ /* Recreate the GBM / EGL surfaces if the display mode has changed */
+ if (windata->egl_surface_dirty) {
+ KMSDRM_CreateSurfaces(_this, window);
+ }
+
+ /* Wait for confirmation that the next front buffer has been flipped, at which
+ point the previous front buffer can be released */
+ timeout = 0;
if (_this->egl_data->egl_swapinterval == 1) {
timeout = -1;
}
- if (!KMSDRM_WaitPageFlip(_this, wdata, timeout)) {
+ if (!KMSDRM_WaitPageFlip(_this, windata, timeout)) {
return 0;
}
- /* Release previously displayed buffer (which is now the backbuffer) and lock a new one */
- if (wdata->next_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(wdata->gs, wdata->current_bo);
- /* SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Released GBM surface %p", (void *)wdata->next_bo); */
-
- wdata->current_bo = wdata->next_bo;
- wdata->next_bo = NULL;
+ /* Release the previous front buffer */
+ if (windata->curr_bo) {
+ KMSDRM_gbm_surface_release_buffer(windata->gs, windata->curr_bo);
+ /* SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Released GBM surface %p", (void *)windata->curr_bo); */
+ windata->curr_bo = NULL;
}
- if (!(_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, wdata->egl_surface))) {
+ windata->curr_bo = windata->next_bo;
+
+ /* Make the current back buffer the next front buffer */
+ if (!(_this->egl_data->eglSwapBuffers(_this->egl_data->egl_display, windata->egl_surface))) {
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "eglSwapBuffers failed.");
return 0;
}
- if (wdata->current_bo == NULL) {
- wdata->current_bo = KMSDRM_gbm_surface_lock_front_buffer(wdata->gs);
- if (wdata->current_bo == NULL) {
- return 0;
- }
- }
-
- wdata->next_bo = KMSDRM_gbm_surface_lock_front_buffer(wdata->gs);
- if (wdata->next_bo == NULL) {
+ /* Lock the next front buffer so it can't be allocated as a back buffer */
+ windata->next_bo = KMSDRM_gbm_surface_lock_front_buffer(windata->gs);
+ if (!windata->next_bo) {
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not lock GBM surface front buffer");
return 0;
/* } else {
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Locked GBM surface %p", (void *)wdata->next_bo); */
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Locked GBM surface %p", (void *)windata->next_bo); */
}
- fb_info = KMSDRM_FBFromBO(_this, wdata->next_bo);
- if (fb_info == NULL) {
+ fb_info = KMSDRM_FBFromBO(_this, windata->next_bo);
+ if (!fb_info) {
return 0;
}
- if (_this->egl_data->egl_swapinterval == 0) {
- /* Swap buffers instantly, possible tearing */
- /* SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "drmModeSetCrtc(%d, %u, %u, 0, 0, &%u, 1, &%ux%u@%u)",
- vdata->drm_fd, displaydata->crtc_id, fb_info->fb_id, vdata->saved_conn_id,
- displaydata->cur_mode.hdisplay, displaydata->cur_mode.vdisplay, displaydata->cur_mode.vrefresh); */
- ret = KMSDRM_drmModeSetCrtc(vdata->drm_fd, displaydata->crtc_id, fb_info->fb_id,
- 0, 0, &vdata->saved_conn_id, 1, &displaydata->cur_mode);
- if(ret != 0) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not pageflip with drmModeSetCrtc: %d", ret);
+
+ if (!windata->curr_bo) {
+ /* On the first swap, immediately present the new front buffer. Before
+ drmModePageFlip can be used the CRTC has to be configured to use
+ the current connector and mode with drmModeSetCrtc */
+ ret = KMSDRM_drmModeSetCrtc(viddata->drm_fd, dispdata->crtc_id, fb_info->fb_id, 0,
+ 0, &dispdata->conn->connector_id, 1, &dispdata->mode);
+
+ if (ret) {
+ SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not configure CRTC");
}
} else {
- /* Queue page flip at vsync */
+ /* On subsequent swaps, queue the new front buffer to be flipped during
+ the next vertical blank */
+ ret = KMSDRM_drmModePageFlip(viddata->drm_fd, dispdata->crtc_id, fb_info->fb_id,
+ DRM_MODE_PAGE_FLIP_EVENT, &windata->waiting_for_flip);
+ /* SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "drmModePageFlip(%d, %u, %u, DRM_MODE_PAGE_FLIP_EVENT, &windata->waiting_for_flip)",
+ viddata->drm_fd, displaydata->crtc_id, fb_info->fb_id); */
- /* Have we already setup the CRTC to one of the GBM buffers? Do so if we have not,
- or FlipPage won't work in some cases. */
- if (!wdata->crtc_ready) {
- if(!KMSDRM_GLES_SetupCrtc(_this, window)) {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not set up CRTC for doing vsync-ed pageflips");
- return 0;
+ if (_this->egl_data->egl_swapinterval == 1) {
+ if (ret == 0) {
+ windata->waiting_for_flip = SDL_TRUE;
+ } else {
+ SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not queue pageflip: %d", ret);
}
}
- /* SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "drmModePageFlip(%d, %u, %u, DRM_MODE_PAGE_FLIP_EVENT, &wdata->waiting_for_flip)",
- vdata->drm_fd, displaydata->crtc_id, fb_info->fb_id); */
- ret = KMSDRM_drmModePageFlip(vdata->drm_fd, displaydata->crtc_id, fb_info->fb_id,
- DRM_MODE_PAGE_FLIP_EVENT, &wdata->waiting_for_flip);
- if (ret == 0) {
- wdata->waiting_for_flip = SDL_TRUE;
- } else {
- SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "Could not queue pageflip: %d", ret);
- }
-
/* Wait immediately for vsync (as if we only had two buffers), for low input-lag scenarios.
Run your SDL2 program with "SDL_KMSDRM_DOUBLE_BUFFER=1 <program_name>" to enable this. */
- if (wdata->double_buffer) {
- KMSDRM_WaitPageFlip(_this, wdata, -1);
+ if (_this->egl_data->egl_swapinterval == 1 && windata->double_buffer) {
+ KMSDRM_WaitPageFlip(_this, windata, -1);
}
}
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmsym.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmsym.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -28,6 +28,7 @@
#include "SDL_syswm.h"
#include "SDL_log.h"
#include "SDL_hints.h"
+#include "../../events/SDL_events_c.h"
#include "../../events/SDL_mouse_c.h"
#include "../../events/SDL_keyboard_c.h"
@@ -44,6 +45,7 @@
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
+#include <poll.h>
#define KMSDRM_DRI_PATH "/dev/dri/"
@@ -60,7 +62,7 @@
if (drm_fd >= 0) {
if (SDL_KMSDRM_LoadSymbols()) {
drmModeRes *resources = KMSDRM_drmModeGetResources(drm_fd);
- if (resources != NULL) {
+ if (resources) {
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "%scard%d connector, encoder and CRTC counts are: %d %d %d",
KMSDRM_DRI_PATH, devindex,
resources->count_connectors, resources->count_encoders, resources->count_crtcs);
@@ -140,22 +142,23 @@
}
static void
-KMSDRM_Destroy(SDL_VideoDevice * device)
+KMSDRM_DeleteDevice(SDL_VideoDevice * device)
{
- if (device->driverdata != NULL) {
+ if (device->driverdata) {
SDL_free(device->driverdata);
device->driverdata = NULL;
}
SDL_free(device);
+
SDL_KMSDRM_UnloadSymbols();
}
static SDL_VideoDevice *
-KMSDRM_Create(int devindex)
+KMSDRM_CreateDevice(int devindex)
{
SDL_VideoDevice *device;
- SDL_VideoData *vdata;
+ SDL_VideoData *viddata;
if (!devindex || (devindex > 99)) {
devindex = get_driindex();
@@ -170,30 +173,22 @@
return NULL;
}
- /* Initialize SDL_VideoDevice structure */
device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
- if (device == NULL) {
+ if (!device) {
SDL_OutOfMemory();
return NULL;
}
- /* Initialize internal data */
- vdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
- if (vdata == NULL) {
+ viddata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData));
+ if (!viddata) {
SDL_OutOfMemory();
goto cleanup;
}
- vdata->devindex = devindex;
- vdata->drm_fd = -1;
+ viddata->devindex = devindex;
+ viddata->drm_fd = -1;
- device->driverdata = vdata;
+ device->driverdata = viddata;
- /* Setup amount of available displays and current display */
- device->num_displays = 0;
-
- /* Set device free function */
- device->free = KMSDRM_Destroy;
-
/* Setup all functions which we can handle */
device->VideoInit = KMSDRM_VideoInit;
device->VideoQuit = KMSDRM_VideoQuit;
@@ -225,16 +220,16 @@
device->GL_SwapWindow = KMSDRM_GLES_SwapWindow;
device->GL_DeleteContext = KMSDRM_GLES_DeleteContext;
#endif
-
device->PumpEvents = KMSDRM_PumpEvents;
+ device->free = KMSDRM_DeleteDevice;
return device;
cleanup:
- if (device != NULL)
+ if (device)
SDL_free(device);
- if (vdata != NULL)
- SDL_free(vdata);
+ if (viddata)
+ SDL_free(viddata);
return NULL;
}
@@ -242,7 +237,7 @@
"KMSDRM",
"KMS/DRM Video Driver",
KMSDRM_Available,
- KMSDRM_Create
+ KMSDRM_CreateDevice
};
@@ -262,61 +257,84 @@
KMSDRM_FBInfo *
KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo)
{
- uint32_t w, h, stride, handle;
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ unsigned w,h;
int ret;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- KMSDRM_FBInfo *fb_info;
+ Uint32 stride, handle;
- fb_info = (KMSDRM_FBInfo *)KMSDRM_gbm_bo_get_user_data(bo);
- if (fb_info != NULL) {
- /* Have a previously used framebuffer, return it */
+ /* Check for an existing framebuffer */
+ KMSDRM_FBInfo *fb_info = (KMSDRM_FBInfo *)KMSDRM_gbm_bo_get_user_data(bo);
+
+ if (fb_info) {
return fb_info;
}
- /* Here a new DRM FB must be created */
+ /* Create a structure that contains enough info to remove the framebuffer
+ when the backing buffer is destroyed */
fb_info = (KMSDRM_FBInfo *)SDL_calloc(1, sizeof(KMSDRM_FBInfo));
- if (fb_info == NULL) {
+
+ if (!fb_info) {
SDL_OutOfMemory();
return NULL;
}
- fb_info->drm_fd = vdata->drm_fd;
- w = KMSDRM_gbm_bo_get_width(bo);
+ fb_info->drm_fd = viddata->drm_fd;
+
+ /* Create framebuffer object for the buffer */
+ w = KMSDRM_gbm_bo_get_width(bo);
h = KMSDRM_gbm_bo_get_height(bo);
stride = KMSDRM_gbm_bo_get_stride(bo);
handle = KMSDRM_gbm_bo_get_handle(bo).u32;
-
- ret = KMSDRM_drmModeAddFB(vdata->drm_fd, w, h, 24, 32, stride, handle, &fb_info->fb_id);
- if (ret < 0) {
- SDL_free(fb_info);
- return NULL;
+ ret = KMSDRM_drmModeAddFB(viddata->drm_fd, w, h, 24, 32, stride, handle,
+ &fb_info->fb_id);
+ if (ret) {
+ SDL_free(fb_info);
+ return NULL;
}
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, stride %u from BO %p", fb_info->fb_id, w, h, stride, (void *)bo);
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, stride %u from BO %p",
+ fb_info->fb_id, w, h, stride, (void *)bo);
+
/* Associate our DRM framebuffer with this buffer object */
KMSDRM_gbm_bo_set_user_data(bo, fb_info, KMSDRM_FBDestroyCallback);
+
return fb_info;
}
+static void
+KMSDRM_FlipHandler(int fd, unsigned int frame, unsigned int sec, unsigned int usec, void *data)
+{
+ *((SDL_bool *) data) = SDL_FALSE;
+}
+
SDL_bool
-KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *wdata, int timeout) {
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
+KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *windata, int timeout) {
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ drmEventContext ev = {0};
+ struct pollfd pfd = {0};
- while (wdata->waiting_for_flip) {
- vdata->drm_pollfd.revents = 0;
- if (poll(&vdata->drm_pollfd, 1, timeout) < 0) {
+ ev.version = DRM_EVENT_CONTEXT_VERSION;
+ ev.page_flip_handler = KMSDRM_FlipHandler;
+
+ pfd.fd = viddata->drm_fd;
+ pfd.events = POLLIN;
+
+ while (windata->waiting_for_flip) {
+ pfd.revents = 0;
+
+ if (poll(&pfd, 1, timeout) < 0) {
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "DRM poll error");
return SDL_FALSE;
}
- if (vdata->drm_pollfd.revents & (POLLHUP | POLLERR)) {
+ if (pfd.revents & (POLLHUP | POLLERR)) {
SDL_LogError(SDL_LOG_CATEGORY_VIDEO, "DRM poll hup or error");
return SDL_FALSE;
}
- if (vdata->drm_pollfd.revents & POLLIN) {
- /* Page flip? If so, drmHandleEvent will unset wdata->waiting_for_flip */
- KMSDRM_drmHandleEvent(vdata->drm_fd, &vdata->drm_evctx);
+ if (pfd.revents & POLLIN) {
+ /* Page flip? If so, drmHandleEvent will unset windata->waiting_for_flip */
+ KMSDRM_drmHandleEvent(viddata->drm_fd, &ev);
} else {
/* Timed out and page flip didn't happen */
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Dropping frame while waiting_for_flip");
@@ -323,37 +341,104 @@
return SDL_FALSE;
}
}
+
return SDL_TRUE;
}
+/*****************************************************************************/
+/* SDL Video and Display initialization/handling functions */
+/* _this is a SDL_VideoDevice * */
+/*****************************************************************************/
static void
-KMSDRM_FlipHandler(int fd, unsigned int frame, unsigned int sec, unsigned int usec, void *data)
+KMSDRM_DestroySurfaces(_THIS, SDL_Window * window)
{
- *((SDL_bool *) data) = SDL_FALSE;
+ SDL_WindowData *windata = (SDL_WindowData *)window->driverdata;
+
+ KMSDRM_WaitPageFlip(_this, windata, -1);
+
+ if (windata->curr_bo) {
+ KMSDRM_gbm_surface_release_buffer(windata->gs, windata->curr_bo);
+ windata->curr_bo = NULL;
+ }
+
+ if (windata->next_bo) {
+ KMSDRM_gbm_surface_release_buffer(windata->gs, windata->next_bo);
+ windata->next_bo = NULL;
+ }
+
+#if SDL_VIDEO_OPENGL_EGL
+ SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+ if (windata->egl_surface != EGL_NO_SURFACE) {
+ SDL_EGL_DestroySurface(_this, windata->egl_surface);
+ windata->egl_surface = EGL_NO_SURFACE;
+ }
+#endif
+
+ if (windata->gs) {
+ KMSDRM_gbm_surface_destroy(windata->gs);
+ windata->gs = NULL;
+ }
}
+int
+KMSDRM_CreateSurfaces(_THIS, SDL_Window * window)
+{
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ SDL_WindowData *windata = (SDL_WindowData *)window->driverdata;
+ SDL_DisplayData *dispdata = (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
+ Uint32 width = dispdata->mode.hdisplay;
+ Uint32 height = dispdata->mode.vdisplay;
+ Uint32 surface_fmt = GBM_FORMAT_XRGB8888;
+ Uint32 surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
+ EGLContext egl_context;
-/*****************************************************************************/
-/* SDL Video and Display initialization/handling functions */
-/* _this is a SDL_VideoDevice * */
-/*****************************************************************************/
+ if (!KMSDRM_gbm_device_is_format_supported(viddata->gbm, surface_fmt, surface_flags)) {
+ SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "GBM surface format not supported. Trying anyway.");
+ }
+
+#if SDL_VIDEO_OPENGL_EGL
+ SDL_EGL_SetRequiredVisualId(_this, surface_fmt);
+ egl_context = (EGLContext)SDL_GL_GetCurrentContext();
+#endif
+
+ KMSDRM_DestroySurfaces(_this, window);
+
+ windata->gs = KMSDRM_gbm_surface_create(viddata->gbm, width, height, surface_fmt, surface_flags);
+
+ if (!windata->gs) {
+ return SDL_SetError("Could not create GBM surface");
+ }
+
+#if SDL_VIDEO_OPENGL_EGL
+ windata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType)windata->gs);
+
+ if (windata->egl_surface == EGL_NO_SURFACE) {
+ return SDL_SetError("Could not create EGL window surface");
+ }
+
+ SDL_EGL_MakeCurrent(_this, windata->egl_surface, egl_context);
+
+ windata->egl_surface_dirty = 0;
+#endif
+
+ return 0;
+}
+
int
KMSDRM_VideoInit(_THIS)
{
- int i, j;
- SDL_bool found;
int ret = 0;
- char *devname;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ SDL_DisplayData *dispdata = NULL;
drmModeRes *resources = NULL;
- drmModeConnector *connector = NULL;
drmModeEncoder *encoder = NULL;
- SDL_DisplayMode current_mode;
- SDL_VideoDisplay display;
+ char devname[32];
+ SDL_VideoDisplay display = {0};
- /* Allocate display internal data */
- SDL_DisplayData *data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
- if (data == NULL) {
+ dispdata = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData));
+
+ if (!dispdata) {
return SDL_OutOfMemory();
}
@@ -360,80 +445,63 @@
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "KMSDRM_VideoInit()");
/* Open /dev/dri/cardNN */
- devname = (char *) SDL_calloc(1, 16);
- if (devname == NULL) {
- ret = SDL_OutOfMemory();
- goto cleanup;
- }
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Opening device /dev/dri/card%d", vdata->devindex);
- SDL_snprintf(devname, 16, "/dev/dri/card%d", vdata->devindex);
- vdata->drm_fd = open(devname, O_RDWR | O_CLOEXEC);
- SDL_free(devname);
+ SDL_snprintf(devname, sizeof(devname), "/dev/dri/card%d", viddata->devindex);
- if (vdata->drm_fd < 0) {
- ret = SDL_SetError("Could not open /dev/dri/card%d.", vdata->devindex);
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Opening device %s", devname);
+ viddata->drm_fd = open(devname, O_RDWR | O_CLOEXEC);
+
+ if (viddata->drm_fd < 0) {
+ ret = SDL_SetError("Could not open %s", devname);
goto cleanup;
}
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Opened DRM FD (%d)", vdata->drm_fd);
- vdata->gbm = KMSDRM_gbm_create_device(vdata->drm_fd);
- if (vdata->gbm == NULL) {
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Opened DRM FD (%d)", viddata->drm_fd);
+
+ viddata->gbm = KMSDRM_gbm_create_device(viddata->drm_fd);
+ if (!viddata->gbm) {
ret = SDL_SetError("Couldn't create gbm device.");
goto cleanup;
}
- /* Find the first available connector with modes */
- resources = KMSDRM_drmModeGetResources(vdata->drm_fd);
+ /* Get all of the available connectors / devices / crtcs */
+ resources = KMSDRM_drmModeGetResources(viddata->drm_fd);
if (!resources) {
- ret = SDL_SetError("drmModeGetResources(%d) failed", vdata->drm_fd);
+ ret = SDL_SetError("drmModeGetResources(%d) failed", viddata->drm_fd);
goto cleanup;
}
- for (i = 0; i < resources->count_connectors; i++) {
- connector = KMSDRM_drmModeGetConnector(vdata->drm_fd, resources->connectors[i]);
- if (connector == NULL)
+ for (int i = 0; i < resources->count_connectors; i++) {
+ drmModeConnector *conn = KMSDRM_drmModeGetConnector(viddata->drm_fd, resources->connectors[i]);
+
+ if (!conn) {
continue;
+ }
- if (connector->connection == DRM_MODE_CONNECTED &&
- connector->count_modes > 0) {
+ if (conn->connection == DRM_MODE_CONNECTED && conn->count_modes) {
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found connector %d with %d modes.",
- connector->connector_id, connector->count_modes);
- vdata->saved_conn_id = connector->connector_id;
+ conn->connector_id, conn->count_modes);
+ dispdata->conn = conn;
break;
}
- KMSDRM_drmModeFreeConnector(connector);
- connector = NULL;
+ KMSDRM_drmModeFreeConnector(conn);
}
- if (i == resources->count_connectors) {
+ if (!dispdata->conn) {
ret = SDL_SetError("No currently active connector found.");
goto cleanup;
}
- found = SDL_FALSE;
+ /* Try to find the connector's current encoder */
+ for (int i = 0; i < resources->count_encoders; i++) {
+ encoder = KMSDRM_drmModeGetEncoder(viddata->drm_fd, resources->encoders[i]);
- for (i = 0; i < resources->count_encoders; i++) {
- encoder = KMSDRM_drmModeGetEncoder(vdata->drm_fd, resources->encoders[i]);
-
- if (encoder == NULL)
- continue;
-
- if (encoder->encoder_id == connector->encoder_id) {
- data->encoder_id = encoder->encoder_id;
- found = SDL_TRUE;
- } else {
- for (j = 0; j < connector->count_encoders; j++) {
- if (connector->encoders[j] == encoder->encoder_id) {
- data->encoder_id = encoder->encoder_id;
- found = SDL_TRUE;
- break;
- }
- }
+ if (!encoder) {
+ continue;
}
- if (found == SDL_TRUE) {
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found encoder %d.", data->encoder_id);
+ if (encoder->encoder_id == dispdata->conn->encoder_id) {
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found encoder %d.", encoder->encoder_id);
break;
}
@@ -441,71 +509,91 @@
encoder = NULL;
}
- if (i == resources->count_encoders) {
+ if (!encoder) {
+ /* No encoder was connected, find the first supported one */
+ for (int i = 0, j; i < resources->count_encoders; i++) {
+ encoder = KMSDRM_drmModeGetEncoder(viddata->drm_fd, resources->encoders[i]);
+
+ if (!encoder) {
+ continue;
+ }
+
+ for (j = 0; j < dispdata->conn->count_encoders; j++) {
+ if (dispdata->conn->encoders[j] == encoder->encoder_id) {
+ break;
+ }
+ }
+
+ if (j != dispdata->conn->count_encoders) {
+ break;
+ }
+
+ KMSDRM_drmModeFreeEncoder(encoder);
+ encoder = NULL;
+ }
+ }
+
+ if (!encoder) {
ret = SDL_SetError("No connected encoder found.");
goto cleanup;
}
- vdata->saved_crtc = KMSDRM_drmModeGetCrtc(vdata->drm_fd, encoder->crtc_id);
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Found encoder %d.", encoder->encoder_id);
- if (vdata->saved_crtc == NULL) {
- for (i = 0; i < resources->count_crtcs; i++) {
+ /* Try to find a CRTC connected to this encoder */
+ dispdata->saved_crtc = KMSDRM_drmModeGetCrtc(viddata->drm_fd, encoder->crtc_id);
+
+ if (!dispdata->saved_crtc) {
+ /* No CRTC was connected, find the first CRTC that can be connected */
+ for (int i = 0; i < resources->count_crtcs; i++) {
if (encoder->possible_crtcs & (1 << i)) {
encoder->crtc_id = resources->crtcs[i];
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Set encoder's CRTC to %d.", encoder->crtc_id);
- vdata->saved_crtc = KMSDRM_drmModeGetCrtc(vdata->drm_fd, encoder->crtc_id);
+ dispdata->saved_crtc = KMSDRM_drmModeGetCrtc(viddata->drm_fd, encoder->crtc_id);
break;
}
}
}
- if (vdata->saved_crtc == NULL) {
+ if (!dispdata->saved_crtc) {
ret = SDL_SetError("No CRTC found.");
goto cleanup;
}
+
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Saved crtc_id %u, fb_id %u, (%u,%u), %ux%u",
- vdata->saved_crtc->crtc_id, vdata->saved_crtc->buffer_id, vdata->saved_crtc->x,
- vdata->saved_crtc->y, vdata->saved_crtc->width, vdata->saved_crtc->height);
- data->crtc_id = encoder->crtc_id;
- data->cur_mode = vdata->saved_crtc->mode;
- vdata->crtc_id = encoder->crtc_id;
+ dispdata->saved_crtc->crtc_id, dispdata->saved_crtc->buffer_id, dispdata->saved_crtc->x,
+ dispdata->saved_crtc->y, dispdata->saved_crtc->width, dispdata->saved_crtc->height);
- // select default mode if this one is not valid
- if (vdata->saved_crtc->mode_valid == 0) {
+ dispdata->crtc_id = encoder->crtc_id;
+
+ /* Figure out the default mode to be set. If the current CRTC's mode isn't
+ valid, select the first mode supported by the connector
+
+ FIXME find first mode that specifies DRM_MODE_TYPE_PREFERRED */
+ dispdata->mode = dispdata->saved_crtc->mode;
+
+ if (dispdata->saved_crtc->mode_valid == 0) {
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO,
"Current mode is invalid, selecting connector's mode #0.");
- data->cur_mode = connector->modes[0];
+ dispdata->mode = dispdata->conn->modes[0];
}
- SDL_zero(current_mode);
+ /* Setup the single display that's available */
- current_mode.w = data->cur_mode.hdisplay;
- current_mode.h = data->cur_mode.vdisplay;
- current_mode.refresh_rate = data->cur_mode.vrefresh;
-
- /* FIXME ?
- drmModeFB *fb = drmModeGetFB(vdata->drm_fd, vdata->saved_crtc->buffer_id);
- current_mode.format = drmToSDLPixelFormat(fb->bpp, fb->depth);
+ display.desktop_mode.w = dispdata->mode.hdisplay;
+ display.desktop_mode.h = dispdata->mode.vdisplay;
+ display.desktop_mode.refresh_rate = dispdata->mode.vrefresh;
+#if 1
+ display.desktop_mode.format = SDL_PIXELFORMAT_ARGB8888;
+#else
+ /* FIXME */
+ drmModeFB *fb = drmModeGetFB(viddata->drm_fd, dispdata->saved_crtc->buffer_id);
+ display.desktop_mode.format = drmToSDLPixelFormat(fb->bpp, fb->depth);
drmModeFreeFB(fb);
- */
- current_mode.format = SDL_PIXELFORMAT_ARGB8888;
-
- current_mode.driverdata = NULL;
-
- SDL_zero(display);
- display.desktop_mode = current_mode;
- display.current_mode = current_mode;
-
- display.driverdata = data;
- /* SDL_VideoQuit will later SDL_free(display.driverdata) */
+#endif
+ display.current_mode = display.desktop_mode;
+ display.driverdata = dispdata;
SDL_AddVideoDisplay(&display);
- /* Setup page flip handler */
- vdata->drm_pollfd.fd = vdata->drm_fd;
- vdata->drm_pollfd.events = POLLIN;
- vdata->drm_evctx.version = DRM_EVENT_CONTEXT_VERSION;
- vdata->drm_evctx.page_flip_handler = KMSDRM_FlipHandler;
-
#ifdef SDL_INPUT_LINUXEV
SDL_EVDEV_Init();
#endif
@@ -515,28 +603,30 @@
return ret;
cleanup:
- if (encoder != NULL)
+ if (encoder)
KMSDRM_drmModeFreeEncoder(encoder);
- if (connector != NULL)
- KMSDRM_drmModeFreeConnector(connector);
- if (resources != NULL)
+ if (resources)
KMSDRM_drmModeFreeResources(resources);
if (ret != 0) {
/* Error (complete) cleanup */
- SDL_free(data);
- if(vdata->saved_crtc != NULL) {
- KMSDRM_drmModeFreeCrtc(vdata->saved_crtc);
- vdata->saved_crtc = NULL;
+ if (dispdata->conn) {
+ KMSDRM_drmModeFreeConnector(dispdata->conn);
+ dispdata->conn = NULL;
}
- if (vdata->gbm != NULL) {
- KMSDRM_gbm_device_destroy(vdata->gbm);
- vdata->gbm = NULL;
+ if (dispdata->saved_crtc) {
+ KMSDRM_drmModeFreeCrtc(dispdata->saved_crtc);
+ dispdata->saved_crtc = NULL;
}
- if (vdata->drm_fd >= 0) {
- close(vdata->drm_fd);
- vdata->drm_fd = -1;
+ if (viddata->gbm) {
+ KMSDRM_gbm_device_destroy(viddata->gbm);
+ viddata->gbm = NULL;
}
+ if (viddata->drm_fd >= 0) {
+ close(viddata->drm_fd);
+ viddata->drm_fd = -1;
+ }
+ SDL_free(dispdata);
}
return ret;
}
@@ -544,7 +634,8 @@
void
KMSDRM_VideoQuit(_THIS)
{
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
+ SDL_VideoData *viddata = ((SDL_VideoData *)_this->driverdata);
+ SDL_DisplayData *dispdata = (SDL_DisplayData *)SDL_GetDisplayDriverData(0);
SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "KMSDRM_VideoQuit()");
@@ -552,28 +643,41 @@
SDL_GL_UnloadLibrary();
}
- if(vdata->saved_crtc != NULL) {
- if(vdata->drm_fd >= 0 && vdata->saved_conn_id > 0) {
- /* Restore saved CRTC settings */
- drmModeCrtc *crtc = vdata->saved_crtc;
- if(KMSDRM_drmModeSetCrtc(vdata->drm_fd, crtc->crtc_id, crtc->buffer_id,
- crtc->x, crtc->y, &vdata->saved_conn_id, 1,
- &crtc->mode) != 0) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Could not restore original CRTC mode");
- }
+ /* Clear out the window list */
+ SDL_free(viddata->windows);
+ viddata->windows = NULL;
+ viddata->max_windows = 0;
+ viddata->num_windows = 0;
+
+ /* Restore saved CRTC settings */
+ if (viddata->drm_fd >= 0 && dispdata && dispdata->conn && dispdata->saved_crtc) {
+ drmModeConnector *conn = dispdata->conn;
+ drmModeCrtc *crtc = dispdata->saved_crtc;
+
+ int ret = KMSDRM_drmModeSetCrtc(viddata->drm_fd, crtc->crtc_id, crtc->buffer_id,
+ crtc->x, crtc->y, &conn->connector_id, 1, &crtc->mode);
+
+ if (ret != 0) {
+ SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Could not restore original CRTC mode");
}
- KMSDRM_drmModeFreeCrtc(vdata->saved_crtc);
- vdata->saved_crtc = NULL;
}
- if (vdata->gbm != NULL) {
- KMSDRM_gbm_device_destroy(vdata->gbm);
- vdata->gbm = NULL;
+ if (dispdata && dispdata->conn) {
+ KMSDRM_drmModeFreeConnector(dispdata->conn);
+ dispdata->conn = NULL;
}
- if (vdata->drm_fd >= 0) {
- close(vdata->drm_fd);
- SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Closed DRM FD %d", vdata->drm_fd);
- vdata->drm_fd = -1;
+ if (dispdata && dispdata->saved_crtc) {
+ KMSDRM_drmModeFreeCrtc(dispdata->saved_crtc);
+ dispdata->saved_crtc = NULL;
}
+ if (viddata->gbm) {
+ KMSDRM_gbm_device_destroy(viddata->gbm);
+ viddata->gbm = NULL;
+ }
+ if (viddata->drm_fd >= 0) {
+ close(viddata->drm_fd);
+ SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "Closed DRM FD %d", viddata->drm_fd);
+ viddata->drm_fd = -1;
+ }
#ifdef SDL_INPUT_LINUXEV
SDL_EVDEV_Quit();
#endif
@@ -582,13 +686,61 @@
void
KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
{
- /* Only one display mode available, the current one */
- SDL_AddDisplayMode(display, &display->current_mode);
+ SDL_DisplayData *dispdata = display->driverdata;
+ drmModeConnector *conn = dispdata->conn;
+ SDL_DisplayMode mode;
+
+ for (int i = 0; i < conn->count_modes; i++) {
+ SDL_DisplayModeData *modedata = SDL_calloc(1, sizeof(SDL_DisplayModeData));
+
+ if (modedata) {
+ modedata->mode_index = i;
+ }
+
+ mode.w = conn->modes[i].hdisplay;
+ mode.h = conn->modes[i].vdisplay;
+ mode.refresh_rate = conn->modes[i].vrefresh;
+ mode.format = SDL_PIXELFORMAT_ARGB8888;
+ mode.driverdata = modedata;
+
+ if (!SDL_AddDisplayMode(display, &mode)) {
+ SDL_free(modedata);
+ }
+ }
}
int
KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
{
+ SDL_VideoData *viddata = (SDL_VideoData *)_this->driverdata;
+ SDL_DisplayData *dispdata = (SDL_DisplayData *)display->driverdata;
+ SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)mode->driverdata;
+ drmModeConnector *conn = dispdata->conn;
+
+ if (!modedata) {
+ return SDL_SetError("Mode doesn't have an associated index");
+ }
+
+ dispdata->mode = conn->modes[modedata->mode_index];
+
+ for (int i = 0; i < viddata->num_windows; i++) {
+ SDL_Window *window = viddata->windows[i];
+ SDL_WindowData *windata = (SDL_WindowData *)window->driverdata;
+
+#if SDL_VIDEO_OPENGL_EGL
+ /* Can't recreate EGL surfaces right now, need to wait until SwapWindow
+ so the correct thread-local surface and context state are available */
+ windata->egl_surface_dirty = 1;
+#else
+ if (KMSDRM_CreateSurfaces(_this, window)) {
+ return -1;
+ }
+#endif
+
+ /* Tell app about the resize */
+ SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, mode->w, mode->h);
+ }
+
return 0;
}
@@ -595,22 +747,28 @@
int
KMSDRM_CreateWindow(_THIS, SDL_Window * window)
{
- SDL_WindowData *wdata;
+ SDL_VideoData *viddata = (SDL_VideoData *)_this->driverdata;
+ SDL_WindowData *windata;
SDL_VideoDisplay *display;
- SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata);
- Uint32 surface_fmt, surface_flags;
+#if SDL_VIDEO_OPENGL_EGL
+ if (!_this->egl_data) {
+ if (SDL_GL_LoadLibrary(NULL) < 0) {
+ goto error;
+ }
+ }
+#endif
+
/* Allocate window internal data */
- wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData));
- if (wdata == NULL) {
+ windata = (SDL_WindowData *)SDL_calloc(1, sizeof(SDL_WindowData));
+
+ if (!windata) {
SDL_OutOfMemory();
goto error;
}
- wdata->waiting_for_flip = SDL_FALSE;
- display = SDL_GetDisplayForWindow(window);
-
/* Windows have one size for now */
+ display = SDL_GetDisplayForWindow(window);
window->w = display->desktop_mode.w;
window->h = display->desktop_mode.h;
@@ -617,61 +775,48 @@
/* Maybe you didn't ask for a fullscreen OpenGL window, but that's what you get */
window->flags |= (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL);
- surface_fmt = GBM_FORMAT_XRGB8888;
- surface_flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
+ /* In case we want low-latency, double-buffer video, we take note here */
+ windata->double_buffer = SDL_FALSE;
- if (!KMSDRM_gbm_device_is_format_supported(vdata->gbm, surface_fmt, surface_flags)) {
- SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "GBM surface format not supported. Trying anyway.");
+ if (SDL_GetHintBoolean(SDL_HINT_VIDEO_DOUBLE_BUFFER, SDL_FALSE)) {
+ windata->double_buffer = SDL_TRUE;
}
- wdata->gs = KMSDRM_gbm_surface_create(vdata->gbm, window->w, window->h, surface_fmt, surface_flags);
-#if SDL_VIDEO_OPENGL_EGL
- if (!_this->egl_data) {
- if (SDL_GL_LoadLibrary(NULL) < 0) {
- goto error;
- }
- }
- SDL_EGL_SetRequiredVisualId(_this, surface_fmt);
- wdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) wdata->gs);
+ /* Setup driver data for this window */
+ window->driverdata = windata;
- if (wdata->egl_surface == EGL_NO_SURFACE) {
- SDL_SetError("Could not create EGL window surface");
- goto error;
+ if (KMSDRM_CreateSurfaces(_this, window)) {
+ goto error;
}
-#endif /* SDL_VIDEO_OPENGL_EGL */
- /* In case we want low-latency, double-buffer video, we take note here */
- wdata->double_buffer = SDL_FALSE;
- if (SDL_GetHintBoolean(SDL_HINT_VIDEO_DOUBLE_BUFFER, SDL_FALSE)) {
- wdata->double_buffer = SDL_TRUE;
- }
+ /* Add window to the internal list of tracked windows. Note, while it may
+ seem odd to support multiple fullscreen windows, some apps create an
+ extra window as a dummy surface when working with multiple contexts */
+ windata->viddata = viddata;
- /* Window is created, but we have yet to set up CRTC to one of the GBM buffers if we want
- drmModePageFlip to work, and we can't do it until EGL is completely setup, because we
- need to do eglSwapBuffers so we can get a valid GBM buffer object to call
- drmModeSetCrtc on it. */
- wdata->crtc_ready = SDL_FALSE;
+ if (viddata->num_windows >= viddata->max_windows) {
+ int new_max_windows = viddata->max_windows + 1;
+ viddata->windows = (SDL_Window **)SDL_realloc(viddata->windows,
+ new_max_windows * sizeof(SDL_Window *));
+ viddata->max_windows = new_max_windows;
- /* Setup driver data for this window */
- window->driverdata = wdata;
+ if (!viddata->windows) {
+ SDL_OutOfMemory();
+ goto error;
+ }
+ }
- /* One window, it always has focus */
+ viddata->windows[viddata->num_windows++] = window;
+
+ /* Focus on the newly created window */
SDL_SetMouseFocus(window);
SDL_SetKeyboardFocus(window);
- /* Window has been successfully created */
return 0;
error:
- if (wdata != NULL) {
-#if SDL_VIDEO_OPENGL_EGL
- if (wdata->egl_surface != EGL_NO_SURFACE)
- SDL_EGL_DestroySurface(_this, wdata->egl_surface);
-#endif /* SDL_VIDEO_OPENGL_EGL */
- if (wdata->gs != NULL)
- KMSDRM_gbm_surface_destroy(wdata->gs);
- SDL_free(wdata);
- }
+ KMSDRM_DestroyWindow(_this, window);
+
return -1;
}
@@ -678,35 +823,32 @@
void
KMSDRM_DestroyWindow(_THIS, SDL_Window * window)
{
- SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
- if(data) {
- /* Wait for any pending page flips and unlock buffer */
- KMSDRM_WaitPageFlip(_this, data, -1);
- if (data->crtc_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->crtc_bo);
- data->crtc_bo = NULL;
+ SDL_WindowData *windata = (SDL_WindowData *) window->driverdata;
+ SDL_VideoData *viddata;
+ if (!windata) {
+ return;
+ }
+
+ /* Remove from the internal window list */
+ viddata = windata->viddata;
+
+ for (int i = 0; i < viddata->num_windows; i++) {
+ if (viddata->windows[i] == window) {
+ viddata->num_windows--;
+
+ for (int j = i; j < viddata->num_windows; j++) {
+ viddata->windows[j] = viddata->windows[j + 1];
+ }
+
+ break;
}
- if (data->next_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->next_bo);
- data->next_bo = NULL;
- }
- if (data->current_bo != NULL) {
- KMSDRM_gbm_surface_release_buffer(data->gs, data->current_bo);
- data->current_bo = NULL;
- }
-#if SDL_VIDEO_OPENGL_EGL
- SDL_EGL_MakeCurrent(_this, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- if (data->egl_surface != EGL_NO_SURFACE) {
- SDL_EGL_DestroySurface(_this, data->egl_surface);
- }
-#endif /* SDL_VIDEO_OPENGL_EGL */
- if (data->gs != NULL) {
- KMSDRM_gbm_surface_destroy(data->gs);
- data->gs = NULL;
- }
- SDL_free(data);
- window->driverdata = NULL;
}
+
+ KMSDRM_DestroySurfaces(_this, window);
+
+ window->driverdata = NULL;
+
+ SDL_free(windata);
}
int
--- a/external/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.h
+++ b/external/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -28,7 +28,6 @@
#include <fcntl.h>
#include <unistd.h>
-#include <poll.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include <gbm.h>
@@ -41,32 +40,39 @@
int devindex; /* device index that was passed on creation */
int drm_fd; /* DRM file desc */
struct gbm_device *gbm;
- drmEventContext drm_evctx; /* DRM event context */
- struct pollfd drm_pollfd; /* pollfd containing DRM file desc */
- drmModeCrtc *saved_crtc; /* Saved CRTC to restore on quit */
- uint32_t saved_conn_id; /* Saved DRM connector ID */
- uint32_t crtc_id; /* CRTC in use */
+
+ SDL_Window **windows;
+ int max_windows;
+ int num_windows;
} SDL_VideoData;
+typedef struct SDL_DisplayModeData
+{
+ int mode_index;
+} SDL_DisplayModeData;
+
+
typedef struct SDL_DisplayData
{
- uint32_t encoder_id;
uint32_t crtc_id;
- drmModeModeInfo cur_mode;
+ drmModeConnector *conn;
+ drmModeModeInfo mode;
+ drmModeCrtc *saved_crtc; /* CRTC to restore on quit */
} SDL_DisplayData;
typedef struct SDL_WindowData
{
+ SDL_VideoData *viddata;
struct gbm_surface *gs;
- struct gbm_bo *current_bo;
+ struct gbm_bo *curr_bo;
struct gbm_bo *next_bo;
struct gbm_bo *crtc_bo;
SDL_bool waiting_for_flip;
- SDL_bool crtc_ready;
SDL_bool double_buffer;
#if SDL_VIDEO_OPENGL_EGL
+ int egl_surface_dirty;
EGLSurface egl_surface;
#endif
} SDL_WindowData;
@@ -78,8 +84,9 @@
} KMSDRM_FBInfo;
/* Helper functions */
+int KMSDRM_CreateSurfaces(_THIS, SDL_Window * window);
KMSDRM_FBInfo *KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo);
-SDL_bool KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *wdata, int timeout);
+SDL_bool KMSDRM_WaitPageFlip(_THIS, SDL_WindowData *windata, int timeout);
/****************************************************************************/
/* SDL_VideoDevice functions declaration */
--- a/external/SDL2/src/video/nacl/SDL_naclevents.c
+++ b/external/SDL2/src/video/nacl/SDL_naclevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclevents_c.h
+++ b/external/SDL2/src/video/nacl/SDL_naclevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclglue.c
+++ b/external/SDL2/src/video/nacl/SDL_naclglue.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclopengles.c
+++ b/external/SDL2/src/video/nacl/SDL_naclopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclopengles.h
+++ b/external/SDL2/src/video/nacl/SDL_naclopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclvideo.c
+++ b/external/SDL2/src/video/nacl/SDL_naclvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclvideo.h
+++ b/external/SDL2/src/video/nacl/SDL_naclvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclwindow.c
+++ b/external/SDL2/src/video/nacl/SDL_naclwindow.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/nacl/SDL_naclwindow.h
+++ b/external/SDL2/src/video/nacl/SDL_naclwindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenevents.c
@@ -1,0 +1,42 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+
+/* Being a offscreen driver, there's no event stream. We just define stubs for
+ most of the API. */
+
+#include "../../events/SDL_events_c.h"
+
+#include "SDL_offscreenvideo.h"
+#include "SDL_offscreenevents_c.h"
+
+void
+OFFSCREEN_PumpEvents(_THIS)
+{
+ /* do nothing. */
+}
+
+#endif /* SDL_VIDEO_DRIVER_OFFSCREEN */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenevents_c.h
@@ -1,0 +1,28 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#include "SDL_offscreenvideo.h"
+
+extern void OFFSCREEN_PumpEvents(_THIS);
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenframebuffer.c
@@ -1,0 +1,90 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+
+#include "../SDL_sysvideo.h"
+#include "SDL_offscreenframebuffer_c.h"
+
+
+#define OFFSCREEN_SURFACE "_SDL_DummySurface"
+
+int SDL_OFFSCREEN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
+{
+ SDL_Surface *surface;
+ const Uint32 surface_format = SDL_PIXELFORMAT_RGB888;
+ int w, h;
+ int bpp;
+ Uint32 Rmask, Gmask, Bmask, Amask;
+
+ /* Free the old framebuffer surface */
+ surface = (SDL_Surface *) SDL_GetWindowData(window, OFFSCREEN_SURFACE);
+ SDL_FreeSurface(surface);
+
+ /* Create a new one */
+ SDL_PixelFormatEnumToMasks(surface_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
+ SDL_GetWindowSize(window, &w, &h);
+ surface = SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask);
+ if (!surface) {
+ return -1;
+ }
+
+ /* Save the info and return! */
+ SDL_SetWindowData(window, OFFSCREEN_SURFACE, surface);
+ *format = surface_format;
+ *pixels = surface->pixels;
+ *pitch = surface->pitch;
+ return 0;
+}
+
+int SDL_OFFSCREEN_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects)
+{
+ static int frame_number;
+ SDL_Surface *surface;
+
+ surface = (SDL_Surface *) SDL_GetWindowData(window, OFFSCREEN_SURFACE);
+ if (!surface) {
+ return SDL_SetError("Couldn't find offscreen surface for window");
+ }
+
+ /* Send the data to the display */
+ if (SDL_getenv("SDL_VIDEO_OFFSCREEN_SAVE_FRAMES")) {
+ char file[128];
+ SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp",
+ SDL_GetWindowID(window), ++frame_number);
+ SDL_SaveBMP(surface, file);
+ }
+ return 0;
+}
+
+void SDL_OFFSCREEN_DestroyWindowFramebuffer(_THIS, SDL_Window * window)
+{
+ SDL_Surface *surface;
+
+ surface = (SDL_Surface *) SDL_SetWindowData(window, OFFSCREEN_SURFACE, NULL);
+ SDL_FreeSurface(surface);
+}
+
+#endif /* SDL_VIDEO_DRIVER_OFFSCREEN */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenframebuffer_c.h
@@ -1,0 +1,28 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+extern int SDL_OFFSCREEN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
+extern int SDL_OFFSCREEN_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects);
+extern void SDL_OFFSCREEN_DestroyWindowFramebuffer(_THIS, SDL_Window * window);
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenopengl.c
@@ -1,0 +1,102 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+
+#include "SDL_offscreenopengl.h"
+
+#include "SDL_opengl.h"
+
+int
+OFFSCREEN_GL_SwapWindow(_THIS, SDL_Window* window)
+{
+ OFFSCREEN_Window* offscreen_wind = window->driverdata;
+
+ SDL_EGL_SwapBuffers(_this, offscreen_wind->egl_surface);
+ return 0;
+}
+
+int
+OFFSCREEN_GL_MakeCurrent(_THIS, SDL_Window* window, SDL_GLContext context)
+{
+ if (window) {
+ EGLSurface egl_surface = ((OFFSCREEN_Window*)window->driverdata)->egl_surface;
+ return SDL_EGL_MakeCurrent(_this, egl_surface, context);
+ }
+
+ return SDL_EGL_MakeCurrent(_this, NULL, NULL);
+}
+
+SDL_GLContext
+OFFSCREEN_GL_CreateContext(_THIS, SDL_Window* window)
+{
+ OFFSCREEN_Window* offscreen_window = window->driverdata;
+
+ SDL_GLContext context;
+ context = SDL_EGL_CreateContext(_this, offscreen_window->egl_surface);
+
+ return context;
+}
+
+int
+OFFSCREEN_GL_LoadLibrary(_THIS, const char* path)
+{
+ int ret = SDL_EGL_LoadLibraryOnly(_this, path);
+ if (ret != 0) {
+ return ret;
+ }
+
+ ret = SDL_EGL_InitializeOffscreen(_this, 0);
+ if (ret != 0) {
+ return ret;
+ }
+
+ ret = SDL_EGL_ChooseConfig(_this);
+ if (ret != 0) {
+ return ret;
+ }
+
+ return 0;
+}
+
+void
+OFFSCREEN_GL_UnloadLibrary(_THIS)
+{
+ SDL_EGL_UnloadLibrary(_this);
+}
+
+void*
+OFFSCREEN_GL_GetProcAddress(_THIS, const char* proc)
+{
+ void* proc_addr = SDL_EGL_GetProcAddress(_this, proc);
+
+ if (!proc_addr) {
+ SDL_SetError("Failed to find proc address!");
+ }
+
+ return proc_addr;
+}
+
+#endif /* SDL_VIDEO_DRIVER_OFFSCREEN */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenopengl.h
@@ -1,0 +1,54 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef _SDL_offscreenopengl_h
+#define _SDL_offscreenopengl_h
+
+#include "SDL_offscreenwindow.h"
+
+#include "../SDL_egl_c.h"
+
+#define OFFSCREEN_GL_DeleteContext SDL_EGL_DeleteContext
+#define OFFSCREEN_GL_GetSwapInterval SDL_EGL_GetSwapInterval
+#define OFFSCREEN_GL_SetSwapInterval SDL_EGL_SetSwapInterval
+
+extern int
+OFFSCREEN_GL_SwapWindow(_THIS, SDL_Window* window);
+
+extern int
+OFFSCREEN_GL_MakeCurrent(_THIS, SDL_Window* window, SDL_GLContext context);
+
+extern SDL_GLContext
+OFFSCREEN_GL_CreateContext(_THIS, SDL_Window* window);
+
+extern int
+OFFSCREEN_GL_LoadLibrary(_THIS, const char* path);
+
+extern void
+OFFSCREEN_GL_UnloadLibrary(_THIS);
+
+extern void*
+OFFSCREEN_GL_GetProcAddress(_THIS, const char* proc);
+
+#endif /* _SDL_offscreenopengl_h */
+
+/* vi: set ts=4 sw=4 expandtab: */
+
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenvideo.c
@@ -1,0 +1,166 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+
+/* Offscreen video driver is similar to dummy driver, however its purpose
+ * is enabling applications to use some of the SDL video functionality
+ * (notably context creation) while not requiring a display output.
+ *
+ * An example would be running a graphical program on a headless box
+ * for automated testing.
+ */
+
+#include "SDL_video.h"
+#include "SDL_mouse.h"
+#include "../SDL_sysvideo.h"
+#include "../SDL_pixels_c.h"
+#include "../../events/SDL_events_c.h"
+
+#include "SDL_offscreenvideo.h"
+#include "SDL_offscreenevents_c.h"
+#include "SDL_offscreenframebuffer_c.h"
+#include "SDL_offscreenopengl.h"
+
+#define OFFSCREENVID_DRIVER_NAME "offscreen"
+
+/* Initialization/Query functions */
+static int OFFSCREEN_VideoInit(_THIS);
+static int OFFSCREEN_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
+static void OFFSCREEN_VideoQuit(_THIS);
+
+/* OFFSCREEN driver bootstrap functions */
+
+static int
+OFFSCREEN_Available(void)
+{
+ /* Consider it always available */
+ return (1);
+}
+
+static void
+OFFSCREEN_DeleteDevice(SDL_VideoDevice * device)
+{
+ SDL_free(device);
+}
+
+static SDL_VideoDevice *
+OFFSCREEN_CreateDevice(int devindex)
+{
+ SDL_VideoDevice *device;
+
+ /* Initialize all variables that we clean on shutdown */
+ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice));
+ if (!device) {
+ SDL_OutOfMemory();
+ return (0);
+ }
+
+ /* General video */
+ device->VideoInit = OFFSCREEN_VideoInit;
+ device->VideoQuit = OFFSCREEN_VideoQuit;
+ device->SetDisplayMode = OFFSCREEN_SetDisplayMode;
+ device->PumpEvents = OFFSCREEN_PumpEvents;
+ device->CreateWindowFramebuffer = SDL_OFFSCREEN_CreateWindowFramebuffer;
+ device->UpdateWindowFramebuffer = SDL_OFFSCREEN_UpdateWindowFramebuffer;
+ device->DestroyWindowFramebuffer = SDL_OFFSCREEN_DestroyWindowFramebuffer;
+ device->free = OFFSCREEN_DeleteDevice;
+
+ /* GL context */
+ device->GL_SwapWindow = OFFSCREEN_GL_SwapWindow;
+ device->GL_MakeCurrent = OFFSCREEN_GL_MakeCurrent;
+ device->GL_CreateContext = OFFSCREEN_GL_CreateContext;
+ device->GL_DeleteContext = OFFSCREEN_GL_DeleteContext;
+ device->GL_LoadLibrary = OFFSCREEN_GL_LoadLibrary;
+ device->GL_UnloadLibrary = OFFSCREEN_GL_UnloadLibrary;
+ device->GL_GetProcAddress = OFFSCREEN_GL_GetProcAddress;
+ device->GL_GetSwapInterval = OFFSCREEN_GL_GetSwapInterval;
+ device->GL_SetSwapInterval = OFFSCREEN_GL_SetSwapInterval;
+
+ /* "Window" */
+ device->CreateSDLWindow = OFFSCREEN_CreateWindow;
+ device->DestroyWindow = OFFSCREEN_DestroyWindow;
+
+ return device;
+}
+
+VideoBootStrap OFFSCREEN_bootstrap = {
+ OFFSCREENVID_DRIVER_NAME, "SDL offscreen video driver",
+ OFFSCREEN_Available, OFFSCREEN_CreateDevice
+};
+
+static Uint32
+OFFSCREEN_GetGlobalMouseState(int *x, int *y)
+{
+ if (x) {
+ *x = 0;
+ }
+
+ if (y) {
+ *y = 0;
+ }
+ return 0;
+}
+
+int
+OFFSCREEN_VideoInit(_THIS)
+{
+ SDL_DisplayMode mode;
+ SDL_Mouse *mouse = NULL;
+
+ /* Use a fake 32-bpp desktop mode */
+ mode.format = SDL_PIXELFORMAT_RGB888;
+ mode.w = 1024;
+ mode.h = 768;
+ mode.refresh_rate = 0;
+ mode.driverdata = NULL;
+ if (SDL_AddBasicVideoDisplay(&mode) < 0) {
+ return -1;
+ }
+
+ SDL_zero(mode);
+ SDL_AddDisplayMode(&_this->displays[0], &mode);
+
+ /* Init mouse */
+ mouse = SDL_GetMouse();
+ /* This function needs to be implemented by every driver */
+ mouse->GetGlobalMouseState = OFFSCREEN_GetGlobalMouseState;
+
+ /* We're done! */
+ return 0;
+}
+
+static int
+OFFSCREEN_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)
+{
+ return 0;
+}
+
+void
+OFFSCREEN_VideoQuit(_THIS)
+{
+}
+
+#endif /* SDL_VIDEO_DRIVER_OFFSCREEN */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenvideo.h
@@ -1,0 +1,32 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#ifndef _SDL_offscreenvideo_h
+#define _SDL_offscreenvideo_h
+
+#include "../SDL_sysvideo.h"
+#include "../SDL_egl_c.h"
+
+#endif /* _SDL_offscreenvideo_h */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenwindow.c
@@ -1,0 +1,87 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../../SDL_internal.h"
+
+#if SDL_VIDEO_DRIVER_OFFSCREEN
+
+#include "../SDL_egl_c.h"
+#include "../SDL_sysvideo.h"
+
+#include "SDL_offscreenwindow.h"
+
+int
+OFFSCREEN_CreateWindow(_THIS, SDL_Window* window)
+{
+ OFFSCREEN_Window* offscreen_window = SDL_calloc(1, sizeof(OFFSCREEN_Window));
+
+ if (!offscreen_window) {
+ return SDL_OutOfMemory();
+ }
+
+ window->driverdata = offscreen_window;
+
+ if (window->x == SDL_WINDOWPOS_UNDEFINED) {
+ window->x = 0;
+ }
+
+ if (window->y == SDL_WINDOWPOS_UNDEFINED) {
+ window->y = 0;
+ }
+
+ offscreen_window->sdl_window = window;
+
+ if (window->flags & SDL_WINDOW_OPENGL) {
+
+ if (!_this->egl_data) {
+ return SDL_SetError("Cannot create an OPENGL window invalid egl_data");
+ }
+
+ offscreen_window->egl_surface = SDL_EGL_CreateOffscreenSurface(_this, window->w, window->h);
+
+ if (offscreen_window->egl_surface == EGL_NO_SURFACE) {
+ return SDL_SetError("Failed to created an offscreen surface (EGL display: %p)",
+ _this->egl_data->egl_display);
+ }
+ }
+ else {
+ offscreen_window->egl_surface = EGL_NO_SURFACE;
+ }
+
+ return 0;
+}
+
+void
+OFFSCREEN_DestroyWindow(_THIS, SDL_Window* window)
+{
+ OFFSCREEN_Window* offscreen_window = window->driverdata;
+
+ if (offscreen_window) {
+ SDL_EGL_DestroySurface(_this, offscreen_window->egl_surface);
+ SDL_free(offscreen_window);
+ }
+
+ window->driverdata = NULL;
+}
+
+#endif /* SDL_VIDEO_DRIVER_OFFSCREEN */
+
+/* vi: set ts=4 sw=4 expandtab: */
--- /dev/null
+++ b/external/SDL2/src/video/offscreen/SDL_offscreenwindow.h
@@ -1,0 +1,46 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+#ifndef _SDL_offscreenwindow_h
+#define _SDL_offscreenwindow_h
+
+#include "../SDL_sysvideo.h"
+#include "SDL_syswm.h"
+
+#include "SDL_offscreenvideo.h"
+
+typedef struct {
+ SDL_Window* sdl_window;
+ EGLSurface egl_surface;
+
+} OFFSCREEN_Window;
+
+
+extern int
+OFFSCREEN_CreateWindow(_THIS, SDL_Window* window);
+
+extern void
+OFFSCREEN_DestroyWindow(_THIS, SDL_Window* window);
+
+#endif /* _SDL_offscreenwindow */
+
+/* vi: set ts=4 sw=4 expandtab: */
+
--- a/external/SDL2/src/video/pandora/SDL_pandora.c
+++ b/external/SDL2/src/video/pandora/SDL_pandora.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/pandora/SDL_pandora.h
+++ b/external/SDL2/src/video/pandora/SDL_pandora.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/pandora/SDL_pandora_events.c
+++ b/external/SDL2/src/video/pandora/SDL_pandora_events.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/pandora/SDL_pandora_events.h
+++ b/external/SDL2/src/video/pandora/SDL_pandora_events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspevents.c
+++ b/external/SDL2/src/video/psp/SDL_pspevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspevents_c.h
+++ b/external/SDL2/src/video/psp/SDL_pspevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspgl.c
+++ b/external/SDL2/src/video/psp/SDL_pspgl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspgl_c.h
+++ b/external/SDL2/src/video/psp/SDL_pspgl_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspmouse.c
+++ b/external/SDL2/src/video/psp/SDL_pspmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspmouse_c.h
+++ b/external/SDL2/src/video/psp/SDL_pspmouse_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspvideo.c
+++ b/external/SDL2/src/video/psp/SDL_pspvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/psp/SDL_pspvideo.h
+++ b/external/SDL2/src/video/psp/SDL_pspvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpievents.c
+++ b/external/SDL2/src/video/raspberry/SDL_rpievents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpievents_c.h
+++ b/external/SDL2/src/video/raspberry/SDL_rpievents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpimouse.c
+++ b/external/SDL2/src/video/raspberry/SDL_rpimouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -226,6 +226,9 @@
SDL_free(cursor->driverdata);
}
SDL_free(cursor);
+ if (cursor == global_cursor) {
+ global_cursor = NULL;
+ }
}
}
--- a/external/SDL2/src/video/raspberry/SDL_rpimouse.h
+++ b/external/SDL2/src/video/raspberry/SDL_rpimouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpiopengles.c
+++ b/external/SDL2/src/video/raspberry/SDL_rpiopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpiopengles.h
+++ b/external/SDL2/src/video/raspberry/SDL_rpiopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpivideo.c
+++ b/external/SDL2/src/video/raspberry/SDL_rpivideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/raspberry/SDL_rpivideo.h
+++ b/external/SDL2/src/video/raspberry/SDL_rpivideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/sdlgenblit.pl
+++ b/external/SDL2/src/video/sdlgenblit.pl
@@ -68,8 +68,8 @@
);
my %get_rgba_string = (
- "RGB888" => $get_rgba_string_ignore_alpha{"RGB888"} . " _A = 0xFF;",
- "BGR888" => $get_rgba_string_ignore_alpha{"BGR888"} . " _A = 0xFF;",
+ "RGB888" => $get_rgba_string_ignore_alpha{"RGB888"},
+ "BGR888" => $get_rgba_string_ignore_alpha{"BGR888"},
"ARGB8888" => $get_rgba_string_ignore_alpha{"ARGB8888"} . " _A = (Uint8)(_pixel >> 24);",
"RGBA8888" => $get_rgba_string_ignore_alpha{"RGBA8888"} . " _A = (Uint8)_pixel;",
"ABGR8888" => $get_rgba_string_ignore_alpha{"ABGR8888"} . " _A = (Uint8)(_pixel >> 24);",
@@ -77,12 +77,12 @@
);
my %set_rgba_string = (
- "RGB888" => "_pixel = ((Uint32)_R << 16) | ((Uint32)_G << 8) | _B;",
- "BGR888" => "_pixel = ((Uint32)_B << 16) | ((Uint32)_G << 8) | _R;",
- "ARGB8888" => "_pixel = ((Uint32)_A << 24) | ((Uint32)_R << 16) | ((Uint32)_G << 8) | _B;",
- "RGBA8888" => "_pixel = ((Uint32)_R << 24) | ((Uint32)_G << 16) | ((Uint32)_B << 8) | _A;",
- "ABGR8888" => "_pixel = ((Uint32)_A << 24) | ((Uint32)_B << 16) | ((Uint32)_G << 8) | _R;",
- "BGRA8888" => "_pixel = ((Uint32)_B << 24) | ((Uint32)_G << 16) | ((Uint32)_R << 8) | _A;",
+ "RGB888" => "_pixel = (_R << 16) | (_G << 8) | _B;",
+ "BGR888" => "_pixel = (_B << 16) | (_G << 8) | _R;",
+ "ARGB8888" => "_pixel = (_A << 24) | (_R << 16) | (_G << 8) | _B;",
+ "RGBA8888" => "_pixel = (_R << 24) | (_G << 16) | (_B << 8) | _A;",
+ "ABGR8888" => "_pixel = (_A << 24) | (_B << 16) | (_G << 8) | _R;",
+ "BGRA8888" => "_pixel = (_B << 24) | (_G << 16) | (_R << 8) | _A;",
);
sub open_file {
@@ -92,7 +92,7 @@
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken\@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken\@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -112,6 +112,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_AUTO
+
/* *INDENT-OFF* */
__EOF__
@@ -122,6 +124,8 @@
print FILE <<__EOF__;
/* *INDENT-ON* */
+#endif /* SDL_HAVE_BLIT_AUTO */
+
/* vi: set ts=4 sw=4 expandtab: */
__EOF__
close FILE;
@@ -212,6 +216,8 @@
my $dst = shift;
my $modulate = shift;
my $blend = shift;
+ my $is_modulateA_done = shift;
+ my $A_is_const_FF = shift;
my $s = "";
my $d = "";
@@ -243,7 +249,7 @@
${s}B = (${s}B * modulateB) / 255;
}
__EOF__
- if (not $ignore_dst_alpha) {
+ if (!$ignore_dst_alpha && !$is_modulateA_done) {
print FILE <<__EOF__;
if (flags & SDL_COPY_MODULATE_ALPHA) {
${s}A = (${s}A * modulateA) / 255;
@@ -252,7 +258,8 @@
}
}
if ( $blend ) {
- print FILE <<__EOF__;
+ if (!$A_is_const_FF) {
+ print FILE <<__EOF__;
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (${s}A < 255) {
@@ -261,17 +268,35 @@
${s}B = (${s}B * ${s}A) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+__EOF__
+ }
+ print FILE <<__EOF__;
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
+__EOF__
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}R = ${s}R;
+ ${d}G = ${s}G;
+ ${d}B = ${s}B;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
${d}R = ${s}R + ((255 - ${s}A) * ${d}R) / 255;
${d}G = ${s}G + ((255 - ${s}A) * ${d}G) / 255;
${d}B = ${s}B + ((255 - ${s}A) * ${d}B) / 255;
__EOF__
-
+ }
if ( $dst_has_alpha ) {
- print FILE <<__EOF__;
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}A = 0xFF;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
${d}A = ${s}A + ((255 - ${s}A) * ${d}A) / 255;
__EOF__
+ }
}
print FILE <<__EOF__;
@@ -286,7 +311,36 @@
${d}G = (${s}G * ${d}G) / 255;
${d}B = (${s}B * ${d}B) / 255;
break;
+ case SDL_COPY_MUL:
+__EOF__
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}R = (${s}R * ${d}R) / 255;
+ ${d}G = (${s}G * ${d}G) / 255;
+ ${d}B = (${s}B * ${d}B) / 255;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
+ ${d}R = ((${s}R * ${d}R) + (${d}R * (255 - ${s}A))) / 255; if (${d}R > 255) ${d}R = 255;
+ ${d}G = ((${s}G * ${d}G) + (${d}G * (255 - ${s}A))) / 255; if (${d}G > 255) ${d}G = 255;
+ ${d}B = ((${s}B * ${d}B) + (${d}B * (255 - ${s}A))) / 255; if (${d}B > 255) ${d}B = 255;
+__EOF__
+ }
+ if ( $dst_has_alpha ) {
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}A = 0xFF;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
+ ${d}A = ((${s}A * ${d}A) + (${d}A * (255 - ${s}A))) / 255; if (${d}A > 255) ${d}A = 255;
+__EOF__
}
+ }
+
+ print FILE <<__EOF__;
+ break;
+ }
__EOF__
}
if ( $blend ) {
@@ -306,7 +360,12 @@
my $dst_has_alpha = ($dst =~ /A/) ? 1 : 0;
my $ignore_dst_alpha = !$dst_has_alpha && !$blend;
+
+ my $src_has_alpha = ($src =~ /A/) ? 1 : 0;
+ my $is_modulateA_done = 0;
+ my $A_is_const_FF = 0;
+
output_copyfuncname("static void", $src, $dst, $modulate, $blend, $scale, 1, "\n");
print FILE <<__EOF__;
{
@@ -331,7 +390,25 @@
if ( $blend ) {
print FILE <<__EOF__;
Uint32 srcpixel;
+__EOF__
+ if (!$ignore_dst_alpha && !$src_has_alpha) {
+ if ($modulate){
+ $is_modulateA_done = 1;
+ print FILE <<__EOF__;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+__EOF__
+ } else {
+ $A_is_const_FF = 1;
+ }
+ print FILE <<__EOF__;
+ Uint32 srcR, srcG, srcB;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
Uint32 srcR, srcG, srcB, srcA;
+__EOF__
+ }
+ print FILE <<__EOF__;
Uint32 dstpixel;
__EOF__
if ($dst_has_alpha) {
@@ -347,8 +424,23 @@
print FILE <<__EOF__;
Uint32 pixel;
__EOF__
- if (!$ignore_dst_alpha) {
+ if (!$ignore_dst_alpha && !$src_has_alpha) {
+ if ($modulate){
+ $is_modulateA_done = 1;
+ print FILE <<__EOF__;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+__EOF__
+ } else {
+ $A_is_const_FF = 1;
+ print FILE <<__EOF__;
+ const Uint32 A = 0xFF;
+__EOF__
+ }
print FILE <<__EOF__;
+ Uint32 R, G, B;
+__EOF__
+ } elsif (!$ignore_dst_alpha) {
+ print FILE <<__EOF__;
Uint32 R, G, B, A;
__EOF__
} else {
@@ -392,7 +484,7 @@
print FILE <<__EOF__;
}
__EOF__
- output_copycore($src, $dst, $modulate, $blend);
+ output_copycore($src, $dst, $modulate, $blend, $is_modulateA_done, $A_is_const_FF);
print FILE <<__EOF__;
posx += incx;
++dst;
@@ -410,7 +502,7 @@
int n = info->dst_w;
while (n--) {
__EOF__
- output_copycore($src, $dst, $modulate, $blend);
+ output_copycore($src, $dst, $modulate, $blend, $is_modulateA_done, $A_is_const_FF);
print FILE <<__EOF__;
++src;
++dst;
@@ -465,7 +557,7 @@
}
}
if ( $blend ) {
- $flag = "SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD";
+ $flag = "SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL";
if ( $flags eq "" ) {
$flags = $flag;
} else {
--- a/external/SDL2/src/video/uikit/SDL_uikitappdelegate.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitappdelegate.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitappdelegate.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitappdelegate.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitclipboard.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitclipboard.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitclipboard.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitevents.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitevents.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitevents.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -65,7 +65,9 @@
} while(result == kCFRunLoopRunHandledSource);
/* See the comment in the function definition. */
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
UIKit_GL_RestoreCurrentContext();
+#endif
}
#endif /* SDL_VIDEO_DRIVER_UIKIT */
--- a/external/SDL2/src/video/uikit/SDL_uikitmessagebox.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitmessagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitmessagebox.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitmessagebox.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -57,7 +57,6 @@
{
int i;
int __block clickedindex = messageboxdata->numbuttons;
- const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons;
UIWindow *window = nil;
UIWindow *alertwindow = nil;
@@ -73,17 +72,28 @@
for (i = 0; i < messageboxdata->numbuttons; i++) {
UIAlertAction *action;
UIAlertActionStyle style = UIAlertActionStyleDefault;
+ const SDL_MessageBoxButtonData *sdlButton;
- if (buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ } else {
+ sdlButton = &messageboxdata->buttons[i];
+ }
+
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
style = UIAlertActionStyleCancel;
}
- action = [UIAlertAction actionWithTitle:@(buttons[i].text)
+ action = [UIAlertAction actionWithTitle:@(sdlButton->text)
style:style
handler:^(UIAlertAction *action) {
- clickedindex = i;
+ clickedindex = (int)(sdlButton - messageboxdata->buttons);
}];
[alert addAction:action];
+
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
+ alert.preferredAction = action;
+ }
}
if (messageboxdata->window) {
@@ -150,7 +160,13 @@
alert.message = @(messageboxdata->message);
for (i = 0; i < messageboxdata->numbuttons; i++) {
- [alert addButtonWithTitle:@(buttons[i].text)];
+ const SDL_MessageBoxButtonData *sdlButton;
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ } else {
+ sdlButton = &messageboxdata->buttons[i];
+ }
+ [alert addButtonWithTitle:@(sdlButton->text)];
}
delegate.clickedIndex = &clickedindex;
@@ -161,6 +177,9 @@
alert.delegate = nil;
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ clickedindex = messageboxdata->numbuttons - 1 - clickedindex;
+ }
*buttonid = messageboxdata->buttons[clickedindex].buttonid;
return YES;
#else
--- a/external/SDL2/src/video/uikit/SDL_uikitmetalview.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitmetalview.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -29,10 +29,10 @@
#ifndef SDL_uikitmetalview_h_
#define SDL_uikitmetalview_h_
-#import "../SDL_sysvideo.h"
-#import "SDL_uikitwindow.h"
+#include "../SDL_sysvideo.h"
+#include "SDL_uikitwindow.h"
-#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_RENDER_METAL || SDL_VIDEO_VULKAN)
+#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL)
#import <UIKit/UIKit.h>
#import <Metal/Metal.h>
@@ -47,11 +47,12 @@
@end
-SDL_uikitmetalview* UIKit_Mtl_AddMetalView(SDL_Window* window);
+SDL_MetalView UIKit_Metal_CreateView(_THIS, SDL_Window * window);
+void UIKit_Metal_DestroyView(_THIS, SDL_MetalView view);
-void UIKit_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h);
+void UIKit_Metal_GetDrawableSize(SDL_Window * window, int * w, int * h);
-#endif /* SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_RENDER_METAL || SDL_VIDEO_VULKAN) */
+#endif /* SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL) */
#endif /* SDL_uikitmetalview_h_ */
--- a/external/SDL2/src/video/uikit/SDL_uikitmetalview.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitmetalview.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -28,7 +28,7 @@
#include "../../SDL_internal.h"
-#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_RENDER_METAL || SDL_VIDEO_VULKAN)
+#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL)
#import "../SDL_sysvideo.h"
#import "SDL_uikitwindow.h"
@@ -73,17 +73,13 @@
@end
-SDL_uikitmetalview*
-UIKit_Mtl_AddMetalView(SDL_Window* window)
-{
+SDL_MetalView
+UIKit_Metal_CreateView(_THIS, SDL_Window * window)
+{ @autoreleasepool {
SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata;
- SDL_uikitview *view = (SDL_uikitview*)data.uiwindow.rootViewController.view;
CGFloat scale = 1.0;
+ SDL_uikitmetalview *metalview;
- if ([view isKindOfClass:[SDL_uikitmetalview class]]) {
- return (SDL_uikitmetalview *)view;
- }
-
if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) {
/* Set the scale to the natural scale factor of the screen - then
* the backing dimensions of the Metal view will match the pixel
@@ -96,16 +92,26 @@
scale = data.uiwindow.screen.scale;
}
}
- SDL_uikitmetalview *metalview
- = [[SDL_uikitmetalview alloc] initWithFrame:view.frame
- scale:scale];
+
+ metalview = [[SDL_uikitmetalview alloc] initWithFrame:data.uiwindow.bounds
+ scale:scale];
[metalview setSDLWindow:window];
- return metalview;
-}
+ return (void*)CFBridgingRetain(metalview);
+}}
void
-UIKit_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h)
+UIKit_Metal_DestroyView(_THIS, SDL_MetalView view)
+{ @autoreleasepool {
+ SDL_uikitmetalview *metalview = CFBridgingRelease(view);
+
+ if ([metalview isKindOfClass:[SDL_uikitmetalview class]]) {
+ [metalview setSDLWindow:NULL];
+ }
+}}
+
+void
+UIKit_Metal_GetDrawableSize(SDL_Window * window, int * w, int * h)
{
@autoreleasepool {
SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata;
@@ -126,4 +132,4 @@
}
}
-#endif /* SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_RENDER_METAL || SDL_VIDEO_VULKAN) */
+#endif /* SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL) */
--- a/external/SDL2/src/video/uikit/SDL_uikitmodes.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitmodes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,7 +27,10 @@
@interface SDL_DisplayData : NSObject
+- (instancetype)initWithScreen:(UIScreen*)screen;
+
@property (nonatomic, strong) UIScreen *uiscreen;
+@property (nonatomic) float screenDPI;
@end
@@ -41,13 +44,10 @@
extern int UIKit_InitModes(_THIS);
extern void UIKit_GetDisplayModes(_THIS, SDL_VideoDisplay * display);
+extern int UIKit_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi);
extern int UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode);
extern void UIKit_QuitModes(_THIS);
extern int UIKit_GetDisplayUsableBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
-
-#if !TARGET_OS_TV
-extern void SDL_OnApplicationDidChangeStatusBarOrientation(void);
-#endif
#endif /* SDL_uikitmodes_h_ */
--- a/external/SDL2/src/video/uikit/SDL_uikitmodes.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitmodes.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -23,13 +23,155 @@
#if SDL_VIDEO_DRIVER_UIKIT
#include "SDL_assert.h"
+#include "SDL_system.h"
#include "SDL_uikitmodes.h"
#include "../../events/SDL_events_c.h"
+#import <sys/utsname.h>
+
@implementation SDL_DisplayData
+- (instancetype)initWithScreen:(UIScreen*)screen
+{
+ if (self = [super init]) {
+ self.uiscreen = screen;
+
+ /*
+ * A well up to date list of device info can be found here:
+ * https://github.com/lmirosevic/GBDeviceInfo/blob/master/GBDeviceInfo/GBDeviceInfo_iOS.m
+ */
+ NSDictionary* devices = @{
+ @"iPhone1,1": @163,
+ @"iPhone1,2": @163,
+ @"iPhone2,1": @163,
+ @"iPhone3,1": @326,
+ @"iPhone3,2": @326,
+ @"iPhone3,3": @326,
+ @"iPhone4,1": @326,
+ @"iPhone5,1": @326,
+ @"iPhone5,2": @326,
+ @"iPhone5,3": @326,
+ @"iPhone5,4": @326,
+ @"iPhone6,1": @326,
+ @"iPhone6,2": @326,
+ @"iPhone7,1": @401,
+ @"iPhone7,2": @326,
+ @"iPhone8,1": @326,
+ @"iPhone8,2": @401,
+ @"iPhone8,4": @326,
+ @"iPhone9,1": @326,
+ @"iPhone9,2": @401,
+ @"iPhone9,3": @326,
+ @"iPhone9,4": @401,
+ @"iPhone10,1": @326,
+ @"iPhone10,2": @401,
+ @"iPhone10,3": @458,
+ @"iPhone10,4": @326,
+ @"iPhone10,5": @401,
+ @"iPhone10,6": @458,
+ @"iPhone11,2": @458,
+ @"iPhone11,4": @458,
+ @"iPhone11,6": @458,
+ @"iPhone11,8": @326,
+ @"iPhone12,1": @326,
+ @"iPhone12,3": @458,
+ @"iPhone12,5": @458,
+ @"iPad1,1": @132,
+ @"iPad2,1": @132,
+ @"iPad2,2": @132,
+ @"iPad2,3": @132,
+ @"iPad2,4": @132,
+ @"iPad2,5": @163,
+ @"iPad2,6": @163,
+ @"iPad2,7": @163,
+ @"iPad3,1": @264,
+ @"iPad3,2": @264,
+ @"iPad3,3": @264,
+ @"iPad3,4": @264,
+ @"iPad3,5": @264,
+ @"iPad3,6": @264,
+ @"iPad4,1": @264,
+ @"iPad4,2": @264,
+ @"iPad4,3": @264,
+ @"iPad4,4": @326,
+ @"iPad4,5": @326,
+ @"iPad4,6": @326,
+ @"iPad4,7": @326,
+ @"iPad4,8": @326,
+ @"iPad4,9": @326,
+ @"iPad5,1": @326,
+ @"iPad5,2": @326,
+ @"iPad5,3": @264,
+ @"iPad5,4": @264,
+ @"iPad6,3": @264,
+ @"iPad6,4": @264,
+ @"iPad6,7": @264,
+ @"iPad6,8": @264,
+ @"iPad6,11": @264,
+ @"iPad6,12": @264,
+ @"iPad7,1": @264,
+ @"iPad7,2": @264,
+ @"iPad7,3": @264,
+ @"iPad7,4": @264,
+ @"iPad7,5": @264,
+ @"iPad7,6": @264,
+ @"iPad7,11": @264,
+ @"iPad7,12": @264,
+ @"iPad8,1": @264,
+ @"iPad8,2": @264,
+ @"iPad8,3": @264,
+ @"iPad8,4": @264,
+ @"iPad8,5": @264,
+ @"iPad8,6": @264,
+ @"iPad8,7": @264,
+ @"iPad8,8": @264,
+ @"iPad11,1": @326,
+ @"iPad11,2": @326,
+ @"iPad11,3": @326,
+ @"iPad11,4": @326,
+ @"iPod1,1": @163,
+ @"iPod2,1": @163,
+ @"iPod3,1": @163,
+ @"iPod4,1": @326,
+ @"iPod5,1": @326,
+ @"iPod7,1": @326,
+ @"iPod9,1": @326,
+ };
+
+ struct utsname systemInfo;
+ uname(&systemInfo);
+ NSString* deviceName =
+ [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
+ id foundDPI = devices[deviceName];
+ if (foundDPI) {
+ self.screenDPI = (float)[foundDPI integerValue];
+ } else {
+ /*
+ * Estimate the DPI based on the screen scale multiplied by the base DPI for the device
+ * type (e.g. based on iPhone 1 and iPad 1)
+ */
+ #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000
+ float scale = (float)screen.nativeScale;
+ #else
+ float scale = (float)screen.scale;
+ #endif
+ float defaultDPI;
+ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+ defaultDPI = 132.0f;
+ } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
+ defaultDPI = 163.0f;
+ } else {
+ defaultDPI = 160.0f;
+ }
+ self.screenDPI = scale * defaultDPI;
+ }
+ }
+ return self;
+}
+
@synthesize uiscreen;
+@synthesize screenDPI;
@end
@@ -153,14 +295,12 @@
display.current_mode = mode;
/* Allocate the display data */
- SDL_DisplayData *data = [[SDL_DisplayData alloc] init];
+ SDL_DisplayData *data = [[SDL_DisplayData alloc] initWithScreen:uiscreen];
if (!data) {
UIKit_FreeDisplayModeData(&display.desktop_mode);
return SDL_OutOfMemory();
}
- data.uiscreen = uiscreen;
-
display.driverdata = (void *) CFBridgingRetain(data);
SDL_AddVideoDisplay(&display);
@@ -241,6 +381,27 @@
UIKit_AddDisplayMode(display, w, h, data.uiscreen, uimode, addRotation);
}
}
+}
+
+int
+UIKit_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi)
+{
+ @autoreleasepool {
+ SDL_DisplayData *data = (__bridge SDL_DisplayData *) display->driverdata;
+ float dpi = data.screenDPI;
+
+ if (ddpi) {
+ *ddpi = dpi * (float)SDL_sqrt(2.0);
+ }
+ if (hdpi) {
+ *hdpi = dpi;
+ }
+ if (vdpi) {
+ *vdpi = dpi;
+ }
+ }
+
+ return 0;
}
int
--- a/external/SDL2/src/video/uikit/SDL_uikitopengles.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,6 +21,8 @@
#ifndef SDL_uikitopengles_
#define SDL_uikitopengles_
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
+
#include "../SDL_sysvideo.h"
extern int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window,
@@ -34,6 +36,8 @@
extern int UIKit_GL_LoadLibrary(_THIS, const char *path);
extern void UIKit_GL_RestoreCurrentContext(void);
+
+#endif // SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
#endif /* SDL_uikitopengles_ */
--- a/external/SDL2/src/video/uikit/SDL_uikitopengles.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitopengles.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if SDL_VIDEO_DRIVER_UIKIT
+#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2)
#include "SDL_uikitopengles.h"
#import "SDL_uikitopenglview.h"
--- a/external/SDL2/src/video/uikit/SDL_uikitopenglview.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitopenglview.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -19,6 +19,8 @@
3. This notice may not be removed or altered from any source distribution.
*/
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
+
#import <UIKit/UIKit.h>
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES3/gl.h>
@@ -56,5 +58,7 @@
- (void)updateFrame;
@end
+
+#endif // SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/src/video/uikit/SDL_uikitopenglview.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitopenglview.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -20,7 +20,7 @@
*/
#include "../../SDL_internal.h"
-#if SDL_VIDEO_DRIVER_UIKIT
+#if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2)
#include <OpenGLES/EAGLDrawable.h>
#include <OpenGLES/ES2/glext.h>
--- a/external/SDL2/src/video/uikit/SDL_uikitvideo.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitvideo.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitvideo.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -38,6 +38,7 @@
#include "SDL_uikitopengles.h"
#include "SDL_uikitclipboard.h"
#include "SDL_uikitvulkan.h"
+#include "SDL_uikitmetalview.h"
#define UIKITVID_DRIVER_NAME "uikit"
@@ -115,6 +116,7 @@
device->HasClipboardText = UIKit_HasClipboardText;
/* OpenGL (ES) functions */
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
device->GL_MakeCurrent = UIKit_GL_MakeCurrent;
device->GL_GetDrawableSize = UIKit_GL_GetDrawableSize;
device->GL_SwapWindow = UIKit_GL_SwapWindow;
@@ -122,6 +124,7 @@
device->GL_DeleteContext = UIKit_GL_DeleteContext;
device->GL_GetProcAddress = UIKit_GL_GetProcAddress;
device->GL_LoadLibrary = UIKit_GL_LoadLibrary;
+#endif
device->free = UIKit_DeleteDevice;
#if SDL_VIDEO_VULKAN
@@ -133,6 +136,11 @@
device->Vulkan_GetDrawableSize = UIKit_Vulkan_GetDrawableSize;
#endif
+#if SDL_VIDEO_METAL
+ device->Metal_CreateView = UIKit_Metal_CreateView;
+ device->Metal_DestroyView = UIKit_Metal_DestroyView;
+#endif
+
device->gl_config.accelerated = 1;
return device;
@@ -186,8 +194,16 @@
CGRect
UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen)
{
+ SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata;
CGRect frame = screen.bounds;
+ /* Use the UIWindow bounds instead of the UIScreen bounds, when possible.
+ * The uiwindow bounds may be smaller than the screen bounds when Split View
+ * is used on an iPad. */
+ if (data != nil && data.uiwindow != nil) {
+ frame = data.uiwindow.bounds;
+ }
+
#if !TARGET_OS_TV && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0)
BOOL hasiOS7 = UIKit_IsSystemVersionAtLeast(7.0);
@@ -208,9 +224,12 @@
* https://forums.developer.apple.com/thread/65337 */
if (UIKit_IsSystemVersionAtLeast(8.0)) {
UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation;
- BOOL isLandscape = UIInterfaceOrientationIsLandscape(orient);
+ BOOL landscape = UIInterfaceOrientationIsLandscape(orient);
+ BOOL fullscreen = CGRectEqualToRect(screen.bounds, frame);
- if (isLandscape != (frame.size.width > frame.size.height)) {
+ /* The orientation flip doesn't make sense when the window is smaller
+ * than the screen (iPad Split View, for example). */
+ if (fullscreen && (landscape != (frame.size.width > frame.size.height))) {
float height = frame.size.width;
frame.size.width = frame.size.height;
frame.size.height = height;
@@ -268,7 +287,7 @@
*/
SDL_bool SDL_IsIPad(void)
{
- return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
+ return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad);
}
#endif /* SDL_VIDEO_DRIVER_UIKIT */
--- a/external/SDL2/src/video/uikit/SDL_uikitview.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitview.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitview.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitview.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -198,7 +198,7 @@
/* FIXME, need to send: int clicks = (int) touch.tapCount; ? */
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
- SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch),
+ SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), sdlwindow,
SDL_TRUE, locationInView.x, locationInView.y, pressure);
}
}
@@ -217,7 +217,7 @@
/* FIXME, need to send: int clicks = (int) touch.tapCount; ? */
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
- SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch),
+ SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), sdlwindow,
SDL_FALSE, locationInView.x, locationInView.y, pressure);
}
}
@@ -239,7 +239,7 @@
}
CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
- SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch),
+ SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch), sdlwindow,
locationInView.x, locationInView.y, pressure);
}
}
--- a/external/SDL2/src/video/uikit/SDL_uikitviewcontroller.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitviewcontroller.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitviewcontroller.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitviewcontroller.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -180,7 +180,9 @@
/* Don't run the game loop while a messagebox is up */
if (!UIKit_ShowingMessageBox()) {
/* See the comment in the function definition. */
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
UIKit_GL_RestoreCurrentContext();
+#endif
animationCallback(animationCallbackParam);
}
@@ -286,7 +288,8 @@
[center addObserver:self selector:@selector(textFieldTextDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
}
-- (NSArray *) keyCommands {
+- (NSArray *)keyCommands
+{
NSMutableArray *commands = [[NSMutableArray alloc] init];
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputUpArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
[commands addObject:[UIKeyCommand keyCommandWithInput:UIKeyInputDownArrow modifierFlags:kNilOptions action:@selector(handleCommand:)]];
@@ -296,18 +299,20 @@
return [NSArray arrayWithArray:commands];
}
-- (void) handleCommand: (UIKeyCommand *) keyCommand {
+- (void)handleCommand:(UIKeyCommand *)keyCommand
+{
SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
+ NSString *input = keyCommand.input;
- if (keyCommand.input == UIKeyInputUpArrow) {
+ if (input == UIKeyInputUpArrow) {
scancode = SDL_SCANCODE_UP;
- } else if (keyCommand.input == UIKeyInputDownArrow) {
+ } else if (input == UIKeyInputDownArrow) {
scancode = SDL_SCANCODE_DOWN;
- } else if (keyCommand.input == UIKeyInputLeftArrow) {
+ } else if (input == UIKeyInputLeftArrow) {
scancode = SDL_SCANCODE_LEFT;
- } else if (keyCommand.input == UIKeyInputRightArrow) {
+ } else if (input == UIKeyInputRightArrow) {
scancode = SDL_SCANCODE_RIGHT;
- } else if (keyCommand.input == UIKeyInputEscape) {
+ } else if (input == UIKeyInputEscape) {
scancode = SDL_SCANCODE_ESCAPE;
}
@@ -317,10 +322,6 @@
}
}
-- (void) downArrow: (UIKeyCommand *) keyCommand {
- NSLog(@"down arrow!");
-}
-
- (void)setView:(UIView *)view
{
[super setView:view];
@@ -340,8 +341,8 @@
rotatingOrientation = YES;
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {}
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
- rotatingOrientation = NO;
- }];
+ self->rotatingOrientation = NO;
+ }];
}
#else
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
--- a/external/SDL2/src/video/uikit/SDL_uikitvulkan.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitvulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitvulkan.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitvulkan.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -200,6 +200,7 @@
"vkCreateIOSSurfaceMVK");
VkIOSSurfaceCreateInfoMVK createInfo = {};
VkResult result;
+ SDL_MetalView metalview;
if (!_this->vulkan_config.loader_handle) {
SDL_SetError("Vulkan is not loaded");
@@ -212,24 +213,37 @@
return SDL_FALSE;
}
+ metalview = UIKit_Metal_CreateView(_this, window);
+ if (metalview == NULL) {
+ return SDL_FALSE;
+ }
+
createInfo.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
createInfo.pNext = NULL;
createInfo.flags = 0;
- createInfo.pView = (__bridge void *)UIKit_Mtl_AddMetalView(window);
+ createInfo.pView = (const void *)metalview;
result = vkCreateIOSSurfaceMVK(instance, &createInfo,
NULL, surface);
if (result != VK_SUCCESS) {
+ UIKit_Metal_DestroyView(_this, metalview);
SDL_SetError("vkCreateIOSSurfaceMVK failed: %s",
SDL_Vulkan_GetResultString(result));
return SDL_FALSE;
}
+ /* Unfortunately there's no SDL_Vulkan_DestroySurface function we can call
+ * Metal_DestroyView from. Right now the metal view's ref count is +2 (one
+ * from returning a new view object in CreateView, and one because it's
+ * a subview of the window.) If we release the view here to make it +1, it
+ * will be destroyed when the window is destroyed. */
+ CFBridgingRelease(metalview);
+
return SDL_TRUE;
}
void UIKit_Vulkan_GetDrawableSize(_THIS, SDL_Window *window, int *w, int *h)
{
- UIKit_Mtl_GetDrawableSize(window, w, h);
+ UIKit_Metal_GetDrawableSize(window, w, h);
}
#endif
--- a/external/SDL2/src/video/uikit/SDL_uikitwindow.h
+++ b/external/SDL2/src/video/uikit/SDL_uikitwindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/uikit/SDL_uikitwindow.m
+++ b/external/SDL2/src/video/uikit/SDL_uikitwindow.m
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -364,6 +364,7 @@
/* These struct members were added in SDL 2.0.4. */
if (versionnum >= SDL_VERSIONNUM(2,0,4)) {
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
if ([data.viewcontroller.view isKindOfClass:[SDL_uikitopenglview class]]) {
SDL_uikitopenglview *glview = (SDL_uikitopenglview *)data.viewcontroller.view;
info->info.uikit.framebuffer = glview.drawableFramebuffer;
@@ -370,6 +371,9 @@
info->info.uikit.colorbuffer = glview.drawableRenderbuffer;
info->info.uikit.resolveFramebuffer = glview.msaaResolveFramebuffer;
} else {
+#else
+ {
+#endif
info->info.uikit.framebuffer = 0;
info->info.uikit.colorbuffer = 0;
info->info.uikit.resolveFramebuffer = 0;
--- a/external/SDL2/src/video/uikit/keyinfotable.h
+++ b/external/SDL2/src/video/uikit/keyinfotable.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivanteopengles.c
+++ b/external/SDL2/src/video/vivante/SDL_vivanteopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivanteopengles.h
+++ b/external/SDL2/src/video/vivante/SDL_vivanteopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivanteplatform.c
+++ b/external/SDL2/src/video/vivante/SDL_vivanteplatform.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivanteplatform.h
+++ b/external/SDL2/src/video/vivante/SDL_vivanteplatform.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivantevideo.c
+++ b/external/SDL2/src/video/vivante/SDL_vivantevideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivantevideo.h
+++ b/external/SDL2/src/video/vivante/SDL_vivantevideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivantevulkan.c
+++ b/external/SDL2/src/video/vivante/SDL_vivantevulkan.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/vivante/SDL_vivantevulkan.h
+++ b/external/SDL2/src/video/vivante/SDL_vivantevulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandclipboard.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandclipboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandclipboard.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylanddatamanager.c
+++ b/external/SDL2/src/video/wayland/SDL_waylanddatamanager.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylanddatamanager.h
+++ b/external/SDL2/src/video/wayland/SDL_waylanddatamanager.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylanddyn.c
+++ b/external/SDL2/src/video/wayland/SDL_waylanddyn.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -41,9 +41,6 @@
const char *libname;
} waylanddynlib;
-#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
-#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC NULL
-#endif
#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL NULL
#endif
--- a/external/SDL2/src/video/wayland/SDL_waylanddyn.h
+++ b/external/SDL2/src/video/wayland/SDL_waylanddyn.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -59,6 +59,9 @@
}
#endif
+/* Must be included before our #defines, see Bugzilla #4957 */
+#include "wayland-client-core.h"
+
#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
#ifdef _WAYLAND_CLIENT_H
@@ -74,6 +77,7 @@
#define wl_proxy_marshal (*WAYLAND_wl_proxy_marshal)
#define wl_proxy_set_user_data (*WAYLAND_wl_proxy_set_user_data)
#define wl_proxy_get_user_data (*WAYLAND_wl_proxy_get_user_data)
+#define wl_proxy_get_version (*WAYLAND_wl_proxy_get_version)
#define wl_proxy_add_listener (*WAYLAND_wl_proxy_add_listener)
#define wl_proxy_marshal_constructor (*WAYLAND_wl_proxy_marshal_constructor)
#define wl_proxy_marshal_constructor_versioned (*WAYLAND_wl_proxy_marshal_constructor_versioned)
@@ -98,7 +102,6 @@
#endif /* SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */
-#include "wayland-client-core.h"
#include "wayland-client-protocol.h"
#include "wayland-egl.h"
--- a/external/SDL2/src/video/wayland/SDL_waylandevents.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -72,6 +72,15 @@
struct xkb_keymap *keymap;
struct xkb_state *state;
} xkb;
+
+ /* information about axis events on current frame */
+ struct {
+ SDL_bool is_x_discrete;
+ float x;
+
+ SDL_bool is_y_discrete;
+ float y;
+ } pointer_curr_axis_info;
};
struct SDL_WaylandTouchPoint {
@@ -129,7 +138,7 @@
}
static void
-touch_del(SDL_TouchID id, float* x, float* y)
+touch_del(SDL_TouchID id, float* x, float* y, struct wl_surface **surface)
{
struct SDL_WaylandTouchPoint* tp = touch_points.head;
@@ -137,6 +146,7 @@
if (tp->id == id) {
*x = tp->x;
*y = tp->y;
+ *surface = tp->surface;
if (tp->prev) {
tp->prev->next = tp->next;
@@ -150,10 +160,14 @@
touch_points.tail = tp->prev;
}
- SDL_free(tp);
+ {
+ struct SDL_WaylandTouchPoint *next = tp->next;
+ SDL_free(tp);
+ tp = next;
+ }
+ } else {
+ tp = tp->next;
}
-
- tp = tp->next;
}
}
@@ -177,15 +191,23 @@
Wayland_PumpEvents(_THIS)
{
SDL_VideoData *d = _this->driverdata;
+ int err;
WAYLAND_wl_display_flush(d->display);
if (SDL_IOReady(WAYLAND_wl_display_get_fd(d->display), SDL_FALSE, 0)) {
- WAYLAND_wl_display_dispatch(d->display);
+ err = WAYLAND_wl_display_dispatch(d->display);
+ } else {
+ err = WAYLAND_wl_display_dispatch_pending(d->display);
}
- else
- {
- WAYLAND_wl_display_dispatch_pending(d->display);
+ if (err == -1 && !d->display_disconnected) {
+ /* Something has failed with the Wayland connection -- for example,
+ * the compositor may have shut down and closed its end of the socket,
+ * or there is a library-specific error. No recovery is possible. */
+ d->display_disconnected = 1;
+ /* Only send a single quit message, as application shutdown might call
+ * SDL_PumpEvents */
+ SDL_SendQuit();
}
}
@@ -348,8 +370,8 @@
}
static void
-pointer_handle_axis_common(struct SDL_WaylandInput *input,
- uint32_t time, uint32_t axis, wl_fixed_t value)
+pointer_handle_axis_common_v1(struct SDL_WaylandInput *input,
+ uint32_t time, uint32_t axis, wl_fixed_t value)
{
SDL_WindowData *window = input->pointer_focus;
enum wl_pointer_axis a = axis;
@@ -374,14 +396,93 @@
}
static void
+pointer_handle_axis_common(struct SDL_WaylandInput *input, SDL_bool discrete,
+ uint32_t axis, wl_fixed_t value)
+{
+ enum wl_pointer_axis a = axis;
+
+ if (input->pointer_focus) {
+ switch (a) {
+ case WL_POINTER_AXIS_VERTICAL_SCROLL:
+ if (discrete) {
+ /* this is a discrete axis event so we process it and flag
+ * to ignore future continuous axis events in this frame */
+ input->pointer_curr_axis_info.is_y_discrete = SDL_TRUE;
+ } else if(input->pointer_curr_axis_info.is_y_discrete) {
+ /* this is a continuous axis event and we have already
+ * processed a discrete axis event before so we ignore it */
+ break;
+ }
+ input->pointer_curr_axis_info.y = 0 - (float)wl_fixed_to_double(value);
+ break;
+ case WL_POINTER_AXIS_HORIZONTAL_SCROLL:
+ if (discrete) {
+ /* this is a discrete axis event so we process it and flag
+ * to ignore future continuous axis events in this frame */
+ input->pointer_curr_axis_info.is_x_discrete = SDL_TRUE;
+ } else if(input->pointer_curr_axis_info.is_x_discrete) {
+ /* this is a continuous axis event and we have already
+ * processed a discrete axis event before so we ignore it */
+ break;
+ }
+ input->pointer_curr_axis_info.x = 0 - (float)wl_fixed_to_double(value);
+ break;
+ }
+ }
+}
+
+static void
pointer_handle_axis(void *data, struct wl_pointer *pointer,
uint32_t time, uint32_t axis, wl_fixed_t value)
{
struct SDL_WaylandInput *input = data;
- pointer_handle_axis_common(input, time, axis, value);
+ if(wl_seat_interface.version >= 5)
+ pointer_handle_axis_common(input, SDL_FALSE, axis, value);
+ else
+ pointer_handle_axis_common_v1(input, time, axis, value);
}
+static void
+pointer_handle_frame(void *data, struct wl_pointer *pointer)
+{
+ struct SDL_WaylandInput *input = data;
+ SDL_WindowData *window = input->pointer_focus;
+ float x = input->pointer_curr_axis_info.x, y = input->pointer_curr_axis_info.y;
+
+ /* clear pointer_curr_axis_info for next frame */
+ memset(&input->pointer_curr_axis_info, 0, sizeof input->pointer_curr_axis_info);
+
+ if(x == 0.0f && y == 0.0f)
+ return;
+ else
+ SDL_SendMouseWheel(window->sdlwindow, 0, x, y, SDL_MOUSEWHEEL_NORMAL);
+}
+
+static void
+pointer_handle_axis_source(void *data, struct wl_pointer *pointer,
+ uint32_t axis_source)
+{
+ /* unimplemented */
+}
+
+static void
+pointer_handle_axis_stop(void *data, struct wl_pointer *pointer,
+ uint32_t time, uint32_t axis)
+{
+ /* unimplemented */
+}
+
+static void
+pointer_handle_axis_discrete(void *data, struct wl_pointer *pointer,
+ uint32_t axis, int32_t discrete)
+{
+ struct SDL_WaylandInput *input = data;
+
+ pointer_handle_axis_common(input, SDL_TRUE, axis, wl_fixed_from_int(discrete));
+}
+
+
static const struct wl_pointer_listener pointer_listener = {
pointer_handle_enter,
pointer_handle_leave,
@@ -388,10 +489,10 @@
pointer_handle_motion,
pointer_handle_button,
pointer_handle_axis,
- NULL, /* frame */
- NULL, /* axis_source */
- NULL, /* axis_stop */
- NULL, /* axis_discrete */
+ pointer_handle_frame, // Version 5
+ pointer_handle_axis_source, // Version 5
+ pointer_handle_axis_stop, // Version 5
+ pointer_handle_axis_discrete, // Version 5
};
static void
@@ -407,7 +508,7 @@
touch_add(id, x, y, surface);
- SDL_SendTouch(1, (SDL_FingerID)id, SDL_TRUE, x, y, 1.0f);
+ SDL_SendTouch(1, (SDL_FingerID)id, window_data->sdlwindow, SDL_TRUE, x, y, 1.0f);
}
static void
@@ -415,9 +516,17 @@
unsigned int timestamp, int id)
{
float x = 0, y = 0;
+ struct wl_surface *surface = NULL;
+ SDL_Window *window = NULL;
- touch_del(id, &x, &y);
- SDL_SendTouch(1, (SDL_FingerID)id, SDL_FALSE, x, y, 0.0f);
+ touch_del(id, &x, &y, &surface);
+
+ if (surface) {
+ SDL_WindowData *window_data = (SDL_WindowData *)wl_surface_get_user_data(surface);
+ window = window_data->sdlwindow;
+ }
+
+ SDL_SendTouch(1, (SDL_FingerID)id, window, SDL_FALSE, x, y, 0.0f);
}
static void
@@ -431,7 +540,7 @@
const float y = dbly / window_data->sdlwindow->h;
touch_update(id, x, y);
- SDL_SendTouchMotion(1, (SDL_FingerID)id, x, y, 1.0f);
+ SDL_SendTouchMotion(1, (SDL_FingerID)id, window_data->sdlwindow, x, y, 1.0f);
}
static void
@@ -583,6 +692,13 @@
mods_locked, 0, 0, group);
}
+static void
+keyboard_handle_repeat_info(void *data, struct wl_keyboard *wl_keyboard,
+ int32_t rate, int32_t delay)
+{
+ /* unimplemented */
+}
+
static const struct wl_keyboard_listener keyboard_listener = {
keyboard_handle_keymap,
keyboard_handle_enter,
@@ -589,7 +705,7 @@
keyboard_handle_leave,
keyboard_handle_key,
keyboard_handle_modifiers,
- NULL, /* repeat_info */
+ keyboard_handle_repeat_info, // Version 4
};
static void
@@ -600,6 +716,7 @@
if ((caps & WL_SEAT_CAPABILITY_POINTER) && !input->pointer) {
input->pointer = wl_seat_get_pointer(seat);
+ memset(&input->pointer_curr_axis_info, 0, sizeof input->pointer_curr_axis_info);
input->display->pointer = input->pointer;
wl_pointer_set_user_data(input->pointer, input);
wl_pointer_add_listener(input->pointer, &pointer_listener,
@@ -633,9 +750,15 @@
}
}
+static void
+seat_handle_name(void *data, struct wl_seat *wl_seat, const char *name)
+{
+ /* unimplemented */
+}
+
static const struct wl_seat_listener seat_listener = {
seat_handle_capabilities,
- NULL, /* name */
+ seat_handle_name, // Version 2
};
static void
@@ -788,8 +911,10 @@
if (has_mime == SDL_TRUE) {
dnd_action = WL_DATA_DEVICE_MANAGER_DND_ACTION_COPY;
}
- wl_data_offer_set_actions(data_device->drag_offer->offer,
- dnd_action, dnd_action);
+ if (wl_data_offer_get_version(data_device->drag_offer->offer) >= 3) {
+ wl_data_offer_set_actions(data_device->drag_offer->offer,
+ dnd_action, dnd_action);
+ }
}
}
@@ -883,7 +1008,10 @@
return;
input->display = d;
- input->seat = wl_registry_bind(d->registry, id, &wl_seat_interface, 1);
+ if (wl_seat_interface.version >= 5)
+ input->seat = wl_registry_bind(d->registry, id, &wl_seat_interface, 5);
+ else
+ input->seat = wl_registry_bind(d->registry, id, &wl_seat_interface, 1);
input->sx_w = wl_fixed_from_int(0);
input->sy_w = wl_fixed_from_int(0);
d->input = input;
--- a/external/SDL2/src/video/wayland/SDL_waylandevents_c.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandmouse.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandmouse.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandmouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandopengles.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -63,7 +63,6 @@
Wayland_GLES_SwapWindow(_THIS, SDL_Window *window)
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
- struct wl_region *region;
if (SDL_EGL_SwapBuffers(_this, data->egl_surface) < 0) {
return -1;
@@ -70,34 +69,7 @@
}
// Wayland-EGL forbids drawing calls in-between SwapBuffers and wl_egl_window_resize
- if (data->resize.pending) {
- if (data->scale_factor != data->resize.scale_factor) {
- window->w = 0;
- window->h = 0;
- }
- SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, data->resize.width, data->resize.height);
- window->w = data->resize.width;
- window->h = data->resize.height;
- data->scale_factor = data->resize.scale_factor;
- wl_surface_set_buffer_scale(data->surface, data->scale_factor);
- WAYLAND_wl_egl_window_resize(data->egl_window, window->w * data->scale_factor, window->h * data->scale_factor, 0, 0);
-
- if (data->resize.configure) {
- if (data->waylandData->shell.xdg) {
- xdg_surface_ack_configure(data->shell_surface.xdg.surface, data->resize.serial);
- } else if (data->waylandData->shell.zxdg) {
- zxdg_surface_v6_ack_configure(data->shell_surface.zxdg.surface, data->resize.serial);
- }
- data->resize.configure = SDL_FALSE;
- }
-
- region = wl_compositor_create_region(data->waylandData->compositor);
- wl_region_add(region, 0, 0, window->w, window->h);
- wl_surface_set_opaque_region(data->surface, region);
- wl_region_destroy(region);
-
- data->resize.pending = SDL_FALSE;
- }
+ Wayland_HandlePendingResize(window);
WAYLAND_wl_display_flush( data->waylandData->display );
--- a/external/SDL2/src/video/wayland/SDL_waylandopengles.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandsym.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandsym.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -40,6 +40,7 @@
SDL_WAYLAND_SYM(int, wl_proxy_add_listener, (struct wl_proxy *, void (**)(void), void *))
SDL_WAYLAND_SYM(void, wl_proxy_set_user_data, (struct wl_proxy *, void *))
SDL_WAYLAND_SYM(void *, wl_proxy_get_user_data, (struct wl_proxy *))
+SDL_WAYLAND_SYM(uint32_t, wl_proxy_get_version, (struct wl_proxy *))
SDL_WAYLAND_SYM(uint32_t, wl_proxy_get_id, (struct wl_proxy *))
SDL_WAYLAND_SYM(const char *, wl_proxy_get_class, (struct wl_proxy *))
SDL_WAYLAND_SYM(void, wl_proxy_set_queue, (struct wl_proxy *, struct wl_event_queue *))
--- a/external/SDL2/src/video/wayland/SDL_waylandtouch.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandtouch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -26,6 +26,8 @@
#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH
#include "SDL_log.h"
+#include "SDL_mouse.h"
+#include "SDL_keyboard.h"
#include "SDL_waylandtouch.h"
#include "../../events/SDL_touch_c.h"
@@ -88,20 +90,29 @@
uint32_t capabilities = flags >> 16;
*/
+ SDL_Window* window = NULL;
+
SDL_TouchID deviceId = 1;
if (SDL_AddTouch(deviceId, SDL_TOUCH_DEVICE_DIRECT, "qt_touch_extension") < 0) {
SDL_Log("error: can't add touch %s, %d", __FILE__, __LINE__);
}
+ /* FIXME: This should be the window the given wayland surface is associated
+ * with, but how do we get the wayland surface? */
+ window = SDL_GetMouseFocus();
+ if (window == NULL) {
+ window = SDL_GetKeyboardFocus();
+ }
+
switch (touchState) {
case QtWaylandTouchPointPressed:
case QtWaylandTouchPointReleased:
- SDL_SendTouch(deviceId, (SDL_FingerID)id,
+ SDL_SendTouch(deviceId, (SDL_FingerID)id, window,
(touchState == QtWaylandTouchPointPressed) ? SDL_TRUE : SDL_FALSE,
xf, yf, pressuref);
break;
case QtWaylandTouchPointMoved:
- SDL_SendTouchMotion(deviceId, (SDL_FingerID)id, xf, yf, pressuref);
+ SDL_SendTouchMotion(deviceId, (SDL_FingerID)id, window, xf, yf, pressuref);
break;
default:
/* Should not happen */
@@ -181,7 +192,6 @@
/* wayland-qt-windowmanager.c ENDS */
/* wayland-qt-surface-extension.c BEGINS */
-extern const struct wl_interface qt_extended_surface_interface;
#ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
extern const struct wl_interface wl_surface_interface;
#endif
--- a/external/SDL2/src/video/wayland/SDL_waylandtouch.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandtouch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandvideo.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -381,7 +381,7 @@
} else if (strcmp(interface, "zwp_pointer_constraints_v1") == 0) {
Wayland_display_add_pointer_constraints(d, id);
} else if (strcmp(interface, "wl_data_device_manager") == 0) {
- d->data_device_manager = wl_registry_bind(d->registry, id, &wl_data_device_manager_interface, 3);
+ d->data_device_manager = wl_registry_bind(d->registry, id, &wl_data_device_manager_interface, SDL_min(3, version));
} else if (strcmp(interface, "zxdg_decoration_manager_v1") == 0) {
d->decoration_manager = wl_registry_bind(d->registry, id, &zxdg_decoration_manager_v1_interface, 1);
} else if (strcmp(interface, "org_kde_kwin_server_decoration_manager") == 0) {
@@ -412,10 +412,9 @@
int
Wayland_VideoInit(_THIS)
{
- SDL_VideoData *data = SDL_malloc(sizeof *data);
+ SDL_VideoData *data = SDL_calloc(1, sizeof(*data));
if (data == NULL)
return SDL_OutOfMemory();
- memset(data, 0, sizeof *data);
_this->driverdata = data;
--- a/external/SDL2/src/video/wayland/SDL_waylandvideo.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,6 +48,7 @@
typedef struct {
struct wl_display *display;
+ int display_disconnected;
struct wl_registry *registry;
struct wl_compositor *compositor;
struct wl_shm *shm;
--- a/external/SDL2/src/video/wayland/SDL_waylandvulkan.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandvulkan.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -153,7 +153,7 @@
(PFN_vkGetInstanceProcAddr)_this->vulkan_config.vkGetInstanceProcAddr;
PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR =
(PFN_vkCreateWaylandSurfaceKHR)vkGetInstanceProcAddr(
- (VkInstance)instance,
+ instance,
"vkCreateWaylandSurfaceKHR");
VkWaylandSurfaceCreateInfoKHR createInfo;
VkResult result;
--- a/external/SDL2/src/video/wayland/SDL_waylandvulkan.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandvulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/wayland/SDL_waylandwindow.c
+++ b/external/SDL2/src/video/wayland/SDL_waylandwindow.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -87,6 +87,10 @@
wind->resize.width = width;
wind->resize.height = height;
wind->resize.pending = SDL_TRUE;
+
+ if (!(window->flags & SDL_WINDOW_OPENGL)) {
+ Wayland_HandlePendingResize(window); /* OpenGL windows handle this in SwapWindow */
+ }
}
static void
@@ -118,7 +122,9 @@
window->h = wind->resize.height;
wl_surface_set_buffer_scale(wind->surface, get_window_scale_factor(window));
- WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ if (wind->egl_window) {
+ WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ }
zxdg_surface_v6_ack_configure(zxdg, serial);
@@ -132,6 +138,9 @@
wind->resize.pending = SDL_TRUE;
wind->resize.configure = SDL_TRUE;
wind->resize.serial = serial;
+ if (!(window->flags & SDL_WINDOW_OPENGL)) {
+ Wayland_HandlePendingResize(window); /* OpenGL windows handle this in SwapWindow */
+ }
}
}
@@ -223,7 +232,9 @@
window->h = wind->resize.height;
wl_surface_set_buffer_scale(wind->surface, get_window_scale_factor(window));
- WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ if (wind->egl_window) {
+ WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ }
xdg_surface_ack_configure(xdg, serial);
@@ -237,6 +248,9 @@
wind->resize.pending = SDL_TRUE;
wind->resize.configure = SDL_TRUE;
wind->resize.serial = serial;
+ if (!(window->flags & SDL_WINDOW_OPENGL)) {
+ Wayland_HandlePendingResize(window); /* OpenGL windows handle this in SwapWindow */
+ }
}
}
@@ -372,6 +386,9 @@
window->resize.height = window->sdlwindow->h;
window->resize.scale_factor = new_factor;
window->resize.pending = SDL_TRUE;
+ if (!(window->sdlwindow->flags & SDL_WINDOW_OPENGL)) {
+ Wayland_HandlePendingResize(window->sdlwindow); /* OpenGL windows handle this in SwapWindow */
+ }
}
}
@@ -589,7 +606,7 @@
const enum zxdg_toplevel_decoration_v1_mode mode = bordered ? ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE : ZXDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
zxdg_toplevel_decoration_v1_set_mode(wind->server_decoration, mode);
} else if ((viddata->kwin_server_decoration_manager) && (wind->kwin_server_decoration)) {
- const enum org_kde_kwin_server_decoration_mode mode = bordered ? ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER : ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_NONE;
+ const enum org_kde_kwin_server_decoration_manager_mode mode = bordered ? ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER : ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_NONE;
org_kde_kwin_server_decoration_request_mode(wind->kwin_server_decoration, mode);
}
}
@@ -624,9 +641,11 @@
c = _this->driverdata;
window->driverdata = data;
- if (!(window->flags & SDL_WINDOW_OPENGL)) {
- SDL_GL_LoadLibrary(NULL);
- window->flags |= SDL_WINDOW_OPENGL;
+ if (!(window->flags & SDL_WINDOW_VULKAN)) {
+ if (!(window->flags & SDL_WINDOW_OPENGL)) {
+ SDL_GL_LoadLibrary(NULL);
+ window->flags |= SDL_WINDOW_OPENGL;
+ }
}
if (window->x == SDL_WINDOWPOS_UNDEFINED) {
@@ -690,14 +709,16 @@
}
#endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */
- data->egl_window = WAYLAND_wl_egl_window_create(data->surface,
+ if (window->flags & SDL_WINDOW_OPENGL) {
+ data->egl_window = WAYLAND_wl_egl_window_create(data->surface,
window->w * data->scale_factor, window->h * data->scale_factor);
- /* Create the GLES window surface */
- data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->egl_window);
+ /* Create the GLES window surface */
+ data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->egl_window);
- if (data->egl_surface == EGL_NO_SURFACE) {
- return SDL_SetError("failed to create a window surface");
+ if (data->egl_surface == EGL_NO_SURFACE) {
+ return SDL_SetError("failed to create an EGL window surface");
+ }
}
if (c->shell.xdg) {
@@ -736,7 +757,7 @@
data->kwin_server_decoration = org_kde_kwin_server_decoration_manager_create(c->kwin_server_decoration_manager, data->surface);
if (data->kwin_server_decoration) {
const SDL_bool bordered = (window->flags & SDL_WINDOW_BORDERLESS) == 0;
- const enum org_kde_kwin_server_decoration_mode mode = bordered ? ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER : ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_NONE;
+ const enum org_kde_kwin_server_decoration_manager_mode mode = bordered ? ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_SERVER : ORG_KDE_KWIN_SERVER_DECORATION_MANAGER_MODE_NONE;
org_kde_kwin_server_decoration_request_mode(data->kwin_server_decoration, mode);
}
}
@@ -774,6 +795,45 @@
return 0;
}
+
+void
+Wayland_HandlePendingResize(SDL_Window *window)
+{
+ SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
+
+ if (data->resize.pending) {
+ struct wl_region *region;
+ if (data->scale_factor != data->resize.scale_factor) {
+ window->w = 0;
+ window->h = 0;
+ }
+ SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, data->resize.width, data->resize.height);
+ window->w = data->resize.width;
+ window->h = data->resize.height;
+ data->scale_factor = data->resize.scale_factor;
+ wl_surface_set_buffer_scale(data->surface, data->scale_factor);
+ if (data->egl_window) {
+ WAYLAND_wl_egl_window_resize(data->egl_window, window->w * data->scale_factor, window->h * data->scale_factor, 0, 0);
+ }
+
+ if (data->resize.configure) {
+ if (data->waylandData->shell.xdg) {
+ xdg_surface_ack_configure(data->shell_surface.xdg.surface, data->resize.serial);
+ } else if (data->waylandData->shell.zxdg) {
+ zxdg_surface_v6_ack_configure(data->shell_surface.zxdg.surface, data->resize.serial);
+ }
+ data->resize.configure = SDL_FALSE;
+ }
+
+ region = wl_compositor_create_region(data->waylandData->compositor);
+ wl_region_add(region, 0, 0, window->w, window->h);
+ wl_surface_set_opaque_region(data->surface, region);
+ wl_region_destroy(region);
+
+ data->resize.pending = SDL_FALSE;
+ }
+}
+
void Wayland_SetWindowSize(_THIS, SDL_Window * window)
{
SDL_VideoData *data = _this->driverdata;
@@ -781,8 +841,11 @@
struct wl_region *region;
wl_surface_set_buffer_scale(wind->surface, get_window_scale_factor(window));
- WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ if (wind->egl_window) {
+ WAYLAND_wl_egl_window_resize(wind->egl_window, window->w * get_window_scale_factor(window), window->h * get_window_scale_factor(window), 0, 0);
+ }
+
region = wl_compositor_create_region(data->compositor);
wl_region_add(region, 0, 0, window->w, window->h);
wl_surface_set_opaque_region(wind->surface, region);
@@ -813,8 +876,12 @@
SDL_WindowData *wind = window->driverdata;
if (data) {
- SDL_EGL_DestroySurface(_this, wind->egl_surface);
- WAYLAND_wl_egl_window_destroy(wind->egl_window);
+ if (wind->egl_surface) {
+ SDL_EGL_DestroySurface(_this, wind->egl_surface);
+ }
+ if (wind->egl_window) {
+ WAYLAND_wl_egl_window_destroy(wind->egl_window);
+ }
if (wind->server_decoration) {
zxdg_toplevel_decoration_v1_destroy(wind->server_decoration);
--- a/external/SDL2/src/video/wayland/SDL_waylandwindow.h
+++ b/external/SDL2/src/video/wayland/SDL_waylandwindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -98,6 +98,8 @@
extern SDL_bool
Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info);
extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled);
+
+extern void Wayland_HandlePendingResize(SDL_Window *window);
#endif /* SDL_waylandwindow_h_ */
--- a/external/SDL2/src/video/windows/SDL_msctf.h
+++ b/external/SDL2/src/video/windows/SDL_msctf.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_vkeys.h
+++ b/external/SDL2/src/video/windows/SDL_vkeys.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsclipboard.c
+++ b/external/SDL2/src/video/windows/SDL_windowsclipboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsclipboard.h
+++ b/external/SDL2/src/video/windows/SDL_windowsclipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsevents.c
+++ b/external/SDL2/src/video/windows/SDL_windowsevents.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -47,9 +47,6 @@
#include "wmmsg.h"
#endif
-/* For processing mouse WM_*BUTTON* and WM_MOUSEMOVE message-data from GetMessageExtraInfo() */
-#define MOUSEEVENTF_FROMTOUCH 0xFF515700
-
/* Masks for processing the windows KEYDOWN and KEYUP messages */
#define REPEATED_KEYMASK (1<<30)
#define EXTENDED_KEYMASK (1<<24)
@@ -89,6 +86,11 @@
/* Windows generates this virtual keycode for Keypad 5 when NumLock is off.
case VK_CLEAR: return SDL_SCANCODE_CLEAR;
*/
+ case VK_LEFT: return SDL_SCANCODE_LEFT;
+ case VK_UP: return SDL_SCANCODE_UP;
+ case VK_RIGHT: return SDL_SCANCODE_RIGHT;
+ case VK_DOWN: return SDL_SCANCODE_DOWN;
+
case VK_MODECHANGE: return SDL_SCANCODE_MODE;
case VK_SELECT: return SDL_SCANCODE_SELECT;
case VK_EXECUTE: return SDL_SCANCODE_EXECUTE;
@@ -246,7 +248,7 @@
/*
* Some windows systems fail to send a WM_LBUTTONDOWN sometimes, but each mouse move contains the current button state also
-* so this funciton reconciles our view of the world with the current buttons reported by windows
+* so this function reconciles our view of the world with the current buttons reported by windows
*/
static void
WIN_CheckWParamMouseButtons(WPARAM wParam, SDL_WindowData *data, SDL_MouseID mouseID)
@@ -262,7 +264,6 @@
}
}
-
static void
WIN_CheckRawMouseButtons(ULONG rawButtons, SDL_WindowData *data)
{
@@ -359,17 +360,26 @@
return !SDL_GetHintBoolean(SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4, SDL_FALSE);
}
-static SDL_bool isVistaOrNewer = SDL_FALSE;
/* Win10 "Fall Creators Update" introduced the bug that SetCursorPos() (as used by SDL_WarpMouseInWindow())
doesn't reliably generate WM_MOUSEMOVE events anymore (see #3931) which breaks relative mouse mode via warping.
This is used to implement a workaround.. */
static SDL_bool isWin10FCUorNewer = SDL_FALSE;
-/* Checks a mouse or raw packet for touch indication.
- returns: 0 for not touch input, 1 for touch input.
-*/
-static LPARAM
-GetMessageExtraInfoAndCheckMousePacketTouch(int *checkTouch) {
+/* We want to generate mouse events from mouse and pen, and touch events from touchscreens */
+#define MI_WP_SIGNATURE 0xFF515700
+#define MI_WP_SIGNATURE_MASK 0xFFFFFF00
+#define IsTouchEvent(dw) ((dw) & MI_WP_SIGNATURE_MASK) == MI_WP_SIGNATURE
+
+typedef enum
+{
+ SDL_MOUSE_EVENT_SOURCE_UNKNOWN,
+ SDL_MOUSE_EVENT_SOURCE_MOUSE,
+ SDL_MOUSE_EVENT_SOURCE_TOUCH,
+ SDL_MOUSE_EVENT_SOURCE_PEN,
+} SDL_MOUSE_EVENT_SOURCE;
+
+static SDL_MOUSE_EVENT_SOURCE GetMouseMessageSource()
+{
LPARAM extrainfo = GetMessageExtraInfo();
/* Mouse data (ignoring synthetic mouse events generated for touchscreens) */
/* Versions below Vista will set the low 7 bits to the Mouse ID and don't use bit 7:
@@ -376,15 +386,19 @@
Check bits 8-32 for the signature (which will indicate a Tablet PC Pen or Touch Device).
Only check bit 7 when Vista and up(Cleared=Pen, Set=Touch(which we need to filter out)),
when the signature is set. The Mouse ID will be zero for an actual mouse. */
- *checkTouch = (!(((extrainfo & 0x7F) && (isVistaOrNewer ? (extrainfo & 0x80) : 1)) || ((extrainfo & 0xFFFFFF00) == 0xFF515700)));
- return extrainfo;
+ if (IsTouchEvent(extrainfo)) {
+ if (extrainfo & 0x80) {
+ return SDL_MOUSE_EVENT_SOURCE_TOUCH;
+ } else {
+ return SDL_MOUSE_EVENT_SOURCE_PEN;
+ }
+ }
+ return SDL_MOUSE_EVENT_SOURCE_MOUSE;
}
LRESULT CALLBACK
WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- int checkTouch = -1; /* Default to -1 for not yet loaded */
- LPARAM extrainfo; /* The extra info when checkTouch >= 0. */
SDL_WindowData *data;
LRESULT returnCode = -1;
@@ -469,7 +483,7 @@
data->focus_click_pending |= SDL_BUTTON_X2MASK;
}
}
-
+
SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_SHOWN, 0, 0);
if (SDL_GetKeyboardFocus() != data->window) {
SDL_SetKeyboardFocus(data->window);
@@ -498,7 +512,7 @@
WIN_ResetDeadKeys();
}
- if (GetClipCursor(&rect) && SDL_memcmp(&rect, &data->cursor_clipped_rect, sizeof(rect) == 0)) {
+ if (GetClipCursor(&rect) && SDL_memcmp(&rect, &data->cursor_clipped_rect, sizeof(rect)) == 0) {
ClipCursor(NULL);
SDL_zero(data->cursor_clipped_rect);
}
@@ -512,10 +526,9 @@
case WM_MOUSEMOVE:
{
SDL_Mouse *mouse = SDL_GetMouse();
- extrainfo = GetMessageExtraInfoAndCheckMousePacketTouch(&checkTouch); /* load */
if (!mouse->relative_mode || mouse->relative_mode_warp) {
/* Only generate mouse events for real mouse */
- if (((extrainfo & MOUSEEVENTF_FROMTOUCH) != MOUSEEVENTF_FROMTOUCH) && checkTouch) {
+ if (GetMouseMessageSource() != SDL_MOUSE_EVENT_SOURCE_TOUCH) {
SDL_SendMouseMotion(data->window, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
if (isWin10FCUorNewer && mouse->relative_mode_warp) {
/* To work around #3931, Win10 bug introduced in Fall Creators Update, where
@@ -529,6 +542,9 @@
SDL_SendMouseMotion(data->window, 0, 0, center_x, center_y);
}
}
+ } else {
+ /* We still need to update focus */
+ SDL_SetMouseFocus(data->window);
}
}
/* don't break here, fall through to check the wParam like the button presses */
@@ -546,11 +562,8 @@
case WM_XBUTTONDBLCLK:
{
SDL_Mouse *mouse = SDL_GetMouse();
- if (checkTouch < 0) {
- extrainfo = GetMessageExtraInfoAndCheckMousePacketTouch(&checkTouch);
- }
if (!mouse->relative_mode || mouse->relative_mode_warp) {
- if (((extrainfo & MOUSEEVENTF_FROMTOUCH) != MOUSEEVENTF_FROMTOUCH) && checkTouch) {
+ if (GetMouseMessageSource() != SDL_MOUSE_EVENT_SOURCE_TOUCH) {
WIN_CheckWParamMouseButtons(wParam, data, 0);
}
}
@@ -576,9 +589,9 @@
/* Mouse data (ignoring synthetic mouse events generated for touchscreens) */
if (inp.header.dwType == RIM_TYPEMOUSE) {
- extrainfo = GetMessageExtraInfoAndCheckMousePacketTouch(&checkTouch);
- if (!checkTouch)
+ if (GetMouseMessageSource() == SDL_MOUSE_EVENT_SOURCE_TOUCH) {
break;
+ }
if (isRelative) {
RAWMOUSE* rawmouse = &inp.data.mouse;
@@ -586,16 +599,22 @@
SDL_SendMouseMotion(data->window, 0, 1, (int)rawmouse->lLastX, (int)rawmouse->lLastY);
} else {
/* synthesize relative moves from the abs position */
- static SDL_Point initialMousePoint;
- if (initialMousePoint.x == 0 && initialMousePoint.y == 0) {
- initialMousePoint.x = rawmouse->lLastX;
- initialMousePoint.y = rawmouse->lLastY;
+ static SDL_Point lastMousePoint;
+ SDL_bool virtual_desktop = (rawmouse->usFlags & MOUSE_VIRTUAL_DESKTOP) ? SDL_TRUE : SDL_FALSE;
+ int w = GetSystemMetrics(virtual_desktop ? SM_CXVIRTUALSCREEN : SM_CXSCREEN);
+ int h = GetSystemMetrics(virtual_desktop ? SM_CYVIRTUALSCREEN : SM_CYSCREEN);
+ int x = (int)(((float)rawmouse->lLastX / 65535.0f) * w);
+ int y = (int)(((float)rawmouse->lLastY / 65535.0f) * h);
+
+ if (lastMousePoint.x == 0 && lastMousePoint.y == 0) {
+ lastMousePoint.x = x;
+ lastMousePoint.y = y;
}
- SDL_SendMouseMotion(data->window, 0, 1, (int)(rawmouse->lLastX-initialMousePoint.x), (int)(rawmouse->lLastY-initialMousePoint.y));
+ SDL_SendMouseMotion(data->window, 0, 1, (int)(x-lastMousePoint.x), (int)(y-lastMousePoint.y));
- initialMousePoint.x = rawmouse->lLastX;
- initialMousePoint.y = rawmouse->lLastY;
+ lastMousePoint.x = x;
+ lastMousePoint.y = y;
}
WIN_CheckRawMouseButtons(rawmouse->usButtonFlags, data);
} else if (isCapture) {
@@ -754,8 +773,9 @@
int max_w, max_h;
BOOL constrain_max_size;
- if (SDL_IsShapedWindow(data->window))
+ if (SDL_IsShapedWindow(data->window)) {
Win32_ResizeWindowShape(data->window);
+ }
/* If this is an expected size change, allow it */
if (data->expected_resize) {
@@ -857,8 +877,7 @@
w = rect.right - rect.left;
h = rect.bottom - rect.top;
- SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESIZED, w,
- h);
+ SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESIZED, w, h);
/* Forces a WM_PAINT event */
InvalidateRect(hwnd, NULL, FALSE);
@@ -907,8 +926,7 @@
RECT rect;
if (GetUpdateRect(hwnd, &rect, FALSE)) {
ValidateRect(hwnd, NULL);
- SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_EXPOSED,
- 0, 0);
+ SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_EXPOSED, 0, 0);
}
}
returnCode = 0;
@@ -985,13 +1003,13 @@
y = (float)(input->y - rect.top)/(rect.bottom - rect.top);
if (input->dwFlags & TOUCHEVENTF_DOWN) {
- SDL_SendTouch(touchId, input->dwID, SDL_TRUE, x, y, 1.0f);
+ SDL_SendTouch(touchId, input->dwID, data->window, SDL_TRUE, x, y, 1.0f);
}
if (input->dwFlags & TOUCHEVENTF_MOVE) {
- SDL_SendTouchMotion(touchId, input->dwID, x, y, 1.0f);
+ SDL_SendTouchMotion(touchId, input->dwID, data->window, x, y, 1.0f);
}
if (input->dwFlags & TOUCHEVENTF_UP) {
- SDL_SendTouch(touchId, input->dwID, SDL_FALSE, x, y, 1.0f);
+ SDL_SendTouch(touchId, input->dwID, data->window, SDL_FALSE, x, y, 1.0f);
}
}
}
@@ -1113,6 +1131,7 @@
const Uint8 *keystate;
MSG msg;
DWORD start_ticks = GetTickCount();
+ int new_messages = 0;
if (g_WindowsEnableMessageLoop) {
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
@@ -1126,7 +1145,15 @@
/* Make sure we don't busy loop here forever if there are lots of events coming in */
if (SDL_TICKS_PASSED(msg.time, start_ticks)) {
- break;
+ /* We might get a few new messages generated by the Steam overlay or other application hooks
+ In this case those messages will be processed before any pending input, so we want to continue after those messages.
+ (thanks to Peter Deayton for his investigation here)
+ */
+ const int MAX_NEW_MESSAGES = 3;
+ ++new_messages;
+ if (new_messages > MAX_NEW_MESSAGES) {
+ break;
+ }
}
}
}
@@ -1161,14 +1188,6 @@
};
static SDL_bool
-IsWinVistaOrNewer(void)
-{
- DWORD version = GetVersion();
- DWORD major = (DWORD)(LOBYTE(LOWORD(version)));
- return (major >= 6)? SDL_TRUE : SDL_FALSE;
-}
-
-static SDL_bool
IsWin10FCUorNewer(void)
{
HMODULE handle = GetModuleHandleW(L"ntdll.dll");
@@ -1256,7 +1275,6 @@
return SDL_SetError("Couldn't register application class");
}
- isVistaOrNewer = IsWinVistaOrNewer();
isWin10FCUorNewer = IsWin10FCUorNewer();
app_registered = 1;
--- a/external/SDL2/src/video/windows/SDL_windowsevents.h
+++ b/external/SDL2/src/video/windows/SDL_windowsevents.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsframebuffer.c
+++ b/external/SDL2/src/video/windows/SDL_windowsframebuffer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsframebuffer.h
+++ b/external/SDL2/src/video/windows/SDL_windowsframebuffer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowskeyboard.c
+++ b/external/SDL2/src/video/windows/SDL_windowskeyboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowskeyboard.h
+++ b/external/SDL2/src/video/windows/SDL_windowskeyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsmessagebox.c
+++ b/external/SDL2/src/video/windows/SDL_windowsmessagebox.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -367,7 +367,7 @@
if (dialog->numbuttons == 0) {
style |= WS_GROUP;
}
- return AddDialogControl(dialog, DLGITEMTYPEBUTTON, style, 0, x, y, w, h, IDBUTTONINDEX0 + dialog->numbuttons, text, 0);
+ return AddDialogControl(dialog, DLGITEMTYPEBUTTON, style, 0, x, y, w, h, id, text, 0);
}
static void FreeDialogData(WIN_DialogData *dialog)
@@ -547,7 +547,6 @@
{
WIN_DialogData *dialog;
int i, x, y, retval;
- const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons;
HFONT DialogFont;
SIZE Size;
RECT TextSize;
@@ -708,11 +707,21 @@
/* Align the buttons to the right/bottom. */
x = Size.cx - (ButtonWidth + ButtonMargin) * messageboxdata->numbuttons;
y = Size.cy - ButtonHeight - ButtonMargin;
- for (i = messageboxdata->numbuttons - 1; i >= 0; --i) {
+ for (i = 0; i < messageboxdata->numbuttons; i++) {
SDL_bool isdefault = SDL_FALSE;
const char *buttontext;
+ const SDL_MessageBoxButtonData *sdlButton;
- if (buttons[i].flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
+ /* We always have to create the dialog buttons from left to right
+ * so that the tab order is correct. Select the info to use
+ * depending on which order was requested. */
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT) {
+ sdlButton = &messageboxdata->buttons[i];
+ } else {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ }
+
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
defbuttoncount++;
if (defbuttoncount == 1) {
isdefault = SDL_TRUE;
@@ -719,12 +728,15 @@
}
}
- buttontext = EscapeAmpersands(&escape, &escapesize, buttons[i].text);
- if (buttontext == NULL || !AddDialogButton(dialog, x, y, ButtonWidth, ButtonHeight, buttontext, buttons[i].buttonid, isdefault)) {
+ buttontext = EscapeAmpersands(&escape, &escapesize, sdlButton->text);
+ /* Make sure to provide the correct ID to keep buttons indexed in the
+ * same order as how they are in messageboxdata. */
+ if (buttontext == NULL || !AddDialogButton(dialog, x, y, ButtonWidth, ButtonHeight, buttontext, IDBUTTONINDEX0 + (int)(sdlButton - messageboxdata->buttons), isdefault)) {
FreeDialogData(dialog);
SDL_free(ampescape);
return -1;
}
+
x += ButtonWidth + ButtonMargin;
}
SDL_free(ampescape);
@@ -737,7 +749,7 @@
result = DialogBoxIndirectParam(NULL, (DLGTEMPLATE*)dialog->lpDialog, ParentWindow, (DLGPROC)MessageBoxDialogProc, (LPARAM)messageboxdata);
if (result >= IDBUTTONINDEX0 && result - IDBUTTONINDEX0 < messageboxdata->numbuttons) {
- *buttonid = messageboxdata->buttons[(messageboxdata->numbuttons - 1) - (result - IDBUTTONINDEX0)].buttonid;
+ *buttonid = messageboxdata->buttons[result - IDBUTTONINDEX0].buttonid;
retval = 0;
} else if (result == IDCLOSED) {
/* Dialog window closed by user or system. */
@@ -841,15 +853,16 @@
for (i = 0; i < messageboxdata->numbuttons; i++)
{
const char *buttontext;
- pButton = &pButtons[messageboxdata->numbuttons-1-i];
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT) {
+ pButton = &pButtons[i];
+ } else {
+ pButton = &pButtons[messageboxdata->numbuttons - 1 - i];
+ }
if (messageboxdata->buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
nCancelButton = messageboxdata->buttons[i].buttonid;
- pButton->nButtonID = 2;
+ pButton->nButtonID = IDCANCEL;
} else {
- pButton->nButtonID = messageboxdata->buttons[i].buttonid + 1;
- if (pButton->nButtonID >= 2) {
- pButton->nButtonID++;
- }
+ pButton->nButtonID = IDBUTTONINDEX0 + i;
}
buttontext = EscapeAmpersands(&escape, &escapesize, messageboxdata->buttons[i].text);
if (buttontext == NULL) {
@@ -886,12 +899,12 @@
/* Check the Task Dialog was successful and give the result */
if (SUCCEEDED(hr)) {
- if (nButton == 2) {
+ if (nButton == IDCANCEL) {
*buttonid = nCancelButton;
- } else if (nButton > 2) {
- *buttonid = nButton-1-1;
+ } else if (nButton >= IDBUTTONINDEX0 && nButton < IDBUTTONINDEX0 + messageboxdata->numbuttons) {
+ *buttonid = messageboxdata->buttons[nButton - IDBUTTONINDEX0].buttonid;
} else {
- *buttonid = nButton-1;
+ *buttonid = -1;
}
return 0;
}
--- a/external/SDL2/src/video/windows/SDL_windowsmessagebox.h
+++ b/external/SDL2/src/video/windows/SDL_windowsmessagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsmodes.c
+++ b/external/SDL2/src/video/windows/SDL_windowsmodes.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -54,7 +54,7 @@
mode->w = logical_width;
mode->h = logical_height;
- SDL_zero(bmi_data);
+ SDL_zeroa(bmi_data);
bmi = (LPBITMAPINFO) bmi_data;
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
--- a/external/SDL2/src/video/windows/SDL_windowsmodes.h
+++ b/external/SDL2/src/video/windows/SDL_windowsmodes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsmouse.c
+++ b/external/SDL2/src/video/windows/SDL_windowsmouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsmouse.h
+++ b/external/SDL2/src/video/windows/SDL_windowsmouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsopengl.c
+++ b/external/SDL2/src/video/windows/SDL_windowsopengl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsopengl.h
+++ b/external/SDL2/src/video/windows/SDL_windowsopengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsopengles.c
+++ b/external/SDL2/src/video/windows/SDL_windowsopengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsopengles.h
+++ b/external/SDL2/src/video/windows/SDL_windowsopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsshape.c
+++ b/external/SDL2/src/video/windows/SDL_windowsshape.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -34,6 +34,7 @@
result->mode.mode = ShapeModeDefault;
result->mode.parameters.binarizationCutoff = 1;
result->userx = result->usery = 0;
+ result->hasshape = SDL_FALSE;
result->driverdata = (SDL_ShapeData*)SDL_malloc(sizeof(SDL_ShapeData));
((SDL_ShapeData*)result->driverdata)->mask_tree = NULL;
/* Put some driver-data here. */
--- a/external/SDL2/src/video/windows/SDL_windowsshape.h
+++ b/external/SDL2/src/video/windows/SDL_windowsshape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowstaskdialog.h
+++ b/external/SDL2/src/video/windows/SDL_windowstaskdialog.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsvideo.c
+++ b/external/SDL2/src/video/windows/SDL_windowsvideo.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -386,7 +386,7 @@
void *pDXGIDLL;
char *displayName;
int nAdapter, nOutput;
- IDXGIFactory *pDXGIFactory;
+ IDXGIFactory *pDXGIFactory = NULL;
IDXGIAdapter *pDXGIAdapter;
IDXGIOutput* pDXGIOutput;
--- a/external/SDL2/src/video/windows/SDL_windowsvideo.h
+++ b/external/SDL2/src/video/windows/SDL_windowsvideo.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsvulkan.c
+++ b/external/SDL2/src/video/windows/SDL_windowsvulkan.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowsvulkan.h
+++ b/external/SDL2/src/video/windows/SDL_windowsvulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/SDL_windowswindow.c
+++ b/external/SDL2/src/video/windows/SDL_windowswindow.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -93,9 +93,14 @@
style |= STYLE_NORMAL;
}
- /* You can have a borderless resizable window */
if (window->flags & SDL_WINDOW_RESIZABLE) {
- style |= STYLE_RESIZABLE;
+ /* You can have a borderless resizable window, but Windows doesn't always draw it correctly,
+ see https://bugzilla.libsdl.org/show_bug.cgi?id=4466
+ */
+ if (!(window->flags & SDL_WINDOW_BORDERLESS) ||
+ SDL_GetHintBoolean("SDL_BORDERLESS_RESIZABLE_STYLE", SDL_FALSE)) {
+ style |= STYLE_RESIZABLE;
+ }
}
/* Need to set initialize minimize style, or when we call ShowWindow with WS_MINIMIZE it will activate a random window */
@@ -904,7 +909,7 @@
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
SDL_Mouse *mouse = SDL_GetMouse();
- RECT rect;
+ RECT rect, clipped_rect;
if (data->in_title_click || data->focus_click_pending) {
return;
@@ -913,35 +918,43 @@
data->skip_update_clipcursor = SDL_FALSE;
return;
}
+ if (!GetClipCursor(&clipped_rect)) {
+ return;
+ }
if ((mouse->relative_mode || (window->flags & SDL_WINDOW_INPUT_GRABBED)) &&
(window->flags & SDL_WINDOW_INPUT_FOCUS)) {
if (mouse->relative_mode && !mouse->relative_mode_warp) {
- LONG cx, cy;
- GetWindowRect(data->hwnd, &rect);
+ if (GetWindowRect(data->hwnd, &rect)) {
+ LONG cx, cy;
- cx = (rect.left + rect.right) / 2;
- cy = (rect.top + rect.bottom) / 2;
+ cx = (rect.left + rect.right) / 2;
+ cy = (rect.top + rect.bottom) / 2;
- /* Make an absurdly small clip rect */
- rect.left = cx - 1;
- rect.right = cx + 1;
- rect.top = cy - 1;
- rect.bottom = cy + 1;
+ /* Make an absurdly small clip rect */
+ rect.left = cx - 1;
+ rect.right = cx + 1;
+ rect.top = cy - 1;
+ rect.bottom = cy + 1;
- if (ClipCursor(&rect)) {
- data->cursor_clipped_rect = rect;
+ if (SDL_memcmp(&rect, &clipped_rect, sizeof(rect)) != 0) {
+ if (ClipCursor(&rect)) {
+ data->cursor_clipped_rect = rect;
+ }
+ }
}
} else {
if (GetClientRect(data->hwnd, &rect) && !IsRectEmpty(&rect)) {
ClientToScreen(data->hwnd, (LPPOINT) & rect);
ClientToScreen(data->hwnd, (LPPOINT) & rect + 1);
- if (ClipCursor(&rect)) {
- data->cursor_clipped_rect = rect;
+ if (SDL_memcmp(&rect, &clipped_rect, sizeof(rect)) != 0) {
+ if (ClipCursor(&rect)) {
+ data->cursor_clipped_rect = rect;
+ }
}
}
}
- } else if (GetClipCursor(&rect) && SDL_memcmp(&rect, &data->cursor_clipped_rect, sizeof(rect)) == 0) {
+ } else if (SDL_memcmp(&clipped_rect, &data->cursor_clipped_rect, sizeof(clipped_rect)) == 0) {
ClipCursor(NULL);
SDL_zero(data->cursor_clipped_rect);
}
--- a/external/SDL2/src/video/windows/SDL_windowswindow.h
+++ b/external/SDL2/src/video/windows/SDL_windowswindow.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/windows/wmmsg.h
+++ b/external/SDL2/src/video/windows/wmmsg.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtevents.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtevents.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtevents_c.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtevents_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtgamebar.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtgamebar.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtgamebar_cpp.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtgamebar_cpp.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtkeyboard.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtkeyboard.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtmessagebox.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtmessagebox.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -75,13 +75,19 @@
MessageDialog ^ dialog = ref new MessageDialog(WINRT_UTF8ToPlatformString(messageboxdata->message));
dialog->Title = WINRT_UTF8ToPlatformString(messageboxdata->title);
for (int i = 0; i < messageboxdata->numbuttons; ++i) {
- UICommand ^ button = ref new UICommand(WINRT_UTF8ToPlatformString(messageboxdata->buttons[i].text));
- button->Id = safe_cast<IntPtr>(i);
+ const SDL_MessageBoxButtonData *sdlButton;
+ if (messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT) {
+ sdlButton = &messageboxdata->buttons[messageboxdata->numbuttons - 1 - i];
+ } else {
+ sdlButton = &messageboxdata->buttons[i];
+ }
+ UICommand ^ button = ref new UICommand(WINRT_UTF8ToPlatformString(sdlButton->text));
+ button->Id = safe_cast<IntPtr>((int)(sdlButton - messageboxdata->buttons));
dialog->Commands->Append(button);
- if (messageboxdata->buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) {
dialog->CancelCommandIndex = i;
}
- if (messageboxdata->buttons[i].flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
+ if (sdlButton->flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) {
dialog->DefaultCommandIndex = i;
}
}
@@ -98,7 +104,7 @@
return SDL_SetError("An unknown error occurred in displaying the WinRT MessageDialog");
}
if (buttonid) {
- IntPtr results = safe_cast<IntPtr>(operation->GetResults()->Id);
+ IntPtr results = safe_cast<IntPtr>((int)(operation->GetResults()->Id));
int clicked_index = results.ToInt32();
*buttonid = messageboxdata->buttons[clicked_index].buttonid;
}
--- a/external/SDL2/src/video/winrt/SDL_winrtmessagebox.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtmessagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtmouse.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtmouse.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtmouse_c.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtmouse_c.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtopengles.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtopengles.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtopengles.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtopengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtpointerinput.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtpointerinput.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -233,6 +233,7 @@
SDL_SendTouch(
WINRT_TouchID,
(SDL_FingerID) pointerPoint->PointerId,
+ window,
SDL_TRUE,
normalizedPoint.X,
normalizedPoint.Y,
@@ -256,6 +257,7 @@
SDL_SendTouchMotion(
WINRT_TouchID,
(SDL_FingerID) pointerPoint->PointerId,
+ window,
normalizedPoint.X,
normalizedPoint.Y,
pointerPoint->Properties->Pressure);
@@ -278,6 +280,7 @@
SDL_SendTouch(
WINRT_TouchID,
(SDL_FingerID) pointerPoint->PointerId,
+ window,
SDL_FALSE,
normalizedPoint.X,
normalizedPoint.Y,
--- a/external/SDL2/src/video/winrt/SDL_winrtvideo.cpp
+++ b/external/SDL2/src/video/winrt/SDL_winrtvideo.cpp
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/winrt/SDL_winrtvideo_cpp.h
+++ b/external/SDL2/src/video/winrt/SDL_winrtvideo_cpp.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11clipboard.c
+++ b/external/SDL2/src/video/x11/SDL_x11clipboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11clipboard.h
+++ b/external/SDL2/src/video/x11/SDL_x11clipboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11dyn.c
+++ b/external/SDL2/src/video/x11/SDL_x11dyn.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -41,9 +41,6 @@
const char *libname;
} x11dynlib;
-#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC NULL
-#endif
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT NULL
#endif
--- a/external/SDL2/src/video/x11/SDL_x11dyn.h
+++ b/external/SDL2/src/video/x11/SDL_x11dyn.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11events.c
+++ b/external/SDL2/src/video/x11/SDL_x11events.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -433,8 +433,8 @@
static void
X11_DispatchMapNotify(SDL_WindowData *data)
{
- SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_SHOWN, 0, 0);
SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESTORED, 0, 0);
+ SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_SHOWN, 0, 0);
}
static void
@@ -898,7 +898,7 @@
}
#endif
/* */
- SDL_zero(text);
+ SDL_zeroa(text);
#ifdef X_HAVE_UTF8_STRING
if (data->ic) {
X11_Xutf8LookupString(data->ic, &xevent.xkey, text, sizeof(text),
@@ -1346,9 +1346,9 @@
X11_ReadProperty(&p, display, data->xwindow, videodata->PRIMARY);
if (p.format == 8) {
- /* !!! FIXME: don't use strtok here. It's not reentrant and not in SDL_stdinc. */
+ char* saveptr = NULL;
char* name = X11_XGetAtomName(display, target);
- char *token = strtok((char *) p.data, "\r\n");
+ char *token = SDL_strtokr((char *) p.data, "\r\n", &saveptr);
while (token != NULL) {
if (SDL_strcmp("text/plain", name)==0) {
SDL_SendDropText(data->window, token);
@@ -1358,7 +1358,7 @@
SDL_SendDropFile(data->window, fn);
}
}
- token = strtok(NULL, "\r\n");
+ token = SDL_strtokr(NULL, "\r\n", &saveptr);
}
SDL_SendDropComplete(data->window);
}
--- a/external/SDL2/src/video/x11/SDL_x11events.h
+++ b/external/SDL2/src/video/x11/SDL_x11events.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11framebuffer.c
+++ b/external/SDL2/src/video/x11/SDL_x11framebuffer.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -40,14 +40,10 @@
return(X_handler(d,e));
}
-static SDL_bool have_mitshm(void)
+static SDL_bool have_mitshm(Display *dpy)
{
/* Only use shared memory on local X servers */
- if ( (SDL_strncmp(X11_XDisplayName(NULL), ":", 1) == 0) ||
- (SDL_strncmp(X11_XDisplayName(NULL), "unix:", 5) == 0) ) {
- return SDL_X11_HAVE_SHM;
- }
- return SDL_FALSE;
+ return X11_XShmQueryExtension(dpy) ? SDL_X11_HAVE_SHM : SDL_FALSE;
}
#endif /* !NO_SHARED_MEMORY */
@@ -86,7 +82,7 @@
/* Create the actual image */
#ifndef NO_SHARED_MEMORY
- if (have_mitshm()) {
+ if (have_mitshm(display)) {
XShmSegmentInfo *shminfo = &data->shminfo;
shminfo->shmid = shmget(IPC_PRIVATE, window->h*(*pitch), IPC_CREAT | 0777);
--- a/external/SDL2/src/video/x11/SDL_x11framebuffer.h
+++ b/external/SDL2/src/video/x11/SDL_x11framebuffer.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11keyboard.c
+++ b/external/SDL2/src/video/x11/SDL_x11keyboard.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -267,8 +267,11 @@
int best_index;
int distance;
Bool xkb_repeat = 0;
+ XKeyboardState values = { .global_auto_repeat = AutoRepeatModeOff };
- X11_XAutoRepeatOn(data->display);
+ X11_XGetKeyboardControl(data->display, &values);
+ if (values.global_auto_repeat != AutoRepeatModeOn)
+ X11_XAutoRepeatOn(data->display);
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
{
--- a/external/SDL2/src/video/x11/SDL_x11keyboard.h
+++ b/external/SDL2/src/video/x11/SDL_x11keyboard.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11messagebox.c
+++ b/external/SDL2/src/video/x11/SDL_x11messagebox.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -334,7 +334,11 @@
data->dialog_height = IntMax( data->dialog_height, ybuttons + 2 * button_height );
/* Location for first button. */
- x = ( data->dialog_width - width_of_buttons ) / 2;
+ if ( messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT ) {
+ x = data->dialog_width - ( data->dialog_width - width_of_buttons ) / 2 - ( button_width + button_spacing );
+ } else {
+ x = ( data->dialog_width - width_of_buttons ) / 2;
+ }
y = ybuttons + ( data->dialog_height - ybuttons - button_height ) / 2;
for ( i = 0; i < data->numbuttons; i++ ) {
@@ -349,7 +353,11 @@
data->buttonpos[ i ].y = y + ( button_height - button_text_height - 1 ) / 2 + button_text_height;
/* Scoot over for next button. */
- x += button_width + button_spacing;
+ if ( messageboxdata->flags & SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT ) {
+ x -= button_width + button_spacing;
+ } else {
+ x += button_width + button_spacing;
+ }
}
}
--- a/external/SDL2/src/video/x11/SDL_x11messagebox.h
+++ b/external/SDL2/src/video/x11/SDL_x11messagebox.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11modes.c
+++ b/external/SDL2/src/video/x11/SDL_x11modes.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11modes.h
+++ b/external/SDL2/src/video/x11/SDL_x11modes.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11mouse.c
+++ b/external/SDL2/src/video/x11/SDL_x11mouse.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -48,7 +48,7 @@
XColor color;
Pixmap pixmap;
- SDL_zero(data);
+ SDL_zeroa(data);
color.red = color.green = color.blue = 0;
pixmap = X11_XCreateBitmapFromData(display, DefaultRootWindow(display),
data, 1, 1);
--- a/external/SDL2/src/video/x11/SDL_x11mouse.h
+++ b/external/SDL2/src/video/x11/SDL_x11mouse.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11opengl.c
+++ b/external/SDL2/src/video/x11/SDL_x11opengl.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -36,7 +36,7 @@
/* IRIX doesn't have a GL library versioning system */
#define DEFAULT_OPENGL "libGL.so"
#elif defined(__MACOSX__)
-#define DEFAULT_OPENGL "/usr/X11R6/lib/libGL.1.dylib"
+#define DEFAULT_OPENGL "/opt/X11/lib/libGL.1.dylib"
#elif defined(__QNXNTO__)
#define DEFAULT_OPENGL "libGL.so.3"
#else
@@ -238,7 +238,8 @@
/* If we need a GL ES context and there's no
* GLX_EXT_create_context_es2_profile extension, switch over to X11_GLES functions
*/
- if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES &&
+ if (((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) ||
+ SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE)) &&
X11_GL_UseEGL(_this) ) {
#if SDL_VIDEO_OPENGL_EGL
X11_GL_UnloadLibrary(_this);
@@ -649,8 +650,13 @@
X11_GL_UseEGL(_THIS)
{
SDL_assert(_this->gl_data != NULL);
- SDL_assert(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES);
+ if (SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE))
+ {
+ /* use of EGL has been requested, even for desktop GL */
+ return SDL_TRUE;
+ }
+ SDL_assert(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES);
return (SDL_GetHintBoolean(SDL_HINT_OPENGL_ES_DRIVER, SDL_FALSE)
|| _this->gl_config.major_version == 1 /* No GLX extension for OpenGL ES 1.x profiles. */
|| _this->gl_config.major_version > _this->gl_data->es_profile_max_supported_version.major
--- a/external/SDL2/src/video/x11/SDL_x11opengl.h
+++ b/external/SDL2/src/video/x11/SDL_x11opengl.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11opengles.c
+++ b/external/SDL2/src/video/x11/SDL_x11opengles.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -22,6 +22,7 @@
#if SDL_VIDEO_DRIVER_X11 && SDL_VIDEO_OPENGL_EGL
+#include "SDL_hints.h"
#include "SDL_x11video.h"
#include "SDL_x11opengles.h"
#include "SDL_x11opengl.h"
@@ -34,7 +35,8 @@
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
/* If the profile requested is not GL ES, switch over to X11_GL functions */
- if (_this->gl_config.profile_mask != SDL_GL_CONTEXT_PROFILE_ES) {
+ if ((_this->gl_config.profile_mask != SDL_GL_CONTEXT_PROFILE_ES) &&
+ !SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE)) {
#if SDL_VIDEO_OPENGL_GLX
X11_GLES_UnloadLibrary(_this);
_this->GL_LoadLibrary = X11_GL_LoadLibrary;
--- a/external/SDL2/src/video/x11/SDL_x11opengles.h
+++ b/external/SDL2/src/video/x11/SDL_x11opengles.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11shape.c
+++ b/external/SDL2/src/video/x11/SDL_x11shape.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11shape.h
+++ b/external/SDL2/src/video/x11/SDL_x11shape.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11sym.h
+++ b/external/SDL2/src/video/x11/SDL_x11sym.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -72,6 +72,7 @@
SDL_X11_SYM(int,XGetInputFocus,(Display *a,Window *b,int *c),(a,b,c),return)
SDL_X11_SYM(int,XGetErrorDatabaseText,(Display* a,_Xconst char* b,_Xconst char* c,_Xconst char* d,char* e,int f),(a,b,c,d,e,f),return)
SDL_X11_SYM(XModifierKeymap*,XGetModifierMapping,(Display* a),(a),return)
+SDL_X11_SYM(int,XGetKeyboardControl,(Display* a, XKeyboardState* b),(a,b),return)
SDL_X11_SYM(int,XGetPointerControl,(Display* a,int* b,int* c,int* d),(a,b,c,d),return)
SDL_X11_SYM(Window,XGetSelectionOwner,(Display* a,Atom b),(a,b),return)
SDL_X11_SYM(XVisualInfo*,XGetVisualInfo,(Display* a,long b,XVisualInfo* c,int* d),(a,b,c,d),return)
--- a/external/SDL2/src/video/x11/SDL_x11touch.c
+++ b/external/SDL2/src/video/x11/SDL_x11touch.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11touch.h
+++ b/external/SDL2/src/video/x11/SDL_x11touch.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11video.c
+++ b/external/SDL2/src/video/x11/SDL_x11video.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -27,6 +27,7 @@
#include "SDL_video.h"
#include "SDL_mouse.h"
#include "SDL_timer.h"
+#include "SDL_hints.h"
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
@@ -276,16 +277,23 @@
device->GL_GetSwapInterval = X11_GL_GetSwapInterval;
device->GL_SwapWindow = X11_GL_SwapWindow;
device->GL_DeleteContext = X11_GL_DeleteContext;
-#elif SDL_VIDEO_OPENGL_EGL
- device->GL_LoadLibrary = X11_GLES_LoadLibrary;
- device->GL_GetProcAddress = X11_GLES_GetProcAddress;
- device->GL_UnloadLibrary = X11_GLES_UnloadLibrary;
- device->GL_CreateContext = X11_GLES_CreateContext;
- device->GL_MakeCurrent = X11_GLES_MakeCurrent;
- device->GL_SetSwapInterval = X11_GLES_SetSwapInterval;
- device->GL_GetSwapInterval = X11_GLES_GetSwapInterval;
- device->GL_SwapWindow = X11_GLES_SwapWindow;
- device->GL_DeleteContext = X11_GLES_DeleteContext;
+#endif
+#if SDL_VIDEO_OPENGL_EGL
+#if SDL_VIDEO_OPENGL_GLX
+ if (SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE)) {
+#endif
+ device->GL_LoadLibrary = X11_GLES_LoadLibrary;
+ device->GL_GetProcAddress = X11_GLES_GetProcAddress;
+ device->GL_UnloadLibrary = X11_GLES_UnloadLibrary;
+ device->GL_CreateContext = X11_GLES_CreateContext;
+ device->GL_MakeCurrent = X11_GLES_MakeCurrent;
+ device->GL_SetSwapInterval = X11_GLES_SetSwapInterval;
+ device->GL_GetSwapInterval = X11_GLES_GetSwapInterval;
+ device->GL_SwapWindow = X11_GLES_SwapWindow;
+ device->GL_DeleteContext = X11_GLES_DeleteContext;
+#if SDL_VIDEO_OPENGL_GLX
+ }
+#endif
#endif
device->SetClipboardText = X11_SetClipboardText;
--- a/external/SDL2/src/video/x11/SDL_x11video.h
+++ b/external/SDL2/src/video/x11/SDL_x11video.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11vulkan.c
+++ b/external/SDL2/src/video/x11/SDL_x11vulkan.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -182,7 +182,7 @@
if(videoData->vulkan_xlib_xcb_library)
{
PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR =
- (PFN_vkCreateXcbSurfaceKHR)vkGetInstanceProcAddr((VkInstance)instance,
+ (PFN_vkCreateXcbSurfaceKHR)vkGetInstanceProcAddr(instance,
"vkCreateXcbSurfaceKHR");
VkXcbSurfaceCreateInfoKHR createInfo;
VkResult result;
@@ -213,7 +213,7 @@
else
{
PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR =
- (PFN_vkCreateXlibSurfaceKHR)vkGetInstanceProcAddr((VkInstance)instance,
+ (PFN_vkCreateXlibSurfaceKHR)vkGetInstanceProcAddr(instance,
"vkCreateXlibSurfaceKHR");
VkXlibSurfaceCreateInfoKHR createInfo;
VkResult result;
--- a/external/SDL2/src/video/x11/SDL_x11vulkan.h
+++ b/external/SDL2/src/video/x11/SDL_x11vulkan.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11window.c
+++ b/external/SDL2/src/video/x11/SDL_x11window.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -393,12 +393,33 @@
long fevent = 0;
#if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL
- if ((window->flags & SDL_WINDOW_OPENGL) &&
+ const char *forced_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_WINDOW_VISUALID);
+
+ if (forced_visual_id != NULL && forced_visual_id[0] != '\0')
+ {
+ XVisualInfo *vi, template;
+ int nvis;
+
+ SDL_zero(template);
+ template.visualid = SDL_strtol(forced_visual_id, NULL, 0);
+ vi = X11_XGetVisualInfo(display, VisualIDMask, &template, &nvis);
+ if (vi) {
+ visual = vi->visual;
+ depth = vi->depth;
+ X11_XFree(vi);
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else if ((window->flags & SDL_WINDOW_OPENGL) &&
!SDL_getenv("SDL_VIDEO_X11_VISUALID")) {
XVisualInfo *vinfo = NULL;
#if SDL_VIDEO_OPENGL_EGL
- if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES
+ if (((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) ||
+ SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE))
#if SDL_VIDEO_OPENGL_GLX
&& ( !_this->gl_data || X11_GL_UseEGL(_this) )
#endif
@@ -608,9 +629,10 @@
}
windowdata = (SDL_WindowData *) window->driverdata;
-#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
+#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 || SDL_VIDEO_OPENGL_EGL
if ((window->flags & SDL_WINDOW_OPENGL) &&
- _this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES
+ ((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) ||
+ SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_FORCE_EGL, SDL_FALSE))
#if SDL_VIDEO_OPENGL_GLX
&& ( !_this->gl_data || X11_GL_UseEGL(_this) )
#endif
@@ -617,7 +639,6 @@
) {
#if SDL_VIDEO_OPENGL_EGL
if (!_this->egl_data) {
- X11_XDestroyWindow(display, w);
return -1;
}
@@ -625,7 +646,6 @@
windowdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) w);
if (windowdata->egl_surface == EGL_NO_SURFACE) {
- X11_XDestroyWindow(display, w);
return SDL_SetError("Could not create GLES window surface");
}
#else
@@ -785,9 +805,46 @@
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
Display *display = data->videodata->display;
+ unsigned int childCount;
+ Window childReturn, root, parent;
+ Window* children;
+ XWindowAttributes attrs;
+ int orig_x, orig_y;
+ Uint32 timeout;
+ X11_XSync(display, False);
+ X11_XQueryTree(display, data->xwindow, &root, &parent, &children, &childCount);
+ X11_XGetWindowAttributes(display, data->xwindow, &attrs);
+ X11_XTranslateCoordinates(display, parent, DefaultRootWindow(display),
+ attrs.x, attrs.y, &orig_x, &orig_y, &childReturn);
+
+ /*Attempt to move the window*/
X11_XMoveWindow(display, data->xwindow, window->x - data->border_left, window->y - data->border_top);
- X11_XFlush(display);
+
+ /* Wait a brief time to see if the window manager decided to let this move happen.
+ If the window changes at all, even to an unexpected value, we break out. */
+ timeout = SDL_GetTicks() + 100;
+ while (SDL_TRUE) {
+ int x, y;
+ X11_XSync(display, False);
+ X11_XGetWindowAttributes(display, data->xwindow, &attrs);
+ X11_XTranslateCoordinates(display, parent, DefaultRootWindow(display),
+ attrs.x, attrs.y, &x, &y, &childReturn);
+
+ if ((x != orig_x) || (y != orig_y)) {
+ window->x = x;
+ window->y = y;
+ break; /* window moved, time to go. */
+ } else if ((x == window->x) && (y == window->y)) {
+ break; /* we're at the place we wanted to be anyhow, drop out. */
+ }
+
+ if (SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) {
+ break;
+ }
+
+ SDL_Delay(10);
+ }
}
void
@@ -853,7 +910,15 @@
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
Display *display = data->videodata->display;
+ XWindowAttributes attrs;
+ int orig_w, orig_h;
+ Uint32 timeout;
+ X11_XSync(display, False);
+ X11_XGetWindowAttributes(display, data->xwindow, &attrs);
+ orig_w = attrs.width;
+ orig_h = attrs.height;
+
if (SDL_IsShapedWindow(window)) {
X11_ResizeWindowShape(window);
}
@@ -896,7 +961,27 @@
X11_XResizeWindow(display, data->xwindow, window->w, window->h);
}
- X11_XFlush(display);
+ /* Wait a brief time to see if the window manager decided to let this resize happen.
+ If the window changes at all, even to an unexpected value, we break out. */
+ timeout = SDL_GetTicks() + 100;
+ while (SDL_TRUE) {
+ X11_XSync(display, False);
+ X11_XGetWindowAttributes(display, data->xwindow, &attrs);
+
+ if ((attrs.width != orig_w) || (attrs.height != orig_h)) {
+ window->w = attrs.width;
+ window->h = attrs.height;
+ break; /* window changed, time to go. */
+ } else if ((attrs.width == window->w) && (attrs.height == window->h)) {
+ break; /* we're at the place we wanted to be anyhow, drop out. */
+ }
+
+ if (SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) {
+ break;
+ }
+
+ SDL_Delay(10);
+ }
}
int
--- a/external/SDL2/src/video/x11/SDL_x11window.h
+++ b/external/SDL2/src/video/x11/SDL_x11window.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/x11/SDL_x11xinput2.c
+++ b/external/SDL2/src/video/x11/SDL_x11xinput2.c
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -42,7 +42,7 @@
* this extension */
static int xinput2_opcode;
-static void parse_valuators(const double *input_values,unsigned char *mask,int mask_len,
+static void parse_valuators(const double *input_values, const unsigned char *mask,int mask_len,
double *output_values,int output_values_len) {
int i = 0,z = 0;
int top = mask_len * 8;
@@ -230,7 +230,7 @@
float x, y;
SDL_Window *window = xinput2_get_sdlwindow(videodata, xev->event);
xinput2_normalize_touch_coordinates(window, xev->event_x, xev->event_y, &x, &y);
- SDL_SendTouch(xev->sourceid,xev->detail, SDL_TRUE, x, y, 1.0);
+ SDL_SendTouch(xev->sourceid, xev->detail, window, SDL_TRUE, x, y, 1.0);
return 1;
}
break;
@@ -239,7 +239,7 @@
float x, y;
SDL_Window *window = xinput2_get_sdlwindow(videodata, xev->event);
xinput2_normalize_touch_coordinates(window, xev->event_x, xev->event_y, &x, &y);
- SDL_SendTouch(xev->sourceid,xev->detail, SDL_FALSE, x, y, 1.0);
+ SDL_SendTouch(xev->sourceid, xev->detail, window, SDL_FALSE, x, y, 1.0);
return 1;
}
break;
@@ -248,7 +248,7 @@
float x, y;
SDL_Window *window = xinput2_get_sdlwindow(videodata, xev->event);
xinput2_normalize_touch_coordinates(window, xev->event_x, xev->event_y, &x, &y);
- SDL_SendTouchMotion(xev->sourceid,xev->detail, x, y, 1.0);
+ SDL_SendTouchMotion(xev->sourceid, xev->detail, window, x, y, 1.0);
return 1;
}
break;
--- a/external/SDL2/src/video/x11/SDL_x11xinput2.h
+++ b/external/SDL2/src/video/x11/SDL_x11xinput2.h
@@ -1,6 +1,6 @@
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/src/video/yuv2rgb/yuv_rgb.c
+++ b/external/SDL2/src/video/yuv2rgb/yuv_rgb.c
@@ -2,6 +2,8 @@
// Distributed under BSD 3-Clause License
#include "../../SDL_internal.h"
+#if SDL_HAVE_YUV
+
#include "yuv_rgb.h"
#include "SDL_cpuinfo.h"
@@ -685,3 +687,4 @@
#endif //__SSE2__
+#endif /* SDL_HAVE_YUV */
--- a/external/SDL2/test/CMakeLists.txt
+++ b/external/SDL2/test/CMakeLists.txt
@@ -86,6 +86,7 @@
add_executable(testcustomcursor testcustomcursor.c)
add_executable(controllermap controllermap.c)
add_executable(testvulkan testvulkan.c)
+add_executable(testoffscreen testoffscreen.c)
# HACK: Dummy target to cause the resource files to be copied to the build directory.
# Need to make it an executable so we can use the TARGET_FILE_DIR generator expression.
@@ -101,22 +102,54 @@
file(COPY ${RESOURCE_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
# TODO: Might be easier to make all targets depend on the resources...?
-add_dependencies(testscale SDL2_test_resoureces)
-add_dependencies(testrendercopyex SDL2_test_resoureces)
-add_dependencies(controllermap SDL2_test_resoureces)
-add_dependencies(testyuv SDL2_test_resoureces)
-add_dependencies(testgamecontroller SDL2_test_resoureces)
-add_dependencies(testshape SDL2_test_resoureces)
-add_dependencies(testshader SDL2_test_resoureces)
-add_dependencies(testnative SDL2_test_resoureces)
-add_dependencies(testspriteminimal SDL2_test_resoureces)
-add_dependencies(testautomation SDL2_test_resoureces)
-add_dependencies(testcustomcursor SDL2_test_resoureces)
-add_dependencies(testrendertarget SDL2_test_resoureces)
-add_dependencies(testsprite2 SDL2_test_resoureces)
-add_dependencies(loopwave SDL2_test_resoureces)
-add_dependencies(loopwavequeue SDL2_test_resoureces)
-add_dependencies(testresample SDL2_test_resoureces)
-add_dependencies(testaudiohotplug SDL2_test_resoureces)
-add_dependencies(testmultiaudio SDL2_test_resoureces)
+set(NEEDS_RESOURCES
+ testscale
+ testrendercopyex
+ controllermap
+ testyuv
+ testgamecontroller
+ testshape
+ testshader
+ testnative
+ testspriteminimal
+ testautomation
+ testcustomcursor
+ testrendertarget
+ testsprite2
+ loopwave
+ loopwavequeue
+ testresample
+ testaudiohotplug
+ testmultiaudio
+)
+foreach(APP IN LISTS NEEDS_RESOURCES)
+ add_dependencies(${APP} SDL2_test_resoureces)
+ if(APPLE)
+ # Make sure resource files get installed into macOS/iOS .app bundles.
+ target_sources(${APP} PRIVATE "${RESOURCE_FILES}")
+ set_target_properties(${APP} PROPERTIES RESOURCE "${RESOURCE_FILES}")
+ endif()
+endforeach()
+
+# Set Apple App ID / Bundle ID. This is needed to launch apps on some Apple
+# platforms (iOS, for example).
+if(APPLE)
+ if(${CMAKE_VERSION} VERSION_LESS "3.7.0")
+ # CMake's 'BUILDSYSTEM_TARGETS' property is only available in
+ # CMake 3.7 and above.
+ message(WARNING "Unable to set Bundle ID for Apple .app builds due to old CMake (pre 3.7).")
+ else()
+ get_property(TARGETS DIRECTORY ${CMAKE_CURRENT_LIST_DIR} PROPERTY BUILDSYSTEM_TARGETS)
+ foreach(CURRENT_TARGET IN LISTS TARGETS)
+ get_property(TARGET_TYPE TARGET ${CURRENT_TARGET} PROPERTY TYPE)
+ if(TARGET_TYPE STREQUAL "EXECUTABLE")
+ set_target_properties("${CURRENT_TARGET}" PROPERTIES
+ MACOSX_BUNDLE_GUI_IDENTIFIER "org.libsdl.${CURRENT_TARGET}"
+ MACOSX_BUNDLE_BUNDLE_VERSION "${SDL_VERSION}"
+ MACOSX_BUNDLE_SHORT_VERSION_STRING "${SDL_VERSION}"
+ )
+ endif()
+ endforeach()
+ endif()
+endif()
--- a/external/SDL2/test/Makefile.os2
+++ b/external/SDL2/test/Makefile.os2
@@ -62,7 +62,7 @@
wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
.c.obj:
- wcc386 $(CFLAGS) -wcd=107 -fo=$^@ $<
+ wcc386 $(CFLAGS) -fo=$^@ $<
# specials
testautomation.exe: $(TAOBJS)
--- a/external/SDL2/test/aclocal.m4
+++ /dev/null
@@ -1,359 +1,0 @@
-# Configure paths for SDL
-# Sam Lantinga 9/21/99
-# stolen from Manish Singh
-# stolen back from Frank Belew
-# stolen from Manish Singh
-# Shamelessly stolen from Owen Taylor
-
-# serial 1
-
-dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
-dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
-dnl
-AC_DEFUN([AM_PATH_SDL2],
-[dnl
-dnl Get the cflags and libraries from the sdl2-config script
-dnl
-AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
- sdl_prefix="$withval", sdl_prefix="")
-AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
- sdl_exec_prefix="$withval", sdl_exec_prefix="")
-AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
- , enable_sdltest=yes)
-
- min_sdl_version=ifelse([$1], ,0.9.0,$1)
-
- if test "x$sdl_prefix$sdl_exec_prefix" = x ; then
- PKG_CHECK_MODULES([SDL], [sdl2 >= $min_sdl_version],
- [sdl_pc=yes],
- [sdl_pc=no])
- else
- sdl_pc=no
- if test x$sdl_exec_prefix != x ; then
- sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_exec_prefix/bin/sdl2-config
- fi
- fi
- if test x$sdl_prefix != x ; then
- sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
- if test x${SDL_CONFIG+set} != xset ; then
- SDL_CONFIG=$sdl_prefix/bin/sdl2-config
- fi
- fi
- fi
-
- if test "x$sdl_pc" = xyes ; then
- no_sdl=""
- SDL_CONFIG="pkg-config sdl2"
- else
- as_save_PATH="$PATH"
- if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then
- PATH="$prefix/bin:$prefix/usr/bin:$PATH"
- fi
- AC_PATH_PROG(SDL_CONFIG, sdl2-config, no, [$PATH])
- PATH="$as_save_PATH"
- AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
- no_sdl=""
-
- if test "$SDL_CONFIG" = "no" ; then
- no_sdl=yes
- else
- SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
- SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
-
- sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- if test "x$enable_sdltest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_CXXFLAGS="$CXXFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $SDL_CFLAGS"
- CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
- LIBS="$LIBS $SDL_LIBS"
-dnl
-dnl Now check if the installed SDL is sufficiently new. (Also sanity
-dnl checks the results of sdl2-config to some extent
-dnl
- rm -f conf.sdltest
- AC_TRY_RUN([
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "SDL.h"
-
-char*
-my_strdup (char *str)
-{
- char *new_str;
-
- if (str)
- {
- new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
- strcpy (new_str, str);
- }
- else
- new_str = NULL;
-
- return new_str;
-}
-
-int main (int argc, char *argv[])
-{
- int major, minor, micro;
- char *tmp_version;
-
- /* This hangs on some systems (?)
- system ("touch conf.sdltest");
- */
- { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
-
- /* HP/UX 9 (%@#!) writes to sscanf strings */
- tmp_version = my_strdup("$min_sdl_version");
- if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
- printf("%s, bad version string\n", "$min_sdl_version");
- exit(1);
- }
-
- if (($sdl_major_version > major) ||
- (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
- (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
- {
- return 0;
- }
- else
- {
- printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
- printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro);
- printf("*** best to upgrade to the required version.\n");
- printf("*** If sdl2-config was wrong, set the environment variable SDL_CONFIG\n");
- printf("*** to point to the correct copy of sdl2-config, and remove the file\n");
- printf("*** config.cache before re-running configure\n");
- return 1;
- }
-}
-
-],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
- CFLAGS="$ac_save_CFLAGS"
- CXXFLAGS="$ac_save_CXXFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- if test "x$no_sdl" = x ; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- fi
- fi
- if test "x$no_sdl" = x ; then
- ifelse([$2], , :, [$2])
- else
- if test "$SDL_CONFIG" = "no" ; then
- echo "*** The sdl2-config script installed by SDL could not be found"
- echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
- echo "*** your path, or set the SDL_CONFIG environment variable to the"
- echo "*** full path to sdl2-config."
- else
- if test -f conf.sdltest ; then
- :
- else
- echo "*** Could not run SDL test program, checking why..."
- CFLAGS="$CFLAGS $SDL_CFLAGS"
- CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
- LIBS="$LIBS $SDL_LIBS"
- AC_TRY_LINK([
-#include <stdio.h>
-#include "SDL.h"
-
-int main(int argc, char *argv[])
-{ return 0; }
-#undef main
-#define main K_and_R_C_main
-], [ return 0; ],
- [ echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding SDL or finding the wrong"
- echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means SDL was incorrectly installed"
- echo "*** or that you have moved SDL since it was installed. In the latter case, you"
- echo "*** may want to edit the sdl2-config script: $SDL_CONFIG" ])
- CFLAGS="$ac_save_CFLAGS"
- CXXFLAGS="$ac_save_CXXFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- SDL_CFLAGS=""
- SDL_LIBS=""
- ifelse([$3], , :, [$3])
- fi
- AC_SUBST(SDL_CFLAGS)
- AC_SUBST(SDL_LIBS)
- rm -f conf.sdltest
-])
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You 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.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
-AC_DEFUN([PKG_PROG_PKG_CONFIG],
-[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
-AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
-AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
-
-if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-fi
-if test -n "$PKG_CONFIG"; then
- _pkg_min_version=m4_default([$1], [0.9.0])
- AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
- if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- PKG_CONFIG=""
- fi
-fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists. Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_EXISTS],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-if test -n "$PKG_CONFIG" && \
- AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
- m4_default([$2], [:])
-m4_ifvaln([$3], [else
- $3])dnl
-fi])
-
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
-m4_define([_PKG_CONFIG],
-[if test -n "$$1"; then
- pkg_cv_[]$1="$$1"
- elif test -n "$PKG_CONFIG"; then
- PKG_CHECK_EXISTS([$3],
- [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
- [pkg_failed=yes])
- else
- pkg_failed=untried
-fi[]dnl
-])# _PKG_CONFIG
-
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
-AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
-AC_DEFUN([PKG_CHECK_MODULES],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $1])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
- AC_MSG_RESULT([no])
- _PKG_SHORT_ERRORS_SUPPORTED
- if test $_pkg_short_errors_supported = yes; then
- $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
- else
- $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
- m4_default([$4], [AC_MSG_ERROR(
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT])dnl
- ])
-elif test $pkg_failed = untried; then
- AC_MSG_RESULT([no])
- m4_default([$4], [AC_MSG_FAILURE(
-[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])dnl
- ])
-else
- $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
- $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
- AC_MSG_RESULT([yes])
- $3
-fi[]dnl
-])# PKG_CHECK_MODULES
--- a/external/SDL2/test/checkkeys.c
+++ b/external/SDL2/test/checkkeys.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/configure
+++ b/external/SDL2/test/configure
@@ -2988,6 +2988,11 @@
MATHLIB=""
SYS_GL_LIBS=""
;;
+ *-*-riscos* )
+ EXE=",e1f"
+ MATHLIB=""
+ SYS_GL_LIBS=""
+ ;;
*)
ISUNIX="true"
EXE=""
@@ -3820,6 +3825,9 @@
/* end confdefs.h. */
#include "SDL_opengl.h"
+ #ifndef SDL_VIDEO_OPENGL
+ #error SDL_VIDEO_OPENGL
+ #endif
int
main ()
@@ -3845,11 +3853,10 @@
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #if defined (__IPHONEOS__)
- #include <OpenGLES/ES1/gl.h>
- #else
- #include <GLES/gl.h>
- #endif /* __QNXNTO__ */
+ #include "SDL_opengles.h"
+ #ifndef SDL_VIDEO_OPENGL_ES
+ #error SDL_VIDEO_OPENGL_ES
+ #endif
int
main ()
@@ -3875,12 +3882,9 @@
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- #if defined (__IPHONEOS__)
- #include <OpenGLES/ES2/gl.h>
- #include <OpenGLES/ES2/glext.h>
- #else
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
+ #include "SDL_opengles2.h"
+ #ifndef SDL_VIDEO_OPENGL_ES2
+ #error SDL_VIDEO_OPENGL_ES2
#endif
int
--- a/external/SDL2/test/configure.ac
+++ b/external/SDL2/test/configure.ac
@@ -71,6 +71,11 @@
MATHLIB=""
SYS_GL_LIBS=""
;;
+ *-*-riscos* )
+ EXE=",e1f"
+ MATHLIB=""
+ SYS_GL_LIBS=""
+ ;;
*)
dnl Oh well, call it Unix...
ISUNIX="true"
@@ -120,6 +125,9 @@
have_opengl=no
AC_TRY_COMPILE([
#include "SDL_opengl.h"
+ #ifndef SDL_VIDEO_OPENGL
+ #error SDL_VIDEO_OPENGL
+ #endif
],[
],[
have_opengl=yes
@@ -130,11 +138,10 @@
AC_MSG_CHECKING(for OpenGL ES support)
have_opengles=no
AC_TRY_COMPILE([
- #if defined (__IPHONEOS__)
- #include <OpenGLES/ES1/gl.h>
- #else
- #include <GLES/gl.h>
- #endif /* __QNXNTO__ */
+ #include "SDL_opengles.h"
+ #ifndef SDL_VIDEO_OPENGL_ES
+ #error SDL_VIDEO_OPENGL_ES
+ #endif
],[
],[
have_opengles=yes
@@ -145,12 +152,9 @@
AC_MSG_CHECKING(for OpenGL ES2 support)
have_opengles2=no
AC_TRY_COMPILE([
- #if defined (__IPHONEOS__)
- #include <OpenGLES/ES2/gl.h>
- #include <OpenGLES/ES2/glext.h>
- #else
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
+ #include "SDL_opengles2.h"
+ #ifndef SDL_VIDEO_OPENGL_ES2
+ #error SDL_VIDEO_OPENGL_ES2
#endif
],[
],[
--- a/external/SDL2/test/controllermap.c
+++ b/external/SDL2/test/controllermap.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -21,6 +21,9 @@
#ifndef SDL_JOYSTICK_DISABLED
+/* Define this for verbose output while mapping controllers */
+#define DEBUG_CONTROLLERMAP
+
#ifdef __IPHONEOS__
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 480
@@ -140,6 +143,7 @@
typedef struct
{
SDL_bool m_bMoving;
+ int m_nLastValue;
int m_nStartingValue;
int m_nFarthestValue;
} AxisState;
@@ -363,7 +367,6 @@
Uint8 alpha=200, alpha_step = -1;
Uint32 alpha_ticks = 0;
SDL_JoystickID nJoystickID;
- int iIndex;
/* Create a window to display joystick axis position */
window = SDL_CreateWindow("Game Controller Map", SDL_WINDOWPOS_CENTERED,
@@ -410,14 +413,12 @@
s_nNumAxes = SDL_JoystickNumAxes(joystick);
s_arrAxisState = (AxisState *)SDL_calloc(s_nNumAxes, sizeof(*s_arrAxisState));
- for (iIndex = 0; iIndex < s_nNumAxes; ++iIndex) {
- AxisState *pAxisState = &s_arrAxisState[iIndex];
- Sint16 nInitialValue;
- pAxisState->m_bMoving = SDL_JoystickGetAxisInitialState(joystick, iIndex, &nInitialValue);
- pAxisState->m_nStartingValue = nInitialValue;
- pAxisState->m_nFarthestValue = nInitialValue;
- }
+ /* Skip any spurious events at start */
+ while (SDL_PollEvent(&event) > 0) {
+ continue;
+ }
+
/* Loop, getting joystick events! */
while (!done && !s_bBindingComplete) {
int iElement = s_arrBindingOrder[s_iCurrentBinding];
@@ -465,13 +466,20 @@
break;
case SDL_JOYAXISMOTION:
if (event.jaxis.which == nJoystickID) {
+ const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 controller needed 96 */
AxisState *pAxisState = &s_arrAxisState[event.jaxis.axis];
int nValue = event.jaxis.value;
int nCurrentDistance, nFarthestDistance;
if (!pAxisState->m_bMoving) {
- pAxisState->m_bMoving = SDL_TRUE;
- pAxisState->m_nStartingValue = nValue;
- pAxisState->m_nFarthestValue = nValue;
+ Sint16 nInitialValue;
+ pAxisState->m_bMoving = SDL_JoystickGetAxisInitialState(joystick, event.jaxis.axis, &nInitialValue);
+ pAxisState->m_nLastValue = nInitialValue;
+ pAxisState->m_nStartingValue = nInitialValue;
+ pAxisState->m_nFarthestValue = nInitialValue;
+ } else if (SDL_abs(nValue - pAxisState->m_nLastValue) <= MAX_ALLOWED_JITTER) {
+ break;
+ } else {
+ pAxisState->m_nLastValue = nValue;
}
nCurrentDistance = SDL_abs(nValue - pAxisState->m_nStartingValue);
nFarthestDistance = SDL_abs(pAxisState->m_nFarthestValue - pAxisState->m_nStartingValue);
@@ -773,7 +781,7 @@
main(int argc, char *argv[])
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n");
- exit(1);
+ return 1;
}
#endif
--- a/external/SDL2/test/loopwave.c
+++ b/external/SDL2/test/loopwave.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/loopwavequeue.c
+++ b/external/SDL2/test/loopwavequeue.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testatomic.c
+++ b/external/SDL2/test/testatomic.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -626,7 +626,7 @@
/* Start the readers first */
SDL_Log("Starting %d readers\n", NUM_READERS);
- SDL_zero(readerData);
+ SDL_zeroa(readerData);
SDL_AtomicSet(&readersRunning, NUM_READERS);
for (i = 0; i < NUM_READERS; ++i) {
char name[64];
@@ -638,7 +638,7 @@
/* Start up the writers */
SDL_Log("Starting %d writers\n", NUM_WRITERS);
- SDL_zero(writerData);
+ SDL_zeroa(writerData);
SDL_AtomicSet(&writersRunning, NUM_WRITERS);
for (i = 0; i < NUM_WRITERS; ++i) {
char name[64];
--- a/external/SDL2/test/testaudiocapture.c
+++ b/external/SDL2/test/testaudiocapture.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testaudiohotplug.c
+++ b/external/SDL2/test/testaudiohotplug.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testaudioinfo.c
+++ b/external/SDL2/test/testaudioinfo.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testautomation.c
+++ b/external/SDL2/test/testautomation.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testautomation_pixels.c
+++ b/external/SDL2/test/testautomation_pixels.c
@@ -10,7 +10,7 @@
/* Test case functions */
/* Definition of all RGB formats used to test pixel conversions */
-const int _numRGBPixelFormats = 30;
+const int _numRGBPixelFormats = 31;
Uint32 _RGBPixelFormats[] =
{
SDL_PIXELFORMAT_INDEX1LSB,
@@ -20,6 +20,7 @@
SDL_PIXELFORMAT_INDEX8,
SDL_PIXELFORMAT_RGB332,
SDL_PIXELFORMAT_RGB444,
+ SDL_PIXELFORMAT_BGR444,
SDL_PIXELFORMAT_RGB555,
SDL_PIXELFORMAT_BGR555,
SDL_PIXELFORMAT_ARGB4444,
@@ -53,6 +54,7 @@
"SDL_PIXELFORMAT_INDEX8",
"SDL_PIXELFORMAT_RGB332",
"SDL_PIXELFORMAT_RGB444",
+ "SDL_PIXELFORMAT_BGR444",
"SDL_PIXELFORMAT_RGB555",
"SDL_PIXELFORMAT_BGR555",
"SDL_PIXELFORMAT_ARGB4444",
--- a/external/SDL2/test/testautomation_rwops.c
+++ b/external/SDL2/test/testautomation_rwops.c
@@ -100,7 +100,7 @@
int seekPos = SDLTest_RandomIntegerInRange(4, 8);
/* Clear buffer */
- SDL_zero(buf);
+ SDL_zeroa(buf);
/* Set to start. */
i = SDL_RWseek(rw, 0, RW_SEEK_SET );
@@ -226,7 +226,7 @@
int result;
/* Clear buffer */
- SDL_zero(mem);
+ SDL_zeroa(mem);
/* Open */
rw = SDL_RWFromMem(mem, sizeof(RWopsHelloWorldTestString)-1);
--- a/external/SDL2/test/testautomation_surface.c
+++ b/external/SDL2/test/testautomation_surface.c
@@ -310,6 +310,7 @@
SDL_PIXELFORMAT_INDEX8,
SDL_PIXELFORMAT_RGB332,
SDL_PIXELFORMAT_RGB444,
+ SDL_PIXELFORMAT_BGR444,
SDL_PIXELFORMAT_RGB555,
SDL_PIXELFORMAT_BGR555,
SDL_PIXELFORMAT_ARGB4444,
--- a/external/SDL2/test/testbounds.c
+++ b/external/SDL2/test/testbounds.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testcustomcursor.c
+++ b/external/SDL2/test/testcustomcursor.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testdisplayinfo.c
+++ b/external/SDL2/test/testdisplayinfo.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testdraw2.c
+++ b/external/SDL2/test/testdraw2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testdrawchessboard.c
+++ b/external/SDL2/test/testdrawchessboard.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testdropfile.c
+++ b/external/SDL2/test/testdropfile.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testerror.c
+++ b/external/SDL2/test/testerror.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testfile.c
+++ b/external/SDL2/test/testfile.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testfilesystem.c
+++ b/external/SDL2/test/testfilesystem.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -32,28 +32,28 @@
if(base_path == NULL){
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find base path: %s\n",
SDL_GetError());
- return 1;
+ } else {
+ SDL_Log("base path: '%s'\n", base_path);
+ SDL_free(base_path);
}
- SDL_Log("base path: '%s'\n", base_path);
- SDL_free(base_path);
pref_path = SDL_GetPrefPath("libsdl", "testfilesystem");
if(pref_path == NULL){
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path: %s\n",
SDL_GetError());
- return 1;
+ } else {
+ SDL_Log("pref path: '%s'\n", pref_path);
+ SDL_free(pref_path);
}
- SDL_Log("pref path: '%s'\n", pref_path);
- SDL_free(pref_path);
pref_path = SDL_GetPrefPath(NULL, "testfilesystem");
if(pref_path == NULL){
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path without organization: %s\n",
SDL_GetError());
- return 1;
+ } else {
+ SDL_Log("pref path: '%s'\n", pref_path);
+ SDL_free(pref_path);
}
- SDL_Log("pref path: '%s'\n", pref_path);
- SDL_free(pref_path);
SDL_Quit();
return 0;
--- a/external/SDL2/test/testgamecontroller.c
+++ b/external/SDL2/test/testgamecontroller.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -114,11 +114,6 @@
case SDL_CONTROLLERBUTTONDOWN:
case SDL_CONTROLLERBUTTONUP:
SDL_Log("Controller button %s %s\n", SDL_GameControllerGetStringForButton((SDL_GameControllerButton)event.cbutton.button), event.cbutton.state ? "pressed" : "released");
- /* First button triggers a 0.5 second full strength rumble */
- if (event.type == SDL_CONTROLLERBUTTONDOWN &&
- event.cbutton.button == SDL_CONTROLLER_BUTTON_A) {
- SDL_GameControllerRumble(gamecontroller, 0xFFFF, 0xFFFF, 500);
- }
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym != SDLK_ESCAPE) {
@@ -155,6 +150,13 @@
}
}
+ /* Update rumble based on trigger state */
+ {
+ Uint16 low_frequency_rumble = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_TRIGGERLEFT) * 2;
+ Uint16 high_frequency_rumble = SDL_GameControllerGetAxis(gamecontroller, SDL_CONTROLLER_AXIS_TRIGGERRIGHT) * 2;
+ SDL_GameControllerRumble(gamecontroller, low_frequency_rumble, high_frequency_rumble, 250);
+ }
+
SDL_RenderPresent(screen);
if (!SDL_GameControllerGetAttached(gamecontroller)) {
@@ -292,14 +294,33 @@
{
nController++;
name = SDL_GameControllerNameForIndex(i);
- description = "Controller";
+ switch (SDL_GameControllerTypeForIndex(i)) {
+ case SDL_CONTROLLER_TYPE_XBOX360:
+ description = "XBox 360 Controller";
+ break;
+ case SDL_CONTROLLER_TYPE_XBOXONE:
+ description = "XBox One Controller";
+ break;
+ case SDL_CONTROLLER_TYPE_PS3:
+ description = "PS3 Controller";
+ break;
+ case SDL_CONTROLLER_TYPE_PS4:
+ description = "PS4 Controller";
+ break;
+ case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO:
+ description = "Nintendo Switch Pro Controller";
+ break;
+ default:
+ description = "Game Controller";
+ break;
+ }
} else {
name = SDL_JoystickNameForIndex(i);
description = "Joystick";
}
- SDL_Log("%s %d: %s (guid %s, VID 0x%.4x, PID 0x%.4x)\n",
+ SDL_Log("%s %d: %s (guid %s, VID 0x%.4x, PID 0x%.4x, player index = %d)\n",
description, i, name ? name : "Unknown", guid,
- SDL_JoystickGetDeviceVendor(i), SDL_JoystickGetDeviceProduct(i));
+ SDL_JoystickGetDeviceVendor(i), SDL_JoystickGetDeviceProduct(i), SDL_JoystickGetDevicePlayerIndex(i));
}
SDL_Log("There are %d game controller(s) attached (%d joystick(s))\n", nController, SDL_NumJoysticks());
@@ -367,7 +388,7 @@
main(int argc, char *argv[])
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n");
- exit(1);
+ return 1;
}
#endif
--- a/external/SDL2/test/testgesture.c
+++ b/external/SDL2/test/testgesture.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testgl2.c
+++ b/external/SDL2/test/testgl2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testgles.c
+++ b/external/SDL2/test/testgles.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testgles2.c
+++ b/external/SDL2/test/testgles2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testhaptic.c
+++ b/external/SDL2/test/testhaptic.c
@@ -363,7 +363,7 @@
main(int argc, char *argv[])
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n");
- exit(1);
+ return 1;
}
#endif
--- a/external/SDL2/test/testhotplug.c
+++ b/external/SDL2/test/testhotplug.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testiconv.c
+++ b/external/SDL2/test/testiconv.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testime.c
+++ b/external/SDL2/test/testime.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testintersections.c
+++ b/external/SDL2/test/testintersections.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testjoystick.c
+++ b/external/SDL2/test/testjoystick.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -379,7 +379,7 @@
main(int argc, char *argv[])
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n");
- exit(1);
+ return 1;
}
#endif
--- a/external/SDL2/test/testkeys.c
+++ b/external/SDL2/test/testkeys.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testloadso.c
+++ b/external/SDL2/test/testloadso.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testlock.c
+++ b/external/SDL2/test/testlock.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testmessage.c
+++ b/external/SDL2/test/testmessage.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testmultiaudio.c
+++ b/external/SDL2/test/testmultiaudio.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testnative.c
+++ b/external/SDL2/test/testnative.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testnative.h
+++ b/external/SDL2/test/testnative.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testnativew32.c
+++ b/external/SDL2/test/testnativew32.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testnativex11.c
+++ b/external/SDL2/test/testnativex11.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- /dev/null
+++ b/external/SDL2/test/testoffscreen.c
@@ -1,0 +1,170 @@
+/*
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely.
+*/
+
+/* Simple program: picks the offscreen backend and renders each frame to a bmp */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+
+#ifdef __EMSCRIPTEN__
+#include <emscripten/emscripten.h>
+#endif
+
+#include "SDL.h"
+#include "SDL_stdinc.h"
+#include "SDL_opengl.h"
+
+static SDL_Renderer *renderer = NULL;
+static SDL_Window *window = NULL;
+static int done = SDL_FALSE;
+static int frame_number = 0;
+static int width = 640;
+static int height = 480;
+static int max_frames = 200;
+
+void
+draw()
+{
+ SDL_Rect Rect;
+
+ SDL_SetRenderDrawColor(renderer, 0x10, 0x9A, 0xCE, 0xFF);
+ SDL_RenderClear(renderer);
+
+ /* Grow based on the frame just to show a difference per frame of the region */
+ Rect.x = 0;
+ Rect.y = 0;
+ Rect.w = (frame_number * 2) % width;
+ Rect.h = (frame_number * 2) % height;
+ SDL_SetRenderDrawColor(renderer, 0xFF, 0x10, 0x21, 0xFF);
+ SDL_RenderFillRect(renderer, &Rect);
+
+ SDL_RenderPresent(renderer);
+}
+
+void
+save_surface_to_bmp()
+{
+ SDL_Surface* surface;
+ Uint32 r_mask, g_mask, b_mask, a_mask;
+ Uint32 pixel_format;
+ char file[128];
+ int bbp;
+
+ pixel_format = SDL_GetWindowPixelFormat(window);
+ SDL_PixelFormatEnumToMasks(pixel_format, &bbp, &r_mask, &g_mask, &b_mask, &a_mask);
+
+ surface = SDL_CreateRGBSurface(0, width, height, bbp, r_mask, g_mask, b_mask, a_mask);
+ SDL_RenderReadPixels(renderer, NULL, pixel_format, (void*)surface->pixels, surface->pitch);
+
+ SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp",
+ SDL_GetWindowID(window), ++frame_number);
+
+ SDL_SaveBMP(surface, file);
+ SDL_FreeSurface(surface);
+}
+
+void
+loop()
+{
+ SDL_Event event;
+
+ /* Check for events */
+ while (SDL_PollEvent(&event)) {
+ switch (event.type) {
+ case SDL_QUIT:
+ done = SDL_TRUE;
+ break;
+ }
+ }
+
+ draw();
+ save_surface_to_bmp();
+
+#ifdef __EMSCRIPTEN__
+ if (done) {
+ emscripten_cancel_main_loop();
+ }
+#endif
+}
+
+int
+main(int argc, char *argv[])
+{
+ Uint32 then, now, frames;
+
+ /* Enable standard application logging */
+ SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
+
+ /* Force the offscreen renderer, if it cannot be created then fail out */
+ if (SDL_VideoInit("offscreen") < 0) {
+ SDL_Log("Couldn't initialize the offscreen video driver: %s\n",
+ SDL_GetError());
+ return SDL_FALSE;
+ }
+
+ /* If OPENGL fails to init it will fallback to using a framebuffer for rendering */
+ window = SDL_CreateWindow("Offscreen Test",
+ SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
+ width, height, 0);
+
+ if (!window) {
+ SDL_Log("Couldn't create window: %s\n",
+ SDL_GetError());
+ return SDL_FALSE;
+ }
+
+ renderer = SDL_CreateRenderer(window, -1, 0);
+
+ if (!renderer) {
+ SDL_Log("Couldn't create renderer: %s\n",
+ SDL_GetError());
+ return SDL_FALSE;
+ }
+
+ SDL_RenderClear(renderer);
+
+ srand((unsigned int)time(NULL));
+
+ /* Main render loop */
+ frames = 0;
+ then = SDL_GetTicks();
+ done = 0;
+
+ SDL_Log("Rendering %i frames offscreen\n", max_frames);
+
+#ifdef __EMSCRIPTEN__
+ emscripten_set_main_loop(loop, 0, 1);
+#else
+ while (!done && frames < max_frames) {
+ ++frames;
+ loop();
+
+ /* Print out some timing information, along with remaining frames */
+ if (frames % (max_frames / 10) == 0) {
+ now = SDL_GetTicks();
+ if (now > then) {
+ double fps = ((double) frames * 1000) / (now - then);
+ SDL_Log("Frames remaining: %i rendering at %2.2f frames per second\n", max_frames - frames, fps);
+ }
+ }
+ }
+#endif
+
+ SDL_DestroyRenderer(renderer);
+ SDL_DestroyWindow(window);
+ SDL_Quit();
+
+ return 0;
+}
+
+/* vi: set ts=4 sw=4 expandtab: */
--- a/external/SDL2/test/testoverlay2.c
+++ b/external/SDL2/test/testoverlay2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -15,6 +15,8 @@
* Running trojan moose :) Coded by Mike Gorchak. *
* *
********************************************************************************/
+
+#include <stdlib.h>
#ifdef __EMSCRIPTEN__
#include <emscripten/emscripten.h>
--- a/external/SDL2/test/testplatform.c
+++ b/external/SDL2/test/testplatform.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testpower.c
+++ b/external/SDL2/test/testpower.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testqsort.c
+++ b/external/SDL2/test/testqsort.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -57,13 +57,11 @@
success = SDL_sscanf(argv[1] + 2, "%llx", &seed);
else
success = SDL_sscanf(argv[1], "%llu", &seed);
- if (!success)
- {
+ if (!success) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid seed. Use a decimal or hexadecimal number.\n");
return 1;
}
- if (seed <= 0xffffffff)
- {
+ if (seed <= ((Uint64)0xffffffff)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Seed must be equal or greater than 0x100000000.\n");
return 1;
}
--- a/external/SDL2/test/testrelative.c
+++ b/external/SDL2/test/testrelative.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testrendercopyex.c
+++ b/external/SDL2/test/testrendercopyex.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testrendertarget.c
+++ b/external/SDL2/test/testrendertarget.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testresample.c
+++ b/external/SDL2/test/testresample.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testrumble.c
+++ b/external/SDL2/test/testrumble.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -147,7 +147,7 @@
main(int argc, char *argv[])
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n");
- exit(1);
+ return 1;
}
#endif
--- a/external/SDL2/test/testscale.c
+++ b/external/SDL2/test/testscale.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testsem.c
+++ b/external/SDL2/test/testsem.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testsensor.c
+++ b/external/SDL2/test/testsensor.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testshader.c
+++ b/external/SDL2/test/testshader.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testshape.c
+++ b/external/SDL2/test/testshape.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testsprite2.c
+++ b/external/SDL2/test/testsprite2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testspriteminimal.c
+++ b/external/SDL2/test/testspriteminimal.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/teststreaming.c
+++ b/external/SDL2/test/teststreaming.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testthread.c
+++ b/external/SDL2/test/testthread.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testtimer.c
+++ b/external/SDL2/test/testtimer.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testver.c
+++ b/external/SDL2/test/testver.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testviewport.c
+++ b/external/SDL2/test/testviewport.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -25,12 +25,14 @@
static SDLTest_CommonState *state;
-SDL_Rect viewport;
-int done, j;
-SDL_bool use_target = SDL_FALSE;
+static SDL_Rect viewport;
+static int done, j;
+static SDL_bool use_target = SDL_FALSE;
#ifdef __EMSCRIPTEN__
-Uint32 wait_start;
+static Uint32 wait_start;
#endif
+static SDL_Texture *sprite;
+static int sprite_w, sprite_h;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void
@@ -40,6 +42,55 @@
exit(rc);
}
+int
+LoadSprite(char *file, SDL_Renderer *renderer)
+{
+ SDL_Surface *temp;
+
+ /* Load the sprite image */
+ temp = SDL_LoadBMP(file);
+ if (temp == NULL) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", file, SDL_GetError());
+ return (-1);
+ }
+ sprite_w = temp->w;
+ sprite_h = temp->h;
+
+ /* Set transparent pixel as the pixel at (0,0) */
+ if (temp->format->palette) {
+ SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels);
+ } else {
+ switch (temp->format->BitsPerPixel) {
+ case 15:
+ SDL_SetColorKey(temp, SDL_TRUE,
+ (*(Uint16 *) temp->pixels) & 0x00007FFF);
+ break;
+ case 16:
+ SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels);
+ break;
+ case 24:
+ SDL_SetColorKey(temp, SDL_TRUE,
+ (*(Uint32 *) temp->pixels) & 0x00FFFFFF);
+ break;
+ case 32:
+ SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels);
+ break;
+ }
+ }
+
+ /* Create textures from the image */
+ sprite = SDL_CreateTextureFromSurface(renderer, temp);
+ if (!sprite) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError());
+ SDL_FreeSurface(temp);
+ return (-1);
+ }
+ SDL_FreeSurface(temp);
+
+ /* We're ready to roll. :) */
+ return (0);
+}
+
void
DrawOnViewport(SDL_Renderer * renderer, SDL_Rect viewport)
{
@@ -53,11 +104,11 @@
SDL_RenderClear(renderer);
/* Test inside points */
- SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF);
- SDL_RenderDrawPoint(renderer, viewport.h/2 + 10, viewport.w/2);
- SDL_RenderDrawPoint(renderer, viewport.h/2 - 10, viewport.w/2);
- SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - 10);
- SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + 10);
+ SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0x00, 0xFF);
+ SDL_RenderDrawPoint(renderer, viewport.h/2 + 20, viewport.w/2);
+ SDL_RenderDrawPoint(renderer, viewport.h/2 - 20, viewport.w/2);
+ SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - 20);
+ SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + 20);
/* Test horizontal and vertical lines */
SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF);
@@ -68,17 +119,15 @@
/* Test diagonal lines */
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF);
- SDL_RenderDrawLine(renderer, 0, 0,
- viewport.w-1, viewport.h-1);
- SDL_RenderDrawLine(renderer, viewport.w-1, 0,
- 0, viewport.h-1);
+ SDL_RenderDrawLine(renderer, 0, 0, viewport.w-1, viewport.h-1);
+ SDL_RenderDrawLine(renderer, viewport.w-1, 0, 0, viewport.h-1);
/* Test outside points */
- SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF);
+ SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0x00, 0xFF);
SDL_RenderDrawPoint(renderer, viewport.h/2 + viewport.h, viewport.w/2);
SDL_RenderDrawPoint(renderer, viewport.h/2 - viewport.h, viewport.w/2);
- SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - viewport.w);
- SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + viewport.w);
+ SDL_RenderDrawPoint(renderer, viewport.h/2, viewport.w/2 - viewport.w);
+ SDL_RenderDrawPoint(renderer, viewport.h/2, viewport.w/2 + viewport.w);
/* Add a box at the top */
rect.w = 8;
@@ -86,6 +135,14 @@
rect.x = (viewport.w - rect.w) / 2;
rect.y = 0;
SDL_RenderFillRect(renderer, &rect);
+
+ /* Add a clip rect and fill it with the sprite */
+ SDL_QueryTexture(sprite, NULL, NULL, &rect.w, &rect.h);
+ rect.x = (viewport.w - rect.w) / 2;
+ rect.y = (viewport.h - rect.h) / 2;
+ SDL_RenderSetClipRect(renderer, &rect);
+ SDL_RenderCopy(renderer, sprite, NULL, &rect);
+ SDL_RenderSetClipRect(renderer, NULL);
}
void
@@ -149,6 +206,7 @@
return 1;
}
+
for (i = 1; i < argc;) {
int consumed;
@@ -168,6 +226,10 @@
i += consumed;
}
if (!SDLTest_CommonInit(state)) {
+ quit(2);
+ }
+
+ if (LoadSprite("icon.bmp", state->renderers[0]) < 0) {
quit(2);
}
--- a/external/SDL2/test/testvulkan.c
+++ b/external/SDL2/test/testvulkan.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testwm2.c
+++ b/external/SDL2/test/testwm2.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testyuv.c
+++ b/external/SDL2/test/testyuv.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testyuv_cvt.c
+++ b/external/SDL2/test/testyuv_cvt.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/testyuv_cvt.h
+++ b/external/SDL2/test/testyuv_cvt.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
--- a/external/SDL2/test/torturethread.c
+++ b/external/SDL2/test/torturethread.c
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages