SDL_ttf: Updated testgputext to use shadercross

From bd173c1c2e6ad957b4496151aaa3910d1c8ff0ca Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 28 Jan 2025 16:02:56 -0800
Subject: [PATCH] Updated testgputext to use shadercross

---
 examples/testgputext.c                        |   27 +-
 examples/testgputext/shaders/build-shaders.sh |  109 +-
 examples/testgputext/shaders/dxbc50.h         |    2 -
 examples/testgputext/shaders/dxil60.h         |    2 -
 examples/testgputext/shaders/metal.h          |    2 -
 examples/testgputext/shaders/shader.frag      |   13 -
 examples/testgputext/shaders/shader.frag.dxil |  Bin 0 -> 3856 bytes
 .../testgputext/shaders/shader.frag.dxil.h    |  325 ++++
 examples/testgputext/shaders/shader.frag.hlsl |   17 +
 .../testgputext/shaders/shader.frag.metal     |   23 -
 .../testgputext/shaders/shader.frag.metal.h   |   40 -
 examples/testgputext/shaders/shader.frag.msl  |   23 +
 .../testgputext/shaders/shader.frag.msl.h     |   45 +
 .../shaders/shader.frag.sm50.dxbc.h           |  100 --
 .../testgputext/shaders/shader.frag.sm50.hlsl |   32 -
 .../shaders/shader.frag.sm60.dxil.h           |  467 ------
 .../testgputext/shaders/shader.frag.sm60.hlsl |   32 -
 examples/testgputext/shaders/shader.frag.spv  |  Bin 0 -> 868 bytes
 .../testgputext/shaders/shader.frag.spv.h     |  120 +-
 examples/testgputext/shaders/shader.vert      |   19 -
 examples/testgputext/shaders/shader.vert.dxil |  Bin 0 -> 5236 bytes
 .../testgputext/shaders/shader.vert.dxil.h    |  440 ++++++
 examples/testgputext/shaders/shader.vert.hlsl |   28 +
 .../testgputext/shaders/shader.vert.metal     |   34 -
 .../testgputext/shaders/shader.vert.metal.h   |   55 -
 examples/testgputext/shaders/shader.vert.msl  |   34 +
 .../testgputext/shaders/shader.vert.msl.h     |   69 +
 .../shaders/shader.vert.sm50.dxbc.h           | 1320 -----------------
 .../testgputext/shaders/shader.vert.sm50.hlsl |   47 -
 .../shaders/shader.vert.sm60.dxil.h           |  723 ---------
 .../testgputext/shaders/shader.vert.sm60.hlsl |   47 -
 examples/testgputext/shaders/shader.vert.spv  |  Bin 0 -> 1312 bytes
 .../testgputext/shaders/shader.vert.spv.h     |  212 +--
 examples/testgputext/shaders/spir-v.h         |    2 -
 34 files changed, 1192 insertions(+), 3217 deletions(-)
 delete mode 100644 examples/testgputext/shaders/dxbc50.h
 delete mode 100644 examples/testgputext/shaders/dxil60.h
 delete mode 100644 examples/testgputext/shaders/metal.h
 delete mode 100644 examples/testgputext/shaders/shader.frag
 create mode 100644 examples/testgputext/shaders/shader.frag.dxil
 create mode 100644 examples/testgputext/shaders/shader.frag.dxil.h
 create mode 100644 examples/testgputext/shaders/shader.frag.hlsl
 delete mode 100644 examples/testgputext/shaders/shader.frag.metal
 delete mode 100644 examples/testgputext/shaders/shader.frag.metal.h
 create mode 100644 examples/testgputext/shaders/shader.frag.msl
 create mode 100644 examples/testgputext/shaders/shader.frag.msl.h
 delete mode 100644 examples/testgputext/shaders/shader.frag.sm50.dxbc.h
 delete mode 100644 examples/testgputext/shaders/shader.frag.sm50.hlsl
 delete mode 100644 examples/testgputext/shaders/shader.frag.sm60.dxil.h
 delete mode 100644 examples/testgputext/shaders/shader.frag.sm60.hlsl
 create mode 100644 examples/testgputext/shaders/shader.frag.spv
 delete mode 100644 examples/testgputext/shaders/shader.vert
 create mode 100644 examples/testgputext/shaders/shader.vert.dxil
 create mode 100644 examples/testgputext/shaders/shader.vert.dxil.h
 create mode 100644 examples/testgputext/shaders/shader.vert.hlsl
 delete mode 100644 examples/testgputext/shaders/shader.vert.metal
 delete mode 100644 examples/testgputext/shaders/shader.vert.metal.h
 create mode 100644 examples/testgputext/shaders/shader.vert.msl
 create mode 100644 examples/testgputext/shaders/shader.vert.msl.h
 delete mode 100644 examples/testgputext/shaders/shader.vert.sm50.dxbc.h
 delete mode 100644 examples/testgputext/shaders/shader.vert.sm50.hlsl
 delete mode 100644 examples/testgputext/shaders/shader.vert.sm60.dxil.h
 delete mode 100644 examples/testgputext/shaders/shader.vert.sm60.hlsl
 create mode 100644 examples/testgputext/shaders/shader.vert.spv
 delete mode 100644 examples/testgputext/shaders/spir-v.h

