SDL3 GPU texture support (#254)

Co-authored-by: Anonymous Maarten <anonymous.maarten@gmail.com>
This commit is contained in:
Anders Jenbo 2025-06-09 01:04:19 +02:00 committed by GitHub
parent 1a91547011
commit 5be9b09b40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 1920 additions and 1383 deletions

View File

@ -176,7 +176,7 @@ Uint32 OpenGL15Renderer::GetTextureId(IDirect3DRMTexture* iTexture)
for (Uint32 i = 0; i < m_textures.size(); ++i) {
auto& tex = m_textures[i];
if (tex.texture == nullptr) {
if (!tex.texture) {
tex.texture = texture;
tex.version = texture->m_version;
tex.glTextureId = texId;

View File

@ -8,6 +8,158 @@
#include <SDL3/SDL.h>
#include <cstddef>
struct ScopedSurface {
SDL_Surface* ptr = nullptr;
~ScopedSurface()
{
if (ptr) {
SDL_DestroySurface(ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedTexture {
SDL_GPUDevice* dev;
SDL_GPUTexture* ptr = nullptr;
~ScopedTexture()
{
if (ptr) {
SDL_ReleaseGPUTexture(dev, ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedTransferBuffer {
SDL_GPUDevice* dev;
SDL_GPUTransferBuffer* ptr = nullptr;
~ScopedTransferBuffer()
{
if (ptr) {
SDL_ReleaseGPUTransferBuffer(dev, ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedDevice {
SDL_GPUDevice* ptr = nullptr;
~ScopedDevice()
{
if (ptr) {
SDL_DestroyGPUDevice(ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedPipeline {
SDL_GPUDevice* dev;
SDL_GPUGraphicsPipeline* ptr = nullptr;
~ScopedPipeline()
{
if (ptr) {
SDL_ReleaseGPUGraphicsPipeline(dev, ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedSampler {
SDL_GPUDevice* dev;
SDL_GPUSampler* ptr = nullptr;
~ScopedSampler()
{
if (ptr) {
SDL_ReleaseGPUSampler(dev, ptr);
}
}
void release() { ptr = nullptr; }
};
struct ScopedShader {
SDL_GPUDevice* dev;
SDL_GPUShader* ptr = nullptr;
~ScopedShader()
{
if (ptr) {
SDL_ReleaseGPUShader(dev, ptr);
}
}
void release() { ptr = nullptr; }
};
SDL_GPUTexture* CreateTextureFromSurface(
SDL_GPUDevice* device,
SDL_GPUTransferBuffer* transferBuffer,
SDL_Surface* surface
)
{
ScopedSurface surf{SDL_ConvertSurface(surface, SDL_PIXELFORMAT_ABGR8888)};
if (!surf.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_ConvertSurface (%s)", SDL_GetError());
return nullptr;
}
const Uint32 dataSize = surf.ptr->pitch * surf.ptr->h;
SDL_GPUTextureCreateInfo textureInfo = {};
textureInfo.type = SDL_GPU_TEXTURETYPE_2D;
textureInfo.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
textureInfo.usage = SDL_GPU_TEXTUREUSAGE_SAMPLER;
textureInfo.width = surf.ptr->w;
textureInfo.height = surf.ptr->h;
textureInfo.layer_count_or_depth = 1;
textureInfo.num_levels = 1;
ScopedTexture texture{device, SDL_CreateGPUTexture(device, &textureInfo)};
if (!texture.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUTexture (%s)", SDL_GetError());
return nullptr;
}
void* transferData = SDL_MapGPUTransferBuffer(device, transferBuffer, false);
if (!transferData) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_MapGPUTransferBuffer (%s)", SDL_GetError());
return nullptr;
}
memcpy(transferData, surf.ptr->pixels, dataSize);
SDL_UnmapGPUTransferBuffer(device, transferBuffer);
SDL_GPUTextureTransferInfo transferRegionInfo = {};
transferRegionInfo.transfer_buffer = transferBuffer;
SDL_GPUTextureRegion textureRegion = {};
textureRegion.texture = texture.ptr;
textureRegion.w = surf.ptr->w;
textureRegion.h = surf.ptr->h;
textureRegion.d = 1;
SDL_GPUCommandBuffer* cmdbuf = SDL_AcquireGPUCommandBuffer(device);
if (!cmdbuf) {
SDL_LogError(
LOG_CATEGORY_MINIWIN,
"SDL_AcquireGPUCommandBuffer in CreateTextureFromSurface failed (%s)",
SDL_GetError()
);
return nullptr;
}
SDL_GPUCopyPass* pass = SDL_BeginGPUCopyPass(cmdbuf);
SDL_UploadToGPUTexture(pass, &transferRegionInfo, &textureRegion, false);
SDL_EndGPUCopyPass(pass);
if (!SDL_SubmitGPUCommandBuffer(cmdbuf)) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_SubmitGPUCommandBuffer (%s)", SDL_GetError());
return nullptr;
}
auto texptr = texture.ptr;
// Release texture ownership so caller can manage it safely
texture.release();
return texptr;
}
static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device, bool depthWrite)
{
const SDL_GPUShaderCreateInfo* vertexCreateInfo =
@ -15,8 +167,8 @@ static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device
if (!vertexCreateInfo) {
return nullptr;
}
SDL_GPUShader* vertexShader = SDL_CreateGPUShader(device, vertexCreateInfo);
if (!vertexShader) {
ScopedShader vertexShader{device, SDL_CreateGPUShader(device, vertexCreateInfo)};
if (!vertexShader.ptr) {
return nullptr;
}
@ -25,8 +177,8 @@ static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device
if (!fragmentCreateInfo) {
return nullptr;
}
SDL_GPUShader* fragmentShader = SDL_CreateGPUShader(device, fragmentCreateInfo);
if (!fragmentShader) {
ScopedShader fragmentShader{device, SDL_CreateGPUShader(device, fragmentCreateInfo)};
if (!fragmentShader.ptr) {
return nullptr;
}
@ -34,7 +186,6 @@ static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device
vertexBufferDescs[0].slot = 0;
vertexBufferDescs[0].pitch = sizeof(D3DRMVERTEX);
vertexBufferDescs[0].input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX;
vertexBufferDescs[0].instance_step_rate = 0;
SDL_GPUVertexAttribute vertexAttrs[3] = {};
vertexAttrs[0].location = 0;
@ -50,7 +201,7 @@ static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device
vertexAttrs[2].location = 2;
vertexAttrs[2].buffer_slot = 0;
vertexAttrs[2].format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2;
vertexAttrs[2].offset = offsetof(D3DRMVERTEX, tv);
vertexAttrs[2].offset = offsetof(D3DRMVERTEX, texCoord);
SDL_GPUVertexInputState vertexInputState = {};
vertexInputState.vertex_buffer_descriptions = vertexBufferDescs;
@ -81,107 +232,155 @@ static SDL_GPUGraphicsPipeline* InitializeGraphicsPipeline(SDL_GPUDevice* device
rasterizerState.enable_depth_clip = true;
SDL_GPUGraphicsPipelineCreateInfo pipelineCreateInfo = {};
pipelineCreateInfo.rasterizer_state = rasterizerState;
pipelineCreateInfo.vertex_shader = vertexShader;
pipelineCreateInfo.fragment_shader = fragmentShader;
pipelineCreateInfo.vertex_shader = vertexShader.ptr;
pipelineCreateInfo.fragment_shader = fragmentShader.ptr;
pipelineCreateInfo.vertex_input_state = vertexInputState;
pipelineCreateInfo.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST;
pipelineCreateInfo.target_info.color_target_descriptions = &colorTargets;
pipelineCreateInfo.target_info.num_color_targets = 1;
pipelineCreateInfo.target_info.has_depth_stencil_target = true;
pipelineCreateInfo.target_info.depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM;
pipelineCreateInfo.rasterizer_state = rasterizerState;
pipelineCreateInfo.depth_stencil_state.compare_op = SDL_GPU_COMPAREOP_GREATER;
pipelineCreateInfo.depth_stencil_state.write_mask = 0xff;
pipelineCreateInfo.depth_stencil_state.enable_depth_test = true;
pipelineCreateInfo.depth_stencil_state.enable_depth_write = depthWrite;
pipelineCreateInfo.depth_stencil_state.enable_stencil_test = false;
pipelineCreateInfo.depth_stencil_state.compare_op = SDL_GPU_COMPAREOP_GREATER;
pipelineCreateInfo.depth_stencil_state.write_mask = 0xff;
pipelineCreateInfo.target_info.color_target_descriptions = &colorTargets;
pipelineCreateInfo.target_info.num_color_targets = 1;
pipelineCreateInfo.target_info.depth_stencil_format = SDL_GPU_TEXTUREFORMAT_D16_UNORM;
pipelineCreateInfo.target_info.has_depth_stencil_target = true;
SDL_GPUGraphicsPipeline* pipeline = SDL_CreateGPUGraphicsPipeline(device, &pipelineCreateInfo);
// Clean up shader resources
SDL_ReleaseGPUShader(device, vertexShader);
SDL_ReleaseGPUShader(device, fragmentShader);
return pipeline;
}
Direct3DRMRenderer* Direct3DRMSDL3GPURenderer::Create(DWORD width, DWORD height)
{
SDL_GPUDevice* device = SDL_CreateGPUDevice(
ScopedDevice device{SDL_CreateGPUDevice(
SDL_GPU_SHADERFORMAT_SPIRV | SDL_GPU_SHADERFORMAT_DXIL | SDL_GPU_SHADERFORMAT_MSL,
true,
NULL
);
if (device == NULL) {
nullptr
)};
if (!device.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUDevice failed (%s)", SDL_GetError());
return nullptr;
}
SDL_GPUGraphicsPipeline* opaquePipeline = InitializeGraphicsPipeline(device, true);
if (!opaquePipeline) {
ScopedPipeline opaquePipeline{device.ptr, InitializeGraphicsPipeline(device.ptr, true)};
if (!opaquePipeline.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "InitializeGraphicsPipeline for opaquePipeline");
return nullptr;
}
SDL_GPUGraphicsPipeline* transparentPipeline = InitializeGraphicsPipeline(device, false);
if (!transparentPipeline) {
SDL_ReleaseGPUGraphicsPipeline(device, opaquePipeline);
ScopedPipeline transparentPipeline{device.ptr, InitializeGraphicsPipeline(device.ptr, false)};
if (!transparentPipeline.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "InitializeGraphicsPipeline for transparentPipeline");
return nullptr;
}
SDL_GPUTextureCreateInfo textureInfo = {};
textureInfo.type = SDL_GPU_TEXTURETYPE_2D;
textureInfo.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM;
textureInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET;
textureInfo.width = width;
textureInfo.height = height;
textureInfo.layer_count_or_depth = 1;
textureInfo.num_levels = 1;
textureInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET;
SDL_GPUTexture* transferTexture = SDL_CreateGPUTexture(device, &textureInfo);
if (!transferTexture) {
SDL_ReleaseGPUGraphicsPipeline(device, opaquePipeline);
SDL_ReleaseGPUGraphicsPipeline(device, transparentPipeline);
textureInfo.sample_count = SDL_GPU_SAMPLECOUNT_1;
ScopedTexture transferTexture{device.ptr, SDL_CreateGPUTexture(device.ptr, &textureInfo)};
if (!transferTexture.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUTexture for backbuffer failed (%s)", SDL_GetError());
return nullptr;
}
SDL_GPUTextureCreateInfo depthTextureInfo = {};
depthTextureInfo.type = SDL_GPU_TEXTURETYPE_2D;
depthTextureInfo.format = SDL_GPU_TEXTUREFORMAT_D16_UNORM;
depthTextureInfo.width = width;
depthTextureInfo.height = height;
depthTextureInfo.layer_count_or_depth = 1;
depthTextureInfo.num_levels = 1;
depthTextureInfo.usage = SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET;
SDL_GPUTexture* depthTexture = SDL_CreateGPUTexture(device, &depthTextureInfo);
if (!depthTexture) {
SDL_ReleaseGPUGraphicsPipeline(device, opaquePipeline);
SDL_ReleaseGPUGraphicsPipeline(device, transparentPipeline);
SDL_ReleaseGPUTexture(device, transferTexture);
SDL_GPUTextureCreateInfo depthTexInfo = textureInfo;
depthTexInfo.format = SDL_GPU_TEXTUREFORMAT_D16_UNORM;
depthTexInfo.usage = SDL_GPU_TEXTUREUSAGE_DEPTH_STENCIL_TARGET;
ScopedTexture depthTexture{device.ptr, SDL_CreateGPUTexture(device.ptr, &depthTexInfo)};
if (!depthTexture.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUTexture for depth buffer (%s)", SDL_GetError());
return nullptr;
}
// Setup texture GPU-to-CPU transfer
SDL_GPUTransferBufferCreateInfo downloadTransferInfo = {};
downloadTransferInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_DOWNLOAD;
downloadTransferInfo.size = static_cast<Uint32>(width * height * 4);
SDL_GPUTransferBuffer* downloadTransferBuffer = SDL_CreateGPUTransferBuffer(device, &downloadTransferInfo);
if (!downloadTransferBuffer) {
SDL_ReleaseGPUGraphicsPipeline(device, opaquePipeline);
SDL_ReleaseGPUGraphicsPipeline(device, transparentPipeline);
SDL_ReleaseGPUTexture(device, depthTexture);
SDL_ReleaseGPUTexture(device, transferTexture);
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUTransferBuffer failed (%s)", SDL_GetError());
SDL_GPUTransferBufferCreateInfo downloadBufferInfo = {};
downloadBufferInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_DOWNLOAD;
downloadBufferInfo.size = width * height * 4;
ScopedTransferBuffer downloadBuffer{device.ptr, SDL_CreateGPUTransferBuffer(device.ptr, &downloadBufferInfo)};
if (!downloadBuffer.ptr) {
SDL_LogError(
LOG_CATEGORY_MINIWIN,
"SDL_CreateGPUTransferBuffer filed for download buffer (%s)",
SDL_GetError()
);
return nullptr;
}
return new Direct3DRMSDL3GPURenderer(
// Setup texture CPU-to-GPU transfer
SDL_GPUTransferBufferCreateInfo uploadBufferInfo = {};
uploadBufferInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
uploadBufferInfo.size = 256 * 256 * 4; // Largest known game texture
ScopedTransferBuffer uploadBuffer{device.ptr, SDL_CreateGPUTransferBuffer(device.ptr, &uploadBufferInfo)};
if (!uploadBuffer.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUTransferBuffer filed for upload buffer (%s)", SDL_GetError());
return nullptr;
}
SDL_Surface* dummySurface = SDL_CreateSurface(1, 1, SDL_PIXELFORMAT_ABGR8888);
if (!dummySurface) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "Failed to create surface: %s", SDL_GetError());
return nullptr;
}
if (!SDL_LockSurface(dummySurface)) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "Failed to lock surface: %s", SDL_GetError());
SDL_DestroySurface(dummySurface);
return nullptr;
}
((Uint32*) dummySurface->pixels)[0] = 0xFFFFFFFF;
ScopedTexture dummyTexture{device.ptr, CreateTextureFromSurface(device.ptr, uploadBuffer.ptr, dummySurface)};
SDL_DestroySurface(dummySurface);
if (!dummyTexture.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "Failed to create texture from surface");
return nullptr;
}
SDL_GPUSamplerCreateInfo samplerInfo = {};
samplerInfo.min_filter = SDL_GPU_FILTER_LINEAR;
samplerInfo.mag_filter = SDL_GPU_FILTER_LINEAR;
samplerInfo.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_LINEAR;
samplerInfo.address_mode_u = SDL_GPU_SAMPLERADDRESSMODE_REPEAT;
samplerInfo.address_mode_v = SDL_GPU_SAMPLERADDRESSMODE_REPEAT;
samplerInfo.address_mode_w = SDL_GPU_SAMPLERADDRESSMODE_REPEAT;
ScopedSampler sampler{device.ptr, SDL_CreateGPUSampler(device.ptr, &samplerInfo)};
if (!sampler.ptr) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "Failed to create sampler: %s", SDL_GetError());
return nullptr;
}
auto renderer = new Direct3DRMSDL3GPURenderer(
width,
height,
device,
opaquePipeline,
transparentPipeline,
transferTexture,
depthTexture,
downloadTransferBuffer
device.ptr,
opaquePipeline.ptr,
transparentPipeline.ptr,
transferTexture.ptr,
depthTexture.ptr,
dummyTexture.ptr,
sampler.ptr,
uploadBuffer.ptr,
downloadBuffer.ptr
);
// Release resources so they don't get cleaned up
device.release();
opaquePipeline.release();
transparentPipeline.release();
transferTexture.release();
depthTexture.release();
dummyTexture.release();
sampler.release();
uploadBuffer.release();
downloadBuffer.release();
return renderer;
}
Direct3DRMSDL3GPURenderer::Direct3DRMSDL3GPURenderer(
@ -192,19 +391,27 @@ Direct3DRMSDL3GPURenderer::Direct3DRMSDL3GPURenderer(
SDL_GPUGraphicsPipeline* transparentPipeline,
SDL_GPUTexture* transferTexture,
SDL_GPUTexture* depthTexture,
SDL_GPUTransferBuffer* downloadTransferBuffer
SDL_GPUTexture* dummyTexture,
SDL_GPUSampler* sampler,
SDL_GPUTransferBuffer* uploadBuffer,
SDL_GPUTransferBuffer* downloadBuffer
)
: m_width(width), m_height(height), m_device(device), m_opaquePipeline(opaquePipeline),
m_transparentPipeline(transparentPipeline), m_transferTexture(transferTexture), m_depthTexture(depthTexture),
m_downloadTransferBuffer(downloadTransferBuffer)
m_dummyTexture(dummyTexture), m_sampler(sampler), m_uploadBuffer(uploadBuffer), m_downloadBuffer(downloadBuffer)
{
}
Direct3DRMSDL3GPURenderer::~Direct3DRMSDL3GPURenderer()
{
SDL_ReleaseGPUBuffer(m_device, m_vertexBuffer);
SDL_ReleaseGPUTransferBuffer(m_device, m_downloadTransferBuffer);
SDL_ReleaseGPUTransferBuffer(m_device, m_downloadBuffer);
if (m_uploadBuffer) {
SDL_ReleaseGPUTransferBuffer(m_device, m_uploadBuffer);
}
SDL_ReleaseGPUSampler(m_device, m_sampler);
SDL_ReleaseGPUTexture(m_device, m_dummyTexture);
SDL_ReleaseGPUTexture(m_device, m_depthTexture);
SDL_ReleaseGPUBuffer(m_device, m_vertexBuffer);
SDL_ReleaseGPUTexture(m_device, m_transferTexture);
SDL_ReleaseGPUGraphicsPipeline(m_device, m_opaquePipeline);
SDL_ReleaseGPUGraphicsPipeline(m_device, m_transparentPipeline);
@ -228,9 +435,67 @@ void Direct3DRMSDL3GPURenderer::SetProjection(const D3DRMMATRIX4D& projection, D
memcpy(&m_uniforms.projection, projection, sizeof(D3DRMMATRIX4D));
}
Uint32 Direct3DRMSDL3GPURenderer::GetTextureId(IDirect3DRMTexture* texture)
struct SDLTextureDestroyContext {
Direct3DRMSDL3GPURenderer* renderer;
Uint32 id;
};
void Direct3DRMSDL3GPURenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture)
{
return NO_TEXTURE_ID;
auto* ctx = new SDLTextureDestroyContext{this, id};
texture->AddDestroyCallback(
[](IDirect3DRMObject*, void* arg) {
auto* ctx = static_cast<SDLTextureDestroyContext*>(arg);
auto& cache = ctx->renderer->m_textures[ctx->id];
if (cache.gpuTexture) {
SDL_ReleaseGPUTexture(ctx->renderer->m_device, cache.gpuTexture);
cache.gpuTexture = nullptr;
cache.texture = nullptr;
}
delete ctx;
},
ctx
);
}
Uint32 Direct3DRMSDL3GPURenderer::GetTextureId(IDirect3DRMTexture* iTexture)
{
auto texture = static_cast<Direct3DRMTextureImpl*>(iTexture);
auto surface = static_cast<DirectDrawSurfaceImpl*>(texture->m_surface);
SDL_Surface* surf = surface->m_surface;
for (Uint32 i = 0; i < m_textures.size(); ++i) {
auto& tex = m_textures[i];
if (tex.texture == texture) {
if (tex.version != texture->m_version) {
SDL_ReleaseGPUTexture(m_device, tex.gpuTexture);
tex.gpuTexture = CreateTextureFromSurface(m_device, GetUploadBuffer(surf->w * surf->h * 4), surf);
if (!tex.gpuTexture) {
return NO_TEXTURE_ID;
}
tex.version = texture->m_version;
}
return i;
}
}
SDL_GPUTexture* newTex = CreateTextureFromSurface(m_device, GetUploadBuffer(surf->w * surf->h * 4), surf);
if (!newTex) {
return NO_TEXTURE_ID;
}
for (Uint32 i = 0; i < m_textures.size(); ++i) {
auto& tex = m_textures[i];
if (!tex.texture) {
tex = {texture, texture->m_version, newTex};
AddTextureDestroyCallback(i, texture);
return i;
}
}
m_textures.push_back({texture, texture->m_version, newTex});
AddTextureDestroyCallback((Uint32) (m_textures.size() - 1), texture);
return (Uint32) (m_textures.size() - 1);
}
DWORD Direct3DRMSDL3GPURenderer::GetWidth()
@ -277,12 +542,12 @@ HRESULT Direct3DRMSDL3GPURenderer::BeginFrame(const D3DRMMATRIX4D& viewMatrix)
SDL_GPUDepthStencilTargetInfo depthStencilTargetInfo = {};
depthStencilTargetInfo.texture = m_depthTexture;
depthStencilTargetInfo.clear_depth = 0.f;
depthStencilTargetInfo.clear_depth = 0.0f;
depthStencilTargetInfo.load_op = SDL_GPU_LOADOP_CLEAR;
SDL_GPUCommandBuffer* cmdbuf = SDL_AcquireGPUCommandBuffer(m_device);
if (!cmdbuf) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer failed (%s)", SDL_GetError());
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer in BeginFrame failed (%s)", SDL_GetError());
return DDERR_GENERIC;
}
@ -297,6 +562,42 @@ HRESULT Direct3DRMSDL3GPURenderer::BeginFrame(const D3DRMMATRIX4D& viewMatrix)
return DD_OK;
}
void PackNormalMatrix(const Matrix3x3& normalMatrix3x3, D3DRMMATRIX4D& packedNormalMatrix4x4)
{
for (int row = 0; row < 3; ++row) {
for (int col = 0; col < 3; ++col) {
packedNormalMatrix4x4[col][row] = normalMatrix3x3[row][col];
}
packedNormalMatrix4x4[3][row] = 0.0f;
}
for (int col = 0; col < 4; ++col) {
packedNormalMatrix4x4[col][3] = 0.0f;
}
}
SDL_GPUTransferBuffer* Direct3DRMSDL3GPURenderer::GetUploadBuffer(size_t size)
{
if (m_uploadBufferSize < size) {
SDL_ReleaseGPUTransferBuffer(m_device, m_uploadBuffer);
SDL_GPUTransferBufferCreateInfo transferCreateInfo = {};
transferCreateInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
transferCreateInfo.size = size;
m_uploadBuffer = SDL_CreateGPUTransferBuffer(m_device, &transferCreateInfo);
if (!m_uploadBuffer) {
m_uploadBufferSize = 0;
SDL_LogError(
LOG_CATEGORY_MINIWIN,
"SDL_CreateGPUTransferBuffer failed for updating upload buffer (%s)",
SDL_GetError()
);
}
m_uploadBufferSize = size;
}
return m_uploadBuffer;
}
void Direct3DRMSDL3GPURenderer::SubmitDraw(
const D3DRMVERTEX* vertices,
const size_t count,
@ -308,6 +609,7 @@ void Direct3DRMSDL3GPURenderer::SubmitDraw(
D3DRMMATRIX4D worldViewMatrix;
MultiplyMatrix(worldViewMatrix, worldMatrix, m_viewMatrix);
memcpy(&m_uniforms.worldViewMatrix, worldViewMatrix, sizeof(D3DRMMATRIX4D));
PackNormalMatrix(normalMatrix, m_uniforms.normalMatrix);
m_fragmentShadingData.color = appearance.color;
m_fragmentShadingData.shininess = appearance.shininess;
@ -320,58 +622,43 @@ void Direct3DRMSDL3GPURenderer::SubmitDraw(
bufferCreateInfo.size = static_cast<Uint32>(sizeof(D3DRMVERTEX) * count);
m_vertexBuffer = SDL_CreateGPUBuffer(m_device, &bufferCreateInfo);
if (!m_vertexBuffer) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUBuffer returned NULL buffer (%s)", SDL_GetError());
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_CreateGPUBuffer failed (%s)", SDL_GetError());
}
m_vertexBufferCount = count;
}
m_vertexCount = count;
if (!count) {
SDL_GPUTransferBuffer* uploadBuffer = GetUploadBuffer(sizeof(D3DRMVERTEX) * m_vertexCount);
if (!uploadBuffer) {
return;
}
D3DRMVERTEX* transferData = (D3DRMVERTEX*) SDL_MapGPUTransferBuffer(m_device, uploadBuffer, false);
if (!transferData) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_MapGPUTransferBuffer returned NULL buffer (%s)", SDL_GetError());
return;
}
SDL_GPUTransferBufferCreateInfo transferCreateInfo = {};
transferCreateInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
transferCreateInfo.size = static_cast<Uint32>(sizeof(D3DRMVERTEX) * m_vertexCount);
SDL_GPUTransferBuffer* transferBuffer = SDL_CreateGPUTransferBuffer(m_device, &transferCreateInfo);
if (!transferBuffer) {
SDL_LogError(
LOG_CATEGORY_MINIWIN,
"SDL_CreateGPUTransferBuffer returned NULL transfer buffer (%s)",
SDL_GetError()
);
}
D3DRMVERTEX* transferData = (D3DRMVERTEX*) SDL_MapGPUTransferBuffer(m_device, transferBuffer, false);
if (!transferData) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_MapGPUTransferBuffer returned NULL buffer (%s)", SDL_GetError());
}
memcpy(transferData, vertices, m_vertexCount * sizeof(D3DRMVERTEX));
SDL_UnmapGPUTransferBuffer(m_device, transferBuffer);
SDL_UnmapGPUTransferBuffer(m_device, uploadBuffer);
// Upload the transfer data to the vertex buffer
SDL_GPUCommandBuffer* cmdbuf = SDL_AcquireGPUCommandBuffer(m_device);
if (!cmdbuf) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer failed (%s)", SDL_GetError());
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer in SubmitDraw failed (%s)", SDL_GetError());
return;
}
SDL_GPUCopyPass* copyPass = SDL_BeginGPUCopyPass(cmdbuf);
SDL_GPUTransferBufferLocation transferLocation = {};
transferLocation.transfer_buffer = transferBuffer;
transferLocation.offset = 0;
transferLocation.transfer_buffer = uploadBuffer;
SDL_GPUBufferRegion bufferRegion = {};
bufferRegion.buffer = m_vertexBuffer;
bufferRegion.offset = 0;
bufferRegion.size = static_cast<Uint32>(sizeof(D3DRMVERTEX) * m_vertexCount);
SDL_UploadToGPUBuffer(copyPass, &transferLocation, &bufferRegion, false);
SDL_EndGPUCopyPass(copyPass);
SDL_ReleaseGPUTransferBuffer(m_device, transferBuffer);
// Render the graphics
SDL_GPUColorTargetInfo colorTargetInfo = {};
@ -386,6 +673,13 @@ void Direct3DRMSDL3GPURenderer::SubmitDraw(
SDL_GPURenderPass* renderPass = SDL_BeginGPURenderPass(cmdbuf, &colorTargetInfo, 1, &depthStencilTargetInfo);
SDL_BindGPUGraphicsPipeline(renderPass, appearance.color.a == 255 ? m_opaquePipeline : m_transparentPipeline);
m_fragmentShadingData.useTexture = appearance.textureId != NO_TEXTURE_ID;
SDL_GPUTextureSamplerBinding samplerBinding = {};
samplerBinding.texture =
m_fragmentShadingData.useTexture ? m_textures[appearance.textureId].gpuTexture : m_dummyTexture;
samplerBinding.sampler = m_sampler;
SDL_BindGPUFragmentSamplers(renderPass, 0, &samplerBinding, 1);
SDL_PushGPUVertexUniformData(cmdbuf, 0, &m_uniforms, sizeof(m_uniforms));
SDL_PushGPUFragmentUniformData(cmdbuf, 0, &m_fragmentShadingData, sizeof(m_fragmentShadingData));
@ -399,49 +693,54 @@ void Direct3DRMSDL3GPURenderer::SubmitDraw(
SDL_EndGPURenderPass(renderPass);
if (!SDL_SubmitGPUCommandBuffer(cmdbuf)) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_SubmitGPUCommandBuffer failes (%s)", SDL_GetError());
SDL_GPUFence* fence = SDL_SubmitGPUCommandBufferAndAcquireFence(cmdbuf);
if (!fence || !SDL_WaitForGPUFences(m_device, true, &fence, 1)) {
if (fence) {
SDL_ReleaseGPUFence(m_device, fence);
}
return;
}
SDL_ReleaseGPUFence(m_device, fence);
}
HRESULT Direct3DRMSDL3GPURenderer::FinalizeFrame()
{
SDL_GPUCommandBuffer* cmdbuf = SDL_AcquireGPUCommandBuffer(m_device);
if (cmdbuf == NULL) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer failed (%s)", SDL_GetError());
return DDERR_GENERIC;
}
// Download rendered image
SDL_GPUCopyPass* copyPass = SDL_BeginGPUCopyPass(cmdbuf);
SDL_GPUTextureRegion region = {};
region.texture = m_transferTexture;
region.w = m_width;
region.h = m_height;
region.d = 1;
SDL_GPUTextureTransferInfo transferInfo = {};
transferInfo.transfer_buffer = m_downloadTransferBuffer;
transferInfo.offset = 0;
transferInfo.transfer_buffer = m_downloadBuffer;
SDL_GPUCommandBuffer* cmdbuf = SDL_AcquireGPUCommandBuffer(m_device);
if (!cmdbuf) {
SDL_LogError(LOG_CATEGORY_MINIWIN, "SDL_AcquireGPUCommandBuffer in FinalizeFrame failed (%s)", SDL_GetError());
return DDERR_GENERIC;
}
SDL_GPUCopyPass* copyPass = SDL_BeginGPUCopyPass(cmdbuf);
SDL_DownloadFromGPUTexture(copyPass, &region, &transferInfo);
SDL_EndGPUCopyPass(copyPass);
SDL_GPUFence* fence = SDL_SubmitGPUCommandBufferAndAcquireFence(cmdbuf);
if (!SDL_WaitForGPUFences(m_device, true, &fence, 1)) {
if (!fence || !SDL_WaitForGPUFences(m_device, true, &fence, 1)) {
if (fence) {
SDL_ReleaseGPUFence(m_device, fence);
}
return DDERR_GENERIC;
}
SDL_ReleaseGPUFence(m_device, fence);
void* downloadedData = SDL_MapGPUTransferBuffer(m_device, m_downloadTransferBuffer, false);
void* downloadedData = SDL_MapGPUTransferBuffer(m_device, m_downloadBuffer, false);
if (!downloadedData) {
return DDERR_GENERIC;
}
SDL_DestroySurface(m_renderedImage);
m_renderedImage = SDL_CreateSurfaceFrom(m_width, m_height, SDL_PIXELFORMAT_ABGR8888, downloadedData, m_width * 4);
SDL_Surface* convertedRender = SDL_ConvertSurface(m_renderedImage, SDL_PIXELFORMAT_RGBA8888);
SDL_DestroySurface(m_renderedImage);
SDL_UnmapGPUTransferBuffer(m_device, m_downloadTransferBuffer);
m_renderedImage = convertedRender;
SDL_BlitSurface(m_renderedImage, nullptr, DDBackBuffer, nullptr);
SDL_Surface* renderedImage =
SDL_CreateSurfaceFrom(m_width, m_height, SDL_PIXELFORMAT_ABGR8888, downloadedData, m_width * 4);
SDL_BlitSurface(renderedImage, nullptr, DDBackBuffer, nullptr);
SDL_DestroySurface(renderedImage);
SDL_UnmapGPUTransferBuffer(m_device, m_downloadBuffer);
return DD_OK;
}

View File

@ -10,11 +10,11 @@
// DXIL only makes sense on Windows platforms
#if defined(SDL_PLATFORM_WINDOWS)
static const Uint8 PositionColor_vert_dxil[4724] = {
0x44, 0x58, 0x42, 0x43, 0x90, 0xb8, 0x23, 0x65, 0xe9, 0x7d, 0x7d, 0xb6, 0xd3, 0x7b, 0x28, 0xc6,
0x2f, 0x0e, 0x0b, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x74, 0x12, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
static const Uint8 PositionColor_vert_dxil[5124] = {
0x44, 0x58, 0x42, 0x43, 0x93, 0x7a, 0xa7, 0xae, 0x9e, 0x1a, 0x88, 0x7f, 0x74, 0x8a, 0x83, 0x33,
0xcb, 0xfe, 0xed, 0xa8, 0x01, 0x00, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00,
0xc4, 0x02, 0x00, 0x00, 0x9c, 0x09, 0x00, 0x00, 0xb8, 0x09, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30,
0xc4, 0x02, 0x00, 0x00, 0x14, 0x0a, 0x00, 0x00, 0x30, 0x0a, 0x00, 0x00, 0x53, 0x46, 0x49, 0x30,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31,
0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
@ -53,11 +53,11 @@ static const Uint8 PositionColor_vert_dxil[4724] = {
0x03, 0x02, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x43, 0x00,
0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x44, 0x03,
0x03, 0x04, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xd0, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00,
0xb4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0xb8, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x48, 0x07, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00,
0xd2, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x30, 0x07, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xc9, 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,
@ -67,162 +67,172 @@ static const Uint8 PositionColor_vert_dxil[4724] = {
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, 0x26, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09,
0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x29, 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,
0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x78, 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, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95,
0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42,
0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0xad, 0x14, 0x83, 0x8c,
0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e, 0x04, 0x0c, 0x23, 0x10,
0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a, 0xf2, 0x27, 0xec, 0x21,
0xfe, 0x17, 0x21, 0xac, 0xc7, 0x89, 0x26, 0xb7, 0x41, 0x0a, 0x27, 0x62, 0x24, 0x24, 0x58, 0x4b,
0x37, 0x19, 0x08, 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, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x16, 0x08, 0x00,
0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47,
0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x05, 0x28, 0x50, 0x04, 0x85, 0x50, 0x06,
0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x1e, 0xc5, 0x51, 0xac, 0x01, 0x05, 0x51, 0x18, 0x54, 0x4a,
0x62, 0x04, 0xa0, 0x0c, 0x8a, 0xa0, 0x10, 0x28, 0xd6, 0x00, 0xdd, 0x19, 0x00, 0xc2, 0x33, 0x00,
0x94, 0xc7, 0x62, 0x14, 0x08, 0xc4, 0xfb, 0x00, 0xc4, 0xfb, 0x00, 0xc4, 0xfb, 0x00, 0x08, 0x04,
0x02, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xa6, 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, 0x05, 0x46,
0xac, 0x2c, 0x2c, 0xec, 0xc6, 0xe6, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x08, 0x63, 0x82, 0x40,
0x1c, 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x05, 0xbb, 0xb9, 0x09, 0x02, 0x81, 0x6c, 0x18,
0x0e, 0x84, 0x98, 0x20, 0x60, 0x1c, 0x2b, 0xba, 0x3c, 0xb8, 0xb2, 0x2f, 0xab, 0xb4, 0xb2, 0x3b,
0xb8, 0x37, 0x39, 0xba, 0x2a, 0xb7, 0x34, 0xb3, 0x37, 0xb9, 0xb6, 0xb9, 0x09, 0x02, 0x91, 0x6c,
0x40, 0x08, 0x65, 0x19, 0x88, 0x81, 0x01, 0x36, 0x04, 0xcd, 0x06, 0x02, 0x00, 0x1c, 0x60, 0x82,
0x70, 0x6d, 0xdc, 0xac, 0xd2, 0xca, 0xee, 0xe0, 0xde, 0xe4, 0xe8, 0xaa, 0xdc, 0xd2, 0xcc, 0xde,
0xe4, 0xda, 0xe6, 0xbe, 0xe0, 0xe4, 0xde, 0xd4, 0xca, 0xc6, 0xe8, 0xd2, 0xde, 0xdc, 0x26, 0x08,
0x84, 0x32, 0x41, 0x20, 0x96, 0x0d, 0xc3, 0x34, 0x49, 0x13, 0x04, 0x82, 0x99, 0x20, 0x10, 0xcd,
0x04, 0x81, 0x70, 0x26, 0x08, 0x91, 0xb6, 0x41, 0x41, 0x22, 0x89, 0xaa, 0x08, 0xeb, 0xba, 0x30,
0x6e, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
0x73, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x13, 0x04, 0xe2, 0xd9,
0xa0, 0x20, 0x9a, 0x44, 0x55, 0x9b, 0x75, 0x5d, 0xd8, 0x86, 0x81, 0xc9, 0xb8, 0x0d, 0x03, 0x01,
0x75, 0x13, 0x04, 0x01, 0xd8, 0x00, 0x6c, 0x18, 0x08, 0x30, 0x00, 0x83, 0x0d, 0x41, 0x18, 0x6c,
0x18, 0x86, 0x4f, 0x0c, 0x26, 0x08, 0x59, 0xb7, 0x21, 0x20, 0x03, 0x12, 0x6d, 0x61, 0x69, 0x6e,
0x44, 0xa8, 0x8a, 0xb0, 0x86, 0x9e, 0x9e, 0xa4, 0x88, 0x26, 0x08, 0x45, 0x35, 0x41, 0x28, 0xac,
0x0d, 0x01, 0x31, 0x41, 0x28, 0xae, 0x0d, 0x42, 0x65, 0x6d, 0x58, 0x88, 0x33, 0x40, 0x83, 0x34,
0x50, 0x83, 0x34, 0x18, 0xd6, 0x80, 0x48, 0x03, 0x36, 0xd8, 0x10, 0x0c, 0x1b, 0x96, 0xe1, 0x0c,
0xd0, 0x20, 0x0d, 0xdc, 0x20, 0x0d, 0x86, 0x35, 0x18, 0xd2, 0x80, 0x0d, 0x36, 0x04, 0xd2, 0x04,
0xa1, 0xc0, 0x36, 0x08, 0x55, 0xb5, 0x61, 0x91, 0xce, 0x00, 0x0d, 0xd2, 0x00, 0x0e, 0xd2, 0x60,
0x88, 0x03, 0x29, 0x0d, 0xe4, 0x60, 0xc3, 0xd0, 0x06, 0x6f, 0x30, 0x07, 0x1b, 0x16, 0xe2, 0x0c,
0xd0, 0x20, 0x0d, 0xd4, 0x20, 0x0e, 0x86, 0x35, 0x20, 0xd2, 0x80, 0x0d, 0x36, 0x2c, 0xc3, 0x19,
0xa0, 0x41, 0x1a, 0xb8, 0x41, 0x1c, 0x0c, 0x71, 0x30, 0xa4, 0x81, 0x1c, 0x6c, 0x58, 0xa4, 0x33,
0x40, 0x83, 0x34, 0x80, 0x83, 0x38, 0x18, 0xd6, 0x40, 0x4a, 0x03, 0x36, 0xe0, 0x32, 0x65, 0xf5,
0x05, 0xf5, 0x36, 0x97, 0x46, 0x97, 0xf6, 0xe6, 0x36, 0x41, 0x28, 0xb2, 0x09, 0x02, 0x01, 0x6d,
0x10, 0x2a, 0x3d, 0xd8, 0xb0, 0x54, 0x78, 0x80, 0x06, 0x6b, 0xa0, 0x06, 0x79, 0x30, 0xe4, 0x41,
0x95, 0x06, 0x7b, 0xb0, 0x81, 0xa8, 0x03, 0x3b, 0xb8, 0x03, 0x3e, 0xd8, 0x30, 0xd0, 0x41, 0x1f,
0x00, 0x1b, 0x8a, 0xcf, 0x0c, 0xfc, 0xe0, 0x01, 0x68, 0x98, 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0x4d,
0x10, 0x88, 0x88, 0x45, 0x9a, 0xdb, 0x1c, 0xdd, 0xdc, 0x04, 0x81, 0x90, 0x68, 0xcc, 0xa5, 0x9d,
0x7d, 0xb1, 0x91, 0x4d, 0x10, 0x88, 0x89, 0xc6, 0x5c, 0xda, 0xd9, 0xd7, 0x1c, 0xdd, 0x04, 0x81,
0xa0, 0x36, 0x20, 0xa0, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4, 0x50, 0x0a, 0xa6, 0x70, 0x0a, 0x55,
0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c,
0x17, 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, 0xcf, 0xc5, 0x2e,
0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, 0xc3, 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b,
0x93, 0x6b, 0x7a, 0x23, 0x2b, 0x63, 0x9b, 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6,
0xde, 0xea, 0xe4, 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, 0xba, 0x3c, 0xb8,
0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, 0x37, 0xb7, 0xb9, 0x29, 0x42, 0x27, 0x06,
0x75, 0xc8, 0xf0, 0x5c, 0xec, 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6,
0x04, 0x64, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, 0x2d, 0xcd, 0x8d,
0x6e, 0x6e, 0x4a, 0xe0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, 0xc6, 0xde, 0xea, 0xdc, 0xe8, 0xca, 0xe4,
0xe6, 0xa6, 0x04, 0xa7, 0x00, 0x00, 0x00, 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, 0x18, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10,
0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05,
0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0,
0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09,
0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc,
0xb6, 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 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, 0x69, 0xf8, 0xd8, 0x30, 0xc0, 0xc0, 0x66, 0x9f,
0xb9, 0xf5, 0x62, 0xf4, 0xcf, 0x36, 0xe2, 0x37, 0x44, 0x58, 0x49, 0x4c, 0xb4, 0x08, 0x00, 0x00,
0x60, 0x00, 0x01, 0x00, 0x2d, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x9c, 0x08, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00,
0x24, 0x02, 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, 0x26, 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, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c,
0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e,
0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42,
0xad, 0x14, 0x83, 0x8c, 0x31, 0xe8, 0xcd, 0x11, 0x04, 0xc5, 0x60, 0xa4, 0x10, 0x12, 0x49, 0x0e,
0x04, 0x0c, 0x23, 0x10, 0x43, 0x12, 0xd4, 0x03, 0x83, 0xc3, 0x91, 0xa6, 0x05, 0xc0, 0x1c, 0x6a,
0xf2, 0x27, 0xec, 0x21, 0xfe, 0x17, 0x21, 0xac, 0xc7, 0x89, 0x26, 0xb7, 0x41, 0x0a, 0x27, 0x62,
0x24, 0x24, 0x58, 0x4b, 0x37, 0x19, 0x08, 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, 0x00, 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, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0xc8, 0x23, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x16, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
0x10, 0x52, 0x06, 0xa1, 0x82, 0x0c, 0x32, 0xc6, 0x18, 0x63, 0x90, 0x2a, 0xc3, 0x20, 0x83, 0xd8,
0x51, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb,
0x88, 0x18, 0x63, 0x0c, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c,
0x0b, 0x81, 0x82, 0x57, 0x08, 0x47, 0x20, 0xa1, 0x58, 0x8a, 0x41, 0xc6, 0x18, 0x34, 0xe7, 0x08,
0x82, 0x62, 0x40, 0x52, 0x08, 0xa9, 0x64, 0x07, 0x02, 0x86, 0x11, 0x88, 0x21, 0x09, 0xf2, 0x81,
0xc1, 0xe1, 0x48, 0xd3, 0x02, 0x60, 0x0e, 0x35, 0xf9, 0x13, 0xf6, 0x10, 0xff, 0x8b, 0x10, 0xd6,
0xe3, 0x44, 0x93, 0xdb, 0x20, 0x85, 0x13, 0x31, 0x12, 0x1a, 0xb4, 0xd6, 0xb4, 0x93, 0x81, 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, 0x28, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4,
0x61, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01, 0x01,
0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x59, 0x20, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18,
0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50,
0x0c, 0x05, 0x38, 0x50, 0x04, 0x85, 0x50, 0x06, 0xe5, 0x50, 0x12, 0x05, 0x18, 0x50, 0x80, 0x02,
0xe5, 0x51, 0x2c, 0x05, 0x1e, 0x50, 0x10, 0x85, 0x41, 0xa5, 0x24, 0x46, 0x00, 0xca, 0xa0, 0x08,
0x0a, 0x81, 0x6a, 0x0d, 0xd0, 0x9e, 0x01, 0x20, 0x3e, 0x03, 0x40, 0x7d, 0x2c, 0x46, 0x81, 0x40,
0xbc, 0x0f, 0x40, 0xbc, 0x0f, 0x40, 0xbc, 0x0f, 0x80, 0xe3, 0x38, 0x00, 0x08, 0x0c, 0x00, 0x00,
0x79, 0x18, 0x00, 0x00, 0xb3, 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, 0x05, 0x46, 0xac, 0x2c, 0x2c, 0xec, 0xc6, 0xe6, 0x26, 0x65,
0x43, 0x10, 0x4c, 0x10, 0x08, 0x64, 0x82, 0x40, 0x24, 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04,
0x05, 0xbb, 0xb9, 0x09, 0x02, 0xa1, 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x70, 0x1f, 0x2b, 0xba,
0x3c, 0xb8, 0xb2, 0x2f, 0xab, 0xb4, 0xb2, 0x3b, 0xb8, 0x37, 0x39, 0xba, 0x2a, 0xb7, 0x34, 0xb3,
0x37, 0xb9, 0xb6, 0xb9, 0x09, 0x02, 0xb1, 0x6c, 0x40, 0x08, 0x65, 0x19, 0x88, 0x81, 0x01, 0x36,
0x04, 0xcd, 0x06, 0x02, 0x00, 0x1c, 0x60, 0x82, 0xb0, 0x79, 0xdc, 0xac, 0xd2, 0xca, 0xee, 0xe0,
0xde, 0xe4, 0xe8, 0xaa, 0xdc, 0xd2, 0xcc, 0xde, 0xe4, 0xda, 0xe6, 0xbe, 0xe0, 0xe4, 0xde, 0xd4,
0xca, 0xc6, 0xe8, 0xd2, 0xde, 0xdc, 0x26, 0x08, 0x04, 0x33, 0x41, 0x20, 0x9a, 0x0d, 0xc3, 0x34,
0x49, 0x13, 0x04, 0xc2, 0x99, 0x20, 0x10, 0xcf, 0x04, 0x81, 0x80, 0x26, 0x08, 0x55, 0xb7, 0x41,
0x41, 0x22, 0x89, 0xaa, 0x08, 0xeb, 0xba, 0x30, 0x82, 0x81, 0x55, 0x5a, 0xd9, 0x1d, 0xdc, 0x9b,
0x1c, 0x5d, 0x95, 0x5b, 0x9a, 0xd9, 0x9b, 0x5c, 0xdb, 0xdc, 0xd7, 0xdd, 0x9b, 0x1c, 0x1b, 0x99,
0x55, 0x5a, 0xd9, 0x5d, 0x53, 0x18, 0x9d, 0x5c, 0x1a, 0xde, 0x04, 0x81, 0x88, 0x36, 0x28, 0x88,
0x26, 0x51, 0xd5, 0x66, 0x5d, 0x17, 0xc6, 0xce, 0x2a, 0xad, 0xec, 0x0e, 0xee, 0x4d, 0x8e, 0xae,
0xca, 0x2d, 0xcd, 0xec, 0x4d, 0xae, 0x6d, 0xee, 0xcb, 0xed, 0x4d, 0xae, 0x2d, 0x8c, 0xad, 0x29,
0x8c, 0x4e, 0x2e, 0x0d, 0x6f, 0x82, 0x40, 0x48, 0x1b, 0x14, 0xa4, 0x93, 0xa8, 0xca, 0xb3, 0xae,
0x0b, 0xdb, 0x40, 0x30, 0x19, 0xf7, 0x6d, 0x18, 0x08, 0x08, 0x0c, 0x26, 0x08, 0x02, 0xb0, 0x01,
0xd8, 0x30, 0x10, 0x63, 0x30, 0x06, 0x1b, 0x02, 0x32, 0xd8, 0x30, 0x0c, 0x62, 0x50, 0x06, 0x13,
0x84, 0x0e, 0x0c, 0x36, 0x04, 0x67, 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0x08, 0x55, 0x11, 0xd6,
0xd0, 0xd3, 0x93, 0x14, 0xd1, 0x04, 0xa1, 0xc0, 0x26, 0x08, 0x45, 0xb6, 0x21, 0x20, 0x26, 0x08,
0x85, 0xb6, 0x41, 0xa8, 0xac, 0x0d, 0x0b, 0xa1, 0x06, 0x6b, 0xc0, 0x06, 0x6d, 0xc0, 0x06, 0x83,
0x1b, 0x10, 0x6c, 0xf0, 0x06, 0x1b, 0x82, 0x61, 0xc3, 0x32, 0xa8, 0xc1, 0x1a, 0xb0, 0x41, 0x1c,
0xb0, 0xc1, 0xe0, 0x06, 0x03, 0x1b, 0xbc, 0xc1, 0x86, 0x40, 0x9a, 0x20, 0x14, 0xdb, 0x06, 0xa1,
0xaa, 0x36, 0x2c, 0x92, 0x1a, 0xac, 0x01, 0x1b, 0xcc, 0x01, 0x1b, 0x0c, 0x74, 0x20, 0xb1, 0x41,
0x1d, 0x6c, 0x18, 0xe0, 0x40, 0x0e, 0xec, 0x60, 0xc3, 0x42, 0xa8, 0xc1, 0x1a, 0xb0, 0x41, 0x1b,
0xd0, 0xc1, 0xe0, 0x06, 0x04, 0x1b, 0xbc, 0xc1, 0x86, 0x65, 0x50, 0x83, 0x35, 0x60, 0x83, 0x38,
0xa0, 0x83, 0x81, 0x0e, 0x06, 0x36, 0xa8, 0x83, 0x0d, 0x8b, 0xa4, 0x06, 0x6b, 0xc0, 0x06, 0x73,
0x40, 0x07, 0x83, 0x1b, 0x48, 0x6c, 0xf0, 0x06, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0xde, 0xe6, 0xd2,
0xe8, 0xd2, 0xde, 0xdc, 0x26, 0x08, 0x05, 0x37, 0x41, 0x20, 0xa6, 0x0d, 0x42, 0xd5, 0x07, 0x1b,
0x96, 0x6a, 0x0f, 0xd6, 0xc0, 0x0d, 0xda, 0x80, 0x0f, 0x06, 0x3e, 0xa8, 0xd8, 0xc0, 0x0f, 0x36,
0x10, 0x78, 0x90, 0x07, 0x7a, 0xf0, 0x07, 0x1b, 0x86, 0x3b, 0x00, 0x05, 0x60, 0x43, 0x21, 0x06,
0x69, 0x10, 0x0a, 0x0f, 0x40, 0xc3, 0x8c, 0xed, 0x2d, 0x8c, 0x6e, 0x6e, 0x82, 0x40, 0x50, 0x2c,
0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x26, 0x08, 0x44, 0x45, 0x63, 0x2e, 0xed, 0xec, 0x8b, 0x8d, 0x6c,
0x82, 0x40, 0x58, 0x34, 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x26, 0x08, 0xc4, 0xb5, 0x01, 0x19,
0x05, 0x52, 0x28, 0x05, 0x53, 0x38, 0x05, 0x54, 0x48, 0x05, 0x55, 0xa8, 0xc2, 0xc6, 0x66, 0xd7,
0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9,
0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65,
0x72, 0x53, 0x82, 0xa2, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b,
0x59, 0x19, 0xdb, 0x94, 0x00, 0x29, 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37,
0x56, 0x36, 0x37, 0x25, 0x70, 0x2a, 0x91, 0xe1, 0xb9, 0xd0, 0xe5, 0xc1, 0x95, 0x05, 0xb9, 0xb9,
0xbd, 0xd1, 0x85, 0xd1, 0xa5, 0xbd, 0xb9, 0xcd, 0x4d, 0x11, 0xc0, 0xa0, 0x0c, 0xea, 0x90, 0xe1,
0xb9, 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0xce, 0xa0,
0x0e, 0x19, 0x9e, 0x4b, 0x99, 0x1b, 0x9d, 0x5c, 0x1e, 0xd4, 0x5b, 0x9a, 0x1b, 0xdd, 0xdc, 0x94,
0x20, 0x14, 0xba, 0x90, 0xe1, 0xb9, 0x8c, 0xbd, 0xd5, 0xb9, 0xd1, 0x95, 0xc9, 0xcd, 0x4d, 0x09,
0x54, 0x01, 0x00, 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,
0x1f, 0x00, 0x00, 0x00, 0x56, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44,
0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x07, 0xd2, 0x70, 0xf9, 0xce,
0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0xd8, 0x80, 0x33, 0x5c, 0xbe, 0xf3,
0xf8, 0x83, 0x33, 0xdd, 0x7e, 0x71, 0xdb, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00,
0x83, 0xd8, 0x3c, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93,
0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x06, 0xd2, 0x70, 0xf9, 0xce, 0xe3,
0x4f, 0x44, 0x34, 0x21, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x1b, 0xc1, 0x33, 0x5c, 0xbe, 0xf3, 0xf8,
0x54, 0x03, 0x44, 0x98, 0x5f, 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xd1, 0x26, 0xd4, 0x2b, 0x72, 0xb1, 0x78, 0x87, 0xc0, 0x6d, 0x39, 0x17, 0xb8, 0xd5, 0xc2, 0x70,
0x44, 0x58, 0x49, 0x4c, 0xcc, 0x09, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x73, 0x02, 0x00, 0x00,
0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb4, 0x09, 0x00, 0x00,
0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x6a, 0x02, 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, 0x29, 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, 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,
0x82, 0x0c, 0x32, 0xc6, 0x18, 0x63, 0x90, 0x2a, 0xc3, 0x20, 0x83, 0xd8, 0x51, 0xc3, 0xe5, 0x4f,
0xd8, 0x43, 0x48, 0x3e, 0xb7, 0x51, 0xc5, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0x88, 0x18, 0x63, 0x0c,
0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x57,
0x08, 0x47, 0x20, 0xa1, 0x58, 0x8a, 0x41, 0xc6, 0x18, 0x34, 0xe7, 0x08, 0x82, 0x62, 0x40, 0x52,
0x08, 0xa9, 0x64, 0x07, 0x02, 0x86, 0x11, 0x88, 0x21, 0x09, 0xf2, 0x81, 0xc1, 0xe1, 0x48, 0xd3,
0x02, 0x60, 0x0e, 0x35, 0xf9, 0x13, 0xf6, 0x10, 0xff, 0x8b, 0x10, 0xd6, 0xe3, 0x44, 0x93, 0xdb,
0x20, 0x85, 0x13, 0x31, 0x12, 0x1a, 0xb4, 0xd6, 0xb4, 0x93, 0x81, 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, 0x00, 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, 0x28,
0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x61, 0x80, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01, 0x01, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x21, 0x8f, 0x05, 0x04, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90,
0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x12, 0xc5, 0x50, 0x80,
0x02, 0x65, 0x50, 0x0e, 0x45, 0x50, 0x1e, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x0c, 0x8a, 0xa0, 0x10,
0x08, 0xcf, 0x00, 0x50, 0x1e, 0x8b, 0x51, 0x20, 0x10, 0xef, 0x03, 0x10, 0xef, 0x03, 0x10, 0xef,
0x03, 0x20, 0x10, 0x08, 0x00, 0x02, 0x03, 0x00, 0x79, 0x18, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x03, 0x65, 0x50, 0x0e, 0x45, 0x50, 0x1e, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x0c, 0x8a, 0xa0, 0x10,
0x88, 0xcf, 0x00, 0x50, 0x1f, 0x8b, 0x51, 0x20, 0x10, 0xef, 0x03, 0x10, 0xef, 0x03, 0x10, 0xef,
0x03, 0xe0, 0x38, 0x0e, 0x00, 0x02, 0x03, 0x00, 0x79, 0x18, 0x00, 0x00, 0x64, 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, 0x05, 0x46,
0xac, 0x2c, 0x2c, 0xec, 0xc6, 0xe6, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x08, 0x63, 0x82, 0x40,
0x1c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x10, 0xc8, 0x06, 0x61, 0x30, 0x28, 0xd8, 0xcd, 0x4d, 0x10,
0x88, 0x64, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x01, 0xa3, 0x08, 0x4c, 0x10, 0x08, 0x65, 0x03, 0x42,
0x2c, 0xcc, 0x40, 0x0c, 0x0d, 0xb0, 0x21, 0x70, 0x36, 0x10, 0x00, 0xf0, 0x00, 0x13, 0x84, 0xac,
0xac, 0x2c, 0x2c, 0xec, 0xc6, 0xe6, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x08, 0x64, 0x82, 0x40,
0x24, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x10, 0xca, 0x06, 0x61, 0x30, 0x28, 0xd8, 0xcd, 0x4d, 0x10,
0x88, 0x65, 0xc3, 0x80, 0x24, 0xc4, 0x04, 0x81, 0xb3, 0x08, 0x4c, 0x10, 0x08, 0x66, 0x03, 0x42,
0x2c, 0xcc, 0x40, 0x0c, 0x0d, 0xb0, 0x21, 0x70, 0x36, 0x10, 0x00, 0xf0, 0x00, 0x13, 0x84, 0xee,
0xda, 0x10, 0x44, 0x13, 0x04, 0x01, 0x20, 0xd1, 0x16, 0x96, 0xe6, 0x46, 0x84, 0xaa, 0x08, 0x6b,
0xe8, 0xe9, 0x49, 0x8a, 0x68, 0x82, 0x50, 0x3c, 0x13, 0x84, 0x02, 0xda, 0x10, 0x10, 0x13, 0x84,
0x22, 0x9a, 0x20, 0x10, 0xcb, 0x04, 0x81, 0x60, 0x36, 0x08, 0xda, 0xb6, 0x61, 0x21, 0x2a, 0xeb,
0xe8, 0xe9, 0x49, 0x8a, 0x68, 0x82, 0x50, 0x44, 0x13, 0x84, 0x42, 0xda, 0x10, 0x10, 0x13, 0x84,
0x62, 0x9a, 0x20, 0x10, 0xcd, 0x04, 0x81, 0x70, 0x36, 0x08, 0xda, 0xb6, 0x61, 0x21, 0x2a, 0xeb,
0xc2, 0xae, 0x21, 0x23, 0x2e, 0x6e, 0x43, 0x30, 0x6c, 0x58, 0x86, 0xca, 0xba, 0xbc, 0x6b, 0xc8,
0x86, 0x8b, 0x9b, 0x20, 0x10, 0xcd, 0x86, 0x00, 0x0c, 0x26, 0x08, 0x85, 0xb4, 0x41, 0xd0, 0xb4,
0x86, 0x8b, 0x9b, 0x20, 0x10, 0xcf, 0x86, 0x00, 0x0c, 0x26, 0x08, 0x05, 0xb5, 0x41, 0xd0, 0xb4,
0x0d, 0x0b, 0x18, 0x54, 0xd6, 0x15, 0x06, 0xd7, 0x20, 0x06, 0x60, 0x70, 0x8d, 0xc1, 0x86, 0xa1,
0xfb, 0xc8, 0x60, 0xc3, 0x42, 0x54, 0xd6, 0x85, 0x89, 0xc1, 0x90, 0x11, 0x17, 0xb7, 0x61, 0x19,
0x2a, 0xeb, 0xf2, 0xc4, 0x60, 0x10, 0x83, 0xe1, 0x1a, 0x83, 0x0d, 0x0b, 0x18, 0x54, 0xd6, 0x15,
0x06, 0x62, 0x30, 0x64, 0x60, 0x70, 0x71, 0x5c, 0xa6, 0xac, 0xbe, 0xa0, 0xde, 0xe6, 0xd2, 0xe8,
0xd2, 0xde, 0xdc, 0x26, 0x08, 0xc5, 0x34, 0x41, 0x20, 0x9c, 0x0d, 0x82, 0xb6, 0x06, 0x1b, 0x16,
0xd2, 0xde, 0xdc, 0x26, 0x08, 0x45, 0x35, 0x41, 0x20, 0xa0, 0x0d, 0x82, 0xb6, 0x06, 0x1b, 0x16,
0x2d, 0x0d, 0xac, 0x0c, 0x53, 0x83, 0x41, 0x0d, 0xb4, 0x8b, 0x0d, 0x36, 0x10, 0x66, 0x70, 0x06,
0x68, 0xd0, 0x06, 0x1b, 0x86, 0x32, 0x70, 0x03, 0x60, 0x43, 0x31, 0x51, 0x6f, 0x00, 0x01, 0x55,
0xd8, 0xd8, 0xec, 0xda, 0x5c, 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c,
@ -251,68 +261,83 @@ static const Uint8 PositionColor_vert_dxil[4724] = {
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, 0x18, 0x00, 0x00, 0x00,
0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25,
0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x05, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01,
0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c,
0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e,
0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x11, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f,
0x11, 0xd1, 0x84, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00,
0x61, 0x20, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x44, 0x8a, 0xab, 0x14, 0x0a, 0x61, 0x06, 0xa0, 0xec, 0x4a, 0x8e, 0x4a,
0x09, 0x50, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x20, 0x65,
0x03, 0x73, 0x5d, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xde, 0x21, 0x61, 0x8f, 0x31,
0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x87, 0x4c, 0x19, 0x71, 0x8c, 0x18, 0x24, 0x00, 0x08,
0x82, 0x81, 0x01, 0x06, 0xc9, 0xa6, 0x45, 0xc8, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x61,
0xa0, 0x70, 0x9b, 0x91, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x21, 0x06, 0x4b, 0xc7, 0x45,
0xca, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x63, 0xc0, 0x74, 0x1d, 0xb5, 0x8c, 0x18, 0x24,
0x00, 0x08, 0x82, 0x81, 0x41, 0x06, 0x8d, 0xe7, 0x25, 0xcc, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18,
0x18, 0x65, 0xe0, 0x7c, 0x1f, 0xd5, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x43, 0x06, 0x4d,
0xf2, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x01, 0x80,
0x20, 0x18, 0x34, 0x68, 0x10, 0x35, 0xd4, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2,
0x20, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xc3, 0x06, 0x55, 0x64, 0x06, 0xa3, 0x09, 0x01,
0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x0d, 0x1c,
0x64, 0xd5, 0x19, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0x82, 0x3d, 0x93,
0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0xe0, 0xa1, 0x03, 0x31, 0x60, 0xa6, 0x60, 0xc4, 0x00,
0x01, 0x40, 0x10, 0x0c, 0x9e, 0x3a, 0x18, 0x83, 0x64, 0x0a, 0x2c, 0x30, 0xa0, 0x63, 0xd2, 0x25,
0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x78, 0xf0, 0xc0, 0x0c, 0x9e, 0x2b, 0x18, 0x31, 0x40,
0x00, 0x10, 0x04, 0x83, 0x27, 0x0f, 0xce, 0x80, 0xb9, 0x02, 0x0b, 0x12, 0xe8, 0x58, 0xb5, 0xc9,
0x67, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x1e, 0x3e, 0x50, 0x03, 0x69, 0x0b, 0x46, 0x0c, 0x10,
0x00, 0x04, 0xc1, 0xe0, 0xe9, 0x83, 0x35, 0x78, 0xb6, 0xc0, 0x02, 0x06, 0x3a, 0x23, 0x06, 0x07,
0x00, 0x82, 0x60, 0xd0, 0x80, 0x42, 0x1a, 0x94, 0x01, 0x1f, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82,
0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x53,
0x0a, 0x6e, 0xa0, 0x06, 0xa2, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08,
0xa3, 0x09, 0xc4, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x2a, 0xcc, 0xc1, 0x1b, 0x80,
0xc2, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88,
0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0xaf, 0x80, 0x07, 0x74, 0x70, 0x0a, 0xa3, 0x09, 0x01, 0x30,
0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x36, 0x75, 0xf2, 0x19, 0x31, 0x40,
0x00, 0x10, 0x04, 0x83, 0x87, 0x16, 0x44, 0xe1, 0xd1, 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30,
0x78, 0x6a, 0x61, 0x14, 0x96, 0x2b, 0xb0, 0xe0, 0x80, 0x8e, 0x59, 0x61, 0x20, 0x9f, 0x11, 0x03,
0x04, 0x00, 0x41, 0x30, 0x78, 0x70, 0xc1, 0x14, 0x24, 0x2f, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04,
0x83, 0x27, 0x17, 0x4e, 0xc1, 0xd9, 0x02, 0x0b, 0x14, 0xe8, 0x58, 0x56, 0x06, 0xf2, 0x19, 0x31,
0x40, 0x00, 0x10, 0x04, 0x83, 0x87, 0x17, 0x54, 0xa1, 0x12, 0x83, 0x60, 0xc4, 0x00, 0x01, 0x40,
0x10, 0x0c, 0x9e, 0x5e, 0x58, 0x85, 0xe8, 0x0b, 0x2c, 0x68, 0xa0, 0x63, 0x5c, 0x1a, 0xc8, 0x67,
0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x1e, 0x70, 0x70, 0x05, 0xcc, 0x0c, 0x82, 0x11, 0x03, 0x04,
0x00, 0x41, 0x30, 0x78, 0xc2, 0xe1, 0x15, 0xa8, 0x31, 0x08, 0x2c, 0x80, 0xa0, 0x33, 0x62, 0x90,
0x00, 0x20, 0x08, 0x06, 0x48, 0x39, 0xc0, 0x02, 0x38, 0x80, 0xc3, 0x2d, 0x98, 0xc2, 0x88, 0x41,
0x02, 0x80, 0x20, 0x18, 0x20, 0xe5, 0x00, 0x0b, 0xe0, 0x00, 0x0e, 0xab, 0x50, 0x0a, 0x23, 0x06,
0x09, 0x00, 0x82, 0x60, 0x80, 0x94, 0x03, 0x2c, 0x80, 0x03, 0x38, 0xd4, 0x02, 0x29, 0x8c, 0x18,
0x24, 0x00, 0x08, 0x82, 0x01, 0x52, 0x0e, 0xb0, 0x10, 0x0e, 0xe0, 0x70, 0x0b, 0xa8, 0x30, 0x62,
0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x39, 0xc0, 0x42, 0x38, 0x80, 0xc3, 0x2a, 0x9c, 0xc2, 0x88,
0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0xe5, 0x00, 0x0b, 0xba, 0x00, 0x0e, 0xb7, 0xd0, 0x06, 0x23,
0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x94, 0x03, 0x2c, 0xe8, 0x02, 0x38, 0xac, 0x42, 0x1a, 0x8c,
0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0x52, 0x0e, 0xb0, 0xa0, 0x0b, 0xe0, 0x50, 0x0b, 0x65, 0x30,
0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x39, 0xc0, 0x02, 0x2f, 0x80, 0xc3, 0x2d, 0x34, 0x23,
0x06, 0x09, 0x00, 0x82, 0x60, 0x80, 0x94, 0x03, 0x2c, 0xf0, 0x02, 0x38, 0xac, 0x42, 0x32, 0x62,
0x90, 0x00, 0x20, 0x08, 0x06, 0x48, 0x39, 0xc0, 0x02, 0x2f, 0x80, 0x43, 0x2d, 0x14, 0x23, 0x06,
0x09, 0x00, 0x82, 0x60, 0x80, 0x94, 0x03, 0x2c, 0xf0, 0x02, 0x38, 0xd8, 0x42, 0x80, 0x00, 0x00,
0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x56, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25,
0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x07, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01,
0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0xd8, 0x80, 0x33, 0x5c, 0xbe, 0xf3, 0xf8, 0x83, 0x33, 0xdd,
0x7e, 0x71, 0xdb, 0x16, 0x30, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0xe2, 0x00, 0x83, 0xd8, 0x3c, 0xd4,
0xe4, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35,
0x3d, 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x06, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0x44, 0x34, 0x21,
0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x1b, 0xc1, 0x33, 0x5c, 0xbe, 0xf3, 0xf8, 0x54, 0x03, 0x44, 0x98,
0x5f, 0xdc, 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
0xf3, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x44, 0x8a, 0xab, 0x14, 0xca, 0xae, 0x10, 0x66, 0x00, 0x4a, 0xae, 0x20, 0x8a, 0xa2, 0xdc, 0x4a,
0x86, 0x4a, 0x09, 0x50, 0x1d, 0x01, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x60, 0x75,
0x07, 0xb4, 0x6d, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x64, 0xa0, 0x58, 0xdc, 0x94,
0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x51, 0x06, 0xcb, 0xd5, 0x11, 0xca, 0x88, 0x41, 0x02,
0x80, 0x20, 0x18, 0x18, 0x66, 0xc0, 0x7c, 0x5e, 0xb5, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81,
0x71, 0x06, 0x0d, 0x18, 0x7c, 0x06, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x06, 0x1a, 0x38,
0x61, 0x00, 0x06, 0x55, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x46, 0x1a, 0x3c, 0x61, 0x10,
0x06, 0x98, 0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x1a, 0x40, 0x62, 0x20, 0x06, 0xc9,
0x33, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x1a, 0x44, 0x63, 0x30, 0x06, 0x18, 0x34, 0x62,
0x70, 0x00, 0x20, 0x08, 0x06, 0x11, 0x1a, 0x4c, 0x89, 0x34, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42,
0x30, 0x9a, 0x30, 0x08, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0xb1, 0xc1, 0xd5, 0x60, 0xa3,
0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06,
0x11, 0x1c, 0x6c, 0x91, 0x1a, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2,
0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x74, 0xf0, 0x55, 0x6b, 0x30, 0x9a, 0x10, 0x00, 0xa3,
0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xf6, 0x4c, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83,
0x09, 0x0f, 0xcc, 0x80, 0x99, 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x98, 0xf2, 0xe0, 0x0c,
0x92, 0x29, 0xb0, 0xc0, 0x80, 0x8e, 0x49, 0x97, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x60,
0xe2, 0x03, 0x35, 0x78, 0xae, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xa6, 0x3e, 0x58, 0x03,
0xe6, 0x0a, 0x2c, 0x48, 0xa0, 0x63, 0xd5, 0x26, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x98,
0x40, 0xc1, 0x0d, 0xa4, 0x2d, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x83, 0x29, 0x14, 0xde, 0xe0,
0xd9, 0x02, 0x0b, 0x18, 0xe8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x44, 0x0a, 0x6f, 0x50,
0x06, 0xa0, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4,
0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x51, 0x2a, 0xd0, 0x81, 0x1a, 0x98, 0xc2, 0x68, 0x42,
0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80,
0x20, 0x18, 0x44, 0xae, 0x90, 0x07, 0x6f, 0x40, 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04,
0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0xcd, 0x82,
0x1f, 0xd0, 0xc1, 0x2a, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68,
0x02, 0x31, 0xd8, 0xd4, 0xc9, 0x67, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x26, 0x5c, 0x30, 0x85,
0x47, 0x0b, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x60, 0xca, 0x85, 0x53, 0x58, 0xae, 0xc0, 0x82,
0x03, 0x3a, 0x66, 0x85, 0x81, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x60, 0xe2, 0x05, 0x55,
0x90, 0xbc, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xa6, 0x5e, 0x58, 0x05, 0x67, 0x0b, 0x2c,
0x50, 0xa0, 0x63, 0x59, 0x19, 0xc8, 0x67, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x26, 0x70, 0x70,
0x85, 0x4a, 0x0c, 0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x98, 0xc2, 0xe1, 0x15, 0xa2, 0x2f,
0xb0, 0xa0, 0x81, 0x8e, 0x71, 0x69, 0x20, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0x98, 0xc8,
0x41, 0x16, 0x30, 0x33, 0x08, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x60, 0x2a, 0x87, 0x59, 0xa0,
0xc6, 0x20, 0xb0, 0x00, 0x82, 0xce, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0xe8, 0x30, 0x0b,
0xa9, 0xf0, 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x91, 0x3a, 0xd4,
0xc2, 0x2a, 0x94, 0xc3, 0x68, 0x42, 0x00, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xc4, 0x0e,
0xb7, 0xd0, 0x0a, 0xb2, 0x30, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x46, 0x30, 0x9a, 0x50, 0x04, 0xa3,
0x09, 0x44, 0x30, 0x9a, 0x90, 0x08, 0xa3, 0x09, 0x88, 0x30, 0x9a, 0x70, 0x08, 0xb6, 0xc8, 0x82,
0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x60, 0xa2, 0x07, 0x71, 0x90, 0x85, 0x23, 0x18, 0x31,
0x40, 0x00, 0x10, 0x04, 0x83, 0xa9, 0x1e, 0xc6, 0x41, 0x16, 0x8a, 0xc0, 0x98, 0x5a, 0x90, 0xcf,
0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x4c, 0xf7, 0x50, 0x0e, 0xb5, 0x90, 0x04, 0x23, 0x06, 0x08,
0x00, 0x82, 0x60, 0x30, 0xe1, 0x83, 0x39, 0xd4, 0xc2, 0x11, 0x58, 0x83, 0x0b, 0xf2, 0x19, 0x31,
0x40, 0x00, 0x10, 0x04, 0x83, 0x49, 0x1f, 0xd0, 0x01, 0x17, 0x96, 0x60, 0xc4, 0x00, 0x01, 0x40,
0x10, 0x0c, 0xa6, 0x7d, 0x48, 0x07, 0x5c, 0x48, 0x82, 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0x50,
0xfe, 0x41, 0x1c, 0x0e, 0x22, 0x38, 0x88, 0x60, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x98, 0x7f,
0x10, 0x87, 0xc0, 0x82, 0x44, 0x3e, 0x26, 0x1c, 0xf2, 0xb1, 0xa1, 0x90, 0xcf, 0x88, 0x41, 0x02,
0x80, 0x20, 0x18, 0x20, 0x25, 0xe1, 0x0e, 0xfe, 0xe0, 0x0f, 0xf5, 0x30, 0x8c, 0x18, 0x24, 0x00,
0x08, 0x82, 0x01, 0x52, 0x12, 0xee, 0xe0, 0x0f, 0xfe, 0x50, 0x0e, 0xc2, 0x88, 0x41, 0x02, 0x80,
0x20, 0x18, 0x20, 0x25, 0xe1, 0x0e, 0xfe, 0xe0, 0x0f, 0xf3, 0x10, 0x8c, 0x18, 0x24, 0x00, 0x08,
0x82, 0x01, 0x52, 0x12, 0xee, 0xf0, 0x0f, 0xfe, 0x50, 0x0f, 0xe2, 0x30, 0x62, 0x90, 0x00, 0x20,
0x08, 0x06, 0x48, 0x49, 0xb8, 0xc3, 0x3f, 0xf8, 0x43, 0x39, 0x84, 0xc3, 0x88, 0x41, 0x02, 0x80,
0x20, 0x18, 0x20, 0x25, 0xe1, 0x0e, 0xf8, 0xe0, 0x0f, 0xf5, 0x70, 0x0a, 0x23, 0x06, 0x09, 0x00,
0x82, 0x60, 0x80, 0x94, 0x84, 0x3b, 0xe0, 0x83, 0x3f, 0x94, 0xc3, 0x28, 0x8c, 0x18, 0x24, 0x00,
0x08, 0x82, 0x01, 0x52, 0x12, 0xee, 0x80, 0x0f, 0xfe, 0x30, 0x0f, 0x7f, 0x30, 0x62, 0x90, 0x00,
0x20, 0x08, 0x06, 0x48, 0x49, 0xb8, 0x83, 0x3e, 0xf8, 0x43, 0x3d, 0x9c, 0xc1, 0x88, 0x41, 0x02,
0x80, 0x20, 0x18, 0x20, 0x25, 0xe1, 0x0e, 0xfa, 0xe0, 0x0f, 0xe5, 0x30, 0x06, 0x23, 0x06, 0x09,
0x00, 0x82, 0x60, 0x80, 0x94, 0x84, 0x3b, 0xe8, 0x83, 0x3f, 0xcc, 0xc3, 0x37, 0x62, 0x90, 0x00,
0x20, 0x08, 0x06, 0x48, 0x49, 0xb8, 0x83, 0x3e, 0xf8, 0x03, 0x3d, 0x6c, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
#endif
// MSL only makes sense on Apple platforms
#if defined(SDL_PLATFORM_APPLE)
static const Uint8 PositionColor_vert_msl[1558] = {
static const Uint8 PositionColor_vert_msl[2097] = {
0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x3c, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f,
0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x3e, 0x0a, 0x23, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
0x20, 0x3c, 0x73, 0x69, 0x6d, 0x64, 0x2f, 0x73, 0x69, 0x6d, 0x64, 0x2e, 0x68, 0x3e, 0x0a, 0x0a,
@ -321,8 +346,10 @@ static const Uint8 PositionColor_vert_msl[1558] = {
0x79, 0x70, 0x65, 0x5f, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66,
0x6f, 0x72, 0x6d, 0x73, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x34, 0x78, 0x34, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x76, 0x69, 0x65,
0x77, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x77, 0x6f, 0x72,
0x6c, 0x64, 0x56, 0x69, 0x65, 0x77, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78, 0x34, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x72,
0x75, 0x63, 0x74, 0x20, 0x56, 0x53, 0x5f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x0a, 0x7b, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69,
0x6f, 0x6e, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x4e,
@ -366,198 +393,255 @@ static const Uint8 PositionColor_vert_msl[1558] = {
0x5b, 0x5b, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28, 0x30, 0x29, 0x5d, 0x5d, 0x29, 0x0a, 0x7b,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x30, 0x5f, 0x6f, 0x75, 0x74, 0x20, 0x6f,
0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x32, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f,
0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x34, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f,
0x76, 0x61, 0x72, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x31, 0x20, 0x3d, 0x20, 0x69,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x33, 0x20, 0x3d, 0x20, 0x69,
0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30,
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x34, 0x30,
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x34, 0x32,
0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58,
0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x34, 0x20, 0x5f, 0x36, 0x32, 0x20, 0x3d, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72,
0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x4d, 0x61,
0x74, 0x72, 0x69, 0x78, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x69, 0x6e,
0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e,
0x74, 0x34, 0x20, 0x5f, 0x36, 0x34, 0x20, 0x3d, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72,
0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x56,
0x69, 0x65, 0x77, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x34, 0x28, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x50, 0x4f, 0x53,
0x49, 0x54, 0x49, 0x4f, 0x4e, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x36, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x36,
0x34, 0x2e, 0x78, 0x79, 0x7a, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x33, 0x20, 0x5f, 0x35, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x39, 0x20, 0x3d, 0x20, 0x5f, 0x36,
0x35, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x37,
0x32, 0x20, 0x3d, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66,
0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
0x2a, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x5f, 0x36, 0x34, 0x2e, 0x78, 0x79, 0x7a,
0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x33, 0x20, 0x5f, 0x36, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x32, 0x2e, 0x78, 0x79, 0x7a,
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x35, 0x31,
0x20, 0x3d, 0x20, 0x5f, 0x36, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x33, 0x20, 0x5f, 0x34, 0x37, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x33, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x37, 0x30, 0x20, 0x3d, 0x20, 0x56,
0x74, 0x34, 0x20, 0x5f, 0x35, 0x32, 0x20, 0x3d, 0x20, 0x5f, 0x37, 0x32, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x38, 0x33, 0x20, 0x3d, 0x20, 0x66,
0x61, 0x73, 0x74, 0x3a, 0x3a, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x66,
0x6c, 0x6f, 0x61, 0x74, 0x33, 0x78, 0x33, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x56,
0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e,
0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x20, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x34, 0x28, 0x5f, 0x36, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x31, 0x2e, 0x30,
0x29, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x35,
0x30, 0x20, 0x3d, 0x20, 0x5f, 0x37, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x39, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f,
0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x34, 0x38, 0x20, 0x3d, 0x20, 0x69, 0x6e,
0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x34,
0x36, 0x20, 0x3d, 0x20, 0x5f, 0x37, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x35, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f,
0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f, 0x34, 0x34, 0x20, 0x3d, 0x20, 0x69, 0x6e,
0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34,
0x33, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74,
0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x5f,
0x37, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f,
0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e,
0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x3b,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x61, 0x72,
0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e,
0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31,
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x61,
0x72, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x36,
0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75,
0x74, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a,
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x30, 0x5d, 0x5b,
0x30, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66,
0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69,
0x78, 0x5b, 0x31, 0x5d, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72,
0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x32, 0x5d, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x56, 0x69,
0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x33, 0x5d, 0x5b, 0x30,
0x5d, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x56,
0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e,
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x30, 0x5d, 0x5b,
0x31, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66,
0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69,
0x78, 0x5b, 0x31, 0x5d, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72,
0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x32, 0x5d, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x56, 0x69,
0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x33, 0x5d, 0x5b, 0x31,
0x5d, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x28, 0x56,
0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e,
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x30, 0x5d, 0x5b,
0x32, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66,
0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69,
0x78, 0x5b, 0x31, 0x5d, 0x5b, 0x32, 0x5d, 0x2c, 0x20, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72,
0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x32, 0x5d, 0x5b, 0x32, 0x5d, 0x2c, 0x20, 0x56, 0x69,
0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2e, 0x6e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x5b, 0x33, 0x5d, 0x5b, 0x32,
0x5d, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f,
0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x29, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x35, 0x31, 0x20, 0x3d, 0x20, 0x5f,
0x38, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32, 0x20, 0x5f,
0x35, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54,
0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x34, 0x20, 0x5f, 0x34, 0x38, 0x20, 0x3d, 0x20, 0x5f, 0x37, 0x32, 0x3b, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x37, 0x20, 0x3d,
0x20, 0x5f, 0x38, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x32,
0x20, 0x5f, 0x34, 0x36, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61, 0x72,
0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x33, 0x20, 0x5f, 0x34, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x35,
0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x2e, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x5f, 0x37, 0x32, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x4e, 0x4f, 0x52,
0x4d, 0x41, 0x4c, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x38, 0x33, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58, 0x43,
0x4f, 0x4f, 0x52, 0x44, 0x31, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x2e, 0x69, 0x6e, 0x5f, 0x76, 0x61,
0x72, 0x5f, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x6f, 0x75, 0x74, 0x2e, 0x6f, 0x75, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x5f, 0x54, 0x45, 0x58,
0x43, 0x4f, 0x4f, 0x52, 0x44, 0x33, 0x20, 0x3d, 0x20, 0x5f, 0x36, 0x35, 0x3b, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x3b, 0x0a, 0x7d, 0x0a,
0x0a,
};
#endif
static const Uint8 PositionColor_vert_spirv[2316] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x48, 0x00, 0x00, 0x00,
static const Uint8 PositionColor_vert_spirv[2708] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x55, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0xdf, 0x13, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x07, 0x00, 0x53, 0x50, 0x56, 0x5f, 0x4b, 0x48, 0x52, 0x5f,
0x71, 0x75, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x05, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00,
0x74, 0x79, 0x70, 0x65, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69,
0x66, 0x6f, 0x72, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00,
0x06, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77,
0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x02, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76,
0x61, 0x72, 0x2e, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x05, 0x00, 0x06, 0x00,
0x03, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x4e, 0x4f, 0x52, 0x4d, 0x41,
0x4c, 0x30, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76,
0x61, 0x72, 0x2e, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x2e, 0x76, 0x61, 0x72, 0x2e,
0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x00, 0x05, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00,
0x6f, 0x75, 0x74, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44,
0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x2e,
0x76, 0x61, 0x72, 0x2e, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x33, 0x00, 0x00, 0x00,
0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x56, 0x53, 0x5f, 0x49, 0x6e, 0x70, 0x75, 0x74,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00,
0x06, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x54, 0x65, 0x78, 0x43,
0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x46, 0x53, 0x5f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00,
0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64,
0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00,
0x05, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x56, 0x69, 0x65,
0x77, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x00, 0x00, 0x00,
0x06, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x72, 0x6f, 0x6a,
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x56, 0x69, 0x65, 0x77, 0x4d, 0x61, 0x74,
0x72, 0x69, 0x78, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x56, 0x69, 0x65, 0x77, 0x70, 0x6f, 0x72, 0x74,
0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x03, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x50, 0x4f, 0x53, 0x49, 0x54,
0x49, 0x4f, 0x4e, 0x00, 0x05, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76,
0x61, 0x72, 0x2e, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
0x05, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x54, 0x45, 0x58, 0x43, 0x4f,
0x4f, 0x52, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00, 0x00,
0x6f, 0x75, 0x74, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x30, 0x00,
0x05, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x2e, 0x76, 0x61, 0x72, 0x2e,
0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x2e, 0x76, 0x61, 0x72, 0x2e, 0x54, 0x45, 0x58, 0x43,
0x4f, 0x4f, 0x52, 0x44, 0x33, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00,
0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x56, 0x53, 0x5f, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x57, 0x6f, 0x72, 0x6c,
0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x02, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x27, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x50, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x29, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x24, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x17, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x33, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2f, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x24, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
0x42, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x10, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x42, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x90, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x31, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x30, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x05, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x46, 0x53, 0x5f, 0x49, 0x6e, 0x70, 0x75, 0x74,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00,
0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x00, 0x00,
0x06, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x54, 0x65, 0x78, 0x43,
0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f,
0x6e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x04, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x11, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x21, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x00,
0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x1e, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x1a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x21, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00,
0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x1f, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
0x29, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x2c, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2b, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00,
0x3f, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x3a, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x11, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x50, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x3d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00,
0x15, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x35, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x31, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00,
0x42, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
0x16, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x11, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x34, 0x00, 0x00, 0x00,
0x48, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00,
0x4a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00,
0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x15, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00,
0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x18, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
0x4f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x27, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
0x4c, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x91, 0x00, 0x05, 0x00,
0x18, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
0x0c, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x45, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x33, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x50, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2f, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00,
0x38, 0x00, 0x01, 0x00,
};

View File

@ -65,7 +65,7 @@ static const SDL_GPUShaderCreateInfo FragmentShaderDXILCodes[] = {
/* entrypoint */ "main",
/* format */ SDL_GPU_SHADERFORMAT_DXIL,
/* stage */ SDL_GPU_SHADERSTAGE_FRAGMENT,
/* num_samplers */ 0,
/* num_samplers */ 1,
/* num_storage_textures */ 0,
/* num_storage_buffers */ 0,
/* num_uniform_buffers */ 1,
@ -81,7 +81,7 @@ static const SDL_GPUShaderCreateInfo FragmentShaderMSLCodes[] = {
/* entrypoint */ "main0",
/* format */ SDL_GPU_SHADERFORMAT_MSL,
/* stage */ SDL_GPU_SHADERSTAGE_FRAGMENT,
/* num_samplers */ 0,
/* num_samplers */ 1,
/* num_storage_textures */ 0,
/* num_storage_buffers */ 0,
/* num_uniform_buffers */ 1,
@ -96,7 +96,7 @@ static const SDL_GPUShaderCreateInfo FragmentShaderSPIRVCodes[] = {
/* entrypoint */ "main",
/* format */ SDL_GPU_SHADERFORMAT_SPIRV,
/* stage */ SDL_GPU_SHADERSTAGE_FRAGMENT,
/* num_samplers */ 0,
/* num_samplers */ 1,
/* num_storage_textures */ 0,
/* num_storage_buffers */ 0,
/* num_uniform_buffers */ 1,

View File

@ -13,12 +13,6 @@ struct FS_Input
float3 WorldPosition : TEXCOORD3;
};
struct FS_Output
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
struct SceneLight {
float4 color;
float4 position;

View File

@ -3,16 +3,17 @@
cbuffer ViewportUniforms : register(b0, space1)
{
float4x4 projection;
float4x4 viewMatrix;
float4x4 worldViewMatrix;
float4x4 normalMatrix;
}
FS_Input main(VS_Input input)
{
FS_Input output;
float3 viewPos = mul(viewMatrix, float4(input.Position, 1.0)).xyz;
float3 viewPos = mul(worldViewMatrix, float4(input.Position, 1.0)).xyz;
output.WorldPosition = viewPos;
output.Position = mul(projection, float4(viewPos, 1.0));
output.Normal = input.Normal;
output.Normal = normalize(mul(input.Normal, (float3x3) normalMatrix));
output.TexCoord = input.TexCoord;
return output;

View File

@ -1,11 +1,17 @@
#include "Common.hlsl"
struct FS_Output {
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
cbuffer FragmentShadingData : register(b0, space3)
{
SceneLight lights[3];
int lightCount;
float Shininess;
uint ColorRaw;
int UseTexture;
}
float4 unpackColor(uint packed)
@ -18,6 +24,9 @@ float4 unpackColor(uint packed)
return color;
}
Texture2D<float4> Texture : register(t0, space2);
SamplerState Sampler : register(s0, space2);
FS_Output main(FS_Input input)
{
FS_Output output;
@ -63,6 +72,10 @@ FS_Output main(FS_Input input)
float4 Color = unpackColor(ColorRaw);
float3 finalColor = saturate(diffuse * Color.rgb + specular);
if (UseTexture != 0) {
float4 texel = Texture.Sample(Sampler, input.TexCoord);
finalColor = saturate(texel.rgb * finalColor);
}
output.Color = float4(finalColor, Color.a);
output.Depth = input.Position.w;
return output;

View File

@ -1,5 +1,5 @@
{
"num_samplers": 0,
"num_samplers": 1,
"num_storage_textures": 0,
"num_storage_buffers": 0,
"num_uniform_buffers": 1

View File

@ -394,10 +394,8 @@ Uint32 Direct3DRMSoftwareRenderer::GetTextureId(IDirect3DRMTexture* iTexture)
// Reuse freed slot
for (Uint32 i = 0; i < m_textures.size(); ++i) {
auto& texRef = m_textures[i];
if (texRef.texture == nullptr) {
texRef.texture = texture;
texRef.cached = convertedRender;
texRef.version = texture->m_version;
if (!texRef.texture) {
texRef = {texture, texture->m_version, convertedRender};
AddTextureDestroyCallback(i, texture);
return i;
}

View File

@ -1,29 +1,39 @@
#pragma once
#include "d3drmrenderer.h"
#include "d3drmtexture_impl.h"
#include "ddraw_impl.h"
#include "ddsurface_impl.h"
#include <SDL3/SDL.h>
#include <vector>
DEFINE_GUID(SDL3_GPU_GUID, 0x682656F3, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01);
typedef struct {
D3DRMMATRIX4D projection;
D3DRMMATRIX4D worldViewMatrix;
D3DRMMATRIX4D normalMatrix;
} ViewportUniforms;
static_assert(sizeof(ViewportUniforms) % 16 == 0);
static_assert(sizeof(ViewportUniforms) == 128);
static_assert(sizeof(ViewportUniforms) == 192);
struct FragmentShadingData {
SceneLight lights[3];
int lightCount;
float shininess;
SDL_Color color;
int padding1[1];
int useTexture;
};
static_assert(sizeof(FragmentShadingData) % 16 == 0);
static_assert(sizeof(FragmentShadingData) == 160);
struct SDL3TextureCache {
Direct3DRMTextureImpl* texture;
Uint32 version;
SDL_GPUTexture* gpuTexture;
};
class Direct3DRMSDL3GPURenderer : public Direct3DRMRenderer {
public:
static Direct3DRMRenderer* Create(DWORD width, DWORD height);
@ -54,9 +64,13 @@ private:
SDL_GPUGraphicsPipeline* transparentPipeline,
SDL_GPUTexture* transferTexture,
SDL_GPUTexture* depthTexture,
SDL_GPUTransferBuffer* downloadTransferBuffer
SDL_GPUTexture* dummyTexture,
SDL_GPUSampler* sampler,
SDL_GPUTransferBuffer* uploadBuffer,
SDL_GPUTransferBuffer* downloadBuffer
);
HRESULT Blit();
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
SDL_GPUTransferBuffer* GetUploadBuffer(size_t size);
DWORD m_width;
DWORD m_height;
@ -68,14 +82,18 @@ private:
FragmentShadingData m_fragmentShadingData;
D3DDEVICEDESC m_desc;
D3DRMMATRIX4D m_viewMatrix;
std::vector<SDL3TextureCache> m_textures;
SDL_GPUDevice* m_device;
SDL_GPUGraphicsPipeline* m_opaquePipeline;
SDL_GPUGraphicsPipeline* m_transparentPipeline;
SDL_GPUTexture* m_transferTexture;
SDL_GPUTexture* m_depthTexture;
SDL_GPUTransferBuffer* m_downloadTransferBuffer;
SDL_GPUTexture* m_dummyTexture;
int m_uploadBufferSize;
SDL_GPUTransferBuffer* m_uploadBuffer;
SDL_GPUTransferBuffer* m_downloadBuffer;
SDL_GPUBuffer* m_vertexBuffer = nullptr;
SDL_Surface* m_renderedImage = nullptr;
SDL_GPUSampler* m_sampler;
};
inline static void Direct3DRMSDL3GPU_EnumDevice(LPD3DENUMDEVICESCALLBACK cb, void* ctx)