diff --git a/examples/testgputext.c b/examples/testgputext.c
index dfa90926..3e5a2b9a 100644
--- a/examples/testgputext.c
+++ b/examples/testgputext.c
@@ -2,16 +2,18 @@
 #include <SDL3/SDL_main.h>
 #include <SDL3_ttf/SDL_ttf.h>
 
-#include "testgputext/shaders/spir-v.h"
-#include "testgputext/shaders/dxbc50.h"
-#include "testgputext/shaders/dxil60.h"
-#include "testgputext/shaders/metal.h"
+#include "testgputext/shaders/shader.vert.spv.h"
+#include "testgputext/shaders/shader.frag.spv.h"
+#include "testgputext/shaders/shader.vert.dxil.h"
+#include "testgputext/shaders/shader.frag.dxil.h"
+#include "testgputext/shaders/shader.vert.msl.h"
+#include "testgputext/shaders/shader.frag.msl.h"
 #define SDL_MATH_3D_IMPLEMENTATION
 #include "testgputext/SDL_math3d.h"
 
 #define MAX_VERTEX_COUNT 4000
 #define MAX_INDEX_COUNT  6000
-#define SUPPORTED_SHADER_FORMATS (SDL_GPU_SHADERFORMAT_SPIRV | SDL_GPU_SHADERFORMAT_DXBC | SDL_GPU_SHADERFORMAT_DXIL | SDL_GPU_SHADERFORMAT_MSL)
+#define SUPPORTED_SHADER_FORMATS (SDL_GPU_SHADERFORMAT_SPIRV | SDL_GPU_SHADERFORMAT_DXIL | SDL_GPU_SHADERFORMAT_MSL)
 
 typedef SDL_FPoint Vec2;
 
@@ -79,20 +81,15 @@ SDL_GPUShader *load_shader(
     createinfo.props = 0;
 
     SDL_GPUShaderFormat format = SDL_GetGPUShaderFormats(device);
-    if (format & SDL_GPU_SHADERFORMAT_DXBC) {
-        createinfo.format = SDL_GPU_SHADERFORMAT_DXBC;
-        createinfo.code = (Uint8*)(is_vertex ? shader_vert_sm50_dxbc : shader_frag_sm50_dxbc);
-        createinfo.code_size = is_vertex ? SDL_arraysize(shader_vert_sm50_dxbc) : SDL_arraysize(shader_frag_sm50_dxbc);
-        createinfo.entrypoint = is_vertex ? "VSMain" : "PSMain";
-    } else if (format & SDL_GPU_SHADERFORMAT_DXIL) {
+    if (format & SDL_GPU_SHADERFORMAT_DXIL) {
         createinfo.format = SDL_GPU_SHADERFORMAT_DXIL;
-        createinfo.code = is_vertex ? shader_vert_sm60_dxil : shader_frag_sm60_dxil;
-        createinfo.code_size = is_vertex ? SDL_arraysize(shader_vert_sm60_dxil) : SDL_arraysize(shader_frag_sm60_dxil);
+        createinfo.code = is_vertex ? shader_vert_dxil : shader_frag_dxil;
+        createinfo.code_size = is_vertex ? shader_vert_dxil_len : shader_frag_dxil_len;
         createinfo.entrypoint = is_vertex ? "VSMain" : "PSMain";
     } else if (format & SDL_GPU_SHADERFORMAT_MSL) {
         createinfo.format = SDL_GPU_SHADERFORMAT_MSL;
-        createinfo.code = is_vertex ? shader_vert_metal : shader_frag_metal;
-        createinfo.code_size = is_vertex ? shader_vert_metal_len : shader_frag_metal_len;
+        createinfo.code = is_vertex ? shader_vert_msl : shader_frag_msl;
+        createinfo.code_size = is_vertex ? shader_vert_msl_len : shader_frag_msl_len;
         createinfo.entrypoint = "main0";
     } else {
         createinfo.format = SDL_GPU_SHADERFORMAT_SPIRV;
diff --git a/examples/testgputext/shaders/build-shaders.sh b/examples/testgputext/shaders/build-shaders.sh
index 9b019e59..451413d7 100755
--- a/examples/testgputext/shaders/build-shaders.sh
+++ b/examples/testgputext/shaders/build-shaders.sh
@@ -2,30 +2,6 @@
 
 set -e
 
-# NOTE: fxc is tested on Linux with https://github.com/mozilla/fxc2
-
-which fxc &>/dev/null && HAVE_FXC=1 || HAVE_FXC=0
-which dxc &>/dev/null && HAVE_DXC=1 || HAVE_DXC=0
-which spirv-cross &>/dev/null && HAVE_SPIRV_CROSS=1 || HAVE_SPIRV_CROSS=0
-
-[ "$HAVE_FXC" != 0 ] || echo "fxc not in PATH; D3D11 shaders will not be rebuilt"
-[ "$HAVE_DXC" != 0 ] || echo "dxc not in PATH; D3D12 shaders will not be rebuilt"
-[ "$HAVE_SPIRV_CROSS" != 0 ] || echo "spirv-cross not in PATH; D3D11, D3D12, Metal shaders will not be rebuilt"
-
-USE_FXC=${USE_FXC:-$HAVE_FXC}
-USE_DXC=${USE_DXC:-$HAVE_DXC}
-USE_SPIRV_CROSS=${USE_SPIRV_CROSS:-$HAVE_SPIRV_CROSS}
-
-spirv_bundle="spir-v.h"
-dxbc50_bundle="dxbc50.h"
-dxil60_bundle="dxil60.h"
-metal_bundle="metal.h"
-
-rm -f "$spirv_bundle"
-[ "$USE_SPIRV_CROSS" != 0 ] && rm -f "$metal_bundle"
-[ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_FXC" != 0 ] && rm -f "$dxbc50_bundle"
-[ "$USE_SPIRV_CROSS" != 0 ] && [ "$USE_DXC" != 0 ] && rm -f "$dxil60_bundle"
-
 make-header() {
     xxd -i "$1" | sed \
         -e 's/^unsigned /const unsigned /g' \
@@ -33,74 +9,25 @@ make-header() {
         > "$1.h"
 }
 
-compile-hlsl-dxbc() {
-    local src="$1"
-    local profile="$2"
-    local output_basename="$3"
-    local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')"
-
-    fxc "$src" /E main /T $2 /Fh "$output_basename.tmp.h" || exit $?
-    sed \
-        -e "s/g_main/$var_name/;s/\r//g" \
-        -e 's,^const,static const,' \
-        -e 's,const unsigned,const signed,' \
-        < "$output_basename.tmp.h" \
-        > "$output_basename.h"
-    rm -f "$output_basename.tmp.h"
-}
-
-compile-hlsl-dxil() {
-    local src="$1"
-    local profile="$2"
-    local output_basename="$3"
-    local var_name="$(echo "$output_basename" | sed -e 's/\./_/g')"
-
-    dxc "$src" -E main -T $2 -Fh "$output_basename.tmp.h" -O3 || exit $?
-    sed \
-        -e "s/g_main/$var_name/;s/\r//g" \
-        -e 's,^const,static const,' \
-        < "$output_basename.tmp.h" \
-        > "$output_basename.h"
-    rm -f "$output_basename.tmp.h"
-}
-
-for i in *.vert *.frag; do
-    spv="$i.spv"
-    metal="$i.metal"
-    hlsl50="$i.sm50.hlsl"
-    dxbc50="$i.sm50.dxbc"
-    hlsl60="$i.sm60.hlsl"
-    dxil60="$i.sm60.dxil"
-
-    glslangValidator -g0 -Os "$i" -V -o "$spv" --quiet
-
-    make-header "$spv"
-    echo "#include \"$spv.h\"" >> "$spirv_bundle"
-
-    if [ "$USE_SPIRV_CROSS" = "0" ]; then
-        continue
-    fi
-
-    spirv-cross "$spv" --hlsl --shader-model 50 --hlsl-enable-compat --output "$hlsl50"
-    spirv-cross "$spv" --hlsl --shader-model 60 --hlsl-enable-compat --output "$hlsl60"
-
-    if [ "${i##*.}" == "frag" ]; then
-        hlsl_stage="ps"
-    else
-        hlsl_stage="vs"
-    fi
-
-    if [ "$USE_FXC" != "0" ]; then
-        compile-hlsl-dxbc "$hlsl50" ${hlsl_stage}_5_0 "$dxbc50"
-        echo "#include \"$dxbc50.h\"" >> "$dxbc50_bundle"
+# Requires shadercross CLI installed from SDL_shadercross
+for filename in *.vert.hlsl; do
+    if [ -f "$filename" ]; then
+        shadercross "$filename" -o "${filename/.hlsl/.spv}"
+        make-header "${filename/.hlsl/.spv}"
+        shadercross "$filename" -o "${filename/.hlsl/.msl}"
+        make-header "${filename/.hlsl/.msl}"
+        shadercross "$filename" -o "${filename/.hlsl/.dxil}"
+        make-header "${filename/.hlsl/.dxil}"
     fi
+done
 
-    if [ "$USE_DXC" != "0" ]; then
-        compile-hlsl-dxil "$hlsl60" ${hlsl_stage}_6_0 "$dxil60"
-        echo "#include \"$dxil60.h\"" >> "$dxil60_bundle"
+for filename in *.frag.hlsl; do
+    if [ -f "$filename" ]; then
+        shadercross "$filename" -o "${filename/.hlsl/.spv}"
+        make-header "${filename/.hlsl/.spv}"
+        shadercross "$filename" -o "${filename/.hlsl/.msl}"
+        make-header "${filename/.hlsl/.msl}"
+        shadercross "$filename" -o "${filename/.hlsl/.dxil}"
+        make-header "${filename/.hlsl/.dxil}"
     fi
-
-    spirv-cross "$spv" --msl --output "$metal"
-    make-header "$metal"
-    echo "#include \"$metal.h\"" >> "$metal_bundle"
 done
diff --git a/examples/testgputext/shaders/dxbc50.h b/examples/testgputext/shaders/dxbc50.h
deleted file mode 100644
index 81e460ba..00000000
--- a/examples/testgputext/shaders/dxbc50.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "shader.vert.sm50.dxbc.h"
-#include "shader.frag.sm50.dxbc.h"
diff --git a/examples/testgputext/shaders/dxil60.h b/examples/testgputext/shaders/dxil60.h
deleted file mode 100644
index 0327232d..00000000
--- a/examples/testgputext/shaders/dxil60.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "shader.vert.sm60.dxil.h"
-#include "shader.frag.sm60.dxil.h"
diff --git a/examples/testgputext/shaders/metal.h b/examples/testgputext/shaders/metal.h
deleted file mode 100644
index 894722cc..00000000
--- a/examples/testgputext/shaders/metal.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "shader.vert.metal.h"
-#include "shader.frag.metal.h"
diff --git a/examples/testgputext/shaders/shader.frag b/examples/testgputext/shaders/shader.frag
deleted file mode 100644
index 291b5de0..00000000
--- a/examples/testgputext/shaders/shader.frag
+++ /dev/null
@@ -1,13 +0,0 @@
-#version 450
-
-layout (location = 0) in vec4 vcolour;
-layout (location = 1) in vec2 tex_coord;
-
-layout (location = 0) out vec4 frag_colour;
-
-layout (set = 2, binding = 0) uniform sampler2D tex;
-
-
-void main() {
-	frag_colour = vcolour * texture(tex, tex_coord);
-}
diff --git a/examples/testgputext/shaders/shader.frag.dxil b/examples/testgputext/shaders/shader.frag.dxil
new file mode 100644
index 0000000000000000000000000000000000000000..02c948d37cd93169a8f1796fd57351ee61c07fb6
GIT binary patch
literal 3856
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

literal 0
HcmV?d00001

diff --git a/examples/testgputext/shaders/shader.frag.dxil.h b/examples/testgputext/shaders/shader.frag.dxil.h
new file mode 100644
index 00000000..f10683cf
--- /dev/null
+++ b/examples/testgputext/shaders/shader.frag.dxil.h
@@ -0,0 +1,325 @@
+static const unsigned char shader_frag_dxil[] = {
+  0x44, 0x58, 0x42, 0x43, 0x0a, 0xc4, 0x73, 0x5d, 0x7a, 0xca, 0x68, 0x83,
+  0xc6, 0xdc, 0xfc, 0x1f, 0x4c, 0xfc, 0x83, 0xee, 0x01, 0x00, 0x00, 0x00,
+  0x10, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+  0xd8, 0x01, 0x00, 0x00, 0x28, 0x08, 0x00, 0x00, 0x44, 0x08, 0x00, 0x00,
+  0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x54, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00,
+  0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00,
+  0x50, 0x53, 0x56, 0x30, 0xec, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+  0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x18, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52,
+  0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x6d,
+  0x61, 0x69, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00,
+  0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x48, 0x06, 0x00, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 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, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d,
+  0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff,
+  0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06,
+  0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 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, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66,
+  0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14,
+  0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f,
+  0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46,
+  0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21,
+  0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b,
+  0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42,
+  0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38,
+  0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e,
+  0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d,
+  0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b,
+  0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18,
+  0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, 0x3c, 0xcc, 0xc3, 0x2f,
+  0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, 0xcc, 0x24, 0x06, 0xe3,
+  0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8,
+  0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6,
+  0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec,
+  0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60,
+  0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4,
+  0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0xd0,
+  0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87,
+  0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50,
+  0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30,
+  0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0,
+  0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20,
+  0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0,
+  0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90,
+  0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10,
+  0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20,
+  0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0,
+  0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60,
+  0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86,
+  0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
+  0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50, 0x12,
+  0x65, 0x50, 0x1e, 0x85, 0x50, 0x2c, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08,
+  0x0a, 0xa1, 0x40, 0xc8, 0xce, 0x00, 0x10, 0x9e, 0x01, 0xa0, 0x3c, 0x16,
+  0x62, 0x10, 0x81, 0x40, 0x20, 0xcf, 0x03, 0x00, 0x79, 0x18, 0x00, 0x00,
+  0x77, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4,
+  0x8f, 0x0c, 0x6f, 0x0c, 0x05, 0x4e, 0x2e, 0xcd, 0x2e, 0x8c, 0xae, 0x2c,
+  0x05, 0x24, 0xc6, 0x05, 0xc7, 0x05, 0xc6, 0x25, 0x06, 0x04, 0x25, 0x6c,
+  0x6c, 0xc6, 0x26, 0xec, 0x26, 0xe7, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10,
+  0x88, 0x62, 0x82, 0x40, 0x18, 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04,
+  0x05, 0xb8, 0xb9, 0x09, 0x02, 0x71, 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20,
+  0x58, 0x13, 0x07, 0xba, 0x32, 0xbc, 0x09, 0x02, 0x81, 0x4c, 0x10, 0x88,
+  0x64, 0x83, 0x40, 0x34, 0x1b, 0x12, 0x42, 0x59, 0x18, 0x62, 0x60, 0x08,
+  0x67, 0x43, 0xf0, 0x4c, 0x10, 0x30, 0x8a, 0xc4, 0x5c, 0x58, 0x1b, 0xdc,
+  0x06, 0x84, 0x88, 0x24, 0x86, 0x18, 0x08, 0x60, 0x43, 0x30, 0x6d, 0x20,
+  0x20, 0x00, 0xa0, 0x26, 0x08, 0x02, 0xb0, 0x01, 0xd8, 0x30, 0x10, 0xd7,
+  0xb5, 0x21, 0xc0, 0x36, 0x0c, 0x83, 0x95, 0x4d, 0x10, 0xb2, 0x6a, 0x43,
+  0xb0, 0x91, 0x68, 0x0b, 0x4b, 0x73, 0x23, 0x42, 0x55, 0x84, 0x35, 0xf4,
+  0xf4, 0x24, 0x45, 0x34, 0x41, 0x28, 0x9c, 0x09, 0x42, 0xf1, 0x6c, 0x08,
+  0x88, 0x09, 0x42, 0x01, 0x4d, 0x10, 0x8a, 0x68, 0x82, 0x40, 0x28, 0x13,
+  0x04, 0x62, 0xd9, 0x20, 0x90, 0x41, 0x19, 0x6c, 0x58, 0x08, 0xef, 0x03,
+  0x83, 0x30, 0x10, 0x83, 0x61, 0x0c, 0x08, 0x30, 0x30, 0x83, 0x0d, 0xc1,
+  0xb0, 0x41, 0x20, 0x03, 0x32, 0xd8, 0xb0, 0x0c, 0xde, 0x07, 0x06, 0x68,
+  0x20, 0x06, 0x83, 0x18, 0x0c, 0x60, 0x90, 0x06, 0x1b, 0x84, 0x33, 0x50,
+  0x03, 0x26, 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x13,
+  0x84, 0x42, 0xda, 0xb0, 0x10, 0x6c, 0xf0, 0xb5, 0x41, 0x18, 0x80, 0xc1,
+  0x30, 0x06, 0x04, 0x18, 0x98, 0xc1, 0x86, 0xc0, 0x0d, 0x36, 0x0c, 0x6b,
+  0xf0, 0x06, 0xc0, 0x86, 0xc2, 0xea, 0xe0, 0xa0, 0x02, 0x68, 0x98, 0xb1,
+  0xbd, 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x08, 0x86, 0x45, 0x9a, 0xdb, 0x1c,
+  0xdd, 0xdc, 0x04, 0x81, 0x68, 0x68, 0xcc, 0xa5, 0x9d, 0x7d, 0xb1, 0x91,
+  0xd1, 0x98, 0x4b, 0x3b, 0xfb, 0x9a, 0xa3, 0x23, 0x42, 0x57, 0x86, 0xf7,
+  0xe5, 0xf6, 0x26, 0xd7, 0xb6, 0x41, 0x91, 0x83, 0x39, 0xa0, 0x83, 0x3a,
+  0xb0, 0x03, 0xe4, 0x0e, 0xe6, 0x00, 0x0f, 0x86, 0x2a, 0x6c, 0x6c, 0x76,
+  0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x53, 0x82, 0xa0, 0x0a, 0x19,
+  0x9e, 0x8b, 0x5d, 0x99, 0xdc, 0x5c, 0xda, 0x9b, 0xdb, 0x94, 0x80, 0x68,
+  0x42, 0x86, 0xe7, 0x62, 0x17, 0xc6, 0x66, 0x57, 0x26, 0x37, 0x25, 0x28,
+  0xea, 0x90, 0xe1, 0xb9, 0xcc, 0xa1, 0x85, 0x91, 0x95, 0xc9, 0x35, 0xbd,
+  0x91, 0x95, 0xb1, 0x4d, 0x09, 0x90, 0x32, 0x64, 0x78, 0x2e, 0x72, 0x65,
+  0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x02, 0xaa, 0x12, 0x19,
+  0x9e, 0x0b, 0x5d, 0x1e, 0x5c, 0x59, 0x90, 0x9b, 0xdb, 0x1b, 0x5d, 0x18,
+  0x5d, 0xda, 0x9b, 0xdb, 0xdc, 0x94, 0x20, 0xab, 0x43, 0x86, 0xe7, 0x62,
+  0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, 0x17, 0x46, 0x57, 0x36, 0x25,
+  0xd8, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd,
+  0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xe0, 0xa0, 0x0b, 0x19, 0x9e, 0xcb,
+  0xd8, 0x5b, 0x9d, 0x1b, 0x5d, 0x99, 0xdc, 0xdc, 0x94, 0x00, 0x0f, 0x00,
+  0x79, 0x18, 0x00, 0x00, 0x4c, 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, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70,
+  0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60,
+  0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4,
+  0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00,
+  0x71, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x46, 0x20, 0x0d, 0x97,
+  0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84,
+  0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f,
+  0x35, 0xf9, 0xc5, 0x6d, 0xdb, 0x00, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x12,
+  0xc0, 0x3c, 0x0b, 0xe1, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce,
+  0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7,
+  0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xb0, 0x99, 0x43, 0x90, 0xb8, 0xcd, 0x60, 0x4f, 0x96, 0x7f, 0xd2, 0x95,
+  0x8c, 0x20, 0xe5, 0x9e, 0x44, 0x58, 0x49, 0x4c, 0xc4, 0x06, 0x00, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0xb1, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c,
+  0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xac, 0x06, 0x00, 0x00,
+  0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00,
+  0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 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, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20,
+  0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90,
+  0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a,
+  0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d,
+  0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff,
+  0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06,
+  0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 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, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66,
+  0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14,
+  0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f,
+  0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46,
+  0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21,
+  0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b,
+  0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42,
+  0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38,
+  0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e,
+  0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d,
+  0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b,
+  0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18,
+  0xf8, 0x81, 0x1e, 0xe8, 0x4

(Patch may be truncated, please check the link at the top of this post.)