Merge branch 'master' into vulkan

This commit is contained in:
Triang3l
2022-02-03 21:12:10 +03:00
501 changed files with 56183 additions and 10196 deletions

View File

@@ -10,15 +10,14 @@
#ifndef XENIA_UI_D3D12_D3D12_API_H_
#define XENIA_UI_D3D12_D3D12_API_H_
// This must be included before D3D and DXGI for things like NOMINMAX.
// Must be included before D3D and DXGI for things like NOMINMAX.
#include "xenia/base/platform_win.h"
#include <DXProgrammableCapture.h>
#include <d3d12.h>
#include <d3d12sdklayers.h>
#include <d3dcompiler.h>
#include <dcomp.h>
#include <dxgi1_4.h>
#include <dxgi1_5.h>
#include <dxgidebug.h>
// For Microsoft::WRL::ComPtr.
#include <wrl/client.h>

View File

@@ -1,379 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2018 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/d3d12/d3d12_context.h"
#include "xenia/base/logging.h"
#include "xenia/base/math.h"
#include "xenia/ui/d3d12/d3d12_immediate_drawer.h"
#include "xenia/ui/d3d12/d3d12_provider.h"
#include "xenia/ui/d3d12/d3d12_util.h"
#include "xenia/ui/window.h"
namespace xe {
namespace ui {
namespace d3d12 {
D3D12Context::D3D12Context(D3D12Provider* provider, Window* target_window)
: GraphicsContext(provider, target_window) {}
D3D12Context::~D3D12Context() { Shutdown(); }
bool D3D12Context::Initialize() {
context_lost_ = false;
if (!target_window_) {
return true;
}
const D3D12Provider& provider = GetD3D12Provider();
IDXGIFactory2* dxgi_factory = provider.GetDXGIFactory();
ID3D12Device* device = provider.GetDevice();
ID3D12CommandQueue* direct_queue = provider.GetDirectQueue();
swap_fence_current_value_ = 1;
swap_fence_completed_value_ = 0;
swap_fence_completion_event_ = CreateEvent(nullptr, false, false, nullptr);
if (swap_fence_completion_event_ == nullptr) {
XELOGE("Failed to create the composition fence completion event");
Shutdown();
return false;
}
// Create a fence for transient resources of compositing.
if (FAILED(device->CreateFence(0, D3D12_FENCE_FLAG_NONE,
IID_PPV_ARGS(&swap_fence_)))) {
XELOGE("Failed to create the composition fence");
Shutdown();
return false;
}
// Create the swap chain.
swap_chain_width_ = target_window_->scaled_width();
swap_chain_height_ = target_window_->scaled_height();
DXGI_SWAP_CHAIN_DESC1 swap_chain_desc;
swap_chain_desc.Width = swap_chain_width_;
swap_chain_desc.Height = swap_chain_height_;
swap_chain_desc.Format = kSwapChainFormat;
swap_chain_desc.Stereo = FALSE;
swap_chain_desc.SampleDesc.Count = 1;
swap_chain_desc.SampleDesc.Quality = 0;
swap_chain_desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swap_chain_desc.BufferCount = kSwapChainBufferCount;
swap_chain_desc.Scaling = DXGI_SCALING_STRETCH;
swap_chain_desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
swap_chain_desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE;
swap_chain_desc.Flags = 0;
IDXGISwapChain1* swap_chain_1;
if (FAILED(dxgi_factory->CreateSwapChainForComposition(
provider.GetDirectQueue(), &swap_chain_desc, nullptr,
&swap_chain_1))) {
XELOGE("Failed to create a DXGI swap chain for composition");
Shutdown();
return false;
}
if (FAILED(swap_chain_1->QueryInterface(IID_PPV_ARGS(&swap_chain_)))) {
XELOGE("Failed to get version 3 of the DXGI swap chain interface");
swap_chain_1->Release();
Shutdown();
return false;
}
swap_chain_1->Release();
// Create a heap for RTV descriptors of swap chain buffers.
D3D12_DESCRIPTOR_HEAP_DESC rtv_heap_desc;
rtv_heap_desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
rtv_heap_desc.NumDescriptors = kSwapChainBufferCount;
rtv_heap_desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
rtv_heap_desc.NodeMask = 0;
if (FAILED(device->CreateDescriptorHeap(
&rtv_heap_desc, IID_PPV_ARGS(&swap_chain_rtv_heap_)))) {
XELOGE("Failed to create swap chain RTV descriptor heap");
Shutdown();
return false;
}
swap_chain_rtv_heap_start_ =
swap_chain_rtv_heap_->GetCPUDescriptorHandleForHeapStart();
// Get the buffers and create their RTV descriptors.
if (!InitializeSwapChainBuffers()) {
Shutdown();
return false;
}
// Create the command list for compositing.
for (uint32_t i = 0; i < kSwapCommandAllocatorCount; ++i) {
if (FAILED(device->CreateCommandAllocator(
D3D12_COMMAND_LIST_TYPE_DIRECT,
IID_PPV_ARGS(&swap_command_allocators_[i])))) {
XELOGE("Failed to create a composition command allocator");
Shutdown();
return false;
}
}
if (FAILED(device->CreateCommandList(
0, D3D12_COMMAND_LIST_TYPE_DIRECT, swap_command_allocators_[0].Get(),
nullptr, IID_PPV_ARGS(&swap_command_list_)))) {
XELOGE("Failed to create the composition graphics command list");
Shutdown();
return false;
}
// Initially in open state, wait until BeginSwap.
swap_command_list_->Close();
// Associate the swap chain with the window via DirectComposition.
if (FAILED(provider.CreateDCompositionDevice(nullptr,
IID_PPV_ARGS(&dcomp_device_)))) {
XELOGE("Failed to create a DirectComposition device");
Shutdown();
return false;
}
if (FAILED(dcomp_device_->CreateTargetForHwnd(
reinterpret_cast<HWND>(target_window_->native_handle()), TRUE,
&dcomp_target_))) {
XELOGE("Failed to create a DirectComposition target for the window");
Shutdown();
return false;
}
if (FAILED(dcomp_device_->CreateVisual(&dcomp_visual_))) {
XELOGE("Failed to create a DirectComposition visual");
Shutdown();
return false;
}
if (FAILED(dcomp_visual_->SetContent(swap_chain_.Get()))) {
XELOGE(
"Failed to set the content of the DirectComposition visual to the swap "
"chain");
Shutdown();
return false;
}
if (FAILED(dcomp_target_->SetRoot(dcomp_visual_.Get()))) {
XELOGE(
"Failed to set the root of the DirectComposition target to the swap "
"chain visual");
Shutdown();
return false;
}
if (FAILED(dcomp_device_->Commit())) {
XELOGE("Failed to commit DirectComposition commands");
Shutdown();
return false;
}
// Initialize the immediate mode drawer if not offscreen.
immediate_drawer_ = std::make_unique<D3D12ImmediateDrawer>(*this);
if (!immediate_drawer_->Initialize()) {
Shutdown();
return false;
}
return true;
}
bool D3D12Context::InitializeSwapChainBuffers() {
// Get references to the buffers.
for (uint32_t i = 0; i < kSwapChainBufferCount; ++i) {
if (FAILED(
swap_chain_->GetBuffer(i, IID_PPV_ARGS(&swap_chain_buffers_[i])))) {
XELOGE("Failed to get buffer {} of the swap chain", i);
return false;
}
}
// Get the back buffer index for the first draw.
swap_chain_back_buffer_index_ = swap_chain_->GetCurrentBackBufferIndex();
// Create RTV descriptors for the swap chain buffers.
ID3D12Device* device = GetD3D12Provider().GetDevice();
D3D12_RENDER_TARGET_VIEW_DESC rtv_desc;
rtv_desc.Format = kSwapChainFormat;
rtv_desc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
rtv_desc.Texture2D.MipSlice = 0;
rtv_desc.Texture2D.PlaneSlice = 0;
for (uint32_t i = 0; i < kSwapChainBufferCount; ++i) {
device->CreateRenderTargetView(swap_chain_buffers_[i].Get(), &rtv_desc,
GetSwapChainBufferRTV(i));
}
return true;
}
void D3D12Context::Shutdown() {
if (!target_window_) {
return;
}
if (!context_lost_ && swap_fence_ &&
swap_fence_->GetCompletedValue() + 1 < swap_fence_current_value_) {
swap_fence_->SetEventOnCompletion(swap_fence_current_value_ - 1,
swap_fence_completion_event_);
WaitForSingleObject(swap_fence_completion_event_, INFINITE);
}
immediate_drawer_.reset();
dcomp_visual_.Reset();
dcomp_target_.Reset();
dcomp_device_.Reset();
swap_command_list_.Reset();
for (uint32_t i = 0; i < kSwapCommandAllocatorCount; ++i) {
swap_command_allocators_[i].Reset();
}
for (uint32_t i = 0; i < kSwapChainBufferCount; ++i) {
swap_chain_buffers_[i].Reset();
}
swap_chain_rtv_heap_.Reset();
swap_chain_.Reset();
// First release the fence since it may reference the event.
swap_fence_.Reset();
if (swap_fence_completion_event_) {
CloseHandle(swap_fence_completion_event_);
swap_fence_completion_event_ = nullptr;
}
swap_fence_current_value_ = 1;
swap_fence_completed_value_ = 0;
}
ImmediateDrawer* D3D12Context::immediate_drawer() {
return immediate_drawer_.get();
}
bool D3D12Context::WasLost() { return context_lost_; }
bool D3D12Context::BeginSwap() {
if (!target_window_ || context_lost_) {
return false;
}
// Resize the swap chain if the window is resized.
uint32_t target_window_width = target_window_->scaled_width();
uint32_t target_window_height = target_window_->scaled_height();
if (swap_chain_width_ != target_window_width ||
swap_chain_height_ != target_window_height) {
// Await the completion of swap chain use.
// Context loss is also faked if resizing fails. In this case, before the
// context is shut down to be recreated, frame completion must be awaited
// (this isn't done if the context is truly lost).
if (swap_fence_completed_value_ + 1 < swap_fence_current_value_) {
swap_fence_->SetEventOnCompletion(swap_fence_current_value_ - 1,
swap_fence_completion_event_);
WaitForSingleObject(swap_fence_completion_event_, INFINITE);
swap_fence_completed_value_ = swap_fence_current_value_ - 1;
}
// All buffer references must be released before resizing.
for (uint32_t i = 0; i < kSwapChainBufferCount; ++i) {
swap_chain_buffers_[i].Reset();
}
if (FAILED(swap_chain_->ResizeBuffers(
kSwapChainBufferCount, target_window_width, target_window_height,
kSwapChainFormat, 0))) {
context_lost_ = true;
return false;
}
swap_chain_width_ = target_window_width;
swap_chain_height_ = target_window_height;
if (!InitializeSwapChainBuffers()) {
context_lost_ = true;
return false;
}
}
// Wait for a swap command allocator to become free.
// Command allocator 0 is used when swap_fence_current_value_ is 1, 4, 7...
swap_fence_completed_value_ = swap_fence_->GetCompletedValue();
if (swap_fence_completed_value_ + kSwapCommandAllocatorCount <
swap_fence_current_value_) {
swap_fence_->SetEventOnCompletion(
swap_fence_current_value_ - kSwapCommandAllocatorCount,
swap_fence_completion_event_);
WaitForSingleObject(swap_fence_completion_event_, INFINITE);
swap_fence_completed_value_ = swap_fence_->GetCompletedValue();
}
// Start the command list.
uint32_t command_allocator_index =
uint32_t((swap_fence_current_value_ + (kSwapCommandAllocatorCount - 1)) %
kSwapCommandAllocatorCount);
ID3D12CommandAllocator* command_allocator =
swap_command_allocators_[command_allocator_index].Get();
command_allocator->Reset();
swap_command_list_->Reset(command_allocator, nullptr);
// Bind the back buffer as a render target and clear it.
D3D12_RESOURCE_BARRIER barrier;
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
barrier.Transition.pResource =
swap_chain_buffers_[swap_chain_back_buffer_index_].Get();
barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT;
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
swap_command_list_->ResourceBarrier(1, &barrier);
D3D12_CPU_DESCRIPTOR_HANDLE back_buffer_rtv = GetSwapChainBackBufferRTV();
swap_command_list_->OMSetRenderTargets(1, &back_buffer_rtv, TRUE, nullptr);
float clear_color[4];
GetClearColor(clear_color);
swap_command_list_->ClearRenderTargetView(back_buffer_rtv, clear_color, 0,
nullptr);
return true;
}
void D3D12Context::EndSwap() {
if (!target_window_ || context_lost_) {
return;
}
ID3D12CommandQueue* direct_queue = GetD3D12Provider().GetDirectQueue();
// Switch the back buffer to presentation state.
D3D12_RESOURCE_BARRIER barrier;
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
barrier.Transition.pResource =
swap_chain_buffers_[swap_chain_back_buffer_index_].Get();
barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;
swap_command_list_->ResourceBarrier(1, &barrier);
// Submit the command list.
swap_command_list_->Close();
ID3D12CommandList* execute_command_lists[] = {swap_command_list_.Get()};
direct_queue->ExecuteCommandLists(1, execute_command_lists);
// Present and check if the context was lost.
if (FAILED(swap_chain_->Present(0, 0))) {
context_lost_ = true;
return;
}
// Signal the fence to wait for frame resources to become free again.
direct_queue->Signal(swap_fence_.Get(), swap_fence_current_value_++);
// Get the back buffer index for the next frame.
swap_chain_back_buffer_index_ = swap_chain_->GetCurrentBackBufferIndex();
}
std::unique_ptr<RawImage> D3D12Context::Capture() {
// TODO(Triang3l): Read back swap chain front buffer.
return nullptr;
}
D3D12_CPU_DESCRIPTOR_HANDLE D3D12Context::GetSwapChainBufferRTV(
uint32_t buffer_index) const {
return GetD3D12Provider().OffsetRTVDescriptor(swap_chain_rtv_heap_start_,
buffer_index);
}
} // namespace d3d12
} // namespace ui
} // namespace xe

View File

@@ -1,112 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2018 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_D3D12_D3D12_CONTEXT_H_
#define XENIA_UI_D3D12_D3D12_CONTEXT_H_
#include <memory>
#include "xenia/ui/d3d12/d3d12_immediate_drawer.h"
#include "xenia/ui/d3d12/d3d12_provider.h"
#include "xenia/ui/graphics_context.h"
namespace xe {
namespace ui {
namespace d3d12 {
class D3D12Context : public GraphicsContext {
public:
~D3D12Context() override;
ImmediateDrawer* immediate_drawer() override;
bool WasLost() override;
bool BeginSwap() override;
void EndSwap() override;
std::unique_ptr<RawImage> Capture() override;
D3D12Provider& GetD3D12Provider() const {
return static_cast<D3D12Provider&>(*provider_);
}
// The format used by DWM.
static constexpr DXGI_FORMAT kSwapChainFormat = DXGI_FORMAT_B8G8R8A8_UNORM;
ID3D12Resource* GetSwapChainBuffer(uint32_t buffer_index) const {
return swap_chain_buffers_[buffer_index].Get();
}
uint32_t GetSwapChainBackBufferIndex() const {
return swap_chain_back_buffer_index_;
}
D3D12_CPU_DESCRIPTOR_HANDLE GetSwapChainBufferRTV(
uint32_t buffer_index) const;
D3D12_CPU_DESCRIPTOR_HANDLE GetSwapChainBackBufferRTV() const {
return GetSwapChainBufferRTV(GetSwapChainBackBufferIndex());
}
void GetSwapChainSize(uint32_t& width, uint32_t& height) const {
width = swap_chain_width_;
height = swap_chain_height_;
}
// Inside the current BeginSwap/EndSwap pair.
uint64_t GetSwapCurrentFenceValue() const {
return swap_fence_current_value_;
}
uint64_t GetSwapCompletedFenceValue() const {
return swap_fence_completed_value_;
}
ID3D12GraphicsCommandList* GetSwapCommandList() const {
return swap_command_list_.Get();
}
private:
friend class D3D12Provider;
explicit D3D12Context(D3D12Provider* provider, Window* target_window);
bool Initialize();
private:
bool InitializeSwapChainBuffers();
void Shutdown();
bool context_lost_ = false;
static constexpr uint32_t kSwapChainBufferCount = 3;
Microsoft::WRL::ComPtr<IDXGISwapChain3> swap_chain_;
uint32_t swap_chain_width_ = 0, swap_chain_height_ = 0;
Microsoft::WRL::ComPtr<ID3D12Resource>
swap_chain_buffers_[kSwapChainBufferCount];
uint32_t swap_chain_back_buffer_index_ = 0;
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> swap_chain_rtv_heap_;
D3D12_CPU_DESCRIPTOR_HANDLE swap_chain_rtv_heap_start_;
uint64_t swap_fence_current_value_ = 1;
uint64_t swap_fence_completed_value_ = 0;
HANDLE swap_fence_completion_event_ = nullptr;
Microsoft::WRL::ComPtr<ID3D12Fence> swap_fence_;
static constexpr uint32_t kSwapCommandAllocatorCount = 3;
Microsoft::WRL::ComPtr<ID3D12CommandAllocator>
swap_command_allocators_[kSwapCommandAllocatorCount];
// Current command allocator is:
// ((swap_fence_current_value_ + (kSwapCommandAllocatorCount - 1))) %
// kSwapCommandAllocatorCount.
Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> swap_command_list_;
Microsoft::WRL::ComPtr<IDCompositionDevice> dcomp_device_;
Microsoft::WRL::ComPtr<IDCompositionTarget> dcomp_target_;
Microsoft::WRL::ComPtr<IDCompositionVisual> dcomp_visual_;
std::unique_ptr<D3D12ImmediateDrawer> immediate_drawer_;
};
} // namespace d3d12
} // namespace ui
} // namespace xe
#endif // XENIA_UI_D3D12_D3D12_CONTEXT_H_

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -41,6 +41,25 @@ void D3D12DescriptorHeapPool::Reclaim(uint64_t completed_submission_index) {
}
}
void D3D12DescriptorHeapPool::ChangeSubmissionTimeline() {
// Reclaim all submitted pages.
if (writable_last_) {
writable_last_->next = submitted_first_;
} else {
writable_first_ = submitted_first_;
}
writable_last_ = submitted_last_;
submitted_first_ = nullptr;
submitted_last_ = nullptr;
// Mark all pages as never used yet in the new timeline.
Page* page = writable_first_;
while (page) {
page->last_submission_index = 0;
page = page->next;
}
}
void D3D12DescriptorHeapPool::ClearCache() {
// Not checking current_page_used_ != 0 because asking for 0 descriptors
// returns a valid heap also - but actually the new heap will be different now
@@ -49,14 +68,12 @@ void D3D12DescriptorHeapPool::ClearCache() {
current_page_used_ = 0;
while (submitted_first_) {
auto next = submitted_first_->next;
submitted_first_->heap->Release();
delete submitted_first_;
submitted_first_ = next;
}
submitted_last_ = nullptr;
while (writable_first_) {
auto next = writable_first_->next;
writable_first_->heap->Release();
delete writable_first_;
writable_first_ = next;
}
@@ -110,7 +127,7 @@ uint64_t D3D12DescriptorHeapPool::Request(uint64_t submission_index,
new_heap_desc.NumDescriptors = page_size_;
new_heap_desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
new_heap_desc.NodeMask = 0;
ID3D12DescriptorHeap* new_heap;
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> new_heap;
if (FAILED(device_->CreateDescriptorHeap(&new_heap_desc,
IID_PPV_ARGS(&new_heap)))) {
XELOGE("Failed to create a heap for {} shader-visible descriptors",

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -30,6 +30,7 @@ class D3D12DescriptorHeapPool {
~D3D12DescriptorHeapPool();
void Reclaim(uint64_t completed_submission_index);
void ChangeSubmissionTimeline();
void ClearCache();
// Because all descriptors for a single draw call must be in the same heap,
@@ -65,7 +66,7 @@ class D3D12DescriptorHeapPool {
// after a successful request because before a request, the heap may not exist
// yet.
ID3D12DescriptorHeap* GetLastRequestHeap() const {
return writable_first_->heap;
return writable_first_->heap.Get();
}
D3D12_CPU_DESCRIPTOR_HANDLE GetLastRequestHeapCPUStart() const {
return writable_first_->cpu_start;
@@ -80,7 +81,7 @@ class D3D12DescriptorHeapPool {
uint32_t page_size_;
struct Page {
ID3D12DescriptorHeap* heap;
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> heap;
D3D12_CPU_DESCRIPTOR_HANDLE cpu_start;
D3D12_GPU_DESCRIPTOR_HANDLE gpu_start;
uint64_t last_submission_index;

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2018 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -17,7 +17,7 @@
#include "xenia/base/assert.h"
#include "xenia/base/logging.h"
#include "xenia/base/math.h"
#include "xenia/ui/d3d12/d3d12_context.h"
#include "xenia/ui/d3d12/d3d12_presenter.h"
#include "xenia/ui/d3d12/d3d12_util.h"
namespace xe {
@@ -38,35 +38,40 @@ D3D12ImmediateDrawer::D3D12ImmediateTexture::D3D12ImmediateTexture(
resource_(resource),
sampler_index_(sampler_index),
immediate_drawer_(immediate_drawer),
immediate_drawer_index_(immediate_drawer_index) {
if (resource_) {
resource_->AddRef();
}
}
immediate_drawer_index_(immediate_drawer_index) {}
D3D12ImmediateDrawer::D3D12ImmediateTexture::~D3D12ImmediateTexture() {
if (immediate_drawer_) {
immediate_drawer_->OnImmediateTextureDestroyed(*this);
}
if (resource_) {
resource_->Release();
}
}
void D3D12ImmediateDrawer::D3D12ImmediateTexture::OnImmediateDrawerShutdown() {
void D3D12ImmediateDrawer::D3D12ImmediateTexture::OnImmediateDrawerDestroyed() {
immediate_drawer_ = nullptr;
// Lifetime is not managed anymore, so don't keep the resource either.
util::ReleaseAndNull(resource_);
resource_.Reset();
}
D3D12ImmediateDrawer::D3D12ImmediateDrawer(D3D12Context& graphics_context)
: ImmediateDrawer(&graphics_context), context_(graphics_context) {}
D3D12ImmediateDrawer::~D3D12ImmediateDrawer() {
// Await GPU usage completion of all draws and texture uploads (which happen
// before draws).
auto d3d12_presenter = static_cast<D3D12Presenter*>(presenter());
if (d3d12_presenter) {
d3d12_presenter->AwaitUISubmissionCompletionFromUIThread(
last_paint_submission_index_);
}
D3D12ImmediateDrawer::~D3D12ImmediateDrawer() { Shutdown(); }
// Texture resources and descriptors are owned and tracked by the immediate
// drawer. Zombie texture objects are supported, but are meaningless.
assert_true(textures_.empty());
for (D3D12ImmediateTexture* texture : textures_) {
texture->OnImmediateDrawerDestroyed();
}
textures_.clear();
}
bool D3D12ImmediateDrawer::Initialize() {
const D3D12Provider& provider = context_.GetD3D12Provider();
ID3D12Device* device = provider.GetDevice();
ID3D12Device* device = provider_.GetDevice();
// Create the root signature.
D3D12_ROOT_PARAMETER root_parameters[size_t(RootParameter::kCount)];
@@ -99,7 +104,7 @@ bool D3D12ImmediateDrawer::Initialize() {
}
{
auto& root_parameter =
root_parameters[size_t(RootParameter::kViewportSizeInv)];
root_parameters[size_t(RootParameter::kCoordinateSpaceSizeInv)];
root_parameter.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
root_parameter.Constants.ShaderRegister = 0;
root_parameter.Constants.RegisterSpace = 0;
@@ -113,16 +118,16 @@ bool D3D12ImmediateDrawer::Initialize() {
root_signature_desc.pStaticSamplers = nullptr;
root_signature_desc.Flags =
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;
root_signature_ = util::CreateRootSignature(provider, root_signature_desc);
if (root_signature_ == nullptr) {
XELOGE("Failed to create the Direct3D 12 immediate drawer root signature");
Shutdown();
*(root_signature_.ReleaseAndGetAddressOf()) =
util::CreateRootSignature(provider_, root_signature_desc);
if (!root_signature_) {
XELOGE("D3D12ImmediateDrawer: Failed to create the root signature");
return false;
}
// Create the pipelines.
D3D12_GRAPHICS_PIPELINE_STATE_DESC pipeline_desc = {};
pipeline_desc.pRootSignature = root_signature_;
pipeline_desc.pRootSignature = root_signature_.Get();
pipeline_desc.VS.pShaderBytecode = shaders::immediate_vs;
pipeline_desc.VS.BytecodeLength = sizeof(shaders::immediate_vs);
pipeline_desc.PS.pShaderBytecode = shaders::immediate_ps;
@@ -133,13 +138,10 @@ bool D3D12ImmediateDrawer::Initialize() {
pipeline_blend_desc.SrcBlend = D3D12_BLEND_SRC_ALPHA;
pipeline_blend_desc.DestBlend = D3D12_BLEND_INV_SRC_ALPHA;
pipeline_blend_desc.BlendOp = D3D12_BLEND_OP_ADD;
// Don't change alpha (always 1).
pipeline_blend_desc.SrcBlendAlpha = D3D12_BLEND_ZERO;
pipeline_blend_desc.SrcBlendAlpha = D3D12_BLEND_ONE;
pipeline_blend_desc.DestBlendAlpha = D3D12_BLEND_ONE;
pipeline_blend_desc.BlendOpAlpha = D3D12_BLEND_OP_ADD;
pipeline_blend_desc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_RED |
D3D12_COLOR_WRITE_ENABLE_GREEN |
D3D12_COLOR_WRITE_ENABLE_BLUE;
pipeline_blend_desc.RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;
pipeline_desc.SampleMask = UINT_MAX;
pipeline_desc.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID;
pipeline_desc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;
@@ -161,23 +163,17 @@ bool D3D12ImmediateDrawer::Initialize() {
UINT(xe::countof(pipeline_input_elements));
pipeline_desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;
pipeline_desc.NumRenderTargets = 1;
pipeline_desc.RTVFormats[0] = D3D12Context::kSwapChainFormat;
pipeline_desc.RTVFormats[0] = D3D12Presenter::kSwapChainFormat;
pipeline_desc.SampleDesc.Count = 1;
if (FAILED(device->CreateGraphicsPipelineState(
&pipeline_desc, IID_PPV_ARGS(&pipeline_triangle_)))) {
XELOGE(
"Failed to create the Direct3D 12 immediate drawer triangle pipeline "
"state");
Shutdown();
XELOGE("D3D12ImmediateDrawer: Failed to create the triangle pipeline");
return false;
}
pipeline_desc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE;
if (FAILED(device->CreateGraphicsPipelineState(
&pipeline_desc, IID_PPV_ARGS(&pipeline_line_)))) {
XELOGE(
"Failed to create the Direct3D 12 immediate drawer line pipeline "
"state");
Shutdown();
XELOGE("D3D12ImmediateDrawer: Failed to create the line pipeline");
return false;
}
@@ -190,14 +186,12 @@ bool D3D12ImmediateDrawer::Initialize() {
if (FAILED(device->CreateDescriptorHeap(&sampler_heap_desc,
IID_PPV_ARGS(&sampler_heap_)))) {
XELOGE(
"Failed to create the Direct3D 12 immediate drawer sampler descriptor "
"heap");
Shutdown();
"D3D12ImmediateDrawer: Failed to create the sampler descriptor heap");
return false;
}
sampler_heap_cpu_start_ = sampler_heap_->GetCPUDescriptorHandleForHeapStart();
sampler_heap_gpu_start_ = sampler_heap_->GetGPUDescriptorHandleForHeapStart();
uint32_t sampler_size = provider.GetSamplerDescriptorSize();
uint32_t sampler_size = provider_.GetSamplerDescriptorSize();
// Nearest neighbor, clamp.
D3D12_SAMPLER_DESC sampler_desc = {};
sampler_desc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT;
@@ -228,58 +222,22 @@ bool D3D12ImmediateDrawer::Initialize() {
device->CreateSampler(&sampler_desc, sampler_handle);
// Create pools for draws.
vertex_buffer_pool_ = std::make_unique<D3D12UploadBufferPool>(provider);
vertex_buffer_pool_ = std::make_unique<D3D12UploadBufferPool>(provider_);
texture_descriptor_pool_ = std::make_unique<D3D12DescriptorHeapPool>(
device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 2048);
// Reset the current state.
current_command_list_ = nullptr;
batch_open_ = false;
return true;
}
void D3D12ImmediateDrawer::Shutdown() {
for (auto& deleted_texture : textures_deleted_) {
deleted_texture.first->Release();
}
textures_deleted_.clear();
for (auto& texture_upload : texture_uploads_submitted_) {
texture_upload.buffer->Release();
texture_upload.texture->Release();
}
texture_uploads_submitted_.clear();
for (auto& texture_upload : texture_uploads_pending_) {
texture_upload.buffer->Release();
texture_upload.texture->Release();
}
texture_uploads_pending_.clear();
for (D3D12ImmediateTexture* texture : textures_) {
texture->OnImmediateDrawerShutdown();
}
textures_.clear();
texture_descriptor_pool_.reset();
vertex_buffer_pool_.reset();
util::ReleaseAndNull(sampler_heap_);
util::ReleaseAndNull(pipeline_line_);
util::ReleaseAndNull(pipeline_triangle_);
util::ReleaseAndNull(root_signature_);
}
std::unique_ptr<ImmediateTexture> D3D12ImmediateDrawer::CreateTexture(
uint32_t width, uint32_t height, ImmediateTextureFilter filter,
bool is_repeated, const uint8_t* data) {
const D3D12Provider& provider = context_.GetD3D12Provider();
ID3D12Device* device = provider.GetDevice();
ID3D12Device* device = provider_.GetDevice();
D3D12_HEAP_FLAGS heap_flag_create_not_zeroed =
provider.GetHeapFlagCreateNotZeroed();
provider_.GetHeapFlagCreateNotZeroed();
D3D12_RESOURCE_DESC resource_desc;
resource_desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
@@ -293,8 +251,8 @@ std::unique_ptr<ImmediateTexture> D3D12ImmediateDrawer::CreateTexture(
resource_desc.SampleDesc.Quality = 0;
resource_desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
resource_desc.Flags = D3D12_RESOURCE_FLAG_NONE;
ID3D12Resource* resource;
if (SUCCEEDED(provider.GetDevice()->CreateCommittedResource(
Microsoft::WRL::ComPtr<ID3D12Resource> resource;
if (SUCCEEDED(device->CreateCommittedResource(
&util::kHeapPropertiesDefault, heap_flag_create_not_zeroed,
&resource_desc, D3D12_RESOURCE_STATE_COPY_DEST, nullptr,
IID_PPV_ARGS(&resource)))) {
@@ -306,7 +264,7 @@ std::unique_ptr<ImmediateTexture> D3D12ImmediateDrawer::CreateTexture(
D3D12_RESOURCE_DESC upload_buffer_desc;
util::FillBufferResourceDesc(upload_buffer_desc, upload_size,
D3D12_RESOURCE_FLAG_NONE);
ID3D12Resource* upload_buffer;
Microsoft::WRL::ComPtr<ID3D12Resource> upload_buffer;
if (SUCCEEDED(device->CreateCommittedResource(
&util::kHeapPropertiesUpload, heap_flag_create_not_zeroed,
&upload_buffer_desc, D3D12_RESOURCE_STATE_GENERIC_READ, nullptr,
@@ -333,35 +291,30 @@ std::unique_ptr<ImmediateTexture> D3D12ImmediateDrawer::CreateTexture(
}
upload_buffer->Unmap(0, nullptr);
// Defer uploading and transition to the next draw.
PendingTextureUpload& pending_upload =
texture_uploads_pending_.emplace_back();
// While the upload has not been yet completed, keep a reference to the
// resource because its lifetime is not tied to that of the
// ImmediateTexture (and thus to context's submissions) now.
resource->AddRef();
pending_upload.texture = resource;
pending_upload.buffer = upload_buffer;
PendingTextureUpload& pending_upload =
texture_uploads_pending_.emplace_back(resource.Get(),
upload_buffer.Get());
} else {
XELOGE(
"Failed to map a Direct3D 12 upload buffer for a {}x{} texture for "
"immediate drawing",
"D3D12ImmediateDrawer: Failed to map an upload buffer for a {}x{} "
"texture",
width, height);
upload_buffer->Release();
resource->Release();
resource = nullptr;
upload_buffer.Reset();
resource.Reset();
}
} else {
XELOGE(
"Failed to create a Direct3D 12 upload buffer for a {}x{} texture "
"for immediate drawing",
"D3D12ImmediateDrawer: Failed to create an upload buffer for a {}x{} "
"texture",
width, height);
resource->Release();
resource = nullptr;
resource.Reset();
}
} else {
XELOGE("Failed to create a {}x{} Direct3D 12 texture for immediate drawing",
width, height);
resource = nullptr;
XELOGE("D3D12ImmediateDrawer: Failed to create a {}x{} texture", width,
height);
}
SamplerIndex sampler_index;
@@ -376,35 +329,38 @@ std::unique_ptr<ImmediateTexture> D3D12ImmediateDrawer::CreateTexture(
// Manage by this immediate drawer if successfully created a resource.
std::unique_ptr<D3D12ImmediateTexture> texture =
std::make_unique<D3D12ImmediateTexture>(
width, height, resource, sampler_index, resource ? this : nullptr,
textures_.size());
width, height, resource.Get(), sampler_index,
resource ? this : nullptr, textures_.size());
if (resource) {
textures_.push_back(texture.get());
// D3D12ImmediateTexture now holds a reference.
resource->Release();
}
return std::move(texture);
}
void D3D12ImmediateDrawer::Begin(int render_target_width,
int render_target_height) {
assert_null(current_command_list_);
void D3D12ImmediateDrawer::Begin(UIDrawContext& ui_draw_context,
float coordinate_space_width,
float coordinate_space_height) {
ImmediateDrawer::Begin(ui_draw_context, coordinate_space_width,
coordinate_space_height);
assert_false(batch_open_);
ID3D12Device* device = context_.GetD3D12Provider().GetDevice();
const D3D12UIDrawContext& d3d12_ui_draw_context =
static_cast<const D3D12UIDrawContext&>(ui_draw_context);
// Use the compositing command list.
current_command_list_ = context_.GetSwapCommandList();
uint64_t completed_fence_value = context_.GetSwapCompletedFenceValue();
// Update the submission index to be used throughout the current immediate
// drawer paint.
last_paint_submission_index_ =
d3d12_ui_draw_context.submission_index_current();
last_completed_submission_index_ =
d3d12_ui_draw_context.submission_index_completed();
// Release deleted textures.
for (auto it = textures_deleted_.begin(); it != textures_deleted_.end();) {
if (it->second > completed_fence_value) {
if (it->second > last_completed_submission_index_) {
++it;
continue;
}
it->first->Release();
if (std::next(it) != textures_deleted_.end()) {
*it = textures_deleted_.back();
}
@@ -414,37 +370,45 @@ void D3D12ImmediateDrawer::Begin(int render_target_width,
// Release upload buffers for completed texture uploads.
auto erase_uploads_end = texture_uploads_submitted_.begin();
while (erase_uploads_end != texture_uploads_submitted_.end()) {
if (erase_uploads_end->fence_value > completed_fence_value) {
if (erase_uploads_end->submission_index >
last_completed_submission_index_) {
break;
}
erase_uploads_end->buffer->Release();
// Release the texture reference held for uploading.
erase_uploads_end->texture->Release();
++erase_uploads_end;
}
texture_uploads_submitted_.erase(texture_uploads_submitted_.begin(),
erase_uploads_end);
vertex_buffer_pool_->Reclaim(completed_fence_value);
texture_descriptor_pool_->Reclaim(completed_fence_value);
// Make sure textures created before the current frame are uploaded, even if
// nothing was drawn in the previous frames or nothing will be drawn in the
// current or subsequent ones, as that would result in upload buffers kept
// forever.
UploadTextures();
texture_descriptor_pool_->Reclaim(last_completed_submission_index_);
vertex_buffer_pool_->Reclaim(last_completed_submission_index_);
// Begin drawing.
ID3D12GraphicsCommandList* command_list =
d3d12_ui_draw_context.command_list();
current_render_target_width_ = render_target_width;
current_render_target_height_ = render_target_height;
D3D12_VIEWPORT viewport;
viewport.TopLeftX = 0.0f;
viewport.TopLeftY = 0.0f;
viewport.Width = float(render_target_width);
viewport.Height = float(render_target_height);
viewport.Width = float(d3d12_ui_draw_context.render_target_width());
viewport.Height = float(d3d12_ui_draw_context.render_target_height());
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
current_command_list_->RSSetViewports(1, &viewport);
command_list->RSSetViewports(1, &viewport);
current_command_list_->SetGraphicsRootSignature(root_signature_);
float viewport_inv_size[2];
viewport_inv_size[0] = 1.0f / viewport.Width;
viewport_inv_size[1] = 1.0f / viewport.Height;
current_command_list_->SetGraphicsRoot32BitConstants(
UINT(RootParameter::kViewportSizeInv), 2, viewport_inv_size, 0);
command_list->SetGraphicsRootSignature(root_signature_.Get());
float coordinate_space_size_inv[2];
coordinate_space_size_inv[0] = 1.0f / coordinate_space_width;
coordinate_space_size_inv[1] = 1.0f / coordinate_space_height;
command_list->SetGraphicsRoot32BitConstants(
UINT(RootParameter::kCoordinateSpaceSizeInv), 2,
coordinate_space_size_inv, 0);
current_scissor_.left = 0;
current_scissor_.top = 0;
@@ -460,9 +424,12 @@ void D3D12ImmediateDrawer::Begin(int render_target_width,
void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) {
assert_false(batch_open_);
assert_not_null(current_command_list_);
uint64_t current_fence_value = context_.GetSwapCurrentFenceValue();
const D3D12UIDrawContext& d3d12_ui_draw_context =
*static_cast<const D3D12UIDrawContext*>(ui_draw_context());
ID3D12GraphicsCommandList* command_list =
d3d12_ui_draw_context.command_list();
// Bind the vertices.
D3D12_VERTEX_BUFFER_VIEW vertex_buffer_view;
@@ -470,16 +437,16 @@ void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) {
vertex_buffer_view.SizeInBytes =
UINT(sizeof(ImmediateVertex)) * batch.vertex_count;
void* vertex_buffer_mapping = vertex_buffer_pool_->Request(
current_fence_value, vertex_buffer_view.SizeInBytes, sizeof(float),
nullptr, nullptr, &vertex_buffer_view.BufferLocation);
last_paint_submission_index_, vertex_buffer_view.SizeInBytes,
sizeof(float), nullptr, nullptr, &vertex_buffer_view.BufferLocation);
if (vertex_buffer_mapping == nullptr) {
XELOGE("Failed to get a buffer for {} vertices in the immediate drawer",
XELOGE("D3D12ImmediateDrawer: Failed to get a buffer for {} vertices",
batch.vertex_count);
return;
}
std::memcpy(vertex_buffer_mapping, batch.vertices,
vertex_buffer_view.SizeInBytes);
current_command_list_->IASetVertexBuffers(0, 1, &vertex_buffer_view);
command_list->IASetVertexBuffers(0, 1, &vertex_buffer_view);
// Bind the indices.
batch_has_index_buffer_ = batch.indices != nullptr;
@@ -488,16 +455,16 @@ void D3D12ImmediateDrawer::BeginDrawBatch(const ImmediateDrawBatch& batch) {
index_buffer_view.SizeInBytes = UINT(sizeof(uint16_t)) * batch.index_count;
index_buffer_view.Format = DXGI_FORMAT_R16_UINT;
void* index_buffer_mapping = vertex_buffer_pool_->Request(
current_fence_value, index_buffer_view.SizeInBytes, sizeof(uint16_t),
nullptr, nullptr, &index_buffer_view.BufferLocation);
last_paint_submission_index_, index_buffer_view.SizeInBytes,
sizeof(uint16_t), nullptr, nullptr, &index_buffer_view.BufferLocation);
if (index_buffer_mapping == nullptr) {
XELOGE("Failed to get a buffer for {} indices in the immediate drawer",
XELOGE("D3D12ImmediateDrawer: Failed to get a buffer for {} indices",
batch.index_count);
return;
}
std::memcpy(index_buffer_mapping, batch.indices,
index_buffer_view.SizeInBytes);
current_command_list_->IASetIndexBuffer(&index_buffer_view);
command_list->IASetIndexBuffer(&index_buffer_view);
}
batch_open_ = true;
@@ -509,30 +476,30 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
return;
}
// Set the scissor rectangle if enabled.
D3D12_RECT scissor;
if (draw.scissor) {
scissor.left = draw.scissor_rect[0];
scissor.top = current_render_target_height_ -
(draw.scissor_rect[1] + draw.scissor_rect[3]);
scissor.right = scissor.left + draw.scissor_rect[2];
scissor.bottom = scissor.top + draw.scissor_rect[3];
} else {
scissor.left = 0;
scissor.top = 0;
scissor.right = current_render_target_width_;
scissor.bottom = current_render_target_height_;
}
if (scissor.right <= scissor.left || scissor.bottom <= scissor.top) {
// Nothing is visible (used as the default current_scissor_ value also).
const D3D12UIDrawContext& d3d12_ui_draw_context =
*static_cast<const D3D12UIDrawContext*>(ui_draw_context());
ID3D12GraphicsCommandList* command_list =
d3d12_ui_draw_context.command_list();
// Set the scissor rectangle.
uint32_t scissor_left, scissor_top, scissor_width, scissor_height;
if (!ScissorToRenderTarget(draw, scissor_left, scissor_top, scissor_width,
scissor_height)) {
// Nothing is visible (zero area is used as the default current_scissor_
// value also).
return;
}
D3D12_RECT scissor;
scissor.left = LONG(scissor_left);
scissor.top = LONG(scissor_top);
scissor.right = LONG(scissor_left + scissor_width);
scissor.bottom = LONG(scissor_top + scissor_height);
if (current_scissor_.left != scissor.left ||
current_scissor_.top != scissor.top ||
current_scissor_.right != scissor.right ||
current_scissor_.bottom != scissor.bottom) {
current_scissor_ = scissor;
current_command_list_->RSSetScissorRects(1, &scissor);
command_list->RSSetScissorRects(1, &scissor);
}
// Ensure texture data is available if any texture is loaded, upload all in a
@@ -542,30 +509,27 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
// Bind the texture. If this is the first draw in a frame, the descriptor heap
// index will be invalid initially, and the texture will be bound regardless
// of what's in current_texture_.
uint64_t current_fence_value = context_.GetSwapCurrentFenceValue();
auto texture = static_cast<D3D12ImmediateTexture*>(draw.texture);
ID3D12Resource* texture_resource = texture ? texture->resource() : nullptr;
bool bind_texture = current_texture_ != texture_resource;
uint32_t texture_descriptor_index;
uint64_t texture_heap_index = texture_descriptor_pool_->Request(
current_fence_value, current_texture_descriptor_heap_index_,
last_paint_submission_index_, current_texture_descriptor_heap_index_,
bind_texture ? 1 : 0, 1, texture_descriptor_index);
if (texture_heap_index == D3D12DescriptorHeapPool::kHeapIndexInvalid) {
return;
}
if (texture_resource) {
texture->SetLastUsageFenceValue(current_fence_value);
texture->SetLastUsageSubmissionIndex(last_paint_submission_index_);
}
if (current_texture_descriptor_heap_index_ != texture_heap_index) {
current_texture_descriptor_heap_index_ = texture_heap_index;
bind_texture = true;
ID3D12DescriptorHeap* descriptor_heaps[] = {
texture_descriptor_pool_->GetLastRequestHeap(), sampler_heap_};
current_command_list_->SetDescriptorHeaps(2, descriptor_heaps);
texture_descriptor_pool_->GetLastRequestHeap(), sampler_heap_.Get()};
command_list->SetDescriptorHeaps(2, descriptor_heaps);
}
const D3D12Provider& provider = context_.GetD3D12Provider();
if (bind_texture) {
current_texture_ = texture_resource;
D3D12_SHADER_RESOURCE_VIEW_DESC texture_view_desc;
@@ -587,14 +551,14 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
texture_view_desc.Texture2D.MipLevels = 1;
texture_view_desc.Texture2D.PlaneSlice = 0;
texture_view_desc.Texture2D.ResourceMinLODClamp = 0.0f;
provider.GetDevice()->CreateShaderResourceView(
provider_.GetDevice()->CreateShaderResourceView(
texture_resource, &texture_view_desc,
provider.OffsetViewDescriptor(
provider_.OffsetViewDescriptor(
texture_descriptor_pool_->GetLastRequestHeapCPUStart(),
texture_descriptor_index));
current_command_list_->SetGraphicsRootDescriptorTable(
command_list->SetGraphicsRootDescriptorTable(
UINT(RootParameter::kTexture),
provider.OffsetViewDescriptor(
provider_.OffsetViewDescriptor(
texture_descriptor_pool_->GetLastRequestHeapGPUStart(),
texture_descriptor_index));
}
@@ -605,10 +569,10 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
texture_resource ? texture->sampler_index() : SamplerIndex::kNearestClamp;
if (current_sampler_index_ != sampler_index) {
current_sampler_index_ = sampler_index;
current_command_list_->SetGraphicsRootDescriptorTable(
command_list->SetGraphicsRootDescriptorTable(
UINT(RootParameter::kSampler),
provider.OffsetSamplerDescriptor(sampler_heap_gpu_start_,
uint32_t(sampler_index)));
provider_.OffsetSamplerDescriptor(sampler_heap_gpu_start_,
uint32_t(sampler_index)));
}
// Set the primitive type and the pipeline for it.
@@ -617,11 +581,11 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
switch (draw.primitive_type) {
case ImmediatePrimitiveType::kLines:
primitive_topology = D3D_PRIMITIVE_TOPOLOGY_LINELIST;
pipeline = pipeline_line_;
pipeline = pipeline_line_.Get();
break;
case ImmediatePrimitiveType::kTriangles:
primitive_topology = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;
pipeline = pipeline_triangle_;
pipeline = pipeline_triangle_.Get();
break;
default:
assert_unhandled_case(draw.primitive_type);
@@ -629,16 +593,16 @@ void D3D12ImmediateDrawer::Draw(const ImmediateDraw& draw) {
}
if (current_primitive_topology_ != primitive_topology) {
current_primitive_topology_ = primitive_topology;
current_command_list_->IASetPrimitiveTopology(primitive_topology);
current_command_list_->SetPipelineState(pipeline);
command_list->IASetPrimitiveTopology(primitive_topology);
command_list->SetPipelineState(pipeline);
}
// Draw.
if (batch_has_index_buffer_) {
current_command_list_->DrawIndexedInstanced(
draw.count, 1, draw.index_offset, draw.base_vertex, 0);
command_list->DrawIndexedInstanced(draw.count, 1, draw.index_offset,
draw.base_vertex, 0);
} else {
current_command_list_->DrawInstanced(draw.count, 1, draw.base_vertex, 0);
command_list->DrawInstanced(draw.count, 1, draw.base_vertex, 0);
}
}
@@ -646,11 +610,29 @@ void D3D12ImmediateDrawer::EndDrawBatch() { batch_open_ = false; }
void D3D12ImmediateDrawer::End() {
assert_false(batch_open_);
if (current_command_list_) {
// Don't keep upload buffers forever if nothing was drawn in this frame.
UploadTextures();
current_command_list_ = nullptr;
ImmediateDrawer::End();
}
void D3D12ImmediateDrawer::OnLeavePresenter() {
// Leaving the presenter's submission timeline - await GPU usage completion of
// all draws and texture uploads (which happen before draws) and reset
// submission indices.
D3D12Presenter& d3d12_presenter = *static_cast<D3D12Presenter*>(presenter());
d3d12_presenter.AwaitUISubmissionCompletionFromUIThread(
last_paint_submission_index_);
for (D3D12ImmediateTexture* texture : textures_) {
texture->SetLastUsageSubmissionIndex(0);
}
texture_uploads_submitted_.clear();
vertex_buffer_pool_->ChangeSubmissionTimeline();
texture_descriptor_pool_->ChangeSubmissionTimeline();
last_paint_submission_index_ = 0;
last_completed_submission_index_ = 0;
}
void D3D12ImmediateDrawer::OnImmediateTextureDestroyed(
@@ -665,35 +647,35 @@ void D3D12ImmediateDrawer::OnImmediateTextureDestroyed(
// Queue for delayed release.
ID3D12Resource* resource = texture.resource();
uint64_t last_usage_fence_value = texture.last_usage_fence_value();
UINT64 last_usage_submission_index = texture.last_usage_submission_index();
if (resource &&
last_usage_fence_value > context_.GetSwapCompletedFenceValue()) {
resource->AddRef();
textures_deleted_.push_back(
std::make_pair(resource, last_usage_fence_value));
last_usage_submission_index > last_completed_submission_index_) {
textures_deleted_.emplace_back(resource, last_usage_submission_index);
}
}
void D3D12ImmediateDrawer::UploadTextures() {
assert_not_null(current_command_list_);
if (texture_uploads_pending_.empty()) {
// Called often - don't initialize anything.
return;
}
ID3D12Device* device = context_.GetD3D12Provider().GetDevice();
uint64_t current_fence_value = context_.GetSwapCurrentFenceValue();
ID3D12Device* device = provider_.GetDevice();
const D3D12UIDrawContext& d3d12_ui_draw_context =
*static_cast<const D3D12UIDrawContext*>(ui_draw_context());
ID3D12GraphicsCommandList* command_list =
d3d12_ui_draw_context.command_list();
// Copy all at once, then transition all at once (not interleaving copying and
// pipeline barriers).
std::vector<D3D12_RESOURCE_BARRIER> barriers;
barriers.reserve(texture_uploads_pending_.size());
for (const PendingTextureUpload& pending_upload : texture_uploads_pending_) {
ID3D12Resource* texture = pending_upload.texture;
ID3D12Resource* texture = pending_upload.texture.Get();
D3D12_RESOURCE_DESC texture_desc = texture->GetDesc();
D3D12_TEXTURE_COPY_LOCATION location_source, location_dest;
location_source.pResource = pending_upload.buffer;
location_source.pResource = pending_upload.buffer.Get();
location_source.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
device->GetCopyableFootprints(&texture_desc, 0, 1, 0,
&location_source.PlacedFootprint, nullptr,
@@ -701,8 +683,8 @@ void D3D12ImmediateDrawer::UploadTextures() {
location_dest.pResource = texture;
location_dest.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
location_dest.SubresourceIndex = 0;
current_command_list_->CopyTextureRegion(&location_dest, 0, 0, 0,
&location_source, nullptr);
command_list->CopyTextureRegion(&location_dest, 0, 0, 0, &location_source,
nullptr);
D3D12_RESOURCE_BARRIER& barrier = barriers.emplace_back();
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
@@ -712,18 +694,12 @@ void D3D12ImmediateDrawer::UploadTextures() {
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
SubmittedTextureUpload& submitted_upload =
texture_uploads_submitted_.emplace_back();
// Transfer the reference to the texture - need to keep it until the upload
// is completed.
submitted_upload.texture = texture;
submitted_upload.buffer = pending_upload.buffer;
submitted_upload.fence_value = current_fence_value;
texture_uploads_submitted_.emplace_back(
texture, pending_upload.buffer.Get(), last_paint_submission_index_);
}
texture_uploads_pending_.clear();
assert_false(barriers.empty());
current_command_list_->ResourceBarrier(UINT(barriers.size()),
barriers.data());
command_list->ResourceBarrier(UINT(barriers.size()), barriers.data());
}
} // namespace d3d12

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2018 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -17,6 +17,7 @@
#include "xenia/ui/d3d12/d3d12_api.h"
#include "xenia/ui/d3d12/d3d12_descriptor_heap_pool.h"
#include "xenia/ui/d3d12/d3d12_provider.h"
#include "xenia/ui/d3d12/d3d12_upload_buffer_pool.h"
#include "xenia/ui/immediate_drawer.h"
@@ -24,15 +25,19 @@ namespace xe {
namespace ui {
namespace d3d12 {
class D3D12Context;
class D3D12ImmediateDrawer : public ImmediateDrawer {
class D3D12ImmediateDrawer final : public ImmediateDrawer {
public:
D3D12ImmediateDrawer(D3D12Context& graphics_context);
~D3D12ImmediateDrawer() override;
static std::unique_ptr<D3D12ImmediateDrawer> Create(
const D3D12Provider& provider) {
auto immediate_drawer = std::unique_ptr<D3D12ImmediateDrawer>(
new D3D12ImmediateDrawer(provider));
if (!immediate_drawer->Initialize()) {
return nullptr;
}
return std::move(immediate_drawer);
}
bool Initialize();
void Shutdown();
~D3D12ImmediateDrawer();
std::unique_ptr<ImmediateTexture> CreateTexture(uint32_t width,
uint32_t height,
@@ -40,12 +45,16 @@ class D3D12ImmediateDrawer : public ImmediateDrawer {
bool is_repeated,
const uint8_t* data) override;
void Begin(int render_target_width, int render_target_height) override;
void Begin(UIDrawContext& ui_draw_context, float coordinate_space_width,
float coordinate_space_height) override;
void BeginDrawBatch(const ImmediateDrawBatch& batch) override;
void Draw(const ImmediateDraw& draw) override;
void EndDrawBatch() override;
void End() override;
protected:
void OnLeavePresenter() override;
private:
enum class SamplerIndex {
kNearestClamp,
@@ -57,7 +66,7 @@ class D3D12ImmediateDrawer : public ImmediateDrawer {
kInvalid = kCount
};
class D3D12ImmediateTexture : public ImmediateTexture {
class D3D12ImmediateTexture final : public ImmediateTexture {
public:
static constexpr DXGI_FORMAT kFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
D3D12ImmediateTexture(uint32_t width, uint32_t height,
@@ -66,75 +75,93 @@ class D3D12ImmediateDrawer : public ImmediateDrawer {
size_t immediate_drawer_index);
~D3D12ImmediateTexture() override;
ID3D12Resource* resource() const { return resource_; }
ID3D12Resource* resource() const { return resource_.Get(); }
SamplerIndex sampler_index() const { return sampler_index_; }
size_t immediate_drawer_index() const { return immediate_drawer_index_; }
void SetImmediateDrawerIndex(size_t index) {
immediate_drawer_index_ = index;
}
void OnImmediateDrawerShutdown();
void OnImmediateDrawerDestroyed();
uint64_t last_usage_fence_value() const { return last_usage_fence_value_; }
void SetLastUsageFenceValue(uint64_t fence_value) {
last_usage_fence_value_ = fence_value;
UINT64 last_usage_submission_index() const {
return last_usage_submission_index_;
}
void SetLastUsageSubmissionIndex(UINT64 submission_index) {
last_usage_submission_index_ = submission_index;
}
private:
ID3D12Resource* resource_;
Microsoft::WRL::ComPtr<ID3D12Resource> resource_;
SamplerIndex sampler_index_;
D3D12ImmediateDrawer* immediate_drawer_;
size_t immediate_drawer_index_;
uint64_t last_usage_fence_value_ = 0;
UINT64 last_usage_submission_index_ = 0;
};
D3D12ImmediateDrawer(const D3D12Provider& provider) : provider_(provider) {}
bool Initialize();
void OnImmediateTextureDestroyed(D3D12ImmediateTexture& texture);
void UploadTextures();
D3D12Context& context_;
const D3D12Provider& provider_;
ID3D12RootSignature* root_signature_ = nullptr;
Microsoft::WRL::ComPtr<ID3D12RootSignature> root_signature_;
enum class RootParameter {
kTexture,
kSampler,
kViewportSizeInv,
kCoordinateSpaceSizeInv,
kCount
};
ID3D12PipelineState* pipeline_triangle_ = nullptr;
ID3D12PipelineState* pipeline_line_ = nullptr;
Microsoft::WRL::ComPtr<ID3D12PipelineState> pipeline_triangle_;
Microsoft::WRL::ComPtr<ID3D12PipelineState> pipeline_line_;
ID3D12DescriptorHeap* sampler_heap_ = nullptr;
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> sampler_heap_;
D3D12_CPU_DESCRIPTOR_HANDLE sampler_heap_cpu_start_;
D3D12_GPU_DESCRIPTOR_HANDLE sampler_heap_gpu_start_;
std::unique_ptr<D3D12UploadBufferPool> vertex_buffer_pool_;
std::unique_ptr<D3D12DescriptorHeapPool> texture_descriptor_pool_;
// Only with non-null resources.
std::vector<D3D12ImmediateTexture*> textures_;
struct PendingTextureUpload {
ID3D12Resource* texture;
ID3D12Resource* buffer;
PendingTextureUpload(ID3D12Resource* texture, ID3D12Resource* buffer)
: texture(texture), buffer(buffer) {}
Microsoft::WRL::ComPtr<ID3D12Resource> texture;
Microsoft::WRL::ComPtr<ID3D12Resource> buffer;
};
std::vector<PendingTextureUpload> texture_uploads_pending_;
struct SubmittedTextureUpload {
ID3D12Resource* texture;
ID3D12Resource* buffer;
uint64_t fence_value;
SubmittedTextureUpload(ID3D12Resource* texture, ID3D12Resource* buffer,
UINT64 submission_index)
: texture(texture),
buffer(buffer),
submission_index(submission_index) {}
Microsoft::WRL::ComPtr<ID3D12Resource> texture;
Microsoft::WRL::ComPtr<ID3D12Resource> buffer;
UINT64 submission_index;
};
std::deque<SubmittedTextureUpload> texture_uploads_submitted_;
std::vector<std::pair<ID3D12Resource*, uint64_t>> textures_deleted_;
std::deque<std::pair<Microsoft::WRL::ComPtr<ID3D12Resource>, UINT64>>
textures_deleted_;
std::unique_ptr<D3D12UploadBufferPool> vertex_buffer_pool_;
std::unique_ptr<D3D12DescriptorHeapPool> texture_descriptor_pool_;
// The submission index within the current Begin (or the last, if outside
// one).
UINT64 last_paint_submission_index_ = 0;
// Completed submission index as of the latest Begin, to coarsely skip delayed
// texture deletion.
UINT64 last_completed_submission_index_ = 0;
ID3D12GraphicsCommandList* current_command_list_ = nullptr;
int current_render_target_width_, current_render_target_height_;
bool batch_open_ = false;
bool batch_has_index_buffer_;
D3D12_RECT current_scissor_;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,332 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_D3D12_D3D12_PRESENTER_H_
#define XENIA_UI_D3D12_D3D12_PRESENTER_H_
#include <array>
#include <memory>
#include <utility>
#include "xenia/base/math.h"
#include "xenia/ui/d3d12/d3d12_provider.h"
#include "xenia/ui/d3d12/d3d12_submission_tracker.h"
#include "xenia/ui/presenter.h"
#include "xenia/ui/surface.h"
namespace xe {
namespace ui {
namespace d3d12 {
class D3D12UIDrawContext final : public UIDrawContext {
public:
D3D12UIDrawContext(Presenter& presenter, uint32_t render_target_width,
uint32_t render_target_height,
ID3D12GraphicsCommandList* command_list,
UINT64 submission_index_current,
UINT64 submission_index_completed)
: UIDrawContext(presenter, render_target_width, render_target_height),
command_list_(command_list),
submission_index_current_(submission_index_current),
submission_index_completed_(submission_index_completed) {}
ID3D12GraphicsCommandList* command_list() const {
return command_list_.Get();
}
UINT64 submission_index_current() const { return submission_index_current_; }
UINT64 submission_index_completed() const {
return submission_index_completed_;
}
private:
Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> command_list_;
UINT64 submission_index_current_;
UINT64 submission_index_completed_;
};
class D3D12Presenter final : public Presenter {
public:
static constexpr DXGI_FORMAT kGuestOutputFormat =
DXGI_FORMAT_R10G10B10A2_UNORM;
static constexpr D3D12_RESOURCE_STATES kGuestOutputInternalState =
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
static constexpr DXGI_FORMAT kGuestOutputIntermediateFormat =
DXGI_FORMAT_R10G10B10A2_UNORM;
// The format used internally by Windows composition.
static constexpr DXGI_FORMAT kSwapChainFormat = DXGI_FORMAT_B8G8R8A8_UNORM;
// The callback must use the main direct queue of the provider.
class D3D12GuestOutputRefreshContext final
: public GuestOutputRefreshContext {
public:
D3D12GuestOutputRefreshContext(bool& is_8bpc_out_ref,
ID3D12Resource* resource)
: GuestOutputRefreshContext(is_8bpc_out_ref), resource_(resource) {}
// kGuestOutputFormat, supports UAV. The initial state in the callback is
// kGuestOutputInternalState, and the callback must also transition it back
// to kGuestOutputInternalState before finishing.
ID3D12Resource* resource_uav_capable() const { return resource_.Get(); }
private:
Microsoft::WRL::ComPtr<ID3D12Resource> resource_;
};
static std::unique_ptr<D3D12Presenter> Create(
HostGpuLossCallback host_gpu_loss_callback,
const D3D12Provider& provider) {
auto presenter = std::unique_ptr<D3D12Presenter>(
new D3D12Presenter(host_gpu_loss_callback, provider));
if (!presenter->InitializeSurfaceIndependent()) {
return nullptr;
}
return presenter;
}
~D3D12Presenter();
const D3D12Provider& provider() const { return provider_; }
Surface::TypeFlags GetSupportedSurfaceTypes() const override;
bool CaptureGuestOutput(RawImage& image_out) override;
void AwaitUISubmissionCompletionFromUIThread(UINT64 submission_index) {
ui_submission_tracker_.AwaitSubmissionCompletion(submission_index);
}
protected:
SurfacePaintConnectResult ConnectOrReconnectPaintingToSurfaceFromUIThread(
Surface& new_surface, uint32_t new_surface_width,
uint32_t new_surface_height, bool was_paintable,
bool& is_vsync_implicit_out) override;
void DisconnectPaintingFromSurfaceFromUIThreadImpl() override;
bool RefreshGuestOutputImpl(
uint32_t mailbox_index, uint32_t frontbuffer_width,
uint32_t frontbuffer_height,
std::function<bool(GuestOutputRefreshContext& context)> refresher,
bool& is_8bpc_out) override;
PaintResult PaintAndPresentImpl(bool execute_ui_drawers) override;
private:
struct GuestOutputPaintRectangleConstants {
union {
struct {
float x;
float y;
};
float offset[2];
};
union {
struct {
float width;
float height;
};
float size[2];
};
};
enum class GuestOutputPaintRootParameter : UINT {
kSource,
kRectangle,
kEffectConstants,
kCount,
};
enum GuestOutputPaintRootSignatureIndex : size_t {
kGuestOutputPaintRootSignatureIndexBilinear,
kGuestOutputPaintRootSignatureIndexCasSharpen,
kGuestOutputPaintRootSignatureIndexCasResample,
kGuestOutputPaintRootSignatureIndexFsrEasu,
kGuestOutputPaintRootSignatureIndexFsrRcas,
kGuestOutputPaintRootSignatureCount,
};
static constexpr GuestOutputPaintRootSignatureIndex
GetGuestOutputPaintRootSignatureIndex(GuestOutputPaintEffect effect) {
switch (effect) {
case GuestOutputPaintEffect::kBilinear:
case GuestOutputPaintEffect::kBilinearDither:
return kGuestOutputPaintRootSignatureIndexBilinear;
case GuestOutputPaintEffect::kCasSharpen:
case GuestOutputPaintEffect::kCasSharpenDither:
return kGuestOutputPaintRootSignatureIndexCasSharpen;
case GuestOutputPaintEffect::kCasResample:
case GuestOutputPaintEffect::kCasResampleDither:
return kGuestOutputPaintRootSignatureIndexCasResample;
case GuestOutputPaintEffect::kFsrEasu:
return kGuestOutputPaintRootSignatureIndexFsrEasu;
case GuestOutputPaintEffect::kFsrRcas:
case GuestOutputPaintEffect::kFsrRcasDither:
return kGuestOutputPaintRootSignatureIndexFsrRcas;
default:
assert_unhandled_case(effect);
return kGuestOutputPaintRootSignatureCount;
}
}
struct PaintContext {
explicit PaintContext() = default;
PaintContext(const PaintContext& paint_context) = delete;
PaintContext& operator=(const PaintContext& paint_context) = delete;
static constexpr uint32_t kSwapChainBufferCount = 3;
enum RTVIndex : UINT {
// Swap chain buffers - updated when creating the swap chain
// (connection-specific).
kRTVIndexSwapChainBuffer0,
// Intermediate textures - the last usage is
// guest_output_intermediate_texture_paint_last_usage_.
kRTVIndexGuestOutputIntermediate0 =
kRTVIndexSwapChainBuffer0 + kSwapChainBufferCount,
kRTVCount =
kRTVIndexGuestOutputIntermediate0 + kGuestOutputMailboxSize - 1,
};
enum ViewIndex : UINT {
// Guest output textures - indices are the same as in
// guest_output_resource_paint_refs, and the last usage is tied to them.
kViewIndexGuestOutput0Srv,
// Intermediate textures - the last usage is
// guest_output_intermediate_texture_paint_last_usage_.
kViewIndexGuestOutputIntermediate0Srv =
kViewIndexGuestOutput0Srv + kGuestOutputMailboxSize,
kViewCount = kViewIndexGuestOutputIntermediate0Srv +
kMaxGuestOutputPaintEffects - 1,
};
void AwaitSwapChainUsageCompletion() {
// Presentation engine usage.
present_submission_tracker.AwaitAllSubmissionsCompletion();
// Paint (render target) usage. While the presentation fence is signaled
// on the same queue, and presentation happens after painting, awaiting
// anyway for safety just to make less assumptions in the architecture.
paint_submission_tracker.AwaitAllSubmissionsCompletion();
}
void DestroySwapChain();
// Connection-independent.
// Signaled before presenting.
D3D12SubmissionTracker paint_submission_tracker;
// Signaled after presenting.
D3D12SubmissionTracker present_submission_tracker;
std::array<Microsoft::WRL::ComPtr<ID3D12CommandAllocator>,
kSwapChainBufferCount>
command_allocators;
Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> command_list;
// Descriptor heaps for views of the current resources related to the guest
// output and to painting, updated either during painting or during
// connection lifetime management if outdated after awaiting usage
// completion.
// RTV heap.
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> rtv_heap;
// Shader-visible CBV/SRV/UAV heap.
Microsoft::WRL::ComPtr<ID3D12DescriptorHeap> view_heap;
// Refreshed and cleaned up during guest output painting. The first is the
// paint submission index in which the guest output texture (and its
// descriptors) was last used, the second is the reference to the texture,
// which may be null. The indices are not mailbox indices here, rather, if
// the reference is not in this array yet, the most outdated reference, if
// needed, is replaced with the new one, awaiting the completion of the last
// paint usage.
std::array<std::pair<UINT64, Microsoft::WRL::ComPtr<ID3D12Resource>>,
kGuestOutputMailboxSize>
guest_output_resource_paint_refs;
// Current intermediate textures for guest output painting, refreshed when
// painting guest output. While not in use, they are in
// D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE.
std::array<Microsoft::WRL::ComPtr<ID3D12Resource>,
kMaxGuestOutputPaintEffects - 1>
guest_output_intermediate_textures;
UINT64 guest_output_intermediate_texture_last_usage = 0;
// Connection-specific.
uint32_t swap_chain_width = 0;
uint32_t swap_chain_height = 0;
bool swap_chain_allows_tearing = false;
Microsoft::WRL::ComPtr<IDXGISwapChain3> swap_chain;
std::array<Microsoft::WRL::ComPtr<ID3D12Resource>, kSwapChainBufferCount>
swap_chain_buffers;
};
explicit D3D12Presenter(HostGpuLossCallback host_gpu_loss_callback,
const D3D12Provider& provider)
: Presenter(host_gpu_loss_callback), provider_(provider) {}
bool dxgi_supports_tearing() const { return dxgi_supports_tearing_; }
bool InitializeSurfaceIndependent();
const D3D12Provider& provider_;
// Whether DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING is supported by DXGI (depends in
// particular on the Windows 10 version and hardware support), primarily for
// variable refresh rate support.
bool dxgi_supports_tearing_ = false;
// Static objects for guest output presentation, used only when painting the
// main target (can be destroyed only after awaiting main target usage
// completion).
std::array<Microsoft::WRL::ComPtr<ID3D12RootSignature>,
kGuestOutputPaintRootSignatureCount>
guest_output_paint_root_signatures_;
std::array<Microsoft::WRL::ComPtr<ID3D12PipelineState>,
size_t(GuestOutputPaintEffect::kCount)>
guest_output_paint_intermediate_pipelines_;
std::array<Microsoft::WRL::ComPtr<ID3D12PipelineState>,
size_t(GuestOutputPaintEffect::kCount)>
guest_output_paint_final_pipelines_;
// The first is the refresher submission tracker fence value at which the
// guest output texture was last refreshed, the second is the reference to the
// texture, which may be null. The indices are the mailbox indices.
std::array<std::pair<UINT64, Microsoft::WRL::ComPtr<ID3D12Resource>>,
kGuestOutputMailboxSize>
guest_output_resources_;
// The guest output resources are protected by two submission trackers - the
// refresher ones (for writing to them via the guest_output_resources_
// references) and the paint one (for presenting it via the
// paint_context_.guest_output_resource_paint_refs references taken from
// guest_output_resources_).
D3D12SubmissionTracker guest_output_resource_refresher_submission_tracker_;
// UI submission tracker with the submission index that can be given to UI
// drawers (accessible from the UI thread only, at any time).
D3D12SubmissionTracker ui_submission_tracker_;
// Accessible only by painting and by surface connection lifetime management
// (ConnectOrReconnectPaintingToSurfaceFromUIThread,
// DisconnectPaintingFromSurfaceFromUIThreadImpl) by the thread doing it, as
// well as by presenter initialization and shutdown.
PaintContext paint_context_;
};
} // namespace d3d12
} // namespace ui
} // namespace xe
#endif // XENIA_UI_D3D12_D3D12_PRESENTER_H_

View File

@@ -15,7 +15,8 @@
#include "xenia/base/cvar.h"
#include "xenia/base/logging.h"
#include "xenia/base/math.h"
#include "xenia/ui/d3d12/d3d12_context.h"
#include "xenia/ui/d3d12/d3d12_immediate_drawer.h"
#include "xenia/ui/d3d12/d3d12_presenter.h"
DEFINE_bool(d3d12_debug, false, "Enable Direct3D 12 and DXGI debug layer.",
"D3D12");
@@ -77,6 +78,14 @@ D3D12Provider::~D3D12Provider() {
dxgi_factory_->Release();
}
if (cvars::d3d12_debug && pfn_dxgi_get_debug_interface1_) {
Microsoft::WRL::ComPtr<IDXGIDebug> dxgi_debug;
if (SUCCEEDED(
pfn_dxgi_get_debug_interface1_(0, IID_PPV_ARGS(&dxgi_debug)))) {
dxgi_debug->ReportLiveObjects(DXGI_DEBUG_ALL, DXGI_DEBUG_RLO_ALL);
}
}
if (library_dxcompiler_ != nullptr) {
FreeLibrary(library_dxcompiler_);
}
@@ -86,9 +95,6 @@ D3D12Provider::~D3D12Provider() {
if (library_d3dcompiler_ != nullptr) {
FreeLibrary(library_d3dcompiler_);
}
if (library_dcomp_ != nullptr) {
FreeLibrary(library_dcomp_);
}
if (library_d3d12_ != nullptr) {
FreeLibrary(library_d3d12_);
}
@@ -120,9 +126,8 @@ bool D3D12Provider::Initialize() {
// Load the core libraries.
library_dxgi_ = LoadLibraryW(L"dxgi.dll");
library_d3d12_ = LoadLibraryW(L"D3D12.dll");
library_dcomp_ = LoadLibraryW(L"dcomp.dll");
if (!library_dxgi_ || !library_d3d12_ || !library_dcomp_) {
XELOGE("Failed to load dxgi.dll, D3D12.dll or dcomp.dll");
if (!library_dxgi_ || !library_d3d12_) {
XELOGE("Failed to load dxgi.dll or D3D12.dll");
return false;
}
bool libraries_loaded = true;
@@ -143,12 +148,8 @@ bool D3D12Provider::Initialize() {
(pfn_d3d12_serialize_root_signature_ = PFN_D3D12_SERIALIZE_ROOT_SIGNATURE(
GetProcAddress(library_d3d12_, "D3D12SerializeRootSignature"))) !=
nullptr;
libraries_loaded &=
(pfn_dcomposition_create_device_ = PFNDCompositionCreateDevice(
GetProcAddress(library_dcomp_, "DCompositionCreateDevice"))) !=
nullptr;
if (!libraries_loaded) {
XELOGE("Failed to get DXGI, Direct3D 12 or DirectComposition functions");
XELOGE("Failed to get DXGI or Direct3D 12 functions");
return false;
}
@@ -470,23 +471,13 @@ bool D3D12Provider::Initialize() {
return true;
}
std::unique_ptr<GraphicsContext> D3D12Provider::CreateHostContext(
Window* target_window) {
auto new_context =
std::unique_ptr<D3D12Context>(new D3D12Context(this, target_window));
if (!new_context->Initialize()) {
return nullptr;
}
return std::unique_ptr<GraphicsContext>(new_context.release());
std::unique_ptr<Presenter> D3D12Provider::CreatePresenter(
Presenter::HostGpuLossCallback host_gpu_loss_callback) {
return D3D12Presenter::Create(host_gpu_loss_callback, *this);
}
std::unique_ptr<GraphicsContext> D3D12Provider::CreateEmulationContext() {
auto new_context =
std::unique_ptr<D3D12Context>(new D3D12Context(this, nullptr));
if (!new_context->Initialize()) {
return nullptr;
}
return std::unique_ptr<GraphicsContext>(new_context.release());
std::unique_ptr<ImmediateDrawer> D3D12Provider::CreateImmediateDrawer() {
return D3D12ImmediateDrawer::Create(*this);
}
} // namespace d3d12

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2018 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -23,15 +23,17 @@ namespace d3d12 {
class D3D12Provider : public GraphicsProvider {
public:
~D3D12Provider() override;
~D3D12Provider();
static bool IsD3D12APIAvailable();
static std::unique_ptr<D3D12Provider> Create();
std::unique_ptr<GraphicsContext> CreateHostContext(
Window* target_window) override;
std::unique_ptr<GraphicsContext> CreateEmulationContext() override;
std::unique_ptr<Presenter> CreatePresenter(
Presenter::HostGpuLossCallback host_gpu_loss_callback =
Presenter::FatalErrorHostGpuLossCallback) override;
std::unique_ptr<ImmediateDrawer> CreateImmediateDrawer() override;
IDXGIFactory2* GetDXGIFactory() const { return dxgi_factory_; }
// nullptr if PIX not attached.
@@ -118,11 +120,6 @@ class D3D12Provider : public GraphicsProvider {
return pfn_d3d12_serialize_root_signature_(desc, version, blob_out,
error_blob_out);
}
HRESULT CreateDCompositionDevice(IDXGIDevice* dxgi_device, const IID& iid,
void** dcomposition_device_out) const {
return pfn_dcomposition_create_device_(dxgi_device, iid,
dcomposition_device_out);
}
HRESULT Disassemble(const void* src_data, size_t src_data_size, UINT flags,
const char* comments, ID3DBlob** disassembly_out) const {
if (!pfn_d3d_disassemble_) {
@@ -156,22 +153,17 @@ class D3D12Provider : public GraphicsProvider {
_COM_Outptr_ void** ppFactory);
typedef HRESULT(WINAPI* PFNDXGIGetDebugInterface1)(
UINT Flags, REFIID riid, _COM_Outptr_ void** pDebug);
typedef HRESULT(WINAPI* PFNDCompositionCreateDevice)(
_In_opt_ IDXGIDevice* dxgiDevice, _In_ REFIID iid,
_Outptr_ void** dcompositionDevice);
HMODULE library_dxgi_ = nullptr;
PFNCreateDXGIFactory2 pfn_create_dxgi_factory2_;
PFNDXGIGetDebugInterface1 pfn_dxgi_get_debug_interface1_;
// Needed during shutdown as well to report live objects, so may be nullptr.
PFNDXGIGetDebugInterface1 pfn_dxgi_get_debug_interface1_ = nullptr;
HMODULE library_d3d12_ = nullptr;
PFN_D3D12_GET_DEBUG_INTERFACE pfn_d3d12_get_debug_interface_;
PFN_D3D12_CREATE_DEVICE pfn_d3d12_create_device_;
PFN_D3D12_SERIALIZE_ROOT_SIGNATURE pfn_d3d12_serialize_root_signature_;
HMODULE library_dcomp_ = nullptr;
PFNDCompositionCreateDevice pfn_dcomposition_create_device_;
HMODULE library_d3dcompiler_ = nullptr;
pD3DDisassemble pfn_d3d_disassemble_ = nullptr;
@@ -182,9 +174,9 @@ class D3D12Provider : public GraphicsProvider {
DxcCreateInstanceProc pfn_dxcompiler_dxc_create_instance_ = nullptr;
IDXGIFactory2* dxgi_factory_ = nullptr;
IDXGraphicsAnalysis* graphics_analysis_ = nullptr;
ID3D12Device* device_ = nullptr;
ID3D12CommandQueue* direct_queue_ = nullptr;
IDXGraphicsAnalysis* graphics_analysis_ = nullptr;
uint32_t descriptor_sizes_[D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES];

View File

@@ -0,0 +1,126 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/d3d12/d3d12_submission_tracker.h"
#include "xenia/base/assert.h"
#include "xenia/base/logging.h"
namespace xe {
namespace ui {
namespace d3d12 {
bool D3D12SubmissionTracker::Initialize(ID3D12Device* device,
ID3D12CommandQueue* queue) {
Shutdown();
fence_completion_event_ = CreateEvent(nullptr, FALSE, FALSE, nullptr);
if (!fence_completion_event_) {
XELOGE(
"D3D12SubmissionTracker: Failed to create the fence completion event");
Shutdown();
return false;
}
// Continue where the tracker was left at the last shutdown.
if (FAILED(device->CreateFence(submission_current_ - 1, D3D12_FENCE_FLAG_NONE,
IID_PPV_ARGS(&fence_)))) {
XELOGE("D3D12SubmissionTracker: Failed to create the fence");
Shutdown();
return false;
}
queue_ = queue;
submission_signal_queued_ = submission_current_ - 1;
return true;
}
void D3D12SubmissionTracker::Shutdown() {
AwaitAllSubmissionsCompletion();
queue_.Reset();
fence_.Reset();
if (fence_completion_event_) {
CloseHandle(fence_completion_event_);
fence_completion_event_ = nullptr;
}
}
bool D3D12SubmissionTracker::AwaitSubmissionCompletion(
UINT64 submission_index) {
if (!fence_ || !fence_completion_event_) {
// Not fully initialized yet or already shut down.
return false;
}
// The tracker itself can't give a submission index for a submission that
// hasn't even started being recorded yet, the client has provided a
// completely invalid value or has done overly optimistic math if such an
// index has been obtained somehow.
assert_true(submission_index <= submission_current_);
// Waiting for the current submission is fine if there was a refusal to
// submit, and the submission index wasn't incremented, but still need to
// release objects referenced in the dropped submission (while shutting down,
// for instance - in this case, waiting for the last successful submission,
// which could have also referenced the objects from the new submission - we
// can't know since the client has already overwritten its last usage index,
// would correctly ensure that GPU usage of the objects is not pending).
// Waiting for successful submissions, but failed signals, will result in a
// true race condition, however, but waiting for the closest successful signal
// is the best approximation - also retrying to signal in this case.
UINT64 fence_value = submission_index;
if (submission_index > submission_signal_queued_) {
TrySignalEnqueueing();
fence_value = submission_signal_queued_;
}
if (fence_->GetCompletedValue() < fence_value) {
if (FAILED(fence_->SetEventOnCompletion(fence_value,
fence_completion_event_))) {
return false;
}
if (WaitForSingleObject(fence_completion_event_, INFINITE) !=
WAIT_OBJECT_0) {
return false;
}
}
return fence_value == submission_index;
}
void D3D12SubmissionTracker::SetQueue(ID3D12CommandQueue* new_queue) {
if (queue_.Get() == new_queue) {
return;
}
if (queue_) {
// Make sure the first signal on the new queue won't happen before the last
// signal, if pending, on the old one, as that would result first in too
// early submission completion indication, and then in rewinding.
AwaitAllSubmissionsCompletion();
}
queue_ = new_queue;
}
bool D3D12SubmissionTracker::NextSubmission() {
++submission_current_;
assert_not_null(queue_);
assert_not_null(fence_);
return TrySignalEnqueueing();
}
bool D3D12SubmissionTracker::TrySignalEnqueueing() {
if (submission_signal_queued_ + 1 >= submission_current_) {
return true;
}
if (!queue_ || !fence_) {
return false;
}
if (FAILED(queue_->Signal(fence_.Get(), submission_current_ - 1))) {
return false;
}
submission_signal_queued_ = submission_current_ - 1;
return true;
}
} // namespace d3d12
} // namespace ui
} // namespace xe

View File

@@ -0,0 +1,93 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_D3D12_D3D12_SUBMISSION_TRACKER_H_
#define XENIA_UI_D3D12_D3D12_SUBMISSION_TRACKER_H_
#include "xenia/ui/d3d12/d3d12_api.h"
namespace xe {
namespace ui {
namespace d3d12 {
// GPU > CPU fence wrapper, safely handling cases when the fence has not been
// initialized yet or has already been shut down, dropped submissions, and also
// transfers between queues so signals stay ordered.
//
// The current submission index can be associated with the usage of objects to
// release them when the GPU isn't potentially referencing them anymore, and
// should be incremented only
//
// 0 can be used as a "never referenced" submission index.
//
// The submission index timeline survives Shutdown / Initialize, so submission
// indices can be given to clients that are not aware of the lifetime of the
// tracker.
class D3D12SubmissionTracker {
public:
D3D12SubmissionTracker() = default;
D3D12SubmissionTracker(const D3D12SubmissionTracker& submission_tracker) =
delete;
D3D12SubmissionTracker& operator=(
const D3D12SubmissionTracker& submission_tracker) = delete;
~D3D12SubmissionTracker() { Shutdown(); }
// The queue may be null if it's going to be set dynamically. Will also take a
// reference to the queue.
bool Initialize(ID3D12Device* device, ID3D12CommandQueue* queue);
void Shutdown();
// Will perform an ownership transfer if the queue is different than the
// current one, and take a reference to the queue.
void SetQueue(ID3D12CommandQueue* new_queue);
UINT64 GetCurrentSubmission() const { return submission_current_; }
// May be lower than a value awaited by AwaitSubmissionCompletion if it
// returned false.
UINT64 GetCompletedSubmission() const {
// If shut down already or haven't fully initialized yet, don't care, for
// simplicity of external code, as any downloads are unlikely in this case,
// but destruction can be simplified.
return fence_ ? fence_->GetCompletedValue() : (GetCurrentSubmission() - 1);
}
// Returns whether the expected GPU signal has actually been reached (rather
// than some fallback condition) for cases when stronger completeness
// guarantees as needed (when downloading, as opposed to just destroying).
// If false is returned, it's also not guaranteed that GetCompletedSubmission
// will return a value >= submission_index.
bool AwaitSubmissionCompletion(UINT64 submission_index);
bool AwaitAllSubmissionsCompletion() {
return AwaitSubmissionCompletion(GetCurrentSubmission() - 1);
}
// Call after a successful ExecuteCommandList. Unconditionally increments the
// current submission index, and tries to enqueue the fence signal. Returns
// true if enqueued successfully, but even if not, waiting for submissions
// without a successfully enqueued signal is handled in the tracker in a way
// that it won't be infinite, so there's no need for clients to revert updates
// to submission indices associated with GPU usage of objects.
bool NextSubmission();
// If NextSubmission has failed, but it's important that the signal is
// enqueued, can be used to retry enqueueing the signal.
bool TrySignalEnqueueing();
private:
UINT64 submission_current_ = 1;
UINT64 submission_signal_queued_ = 0;
HANDLE fence_completion_event_ = nullptr;
Microsoft::WRL::ComPtr<ID3D12Fence> fence_;
Microsoft::WRL::ComPtr<ID3D12CommandQueue> queue_;
};
} // namespace d3d12
} // namespace ui
} // namespace xe
#endif // XENIA_UI_D3D12_D3D12_SUBMISSION_TRACKER_H_

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -38,7 +38,7 @@ uint8_t* D3D12UploadBufferPool::Request(
return nullptr;
}
if (buffer_out) {
*buffer_out = page->buffer_;
*buffer_out = page->buffer_.Get();
}
if (offset_out) {
*offset_out = offset;
@@ -61,7 +61,7 @@ uint8_t* D3D12UploadBufferPool::RequestPartial(
return nullptr;
}
if (buffer_out) {
*buffer_out = page->buffer_;
*buffer_out = page->buffer_.Get();
}
if (offset_out) {
*offset_out = offset;
@@ -80,7 +80,7 @@ D3D12UploadBufferPool::CreatePageImplementation() {
D3D12_RESOURCE_DESC buffer_desc;
util::FillBufferResourceDesc(buffer_desc, page_size_,
D3D12_RESOURCE_FLAG_NONE);
ID3D12Resource* buffer;
Microsoft::WRL::ComPtr<ID3D12Resource> buffer;
if (FAILED(provider_.GetDevice()->CreateCommittedResource(
&util::kHeapPropertiesUpload, provider_.GetHeapFlagCreateNotZeroed(),
&buffer_desc, D3D12_RESOURCE_STATE_GENERIC_READ, nullptr,
@@ -97,24 +97,16 @@ D3D12UploadBufferPool::CreatePageImplementation() {
buffer->Release();
return nullptr;
}
D3D12Page* page = new D3D12Page(buffer, mapping);
// Owned by the page now.
buffer->Release();
return page;
// Unmapping will be done implicitly when the resource is destroyed.
return new D3D12Page(buffer.Get(), mapping);
}
D3D12UploadBufferPool::D3D12Page::D3D12Page(ID3D12Resource* buffer,
void* mapping)
: buffer_(buffer), mapping_(mapping) {
buffer_->AddRef();
gpu_address_ = buffer_->GetGPUVirtualAddress();
}
D3D12UploadBufferPool::D3D12Page::~D3D12Page() {
// Unmapping is done implicitly when the buffer is destroyed.
buffer_->Release();
}
} // namespace d3d12
} // namespace ui
} // namespace xe

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -38,8 +38,7 @@ class D3D12UploadBufferPool : public GraphicsUploadBufferPool {
// Creates a reference to the buffer. It must not be unmapped until this
// D3D12Page is deleted.
D3D12Page(ID3D12Resource* buffer, void* mapping);
~D3D12Page() override;
ID3D12Resource* buffer_;
Microsoft::WRL::ComPtr<ID3D12Resource> buffer_;
void* mapping_;
D3D12_GPU_VIRTUAL_ADDRESS gpu_address_;
};

View File

@@ -16,6 +16,8 @@
#include <utility>
#include <vector>
#include "xenia/ui/window.h"
namespace xe {
namespace ui {
@@ -68,7 +70,7 @@ class FilePicker {
selected_files_ = std::move(selected_files);
}
virtual bool Show(void* parent_window_handle = nullptr) = 0;
virtual bool Show(Window* parent_window = nullptr) = 0;
private:
Mode mode_;

View File

@@ -19,6 +19,7 @@
#include "xenia/base/filesystem.h"
#include "xenia/base/platform_linux.h"
#include "xenia/base/string.h"
#include "xenia/ui/window_gtk.h"
namespace xe {
namespace ui {
@@ -28,7 +29,7 @@ class GtkFilePicker : public FilePicker {
GtkFilePicker();
~GtkFilePicker() override;
bool Show(void* parent_window_handle) override;
bool Show(Window* parent_window) override;
private:
};
@@ -41,7 +42,7 @@ GtkFilePicker::GtkFilePicker() = default;
GtkFilePicker::~GtkFilePicker() = default;
bool GtkFilePicker::Show(void* parent_window_handle) {
bool GtkFilePicker::Show(Window* parent_window) {
// TODO(benvanik): FileSaveDialog.
assert_true(mode() == Mode::kOpen);
// TODO(benvanik): folder dialogs.
@@ -50,7 +51,10 @@ bool GtkFilePicker::Show(void* parent_window_handle) {
gint res;
dialog = gtk_file_chooser_dialog_new(
"Open File", (GtkWindow*)parent_window_handle,
"Open File",
parent_window
? GTK_WINDOW(static_cast<const GTKWindow*>(parent_window)->window())
: nullptr,
GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel", GTK_RESPONSE_CANCEL, "_Open",
GTK_RESPONSE_ACCEPT, NULL);

View File

@@ -11,6 +11,7 @@
#include "xenia/base/platform_win.h"
#include "xenia/base/string.h"
#include "xenia/ui/file_picker.h"
#include "xenia/ui/window_win.h"
// Microsoft headers after platform_win.h.
#include <wrl/client.h>
@@ -23,7 +24,7 @@ class Win32FilePicker : public FilePicker {
Win32FilePicker();
~Win32FilePicker() override;
bool Show(void* parent_window_handle) override;
bool Show(Window* parent_window) override;
private:
};
@@ -109,7 +110,7 @@ Win32FilePicker::Win32FilePicker() = default;
Win32FilePicker::~Win32FilePicker() = default;
bool Win32FilePicker::Show(void* parent_window_handle) {
bool Win32FilePicker::Show(Window* parent_window) {
// TODO(benvanik): FileSaveDialog.
assert_true(mode() == Mode::kOpen);
// TODO(benvanik): folder dialogs.
@@ -179,7 +180,9 @@ bool Win32FilePicker::Show(void* parent_window_handle) {
}
// Show the dialog modally.
hr = file_dialog->Show(static_cast<HWND>(parent_window_handle));
hr = file_dialog->Show(
parent_window ? static_cast<const Win32Window*>(parent_window)->hwnd()
: nullptr);
file_dialog->Unadvise(cookie);
if (!SUCCEEDED(hr)) {
return false;

View File

@@ -1,48 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/graphics_context.h"
#include <cstdlib>
#include "xenia/base/cvar.h"
#include "xenia/ui/graphics_provider.h"
DEFINE_bool(random_clear_color, false, "Randomize window clear color.", "UI");
namespace xe {
namespace ui {
GraphicsContext::GraphicsContext(GraphicsProvider* provider,
Window* target_window)
: provider_(provider), target_window_(target_window) {}
GraphicsContext::~GraphicsContext() = default;
bool GraphicsContext::is_current() { return true; }
bool GraphicsContext::MakeCurrent() { return true; }
void GraphicsContext::ClearCurrent() {}
void GraphicsContext::GetClearColor(float* rgba) {
if (cvars::random_clear_color) {
rgba[0] = rand() / float(RAND_MAX); // NOLINT(runtime/threadsafe_fn)
rgba[1] = 1.0f;
rgba[2] = 0.0f;
} else {
rgba[0] = 0.0f;
rgba[1] = 0.0f;
rgba[2] = 0.0f;
}
rgba[3] = 1.0f;
}
} // namespace ui
} // namespace xe

View File

@@ -1,90 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_GRAPHICS_CONTEXT_H_
#define XENIA_UI_GRAPHICS_CONTEXT_H_
#include <memory>
#include <vector>
namespace xe {
namespace ui {
class GraphicsProvider;
class ImmediateDrawer;
class Window;
class RawImage {
public:
RawImage() = default;
~RawImage() = default;
size_t width = 0;
size_t height = 0;
size_t stride = 0;
std::vector<uint8_t> data;
};
class GraphicsContext {
public:
virtual ~GraphicsContext();
GraphicsProvider* provider() const { return provider_; }
Window* target_window() const { return target_window_; }
bool is_offscreen() { return immediate_drawer() == nullptr; }
virtual ImmediateDrawer* immediate_drawer() = 0;
virtual bool is_current();
virtual bool MakeCurrent();
virtual void ClearCurrent();
// Returns true if the OS took away our context because we caused a TDR or
// some other outstanding error. When this happens, this context, as well as
// any other shared contexts are junk.
// This context must be made current in order for this call to work properly.
virtual bool WasLost() = 0;
// Returns true if able to draw now (the target surface is available).
virtual bool BeginSwap() = 0;
virtual void EndSwap() = 0;
virtual std::unique_ptr<RawImage> Capture() = 0;
protected:
explicit GraphicsContext(GraphicsProvider* provider, Window* target_window);
static void GetClearColor(float* rgba);
GraphicsProvider* provider_ = nullptr;
Window* target_window_ = nullptr;
};
struct GraphicsContextLock {
explicit GraphicsContextLock(GraphicsContext* context) : context_(context) {
was_current_ = context_->is_current();
if (!was_current_) {
context_->MakeCurrent();
}
}
~GraphicsContextLock() {
if (!was_current_) {
context_->ClearCurrent();
}
}
private:
bool was_current_ = false;
GraphicsContext* context_ = nullptr;
};
} // namespace ui
} // namespace xe
#endif // XENIA_UI_GRAPHICS_CONTEXT_H_

View File

@@ -12,10 +12,12 @@
#include <memory>
#include "xenia/ui/immediate_drawer.h"
#include "xenia/ui/presenter.h"
namespace xe {
namespace ui {
class GraphicsContext;
class Window;
// Factory for graphics contexts.
@@ -36,13 +38,13 @@ class GraphicsProvider {
virtual ~GraphicsProvider() = default;
// Creates a new host-side graphics context and swapchain, possibly presenting
// to a window and using the immediate drawer.
virtual std::unique_ptr<GraphicsContext> CreateHostContext(
Window* target_window) = 0;
// It's safe to reinitialize the presenter in the host GPU loss callback if it
// was called from the UI thread as specified in the arguments.
virtual std::unique_ptr<Presenter> CreatePresenter(
Presenter::HostGpuLossCallback host_gpu_loss_callback =
Presenter::FatalErrorHostGpuLossCallback) = 0;
// Creates a new offscreen emulation graphics context.
virtual std::unique_ptr<GraphicsContext> CreateEmulationContext() = 0;
virtual std::unique_ptr<ImmediateDrawer> CreateImmediateDrawer() = 0;
protected:
GraphicsProvider() = default;

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -38,6 +38,25 @@ void GraphicsUploadBufferPool::Reclaim(uint64_t completed_submission_index) {
}
}
void GraphicsUploadBufferPool::ChangeSubmissionTimeline() {
// Reclaim all submitted pages.
if (writable_last_) {
writable_last_->next_ = submitted_first_;
} else {
writable_first_ = submitted_first_;
}
writable_last_ = submitted_last_;
submitted_first_ = nullptr;
submitted_last_ = nullptr;
// Mark all pages as never used yet in the new timeline.
Page* page = writable_first_;
while (page) {
page->last_submission_index_ = 0;
page = page->next_;
}
}
void GraphicsUploadBufferPool::ClearCache() {
// Called from the destructor - must not call virtual functions here.
current_page_flushed_ = 0;

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -13,9 +13,13 @@
#include <cstddef>
#include <cstdint>
#include "xenia/base/literals.h"
namespace xe {
namespace ui {
using namespace xe::literals;
// Submission index is the fence value or a value derived from it (if reclaiming
// less often than once per fence value, for instance).
@@ -23,11 +27,12 @@ class GraphicsUploadBufferPool {
public:
// Taken from the Direct3D 12 MiniEngine sample (LinearAllocator
// kCpuAllocatorPageSize). Large enough for most cases.
static constexpr size_t kDefaultPageSize = 2 * 1024 * 1024;
static constexpr size_t kDefaultPageSize = 2_MiB;
virtual ~GraphicsUploadBufferPool();
void Reclaim(uint64_t completed_submission_index);
void ChangeSubmissionTimeline();
void ClearCache();
// Should be called before submitting anything using this pool, unless the

View File

@@ -0,0 +1,63 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/graphics_util.h"
#include <cmath>
namespace xe {
namespace ui {
int32_t FloatToD3D11Fixed16p8(float f32) {
// https://microsoft.github.io/DirectX-Specs/d3d/archive/D3D11_3_FunctionalSpec.htm#3.2.4.1%20FLOAT%20-%3E%20Fixed%20Point%20Integer
// Early exit tests.
// n == NaN || n.unbiasedExponent < -f-1 -> 0 . 0
if (!(std::abs(f32) >= 1.0f / 512.0f)) {
return 0;
}
// n >= (2^(i-1)-2^-f) -> 2^(i-1)-1 . 2^f-1
if (f32 >= 32768.0f - 1.0f / 256.0f) {
return (1 << 23) - 1;
}
// n <= -2^(i-1) -> -2^(i-1) . 0
if (f32 <= -32768.0f) {
return -32768 * 256;
}
uint32_t f32_bits = *reinterpret_cast<const uint32_t*>(&f32);
// Copy float32 mantissa bits [22:0] into corresponding bits [22:0] of a
// result buffer that has at least 24 bits total storage (before reaching
// rounding step further below). This includes one bit for the hidden 1.
// Set bit [23] (float32 hidden bit).
// Clear bits [31:24].
union {
int32_t s;
uint32_t u;
} result;
result.u = (f32_bits & ((1 << 23) - 1)) | (1 << 23);
// If the sign bit is set in the float32 number (negative), then take the 2's
// component of the entire set of bits.
if ((f32_bits >> 31) != 0) {
result.s = -result.s;
}
// Final calculation: extraBits = (mantissa - f) - n.unbiasedExponent
// (guaranteed to be >= 0).
int32_t exponent = int32_t((f32_bits >> 23) & 255) - 127;
uint32_t extra_bits = uint32_t(15 - exponent);
if (extra_bits) {
// Round the 32-bit value to a decimal that is extraBits to the left of
// the LSB end, using nearest-even.
result.u += (1 << (extra_bits - 1)) - 1 + ((result.u >> extra_bits) & 1);
// Shift right by extraBits (sign extending).
result.s >>= extra_bits;
}
return result.s;
}
} // namespace ui
} // namespace xe

View File

@@ -0,0 +1,30 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_GRAPHICS_UTIL_H_
#define XENIA_UI_GRAPHICS_UTIL_H_
#include <cstdint>
namespace xe {
namespace ui {
// For estimating coverage extents from vertices. This may give results that are
// different than what the GPU will actually draw (this is the reference
// conversion with 1/2 ULP accuracy, but Direct3D 11 permits 0.6 ULP tolerance
// in floating point to fixed point conversion), but is enough to tie-break
// vertices at pixel centers (due to the half-pixel offset applied to integer
// coordinates incorrectly, for instance) with some error tolerance near 0.5,
// for use with the top-left rasterization rule later.
int32_t FloatToD3D11Fixed16p8(float f32);
} // namespace ui
} // namespace xe
#endif // XENIA_UI_GRAPHICS_UTIL_H_

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -11,20 +11,18 @@
#include "third_party/imgui/imgui.h"
#include "xenia/base/assert.h"
#include "xenia/ui/window.h"
#include "xenia/ui/imgui_drawer.h"
namespace xe {
namespace ui {
ImGuiDialog::ImGuiDialog(Window* window) : window_(window) {
window_->AttachListener(this);
had_imgui_active_ = window_->is_imgui_input_enabled();
window_->set_imgui_input_enabled(true);
ImGuiDialog::ImGuiDialog(ImGuiDrawer* imgui_drawer)
: imgui_drawer_(imgui_drawer) {
imgui_drawer_->AddDialog(this);
}
ImGuiDialog::~ImGuiDialog() {
window_->set_imgui_input_enabled(had_imgui_active_);
window_->DetachListener(this);
imgui_drawer_->RemoveDialog(this);
for (auto fence : waiting_fences_) {
fence->Signal();
}
@@ -36,12 +34,9 @@ void ImGuiDialog::Then(xe::threading::Fence* fence) {
void ImGuiDialog::Close() { has_close_pending_ = true; }
ImGuiIO& ImGuiDialog::GetIO() { return window_->imgui_drawer()->GetIO(); }
void ImGuiDialog::OnPaint(UIEvent* e) {
// Keep imgui rendering every frame.
window_->Invalidate();
ImGuiIO& ImGuiDialog::GetIO() { return imgui_drawer()->GetIO(); }
void ImGuiDialog::Draw() {
// Draw UI.
OnDraw(GetIO());
@@ -52,10 +47,13 @@ void ImGuiDialog::OnPaint(UIEvent* e) {
}
}
class MessageBoxDialog : public ImGuiDialog {
class MessageBoxDialog final : public ImGuiDialog {
public:
MessageBoxDialog(Window* window, std::string title, std::string body)
: ImGuiDialog(window), title_(std::move(title)), body_(std::move(body)) {}
MessageBoxDialog(ImGuiDrawer* imgui_drawer, std::string title,
std::string body)
: ImGuiDialog(imgui_drawer),
title_(std::move(title)),
body_(std::move(body)) {}
void OnDraw(ImGuiIO& io) override {
if (!has_opened_) {
@@ -84,9 +82,9 @@ class MessageBoxDialog : public ImGuiDialog {
std::string body_;
};
ImGuiDialog* ImGuiDialog::ShowMessageBox(Window* window, std::string title,
std::string body) {
return new MessageBoxDialog(window, std::move(title), std::move(body));
ImGuiDialog* ImGuiDialog::ShowMessageBox(ImGuiDrawer* imgui_drawer,
std::string title, std::string body) {
return new MessageBoxDialog(imgui_drawer, std::move(title), std::move(body));
}
} // namespace ui

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -19,23 +19,25 @@
namespace xe {
namespace ui {
class ImGuiDialog : private WindowListener {
class ImGuiDialog {
public:
~ImGuiDialog();
// Shows a simple message box containing a text message.
// Callers can want for the dialog to close with Wait().
// Dialogs retain themselves and will delete themselves when closed.
static ImGuiDialog* ShowMessageBox(Window* window, std::string title,
std::string body);
static ImGuiDialog* ShowMessageBox(ImGuiDrawer* imgui_drawer,
std::string title, std::string body);
// A fence to signal when the dialog is closed.
void Then(xe::threading::Fence* fence);
protected:
ImGuiDialog(Window* window);
void Draw();
Window* window() const { return window_; }
protected:
ImGuiDialog(ImGuiDrawer* imgui_drawer);
ImGuiDrawer* imgui_drawer() const { return imgui_drawer_; }
ImGuiIO& GetIO();
// Closes the dialog and returns to any waiters.
@@ -46,10 +48,7 @@ class ImGuiDialog : private WindowListener {
virtual void OnDraw(ImGuiIO& io) {}
private:
void OnPaint(UIEvent* e) override;
Window* window_ = nullptr;
bool had_imgui_active_ = false;
ImGuiDrawer* imgui_drawer_ = nullptr;
bool has_close_pending_ = false;
std::vector<xe::threading::Fence*> waiting_fences_;
};

View File

@@ -2,17 +2,23 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/imgui_drawer.h"
#include <cfloat>
#include <cstring>
#include "third_party/imgui/imgui.h"
#include "xenia/base/assert.h"
#include "xenia/base/clock.h"
#include "xenia/base/logging.h"
#include "xenia/base/math.h"
#include "xenia/ui/imgui_dialog.h"
#include "xenia/ui/ui_event.h"
#include "xenia/ui/window.h"
namespace xe {
@@ -26,18 +32,75 @@ const char kProggyTinyCompressedDataBase85[10950 + 1] =
static_assert(sizeof(ImmediateVertex) == sizeof(ImDrawVert),
"Vertex types must match");
ImGuiDrawer::ImGuiDrawer(xe::ui::Window* window)
: window_(window), graphics_context_(window->context()) {
ImGuiDrawer::ImGuiDrawer(xe::ui::Window* window, size_t z_order)
: window_(window), z_order_(z_order) {
Initialize();
}
ImGuiDrawer::~ImGuiDrawer() {
SetPresenter(nullptr);
if (!dialogs_.empty()) {
window_->RemoveInputListener(this);
if (internal_state_) {
ImGui::SetCurrentContext(internal_state_);
if (ImGui::IsAnyMouseDown()) {
window_->ReleaseMouse();
}
}
}
if (internal_state_) {
ImGui::DestroyContext(internal_state_);
internal_state_ = nullptr;
}
}
void ImGuiDrawer::AddDialog(ImGuiDialog* dialog) {
assert_not_null(dialog);
// Check if already added.
if (std::find(dialogs_.cbegin(), dialogs_.cend(), dialog) !=
dialogs_.cend()) {
return;
}
if (dialog_loop_next_index_ == SIZE_MAX && dialogs_.empty()) {
// First dialog added. dialog_loop_next_index_ == SIZE_MAX is also checked
// because in a situation of removing the only dialog, then adding a dialog,
// from within a dialog's Draw function, the removal would not cause the
// listener and the drawer to be removed (it's deferred in this case).
window_->AddInputListener(this, z_order_);
if (presenter_) {
presenter_->AddUIDrawerFromUIThread(this, z_order_);
}
}
dialogs_.push_back(dialog);
}
void ImGuiDrawer::RemoveDialog(ImGuiDialog* dialog) {
assert_not_null(dialog);
auto it = std::find(dialogs_.cbegin(), dialogs_.cend(), dialog);
if (it == dialogs_.cend()) {
return;
}
if (dialog_loop_next_index_ != SIZE_MAX) {
// Actualize the next dialog index after the erasure from the vector.
size_t existing_index = size_t(std::distance(dialogs_.cbegin(), it));
if (dialog_loop_next_index_ > existing_index) {
--dialog_loop_next_index_;
}
}
dialogs_.erase(it);
if (dialog_loop_next_index_ == SIZE_MAX && dialogs_.empty()) {
if (presenter_) {
presenter_->RemoveUIDrawerFromUIThread(this);
}
window_->RemoveInputListener(this);
// Clear all input since no input will be received anymore, and when the
// drawer becomes active again, it'd have an outdated input state otherwise
// which will be persistent until new events actualize individual input
// properties.
ClearInput();
}
}
void ImGuiDrawer::Initialize() {
// Setup ImGui internal state.
// This will give us state we can swap to the ImGui globals when in use.
@@ -51,9 +114,31 @@ void ImGuiDrawer::Initialize() {
// Windows.
io.IniFilename = nullptr;
SetupFont();
io.DeltaTime = 1.0f / 60.0f;
// Setup the font glyphs.
ImFontConfig font_config;
font_config.OversampleH = font_config.OversampleV = 1;
font_config.PixelSnapH = true;
static const ImWchar font_glyph_ranges[] = {
0x0020,
0x00FF, // Basic Latin + Latin Supplement
0,
};
io.Fonts->AddFontFromMemoryCompressedBase85TTF(
kProggyTinyCompressedDataBase85, 10.0f, &font_config, font_glyph_ranges);
// TODO(benvanik): jp font on other platforms?
// https://github.com/Koruri/kibitaki looks really good, but is 1.5MiB.
const char* jp_font_path = "C:\\Windows\\Fonts\\msgothic.ttc";
if (std::filesystem::exists(jp_font_path)) {
ImFontConfig jp_font_config;
jp_font_config.MergeMode = true;
jp_font_config.OversampleH = jp_font_config.OversampleV = 1;
jp_font_config.PixelSnapH = true;
jp_font_config.FontNo = 0;
io.Fonts->AddFontFromFileTTF(jp_font_path, 12.0f, &jp_font_config,
io.Fonts->GetGlyphRangesJapanese());
} else {
XELOGW("Unable to load Japanese font; JP characters will be boxes");
}
auto& style = ImGui::GetStyle();
style.ScrollbarRounding = 0;
@@ -125,60 +210,121 @@ void ImGuiDrawer::Initialize() {
io.KeyMap[ImGuiKey_X] = int(ui::VirtualKey::kX);
io.KeyMap[ImGuiKey_Y] = int(ui::VirtualKey::kY);
io.KeyMap[ImGuiKey_Z] = int(ui::VirtualKey::kZ);
frame_time_tick_frequency_ = double(Clock::QueryHostTickFrequency());
last_frame_time_ticks_ = Clock::QueryHostTickCount();
}
void ImGuiDrawer::SetupFont() {
auto& io = GetIO();
ImFontConfig font_config;
font_config.OversampleH = font_config.OversampleV = 1;
font_config.PixelSnapH = true;
static const ImWchar font_glyph_ranges[] = {
0x0020,
0x00FF, // Basic Latin + Latin Supplement
0,
};
io.Fonts->AddFontFromMemoryCompressedBase85TTF(
kProggyTinyCompressedDataBase85, 10.0f, &font_config, font_glyph_ranges);
// TODO(benvanik): jp font on other platforms?
// https://github.com/Koruri/kibitaki looks really good, but is 1.5MiB.
const char* jp_font_path = "C:\\Windows\\Fonts\\msgothic.ttc";
if (std::filesystem::exists(jp_font_path)) {
ImFontConfig jp_font_config;
jp_font_config.MergeMode = true;
jp_font_config.OversampleH = jp_font_config.OversampleV = 1;
jp_font_config.PixelSnapH = true;
jp_font_config.FontNo = 0;
io.Fonts->AddFontFromFileTTF(jp_font_path, 12.0f, &jp_font_config,
io.Fonts->GetGlyphRangesJapanese());
} else {
XELOGW("Unable to load japanese font; jp characters will be boxes");
void ImGuiDrawer::SetupFontTexture() {
if (font_texture_ || !immediate_drawer_) {
return;
}
ImGuiIO& io = GetIO();
unsigned char* pixels;
int width, height;
io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
font_texture_ = graphics_context_->immediate_drawer()->CreateTexture(
font_texture_ = immediate_drawer_->CreateTexture(
width, height, ImmediateTextureFilter::kLinear, true,
reinterpret_cast<uint8_t*>(pixels));
io.Fonts->TexID = reinterpret_cast<ImTextureID>(font_texture_.get());
}
void ImGuiDrawer::RenderDrawLists(ImDrawData* data) {
auto drawer = graphics_context_->immediate_drawer();
void ImGuiDrawer::SetPresenter(Presenter* new_presenter) {
if (presenter_) {
if (presenter_ == new_presenter) {
return;
}
if (!dialogs_.empty()) {
presenter_->RemoveUIDrawerFromUIThread(this);
}
ImGuiIO& io = GetIO();
}
presenter_ = new_presenter;
if (presenter_) {
if (!dialogs_.empty()) {
presenter_->AddUIDrawerFromUIThread(this, z_order_);
}
}
}
void ImGuiDrawer::SetImmediateDrawer(ImmediateDrawer* new_immediate_drawer) {
if (immediate_drawer_ == new_immediate_drawer) {
return;
}
if (immediate_drawer_) {
GetIO().Fonts->TexID = static_cast<ImTextureID>(nullptr);
font_texture_.reset();
}
immediate_drawer_ = new_immediate_drawer;
if (immediate_drawer_) {
SetupFontTexture();
}
}
void ImGuiDrawer::Draw(UIDrawContext& ui_draw_context) {
// Drawing of anything is initiated by the presenter.
assert_not_null(presenter_);
if (!immediate_drawer_) {
// A presenter has been attached, but an immediate drawer hasn't been
// attached yet.
return;
}
if (dialogs_.empty()) {
return;
}
ImGui::SetCurrentContext(internal_state_);
// Handle cases of screen coordinates != from framebuffer coordinates (e.g.
// retina displays).
ImGuiIO& io = ImGui::GetIO();
float fb_height = io.DisplaySize.y * io.DisplayFramebufferScale.y;
data->ScaleClipRects(io.DisplayFramebufferScale);
const float width = io.DisplaySize.x;
const float height = io.DisplaySize.y;
drawer->Begin(static_cast<int>(width), static_cast<int>(height));
uint64_t current_frame_time_ticks = Clock::QueryHostTickCount();
io.DeltaTime =
float(double(current_frame_time_ticks - last_frame_time_ticks_) /
frame_time_tick_frequency_);
if (!(io.DeltaTime > 0.0f) ||
current_frame_time_ticks < last_frame_time_ticks_) {
// For safety as Dear ImGui doesn't allow non-positive DeltaTime. Using the
// same default value as in the official samples.
io.DeltaTime = 1.0f / 60.0f;
}
last_frame_time_ticks_ = current_frame_time_ticks;
float physical_to_logical =
float(window_->GetMediumDpi()) / float(window_->GetDpi());
io.DisplaySize.x = window_->GetActualPhysicalWidth() * physical_to_logical;
io.DisplaySize.y = window_->GetActualPhysicalHeight() * physical_to_logical;
ImGui::NewFrame();
assert_true(dialog_loop_next_index_ == SIZE_MAX);
dialog_loop_next_index_ = 0;
while (dialog_loop_next_index_ < dialogs_.size()) {
dialogs_[dialog_loop_next_index_++]->Draw();
}
dialog_loop_next_index_ = SIZE_MAX;
ImGui::Render();
ImDrawData* draw_data = ImGui::GetDrawData();
if (draw_data) {
RenderDrawLists(draw_data, ui_draw_context);
}
if (dialogs_.empty()) {
// All dialogs have removed themselves during the draw, detach.
presenter_->RemoveUIDrawerFromUIThread(this);
window_->RemoveInputListener(this);
} else {
// Repaint (and handle input) continuously if still active.
presenter_->RequestUIPaintFromUIThread();
}
}
void ImGuiDrawer::RenderDrawLists(ImDrawData* data,
UIDrawContext& ui_draw_context) {
ImGuiIO& io = ImGui::GetIO();
immediate_drawer_->Begin(ui_draw_context, io.DisplaySize.x, io.DisplaySize.y);
for (int i = 0; i < data->CmdListsCount; ++i) {
const auto cmd_list = data->CmdLists[i];
@@ -189,7 +335,7 @@ void ImGuiDrawer::RenderDrawLists(ImDrawData* data) {
batch.vertex_count = cmd_list->VtxBuffer.size();
batch.indices = cmd_list->IdxBuffer.Data;
batch.index_count = cmd_list->IdxBuffer.size();
drawer->BeginDrawBatch(batch);
immediate_drawer_->BeginDrawBatch(batch);
int index_offset = 0;
for (int j = 0; j < cmd_list->CmdBuffer.size(); ++j) {
@@ -201,19 +347,19 @@ void ImGuiDrawer::RenderDrawLists(ImDrawData* data) {
draw.index_offset = index_offset;
draw.texture = reinterpret_cast<ImmediateTexture*>(cmd.TextureId);
draw.scissor = true;
draw.scissor_rect[0] = static_cast<int>(cmd.ClipRect.x);
draw.scissor_rect[1] = static_cast<int>(height - cmd.ClipRect.w);
draw.scissor_rect[2] = static_cast<int>(cmd.ClipRect.z - cmd.ClipRect.x);
draw.scissor_rect[3] = static_cast<int>(cmd.ClipRect.w - cmd.ClipRect.y);
drawer->Draw(draw);
draw.scissor_left = cmd.ClipRect.x;
draw.scissor_top = cmd.ClipRect.y;
draw.scissor_right = cmd.ClipRect.z;
draw.scissor_bottom = cmd.ClipRect.w;
immediate_drawer_->Draw(draw);
index_offset += cmd.ElemCount;
}
drawer->EndDrawBatch();
immediate_drawer_->EndDrawBatch();
}
drawer->End();
immediate_drawer_->End();
}
ImGuiIO& ImGuiDrawer::GetIO() {
@@ -221,33 +367,25 @@ ImGuiIO& ImGuiDrawer::GetIO() {
return ImGui::GetIO();
}
void ImGuiDrawer::RenderDrawLists() {
ImGui::SetCurrentContext(internal_state_);
auto draw_data = ImGui::GetDrawData();
if (draw_data) {
RenderDrawLists(draw_data);
}
}
void ImGuiDrawer::OnKeyDown(KeyEvent& e) { OnKey(e, true); }
void ImGuiDrawer::OnKeyDown(KeyEvent* e) { OnKey(e, true); }
void ImGuiDrawer::OnKeyUp(KeyEvent& e) { OnKey(e, false); }
void ImGuiDrawer::OnKeyUp(KeyEvent* e) { OnKey(e, false); }
void ImGuiDrawer::OnKeyChar(KeyEvent* e) {
void ImGuiDrawer::OnKeyChar(KeyEvent& e) {
auto& io = GetIO();
// TODO(Triang3l): Accept the Unicode character.
unsigned int character = static_cast<unsigned int>(e->virtual_key());
unsigned int character = static_cast<unsigned int>(e.virtual_key());
if (character > 0 && character < 0x10000) {
io.AddInputCharacter(character);
e->set_handled(true);
e.set_handled(true);
}
}
void ImGuiDrawer::OnMouseDown(MouseEvent* e) {
void ImGuiDrawer::OnMouseDown(MouseEvent& e) {
UpdateMousePosition(e);
auto& io = GetIO();
io.MousePos = ImVec2(float(e->x()), float(e->y()));
int button = -1;
switch (e->button()) {
switch (e.button()) {
case xe::ui::MouseEvent::Button::kLeft: {
button = 0;
break;
@@ -261,25 +399,23 @@ void ImGuiDrawer::OnMouseDown(MouseEvent* e) {
break;
}
}
if (button >= 0 && button < std::size(io.MouseDown)) {
if (!ImGui::IsAnyMouseDown()) {
window_->CaptureMouse();
if (!io.MouseDown[button]) {
if (!ImGui::IsAnyMouseDown()) {
window_->CaptureMouse();
}
io.MouseDown[button] = true;
}
io.MouseDown[button] = true;
}
}
void ImGuiDrawer::OnMouseMove(MouseEvent* e) {
auto& io = GetIO();
io.MousePos = ImVec2(float(e->x()), float(e->y()));
}
void ImGuiDrawer::OnMouseMove(MouseEvent& e) { UpdateMousePosition(e); }
void ImGuiDrawer::OnMouseUp(MouseEvent* e) {
void ImGuiDrawer::OnMouseUp(MouseEvent& e) {
UpdateMousePosition(e);
auto& io = GetIO();
io.MousePos = ImVec2(float(e->x()), float(e->y()));
int button = -1;
switch (e->button()) {
switch (e.button()) {
case xe::ui::MouseEvent::Button::kLeft: {
button = 0;
break;
@@ -293,24 +429,42 @@ void ImGuiDrawer::OnMouseUp(MouseEvent* e) {
break;
}
}
if (button >= 0 && button < std::size(io.MouseDown)) {
io.MouseDown[button] = false;
if (!ImGui::IsAnyMouseDown()) {
window_->ReleaseMouse();
if (io.MouseDown[button]) {
io.MouseDown[button] = false;
if (!ImGui::IsAnyMouseDown()) {
window_->ReleaseMouse();
}
}
}
}
void ImGuiDrawer::OnMouseWheel(MouseEvent* e) {
void ImGuiDrawer::OnMouseWheel(MouseEvent& e) {
UpdateMousePosition(e);
auto& io = GetIO();
io.MousePos = ImVec2(float(e->x()), float(e->y()));
io.MouseWheel += float(e->dy() / 120.0f);
io.MouseWheel += float(e.scroll_y()) / float(MouseEvent::kScrollPerDetent);
}
void ImGuiDrawer::OnKey(KeyEvent* e, bool is_down) {
void ImGuiDrawer::ClearInput() {
auto& io = GetIO();
VirtualKey virtual_key = e->virtual_key();
if (ImGui::IsAnyMouseDown()) {
window_->ReleaseMouse();
}
io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
std::memset(io.MouseDown, 0, sizeof(io.MouseDown));
io.MouseWheel = 0.0f;
io.MouseWheelH = 0.0f;
io.KeyCtrl = false;
io.KeyShift = false;
io.KeyAlt = false;
io.KeySuper = false;
std::memset(io.KeysDown, 0, sizeof(io.KeysDown));
io.ClearInputCharacters();
}
void ImGuiDrawer::OnKey(KeyEvent& e, bool is_down) {
auto& io = GetIO();
VirtualKey virtual_key = e.virtual_key();
if (size_t(virtual_key) < xe::countof(io.KeysDown)) {
io.KeysDown[size_t(virtual_key)] = is_down;
}
@@ -333,5 +487,13 @@ void ImGuiDrawer::OnKey(KeyEvent* e, bool is_down) {
}
}
void ImGuiDrawer::UpdateMousePosition(const MouseEvent& e) {
auto& io = GetIO();
float physical_to_logical =
float(window_->GetMediumDpi()) / float(window_->GetDpi());
io.MousePos.x = e.x() * physical_to_logical;
io.MousePos.y = e.y() * physical_to_logical;
}
} // namespace ui
} // namespace xe

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -10,10 +10,14 @@
#ifndef XENIA_UI_IMGUI_DRAWER_H_
#define XENIA_UI_IMGUI_DRAWER_H_
#include <cstddef>
#include <cstdint>
#include <memory>
#include <vector>
#include "xenia/ui/immediate_drawer.h"
#include "xenia/ui/presenter.h"
#include "xenia/ui/window.h"
#include "xenia/ui/window_listener.h"
struct ImDrawData;
@@ -23,43 +27,73 @@ struct ImGuiIO;
namespace xe {
namespace ui {
class GraphicsContext;
class ImGuiDialog;
class Window;
class ImGuiDrawer : public WindowListener {
class ImGuiDrawer : public WindowInputListener, public UIDrawer {
public:
ImGuiDrawer(Window* window);
ImGuiDrawer(Window* window, size_t z_order);
~ImGuiDrawer();
void SetupDefaultInput() {}
ImGuiIO& GetIO();
void RenderDrawLists();
void AddDialog(ImGuiDialog* dialog);
void RemoveDialog(ImGuiDialog* dialog);
// SetPresenter may be called from the destructor.
void SetPresenter(Presenter* new_presenter);
void SetImmediateDrawer(ImmediateDrawer* new_immediate_drawer);
void SetPresenterAndImmediateDrawer(Presenter* new_presenter,
ImmediateDrawer* new_immediate_drawer) {
SetPresenter(new_presenter);
SetImmediateDrawer(new_immediate_drawer);
}
void Draw(UIDrawContext& ui_draw_context) override;
protected:
void Initialize();
void SetupFont();
void RenderDrawLists(ImDrawData* data);
void OnKeyDown(KeyEvent* e) override;
void OnKeyUp(KeyEvent* e) override;
void OnKeyChar(KeyEvent* e) override;
void OnMouseDown(MouseEvent* e) override;
void OnMouseMove(MouseEvent* e) override;
void OnMouseUp(MouseEvent* e) override;
void OnMouseWheel(MouseEvent* e) override;
static ImGuiDrawer* current_drawer_;
Window* window_ = nullptr;
GraphicsContext* graphics_context_ = nullptr;
ImGuiContext* internal_state_ = nullptr;
std::unique_ptr<ImmediateTexture> font_texture_;
void OnKeyDown(KeyEvent& e) override;
void OnKeyUp(KeyEvent& e) override;
void OnKeyChar(KeyEvent& e) override;
void OnMouseDown(MouseEvent& e) override;
void OnMouseMove(MouseEvent& e) override;
void OnMouseUp(MouseEvent& e) override;
void OnMouseWheel(MouseEvent& e) override;
// For now, no need for OnDpiChanged because redrawing is done continuously.
private:
void OnKey(KeyEvent* e, bool is_down);
void Initialize();
void SetupFontTexture();
void RenderDrawLists(ImDrawData* data, UIDrawContext& ui_draw_context);
void ClearInput();
void OnKey(KeyEvent& e, bool is_down);
void UpdateMousePosition(const MouseEvent& e);
Window* window_;
size_t z_order_;
ImGuiContext* internal_state_ = nullptr;
// All currently-attached dialogs that get drawn.
std::vector<ImGuiDialog*> dialogs_;
// Using an index, not an iterator, because after the erasure, the adjustment
// must be done for the vector element indices that would be in the iterator
// range that would be invalidated.
// SIZE_MAX if not currently in the dialog loop.
size_t dialog_loop_next_index_ = SIZE_MAX;
Presenter* presenter_ = nullptr;
ImmediateDrawer* immediate_drawer_ = nullptr;
// Resources specific to an immediate drawer - must be destroyed before
// detaching the presenter.
std::unique_ptr<ImmediateTexture> font_texture_;
double frame_time_tick_frequency_;
uint64_t last_frame_time_ticks_;
};
} // namespace ui

View File

@@ -0,0 +1,108 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/immediate_drawer.h"
#include <algorithm>
#include "xenia/base/assert.h"
#include "xenia/ui/graphics_util.h"
#include "xenia/ui/presenter.h"
namespace xe {
namespace ui {
void ImmediateDrawer::SetPresenter(Presenter* new_presenter) {
if (presenter_ == new_presenter) {
return;
}
// Changing the presenter while drawing would make the state inconsistent.
assert_null(ui_draw_context_);
if (presenter_) {
OnLeavePresenter();
}
presenter_ = new_presenter;
if (presenter_) {
OnEnterPresenter();
}
}
void ImmediateDrawer::Begin(UIDrawContext& ui_draw_context,
float coordinate_space_width,
float coordinate_space_height) {
assert_true(&ui_draw_context.presenter() == presenter_);
ui_draw_context_ = &ui_draw_context;
// In case of non-positive values (or NaNs) - use render target coordinates
// according to the contract of the function, and also for safety because
// there will be division by the coordinate space size in several places.
if (!(coordinate_space_width > 0.0f) || !(coordinate_space_height > 0.0f)) {
coordinate_space_width = float(ui_draw_context.render_target_width());
coordinate_space_height = float(ui_draw_context.render_target_height());
}
coordinate_space_width_ = coordinate_space_width;
coordinate_space_height_ = coordinate_space_height;
}
void ImmediateDrawer::End() { ui_draw_context_ = nullptr; }
bool ImmediateDrawer::ScissorToRenderTarget(const ImmediateDraw& immediate_draw,
uint32_t& out_left,
uint32_t& out_top,
uint32_t& out_width,
uint32_t& out_height) {
uint32_t render_target_width = ui_draw_context()->render_target_width();
uint32_t render_target_height = ui_draw_context()->render_target_height();
if (!immediate_draw.scissor) {
out_left = 0;
out_top = 0;
out_width = render_target_width;
out_height = render_target_height;
return render_target_width && render_target_height;
}
float render_target_width_float = float(render_target_width);
float render_target_height_float = float(render_target_height);
// Scale to render target coordinates, drop NaNs (by doing
// std::max(0.0f, variable) in this argument order), and clamp to the render
// target size, below which the values are representable as 16p8 fixed-point.
float scale_x = render_target_width / coordinate_space_width();
float scale_y = render_target_height / coordinate_space_height();
float x0_float =
std::min(render_target_width_float,
std::max(0.0f, immediate_draw.scissor_left * scale_x));
float y0_float =
std::min(render_target_height_float,
std::max(0.0f, immediate_draw.scissor_top * scale_y));
// Also make sure the size is non-negative.
float x1_float =
std::min(render_target_width_float,
std::max(x0_float, immediate_draw.scissor_right * scale_x));
float y1_float =
std::min(render_target_height_float,
std::max(y0_float, immediate_draw.scissor_bottom * scale_y));
// Top-left - include .5 (0.128 treated as 0 covered, 0.129 as 0 not covered).
int32_t x0 = (FloatToD3D11Fixed16p8(x0_float) + 127) >> 8;
int32_t y0 = (FloatToD3D11Fixed16p8(y0_float) + 127) >> 8;
// Bottom-right - exclude .5.
int32_t x1 = (FloatToD3D11Fixed16p8(x1_float) + 127) >> 8;
int32_t y1 = (FloatToD3D11Fixed16p8(y1_float) + 127) >> 8;
assert_true(x0 >= 0);
assert_true(y0 >= 0);
assert_true(x1 >= x0);
assert_true(y1 >= y0);
assert_true(x1 <= int32_t(render_target_width));
assert_true(y1 <= int32_t(render_target_height));
out_left = uint32_t(x0);
out_top = uint32_t(y0);
out_width = uint32_t(x1 - x0);
out_height = uint32_t(y1 - y0);
return x1 > x0 && y1 > y0;
}
} // namespace ui
} // namespace xe

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -12,11 +12,11 @@
#include <memory>
#include "xenia/ui/presenter.h"
namespace xe {
namespace ui {
class GraphicsContext;
// Describes the filter applied when sampling textures.
enum class ImmediateTextureFilter {
kNearest,
@@ -80,21 +80,38 @@ struct ImmediateDraw {
// True to enable scissoring using the region defined by scissor_rect.
bool scissor = false;
// Scissoring region in framebuffer pixels as (x, y, w, h).
int scissor_rect[4] = {0};
// Scissoring region in the coordinate space (if right < left or bottom < top,
// not drawing).
float scissor_left = 0.0f;
float scissor_top = 0.0f;
float scissor_right = 0.0f;
float scissor_bottom = 0.0f;
};
class ImmediateDrawer {
public:
ImmediateDrawer(const ImmediateDrawer& immediate_drawer) = delete;
ImmediateDrawer& operator=(const ImmediateDrawer& immediate_drawer) = delete;
virtual ~ImmediateDrawer() = default;
void SetPresenter(Presenter* new_presenter);
// Creates a new texture with the given attributes and R8G8B8A8 data.
virtual std::unique_ptr<ImmediateTexture> CreateTexture(
uint32_t width, uint32_t height, ImmediateTextureFilter filter,
bool is_repeated, const uint8_t* data) = 0;
// Begins drawing in immediate mode using the given projection matrix.
virtual void Begin(int render_target_width, int render_target_height) = 0;
// Begins drawing in immediate mode using the given projection matrix. The
// presenter that is currently attached to the immediate drawer, as the
// implementation may hold presenter-specific information such as UI
// submission indices. Pass 0 or a negative value as the coordinate space
// width or height to use raw render target pixel coordinates (or this will
// just be used as a safe fallback when with a non-zero-sized surface the
// coordinate space size becomes zero somehow).
virtual void Begin(UIDrawContext& ui_draw_context,
float coordinate_space_width,
float coordinate_space_height);
// Starts a draw batch.
virtual void BeginDrawBatch(const ImmediateDrawBatch& batch) = 0;
// Draws one set of a batch.
@@ -102,13 +119,33 @@ class ImmediateDrawer {
// Ends a draw batch.
virtual void EndDrawBatch() = 0;
// Ends drawing in immediate mode and flushes contents.
virtual void End() = 0;
virtual void End();
protected:
ImmediateDrawer(GraphicsContext* graphics_context)
: graphics_context_(graphics_context) {}
ImmediateDrawer() = default;
GraphicsContext* graphics_context_ = nullptr;
Presenter* presenter() const { return presenter_; }
virtual void OnLeavePresenter() {}
virtual void OnEnterPresenter() {}
// Available between Begin and End.
UIDrawContext* ui_draw_context() const { return ui_draw_context_; }
float coordinate_space_width() const { return coordinate_space_width_; }
float coordinate_space_height() const { return coordinate_space_height_; }
// Converts and clamps the scissor in the immediate draw to render target
// coordinates. Returns whether the scissor contains any render target pixels
// (but a valid scissor is written even if false is returned).
bool ScissorToRenderTarget(const ImmediateDraw& immediate_draw,
uint32_t& out_left, uint32_t& out_top,
uint32_t& out_width, uint32_t& out_height);
private:
Presenter* presenter_ = nullptr;
UIDrawContext* ui_draw_context_ = nullptr;
float coordinate_space_width_;
float coordinate_space_height_;
};
} // namespace ui

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -62,9 +62,11 @@ void MenuItem::RemoveChild(MenuItem* child_item) {
MenuItem* MenuItem::child(size_t index) { return children_[index].get(); }
void MenuItem::OnSelected(UIEvent* e) {
void MenuItem::OnSelected() {
if (callback_) {
callback_();
// Note that this MenuItem might have been destroyed by the callback.
// Must not do anything with *this in this function from now on.
}
}

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -48,14 +48,18 @@ class MenuItem {
const std::string& text() { return text_; }
const std::string& hotkey() { return hotkey_; }
// If the menu is currently attached to a Window, changes to it (such as the
// elements and the enabled / disabled state) may be not reflected
// immediately - call Window::CompleteMainMenuItemsUpdate when the
// modifications are done.
void AddChild(MenuItem* child_item);
void AddChild(std::unique_ptr<MenuItem> child_item);
void AddChild(MenuItemPtr child_item);
void RemoveChild(MenuItem* child_item);
MenuItem* child(size_t index);
virtual void EnableMenuItem(Window& window) = 0;
virtual void DisableMenuItem(Window& window) = 0;
virtual void SetEnabled(bool enabled) {}
protected:
MenuItem(Type type, const std::string& text, const std::string& hotkey,
@@ -64,13 +68,17 @@ class MenuItem {
virtual void OnChildAdded(MenuItem* child_item) {}
virtual void OnChildRemoved(MenuItem* child_item) {}
virtual void OnSelected(UIEvent* e);
// This MenuItem may be destroyed as a result of the callback, don't do
// anything with it after the call.
void OnSelected();
Type type_;
MenuItem* parent_item_;
std::vector<MenuItemPtr> children_;
std::string text_;
std::string hotkey_;
private:
std::function<void()> callback_;
};

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -10,9 +10,10 @@
#include "xenia/ui/microprofile_drawer.h"
#include <algorithm>
#include <cstdint>
#include "xenia/base/math.h"
#include "xenia/ui/window.h"
#include "xenia/base/profiling.h"
namespace xe {
namespace ui {
@@ -124,10 +125,8 @@ const uint8_t kFontData[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
};
MicroprofileDrawer::MicroprofileDrawer(xe::ui::Window* window)
: window_(window),
graphics_context_(window->context()),
vertices_(kMaxVertices) {
MicroprofileDrawer::MicroprofileDrawer(ImmediateDrawer* immediate_drawer)
: immediate_drawer_(immediate_drawer), vertices_(kMaxVertices) {
SetupFont();
}
@@ -171,21 +170,21 @@ void MicroprofileDrawer::SetupFont() {
}
}
font_texture_ = graphics_context_->immediate_drawer()->CreateTexture(
font_texture_ = immediate_drawer_->CreateTexture(
kFontTextureWidth, kFontTextureHeight, ImmediateTextureFilter::kNearest,
false, reinterpret_cast<uint8_t*>(unpacked));
}
MicroprofileDrawer::~MicroprofileDrawer() = default;
void MicroprofileDrawer::Begin() {
graphics_context_->immediate_drawer()->Begin(window_->scaled_width(),
window_->scaled_height());
void MicroprofileDrawer::Begin(UIDrawContext& ui_draw_context,
uint32_t coordinate_space_width,
uint32_t coordinate_space_height) {
immediate_drawer_->Begin(ui_draw_context, float(coordinate_space_width),
float(coordinate_space_height));
}
void MicroprofileDrawer::End() {
Flush();
graphics_context_->immediate_drawer()->End();
immediate_drawer_->End();
}
ImmediateVertex* MicroprofileDrawer::BeginVertices(
@@ -203,7 +202,6 @@ ImmediateVertex* MicroprofileDrawer::BeginVertices(
void MicroprofileDrawer::EndVertices() {}
void MicroprofileDrawer::Flush() {
auto drawer = graphics_context_->immediate_drawer();
if (!vertex_count_) {
return;
}
@@ -211,15 +209,15 @@ void MicroprofileDrawer::Flush() {
ImmediateDrawBatch batch;
batch.vertices = vertices_.data();
batch.vertex_count = vertex_count_;
drawer->BeginDrawBatch(batch);
immediate_drawer_->BeginDrawBatch(batch);
ImmediateDraw draw;
draw.primitive_type = current_primitive_type_;
draw.count = vertex_count_;
draw.texture = font_texture_.get();
drawer->Draw(draw);
immediate_drawer_->Draw(draw);
drawer->EndDrawBatch();
immediate_drawer_->EndDrawBatch();
vertex_count_ = 0;
}
@@ -323,8 +321,8 @@ void MicroprofileDrawer::DrawLine2D(uint32_t count, float* vertices,
EndVertices();
}
void MicroprofileDrawer::DrawText(int x, int y, uint32_t color,
const char* text, int text_length) {
void MicroprofileDrawer::DrawTextString(int x, int y, uint32_t color,
const char* text, int text_length) {
if (!text_length) {
return;
}

View File

@@ -2,7 +2,7 @@
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Copyright 2022 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
@@ -10,6 +10,7 @@
#ifndef XENIA_UI_MICROPROFILE_DRAWER_H_
#define XENIA_UI_MICROPROFILE_DRAWER_H_
#include <cstdint>
#include <memory>
#include <vector>
@@ -18,9 +19,6 @@
namespace xe {
namespace ui {
class GraphicsContext;
class Window;
class MicroprofileDrawer {
public:
enum class BoxType {
@@ -28,15 +26,17 @@ class MicroprofileDrawer {
kFlat = 1, // MicroProfileBoxTypeFlat
};
MicroprofileDrawer(Window* window);
~MicroprofileDrawer();
// Initially hidden.
MicroprofileDrawer(ImmediateDrawer* immediate_drawer);
void Begin();
void Begin(UIDrawContext& ui_draw_context, uint32_t coordinate_space_width,
uint32_t coordinate_space_height);
void End();
void DrawBox(int x0, int y0, int x1, int y1, uint32_t color, BoxType type);
void DrawLine2D(uint32_t count, float* vertices, uint32_t color);
void DrawText(int x, int y, uint32_t color, const char* text,
int text_length);
// The name DrawTextString collides with DrawText in Windows.
void DrawTextString(int x, int y, uint32_t color, const char* text,
int text_length);
protected:
void SetupFont();
@@ -46,8 +46,7 @@ class MicroprofileDrawer {
void EndVertices();
void Flush();
Window* window_ = nullptr;
GraphicsContext* graphics_context_ = nullptr;
ImmediateDrawer* immediate_drawer_;
std::vector<ImmediateVertex> vertices_;
int vertex_count_ = 0;

View File

@@ -18,3 +18,8 @@ project("xenia-ui")
filter("platforms:Android-*")
-- Exports JNI functions.
wholelib("On")
filter("platforms:Windows")
links({
"DXGI",
})

1446
src/xenia/ui/presenter.cc Normal file

File diff suppressed because it is too large Load Diff

1034
src/xenia/ui/presenter.h Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,76 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/ui/renderdoc_api.h"
#include "xenia/base/assert.h"
#include "xenia/base/logging.h"
#include "xenia/base/platform.h"
#if XE_PLATFORM_LINUX
#include <dlfcn.h>
#elif XE_PLATFORM_WIN32
#include "xenia/base/platform_win.h"
#endif
namespace xe {
namespace ui {
bool RenderdocApi::Initialize() {
Shutdown();
pRENDERDOC_GetAPI get_api = nullptr;
// The RenderDoc library should be already loaded into the process if
// RenderDoc is attached - this is why RTLD_NOLOAD or GetModuleHandle instead
// of LoadLibrary.
#if XE_PLATFORM_LINUX
#if XE_PLATFORM_ANDROID
const char* librenderdoc_name = "libVkLayer_GLES_RenderDoc.so";
#else
const char* librenderdoc_name = "librenderdoc.so";
#endif
library_ = dlopen(librenderdoc_name, RTLD_NOW | RTLD_NOLOAD);
if (library_) {
get_api = pRENDERDOC_GetAPI(dlsym(library_, "RENDERDOC_GetAPI"));
}
#elif XE_PLATFORM_WIN32
library_ = GetModuleHandleA("renderdoc.dll");
if (library_) {
get_api = pRENDERDOC_GetAPI(
GetProcAddress(HMODULE(library_), "RENDERDOC_GetAPI"));
}
#endif
if (!get_api) {
Shutdown();
return false;
}
// get_api will be null if RenderDoc is not attached, or the API isn't
// available on this platform, or there was an error.
if (!get_api || !get_api(eRENDERDOC_API_Version_1_0_0, (void**)&api_1_0_0_) ||
!api_1_0_0_) {
Shutdown();
return false;
}
XELOGI("RenderDoc API initialized");
return true;
}
void RenderdocApi::Shutdown() {
api_1_0_0_ = nullptr;
if (library_) {
#if XE_PLATFORM_LINUX
dlclose(library_);
#endif
// Not calling FreeLibrary on Windows as GetModuleHandle doesn't increment
// the reference count.
library_ = nullptr;
}
}
} // namespace ui
} // namespace xe

View File

@@ -0,0 +1,39 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2021 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_UI_RENDERDOC_API_H_
#define XENIA_UI_RENDERDOC_API_H_
#include "third_party/renderdoc/renderdoc_app.h"
namespace xe {
namespace ui {
class RenderdocApi {
public:
RenderdocApi() = default;
RenderdocApi(const RenderdocApi& renderdoc_api) = delete;
RenderdocApi& operator=(const RenderdocApi& renderdoc_api) = delete;
~RenderdocApi() { Shutdown(); }
bool Initialize();
void Shutdown();
// nullptr if not attached.
const RENDERDOC_API_1_0_0* api_1_0_0() const { return api_1_0_0_; }
private:
void* library_ = nullptr;
const RENDERDOC_API_1_0_0* api_1_0_0_ = nullptr;
};
} // namespace ui
} // namespace xe
#endif // XENIA_UI_RENDERDOC_API_H_

View File

@@ -1 +1,2 @@
DisableFormat: true
SortIncludes: false

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,267 @@
#if 0
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//
// Buffer Definitions:
//
// cbuffer XeBilinearConstants
// {
//
// int2 xe_bilinear_output_offset; // Offset: 0 Size: 8
// float2 xe_bilinear_output_size_inv;// Offset: 8 Size: 8
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim ID HLSL Bind Count
// ------------------------------ ---------- ------- ----------- ------- -------------- ------
// xe_sampler_linear_clamp sampler NA NA S0 s0 1
// xe_texture texture float3 2d T0 t0 1
// XeBilinearConstants cbuffer NA NA CB0 cb0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_5_1
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[0:0][1], immediateIndexed, space=0
dcl_sampler S0[0:0], mode_default, space=0
dcl_resource_texture2d (float,float,float,float) T0[0:0], space=0
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_temps 1
ftoi r0.xy, v0.xyxx
iadd r0.xy, r0.xyxx, -CB0[0][0].xyxx
utof r0.xy, r0.xyxx
add r0.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
mul r0.xy, r0.xyxx, CB0[0][0].zwzz
sample_l r0.xyz, r0.xyxx, T0[0].xyzw, S0[0], l(0.000000)
mov o0.xyz, r0.xyzx
mov o0.w, l(1.000000)
ret
// Approximately 9 instruction slots used
#endif
const BYTE guest_output_bilinear_ps[] =
{
68, 88, 66, 67, 195, 73,
6, 106, 30, 227, 35, 134,
146, 186, 4, 157, 98, 172,
18, 157, 1, 0, 0, 0,
204, 4, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
68, 2, 0, 0, 120, 2,
0, 0, 172, 2, 0, 0,
48, 4, 0, 0, 82, 68,
69, 70, 8, 2, 0, 0,
1, 0, 0, 0, 236, 0,
0, 0, 3, 0, 0, 0,
60, 0, 0, 0, 1, 5,
255, 255, 0, 5, 0, 0,
224, 1, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,
0, 0, 40, 0, 0, 0,
36, 0, 0, 0, 12, 0,
0, 0, 0, 0, 0, 0,
180, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 204, 0,
0, 0, 2, 0, 0, 0,
5, 0, 0, 0, 4, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 1, 0,
0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 215, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
120, 101, 95, 115, 97, 109,
112, 108, 101, 114, 95, 108,
105, 110, 101, 97, 114, 95,
99, 108, 97, 109, 112, 0,
120, 101, 95, 116, 101, 120,
116, 117, 114, 101, 0, 88,
101, 66, 105, 108, 105, 110,
101, 97, 114, 67, 111, 110,
115, 116, 97, 110, 116, 115,
0, 171, 215, 0, 0, 0,
2, 0, 0, 0, 4, 1,
0, 0, 16, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 84, 1, 0, 0,
0, 0, 0, 0, 8, 0,
0, 0, 2, 0, 0, 0,
116, 1, 0, 0, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
152, 1, 0, 0, 8, 0,
0, 0, 8, 0, 0, 0,
2, 0, 0, 0, 188, 1,
0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 120, 101,
95, 98, 105, 108, 105, 110,
101, 97, 114, 95, 111, 117,
116, 112, 117, 116, 95, 111,
102, 102, 115, 101, 116, 0,
105, 110, 116, 50, 0, 171,
1, 0, 2, 0, 1, 0,
2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 110, 1, 0, 0,
120, 101, 95, 98, 105, 108,
105, 110, 101, 97, 114, 95,
111, 117, 116, 112, 117, 116,
95, 115, 105, 122, 101, 95,
105, 110, 118, 0, 102, 108,
111, 97, 116, 50, 0, 171,
1, 0, 3, 0, 1, 0,
2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 180, 1, 0, 0,
77, 105, 99, 114, 111, 115,
111, 102, 116, 32, 40, 82,
41, 32, 72, 76, 83, 76,
32, 83, 104, 97, 100, 101,
114, 32, 67, 111, 109, 112,
105, 108, 101, 114, 32, 49,
48, 46, 49, 0, 73, 83,
71, 78, 44, 0, 0, 0,
1, 0, 0, 0, 8, 0,
0, 0, 32, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 15, 3,
0, 0, 83, 86, 95, 80,
111, 115, 105, 116, 105, 111,
110, 0, 79, 83, 71, 78,
44, 0, 0, 0, 1, 0,
0, 0, 8, 0, 0, 0,
32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0,
0, 0, 15, 0, 0, 0,
83, 86, 95, 84, 97, 114,
103, 101, 116, 0, 171, 171,
83, 72, 69, 88, 124, 1,
0, 0, 81, 0, 0, 0,
95, 0, 0, 0, 106, 8,
0, 1, 89, 0, 0, 7,
70, 142, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
90, 0, 0, 6, 70, 110,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
88, 24, 0, 7, 70, 126,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 85, 85, 0, 0,
0, 0, 0, 0, 100, 32,
0, 4, 50, 16, 16, 0,
0, 0, 0, 0, 1, 0,
0, 0, 101, 0, 0, 3,
242, 32, 16, 0, 0, 0,
0, 0, 104, 0, 0, 2,
1, 0, 0, 0, 27, 0,
0, 5, 50, 0, 16, 0,
0, 0, 0, 0, 70, 16,
16, 0, 0, 0, 0, 0,
30, 0, 0, 10, 50, 0,
16, 0, 0, 0, 0, 0,
70, 0, 16, 0, 0, 0,
0, 0, 70, 128, 48, 128,
65, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 86, 0,
0, 5, 50, 0, 16, 0,
0, 0, 0, 0, 70, 0,
16, 0, 0, 0, 0, 0,
0, 0, 0, 10, 50, 0,
16, 0, 0, 0, 0, 0,
70, 0, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 63, 0, 0,
0, 63, 0, 0, 0, 0,
0, 0, 0, 0, 56, 0,
0, 9, 50, 0, 16, 0,
0, 0, 0, 0, 70, 0,
16, 0, 0, 0, 0, 0,
230, 138, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 72, 0,
0, 13, 114, 0, 16, 0,
0, 0, 0, 0, 70, 0,
16, 0, 0, 0, 0, 0,
70, 126, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 96, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 64, 0, 0, 0, 0,
0, 0, 54, 0, 0, 5,
114, 32, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 54, 0,
0, 5, 130, 32, 16, 0,
0, 0, 0, 0, 1, 64,
0, 0, 0, 0, 128, 63,
62, 0, 0, 1, 83, 84,
65, 84, 148, 0, 0, 0,
9, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 2, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,491 @@
#if 0
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//
// Buffer Definitions:
//
// cbuffer XeCasSharpenConstants
// {
//
// int2 xe_cas_output_offset; // Offset: 0 Size: 8
// float xe_cas_sharpness_post_setup; // Offset: 8 Size: 4
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim ID HLSL Bind Count
// ------------------------------ ---------- ------- ----------- ------- -------------- ------
// xe_texture texture float3 2d T0 t0 1
// XeCasSharpenConstants cbuffer NA NA CB0 cb0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_5_1
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[0:0][1], immediateIndexed, space=0
dcl_resource_texture2d (float,float,float,float) T0[0:0], space=0
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_temps 5
ftoi r0.xy, v0.xyxx
iadd r0.xy, r0.xyxx, -CB0[0][0].xyxx
iadd r1.xyzw, r0.xyxy, l(-1, 0, 0, -1)
mov r2.xy, r1.zwzz
mov r2.zw, l(0,0,0,0)
ld r2.xyz, r2.xyzw, T0[0].xyzw
mov r1.zw, l(0,0,0,0)
ld r1.xyz, r1.xyzw, T0[0].xyzw
mov r0.zw, l(0,0,0,0)
ld r3.xyz, r0.xyzw, T0[0].xyzw
iadd r0.xyzw, r0.xyxy, l(0, 1, 1, 0)
mov r4.xy, r0.zwzz
mov r4.zw, l(0,0,0,0)
ld r4.xyz, r4.xyzw, T0[0].xyzw
mov r0.zw, l(0,0,0,0)
ld r0.xyz, r0.xyzw, T0[0].xyzw
mul r2.xyz, r2.xyzx, r2.xyzx
mul r1.xyz, r1.xyzx, r1.xyzx
mul r0.w, r3.y, r3.y
mul r4.xyz, r4.xyzx, r4.xyzx
mul r0.xyz, r0.xyzx, r0.xyzx
min r1.w, r0.w, r4.y
min r1.w, r1.w, r1.y
min r2.w, r0.y, r2.y
min r1.w, r1.w, r2.w
max r0.w, r0.w, r4.y
max r0.w, r0.w, r1.y
max r2.w, r0.y, r2.y
max r0.w, r0.w, r2.w
iadd r2.w, -r0.w, l(0x7ef07ebb)
add r0.w, -r0.w, l(1.000000)
min r0.w, r0.w, r1.w
mul_sat r0.w, r2.w, r0.w
ushr r0.w, r0.w, l(1)
iadd r0.w, r0.w, l(0x1fbc4639)
mul r0.w, r0.w, CB0[0][0].z
mad r1.w, r0.w, l(4.000000), l(1.000000)
iadd r2.w, -r1.w, l(0x7ef19fff)
mad r1.w, -r2.w, r1.w, l(2.000000)
mul r1.w, r1.w, r2.w
mul r1.xyz, r0.wwww, r1.xyzx
mad r1.xyz, r2.xyzx, r0.wwww, r1.xyzx
mad r1.xyz, r4.xyzx, r0.wwww, r1.xyzx
mad r0.xyz, r0.xyzx, r0.wwww, r1.xyzx
mad r0.xyz, r3.xyzx, r3.xyzx, r0.xyzx
mul_sat r0.xyz, r1.wwww, r0.xyzx
sqrt o0.xyz, r0.xyzx
mov o0.w, l(1.000000)
ret
// Approximately 49 instruction slots used
#endif
const BYTE guest_output_ffx_cas_sharpen_ps[] =
{
68, 88, 66, 67, 2, 226,
230, 16, 201, 205, 207, 54,
189, 193, 184, 163, 140, 156,
247, 96, 1, 0, 0, 0,
40, 9, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
4, 2, 0, 0, 56, 2,
0, 0, 108, 2, 0, 0,
140, 8, 0, 0, 82, 68,
69, 70, 200, 1, 0, 0,
1, 0, 0, 0, 176, 0,
0, 0, 2, 0, 0, 0,
60, 0, 0, 0, 1, 5,
255, 255, 0, 5, 0, 0,
160, 1, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,
0, 0, 40, 0, 0, 0,
36, 0, 0, 0, 12, 0,
0, 0, 0, 0, 0, 0,
140, 0, 0, 0, 2, 0,
0, 0, 5, 0, 0, 0,
4, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
1, 0, 0, 0, 8, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 151, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 120, 101, 95, 116,
101, 120, 116, 117, 114, 101,
0, 88, 101, 67, 97, 115,
83, 104, 97, 114, 112, 101,
110, 67, 111, 110, 115, 116,
97, 110, 116, 115, 0, 171,
171, 171, 151, 0, 0, 0,
2, 0, 0, 0, 200, 0,
0, 0, 16, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 24, 1, 0, 0,
0, 0, 0, 0, 8, 0,
0, 0, 2, 0, 0, 0,
52, 1, 0, 0, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
88, 1, 0, 0, 8, 0,
0, 0, 4, 0, 0, 0,
2, 0, 0, 0, 124, 1,
0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 120, 101,
95, 99, 97, 115, 95, 111,
117, 116, 112, 117, 116, 95,
111, 102, 102, 115, 101, 116,
0, 105, 110, 116, 50, 0,
171, 171, 1, 0, 2, 0,
1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 45, 1,
0, 0, 120, 101, 95, 99,
97, 115, 95, 115, 104, 97,
114, 112, 110, 101, 115, 115,
95, 112, 111, 115, 116, 95,
115, 101, 116, 117, 112, 0,
102, 108, 111, 97, 116, 0,
171, 171, 0, 0, 3, 0,
1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 116, 1,
0, 0, 77, 105, 99, 114,
111, 115, 111, 102, 116, 32,
40, 82, 41, 32, 72, 76,
83, 76, 32, 83, 104, 97,
100, 101, 114, 32, 67, 111,
109, 112, 105, 108, 101, 114,
32, 49, 48, 46, 49, 0,
73, 83, 71, 78, 44, 0,
0, 0, 1, 0, 0, 0,
8, 0, 0, 0, 32, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0,
15, 3, 0, 0, 83, 86,
95, 80, 111, 115, 105, 116,
105, 111, 110, 0, 79, 83,
71, 78, 44, 0, 0, 0,
1, 0, 0, 0, 8, 0,
0, 0, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 15, 0,
0, 0, 83, 86, 95, 84,
97, 114, 103, 101, 116, 0,
171, 171, 83, 72, 69, 88,
24, 6, 0, 0, 81, 0,
0, 0, 134, 1, 0, 0,
106, 8, 0, 1, 89, 0,
0, 7, 70, 142, 48, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 88, 24, 0, 7,
70, 126, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 85, 85,
0, 0, 0, 0, 0, 0,
100, 32, 0, 4, 50, 16,
16, 0, 0, 0, 0, 0,
1, 0, 0, 0, 101, 0,
0, 3, 242, 32, 16, 0,
0, 0, 0, 0, 104, 0,
0, 2, 5, 0, 0, 0,
27, 0, 0, 5, 50, 0,
16, 0, 0, 0, 0, 0,
70, 16, 16, 0, 0, 0,
0, 0, 30, 0, 0, 10,
50, 0, 16, 0, 0, 0,
0, 0, 70, 0, 16, 0,
0, 0, 0, 0, 70, 128,
48, 128, 65, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
30, 0, 0, 10, 242, 0,
16, 0, 1, 0, 0, 0,
70, 4, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 54, 0,
0, 5, 50, 0, 16, 0,
2, 0, 0, 0, 230, 10,
16, 0, 1, 0, 0, 0,
54, 0, 0, 8, 194, 0,
16, 0, 2, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 45, 0, 0, 8,
114, 0, 16, 0, 2, 0,
0, 0, 70, 14, 16, 0,
2, 0, 0, 0, 70, 126,
32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 8, 194, 0, 16, 0,
1, 0, 0, 0, 2, 64,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
45, 0, 0, 8, 114, 0,
16, 0, 1, 0, 0, 0,
70, 14, 16, 0, 1, 0,
0, 0, 70, 126, 32, 0,
0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 8,
194, 0, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 45, 0,
0, 8, 114, 0, 16, 0,
3, 0, 0, 0, 70, 14,
16, 0, 0, 0, 0, 0,
70, 126, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
30, 0, 0, 10, 242, 0,
16, 0, 0, 0, 0, 0,
70, 4, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 5, 50, 0, 16, 0,
4, 0, 0, 0, 230, 10,
16, 0, 0, 0, 0, 0,
54, 0, 0, 8, 194, 0,
16, 0, 4, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 45, 0, 0, 8,
114, 0, 16, 0, 4, 0,
0, 0, 70, 14, 16, 0,
4, 0, 0, 0, 70, 126,
32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 8, 194, 0, 16, 0,
0, 0, 0, 0, 2, 64,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
45, 0, 0, 8, 114, 0,
16, 0, 0, 0, 0, 0,
70, 14, 16, 0, 0, 0,
0, 0, 70, 126, 32, 0,
0, 0, 0, 0, 0, 0,
0, 0, 56, 0, 0, 7,
114, 0, 16, 0, 2, 0,
0, 0, 70, 2, 16, 0,
2, 0, 0, 0, 70, 2,
16, 0, 2, 0, 0, 0,
56, 0, 0, 7, 114, 0,
16, 0, 1, 0, 0, 0,
70, 2, 16, 0, 1, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 56, 0,
0, 7, 130, 0, 16, 0,
0, 0, 0, 0, 26, 0,
16, 0, 3, 0, 0, 0,
26, 0, 16, 0, 3, 0,
0, 0, 56, 0, 0, 7,
114, 0, 16, 0, 4, 0,
0, 0, 70, 2, 16, 0,
4, 0, 0, 0, 70, 2,
16, 0, 4, 0, 0, 0,
56, 0, 0, 7, 114, 0,
16, 0, 0, 0, 0, 0,
70, 2, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 51, 0,
0, 7, 130, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 0, 0, 0, 0, 0,
26, 0, 16, 0, 4, 0,
0, 0, 51, 0, 0, 7,
130, 0, 16, 0, 1, 0,
0, 0, 58, 0, 16, 0,
1, 0, 0, 0, 26, 0,
16, 0, 1, 0, 0, 0,
51, 0, 0, 7, 130, 0,
16, 0, 2, 0, 0, 0,
26, 0, 16, 0, 0, 0,
0, 0, 26, 0, 16, 0,
2, 0, 0, 0, 51, 0,
0, 7, 130, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 0, 1, 0, 0, 0,
58, 0, 16, 0, 2, 0,
0, 0, 52, 0, 0, 7,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 26, 0,
16, 0, 4, 0, 0, 0,
52, 0, 0, 7, 130, 0,
16, 0, 0, 0, 0, 0,
58, 0, 16, 0, 0, 0,
0, 0, 26, 0, 16, 0,
1, 0, 0, 0, 52, 0,
0, 7, 130, 0, 16, 0,
2, 0, 0, 0, 26, 0,
16, 0, 0, 0, 0, 0,
26, 0, 16, 0, 2, 0,
0, 0, 52, 0, 0, 7,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 58, 0,
16, 0, 2, 0, 0, 0,
30, 0, 0, 8, 130, 0,
16, 0, 2, 0, 0, 0,
58, 0, 16, 128, 65, 0,
0, 0, 0, 0, 0, 0,
1, 64, 0, 0, 187, 126,
240, 126, 0, 0, 0, 8,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 128,
65, 0, 0, 0, 0, 0,
0, 0, 1, 64, 0, 0,
0, 0, 128, 63, 51, 0,
0, 7, 130, 0, 16, 0,
0, 0, 0, 0, 58, 0,
16, 0, 0, 0, 0, 0,
58, 0, 16, 0, 1, 0,
0, 0, 56, 32, 0, 7,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
2, 0, 0, 0, 58, 0,
16, 0, 0, 0, 0, 0,
85, 0, 0, 7, 130, 0,
16, 0, 0, 0, 0, 0,
58, 0, 16, 0, 0, 0,
0, 0, 1, 64, 0, 0,
1, 0, 0, 0, 30, 0,
0, 7, 130, 0, 16, 0,
0, 0, 0, 0, 58, 0,
16, 0, 0, 0, 0, 0,
1, 64, 0, 0, 57, 70,
188, 31, 56, 0, 0, 9,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 42, 128,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 50, 0, 0, 9,
130, 0, 16, 0, 1, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 1, 64,
0, 0, 0, 0, 128, 64,
1, 64, 0, 0, 0, 0,
128, 63, 30, 0, 0, 8,
130, 0, 16, 0, 2, 0,
0, 0, 58, 0, 16, 128,
65, 0, 0, 0, 1, 0,
0, 0, 1, 64, 0, 0,
255, 159, 241, 126, 50, 0,
0, 10, 130, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 128, 65, 0, 0, 0,
2, 0, 0, 0, 58, 0,
16, 0, 1, 0, 0, 0,
1, 64, 0, 0, 0, 0,
0, 64, 56, 0, 0, 7,
130, 0, 16, 0, 1, 0,
0, 0, 58, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 0, 2, 0, 0, 0,
56, 0, 0, 7, 114, 0,
16, 0, 1, 0, 0, 0,
246, 15, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
1, 0, 0, 0, 70, 2,
16, 0, 2, 0, 0, 0,
246, 15, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
1, 0, 0, 0, 70, 2,
16, 0, 4, 0, 0, 0,
246, 15, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
0, 0, 0, 0, 70, 2,
16, 0, 0, 0, 0, 0,
246, 15, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
0, 0, 0, 0, 70, 2,
16, 0, 3, 0, 0, 0,
70, 2, 16, 0, 3, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 56, 32,
0, 7, 114, 0, 16, 0,
0, 0, 0, 0, 246, 15,
16, 0, 1, 0, 0, 0,
70, 2, 16, 0, 0, 0,
0, 0, 75, 0, 0, 5,
114, 32, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 54, 0,
0, 5, 130, 32, 16, 0,
0, 0, 0, 0, 1, 64,
0, 0, 0, 0, 128, 63,
62, 0, 0, 1, 83, 84,
65, 84, 148, 0, 0, 0,
49, 0, 0, 0, 5, 0,
0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 27, 0,
0, 0, 6, 0, 0, 0,
1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
5, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 8, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,498 @@
#if 0
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//
// Buffer Definitions:
//
// cbuffer XeFsrRcasConstants
// {
//
// int2 xe_fsr_rcas_output_offset; // Offset: 0 Size: 8
// float xe_fsr_rcas_sharpness_post_setup;// Offset: 8 Size: 4
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim ID HLSL Bind Count
// ------------------------------ ---------- ------- ----------- ------- -------------- ------
// xe_texture texture float3 2d T0 t0 1
// XeFsrRcasConstants cbuffer NA NA CB0 cb0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xy
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target 0 xyzw 0 TARGET float xyzw
//
ps_5_1
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[0:0][1], immediateIndexed, space=0
dcl_resource_texture2d (float,float,float,float) T0[0:0], space=0
dcl_input_ps_siv linear noperspective v0.xy, position
dcl_output o0.xyzw
dcl_temps 9
ftoi r0.xy, v0.xyxx
iadd r0.xy, r0.xyxx, -CB0[0][0].xyxx
iadd r1.xyzw, r0.xyxy, l(-1, 0, 0, -1)
mov r2.xy, r1.zwzz
mov r2.zw, l(0,0,0,0)
ld r2.xyz, r2.xyzw, T0[0].xyzw
mov r1.zw, l(0,0,0,0)
ld r1.xyz, r1.xyzw, T0[0].xyzw
mov r0.zw, l(0,0,0,0)
ld r3.xyz, r0.xyzw, T0[0].xyzw
iadd r0.xyzw, r0.xyxy, l(0, 1, 1, 0)
mov r4.xy, r0.zwzz
mov r4.zw, l(0,0,0,0)
ld r4.xyz, r4.xyzw, T0[0].xyzw
mov r0.zw, l(0,0,0,0)
ld r0.xyz, r0.xyzw, T0[0].xyzw
min r5.xyz, r1.xyzx, r4.xyzx
min r5.xyz, r2.xyzx, r5.xyzx
min r5.xyz, r0.xyzx, r5.xyzx
max r6.xyz, r1.xyzx, r4.xyzx
max r6.xyz, r2.xyzx, r6.xyzx
max r6.xyz, r0.xyzx, r6.xyzx
min r7.xyz, r3.xyzx, r5.xyzx
mul r8.xyz, r6.xyzx, l(4.000000, 4.000000, 4.000000, 0.000000)
rcp r8.xyz, r8.xyzx
mul r7.xyz, r7.xyzx, r8.xyzx
max r6.xyz, r3.xyzx, r6.xyzx
add r6.xyz, -r6.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
mad r5.xyz, r5.xyzx, l(4.000000, 4.000000, 4.000000, 0.000000), l(-4.000000, -4.000000, -4.000000, 0.000000)
rcp r5.xyz, r5.xyzx
mul r5.xyz, r5.xyzx, r6.xyzx
max r5.xyz, r5.xyzx, -r7.xyzx
max r0.w, r5.z, r5.y
max r0.w, r0.w, r5.x
min r0.w, r0.w, l(0.000000)
max r0.w, r0.w, l(-0.187500)
mul r0.w, r0.w, CB0[0][0].z
mad r1.w, r0.w, l(4.000000), l(1.000000)
iadd r2.w, -r1.w, l(0x7ef19fff)
mad r1.w, -r2.w, r1.w, l(2.000000)
mul r1.w, r1.w, r2.w
mul r1.xyz, r1.xyzx, r0.wwww
mad r1.xyz, r0.wwww, r2.xyzx, r1.xyzx
mad r0.xyz, r0.wwww, r0.xyzx, r1.xyzx
mad r0.xyz, r0.wwww, r4.xyzx, r0.xyzx
add r0.xyz, r3.xyzx, r0.xyzx
mul o0.xyz, r1.wwww, r0.xyzx
mov o0.w, l(1.000000)
ret
// Approximately 49 instruction slots used
#endif
const BYTE guest_output_ffx_fsr_rcas_ps[] =
{
68, 88, 66, 67, 185, 223,
242, 110, 212, 184, 173, 198,
168, 143, 147, 205, 178, 152,
68, 191, 1, 0, 0, 0,
84, 9, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
8, 2, 0, 0, 60, 2,
0, 0, 112, 2, 0, 0,
184, 8, 0, 0, 82, 68,
69, 70, 204, 1, 0, 0,
1, 0, 0, 0, 172, 0,
0, 0, 2, 0, 0, 0,
60, 0, 0, 0, 1, 5,
255, 255, 0, 5, 0, 0,
164, 1, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,
0, 0, 40, 0, 0, 0,
36, 0, 0, 0, 12, 0,
0, 0, 0, 0, 0, 0,
140, 0, 0, 0, 2, 0,
0, 0, 5, 0, 0, 0,
4, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
1, 0, 0, 0, 8, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 151, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 120, 101, 95, 116,
101, 120, 116, 117, 114, 101,
0, 88, 101, 70, 115, 114,
82, 99, 97, 115, 67, 111,
110, 115, 116, 97, 110, 116,
115, 0, 171, 171, 151, 0,
0, 0, 2, 0, 0, 0,
196, 0, 0, 0, 16, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 20, 1,
0, 0, 0, 0, 0, 0,
8, 0, 0, 0, 2, 0,
0, 0, 52, 1, 0, 0,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 88, 1, 0, 0,
8, 0, 0, 0, 4, 0,
0, 0, 2, 0, 0, 0,
128, 1, 0, 0, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
120, 101, 95, 102, 115, 114,
95, 114, 99, 97, 115, 95,
111, 117, 116, 112, 117, 116,
95, 111, 102, 102, 115, 101,
116, 0, 105, 110, 116, 50,
0, 171, 1, 0, 2, 0,
1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 46, 1,
0, 0, 120, 101, 95, 102,
115, 114, 95, 114, 99, 97,
115, 95, 115, 104, 97, 114,
112, 110, 101, 115, 115, 95,
112, 111, 115, 116, 95, 115,
101, 116, 117, 112, 0, 102,
108, 111, 97, 116, 0, 171,
0, 0, 3, 0, 1, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 121, 1, 0, 0,
77, 105, 99, 114, 111, 115,
111, 102, 116, 32, 40, 82,
41, 32, 72, 76, 83, 76,
32, 83, 104, 97, 100, 101,
114, 32, 67, 111, 109, 112,
105, 108, 101, 114, 32, 49,
48, 46, 49, 0, 73, 83,
71, 78, 44, 0, 0, 0,
1, 0, 0, 0, 8, 0,
0, 0, 32, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 15, 3,
0, 0, 83, 86, 95, 80,
111, 115, 105, 116, 105, 111,
110, 0, 79, 83, 71, 78,
44, 0, 0, 0, 1, 0,
0, 0, 8, 0, 0, 0,
32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0,
0, 0, 15, 0, 0, 0,
83, 86, 95, 84, 97, 114,
103, 101, 116, 0, 171, 171,
83, 72, 69, 88, 64, 6,
0, 0, 81, 0, 0, 0,
144, 1, 0, 0, 106, 8,
0, 1, 89, 0, 0, 7,
70, 142, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
88, 24, 0, 7, 70, 126,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 85, 85, 0, 0,
0, 0, 0, 0, 100, 32,
0, 4, 50, 16, 16, 0,
0, 0, 0, 0, 1, 0,
0, 0, 101, 0, 0, 3,
242, 32, 16, 0, 0, 0,
0, 0, 104, 0, 0, 2,
9, 0, 0, 0, 27, 0,
0, 5, 50, 0, 16, 0,
0, 0, 0, 0, 70, 16,
16, 0, 0, 0, 0, 0,
30, 0, 0, 10, 50, 0,
16, 0, 0, 0, 0, 0,
70, 0, 16, 0, 0, 0,
0, 0, 70, 128, 48, 128,
65, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 30, 0,
0, 10, 242, 0, 16, 0,
1, 0, 0, 0, 70, 4,
16, 0, 0, 0, 0, 0,
2, 64, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255,
255, 255, 54, 0, 0, 5,
50, 0, 16, 0, 2, 0,
0, 0, 230, 10, 16, 0,
1, 0, 0, 0, 54, 0,
0, 8, 194, 0, 16, 0,
2, 0, 0, 0, 2, 64,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
45, 0, 0, 8, 114, 0,
16, 0, 2, 0, 0, 0,
70, 14, 16, 0, 2, 0,
0, 0, 70, 126, 32, 0,
0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 8,
194, 0, 16, 0, 1, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 45, 0,
0, 8, 114, 0, 16, 0,
1, 0, 0, 0, 70, 14,
16, 0, 1, 0, 0, 0,
70, 126, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
54, 0, 0, 8, 194, 0,
16, 0, 0, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 45, 0, 0, 8,
114, 0, 16, 0, 3, 0,
0, 0, 70, 14, 16, 0,
0, 0, 0, 0, 70, 126,
32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 30, 0,
0, 10, 242, 0, 16, 0,
0, 0, 0, 0, 70, 4,
16, 0, 0, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 5,
50, 0, 16, 0, 4, 0,
0, 0, 230, 10, 16, 0,
0, 0, 0, 0, 54, 0,
0, 8, 194, 0, 16, 0,
4, 0, 0, 0, 2, 64,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
45, 0, 0, 8, 114, 0,
16, 0, 4, 0, 0, 0,
70, 14, 16, 0, 4, 0,
0, 0, 70, 126, 32, 0,
0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 8,
194, 0, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 45, 0,
0, 8, 114, 0, 16, 0,
0, 0, 0, 0, 70, 14,
16, 0, 0, 0, 0, 0,
70, 126, 32, 0, 0, 0,
0, 0, 0, 0, 0, 0,
51, 0, 0, 7, 114, 0,
16, 0, 5, 0, 0, 0,
70, 2, 16, 0, 1, 0,
0, 0, 70, 2, 16, 0,
4, 0, 0, 0, 51, 0,
0, 7, 114, 0, 16, 0,
5, 0, 0, 0, 70, 2,
16, 0, 2, 0, 0, 0,
70, 2, 16, 0, 5, 0,
0, 0, 51, 0, 0, 7,
114, 0, 16, 0, 5, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 70, 2,
16, 0, 5, 0, 0, 0,
52, 0, 0, 7, 114, 0,
16, 0, 6, 0, 0, 0,
70, 2, 16, 0, 1, 0,
0, 0, 70, 2, 16, 0,
4, 0, 0, 0, 52, 0,
0, 7, 114, 0, 16, 0,
6, 0, 0, 0, 70, 2,
16, 0, 2, 0, 0, 0,
70, 2, 16, 0, 6, 0,
0, 0, 52, 0, 0, 7,
114, 0, 16, 0, 6, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 70, 2,
16, 0, 6, 0, 0, 0,
51, 0, 0, 7, 114, 0,
16, 0, 7, 0, 0, 0,
70, 2, 16, 0, 3, 0,
0, 0, 70, 2, 16, 0,
5, 0, 0, 0, 56, 0,
0, 10, 114, 0, 16, 0,
8, 0, 0, 0, 70, 2,
16, 0, 6, 0, 0, 0,
2, 64, 0, 0, 0, 0,
128, 64, 0, 0, 128, 64,
0, 0, 128, 64, 0, 0,
0, 0, 129, 0, 0, 5,
114, 0, 16, 0, 8, 0,
0, 0, 70, 2, 16, 0,
8, 0, 0, 0, 56, 0,
0, 7, 114, 0, 16, 0,
7, 0, 0, 0, 70, 2,
16, 0, 7, 0, 0, 0,
70, 2, 16, 0, 8, 0,
0, 0, 52, 0, 0, 7,
114, 0, 16, 0, 6, 0,
0, 0, 70, 2, 16, 0,
3, 0, 0, 0, 70, 2,
16, 0, 6, 0, 0, 0,
0, 0, 0, 11, 114, 0,
16, 0, 6, 0, 0, 0,
70, 2, 16, 128, 65, 0,
0, 0, 6, 0, 0, 0,
2, 64, 0, 0, 0, 0,
128, 63, 0, 0, 128, 63,
0, 0, 128, 63, 0, 0,
0, 0, 50, 0, 0, 15,
114, 0, 16, 0, 5, 0,
0, 0, 70, 2, 16, 0,
5, 0, 0, 0, 2, 64,
0, 0, 0, 0, 128, 64,
0, 0, 128, 64, 0, 0,
128, 64, 0, 0, 0, 0,
2, 64, 0, 0, 0, 0,
128, 192, 0, 0, 128, 192,
0, 0, 128, 192, 0, 0,
0, 0, 129, 0, 0, 5,
114, 0, 16, 0, 5, 0,
0, 0, 70, 2, 16, 0,
5, 0, 0, 0, 56, 0,
0, 7, 114, 0, 16, 0,
5, 0, 0, 0, 70, 2,
16, 0, 5, 0, 0, 0,
70, 2, 16, 0, 6, 0,
0, 0, 52, 0, 0, 8,
114, 0, 16, 0, 5, 0,
0, 0, 70, 2, 16, 0,
5, 0, 0, 0, 70, 2,
16, 128, 65, 0, 0, 0,
7, 0, 0, 0, 52, 0,
0, 7, 130, 0, 16, 0,
0, 0, 0, 0, 42, 0,
16, 0, 5, 0, 0, 0,
26, 0, 16, 0, 5, 0,
0, 0, 52, 0, 0, 7,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 10, 0,
16, 0, 5, 0, 0, 0,
51, 0, 0, 7, 130, 0,
16, 0, 0, 0, 0, 0,
58, 0, 16, 0, 0, 0,
0, 0, 1, 64, 0, 0,
0, 0, 0, 0, 52, 0,
0, 7, 130, 0, 16, 0,
0, 0, 0, 0, 58, 0,
16, 0, 0, 0, 0, 0,
1, 64, 0, 0, 0, 0,
64, 190, 56, 0, 0, 9,
130, 0, 16, 0, 0, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 42, 128,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 50, 0, 0, 9,
130, 0, 16, 0, 1, 0,
0, 0, 58, 0, 16, 0,
0, 0, 0, 0, 1, 64,
0, 0, 0, 0, 128, 64,
1, 64, 0, 0, 0, 0,
128, 63, 30, 0, 0, 8,
130, 0, 16, 0, 2, 0,
0, 0, 58, 0, 16, 128,
65, 0, 0, 0, 1, 0,
0, 0, 1, 64, 0, 0,
255, 159, 241, 126, 50, 0,
0, 10, 130, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 128, 65, 0, 0, 0,
2, 0, 0, 0, 58, 0,
16, 0, 1, 0, 0, 0,
1, 64, 0, 0, 0, 0,
0, 64, 56, 0, 0, 7,
130, 0, 16, 0, 1, 0,
0, 0, 58, 0, 16, 0,
1, 0, 0, 0, 58, 0,
16, 0, 2, 0, 0, 0,
56, 0, 0, 7, 114, 0,
16, 0, 1, 0, 0, 0,
70, 2, 16, 0, 1, 0,
0, 0, 246, 15, 16, 0,
0, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
1, 0, 0, 0, 246, 15,
16, 0, 0, 0, 0, 0,
70, 2, 16, 0, 2, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
0, 0, 0, 0, 246, 15,
16, 0, 0, 0, 0, 0,
70, 2, 16, 0, 0, 0,
0, 0, 70, 2, 16, 0,
1, 0, 0, 0, 50, 0,
0, 9, 114, 0, 16, 0,
0, 0, 0, 0, 246, 15,
16, 0, 0, 0, 0, 0,
70, 2, 16, 0, 4, 0,
0, 0, 70, 2, 16, 0,
0, 0, 0, 0, 0, 0,
0, 7, 114, 0, 16, 0,
0, 0, 0, 0, 70, 2,
16, 0, 3, 0, 0, 0,
70, 2, 16, 0, 0, 0,
0, 0, 56, 0, 0, 7,
114, 32, 16, 0, 0, 0,
0, 0, 246, 15, 16, 0,
1, 0, 0, 0, 70, 2,
16, 0, 0, 0, 0, 0,
54, 0, 0, 5, 130, 32,
16, 0, 0, 0, 0, 0,
1, 64, 0, 0, 0, 0,
128, 63, 62, 0, 0, 1,
83, 84, 65, 84, 148, 0,
0, 0, 49, 0, 0, 0,
9, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0,
28, 0, 0, 0, 4, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
8, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
};

View File

@@ -0,0 +1,220 @@
#if 0
//
// Generated by Microsoft (R) HLSL Shader Compiler 10.1
//
//
// Buffer Definitions:
//
// cbuffer XeTriangleStripRectConstants
// {
//
// float2 xe_triangle_strip_rect_offset;// Offset: 0 Size: 8
// float2 xe_triangle_strip_rect_size;// Offset: 8 Size: 8
//
// }
//
//
// Resource Bindings:
//
// Name Type Format Dim ID HLSL Bind Count
// ------------------------------ ---------- ------- ----------- ------- -------------- ------
// XeTriangleStripRectConstants cbuffer NA NA CB0 cb0 1
//
//
//
// Input signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_VertexID 0 x 0 VERTID uint x
//
//
// Output signature:
//
// Name Index Mask Register SysValue Format Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position 0 xyzw 0 POS float xyzw
//
vs_5_1
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[0:0][1], immediateIndexed, space=0
dcl_input_sgv v0.x, vertex_id
dcl_output_siv o0.xyzw, position
dcl_temps 1
ushr r0.y, v0.x, l(1)
mov r0.x, v0.x
and r0.xy, r0.xyxx, l(1, 1, 0, 0)
utof r0.xy, r0.xyxx
mad o0.xy, r0.xyxx, CB0[0][0].zwzz, CB0[0][0].xyxx
mov o0.zw, l(0,0,0,1.000000)
ret
// Approximately 7 instruction slots used
#endif
const BYTE guest_output_triangle_strip_rect_vs[] =
{
68, 88, 66, 67, 67, 209,
250, 163, 3, 195, 64, 100,
167, 54, 190, 31, 173, 113,
120, 163, 1, 0, 0, 0,
216, 3, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
184, 1, 0, 0, 236, 1,
0, 0, 32, 2, 0, 0,
60, 3, 0, 0, 82, 68,
69, 70, 124, 1, 0, 0,
1, 0, 0, 0, 132, 0,
0, 0, 1, 0, 0, 0,
60, 0, 0, 0, 1, 5,
254, 255, 0, 5, 0, 0,
84, 1, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,
0, 0, 40, 0, 0, 0,
36, 0, 0, 0, 12, 0,
0, 0, 0, 0, 0, 0,
100, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 88, 101,
84, 114, 105, 97, 110, 103,
108, 101, 83, 116, 114, 105,
112, 82, 101, 99, 116, 67,
111, 110, 115, 116, 97, 110,
116, 115, 0, 171, 171, 171,
100, 0, 0, 0, 2, 0,
0, 0, 156, 0, 0, 0,
16, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
236, 0, 0, 0, 0, 0,
0, 0, 8, 0, 0, 0,
2, 0, 0, 0, 20, 1,
0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 56, 1,
0, 0, 8, 0, 0, 0,
8, 0, 0, 0, 2, 0,
0, 0, 20, 1, 0, 0,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
255, 255, 255, 255, 0, 0,
0, 0, 120, 101, 95, 116,
114, 105, 97, 110, 103, 108,
101, 95, 115, 116, 114, 105,
112, 95, 114, 101, 99, 116,
95, 111, 102, 102, 115, 101,
116, 0, 102, 108, 111, 97,
116, 50, 0, 171, 171, 171,
1, 0, 3, 0, 1, 0,
2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 10, 1, 0, 0,
120, 101, 95, 116, 114, 105,
97, 110, 103, 108, 101, 95,
115, 116, 114, 105, 112, 95,
114, 101, 99, 116, 95, 115,
105, 122, 101, 0, 77, 105,
99, 114, 111, 115, 111, 102,
116, 32, 40, 82, 41, 32,
72, 76, 83, 76, 32, 83,
104, 97, 100, 101, 114, 32,
67, 111, 109, 112, 105, 108,
101, 114, 32, 49, 48, 46,
49, 0, 73, 83, 71, 78,
44, 0, 0, 0, 1, 0,
0, 0, 8, 0, 0, 0,
32, 0, 0, 0, 0, 0,
0, 0, 6, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 1, 1, 0, 0,
83, 86, 95, 86, 101, 114,
116, 101, 120, 73, 68, 0,
79, 83, 71, 78, 44, 0,
0, 0, 1, 0, 0, 0,
8, 0, 0, 0, 32, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0,
15, 0, 0, 0, 83, 86,
95, 80, 111, 115, 105, 116,
105, 111, 110, 0, 83, 72,
69, 88, 20, 1, 0, 0,
81, 0, 1, 0, 69, 0,
0, 0, 106, 8, 0, 1,
89, 0, 0, 7, 70, 142,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 96, 0,
0, 4, 18, 16, 16, 0,
0, 0, 0, 0, 6, 0,
0, 0, 103, 0, 0, 4,
242, 32, 16, 0, 0, 0,
0, 0, 1, 0, 0, 0,
104, 0, 0, 2, 1, 0,
0, 0, 85, 0, 0, 7,
34, 0, 16, 0, 0, 0,
0, 0, 10, 16, 16, 0,
0, 0, 0, 0, 1, 64,
0, 0, 1, 0, 0, 0,
54, 0, 0, 5, 18, 0,
16, 0, 0, 0, 0, 0,
10, 16, 16, 0, 0, 0,
0, 0, 1, 0, 0, 10,
50, 0, 16, 0, 0, 0,
0, 0, 70, 0, 16, 0,
0, 0, 0, 0, 2, 64,
0, 0, 1, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
86, 0, 0, 5, 50, 0,
16, 0, 0, 0, 0, 0,
70, 0, 16, 0, 0, 0,
0, 0, 50, 0, 0, 13,
50, 32, 16, 0, 0, 0,
0, 0, 70, 0, 16, 0,
0, 0, 0, 0, 230, 138,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 70, 128, 48, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
54, 0, 0, 8, 194, 32,
16, 0, 0, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
128, 63, 62, 0, 0, 1,
83, 84, 65, 84, 148, 0,
0, 0, 7, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0,
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
};

View File

@@ -42,10 +42,10 @@ ret
const BYTE immediate_ps[] =
{
68, 88, 66, 67, 204, 46,
131, 39, 62, 129, 239, 95,
188, 170, 211, 224, 226, 155,
212, 68, 1, 0, 0, 0,
68, 88, 66, 67, 218, 200,
108, 196, 58, 28, 70, 226,
98, 137, 89, 199, 218, 58,
155, 172, 1, 0, 0, 0,
0, 3, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
28, 1, 0, 0, 104, 1,
@@ -55,7 +55,7 @@ const BYTE immediate_ps[] =
0, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0,
60, 0, 0, 0, 1, 5,
255, 255, 0, 5, 4, 0,
255, 255, 0, 5, 0, 0,
182, 0, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,

View File

@@ -8,7 +8,7 @@
// cbuffer XeImmediateVertexConstants
// {
//
// float2 xe_viewport_size_inv; // Offset: 0 Size: 8
// float2 xe_coordinate_space_size_inv;// Offset: 0 Size: 8
//
// }
//
@@ -59,21 +59,21 @@ ret
const BYTE immediate_vs[] =
{
68, 88, 66, 67, 88, 56,
35, 17, 155, 211, 230, 48,
9, 16, 27, 220, 163, 42,
194, 218, 1, 0, 0, 0,
16, 4, 0, 0, 5, 0,
68, 88, 66, 67, 141, 232,
76, 204, 152, 38, 127, 131,
125, 87, 10, 113, 217, 159,
27, 143, 1, 0, 0, 0,
24, 4, 0, 0, 5, 0,
0, 0, 52, 0, 0, 0,
100, 1, 0, 0, 212, 1,
0, 0, 68, 2, 0, 0,
116, 3, 0, 0, 82, 68,
69, 70, 40, 1, 0, 0,
108, 1, 0, 0, 220, 1,
0, 0, 76, 2, 0, 0,
124, 3, 0, 0, 82, 68,
69, 70, 48, 1, 0, 0,
1, 0, 0, 0, 128, 0,
0, 0, 1, 0, 0, 0,
60, 0, 0, 0, 1, 5,
254, 255, 0, 5, 4, 0,
0, 1, 0, 0, 19, 19,
254, 255, 0, 5, 0, 0,
8, 1, 0, 0, 19, 19,
68, 37, 60, 0, 0, 0,
24, 0, 0, 0, 40, 0,
0, 0, 40, 0, 0, 0,
@@ -97,122 +97,123 @@ const BYTE immediate_vs[] =
0, 0, 192, 0, 0, 0,
0, 0, 0, 0, 8, 0,
0, 0, 2, 0, 0, 0,
220, 0, 0, 0, 0, 0,
228, 0, 0, 0, 0, 0,
0, 0, 255, 255, 255, 255,
0, 0, 0, 0, 255, 255,
255, 255, 0, 0, 0, 0,
120, 101, 95, 118, 105, 101,
119, 112, 111, 114, 116, 95,
115, 105, 122, 101, 95, 105,
110, 118, 0, 102, 108, 111,
97, 116, 50, 0, 1, 0,
3, 0, 1, 0, 2, 0,
120, 101, 95, 99, 111, 111,
114, 100, 105, 110, 97, 116,
101, 95, 115, 112, 97, 99,
101, 95, 115, 105, 122, 101,
95, 105, 110, 118, 0, 102,
108, 111, 97, 116, 50, 0,
1, 0, 3, 0, 1, 0,
2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 221, 0, 0, 0,
77, 105, 99, 114, 111, 115,
111, 102, 116, 32, 40, 82,
41, 32, 72, 76, 83, 76,
32, 83, 104, 97, 100, 101,
114, 32, 67, 111, 109, 112,
105, 108, 101, 114, 32, 49,
48, 46, 49, 0, 73, 83,
71, 78, 104, 0, 0, 0,
3, 0, 0, 0, 8, 0,
0, 0, 80, 0, 0, 0,
0, 0, 0, 0, 0, 0,
213, 0, 0, 0, 77, 105,
99, 114, 111, 115, 111, 102,
116, 32, 40, 82, 41, 32,
72, 76, 83, 76, 32, 83,
104, 97, 100, 101, 114, 32,
67, 111, 109, 112, 105, 108,
101, 114, 32, 49, 48, 46,
49, 0, 73, 83, 71, 78,
0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 3, 3,
0, 0, 89, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0,
1, 0, 0, 0, 3, 3,
0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0,
2, 0, 0, 0, 15, 15,
0, 0, 80, 79, 83, 73,
84, 73, 79, 78, 0, 84,
69, 88, 67, 79, 79, 82,
68, 0, 67, 79, 76, 79,
82, 0, 79, 83, 71, 78,
104, 0, 0, 0, 3, 0,
0, 0, 8, 0, 0, 0,
80, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 0, 0,
0, 0, 3, 3, 0, 0,
89, 0, 0, 0, 0, 0,
0, 0, 3, 12, 0, 0,
80, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
3, 0, 0, 0, 1, 0,
0, 0, 3, 3, 0, 0,
98, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 15, 0, 0, 0,
89, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
3, 0, 0, 0, 2, 0,
0, 0, 15, 15, 0, 0,
80, 79, 83, 73, 84, 73,
79, 78, 0, 84, 69, 88,
67, 79, 79, 82, 68, 0,
67, 79, 76, 79, 82, 0,
79, 83, 71, 78, 104, 0,
0, 0, 3, 0, 0, 0,
8, 0, 0, 0, 80, 0,
0, 0, 15, 0, 0, 0,
84, 69, 88, 67, 79, 79,
82, 68, 0, 83, 86, 95,
80, 111, 115, 105, 116, 105,
111, 110, 0, 171, 171, 171,
83, 72, 69, 88, 40, 1,
0, 0, 81, 0, 1, 0,
74, 0, 0, 0, 106, 8,
0, 1, 89, 0, 0, 7,
70, 142, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 3, 0,
0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
3, 12, 0, 0, 80, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 3, 0,
0, 0, 1, 0, 0, 0,
15, 0, 0, 0, 89, 0,
0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 3, 0,
0, 0, 2, 0, 0, 0,
15, 0, 0, 0, 84, 69,
88, 67, 79, 79, 82, 68,
0, 83, 86, 95, 80, 111,
115, 105, 116, 105, 111, 110,
0, 171, 171, 171, 83, 72,
69, 88, 40, 1, 0, 0,
81, 0, 1, 0, 74, 0,
0, 0, 106, 8, 0, 1,
89, 0, 0, 7, 70, 142,
48, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 95, 0,
0, 3, 50, 16, 16, 0,
0, 0, 0, 0, 95, 0,
0, 3, 50, 16, 16, 0,
1, 0, 0, 0, 95, 0,
0, 3, 242, 16, 16, 0,
2, 0, 0, 0, 101, 0,
0, 3, 50, 32, 16, 0,
0, 0, 0, 0, 101, 0,
0, 3, 242, 32, 16, 0,
1, 0, 0, 0, 103, 0,
0, 4, 242, 32, 16, 0,
2, 0, 0, 0, 1, 0,
0, 0, 104, 0, 0, 2,
1, 0, 0, 0, 56, 0,
0, 9, 50, 0, 16, 0,
0, 0, 0, 0, 70, 16,
95, 0, 0, 3, 50, 16,
16, 0, 0, 0, 0, 0,
70, 128, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 50, 0,
0, 15, 50, 32, 16, 0,
2, 0, 0, 0, 70, 0,
95, 0, 0, 3, 50, 16,
16, 0, 1, 0, 0, 0,
95, 0, 0, 3, 242, 16,
16, 0, 2, 0, 0, 0,
101, 0, 0, 3, 50, 32,
16, 0, 0, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 64, 0, 0, 0, 192,
101, 0, 0, 3, 242, 32,
16, 0, 1, 0, 0, 0,
103, 0, 0, 4, 242, 32,
16, 0, 2, 0, 0, 0,
1, 0, 0, 0, 104, 0,
0, 2, 1, 0, 0, 0,
56, 0, 0, 9, 50, 0,
16, 0, 0, 0, 0, 0,
70, 16, 16, 0, 0, 0,
0, 0, 70, 128, 48, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
50, 0, 0, 15, 50, 32,
16, 0, 2, 0, 0, 0,
70, 0, 16, 0, 0, 0,
0, 0, 2, 64, 0, 0,
0, 0, 0, 64, 0, 0,
0, 192, 0, 0, 0, 0,
0, 0, 0, 0, 2, 64,
0, 0, 0, 0, 128, 191,
0, 0, 128, 63, 0, 0,
0, 0, 0, 0, 0, 0,
54, 0, 0, 5, 242, 32,
16, 0, 1, 0, 0, 0,
70, 30, 16, 0, 2, 0,
0, 0, 54, 0, 0, 8,
194, 32, 16, 0, 2, 0,
0, 0, 2, 64, 0, 0,
0, 0, 128, 191, 0, 0,
128, 63, 0, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 5, 242, 32, 16, 0,
1, 0, 0, 0, 70, 30,
16, 0, 2, 0, 0, 0,
54, 0, 0, 8, 194, 32,
16, 0, 2, 0, 0, 0,
2, 64, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
128, 63, 54, 0, 0, 5,
50, 32, 16, 0, 0, 0,
0, 0, 70, 16, 16, 0,
1, 0, 0, 0, 62, 0,
0, 1, 83, 84, 65, 84,
148, 0, 0, 0, 6, 0,
0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 6, 0,
0, 0, 2, 0, 0, 0,
0, 0, 128, 63, 54, 0,
0, 5, 50, 32, 16, 0,
0, 0, 0, 0, 70, 16,
16, 0, 1, 0, 0, 0,
62, 0, 0, 1, 83, 84,
65, 84, 148, 0, 0, 0,
6, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0,
6, 0, 0, 0, 2, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
@@ -220,7 +221,7 @@ const BYTE immediate_vs[] =
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0,
0, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
@@ -232,5 +233,5 @@ const BYTE immediate_vs[] =
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0
0, 0, 0, 0
};

View File

@@ -0,0 +1,607 @@
// generated from `xb genspirv`
// source: guest_output_bilinear_dither.frag
const uint8_t guest_output_bilinear_dither_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x7B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x29, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x29, 0x01, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
0x72, 0x61, 0x67, 0x43, 0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x07, 0x00, 0x30, 0x01, 0x00, 0x00, 0x58, 0x65, 0x42, 0x69,
0x6C, 0x69, 0x6E, 0x65, 0x61, 0x72, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61,
0x6E, 0x74, 0x73, 0x00, 0x06, 0x00, 0x0A, 0x00, 0x30, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x62, 0x69, 0x6C, 0x69, 0x6E,
0x65, 0x61, 0x72, 0x5F, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F,
0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0A, 0x00,
0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x62,
0x69, 0x6C, 0x69, 0x6E, 0x65, 0x61, 0x72, 0x5F, 0x6F, 0x75, 0x74, 0x70,
0x75, 0x74, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x69, 0x6E, 0x76, 0x00,
0x05, 0x00, 0x03, 0x00, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x66,
0x72, 0x61, 0x67, 0x5F, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x3E, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x29, 0x01, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x30, 0x01, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x3A, 0x01, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x3E, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x3E, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x1C, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x84, 0x83, 0x83, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
0xE7, 0xE6, 0x66, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0xDE, 0xDD, 0xDD, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xCC, 0xCB, 0xCB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0xA8, 0xA7, 0xA7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x19, 0x00, 0x00, 0x00, 0x9F, 0x9E, 0x1E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x8C, 0x8B, 0x8B, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
0xB6, 0xB5, 0xB5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x1C, 0x00, 0x00, 0x00, 0xB2, 0xB1, 0xB1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x87, 0x86, 0x06, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
0xA0, 0x9F, 0x9F, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x1F, 0x00, 0x00, 0x00, 0xD2, 0xD1, 0xD1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x9B, 0x9A, 0x1A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x95, 0x94, 0x94, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x92, 0x91, 0x91, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0xBA, 0xB9, 0xB9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
0xBE, 0xBD, 0xBD, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x0E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x89, 0x88, 0x08, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
0x9E, 0x9D, 0x9D, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xE5, 0xE4, 0xE4, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x8A, 0x89, 0x89, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xA3, 0xA2, 0x22, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0xFC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x90, 0x8F, 0x8F, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2E, 0x00, 0x00, 0x00, 0xD1, 0xD0, 0xD0, 0xB8, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x8B, 0x8A, 0x0A, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
0xBC, 0xBB, 0xBB, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x31, 0x00, 0x00, 0x00, 0xFE, 0xFD, 0xFD, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0xB7, 0xB6, 0x36, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
0xA1, 0xA0, 0x20, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0xBB, 0xBA, 0x3A, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0xAC, 0xAB, 0xAB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
0x90, 0x8F, 0x8F, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x37, 0x00, 0x00, 0x00, 0x9D, 0x9C, 0x9C, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xE6, 0xE5, 0xE5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
0xDC, 0xDB, 0xDB, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x3A, 0x00, 0x00, 0x00, 0xC2, 0xC1, 0xC1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0xA1, 0xA0, 0x20, 0xB8,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,
0xCF, 0xCE, 0x4E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x00, 0x00, 0xF0, 0xEF, 0xEF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x9D, 0x9C, 0x9C, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x82, 0x81, 0x81, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x9A, 0x99, 0x99, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0xB9, 0xB8, 0x38, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
0xD8, 0xD7, 0xD7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x43, 0x00, 0x00, 0x00, 0xD0, 0xCF, 0xCF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0xB5, 0xB4, 0xB4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0xF4, 0xF3, 0xF3, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x46, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xE7, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xE3, 0xE2, 0x62, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0xEB, 0xEA, 0x6A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x49, 0x00, 0x00, 0x00, 0xA9, 0xA8, 0x28, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0xF3, 0xF2, 0x72, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00,
0xC8, 0xC7, 0xC7, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4C, 0x00, 0x00, 0x00, 0xAB, 0xAA, 0x2A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0xAA, 0xA9, 0xA9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
0xD3, 0xD2, 0x52, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4F, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0xBF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xEC, 0xEB, 0xEB, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
0xDF, 0xDE, 0x5E, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x52, 0x00, 0x00, 0x00, 0xDF, 0xDE, 0x5E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0xED, 0xEC, 0xEC, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x8C, 0x8B, 0x8B, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x55, 0x00, 0x00, 0x00, 0x99, 0x98, 0x18, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0xF9, 0xF8, 0x78, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
0xBA, 0xB9, 0xB9, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x9B, 0x9A, 0x1A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0xC9, 0xC8, 0x48, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00,
0xD2, 0xD1, 0xD1, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x5B, 0x00, 0x00, 0x00, 0x86, 0x85, 0x85, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0xD5, 0xD4, 0xD4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00,
0xD9, 0xD8, 0x58, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x5E, 0x00, 0x00, 0x00, 0xD0, 0xCF, 0xCF, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0xAB, 0xAA, 0x2A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0x91, 0x90, 0x90, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x61, 0x00, 0x00, 0x00, 0xDD, 0xDC, 0xDC, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0xD8, 0xD7, 0xD7, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
0xB4, 0xB3, 0xB3, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0xF3, 0xF2, 0x72, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0xAF, 0xAE, 0x2E, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
0x9C, 0x9B, 0x9B, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x67, 0x00, 0x00, 0x00, 0xBE, 0xBD, 0xBD, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x97, 0x96, 0x16, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
0xF8, 0xF7, 0xF7, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x6A, 0x00, 0x00, 0x00, 0xC7, 0xC6, 0x46, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0xAA, 0xA9, 0xA9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00,
0xFC, 0xFB, 0xFB, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x6D, 0x00, 0x00, 0x00, 0xDA, 0xD9, 0xD9, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x88, 0x87, 0x87, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00,
0x83, 0x82, 0x02, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x70, 0x00, 0x00, 0x00, 0xF4, 0xF3, 0xF3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x9E, 0x9D, 0x9D, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0xAD, 0xAC, 0xAC, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x73, 0x00, 0x00, 0x00, 0xB4, 0xB3, 0xB3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0xD6, 0xD5, 0xD5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
0xF2, 0xF1, 0xF1, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x76, 0x00, 0x00, 0x00, 0xBF, 0xBE, 0x3E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0xEF, 0xEE, 0x6E, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0xEE, 0xED, 0xED, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x79, 0x00, 0x00, 0x00, 0x96, 0x95, 0x95, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0xC5, 0xC4, 0xC4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00,
0xD1, 0xD0, 0xD0, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x00, 0xC3, 0xC2, 0x42, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x9A, 0x99, 0x99, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
0x91, 0x90, 0x90, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x00, 0xC4, 0xC3, 0xC3, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x7E, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
0xFB, 0xFA, 0x7A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x82, 0x00, 0x00, 0x00, 0xFE, 0xFD, 0xFD, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x8B, 0x8A, 0x0A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
0xE1, 0xE0, 0x60, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x85, 0x00, 0x00, 0x00, 0xA4, 0xA3, 0xA3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x8D, 0x8C, 0x8C, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00,
0xCA, 0xC9, 0xC9, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0x81, 0x80, 0x00, 0xB7, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0xA5, 0xA4, 0xA4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00,
0xB0, 0xAF, 0xAF, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8B, 0x00, 0x00, 0x00, 0xE6, 0xE5, 0xE5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x83, 0x82, 0x02, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00,
0x9C, 0x9B, 0x9B, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8E, 0x00, 0x00, 0x00, 0xCB, 0xCA, 0x4A, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xB0, 0xAF, 0xAF, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0x8D, 0x8C, 0x8C, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x91, 0x00, 0x00, 0x00, 0xC2, 0xC1, 0xC1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x89, 0x88, 0x08, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00,
0xCB, 0xCA, 0x4A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x94, 0x00, 0x00, 0x00, 0xAC, 0xAB, 0xAB, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xCC, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
0xFB, 0xFA, 0x7A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x97, 0x00, 0x00, 0x00, 0xF5, 0xF4, 0xF4, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0xCA, 0xC9, 0xC9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00,
0x88, 0x87, 0x87, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x9A, 0x00, 0x00, 0x00, 0xB3, 0xB2, 0x32, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xDC, 0xDB, 0xDB, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00,
0x84, 0x83, 0x83, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x9D, 0x00, 0x00, 0x00, 0xDD, 0xDC, 0xDC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0xEA, 0xE9, 0xE9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00,
0xF9, 0xF8, 0x78, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA0, 0x00, 0x00, 0x00, 0xA3, 0xA2, 0x22, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0xDA, 0xD9, 0xD9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00,
0xDB, 0xDA, 0x5A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA3, 0x00, 0x00, 0x00, 0xE2, 0xE1, 0xE1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x8E, 0x8D, 0x8D, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00,
0xE8, 0xE7, 0xE7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA6, 0x00, 0x00, 0x00, 0xCF, 0xCE, 0x4E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0xEA, 0xE9, 0xE9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00,
0xB3, 0xB2, 0x32, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA9, 0x00, 0x00, 0x00, 0x82, 0x81, 0x81, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xAE, 0xAD, 0xAD, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00,
0xB9, 0xB8, 0x38, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xAC, 0x00, 0x00, 0x00, 0xC6, 0xC5, 0xC5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00, 0x00, 0xAD, 0xAC, 0xAC, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xBB, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xAF, 0x00, 0x00, 0x00, 0xAF, 0xAE, 0x2E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xD4, 0xD3, 0xD3, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00,
0x98, 0x97, 0x97, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB2, 0x00, 0x00, 0x00, 0xED, 0xEC, 0xEC, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x00, 0x00, 0xE5, 0xE4, 0xE4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00,
0xC9, 0xC8, 0x48, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB5, 0x00, 0x00, 0x00, 0xC4, 0xC3, 0xC3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x96, 0x95, 0x95, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00,
0xB1, 0xB0, 0xB0, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB8, 0x00, 0x00, 0x00, 0xF8, 0xF7, 0xF7, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0xB8, 0xB7, 0xB7, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00,
0x93, 0x92, 0x12, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0xF1, 0xF0, 0xF0, 0x38, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0xA6, 0xA5, 0xA5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00,
0x97, 0x96, 0x16, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xBE, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x7E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xAE, 0xAD, 0xAD, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
0xE9, 0xE8, 0x68, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC1, 0x00, 0x00, 0x00, 0xC7, 0xC6, 0x46, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0xB2, 0xB1, 0xB1, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00,
0xC0, 0xBF, 0xBF, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC4, 0x00, 0x00, 0x00, 0xE3, 0xE2, 0x62, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0xBD, 0xBC, 0xBC, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00,
0x8F, 0x8E, 0x0E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC7, 0x00, 0x00, 0x00, 0x94, 0x93, 0x93, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x85, 0x84, 0x84, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC9, 0x00, 0x00, 0x00,
0x93, 0x92, 0x12, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xCA, 0x00, 0x00, 0x00, 0xEE, 0xED, 0xED, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0xE2, 0xE1, 0xE1, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
0x98, 0x97, 0x97, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xCD, 0x00, 0x00, 0x00, 0xC3, 0xC2, 0x42, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0xCE, 0xCD, 0xCD, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00,
0xF1, 0xF0, 0xF0, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD0, 0x00, 0x00, 0x00, 0xA0, 0x9F, 0x9F, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD1, 0x00, 0x00, 0x00, 0xF0, 0xEF, 0xEF, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00,
0xC1, 0xC0, 0xC0, 0x37, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD3, 0x00, 0x00, 0x00, 0xFC, 0xFB, 0xFB, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0xE4, 0xE3, 0xE3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00,
0xBB, 0xBA, 0x3A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD6, 0x00, 0x00, 0x00, 0xCC, 0xCB, 0xCB, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0xE0, 0xDF, 0xDF, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00,
0xA2, 0xA1, 0xA1, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD9, 0x00, 0x00, 0x00, 0xD9, 0xD8, 0x58, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 0x8A, 0x89, 0x89, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00,
0xBF, 0xBE, 0x3E, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xDC, 0x00, 0x00, 0x00, 0xD6, 0xD5, 0xD5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0xA5, 0xA4, 0xA4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00,
0xFD, 0xFC, 0xFC, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xDF, 0x00, 0x00, 0x00, 0xEC, 0xEB, 0xEB, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xF7, 0xF6, 0x76, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00,
0xB5, 0xB4, 0xB4, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE2, 0x00, 0x00, 0x00, 0xB7, 0xB6, 0x36, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0x86, 0x85, 0x85, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00,
0xCE, 0xCD, 0xCD, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE5, 0x00, 0x00, 0x00, 0xC1, 0xC0, 0xC0, 0xB7, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0xA8, 0xA7, 0xA7, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00,
0xD3, 0xD2, 0x52, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE8, 0x00, 0x00, 0x00, 0xEB, 0xEA, 0x6A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE9, 0x00, 0x00, 0x00, 0xBC, 0xBB, 0xBB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00,
0x9F, 0x9E, 0x1E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEB, 0x00, 0x00, 0x00, 0xB1, 0xB0, 0xB0, 0xB8, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0xEF, 0xEE, 0x6E, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3B, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEE, 0x00, 0x00, 0x00, 0xB8, 0xB7, 0xB7, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0xA7, 0xA6, 0x26, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00,
0xC6, 0xC5, 0xC5, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF1, 0x00, 0x00, 0x00, 0xD7, 0xD6, 0x56, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0xA4, 0xA3, 0xA3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00,
0x85, 0x84, 0x84, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF4, 0x00, 0x00, 0x00, 0xC8, 0xC7, 0xC7, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF5, 0x00, 0x00, 0x00, 0x94, 0x93, 0x93, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00,
0xBD, 0xBC, 0xBC, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF7, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xCC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xFA, 0xF9, 0xF9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00,
0xB6, 0xB5, 0xB5, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xFA, 0x00, 0x00, 0x00, 0x92, 0x91, 0x91, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0xD4, 0xD3, 0xD3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0xE7, 0xE6, 0x66, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xFD, 0x00, 0x00, 0x00, 0x99, 0x98, 0x18, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x8E, 0x8D, 0x8D, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0xE1, 0xE0, 0x60, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x95, 0x94, 0x94, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xDE, 0xDD, 0xDD, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
0xA6, 0xA5, 0xA5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0x87, 0x86, 0x06, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0xA9, 0xA8, 0x28, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
0xF6, 0xF5, 0xF5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x06, 0x01, 0x00, 0x00, 0xDB, 0xDA, 0x5A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0xA7, 0xA6, 0x26, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
0x81, 0x80, 0x00, 0x37, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x09, 0x01, 0x00, 0x00, 0xFA, 0xF9, 0xF9, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x00, 0xE9, 0xE8, 0x68, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x01, 0x00, 0x00,
0xC5, 0xC4, 0xC4, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0C, 0x01, 0x00, 0x00, 0xE4, 0xE3, 0xE3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0D, 0x01, 0x00, 0x00, 0xD5, 0xD4, 0xD4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x00, 0x00,
0xA2, 0xA1, 0xA1, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0F, 0x01, 0x00, 0x00, 0xE0, 0xDF, 0xDF, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0xF7, 0xF6, 0x76, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00,
0xD7, 0xD6, 0x56, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x12, 0x01, 0x00, 0x00, 0xF2, 0xF1, 0xF1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0xF5, 0xF4, 0xF4, 0x39,
0x2C, 0x00, 0x03, 0x01, 0x13, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x1A, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
0x1D, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x26, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x29, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
0x2F, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
0x44, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00,
0x4D, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
0x56, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x59, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00,
0x5C, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
0x62, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x68, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00,
0x6B, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00,
0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
0x77, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
0x7A, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
0x7D, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
0x86, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x89, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00,
0x8C, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00,
0x8F, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
0x92, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
0x98, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00,
0x9B, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00,
0x9E, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00,
0xA1, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00,
0xA4, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00,
0xA7, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00,
0xAA, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0xAC, 0x00, 0x00, 0x00,
0xAD, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0xAF, 0x00, 0x00, 0x00,
0xB0, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0xB2, 0x00, 0x00, 0x00,
0xB3, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00,
0xB6, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00,
0xB9, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0xBC, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00,
0xBF, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x00,
0xC2, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00,
0xC5, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00,
0xC8, 0x00, 0x00, 0x00, 0xC9, 0x00, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x00,
0xCB, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00,
0xCE, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00,
0xD1, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 0xD3, 0x00, 0x00, 0x00,
0xD4, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00,
0xD7, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0xD9, 0x00, 0x00, 0x00,
0xDA, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00,
0xDD, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00,
0xE0, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00,
0xE3, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00,
0xE6, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00,
0xE9, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00,
0xEC, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00,
0xEF, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00,
0xF2, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00,
0xF5, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00,
0xF8, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x00,
0xFB, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
0x04, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00,
0x07, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
0x0A, 0x01, 0x00, 0x00, 0x0B, 0x01, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00,
0x0D, 0x01, 0x00, 0x00, 0x0E, 0x01, 0x00, 0x00, 0x0F, 0x01, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00,
0x13, 0x01, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x15, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1F, 0x01, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x21, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x27, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x28, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x28, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x2D, 0x01, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x2E, 0x01, 0x00, 0x00, 0x2D, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x04, 0x00, 0x30, 0x01, 0x00, 0x00, 0x2E, 0x01, 0x00, 0x00,
0x2A, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x31, 0x01, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x31, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x2D, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x34, 0x01, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2E, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x39, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0x39, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x3B, 0x01, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x3C, 0x01, 0x00, 0x00,
0x3B, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3D, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x3D, 0x01, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0x2B, 0x00, 0x04, 0x00, 0x2D, 0x01, 0x00, 0x00,
0x45, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x46, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x4C, 0x01, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x4E, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x06, 0x00, 0x4C, 0x01, 0x00, 0x00,
0x5D, 0x01, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00,
0x4A, 0x01, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x5E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x2C, 0x00, 0x06, 0x00,
0x4C, 0x01, 0x00, 0x00, 0x5F, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00,
0x5E, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00,
0x42, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x07, 0x00, 0x00, 0x00, 0x7A, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x1F, 0x01, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x27, 0x01, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x00,
0x29, 0x01, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00, 0x2A, 0x01, 0x00, 0x00,
0x2C, 0x01, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x2E, 0x01, 0x00, 0x00, 0x2F, 0x01, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x34, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
0x32, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x2E, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x2E, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00,
0x2F, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x07, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x3C, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00,
0x3E, 0x01, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x2A, 0x01, 0x00, 0x00,
0x41, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x2A, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00,
0x79, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x46, 0x01, 0x00, 0x00,
0x47, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x2A, 0x01, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00,
0x47, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x2A, 0x01, 0x00, 0x00,
0x49, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00,
0x58, 0x00, 0x07, 0x00, 0x27, 0x01, 0x00, 0x00, 0x4B, 0x01, 0x00, 0x00,
0x3F, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4A, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x4E, 0x01, 0x00, 0x00,
0x4F, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
0x4B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x4F, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x4E, 0x01, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00,
0x15, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x52, 0x01, 0x00, 0x00, 0x4B, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0x51, 0x01, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x4E, 0x01, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00,
0x3A, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x4B, 0x01, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x54, 0x01, 0x00, 0x00,
0x55, 0x01, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x27, 0x01, 0x00, 0x00,
0x56, 0x01, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0x4F, 0x00, 0x08, 0x00,
0x4C, 0x01, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00,
0x56, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x7A, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x84, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00,
0x19, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x73, 0x01, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00,
0x71, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x69, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x21, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00,
0x74, 0x01, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x76, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
0x4C, 0x01, 0x00, 0x00, 0x5B, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00,
0x76, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x4C, 0x01, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00,
0x5B, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x4C, 0x01, 0x00, 0x00,
0x60, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0x5C, 0x01, 0x00, 0x00, 0x5D, 0x01, 0x00, 0x00, 0x5F, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x4F, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x51, 0x01, 0x00, 0x00,
0x64, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x66, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0x54, 0x01, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x4E, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00,
0x3A, 0x01, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x68, 0x01, 0x00, 0x00, 0x5E, 0x01, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00,
0x38, 0x00, 0x01, 0x00,
};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,132 @@
// generated from `xb genspirv`
// source: guest_output_bilinear.frag
const uint8_t guest_output_bilinear_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46,
0x72, 0x61, 0x67, 0x43, 0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x58, 0x65, 0x42, 0x69,
0x6C, 0x69, 0x6E, 0x65, 0x61, 0x72, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61,
0x6E, 0x74, 0x73, 0x00, 0x06, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x62, 0x69, 0x6C, 0x69, 0x6E,
0x65, 0x61, 0x72, 0x5F, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F,
0x66, 0x66, 0x73, 0x65, 0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0A, 0x00,
0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x62,
0x69, 0x6C, 0x69, 0x6E, 0x65, 0x61, 0x72, 0x5F, 0x6F, 0x75, 0x74, 0x70,
0x75, 0x74, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x69, 0x6E, 0x76, 0x00,
0x05, 0x00, 0x03, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x66,
0x72, 0x61, 0x67, 0x5F, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00,
0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00,
0x14, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x14, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x11, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x12, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1D, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x1D, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x19, 0x00, 0x09, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
0x2B, 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x26, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x12, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
0x13, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x07, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x3F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x2D, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00,
0x58, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2E, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00,
0x34, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x33, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
0x36, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x38, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0x37, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x3A, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
};

View File

@@ -0,0 +1,90 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 64
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %xe_frag_color
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 420
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
OpSourceExtension "GL_GOOGLE_include_directive"
OpName %main "main"
OpName %gl_FragCoord "gl_FragCoord"
OpName %XeBilinearConstants "XeBilinearConstants"
OpMemberName %XeBilinearConstants 0 "xe_bilinear_output_offset"
OpMemberName %XeBilinearConstants 1 "xe_bilinear_output_size_inv"
OpName %_ ""
OpName %xe_frag_color "xe_frag_color"
OpName %xe_texture "xe_texture"
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %XeBilinearConstants 0 Offset 16
OpMemberDecorate %XeBilinearConstants 1 Offset 24
OpDecorate %XeBilinearConstants Block
OpDecorate %xe_frag_color Location 0
OpDecorate %xe_texture DescriptorSet 0
OpDecorate %xe_texture Binding 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%v2float = OpTypeVector %float 2
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%XeBilinearConstants = OpTypeStruct %v2int %v2float
%_ptr_PushConstant_XeBilinearConstants = OpTypePointer PushConstant %XeBilinearConstants
%_ = OpVariable %_ptr_PushConstant_XeBilinearConstants PushConstant
%int_0 = OpConstant %int 0
%_ptr_PushConstant_v2int = OpTypePointer PushConstant %v2int
%_ptr_Output_v4float = OpTypePointer Output %v4float
%xe_frag_color = OpVariable %_ptr_Output_v4float Output
%31 = OpTypeImage %float 2D 0 0 0 1 Unknown
%32 = OpTypeSampledImage %31
%_ptr_UniformConstant_32 = OpTypePointer UniformConstant %32
%xe_texture = OpVariable %_ptr_UniformConstant_32 UniformConstant
%float_0_5 = OpConstant %float 0.5
%int_1 = OpConstant %int 1
%_ptr_PushConstant_v2float = OpTypePointer PushConstant %v2float
%float_0 = OpConstant %float 0
%uint_0 = OpConstant %uint 0
%_ptr_Output_float = OpTypePointer Output %float
%uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
%float_1 = OpConstant %float 1
%uint_3 = OpConstant %uint 3
%63 = OpConstantComposite %v2float %float_0_5 %float_0_5
%main = OpFunction %void None %3
%5 = OpLabel
%15 = OpLoad %v4float %gl_FragCoord
%16 = OpVectorShuffle %v2float %15 %15 0 1
%19 = OpConvertFToS %v2int %16
%25 = OpAccessChain %_ptr_PushConstant_v2int %_ %int_0
%26 = OpLoad %v2int %25
%27 = OpISub %v2int %19 %26
%28 = OpBitcast %v2uint %27
%35 = OpLoad %32 %xe_texture
%37 = OpConvertUToF %v2float %28
%40 = OpFAdd %v2float %37 %63
%43 = OpAccessChain %_ptr_PushConstant_v2float %_ %int_1
%44 = OpLoad %v2float %43
%45 = OpFMul %v2float %40 %44
%47 = OpImageSampleExplicitLod %v4float %35 %45 Lod %float_0
%52 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_0
%53 = OpCompositeExtract %float %47 0
OpStore %52 %53
%55 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_1
%56 = OpCompositeExtract %float %47 1
OpStore %55 %56
%58 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_2
%59 = OpCompositeExtract %float %47 2
OpStore %58 %59
%62 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_3
OpStore %62 %float_1
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,748 @@
// generated from `xb genspirv`
// source: guest_output_ffx_cas_resample.frag
const uint8_t guest_output_ffx_cas_resample_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x44, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x9C, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x92, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x9C, 0x08, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x58, 0x65, 0x43, 0x61, 0x73, 0x52, 0x65, 0x73,
0x61, 0x6D, 0x70, 0x6C, 0x65, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E,
0x74, 0x73, 0x00, 0x00, 0x06, 0x00, 0x09, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x63, 0x61, 0x73, 0x5F, 0x6F,
0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0B, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x63, 0x61, 0x73, 0x5F, 0x69,
0x6E, 0x70, 0x75, 0x74, 0x5F, 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5F,
0x73, 0x69, 0x7A, 0x65, 0x5F, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x00, 0x00,
0x06, 0x00, 0x0A, 0x00, 0xA0, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x63, 0x61, 0x73, 0x5F, 0x73, 0x68, 0x61, 0x72, 0x70,
0x6E, 0x65, 0x73, 0x73, 0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x73, 0x65,
0x74, 0x75, 0x70, 0x00, 0x05, 0x00, 0x03, 0x00, 0xA2, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xC9, 0x08, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x66, 0x72, 0x61, 0x67, 0x5F, 0x63, 0x6F, 0x6C, 0x6F,
0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x92, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x92, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x9C, 0x08, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0xA0, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xC9, 0x08, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x37, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00,
0x39, 0x46, 0xBC, 0x1F, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0xBB, 0x7E, 0xF0, 0x7E, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xFF, 0x9F, 0xF1, 0x7E,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0x19, 0x00, 0x09, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x00,
0x8F, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x91, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x91, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xCC, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00,
0xAE, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xDE, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xEA, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x86, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xC8, 0x02, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xDE, 0x02, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xE9, 0x02, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xEF, 0x02, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3D, 0x20, 0x00, 0x04, 0x00, 0x9B, 0x08, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0x9B, 0x08, 0x00, 0x00, 0x9C, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x05, 0x00, 0xA0, 0x08, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x86, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xA1, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0xA1, 0x08, 0x00, 0x00, 0xA2, 0x08, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xA3, 0x08, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xA9, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x86, 0x02, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAD, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3F, 0x20, 0x00, 0x04, 0x00, 0xBA, 0x08, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xC8, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0xC8, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xD7, 0x08, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xE6, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00, 0x3D, 0x19, 0x00, 0x00,
0xAD, 0x08, 0x00, 0x00, 0xAD, 0x08, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00,
0x9C, 0x08, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00, 0x86, 0x02, 0x00, 0x00,
0x9E, 0x08, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x9F, 0x08, 0x00, 0x00, 0x9E, 0x08, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xA3, 0x08, 0x00, 0x00, 0xA4, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xA5, 0x08, 0x00, 0x00, 0xA4, 0x08, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xA6, 0x08, 0x00, 0x00,
0x9F, 0x08, 0x00, 0x00, 0xA5, 0x08, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x37, 0x00, 0x00, 0x00, 0xA7, 0x08, 0x00, 0x00, 0xA6, 0x08, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xA9, 0x08, 0x00, 0x00, 0xAA, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x86, 0x02, 0x00, 0x00, 0xAB, 0x08, 0x00, 0x00, 0xAA, 0x08, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0xAC, 0x08, 0x00, 0x00,
0xAB, 0x08, 0x00, 0x00, 0x8E, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00,
0xB0, 0x08, 0x00, 0x00, 0xAB, 0x08, 0x00, 0x00, 0xAD, 0x08, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00, 0xB2, 0x08, 0x00, 0x00,
0xB0, 0x08, 0x00, 0x00, 0x3D, 0x19, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x37, 0x00, 0x00, 0x00, 0xB3, 0x08, 0x00, 0x00, 0xB2, 0x08, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xBA, 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xBC, 0x08, 0x00, 0x00, 0xBB, 0x08, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xBD, 0x08, 0x00, 0x00,
0xBC, 0x08, 0x00, 0x00, 0xF9, 0x00, 0x02, 0x00, 0xE1, 0x0A, 0x00, 0x00,
0xF8, 0x00, 0x02, 0x00, 0xE1, 0x0A, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00,
0x86, 0x02, 0x00, 0x00, 0x40, 0x0C, 0x00, 0x00, 0xA7, 0x08, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x86, 0x02, 0x00, 0x00, 0x46, 0x0C, 0x00, 0x00,
0xAC, 0x08, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00,
0x47, 0x0C, 0x00, 0x00, 0x40, 0x0C, 0x00, 0x00, 0x46, 0x0C, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x86, 0x02, 0x00, 0x00, 0x4D, 0x0C, 0x00, 0x00,
0xB3, 0x08, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00,
0x4E, 0x0C, 0x00, 0x00, 0x47, 0x0C, 0x00, 0x00, 0x4D, 0x0C, 0x00, 0x00,
0x0C, 0x00, 0x06, 0x00, 0x86, 0x02, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4E, 0x0C, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00, 0x53, 0x0C, 0x00, 0x00,
0x4E, 0x0C, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00, 0x50, 0x0C, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x5A, 0x0C, 0x00, 0x00,
0x55, 0x0C, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x90, 0x00, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0x93, 0x12, 0x00, 0x00, 0x92, 0x12, 0x00, 0x00, 0x5A, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x5D, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00,
0xC2, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x99, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0x99, 0x12, 0x00, 0x00,
0x5D, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xA0, 0x12, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xA1, 0x12, 0x00, 0x00, 0xA0, 0x12, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x62, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00,
0xBC, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0xA7, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0xA8, 0x12, 0x00, 0x00, 0xA7, 0x12, 0x00, 0x00,
0x62, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x68, 0x0C, 0x00, 0x00,
0x55, 0x0C, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xB5, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xB6, 0x12, 0x00, 0x00,
0xB5, 0x12, 0x00, 0x00, 0x68, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x6B, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xBC, 0x12, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xBD, 0x12, 0x00, 0x00, 0xBC, 0x12, 0x00, 0x00, 0x6B, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x6E, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00,
0xD2, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0xC3, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0xC4, 0x12, 0x00, 0x00, 0xC3, 0x12, 0x00, 0x00,
0x6E, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x71, 0x0C, 0x00, 0x00,
0x55, 0x0C, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xCA, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xCB, 0x12, 0x00, 0x00,
0xCA, 0x12, 0x00, 0x00, 0x71, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x77, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00, 0xDE, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xD8, 0x12, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xD9, 0x12, 0x00, 0x00, 0xD8, 0x12, 0x00, 0x00, 0x77, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x7A, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00,
0xDE, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0xDF, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0xE0, 0x12, 0x00, 0x00, 0xDF, 0x12, 0x00, 0x00,
0x7A, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x7D, 0x0C, 0x00, 0x00,
0x55, 0x0C, 0x00, 0x00, 0xE9, 0x02, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xE6, 0x12, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xE7, 0x12, 0x00, 0x00,
0xE6, 0x12, 0x00, 0x00, 0x7D, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x80, 0x0C, 0x00, 0x00, 0x55, 0x0C, 0x00, 0x00, 0xEF, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xED, 0x12, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xEE, 0x12, 0x00, 0x00, 0xED, 0x12, 0x00, 0x00, 0x80, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x93, 0x0C, 0x00, 0x00, 0x93, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x95, 0x0C, 0x00, 0x00, 0x93, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x97, 0x0C, 0x00, 0x00,
0x93, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x04, 0x13, 0x00, 0x00, 0x93, 0x0C, 0x00, 0x00,
0x93, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x07, 0x13, 0x00, 0x00, 0x95, 0x0C, 0x00, 0x00, 0x95, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0A, 0x13, 0x00, 0x00,
0x97, 0x0C, 0x00, 0x00, 0x97, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA0, 0x0C, 0x00, 0x00, 0xA8, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA2, 0x0C, 0x00, 0x00, 0xA8, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA4, 0x0C, 0x00, 0x00,
0xA8, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0E, 0x13, 0x00, 0x00, 0xA0, 0x0C, 0x00, 0x00,
0xA0, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x11, 0x13, 0x00, 0x00, 0xA2, 0x0C, 0x00, 0x00, 0xA2, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x13, 0x00, 0x00,
0xA4, 0x0C, 0x00, 0x00, 0xA4, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xBA, 0x0C, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xBC, 0x0C, 0x00, 0x00, 0x9A, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xBE, 0x0C, 0x00, 0x00,
0x9A, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x22, 0x13, 0x00, 0x00, 0xBA, 0x0C, 0x00, 0x00,
0xBA, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x25, 0x13, 0x00, 0x00, 0xBC, 0x0C, 0x00, 0x00, 0xBC, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00,
0xBE, 0x0C, 0x00, 0x00, 0xBE, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xC7, 0x0C, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC9, 0x0C, 0x00, 0x00, 0xA1, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xCB, 0x0C, 0x00, 0x00,
0xA1, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2C, 0x13, 0x00, 0x00, 0xC7, 0x0C, 0x00, 0x00,
0xC7, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2F, 0x13, 0x00, 0x00, 0xC9, 0x0C, 0x00, 0x00, 0xC9, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x13, 0x00, 0x00,
0xCB, 0x0C, 0x00, 0x00, 0xCB, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD4, 0x0C, 0x00, 0x00, 0xB6, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD6, 0x0C, 0x00, 0x00, 0xB6, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD8, 0x0C, 0x00, 0x00,
0xB6, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x36, 0x13, 0x00, 0x00, 0xD4, 0x0C, 0x00, 0x00,
0xD4, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x39, 0x13, 0x00, 0x00, 0xD6, 0x0C, 0x00, 0x00, 0xD6, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3C, 0x13, 0x00, 0x00,
0xD8, 0x0C, 0x00, 0x00, 0xD8, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xE1, 0x0C, 0x00, 0x00, 0xBD, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xE3, 0x0C, 0x00, 0x00, 0xBD, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xE5, 0x0C, 0x00, 0x00,
0xBD, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x40, 0x13, 0x00, 0x00, 0xE1, 0x0C, 0x00, 0x00,
0xE1, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x43, 0x13, 0x00, 0x00, 0xE3, 0x0C, 0x00, 0x00, 0xE3, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00,
0xE5, 0x0C, 0x00, 0x00, 0xE5, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xEE, 0x0C, 0x00, 0x00, 0xC4, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF0, 0x0C, 0x00, 0x00, 0xC4, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF2, 0x0C, 0x00, 0x00,
0xC4, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4A, 0x13, 0x00, 0x00, 0xEE, 0x0C, 0x00, 0x00,
0xEE, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4D, 0x13, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00,
0xF2, 0x0C, 0x00, 0x00, 0xF2, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xFB, 0x0C, 0x00, 0x00, 0xCB, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFD, 0x0C, 0x00, 0x00, 0xCB, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFF, 0x0C, 0x00, 0x00,
0xCB, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x54, 0x13, 0x00, 0x00, 0xFB, 0x0C, 0x00, 0x00,
0xFB, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x57, 0x13, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00, 0xFD, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5A, 0x13, 0x00, 0x00,
0xFF, 0x0C, 0x00, 0x00, 0xFF, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x00, 0x00, 0xE0, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0A, 0x0D, 0x00, 0x00, 0xE0, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0C, 0x0D, 0x00, 0x00,
0xE0, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5E, 0x13, 0x00, 0x00, 0x08, 0x0D, 0x00, 0x00,
0x08, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x61, 0x13, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00,
0x0C, 0x0D, 0x00, 0x00, 0x0C, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x15, 0x0D, 0x00, 0x00, 0xE7, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x17, 0x0D, 0x00, 0x00, 0xE7, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x19, 0x0D, 0x00, 0x00,
0xE7, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x68, 0x13, 0x00, 0x00, 0x15, 0x0D, 0x00, 0x00,
0x15, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x6B, 0x13, 0x00, 0x00, 0x17, 0x0D, 0x00, 0x00, 0x17, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6E, 0x13, 0x00, 0x00,
0x19, 0x0D, 0x00, 0x00, 0x19, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2F, 0x0D, 0x00, 0x00, 0xD9, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x31, 0x0D, 0x00, 0x00, 0xD9, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x0D, 0x00, 0x00,
0xD9, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00, 0x2F, 0x0D, 0x00, 0x00,
0x2F, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x7F, 0x13, 0x00, 0x00, 0x31, 0x0D, 0x00, 0x00, 0x31, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x82, 0x13, 0x00, 0x00,
0x33, 0x0D, 0x00, 0x00, 0x33, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x3C, 0x0D, 0x00, 0x00, 0xEE, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3E, 0x0D, 0x00, 0x00, 0xEE, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x0D, 0x00, 0x00,
0xEE, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x86, 0x13, 0x00, 0x00, 0x3C, 0x0D, 0x00, 0x00,
0x3C, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x89, 0x13, 0x00, 0x00, 0x3E, 0x0D, 0x00, 0x00, 0x3E, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x13, 0x00, 0x00,
0x40, 0x0D, 0x00, 0x00, 0x40, 0x0D, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xAA, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x25, 0x13, 0x00, 0x00, 0x2F, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAB, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x07, 0x13, 0x00, 0x00,
0xAA, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB1, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x39, 0x13, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB2, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xAB, 0x13, 0x00, 0x00, 0xB1, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD4, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x25, 0x13, 0x00, 0x00,
0x2F, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD5, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x07, 0x13, 0x00, 0x00, 0xD4, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xDB, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xDC, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xD5, 0x13, 0x00, 0x00,
0xDB, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFE, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x2F, 0x13, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xFF, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x11, 0x13, 0x00, 0x00, 0xFE, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x43, 0x13, 0x00, 0x00,
0x61, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x06, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xFF, 0x13, 0x00, 0x00, 0x05, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x28, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2F, 0x13, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x29, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11, 0x13, 0x00, 0x00,
0x28, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2F, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x43, 0x13, 0x00, 0x00, 0x61, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x29, 0x14, 0x00, 0x00, 0x2F, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x52, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x4D, 0x13, 0x00, 0x00,
0x57, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x53, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x2F, 0x13, 0x00, 0x00, 0x52, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x59, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x61, 0x13, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5A, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x53, 0x14, 0x00, 0x00,
0x59, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x7C, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x4D, 0x13, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x7D, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x2F, 0x13, 0x00, 0x00, 0x7C, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x61, 0x13, 0x00, 0x00,
0x7F, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x84, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x7D, 0x14, 0x00, 0x00, 0x83, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00, 0x61, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA7, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00,
0xA6, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xAD, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x6B, 0x13, 0x00, 0x00, 0x89, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xAE, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xA7, 0x14, 0x00, 0x00, 0xAD, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00,
0x61, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD1, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x39, 0x13, 0x00, 0x00, 0xD0, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD7, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x6B, 0x13, 0x00, 0x00, 0x89, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD8, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xD1, 0x14, 0x00, 0x00,
0xD7, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xF7, 0x14, 0x00, 0x00, 0xDC, 0x13, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xF8, 0x14, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0xF7, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF9, 0x14, 0x00, 0x00, 0xF8, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x18, 0x15, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x19, 0x15, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x18, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1A, 0x15, 0x00, 0x00, 0x19, 0x15, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x39, 0x15, 0x00, 0x00,
0x84, 0x14, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x3A, 0x15, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x39, 0x15, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x15, 0x00, 0x00,
0x3A, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x5A, 0x15, 0x00, 0x00, 0xD8, 0x14, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x5B, 0x15, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x5A, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x5C, 0x15, 0x00, 0x00, 0x5B, 0x15, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x98, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xDC, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x99, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xB2, 0x13, 0x00, 0x00, 0x98, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x9B, 0x0E, 0x00, 0x00, 0x99, 0x0E, 0x00, 0x00,
0xF9, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
0x86, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0x9B, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB0, 0x0E, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB1, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x06, 0x14, 0x00, 0x00, 0xB0, 0x0E, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB3, 0x0E, 0x00, 0x00,
0xB1, 0x0E, 0x00, 0x00, 0x1A, 0x15, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB9, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0xB3, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC8, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x84, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC9, 0x0E, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x5A, 0x14, 0x00, 0x00,
0xC8, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xCB, 0x0E, 0x00, 0x00, 0xC9, 0x0E, 0x00, 0x00, 0x3B, 0x15, 0x00, 0x00,
0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0xEC, 0x15, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xCB, 0x0E, 0x00, 0x00,
0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xD8, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xE1, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xAE, 0x14, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xE3, 0x0E, 0x00, 0x00, 0xE1, 0x0E, 0x00, 0x00,
0x5C, 0x15, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1F, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0xE3, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x4D, 0x16, 0x00, 0x00,
0x86, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x4F, 0x16, 0x00, 0x00, 0x4D, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x51, 0x16, 0x00, 0x00,
0x4F, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x52, 0x16, 0x00, 0x00, 0x51, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x80, 0x16, 0x00, 0x00,
0xB9, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x82, 0x16, 0x00, 0x00, 0x80, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x84, 0x16, 0x00, 0x00,
0x82, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x85, 0x16, 0x00, 0x00, 0x84, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xB3, 0x16, 0x00, 0x00,
0xEC, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xB5, 0x16, 0x00, 0x00, 0xB3, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xB7, 0x16, 0x00, 0x00,
0xB5, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB8, 0x16, 0x00, 0x00, 0xB7, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xE6, 0x16, 0x00, 0x00,
0x1F, 0x16, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xE8, 0x16, 0x00, 0x00, 0xE6, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00,
0xE8, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xEB, 0x16, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00,
0xBD, 0x08, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0D, 0x0F, 0x00, 0x00, 0x52, 0x16, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x0F, 0x00, 0x00,
0x85, 0x16, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1F, 0x0F, 0x00, 0x00, 0xB8, 0x16, 0x00, 0x00,
0x07, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x28, 0x0F, 0x00, 0x00, 0xEB, 0x16, 0x00, 0x00, 0x07, 0x0F, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2E, 0x0F, 0x00, 0x00,
0x53, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2F, 0x0F, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x2E, 0x0F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x32, 0x0F, 0x00, 0x00, 0x53, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x0F, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x32, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x34, 0x0F, 0x00, 0x00, 0x2F, 0x0F, 0x00, 0x00,
0x33, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3B, 0x0F, 0x00, 0x00, 0x2E, 0x0F, 0x00, 0x00, 0x33, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x42, 0x0F, 0x00, 0x00,
0x2F, 0x0F, 0x00, 0x00, 0x32, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x47, 0x0F, 0x00, 0x00, 0x2E, 0x0F, 0x00, 0x00,
0x32, 0x0F, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4B, 0x0F, 0x00, 0x00, 0xDC, 0x13, 0x00, 0x00, 0xB2, 0x13, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4C, 0x0F, 0x00, 0x00,
0xF2, 0x06, 0x00, 0x00, 0x4B, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x14, 0x17, 0x00, 0x00, 0x4C, 0x0F, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x14, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x16, 0x17, 0x00, 0x00, 0x15, 0x17, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4F, 0x0F, 0x00, 0x00,
0x34, 0x0F, 0x00, 0x00, 0x16, 0x17, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x53, 0x0F, 0x00, 0x00, 0x30, 0x14, 0x00, 0x00,
0x06, 0x14, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x54, 0x0F, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00, 0x53, 0x0F, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1F, 0x17, 0x00, 0x00,
0x54, 0x0F, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x20, 0x17, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x1F, 0x17, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x17, 0x00, 0x00,
0x20, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x57, 0x0F, 0x00, 0x00, 0x3B, 0x0F, 0x00, 0x00, 0x21, 0x17, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5B, 0x0F, 0x00, 0x00,
0x84, 0x14, 0x00, 0x00, 0x5A, 0x14, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5C, 0x0F, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00,
0x5B, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x2A, 0x17, 0x00, 0x00, 0x5C, 0x0F, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x2B, 0x17, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x2A, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2C, 0x17, 0x00, 0x00, 0x2B, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5F, 0x0F, 0x00, 0x00, 0x42, 0x0F, 0x00, 0x00,
0x2C, 0x17, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x63, 0x0F, 0x00, 0x00, 0xD8, 0x14, 0x00, 0x00, 0xAE, 0x14, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x64, 0x0F, 0x00, 0x00,
0xF2, 0x06, 0x00, 0x00, 0x63, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x35, 0x17, 0x00, 0x00, 0x64, 0x0F, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x35, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x37, 0x17, 0x00, 0x00, 0x36, 0x17, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x67, 0x0F, 0x00, 0x00,
0x47, 0x0F, 0x00, 0x00, 0x37, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6D, 0x0F, 0x00, 0x00, 0x0D, 0x0F, 0x00, 0x00,
0x4F, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x76, 0x0F, 0x00, 0x00, 0x16, 0x0F, 0x00, 0x00, 0x57, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x0F, 0x00, 0x00,
0x1F, 0x0F, 0x00, 0x00, 0x5F, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x89, 0x0F, 0x00, 0x00, 0x76, 0x0F, 0x00, 0x00,
0x88, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x8B, 0x0F, 0x00, 0x00, 0x89, 0x0F, 0x00, 0x00, 0x4F, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00,
0x28, 0x0F, 0x00, 0x00, 0x67, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA4, 0x0F, 0x00, 0x00, 0x6D, 0x0F, 0x00, 0x00,
0xA3, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA6, 0x0F, 0x00, 0x00, 0xA4, 0x0F, 0x00, 0x00, 0x57, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC1, 0x0F, 0x00, 0x00,
0xA4, 0x0F, 0x00, 0x00, 0x5F, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xDC, 0x0F, 0x00, 0x00, 0x89, 0x0F, 0x00, 0x00,
0x67, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3E, 0x19, 0x00, 0x00, 0x6D, 0x0F, 0x00, 0x00, 0x76, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3F, 0x19, 0x00, 0x00,
0x3E, 0x19, 0x00, 0x00, 0x88, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x40, 0x19, 0x00, 0x00, 0x3F, 0x19, 0x00, 0x00,
0xA3, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x06, 0x10, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x40, 0x19, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00,
0x06, 0x10, 0x00, 0x00, 0x8B, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00,
0xA6, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0C, 0x10, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x00, 0xC1, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
0x0C, 0x10, 0x00, 0x00, 0xDC, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x4E, 0x17, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x4F, 0x17, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x00, 0x4E, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00, 0x4F, 0x17, 0x00, 0x00,
0x7F, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x17, 0x00, 0x00,
0x50, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x55, 0x17, 0x00, 0x00, 0x53, 0x17, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x57, 0x17, 0x00, 0x00,
0x55, 0x17, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x58, 0x17, 0x00, 0x00, 0x50, 0x17, 0x00, 0x00,
0x57, 0x17, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x41, 0x19, 0x00, 0x00, 0x04, 0x13, 0x00, 0x00, 0x22, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x10, 0x00, 0x00,
0x6D, 0x0F, 0x00, 0x00, 0x41, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1C, 0x10, 0x00, 0x00, 0x0E, 0x13, 0x00, 0x00,
0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1D, 0x10, 0x00, 0x00, 0x18, 0x10, 0x00, 0x00, 0x1C, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x10, 0x00, 0x00,
0x40, 0x13, 0x00, 0x00, 0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x22, 0x10, 0x00, 0x00, 0x1D, 0x10, 0x00, 0x00,
0x21, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x26, 0x10, 0x00, 0x00, 0x4A, 0x13, 0x00, 0x00, 0x88, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00,
0x22, 0x10, 0x00, 0x00, 0x26, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2B, 0x10, 0x00, 0x00, 0x7C, 0x13, 0x00, 0x00,
0x88, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2C, 0x10, 0x00, 0x00, 0x27, 0x10, 0x00, 0x00, 0x2B, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00,
0x68, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x31, 0x10, 0x00, 0x00, 0x2C, 0x10, 0x00, 0x00,
0x30, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x35, 0x10, 0x00, 0x00, 0x86, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00,
0x31, 0x10, 0x00, 0x00, 0x35, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x2C, 0x13, 0x00, 0x00,
0x8B, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3B, 0x10, 0x00, 0x00, 0x36, 0x10, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3F, 0x10, 0x00, 0x00,
0x36, 0x13, 0x00, 0x00, 0xA6, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x3B, 0x10, 0x00, 0x00,
0x3F, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x44, 0x10, 0x00, 0x00, 0x54, 0x13, 0x00, 0x00, 0xC1, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x45, 0x10, 0x00, 0x00,
0x40, 0x10, 0x00, 0x00, 0x44, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x49, 0x10, 0x00, 0x00, 0x5E, 0x13, 0x00, 0x00,
0xDC, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4A, 0x10, 0x00, 0x00, 0x45, 0x10, 0x00, 0x00, 0x49, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4C, 0x10, 0x00, 0x00,
0x4A, 0x10, 0x00, 0x00, 0x58, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x66, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x4C, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x42, 0x19, 0x00, 0x00, 0x07, 0x13, 0x00, 0x00, 0x25, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x10, 0x00, 0x00,
0x6D, 0x0F, 0x00, 0x00, 0x42, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5A, 0x10, 0x00, 0x00, 0x11, 0x13, 0x00, 0x00,
0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x5B, 0x10, 0x00, 0x00, 0x56, 0x10, 0x00, 0x00, 0x5A, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5F, 0x10, 0x00, 0x00,
0x43, 0x13, 0x00, 0x00, 0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x5B, 0x10, 0x00, 0x00,
0x5F, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x64, 0x10, 0x00, 0x00, 0x4D, 0x13, 0x00, 0x00, 0x88, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00,
0x60, 0x10, 0x00, 0x00, 0x64, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x69, 0x10, 0x00, 0x00, 0x7F, 0x13, 0x00, 0x00,
0x88, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x6A, 0x10, 0x00, 0x00, 0x65, 0x10, 0x00, 0x00, 0x69, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6E, 0x10, 0x00, 0x00,
0x6B, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6F, 0x10, 0x00, 0x00, 0x6A, 0x10, 0x00, 0x00,
0x6E, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x73, 0x10, 0x00, 0x00, 0x89, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x74, 0x10, 0x00, 0x00,
0x6F, 0x10, 0x00, 0x00, 0x73, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x78, 0x10, 0x00, 0x00, 0x2F, 0x13, 0x00, 0x00,
0x8B, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x79, 0x10, 0x00, 0x00, 0x74, 0x10, 0x00, 0x00, 0x78, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7D, 0x10, 0x00, 0x00,
0x39, 0x13, 0x00, 0x00, 0xA6, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x7E, 0x10, 0x00, 0x00, 0x79, 0x10, 0x00, 0x00,
0x7D, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x82, 0x10, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00, 0xC1, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00,
0x7E, 0x10, 0x00, 0x00, 0x82, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0x61, 0x13, 0x00, 0x00,
0xDC, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x88, 0x10, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x00,
0x88, 0x10, 0x00, 0x00, 0x58, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x74, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x8A, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x43, 0x19, 0x00, 0x00, 0x0A, 0x13, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x94, 0x10, 0x00, 0x00,
0x6D, 0x0F, 0x00, 0x00, 0x43, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00, 0x14, 0x13, 0x00, 0x00,
0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x99, 0x10, 0x00, 0x00, 0x94, 0x10, 0x00, 0x00, 0x98, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9D, 0x10, 0x00, 0x00,
0x46, 0x13, 0x00, 0x00, 0x76, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x9E, 0x10, 0x00, 0x00, 0x99, 0x10, 0x00, 0x00,
0x9D, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA2, 0x10, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x88, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA3, 0x10, 0x00, 0x00,
0x9E, 0x10, 0x00, 0x00, 0xA2, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA7, 0x10, 0x00, 0x00, 0x82, 0x13, 0x00, 0x00,
0x88, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA8, 0x10, 0x00, 0x00, 0xA3, 0x10, 0x00, 0x00, 0xA7, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAC, 0x10, 0x00, 0x00,
0x6E, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xAD, 0x10, 0x00, 0x00, 0xA8, 0x10, 0x00, 0x00,
0xAC, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB1, 0x10, 0x00, 0x00, 0x8C, 0x13, 0x00, 0x00, 0xA3, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB2, 0x10, 0x00, 0x00,
0xAD, 0x10, 0x00, 0x00, 0xB1, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB6, 0x10, 0x00, 0x00, 0x32, 0x13, 0x00, 0x00,
0x8B, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB7, 0x10, 0x00, 0x00, 0xB2, 0x10, 0x00, 0x00, 0xB6, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xBB, 0x10, 0x00, 0x00,
0x3C, 0x13, 0x00, 0x00, 0xA6, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xBC, 0x10, 0x00, 0x00, 0xB7, 0x10, 0x00, 0x00,
0xBB, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC0, 0x10, 0x00, 0x00, 0x5A, 0x13, 0x00, 0x00, 0xC1, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC1, 0x10, 0x00, 0x00,
0xBC, 0x10, 0x00, 0x00, 0xC0, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xC5, 0x10, 0x00, 0x00, 0x64, 0x13, 0x00, 0x00,
0xDC, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC6, 0x10, 0x00, 0x00, 0xC1, 0x10, 0x00, 0x00, 0xC5, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC8, 0x10, 0x00, 0x00,
0xC6, 0x10, 0x00, 0x00, 0x58, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x82, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0xC8, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xD7, 0x08, 0x00, 0x00,
0xD8, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xD8, 0x08, 0x00, 0x00, 0x66, 0x17, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xD7, 0x08, 0x00, 0x00, 0xDA, 0x08, 0x00, 0x00,
0xC9, 0x08, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xDA, 0x08, 0x00, 0x00, 0x74, 0x17, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xD7, 0x08, 0x00, 0x00, 0xDC, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00,
0xEA, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xDC, 0x08, 0x00, 0x00,
0x82, 0x17, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00,
0xDD, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00, 0x4F, 0x00, 0x08, 0x00,
0x2C, 0x00, 0x00, 0x00, 0xDE, 0x08, 0x00, 0x00, 0xDD, 0x08, 0x00, 0x00,
0xDD, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x00, 0x00,
0xDF, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
0xDE, 0x08, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xE1, 0x08, 0x00, 0x00, 0xDF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xD8, 0x08, 0x00, 0x00, 0xE1, 0x08, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xE3, 0x08, 0x00, 0x00,
0xDF, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xDA, 0x08, 0x00, 0x00, 0xE3, 0x08, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xE5, 0x08, 0x00, 0x00, 0xDF, 0x08, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xDC, 0x08, 0x00, 0x00,
0xE5, 0x08, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xD7, 0x08, 0x00, 0x00,
0xE7, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00, 0xE6, 0x08, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xE7, 0x08, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
};

View File

@@ -0,0 +1,448 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 6468
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %xe_frag_color
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 420
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
OpSourceExtension "GL_GOOGLE_include_directive"
OpName %main "main"
OpName %xe_texture "xe_texture"
OpName %gl_FragCoord "gl_FragCoord"
OpName %XeCasResampleConstants "XeCasResampleConstants"
OpMemberName %XeCasResampleConstants 0 "xe_cas_output_offset"
OpMemberName %XeCasResampleConstants 1 "xe_cas_input_output_size_ratio"
OpMemberName %XeCasResampleConstants 2 "xe_cas_sharpness_post_setup"
OpName %_ ""
OpName %xe_frag_color "xe_frag_color"
OpDecorate %xe_texture DescriptorSet 0
OpDecorate %xe_texture Binding 0
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %XeCasResampleConstants 0 Offset 16
OpMemberDecorate %XeCasResampleConstants 1 Offset 24
OpMemberDecorate %XeCasResampleConstants 2 Offset 32
OpDecorate %XeCasResampleConstants Block
OpDecorate %xe_frag_color Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%uint = OpTypeInt 32 0
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%v3float = OpTypeVector %float 3
%v2uint = OpTypeVector %uint 2
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%uint_1 = OpConstant %uint 1
%uint_532432441 = OpConstant %uint 532432441
%uint_2129690299 = OpConstant %uint 2129690299
%uint_2129764351 = OpConstant %uint 2129764351
%float_2 = OpConstant %float 2
%143 = OpTypeImage %float 2D 0 0 0 1 Unknown
%144 = OpTypeSampledImage %143
%_ptr_UniformConstant_144 = OpTypePointer UniformConstant %144
%xe_texture = OpVariable %_ptr_UniformConstant_144 UniformConstant
%int_0 = OpConstant %int 0
%v4float = OpTypeVector %float 4
%int_n1 = OpConstant %int -1
%181 = OpConstantComposite %v2int %int_0 %int_n1
%int_1 = OpConstant %int 1
%188 = OpConstantComposite %v2int %int_1 %int_n1
%194 = OpConstantComposite %v2int %int_n1 %int_0
%204 = OpConstantComposite %v2int %int_1 %int_0
%210 = OpConstantComposite %v2int %int_n1 %int_1
%216 = OpConstantComposite %v2int %int_0 %int_1
%222 = OpConstantComposite %v2int %int_1 %int_1
%uint_0 = OpConstant %uint 0
%uint_2 = OpConstant %uint 2
%v2float = OpTypeVector %float 2
%int_2 = OpConstant %int 2
%712 = OpConstantComposite %v2int %int_2 %int_0
%734 = OpConstantComposite %v2int %int_0 %int_2
%745 = OpConstantComposite %v2int %int_2 %int_1
%751 = OpConstantComposite %v2int %int_1 %int_2
%float_0_03125 = OpConstant %float 0.03125
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%XeCasResampleConstants = OpTypeStruct %v2int %v2float %float
%_ptr_PushConstant_XeCasResampleConstants = OpTypePointer PushConstant %XeCasResampleConstants
%_ = OpVariable %_ptr_PushConstant_XeCasResampleConstants PushConstant
%_ptr_PushConstant_v2int = OpTypePointer PushConstant %v2int
%_ptr_PushConstant_v2float = OpTypePointer PushConstant %v2float
%float_0_5 = OpConstant %float 0.5
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
%_ptr_Output_v4float = OpTypePointer Output %v4float
%xe_frag_color = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%uint_3 = OpConstant %uint 3
%6461 = OpConstantComposite %v2float %float_0_5 %float_0_5
%main = OpFunction %void None %3
%5 = OpLabel
%2205 = OpLoad %v4float %gl_FragCoord
%2206 = OpVectorShuffle %v2float %2205 %2205 0 1
%2207 = OpConvertFToS %v2int %2206
%2212 = OpAccessChain %_ptr_PushConstant_v2int %_ %int_0
%2213 = OpLoad %v2int %2212
%2214 = OpISub %v2int %2207 %2213
%2215 = OpBitcast %v2uint %2214
%2218 = OpAccessChain %_ptr_PushConstant_v2float %_ %int_1
%2219 = OpLoad %v2float %2218
%2220 = OpBitcast %v2uint %2219
%2224 = OpVectorTimesScalar %v2float %2219 %float_0_5
%2226 = OpFSub %v2float %2224 %6461
%2227 = OpBitcast %v2uint %2226
%2235 = OpAccessChain %_ptr_PushConstant_float %_ %int_2
%2236 = OpLoad %float %2235
%2237 = OpBitcast %uint %2236
OpBranch %2785
%2785 = OpLabel
%3136 = OpConvertUToF %v2float %2215
%3142 = OpBitcast %v2float %2220
%3143 = OpFMul %v2float %3136 %3142
%3149 = OpBitcast %v2float %2227
%3150 = OpFAdd %v2float %3143 %3149
%3152 = OpExtInst %v2float %1 Floor %3150
%3155 = OpFSub %v2float %3150 %3152
%3157 = OpConvertFToS %v2int %3152
%3162 = OpIAdd %v2int %3157 %181
%4752 = OpLoad %144 %xe_texture
%4754 = OpImage %143 %4752
%4755 = OpImageFetch %v4float %4754 %3162 Lod %int_0
%3165 = OpIAdd %v2int %3157 %194
%4761 = OpImage %143 %4752
%4762 = OpImageFetch %v4float %4761 %3165 Lod %int_0
%4768 = OpImage %143 %4752
%4769 = OpImageFetch %v4float %4768 %3157 Lod %int_0
%3170 = OpIAdd %v2int %3157 %188
%4775 = OpImage %143 %4752
%4776 = OpImageFetch %v4float %4775 %3170 Lod %int_0
%3176 = OpIAdd %v2int %3157 %204
%4789 = OpImage %143 %4752
%4790 = OpImageFetch %v4float %4789 %3176 Lod %int_0
%3179 = OpIAdd %v2int %3157 %712
%4796 = OpImage %143 %4752
%4797 = OpImageFetch %v4float %4796 %3179 Lod %int_0
%3182 = OpIAdd %v2int %3157 %210
%4803 = OpImage %143 %4752
%4804 = OpImageFetch %v4float %4803 %3182 Lod %int_0
%3185 = OpIAdd %v2int %3157 %216
%4810 = OpImage %143 %4752
%4811 = OpImageFetch %v4float %4810 %3185 Lod %int_0
%3191 = OpIAdd %v2int %3157 %734
%4824 = OpImage %143 %4752
%4825 = OpImageFetch %v4float %4824 %3191 Lod %int_0
%3194 = OpIAdd %v2int %3157 %222
%4831 = OpImage %143 %4752
%4832 = OpImageFetch %v4float %4831 %3194 Lod %int_0
%3197 = OpIAdd %v2int %3157 %745
%4838 = OpImage %143 %4752
%4839 = OpImageFetch %v4float %4838 %3197 Lod %int_0
%3200 = OpIAdd %v2int %3157 %751
%4845 = OpImage %143 %4752
%4846 = OpImageFetch %v4float %4845 %3200 Lod %int_0
%3219 = OpCompositeExtract %float %4755 0
%3221 = OpCompositeExtract %float %4755 1
%3223 = OpCompositeExtract %float %4755 2
%4868 = OpFMul %float %3219 %3219
%4871 = OpFMul %float %3221 %3221
%4874 = OpFMul %float %3223 %3223
%3232 = OpCompositeExtract %float %4776 0
%3234 = OpCompositeExtract %float %4776 1
%3236 = OpCompositeExtract %float %4776 2
%4878 = OpFMul %float %3232 %3232
%4881 = OpFMul %float %3234 %3234
%4884 = OpFMul %float %3236 %3236
%3258 = OpCompositeExtract %float %4762 0
%3260 = OpCompositeExtract %float %4762 1
%3262 = OpCompositeExtract %float %4762 2
%4898 = OpFMul %float %3258 %3258
%4901 = OpFMul %float %3260 %3260
%4904 = OpFMul %float %3262 %3262
%3271 = OpCompositeExtract %float %4769 0
%3273 = OpCompositeExtract %float %4769 1
%3275 = OpCompositeExtract %float %4769 2
%4908 = OpFMul %float %3271 %3271
%4911 = OpFMul %float %3273 %3273
%4914 = OpFMul %float %3275 %3275
%3284 = OpCompositeExtract %float %4790 0
%3286 = OpCompositeExtract %float %4790 1
%3288 = OpCompositeExtract %float %4790 2
%4918 = OpFMul %float %3284 %3284
%4921 = OpFMul %float %3286 %3286
%4924 = OpFMul %float %3288 %3288
%3297 = OpCompositeExtract %float %4797 0
%3299 = OpCompositeExtract %float %4797 1
%3301 = OpCompositeExtract %float %4797 2
%4928 = OpFMul %float %3297 %3297
%4931 = OpFMul %float %3299 %3299
%4934 = OpFMul %float %3301 %3301
%3310 = OpCompositeExtract %float %4804 0
%3312 = OpCompositeExtract %float %4804 1
%3314 = OpCompositeExtract %float %4804 2
%4938 = OpFMul %float %3310 %3310
%4941 = OpFMul %float %3312 %3312
%4944 = OpFMul %float %3314 %3314
%3323 = OpCompositeExtract %float %4811 0
%3325 = OpCompositeExtract %float %4811 1
%3327 = OpCompositeExtract %float %4811 2
%4948 = OpFMul %float %3323 %3323
%4951 = OpFMul %float %3325 %3325
%4954 = OpFMul %float %3327 %3327
%3336 = OpCompositeExtract %float %4832 0
%3338 = OpCompositeExtract %float %4832 1
%3340 = OpCompositeExtract %float %4832 2
%4958 = OpFMul %float %3336 %3336
%4961 = OpFMul %float %3338 %3338
%4964 = OpFMul %float %3340 %3340
%3349 = OpCompositeExtract %float %4839 0
%3351 = OpCompositeExtract %float %4839 1
%3353 = OpCompositeExtract %float %4839 2
%4968 = OpFMul %float %3349 %3349
%4971 = OpFMul %float %3351 %3351
%4974 = OpFMul %float %3353 %3353
%3375 = OpCompositeExtract %float %4825 0
%3377 = OpCompositeExtract %float %4825 1
%3379 = OpCompositeExtract %float %4825 2
%4988 = OpFMul %float %3375 %3375
%4991 = OpFMul %float %3377 %3377
%4994 = OpFMul %float %3379 %3379
%3388 = OpCompositeExtract %float %4846 0
%3390 = OpCompositeExtract %float %4846 1
%3392 = OpCompositeExtract %float %4846 2
%4998 = OpFMul %float %3388 %3388
%5001 = OpFMul %float %3390 %3390
%5004 = OpFMul %float %3392 %3392
%5034 = OpExtInst %float %1 FMin %4901 %4911
%5035 = OpExtInst %float %1 FMin %4871 %5034
%5041 = OpExtInst %float %1 FMin %4921 %4951
%5042 = OpExtInst %float %1 FMin %5035 %5041
%5076 = OpExtInst %float %1 FMax %4901 %4911
%5077 = OpExtInst %float %1 FMax %4871 %5076
%5083 = OpExtInst %float %1 FMax %4921 %4951
%5084 = OpExtInst %float %1 FMax %5077 %5083
%5118 = OpExtInst %float %1 FMin %4911 %4921
%5119 = OpExtInst %float %1 FMin %4881 %5118
%5125 = OpExtInst %float %1 FMin %4931 %4961
%5126 = OpExtInst %float %1 FMin %5119 %5125
%5160 = OpExtInst %float %1 FMax %4911 %4921
%5161 = OpExtInst %float %1 FMax %4881 %5160
%5167 = OpExtInst %float %1 FMax %4931 %4961
%5168 = OpExtInst %float %1 FMax %5161 %5167
%5202 = OpExtInst %float %1 FMin %4941 %4951
%5203 = OpExtInst %float %1 FMin %4911 %5202
%5209 = OpExtInst %float %1 FMin %4961 %4991
%5210 = OpExtInst %float %1 FMin %5203 %5209
%5244 = OpExtInst %float %1 FMax %4941 %4951
%5245 = OpExtInst %float %1 FMax %4911 %5244
%5251 = OpExtInst %float %1 FMax %4961 %4991
%5252 = OpExtInst %float %1 FMax %5245 %5251
%5286 = OpExtInst %float %1 FMin %4951 %4961
%5287 = OpExtInst %float %1 FMin %4921 %5286
%5293 = OpExtInst %float %1 FMin %4971 %5001
%5294 = OpExtInst %float %1 FMin %5287 %5293
%5328 = OpExtInst %float %1 FMax %4951 %4961
%5329 = OpExtInst %float %1 FMax %4921 %5328
%5335 = OpExtInst %float %1 FMax %4971 %5001
%5336 = OpExtInst %float %1 FMax %5329 %5335
%5367 = OpBitcast %uint %5084
%5368 = OpISub %uint %uint_2129690299 %5367
%5369 = OpBitcast %float %5368
%5400 = OpBitcast %uint %5168
%5401 = OpISub %uint %uint_2129690299 %5400
%5402 = OpBitcast %float %5401
%5433 = OpBitcast %uint %5252
%5434 = OpISub %uint %uint_2129690299 %5433
%5435 = OpBitcast %float %5434
%5466 = OpBitcast %uint %5336
%5467 = OpISub %uint %uint_2129690299 %5466
%5468 = OpBitcast %float %5467
%3736 = OpFSub %float %float_1 %5084
%3737 = OpExtInst %float %1 FMin %5042 %3736
%3739 = OpFMul %float %3737 %5369
%5510 = OpExtInst %float %1 FClamp %3739 %float_0 %float_1
%3760 = OpFSub %float %float_1 %5168
%3761 = OpExtInst %float %1 FMin %5126 %3760
%3763 = OpFMul %float %3761 %5402
%5561 = OpExtInst %float %1 FClamp %3763 %float_0 %float_1
%3784 = OpFSub %float %float_1 %5252
%3785 = OpExtInst %float %1 FMin %5210 %3784
%3787 = OpFMul %float %3785 %5435
%5612 = OpExtInst %float %1 FClamp %3787 %float_0 %float_1
%3808 = OpFSub %float %float_1 %5336
%3809 = OpExtInst %float %1 FMin %5294 %3808
%3811 = OpFMul %float %3809 %5468
%5663 = OpExtInst %float %1 FClamp %3811 %float_0 %float_1
%5709 = OpBitcast %uint %5510
%5711 = OpShiftRightLogical %uint %5709 %uint_1
%5713 = OpIAdd %uint %5711 %uint_532432441
%5714 = OpBitcast %float %5713
%5760 = OpBitcast %uint %5561
%5762 = OpShiftRightLogical %uint %5760 %uint_1
%5764 = OpIAdd %uint %5762 %uint_532432441
%5765 = OpBitcast %float %5764
%5811 = OpBitcast %uint %5612
%5813 = OpShiftRightLogical %uint %5811 %uint_1
%5815 = OpIAdd %uint %5813 %uint_532432441
%5816 = OpBitcast %float %5815
%5862 = OpBitcast %uint %5663
%5864 = OpShiftRightLogical %uint %5862 %uint_1
%5866 = OpIAdd %uint %5864 %uint_532432441
%5867 = OpBitcast %float %5866
%3847 = OpBitcast %float %2237
%3853 = OpFMul %float %5714 %3847
%3862 = OpFMul %float %5765 %3847
%3871 = OpFMul %float %5816 %3847
%3880 = OpFMul %float %5867 %3847
%3886 = OpCompositeExtract %float %3155 0
%3887 = OpFSub %float %float_1 %3886
%3890 = OpCompositeExtract %float %3155 1
%3891 = OpFSub %float %float_1 %3890
%3892 = OpFMul %float %3887 %3891
%3899 = OpFMul %float %3886 %3891
%3906 = OpFMul %float %3887 %3890
%3911 = OpFMul %float %3886 %3890
%3915 = OpFSub %float %5084 %5042
%3916 = OpFAdd %float %float_0_03125 %3915
%5908 = OpBitcast %uint %3916
%5909 = OpISub %uint %uint_2129690299 %5908
%5910 = OpBitcast %float %5909
%3919 = OpFMul %float %3892 %5910
%3923 = OpFSub %float %5168 %5126
%3924 = OpFAdd %float %float_0_03125 %3923
%5919 = OpBitcast %uint %3924
%5920 = OpISub %uint %uint_2129690299 %5919
%5921 = OpBitcast %float %5920
%3927 = OpFMul %float %3899 %5921
%3931 = OpFSub %float %5252 %5210
%3932 = OpFAdd %float %float_0_03125 %3931
%5930 = OpBitcast %uint %3932
%5931 = OpISub %uint %uint_2129690299 %5930
%5932 = OpBitcast %float %5931
%3935 = OpFMul %float %3906 %5932
%3939 = OpFSub %float %5336 %5294
%3940 = OpFAdd %float %float_0_03125 %3939
%5941 = OpBitcast %uint %3940
%5942 = OpISub %uint %uint_2129690299 %5941
%5943 = OpBitcast %float %5942
%3943 = OpFMul %float %3911 %5943
%3949 = OpFMul %float %3853 %3919
%3958 = OpFMul %float %3862 %3927
%3976 = OpFMul %float %3871 %3935
%3977 = OpFAdd %float %3958 %3976
%3979 = OpFAdd %float %3977 %3919
%4003 = OpFMul %float %3880 %3943
%4004 = OpFAdd %float %3949 %4003
%4006 = OpFAdd %float %4004 %3927
%4033 = OpFAdd %float %4004 %3935
%4060 = OpFAdd %float %3977 %3943
%6462 = OpFAdd %float %3949 %3958
%6463 = OpFAdd %float %6462 %3976
%6464 = OpFAdd %float %6463 %4003
%4102 = OpFMul %float %float_2 %6464
%4104 = OpFAdd %float %4102 %3979
%4106 = OpFAdd %float %4104 %4006
%4108 = OpFAdd %float %4106 %4033
%4110 = OpFAdd %float %4108 %4060
%5966 = OpBitcast %uint %4110
%5967 = OpISub %uint %uint_2129764351 %5966
%5968 = OpBitcast %float %5967
%5971 = OpFNegate %float %5968
%5973 = OpFMul %float %5971 %4110
%5975 = OpFAdd %float %5973 %float_2
%5976 = OpFMul %float %5968 %5975
%6465 = OpFAdd %float %4868 %4898
%4120 = OpFMul %float %3949 %6465
%4124 = OpFMul %float %4878 %3958
%4125 = OpFAdd %float %4120 %4124
%4129 = OpFMul %float %4928 %3958
%4130 = OpFAdd %float %4125 %4129
%4134 = OpFMul %float %4938 %3976
%4135 = OpFAdd %float %4130 %4134
%4139 = OpFMul %float %4988 %3976
%4140 = OpFAdd %float %4135 %4139
%4144 = OpFMul %float %4968 %4003
%4145 = OpFAdd %float %4140 %4144
%4149 = OpFMul %float %4998 %4003
%4150 = OpFAdd %float %4145 %4149
%4154 = OpFMul %float %4908 %3979
%4155 = OpFAdd %float %4150 %4154
%4159 = OpFMul %float %4918 %4006
%4160 = OpFAdd %float %4155 %4159
%4164 = OpFMul %float %4948 %4033
%4165 = OpFAdd %float %4160 %4164
%4169 = OpFMul %float %4958 %4060
%4170 = OpFAdd %float %4165 %4169
%4172 = OpFMul %float %4170 %5976
%5990 = OpExtInst %float %1 FClamp %4172 %float_0 %float_1
%6466 = OpFAdd %float %4871 %4901
%4182 = OpFMul %float %3949 %6466
%4186 = OpFMul %float %4881 %3958
%4187 = OpFAdd %float %4182 %4186
%4191 = OpFMul %float %4931 %3958
%4192 = OpFAdd %float %4187 %4191
%4196 = OpFMul %float %4941 %3976
%4197 = OpFAdd %float %4192 %4196
%4201 = OpFMul %float %4991 %3976
%4202 = OpFAdd %float %4197 %4201
%4206 = OpFMul %float %4971 %4003
%4207 = OpFAdd %float %4202 %4206
%4211 = OpFMul %float %5001 %4003
%4212 = OpFAdd %float %4207 %4211
%4216 = OpFMul %float %4911 %3979
%4217 = OpFAdd %float %4212 %4216
%4221 = OpFMul %float %4921 %4006
%4222 = OpFAdd %float %4217 %4221
%4226 = OpFMul %float %4951 %4033
%4227 = OpFAdd %float %4222 %4226
%4231 = OpFMul %float %4961 %4060
%4232 = OpFAdd %float %4227 %4231
%4234 = OpFMul %float %4232 %5976
%6004 = OpExtInst %float %1 FClamp %4234 %float_0 %float_1
%6467 = OpFAdd %float %4874 %4904
%4244 = OpFMul %float %3949 %6467
%4248 = OpFMul %float %4884 %3958
%4249 = OpFAdd %float %4244 %4248
%4253 = OpFMul %float %4934 %3958
%4254 = OpFAdd %float %4249 %4253
%4258 = OpFMul %float %4944 %3976
%4259 = OpFAdd %float %4254 %4258
%4263 = OpFMul %float %4994 %3976
%4264 = OpFAdd %float %4259 %4263
%4268 = OpFMul %float %4974 %4003
%4269 = OpFAdd %float %4264 %4268
%4273 = OpFMul %float %5004 %4003
%4274 = OpFAdd %float %4269 %4273
%4278 = OpFMul %float %4914 %3979
%4279 = OpFAdd %float %4274 %4278
%4283 = OpFMul %float %4924 %4006
%4284 = OpFAdd %float %4279 %4283
%4288 = OpFMul %float %4954 %4033
%4289 = OpFAdd %float %4284 %4288
%4293 = OpFMul %float %4964 %4060
%4294 = OpFAdd %float %4289 %4293
%4296 = OpFMul %float %4294 %5976
%6018 = OpExtInst %float %1 FClamp %4296 %float_0 %float_1
%2264 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_0
OpStore %2264 %5990
%2266 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_1
OpStore %2266 %6004
%2268 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_2
OpStore %2268 %6018
%2269 = OpLoad %v4float %xe_frag_color
%2270 = OpVectorShuffle %v3float %2269 %2269 0 1 2
%2271 = OpExtInst %v3float %1 Sqrt %2270
%2273 = OpCompositeExtract %float %2271 0
OpStore %2264 %2273
%2275 = OpCompositeExtract %float %2271 1
OpStore %2266 %2275
%2277 = OpCompositeExtract %float %2271 2
OpStore %2268 %2277
%2279 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_3
OpStore %2279 %float_1
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,723 @@
// generated from `xb genspirv`
// source: guest_output_ffx_cas_sharpen.frag
const uint8_t guest_output_ffx_cas_sharpen_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x39, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x9C, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x92, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x9C, 0x08, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x58, 0x65, 0x43, 0x61, 0x73, 0x53, 0x68, 0x61,
0x72, 0x70, 0x65, 0x6E, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74,
0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x63, 0x61, 0x73, 0x5F, 0x6F,
0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65, 0x74,
0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0A, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x63, 0x61, 0x73, 0x5F, 0x73,
0x68, 0x61, 0x72, 0x70, 0x6E, 0x65, 0x73, 0x73, 0x5F, 0x70, 0x6F, 0x73,
0x74, 0x5F, 0x73, 0x65, 0x74, 0x75, 0x70, 0x00, 0x05, 0x00, 0x03, 0x00,
0xA2, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0xB8, 0x08, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x66, 0x72, 0x61, 0x67, 0x5F,
0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x92, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x92, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x9C, 0x08, 0x00, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xA0, 0x08, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x47, 0x00, 0x03, 0x00, 0xA0, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3F, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x67, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x39, 0x46, 0xBC, 0x1F,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0xBB, 0x7E, 0xF0, 0x7E, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x00, 0xFF, 0x9F, 0xF1, 0x7E, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x19, 0x00, 0x09, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x91, 0x00, 0x00, 0x00,
0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00,
0xAE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0xAE, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0xAE, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xC2, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xD8, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x86, 0x02, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00,
0xBC, 0x02, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xDE, 0x02, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0xBC, 0x02, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0xE9, 0x02, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xEF, 0x02, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0xBC, 0x02, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3D,
0x20, 0x00, 0x04, 0x00, 0x9B, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x97, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x9B, 0x08, 0x00, 0x00,
0x9C, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xA1, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA0, 0x08, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0xA1, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xA3, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xAC, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xB7, 0x08, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00,
0xB7, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xC6, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xD5, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00,
0x9C, 0x08, 0x00, 0x00, 0x4F, 0x00, 0x07, 0x00, 0x86, 0x02, 0x00, 0x00,
0x9E, 0x08, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00, 0x9D, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x9F, 0x08, 0x00, 0x00, 0x9E, 0x08, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xA3, 0x08, 0x00, 0x00, 0xA4, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0xA5, 0x08, 0x00, 0x00, 0xA4, 0x08, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0xA6, 0x08, 0x00, 0x00,
0x9F, 0x08, 0x00, 0x00, 0xA5, 0x08, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x37, 0x00, 0x00, 0x00, 0xA7, 0x08, 0x00, 0x00, 0xA6, 0x08, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xAC, 0x08, 0x00, 0x00, 0xAD, 0x08, 0x00, 0x00,
0xA2, 0x08, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xAE, 0x08, 0x00, 0x00, 0xAD, 0x08, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xAF, 0x08, 0x00, 0x00,
0xAE, 0x08, 0x00, 0x00, 0xF9, 0x00, 0x02, 0x00, 0xD0, 0x0A, 0x00, 0x00,
0xF8, 0x00, 0x02, 0x00, 0xD0, 0x0A, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00,
0x86, 0x02, 0x00, 0x00, 0x2F, 0x0C, 0x00, 0x00, 0xA7, 0x08, 0x00, 0x00,
0x0C, 0x00, 0x06, 0x00, 0x86, 0x02, 0x00, 0x00, 0x3F, 0x0C, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2F, 0x0C, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x86, 0x02, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00,
0x2F, 0x0C, 0x00, 0x00, 0x3F, 0x0C, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00, 0x3F, 0x0C, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x49, 0x0C, 0x00, 0x00,
0x44, 0x0C, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x90, 0x00, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x81, 0x12, 0x00, 0x00,
0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0x82, 0x12, 0x00, 0x00, 0x81, 0x12, 0x00, 0x00, 0x49, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x4C, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00,
0xC2, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x88, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0x89, 0x12, 0x00, 0x00, 0x88, 0x12, 0x00, 0x00,
0x4C, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x8F, 0x12, 0x00, 0x00,
0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x8F, 0x12, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x51, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00,
0xBC, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x96, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0x97, 0x12, 0x00, 0x00, 0x96, 0x12, 0x00, 0x00,
0x51, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x57, 0x0C, 0x00, 0x00,
0x44, 0x0C, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xA4, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xA5, 0x12, 0x00, 0x00,
0xA4, 0x12, 0x00, 0x00, 0x57, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x5A, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00, 0xC8, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xAB, 0x12, 0x00, 0x00,
0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xAC, 0x12, 0x00, 0x00, 0xAB, 0x12, 0x00, 0x00, 0x5A, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x5D, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00,
0xD2, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0xB2, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0xB3, 0x12, 0x00, 0x00, 0xB2, 0x12, 0x00, 0x00,
0x5D, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x60, 0x0C, 0x00, 0x00,
0x44, 0x0C, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xB9, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xBA, 0x12, 0x00, 0x00,
0xB9, 0x12, 0x00, 0x00, 0x60, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x66, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00, 0xDE, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00,
0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xC8, 0x12, 0x00, 0x00, 0xC7, 0x12, 0x00, 0x00, 0x66, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x69, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00,
0xDE, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00,
0xCE, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x97, 0x00, 0x00, 0x00, 0xCF, 0x12, 0x00, 0x00, 0xCE, 0x12, 0x00, 0x00,
0x69, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x6C, 0x0C, 0x00, 0x00,
0x44, 0x0C, 0x00, 0x00, 0xE9, 0x02, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x8F, 0x00, 0x00, 0x00, 0xD5, 0x12, 0x00, 0x00, 0x7F, 0x12, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00, 0xD6, 0x12, 0x00, 0x00,
0xD5, 0x12, 0x00, 0x00, 0x6C, 0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x6F, 0x0C, 0x00, 0x00, 0x44, 0x0C, 0x00, 0x00, 0xEF, 0x02, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xDC, 0x12, 0x00, 0x00,
0x7F, 0x12, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x97, 0x00, 0x00, 0x00,
0xDD, 0x12, 0x00, 0x00, 0xDC, 0x12, 0x00, 0x00, 0x6F, 0x0C, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x82, 0x0C, 0x00, 0x00, 0x82, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x84, 0x0C, 0x00, 0x00, 0x82, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x0C, 0x00, 0x00,
0x82, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x82, 0x0C, 0x00, 0x00,
0x82, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF6, 0x12, 0x00, 0x00, 0x84, 0x0C, 0x00, 0x00, 0x84, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF9, 0x12, 0x00, 0x00,
0x86, 0x0C, 0x00, 0x00, 0x86, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x8F, 0x0C, 0x00, 0x00, 0x97, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x91, 0x0C, 0x00, 0x00, 0x97, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x93, 0x0C, 0x00, 0x00,
0x97, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xFD, 0x12, 0x00, 0x00, 0x8F, 0x0C, 0x00, 0x00,
0x8F, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x00, 0x13, 0x00, 0x00, 0x91, 0x0C, 0x00, 0x00, 0x91, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00,
0x93, 0x0C, 0x00, 0x00, 0x93, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA9, 0x0C, 0x00, 0x00, 0x89, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xAB, 0x0C, 0x00, 0x00, 0x89, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAD, 0x0C, 0x00, 0x00,
0x89, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x11, 0x13, 0x00, 0x00, 0xA9, 0x0C, 0x00, 0x00,
0xA9, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x14, 0x13, 0x00, 0x00, 0xAB, 0x0C, 0x00, 0x00, 0xAB, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x17, 0x13, 0x00, 0x00,
0xAD, 0x0C, 0x00, 0x00, 0xAD, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB6, 0x0C, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB8, 0x0C, 0x00, 0x00, 0x90, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xBA, 0x0C, 0x00, 0x00,
0x90, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1B, 0x13, 0x00, 0x00, 0xB6, 0x0C, 0x00, 0x00,
0xB6, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1E, 0x13, 0x00, 0x00, 0xB8, 0x0C, 0x00, 0x00, 0xB8, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x13, 0x00, 0x00,
0xBA, 0x0C, 0x00, 0x00, 0xBA, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00, 0xA5, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC5, 0x0C, 0x00, 0x00, 0xA5, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC7, 0x0C, 0x00, 0x00,
0xA5, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x25, 0x13, 0x00, 0x00, 0xC3, 0x0C, 0x00, 0x00,
0xC3, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x28, 0x13, 0x00, 0x00, 0xC5, 0x0C, 0x00, 0x00, 0xC5, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2B, 0x13, 0x00, 0x00,
0xC7, 0x0C, 0x00, 0x00, 0xC7, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD0, 0x0C, 0x00, 0x00, 0xAC, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD2, 0x0C, 0x00, 0x00, 0xAC, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD4, 0x0C, 0x00, 0x00,
0xAC, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2F, 0x13, 0x00, 0x00, 0xD0, 0x0C, 0x00, 0x00,
0xD0, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x32, 0x13, 0x00, 0x00, 0xD2, 0x0C, 0x00, 0x00, 0xD2, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x35, 0x13, 0x00, 0x00,
0xD4, 0x0C, 0x00, 0x00, 0xD4, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xDD, 0x0C, 0x00, 0x00, 0xB3, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xDF, 0x0C, 0x00, 0x00, 0xB3, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xE1, 0x0C, 0x00, 0x00,
0xB3, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00, 0xDD, 0x0C, 0x00, 0x00,
0xDD, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3C, 0x13, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00, 0xDF, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3F, 0x13, 0x00, 0x00,
0xE1, 0x0C, 0x00, 0x00, 0xE1, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xBA, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xEC, 0x0C, 0x00, 0x00, 0xBA, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xEE, 0x0C, 0x00, 0x00,
0xBA, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x43, 0x13, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00,
0xEA, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x46, 0x13, 0x00, 0x00, 0xEC, 0x0C, 0x00, 0x00, 0xEC, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x49, 0x13, 0x00, 0x00,
0xEE, 0x0C, 0x00, 0x00, 0xEE, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xF7, 0x0C, 0x00, 0x00, 0xCF, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF9, 0x0C, 0x00, 0x00, 0xCF, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFB, 0x0C, 0x00, 0x00,
0xCF, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4D, 0x13, 0x00, 0x00, 0xF7, 0x0C, 0x00, 0x00,
0xF7, 0x0C, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x50, 0x13, 0x00, 0x00, 0xF9, 0x0C, 0x00, 0x00, 0xF9, 0x0C, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x13, 0x00, 0x00,
0xFB, 0x0C, 0x00, 0x00, 0xFB, 0x0C, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x04, 0x0D, 0x00, 0x00, 0xD6, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x06, 0x0D, 0x00, 0x00, 0xD6, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x0D, 0x00, 0x00,
0xD6, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x57, 0x13, 0x00, 0x00, 0x04, 0x0D, 0x00, 0x00,
0x04, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x5A, 0x13, 0x00, 0x00, 0x06, 0x0D, 0x00, 0x00, 0x06, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5D, 0x13, 0x00, 0x00,
0x08, 0x0D, 0x00, 0x00, 0x08, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1E, 0x0D, 0x00, 0x00, 0xC8, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x0D, 0x00, 0x00, 0xC8, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00,
0xC8, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6B, 0x13, 0x00, 0x00, 0x1E, 0x0D, 0x00, 0x00,
0x1E, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x6E, 0x13, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00, 0x20, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x71, 0x13, 0x00, 0x00,
0x22, 0x0D, 0x00, 0x00, 0x22, 0x0D, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2B, 0x0D, 0x00, 0x00, 0xDD, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2D, 0x0D, 0x00, 0x00, 0xDD, 0x12, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2F, 0x0D, 0x00, 0x00,
0xDD, 0x12, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x75, 0x13, 0x00, 0x00, 0x2B, 0x0D, 0x00, 0x00,
0x2B, 0x0D, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x78, 0x13, 0x00, 0x00, 0x2D, 0x0D, 0x00, 0x00, 0x2D, 0x0D, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7B, 0x13, 0x00, 0x00,
0x2F, 0x0D, 0x00, 0x00, 0x2F, 0x0D, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x99, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x14, 0x13, 0x00, 0x00, 0x1E, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9A, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xF6, 0x12, 0x00, 0x00,
0x99, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA0, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x28, 0x13, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA1, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x9A, 0x13, 0x00, 0x00, 0xA0, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC3, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x14, 0x13, 0x00, 0x00,
0x1E, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC4, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0xF6, 0x12, 0x00, 0x00, 0xC3, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xCA, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xCB, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xC4, 0x13, 0x00, 0x00,
0xCA, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xED, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x1E, 0x13, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xEE, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0xED, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x32, 0x13, 0x00, 0x00,
0x50, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF5, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xEE, 0x13, 0x00, 0x00, 0xF4, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x17, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1E, 0x13, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
0x17, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1E, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x32, 0x13, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x18, 0x14, 0x00, 0x00, 0x1E, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x41, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3C, 0x13, 0x00, 0x00,
0x46, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x42, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x1E, 0x13, 0x00, 0x00, 0x41, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x48, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00, 0x6E, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x49, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x42, 0x14, 0x00, 0x00,
0x48, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x6B, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x3C, 0x13, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6C, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x1E, 0x13, 0x00, 0x00, 0x6B, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x72, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00,
0x6E, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x73, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x6C, 0x14, 0x00, 0x00, 0x72, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x95, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x28, 0x13, 0x00, 0x00,
0x95, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x9C, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x5A, 0x13, 0x00, 0x00, 0x78, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x9D, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x96, 0x14, 0x00, 0x00, 0x9C, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xBF, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00,
0x50, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC0, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x28, 0x13, 0x00, 0x00, 0xBF, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xC6, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x5A, 0x13, 0x00, 0x00, 0x78, 0x13, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC7, 0x14, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xC0, 0x14, 0x00, 0x00,
0xC6, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xE6, 0x14, 0x00, 0x00, 0xCB, 0x13, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xE7, 0x14, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0xE6, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0xE8, 0x14, 0x00, 0x00, 0xE7, 0x14, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x07, 0x15, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x15, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x07, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x09, 0x15, 0x00, 0x00, 0x08, 0x15, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x28, 0x15, 0x00, 0x00,
0x73, 0x14, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x29, 0x15, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x28, 0x15, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00,
0x29, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x49, 0x15, 0x00, 0x00, 0xC7, 0x14, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x49, 0x15, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4B, 0x15, 0x00, 0x00, 0x4A, 0x15, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x87, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xCB, 0x13, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x88, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xA1, 0x13, 0x00, 0x00, 0x87, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x8A, 0x0E, 0x00, 0x00, 0x88, 0x0E, 0x00, 0x00,
0xE8, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
0x75, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0x8A, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9F, 0x0E, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA0, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xF5, 0x13, 0x00, 0x00, 0x9F, 0x0E, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00,
0xA0, 0x0E, 0x00, 0x00, 0x09, 0x15, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA8, 0x15, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0xA2, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB7, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x73, 0x14, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB8, 0x0E, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x49, 0x14, 0x00, 0x00,
0xB7, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xBA, 0x0E, 0x00, 0x00, 0xB8, 0x0E, 0x00, 0x00, 0x2A, 0x15, 0x00, 0x00,
0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0xDB, 0x15, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xBA, 0x0E, 0x00, 0x00,
0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xCF, 0x0E, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xC7, 0x14, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD0, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x9D, 0x14, 0x00, 0x00, 0xCF, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD2, 0x0E, 0x00, 0x00, 0xD0, 0x0E, 0x00, 0x00,
0x4B, 0x15, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0E, 0x16, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00,
0xD2, 0x0E, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x3C, 0x16, 0x00, 0x00,
0x75, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x3E, 0x16, 0x00, 0x00, 0x3C, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00,
0x3E, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x41, 0x16, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6F, 0x16, 0x00, 0x00,
0xA8, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x71, 0x16, 0x00, 0x00, 0x6F, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x73, 0x16, 0x00, 0x00,
0x71, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x74, 0x16, 0x00, 0x00, 0x73, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xA2, 0x16, 0x00, 0x00,
0xDB, 0x15, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xA4, 0x16, 0x00, 0x00, 0xA2, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xA6, 0x16, 0x00, 0x00,
0xA4, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA7, 0x16, 0x00, 0x00, 0xA6, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD5, 0x16, 0x00, 0x00,
0x0E, 0x16, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xD7, 0x16, 0x00, 0x00, 0xD5, 0x16, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xD9, 0x16, 0x00, 0x00,
0xD7, 0x16, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xDA, 0x16, 0x00, 0x00, 0xD9, 0x16, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF6, 0x0E, 0x00, 0x00,
0xAF, 0x08, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFC, 0x0E, 0x00, 0x00, 0x41, 0x16, 0x00, 0x00, 0xF6, 0x0E, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x0F, 0x00, 0x00,
0x74, 0x16, 0x00, 0x00, 0xF6, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0E, 0x0F, 0x00, 0x00, 0xA7, 0x16, 0x00, 0x00,
0xF6, 0x0E, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x17, 0x0F, 0x00, 0x00, 0xDA, 0x16, 0x00, 0x00, 0xF6, 0x0E, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1D, 0x0F, 0x00, 0x00,
0x42, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x1D, 0x0F, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x21, 0x0F, 0x00, 0x00, 0x42, 0x0C, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x22, 0x0F, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x21, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x23, 0x0F, 0x00, 0x00, 0x1E, 0x0F, 0x00, 0x00,
0x22, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2A, 0x0F, 0x00, 0x00, 0x1D, 0x0F, 0x00, 0x00, 0x22, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x31, 0x0F, 0x00, 0x00,
0x1E, 0x0F, 0x00, 0x00, 0x21, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x36, 0x0F, 0x00, 0x00, 0x1D, 0x0F, 0x00, 0x00,
0x21, 0x0F, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3A, 0x0F, 0x00, 0x00, 0xCB, 0x13, 0x00, 0x00, 0xA1, 0x13, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x0F, 0x00, 0x00,
0xF2, 0x06, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x3B, 0x0F, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x17, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x03, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x05, 0x17, 0x00, 0x00, 0x04, 0x17, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x0F, 0x00, 0x00,
0x23, 0x0F, 0x00, 0x00, 0x05, 0x17, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x42, 0x0F, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00,
0xF5, 0x13, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x43, 0x0F, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00, 0x42, 0x0F, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0E, 0x17, 0x00, 0x00,
0x43, 0x0F, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x0F, 0x17, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x0E, 0x17, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x17, 0x00, 0x00,
0x0F, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x46, 0x0F, 0x00, 0x00, 0x2A, 0x0F, 0x00, 0x00, 0x10, 0x17, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4A, 0x0F, 0x00, 0x00,
0x73, 0x14, 0x00, 0x00, 0x49, 0x14, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4B, 0x0F, 0x00, 0x00, 0xF2, 0x06, 0x00, 0x00,
0x4A, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x19, 0x17, 0x00, 0x00, 0x4B, 0x0F, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0x19, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1B, 0x17, 0x00, 0x00, 0x1A, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4E, 0x0F, 0x00, 0x00, 0x31, 0x0F, 0x00, 0x00,
0x1B, 0x17, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x52, 0x0F, 0x00, 0x00, 0xC7, 0x14, 0x00, 0x00, 0x9D, 0x14, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x0F, 0x00, 0x00,
0xF2, 0x06, 0x00, 0x00, 0x52, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x24, 0x17, 0x00, 0x00, 0x53, 0x0F, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x25, 0x17, 0x00, 0x00,
0x72, 0x00, 0x00, 0x00, 0x24, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x25, 0x17, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x0F, 0x00, 0x00,
0x36, 0x0F, 0x00, 0x00, 0x26, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5C, 0x0F, 0x00, 0x00, 0xFC, 0x0E, 0x00, 0x00,
0x3E, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x65, 0x0F, 0x00, 0x00, 0x05, 0x0F, 0x00, 0x00, 0x46, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x77, 0x0F, 0x00, 0x00,
0x0E, 0x0F, 0x00, 0x00, 0x4E, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x65, 0x0F, 0x00, 0x00,
0x77, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x7A, 0x0F, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x3E, 0x0F, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00,
0x17, 0x0F, 0x00, 0x00, 0x56, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x93, 0x0F, 0x00, 0x00, 0x5C, 0x0F, 0x00, 0x00,
0x92, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x95, 0x0F, 0x00, 0x00, 0x93, 0x0F, 0x00, 0x00, 0x46, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB0, 0x0F, 0x00, 0x00,
0x93, 0x0F, 0x00, 0x00, 0x4E, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xCB, 0x0F, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00,
0x56, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x33, 0x19, 0x00, 0x00, 0x5C, 0x0F, 0x00, 0x00, 0x65, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x19, 0x00, 0x00,
0x33, 0x19, 0x00, 0x00, 0x77, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x35, 0x19, 0x00, 0x00, 0x34, 0x19, 0x00, 0x00,
0x92, 0x0F, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF5, 0x0F, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x35, 0x19, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF7, 0x0F, 0x00, 0x00,
0xF5, 0x0F, 0x00, 0x00, 0x7A, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0xF7, 0x0F, 0x00, 0x00,
0x95, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFB, 0x0F, 0x00, 0x00, 0xF9, 0x0F, 0x00, 0x00, 0xB0, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00,
0xFB, 0x0F, 0x00, 0x00, 0xCB, 0x0F, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x3D, 0x17, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00,
0x82, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x3E, 0x17, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x00, 0x3D, 0x17, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x3F, 0x17, 0x00, 0x00, 0x3E, 0x17, 0x00, 0x00,
0x7F, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x42, 0x17, 0x00, 0x00,
0x3F, 0x17, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x44, 0x17, 0x00, 0x00, 0x42, 0x17, 0x00, 0x00, 0xFD, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00,
0x44, 0x17, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x47, 0x17, 0x00, 0x00, 0x3F, 0x17, 0x00, 0x00,
0x46, 0x17, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x36, 0x19, 0x00, 0x00, 0xF3, 0x12, 0x00, 0x00, 0x11, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00,
0x5C, 0x0F, 0x00, 0x00, 0x36, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0B, 0x10, 0x00, 0x00, 0xFD, 0x12, 0x00, 0x00,
0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0C, 0x10, 0x00, 0x00, 0x07, 0x10, 0x00, 0x00, 0x0B, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,
0x2F, 0x13, 0x00, 0x00, 0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x11, 0x10, 0x00, 0x00, 0x0C, 0x10, 0x00, 0x00,
0x10, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x15, 0x10, 0x00, 0x00, 0x39, 0x13, 0x00, 0x00, 0x77, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0x10, 0x00, 0x00,
0x11, 0x10, 0x00, 0x00, 0x15, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x00, 0x6B, 0x13, 0x00, 0x00,
0x77, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1B, 0x10, 0x00, 0x00, 0x16, 0x10, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x00, 0x00,
0x57, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x1B, 0x10, 0x00, 0x00,
0x1F, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x24, 0x10, 0x00, 0x00, 0x75, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x25, 0x10, 0x00, 0x00,
0x20, 0x10, 0x00, 0x00, 0x24, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00, 0x1B, 0x13, 0x00, 0x00,
0x7A, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2A, 0x10, 0x00, 0x00, 0x25, 0x10, 0x00, 0x00, 0x29, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2E, 0x10, 0x00, 0x00,
0x25, 0x13, 0x00, 0x00, 0x95, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2F, 0x10, 0x00, 0x00, 0x2A, 0x10, 0x00, 0x00,
0x2E, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x33, 0x10, 0x00, 0x00, 0x43, 0x13, 0x00, 0x00, 0xB0, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x34, 0x10, 0x00, 0x00,
0x2F, 0x10, 0x00, 0x00, 0x33, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x38, 0x10, 0x00, 0x00, 0x4D, 0x13, 0x00, 0x00,
0xCB, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x39, 0x10, 0x00, 0x00, 0x34, 0x10, 0x00, 0x00, 0x38, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3B, 0x10, 0x00, 0x00,
0x39, 0x10, 0x00, 0x00, 0x47, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x55, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x3B, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x37, 0x19, 0x00, 0x00, 0xF6, 0x12, 0x00, 0x00, 0x14, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x45, 0x10, 0x00, 0x00,
0x5C, 0x0F, 0x00, 0x00, 0x37, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x49, 0x10, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00,
0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4A, 0x10, 0x00, 0x00, 0x45, 0x10, 0x00, 0x00, 0x49, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4E, 0x10, 0x00, 0x00,
0x32, 0x13, 0x00, 0x00, 0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4F, 0x10, 0x00, 0x00, 0x4A, 0x10, 0x00, 0x00,
0x4E, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x53, 0x10, 0x00, 0x00, 0x3C, 0x13, 0x00, 0x00, 0x77, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x54, 0x10, 0x00, 0x00,
0x4F, 0x10, 0x00, 0x00, 0x53, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00, 0x6E, 0x13, 0x00, 0x00,
0x77, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x59, 0x10, 0x00, 0x00, 0x54, 0x10, 0x00, 0x00, 0x58, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5D, 0x10, 0x00, 0x00,
0x5A, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5E, 0x10, 0x00, 0x00, 0x59, 0x10, 0x00, 0x00,
0x5D, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x62, 0x10, 0x00, 0x00, 0x78, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x63, 0x10, 0x00, 0x00,
0x5E, 0x10, 0x00, 0x00, 0x62, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x67, 0x10, 0x00, 0x00, 0x1E, 0x13, 0x00, 0x00,
0x7A, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x68, 0x10, 0x00, 0x00, 0x63, 0x10, 0x00, 0x00, 0x67, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6C, 0x10, 0x00, 0x00,
0x28, 0x13, 0x00, 0x00, 0x95, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6D, 0x10, 0x00, 0x00, 0x68, 0x10, 0x00, 0x00,
0x6C, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x71, 0x10, 0x00, 0x00, 0x46, 0x13, 0x00, 0x00, 0xB0, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x72, 0x10, 0x00, 0x00,
0x6D, 0x10, 0x00, 0x00, 0x71, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x76, 0x10, 0x00, 0x00, 0x50, 0x13, 0x00, 0x00,
0xCB, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x77, 0x10, 0x00, 0x00, 0x72, 0x10, 0x00, 0x00, 0x76, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x79, 0x10, 0x00, 0x00,
0x77, 0x10, 0x00, 0x00, 0x47, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x63, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0x79, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x38, 0x19, 0x00, 0x00, 0xF9, 0x12, 0x00, 0x00, 0x17, 0x13, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00,
0x5C, 0x0F, 0x00, 0x00, 0x38, 0x19, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00, 0x03, 0x13, 0x00, 0x00,
0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x88, 0x10, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00, 0x87, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8C, 0x10, 0x00, 0x00,
0x35, 0x13, 0x00, 0x00, 0x65, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x8D, 0x10, 0x00, 0x00, 0x88, 0x10, 0x00, 0x00,
0x8C, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x91, 0x10, 0x00, 0x00, 0x3F, 0x13, 0x00, 0x00, 0x77, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x10, 0x00, 0x00,
0x8D, 0x10, 0x00, 0x00, 0x91, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x96, 0x10, 0x00, 0x00, 0x71, 0x13, 0x00, 0x00,
0x77, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x97, 0x10, 0x00, 0x00, 0x92, 0x10, 0x00, 0x00, 0x96, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9B, 0x10, 0x00, 0x00,
0x5D, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x9C, 0x10, 0x00, 0x00, 0x97, 0x10, 0x00, 0x00,
0x9B, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA0, 0x10, 0x00, 0x00, 0x7B, 0x13, 0x00, 0x00, 0x92, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA1, 0x10, 0x00, 0x00,
0x9C, 0x10, 0x00, 0x00, 0xA0, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00, 0x21, 0x13, 0x00, 0x00,
0x7A, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA6, 0x10, 0x00, 0x00, 0xA1, 0x10, 0x00, 0x00, 0xA5, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAA, 0x10, 0x00, 0x00,
0x2B, 0x13, 0x00, 0x00, 0x95, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xAB, 0x10, 0x00, 0x00, 0xA6, 0x10, 0x00, 0x00,
0xAA, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xAF, 0x10, 0x00, 0x00, 0x49, 0x13, 0x00, 0x00, 0xB0, 0x0F, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB0, 0x10, 0x00, 0x00,
0xAB, 0x10, 0x00, 0x00, 0xAF, 0x10, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB4, 0x10, 0x00, 0x00, 0x53, 0x13, 0x00, 0x00,
0xCB, 0x0F, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB5, 0x10, 0x00, 0x00, 0xB0, 0x10, 0x00, 0x00, 0xB4, 0x10, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xB7, 0x10, 0x00, 0x00,
0xB5, 0x10, 0x00, 0x00, 0x47, 0x17, 0x00, 0x00, 0x0C, 0x00, 0x08, 0x00,
0x06, 0x00, 0x00, 0x00, 0x71, 0x17, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x00, 0x00, 0xB7, 0x10, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xC6, 0x08, 0x00, 0x00,
0xC7, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xC7, 0x08, 0x00, 0x00, 0x55, 0x17, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xC6, 0x08, 0x00, 0x00, 0xC9, 0x08, 0x00, 0x00,
0xB8, 0x08, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xC9, 0x08, 0x00, 0x00, 0x63, 0x17, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xC6, 0x08, 0x00, 0x00, 0xCB, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00,
0xEA, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xCB, 0x08, 0x00, 0x00,
0x71, 0x17, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x97, 0x00, 0x00, 0x00,
0xCC, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x4F, 0x00, 0x08, 0x00,
0x2C, 0x00, 0x00, 0x00, 0xCD, 0x08, 0x00, 0x00, 0xCC, 0x08, 0x00, 0x00,
0xCC, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x06, 0x00, 0x2C, 0x00, 0x00, 0x00,
0xCE, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
0xCD, 0x08, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD0, 0x08, 0x00, 0x00, 0xCE, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xC7, 0x08, 0x00, 0x00, 0xD0, 0x08, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD2, 0x08, 0x00, 0x00,
0xCE, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xC9, 0x08, 0x00, 0x00, 0xD2, 0x08, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD4, 0x08, 0x00, 0x00, 0xCE, 0x08, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xCB, 0x08, 0x00, 0x00,
0xD4, 0x08, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xC6, 0x08, 0x00, 0x00,
0xD6, 0x08, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0xD5, 0x08, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xD6, 0x08, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
};

View File

@@ -0,0 +1,433 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 6457
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %xe_frag_color
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 420
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
OpSourceExtension "GL_GOOGLE_include_directive"
OpName %main "main"
OpName %xe_texture "xe_texture"
OpName %gl_FragCoord "gl_FragCoord"
OpName %XeCasSharpenConstants "XeCasSharpenConstants"
OpMemberName %XeCasSharpenConstants 0 "xe_cas_output_offset"
OpMemberName %XeCasSharpenConstants 1 "xe_cas_sharpness_post_setup"
OpName %_ ""
OpName %xe_frag_color "xe_frag_color"
OpDecorate %xe_texture DescriptorSet 0
OpDecorate %xe_texture Binding 0
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %XeCasSharpenConstants 0 Offset 16
OpMemberDecorate %XeCasSharpenConstants 1 Offset 24
OpDecorate %XeCasSharpenConstants Block
OpDecorate %xe_frag_color Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%uint = OpTypeInt 32 0
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%v3float = OpTypeVector %float 3
%v2uint = OpTypeVector %uint 2
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%uint_1 = OpConstant %uint 1
%uint_532432441 = OpConstant %uint 532432441
%uint_2129690299 = OpConstant %uint 2129690299
%uint_2129764351 = OpConstant %uint 2129764351
%float_2 = OpConstant %float 2
%143 = OpTypeImage %float 2D 0 0 0 1 Unknown
%144 = OpTypeSampledImage %143
%_ptr_UniformConstant_144 = OpTypePointer UniformConstant %144
%xe_texture = OpVariable %_ptr_UniformConstant_144 UniformConstant
%int_0 = OpConstant %int 0
%v4float = OpTypeVector %float 4
%int_n1 = OpConstant %int -1
%181 = OpConstantComposite %v2int %int_0 %int_n1
%int_1 = OpConstant %int 1
%188 = OpConstantComposite %v2int %int_1 %int_n1
%194 = OpConstantComposite %v2int %int_n1 %int_0
%204 = OpConstantComposite %v2int %int_1 %int_0
%210 = OpConstantComposite %v2int %int_n1 %int_1
%216 = OpConstantComposite %v2int %int_0 %int_1
%222 = OpConstantComposite %v2int %int_1 %int_1
%uint_0 = OpConstant %uint 0
%uint_2 = OpConstant %uint 2
%v2float = OpTypeVector %float 2
%int_2 = OpConstant %int 2
%712 = OpConstantComposite %v2int %int_2 %int_0
%734 = OpConstantComposite %v2int %int_0 %int_2
%745 = OpConstantComposite %v2int %int_2 %int_1
%751 = OpConstantComposite %v2int %int_1 %int_2
%float_0_03125 = OpConstant %float 0.03125
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%XeCasSharpenConstants = OpTypeStruct %v2int %float
%_ptr_PushConstant_XeCasSharpenConstants = OpTypePointer PushConstant %XeCasSharpenConstants
%_ = OpVariable %_ptr_PushConstant_XeCasSharpenConstants PushConstant
%_ptr_PushConstant_v2int = OpTypePointer PushConstant %v2int
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
%_ptr_Output_v4float = OpTypePointer Output %v4float
%xe_frag_color = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%uint_3 = OpConstant %uint 3
%main = OpFunction %void None %3
%5 = OpLabel
%2205 = OpLoad %v4float %gl_FragCoord
%2206 = OpVectorShuffle %v2float %2205 %2205 0 1
%2207 = OpConvertFToS %v2int %2206
%2212 = OpAccessChain %_ptr_PushConstant_v2int %_ %int_0
%2213 = OpLoad %v2int %2212
%2214 = OpISub %v2int %2207 %2213
%2215 = OpBitcast %v2uint %2214
%2221 = OpAccessChain %_ptr_PushConstant_float %_ %int_1
%2222 = OpLoad %float %2221
%2223 = OpBitcast %uint %2222
OpBranch %2768
%2768 = OpLabel
%3119 = OpConvertUToF %v2float %2215
%3135 = OpExtInst %v2float %1 Floor %3119
%3138 = OpFSub %v2float %3119 %3135
%3140 = OpConvertFToS %v2int %3135
%3145 = OpIAdd %v2int %3140 %181
%4735 = OpLoad %144 %xe_texture
%4737 = OpImage %143 %4735
%4738 = OpImageFetch %v4float %4737 %3145 Lod %int_0
%3148 = OpIAdd %v2int %3140 %194
%4744 = OpImage %143 %4735
%4745 = OpImageFetch %v4float %4744 %3148 Lod %int_0
%4751 = OpImage %143 %4735
%4752 = OpImageFetch %v4float %4751 %3140 Lod %int_0
%3153 = OpIAdd %v2int %3140 %188
%4758 = OpImage %143 %4735
%4759 = OpImageFetch %v4float %4758 %3153 Lod %int_0
%3159 = OpIAdd %v2int %3140 %204
%4772 = OpImage %143 %4735
%4773 = OpImageFetch %v4float %4772 %3159 Lod %int_0
%3162 = OpIAdd %v2int %3140 %712
%4779 = OpImage %143 %4735
%4780 = OpImageFetch %v4float %4779 %3162 Lod %int_0
%3165 = OpIAdd %v2int %3140 %210
%4786 = OpImage %143 %4735
%4787 = OpImageFetch %v4float %4786 %3165 Lod %int_0
%3168 = OpIAdd %v2int %3140 %216
%4793 = OpImage %143 %4735
%4794 = OpImageFetch %v4float %4793 %3168 Lod %int_0
%3174 = OpIAdd %v2int %3140 %734
%4807 = OpImage %143 %4735
%4808 = OpImageFetch %v4float %4807 %3174 Lod %int_0
%3177 = OpIAdd %v2int %3140 %222
%4814 = OpImage %143 %4735
%4815 = OpImageFetch %v4float %4814 %3177 Lod %int_0
%3180 = OpIAdd %v2int %3140 %745
%4821 = OpImage %143 %4735
%4822 = OpImageFetch %v4float %4821 %3180 Lod %int_0
%3183 = OpIAdd %v2int %3140 %751
%4828 = OpImage %143 %4735
%4829 = OpImageFetch %v4float %4828 %3183 Lod %int_0
%3202 = OpCompositeExtract %float %4738 0
%3204 = OpCompositeExtract %float %4738 1
%3206 = OpCompositeExtract %float %4738 2
%4851 = OpFMul %float %3202 %3202
%4854 = OpFMul %float %3204 %3204
%4857 = OpFMul %float %3206 %3206
%3215 = OpCompositeExtract %float %4759 0
%3217 = OpCompositeExtract %float %4759 1
%3219 = OpCompositeExtract %float %4759 2
%4861 = OpFMul %float %3215 %3215
%4864 = OpFMul %float %3217 %3217
%4867 = OpFMul %float %3219 %3219
%3241 = OpCompositeExtract %float %4745 0
%3243 = OpCompositeExtract %float %4745 1
%3245 = OpCompositeExtract %float %4745 2
%4881 = OpFMul %float %3241 %3241
%4884 = OpFMul %float %3243 %3243
%4887 = OpFMul %float %3245 %3245
%3254 = OpCompositeExtract %float %4752 0
%3256 = OpCompositeExtract %float %4752 1
%3258 = OpCompositeExtract %float %4752 2
%4891 = OpFMul %float %3254 %3254
%4894 = OpFMul %float %3256 %3256
%4897 = OpFMul %float %3258 %3258
%3267 = OpCompositeExtract %float %4773 0
%3269 = OpCompositeExtract %float %4773 1
%3271 = OpCompositeExtract %float %4773 2
%4901 = OpFMul %float %3267 %3267
%4904 = OpFMul %float %3269 %3269
%4907 = OpFMul %float %3271 %3271
%3280 = OpCompositeExtract %float %4780 0
%3282 = OpCompositeExtract %float %4780 1
%3284 = OpCompositeExtract %float %4780 2
%4911 = OpFMul %float %3280 %3280
%4914 = OpFMul %float %3282 %3282
%4917 = OpFMul %float %3284 %3284
%3293 = OpCompositeExtract %float %4787 0
%3295 = OpCompositeExtract %float %4787 1
%3297 = OpCompositeExtract %float %4787 2
%4921 = OpFMul %float %3293 %3293
%4924 = OpFMul %float %3295 %3295
%4927 = OpFMul %float %3297 %3297
%3306 = OpCompositeExtract %float %4794 0
%3308 = OpCompositeExtract %float %4794 1
%3310 = OpCompositeExtract %float %4794 2
%4931 = OpFMul %float %3306 %3306
%4934 = OpFMul %float %3308 %3308
%4937 = OpFMul %float %3310 %3310
%3319 = OpCompositeExtract %float %4815 0
%3321 = OpCompositeExtract %float %4815 1
%3323 = OpCompositeExtract %float %4815 2
%4941 = OpFMul %float %3319 %3319
%4944 = OpFMul %float %3321 %3321
%4947 = OpFMul %float %3323 %3323
%3332 = OpCompositeExtract %float %4822 0
%3334 = OpCompositeExtract %float %4822 1
%3336 = OpCompositeExtract %float %4822 2
%4951 = OpFMul %float %3332 %3332
%4954 = OpFMul %float %3334 %3334
%4957 = OpFMul %float %3336 %3336
%3358 = OpCompositeExtract %float %4808 0
%3360 = OpCompositeExtract %float %4808 1
%3362 = OpCompositeExtract %float %4808 2
%4971 = OpFMul %float %3358 %3358
%4974 = OpFMul %float %3360 %3360
%4977 = OpFMul %float %3362 %3362
%3371 = OpCompositeExtract %float %4829 0
%3373 = OpCompositeExtract %float %4829 1
%3375 = OpCompositeExtract %float %4829 2
%4981 = OpFMul %float %3371 %3371
%4984 = OpFMul %float %3373 %3373
%4987 = OpFMul %float %3375 %3375
%5017 = OpExtInst %float %1 FMin %4884 %4894
%5018 = OpExtInst %float %1 FMin %4854 %5017
%5024 = OpExtInst %float %1 FMin %4904 %4934
%5025 = OpExtInst %float %1 FMin %5018 %5024
%5059 = OpExtInst %float %1 FMax %4884 %4894
%5060 = OpExtInst %float %1 FMax %4854 %5059
%5066 = OpExtInst %float %1 FMax %4904 %4934
%5067 = OpExtInst %float %1 FMax %5060 %5066
%5101 = OpExtInst %float %1 FMin %4894 %4904
%5102 = OpExtInst %float %1 FMin %4864 %5101
%5108 = OpExtInst %float %1 FMin %4914 %4944
%5109 = OpExtInst %float %1 FMin %5102 %5108
%5143 = OpExtInst %float %1 FMax %4894 %4904
%5144 = OpExtInst %float %1 FMax %4864 %5143
%5150 = OpExtInst %float %1 FMax %4914 %4944
%5151 = OpExtInst %float %1 FMax %5144 %5150
%5185 = OpExtInst %float %1 FMin %4924 %4934
%5186 = OpExtInst %float %1 FMin %4894 %5185
%5192 = OpExtInst %float %1 FMin %4944 %4974
%5193 = OpExtInst %float %1 FMin %5186 %5192
%5227 = OpExtInst %float %1 FMax %4924 %4934
%5228 = OpExtInst %float %1 FMax %4894 %5227
%5234 = OpExtInst %float %1 FMax %4944 %4974
%5235 = OpExtInst %float %1 FMax %5228 %5234
%5269 = OpExtInst %float %1 FMin %4934 %4944
%5270 = OpExtInst %float %1 FMin %4904 %5269
%5276 = OpExtInst %float %1 FMin %4954 %4984
%5277 = OpExtInst %float %1 FMin %5270 %5276
%5311 = OpExtInst %float %1 FMax %4934 %4944
%5312 = OpExtInst %float %1 FMax %4904 %5311
%5318 = OpExtInst %float %1 FMax %4954 %4984
%5319 = OpExtInst %float %1 FMax %5312 %5318
%5350 = OpBitcast %uint %5067
%5351 = OpISub %uint %uint_2129690299 %5350
%5352 = OpBitcast %float %5351
%5383 = OpBitcast %uint %5151
%5384 = OpISub %uint %uint_2129690299 %5383
%5385 = OpBitcast %float %5384
%5416 = OpBitcast %uint %5235
%5417 = OpISub %uint %uint_2129690299 %5416
%5418 = OpBitcast %float %5417
%5449 = OpBitcast %uint %5319
%5450 = OpISub %uint %uint_2129690299 %5449
%5451 = OpBitcast %float %5450
%3719 = OpFSub %float %float_1 %5067
%3720 = OpExtInst %float %1 FMin %5025 %3719
%3722 = OpFMul %float %3720 %5352
%5493 = OpExtInst %float %1 FClamp %3722 %float_0 %float_1
%3743 = OpFSub %float %float_1 %5151
%3744 = OpExtInst %float %1 FMin %5109 %3743
%3746 = OpFMul %float %3744 %5385
%5544 = OpExtInst %float %1 FClamp %3746 %float_0 %float_1
%3767 = OpFSub %float %float_1 %5235
%3768 = OpExtInst %float %1 FMin %5193 %3767
%3770 = OpFMul %float %3768 %5418
%5595 = OpExtInst %float %1 FClamp %3770 %float_0 %float_1
%3791 = OpFSub %float %float_1 %5319
%3792 = OpExtInst %float %1 FMin %5277 %3791
%3794 = OpFMul %float %3792 %5451
%5646 = OpExtInst %float %1 FClamp %3794 %float_0 %float_1
%5692 = OpBitcast %uint %5493
%5694 = OpShiftRightLogical %uint %5692 %uint_1
%5696 = OpIAdd %uint %5694 %uint_532432441
%5697 = OpBitcast %float %5696
%5743 = OpBitcast %uint %5544
%5745 = OpShiftRightLogical %uint %5743 %uint_1
%5747 = OpIAdd %uint %5745 %uint_532432441
%5748 = OpBitcast %float %5747
%5794 = OpBitcast %uint %5595
%5796 = OpShiftRightLogical %uint %5794 %uint_1
%5798 = OpIAdd %uint %5796 %uint_532432441
%5799 = OpBitcast %float %5798
%5845 = OpBitcast %uint %5646
%5847 = OpShiftRightLogical %uint %5845 %uint_1
%5849 = OpIAdd %uint %5847 %uint_532432441
%5850 = OpBitcast %float %5849
%3830 = OpBitcast %float %2223
%3836 = OpFMul %float %5697 %3830
%3845 = OpFMul %float %5748 %3830
%3854 = OpFMul %float %5799 %3830
%3863 = OpFMul %float %5850 %3830
%3869 = OpCompositeExtract %float %3138 0
%3870 = OpFSub %float %float_1 %3869
%3873 = OpCompositeExtract %float %3138 1
%3874 = OpFSub %float %float_1 %3873
%3875 = OpFMul %float %3870 %3874
%3882 = OpFMul %float %3869 %3874
%3889 = OpFMul %float %3870 %3873
%3894 = OpFMul %float %3869 %3873
%3898 = OpFSub %float %5067 %5025
%3899 = OpFAdd %float %float_0_03125 %3898
%5891 = OpBitcast %uint %3899
%5892 = OpISub %uint %uint_2129690299 %5891
%5893 = OpBitcast %float %5892
%3902 = OpFMul %float %3875 %5893
%3906 = OpFSub %float %5151 %5109
%3907 = OpFAdd %float %float_0_03125 %3906
%5902 = OpBitcast %uint %3907
%5903 = OpISub %uint %uint_2129690299 %5902
%5904 = OpBitcast %float %5903
%3910 = OpFMul %float %3882 %5904
%3914 = OpFSub %float %5235 %5193
%3915 = OpFAdd %float %float_0_03125 %3914
%5913 = OpBitcast %uint %3915
%5914 = OpISub %uint %uint_2129690299 %5913
%5915 = OpBitcast %float %5914
%3918 = OpFMul %float %3889 %5915
%3922 = OpFSub %float %5319 %5277
%3923 = OpFAdd %float %float_0_03125 %3922
%5924 = OpBitcast %uint %3923
%5925 = OpISub %uint %uint_2129690299 %5924
%5926 = OpBitcast %float %5925
%3926 = OpFMul %float %3894 %5926
%3932 = OpFMul %float %3836 %3902
%3941 = OpFMul %float %3845 %3910
%3959 = OpFMul %float %3854 %3918
%3960 = OpFAdd %float %3941 %3959
%3962 = OpFAdd %float %3960 %3902
%3986 = OpFMul %float %3863 %3926
%3987 = OpFAdd %float %3932 %3986
%3989 = OpFAdd %float %3987 %3910
%4016 = OpFAdd %float %3987 %3918
%4043 = OpFAdd %float %3960 %3926
%6451 = OpFAdd %float %3932 %3941
%6452 = OpFAdd %float %6451 %3959
%6453 = OpFAdd %float %6452 %3986
%4085 = OpFMul %float %float_2 %6453
%4087 = OpFAdd %float %4085 %3962
%4089 = OpFAdd %float %4087 %3989
%4091 = OpFAdd %float %4089 %4016
%4093 = OpFAdd %float %4091 %4043
%5949 = OpBitcast %uint %4093
%5950 = OpISub %uint %uint_2129764351 %5949
%5951 = OpBitcast %float %5950
%5954 = OpFNegate %float %5951
%5956 = OpFMul %float %5954 %4093
%5958 = OpFAdd %float %5956 %float_2
%5959 = OpFMul %float %5951 %5958
%6454 = OpFAdd %float %4851 %4881
%4103 = OpFMul %float %3932 %6454
%4107 = OpFMul %float %4861 %3941
%4108 = OpFAdd %float %4103 %4107
%4112 = OpFMul %float %4911 %3941
%4113 = OpFAdd %float %4108 %4112
%4117 = OpFMul %float %4921 %3959
%4118 = OpFAdd %float %4113 %4117
%4122 = OpFMul %float %4971 %3959
%4123 = OpFAdd %float %4118 %4122
%4127 = OpFMul %float %4951 %3986
%4128 = OpFAdd %float %4123 %4127
%4132 = OpFMul %float %4981 %3986
%4133 = OpFAdd %float %4128 %4132
%4137 = OpFMul %float %4891 %3962
%4138 = OpFAdd %float %4133 %4137
%4142 = OpFMul %float %4901 %3989
%4143 = OpFAdd %float %4138 %4142
%4147 = OpFMul %float %4931 %4016
%4148 = OpFAdd %float %4143 %4147
%4152 = OpFMul %float %4941 %4043
%4153 = OpFAdd %float %4148 %4152
%4155 = OpFMul %float %4153 %5959
%5973 = OpExtInst %float %1 FClamp %4155 %float_0 %float_1
%6455 = OpFAdd %float %4854 %4884
%4165 = OpFMul %float %3932 %6455
%4169 = OpFMul %float %4864 %3941
%4170 = OpFAdd %float %4165 %4169
%4174 = OpFMul %float %4914 %3941
%4175 = OpFAdd %float %4170 %4174
%4179 = OpFMul %float %4924 %3959
%4180 = OpFAdd %float %4175 %4179
%4184 = OpFMul %float %4974 %3959
%4185 = OpFAdd %float %4180 %4184
%4189 = OpFMul %float %4954 %3986
%4190 = OpFAdd %float %4185 %4189
%4194 = OpFMul %float %4984 %3986
%4195 = OpFAdd %float %4190 %4194
%4199 = OpFMul %float %4894 %3962
%4200 = OpFAdd %float %4195 %4199
%4204 = OpFMul %float %4904 %3989
%4205 = OpFAdd %float %4200 %4204
%4209 = OpFMul %float %4934 %4016
%4210 = OpFAdd %float %4205 %4209
%4214 = OpFMul %float %4944 %4043
%4215 = OpFAdd %float %4210 %4214
%4217 = OpFMul %float %4215 %5959
%5987 = OpExtInst %float %1 FClamp %4217 %float_0 %float_1
%6456 = OpFAdd %float %4857 %4887
%4227 = OpFMul %float %3932 %6456
%4231 = OpFMul %float %4867 %3941
%4232 = OpFAdd %float %4227 %4231
%4236 = OpFMul %float %4917 %3941
%4237 = OpFAdd %float %4232 %4236
%4241 = OpFMul %float %4927 %3959
%4242 = OpFAdd %float %4237 %4241
%4246 = OpFMul %float %4977 %3959
%4247 = OpFAdd %float %4242 %4246
%4251 = OpFMul %float %4957 %3986
%4252 = OpFAdd %float %4247 %4251
%4256 = OpFMul %float %4987 %3986
%4257 = OpFAdd %float %4252 %4256
%4261 = OpFMul %float %4897 %3962
%4262 = OpFAdd %float %4257 %4261
%4266 = OpFMul %float %4907 %3989
%4267 = OpFAdd %float %4262 %4266
%4271 = OpFMul %float %4937 %4016
%4272 = OpFAdd %float %4267 %4271
%4276 = OpFMul %float %4947 %4043
%4277 = OpFAdd %float %4272 %4276
%4279 = OpFMul %float %4277 %5959
%6001 = OpExtInst %float %1 FClamp %4279 %float_0 %float_1
%2247 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_0
OpStore %2247 %5973
%2249 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_1
OpStore %2249 %5987
%2251 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_2
OpStore %2251 %6001
%2252 = OpLoad %v4float %xe_frag_color
%2253 = OpVectorShuffle %v3float %2252 %2252 0 1 2
%2254 = OpExtInst %v3float %1 Sqrt %2253
%2256 = OpCompositeExtract %float %2254 0
OpStore %2247 %2256
%2258 = OpCompositeExtract %float %2254 1
OpStore %2249 %2258
%2260 = OpCompositeExtract %float %2254 2
OpStore %2251 %2260
%2262 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_3
OpStore %2262 %float_1
OpReturn
OpFunctionEnd

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,797 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 4702
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %xe_frag_color %gl_FragCoord
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 420
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
OpSourceExtension "GL_GOOGLE_include_directive"
OpName %main "main"
OpName %xe_texture "xe_texture"
OpName %XeFsrEasuConstants "XeFsrEasuConstants"
OpMemberName %XeFsrEasuConstants 0 "xe_fsr_easu_input_output_size_ratio"
OpMemberName %XeFsrEasuConstants 1 "xe_fsr_easu_input_size_inv"
OpName %_ ""
OpName %xe_frag_color "xe_frag_color"
OpName %gl_FragCoord "gl_FragCoord"
OpDecorate %xe_texture DescriptorSet 0
OpDecorate %xe_texture Binding 0
OpMemberDecorate %XeFsrEasuConstants 0 Offset 16
OpMemberDecorate %XeFsrEasuConstants 1 Offset 24
OpDecorate %XeFsrEasuConstants Block
OpDecorate %xe_frag_color Location 0
OpDecorate %gl_FragCoord BuiltIn FragCoord
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v2float = OpTypeVector %float 2
%v3float = OpTypeVector %float 3
%v4float = OpTypeVector %float 4
%uint = OpTypeInt 32 0
%bool = OpTypeBool
%v2uint = OpTypeVector %uint 2
%v4uint = OpTypeVector %uint 4
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%uint_2129690299 = OpConstant %uint 2129690299
%uint_1597275508 = OpConstant %uint 1597275508
%uint_1 = OpConstant %uint 1
%185 = OpTypeImage %float 2D 0 0 0 1 Unknown
%186 = OpTypeSampledImage %185
%_ptr_UniformConstant_186 = OpTypePointer UniformConstant %186
%xe_texture = OpVariable %_ptr_UniformConstant_186 UniformConstant
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%int_2 = OpConstant %int 2
%uint_0 = OpConstant %uint 0
%float_0_400000006 = OpConstant %float 0.400000006
%float_n1 = OpConstant %float -1
%float_1_5625 = OpConstant %float 1.5625
%float_n0_5625 = OpConstant %float -0.5625
%float_0_5 = OpConstant %float 0.5
%uint_2 = OpConstant %uint 2
%uint_3 = OpConstant %uint 3
%float_3_05175781en05 = OpConstant %float 3.05175781e-05
%float_n0_5 = OpConstant %float -0.5
%float_n0_289999992 = OpConstant %float -0.289999992
%909 = OpConstantComposite %v2float %float_0 %float_n1
%936 = OpConstantComposite %v2float %float_1 %float_n1
%963 = OpConstantComposite %v2float %float_n1 %float_1
%990 = OpConstantComposite %v2float %float_0 %float_1
%1044 = OpConstantComposite %v2float %float_n1 %float_0
%1071 = OpConstantComposite %v2float %float_1 %float_1
%float_2 = OpConstant %float 2
%1099 = OpConstantComposite %v2float %float_2 %float_1
%1126 = OpConstantComposite %v2float %float_2 %float_0
%1153 = OpConstantComposite %v2float %float_1 %float_0
%1180 = OpConstantComposite %v2float %float_1 %float_2
%1207 = OpConstantComposite %v2float %float_0 %float_2
%XeFsrEasuConstants = OpTypeStruct %v2float %v2float
%_ptr_PushConstant_XeFsrEasuConstants = OpTypePointer PushConstant %XeFsrEasuConstants
%_ = OpVariable %_ptr_PushConstant_XeFsrEasuConstants PushConstant
%_ptr_PushConstant_v2float = OpTypePointer PushConstant %v2float
%1265 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_n1
%1272 = OpConstantComposite %v4float %float_n1 %float_2 %float_1 %float_2
%float_4 = OpConstant %float 4
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
%_ptr_Output_v4float = OpTypePointer Output %v4float
%xe_frag_color = OpVariable %_ptr_Output_v4float Output
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%_ptr_Output_float = OpTypePointer Output %float
%4665 = OpConstantComposite %v2float %float_0_5 %float_0_5
%4666 = OpConstantComposite %v4float %float_0_5 %float_0_5 %float_0_5 %float_0_5
%4701 = OpUndef %v2float
%main = OpFunction %void None %3
%5 = OpLabel
%1250 = OpAccessChain %_ptr_PushConstant_v2float %_ %int_0
%1251 = OpLoad %v2float %1250
%1252 = OpBitcast %v2uint %1251
%1255 = OpVectorTimesScalar %v2float %1251 %float_0_5
%1257 = OpFSub %v2float %1255 %4665
%1258 = OpBitcast %v2uint %1257
%1266 = OpAccessChain %_ptr_PushConstant_v2float %_ %int_1
%1267 = OpLoad %v2float %1266
%1268 = OpVectorShuffle %v4float %1267 %1267 0 1 0 1
%1269 = OpFMul %v4float %1265 %1268
%1270 = OpBitcast %v4uint %1269
%1276 = OpFMul %v4float %1272 %1268
%1277 = OpBitcast %v4uint %1276
%1282 = OpAccessChain %_ptr_PushConstant_float %_ %int_1 %uint_1
%1283 = OpLoad %float %1282
%1284 = OpFMul %float %float_4 %1283
%1285 = OpBitcast %uint %1284
%1291 = OpLoad %v4float %gl_FragCoord
%1292 = OpVectorShuffle %v2float %1291 %1291 0 1
%1293 = OpConvertFToU %v2uint %1292
%1555 = OpConvertUToF %v2float %1293
%1561 = OpBitcast %v2float %1252
%1562 = OpFMul %v2float %1555 %1561
%1568 = OpBitcast %v2float %1258
%1569 = OpFAdd %v2float %1562 %1568
%1571 = OpExtInst %v2float %1 Floor %1569
%1574 = OpFSub %v2float %1569 %1571
%1578 = OpCompositeExtract %uint %1270 0
%1579 = OpCompositeExtract %uint %1270 1
%1580 = OpCompositeConstruct %v2uint %1578 %1579
%1581 = OpBitcast %v2float %1580
%1582 = OpFMul %v2float %1571 %1581
%1585 = OpCompositeExtract %uint %1270 2
%1586 = OpCompositeExtract %uint %1270 3
%1587 = OpCompositeConstruct %v2uint %1585 %1586
%1588 = OpBitcast %v2float %1587
%1589 = OpFAdd %v2float %1582 %1588
%1593 = OpCompositeExtract %uint %1277 0
%1594 = OpCompositeExtract %uint %1277 1
%1595 = OpCompositeConstruct %v2uint %1593 %1594
%1596 = OpBitcast %v2float %1595
%1597 = OpFAdd %v2float %1589 %1596
%1601 = OpCompositeExtract %uint %1277 2
%1602 = OpCompositeExtract %uint %1277 3
%1603 = OpCompositeConstruct %v2uint %1601 %1602
%1604 = OpBitcast %v2float %1603
%1605 = OpFAdd %v2float %1589 %1604
%1611 = OpCompositeConstruct %v2uint %uint_0 %1285
%1612 = OpBitcast %v2float %1611
%1613 = OpFAdd %v2float %1589 %1612
%2112 = OpLoad %186 %xe_texture
%2114 = OpImageGather %v4float %2112 %1589 %int_0
%2119 = OpImageGather %v4float %2112 %1589 %int_1
%2124 = OpImageGather %v4float %2112 %1589 %int_2
%2129 = OpImageGather %v4float %2112 %1597 %int_0
%2134 = OpImageGather %v4float %2112 %1597 %int_1
%2139 = OpImageGather %v4float %2112 %1597 %int_2
%2144 = OpImageGather %v4float %2112 %1605 %int_0
%2149 = OpImageGather %v4float %2112 %1605 %int_1
%2154 = OpImageGather %v4float %2112 %1605 %int_2
%2159 = OpImageGather %v4float %2112 %1613 %int_0
%2164 = OpImageGather %v4float %2112 %1613 %int_1
%2169 = OpImageGather %v4float %2112 %1613 %int_2
%1640 = OpFMul %v4float %2124 %4666
%1643 = OpFMul %v4float %2114 %4666
%1645 = OpFAdd %v4float %1643 %2119
%1646 = OpFAdd %v4float %1640 %1645
%1649 = OpFMul %v4float %2139 %4666
%1652 = OpFMul %v4float %2129 %4666
%1654 = OpFAdd %v4float %1652 %2134
%1655 = OpFAdd %v4float %1649 %1654
%1658 = OpFMul %v4float %2154 %4666
%1661 = OpFMul %v4float %2144 %4666
%1663 = OpFAdd %v4float %1661 %2149
%1664 = OpFAdd %v4float %1658 %1663
%1667 = OpFMul %v4float %2169 %4666
%1670 = OpFMul %v4float %2159 %4666
%1672 = OpFAdd %v4float %1670 %2164
%1673 = OpFAdd %v4float %1667 %1672
%1675 = OpCompositeExtract %float %1646 0
%1677 = OpCompositeExtract %float %1646 1
%1679 = OpCompositeExtract %float %1655 0
%1681 = OpCompositeExtract %float %1655 1
%1683 = OpCompositeExtract %float %1655 2
%1685 = OpCompositeExtract %float %1655 3
%1687 = OpCompositeExtract %float %1664 0
%1689 = OpCompositeExtract %float %1664 1
%1691 = OpCompositeExtract %float %1664 2
%1693 = OpCompositeExtract %float %1664 3
%1695 = OpCompositeExtract %float %1673 2
%1697 = OpCompositeExtract %float %1673 3
%2258 = OpCompositeExtract %float %1574 0
%2259 = OpFSub %float %float_1 %2258
%2262 = OpCompositeExtract %float %1574 1
%2263 = OpFSub %float %float_1 %2262
%2264 = OpFMul %float %2259 %2263
%2296 = OpFSub %float %1693 %1683
%2299 = OpFSub %float %1683 %1685
%2301 = OpExtInst %float %1 FAbs %2296
%2303 = OpExtInst %float %1 FAbs %2299
%2304 = OpExtInst %float %1 FMax %2301 %2303
%2386 = OpBitcast %uint %2304
%2387 = OpISub %uint %uint_2129690299 %2386
%2388 = OpBitcast %float %2387
%2309 = OpFSub %float %1693 %1685
%2312 = OpFMul %float %2309 %2264
%2318 = OpExtInst %float %1 FAbs %2309
%2320 = OpFMul %float %2318 %2388
%2399 = OpExtInst %float %1 FClamp %2320 %float_0 %float_1
%2324 = OpFMul %float %2399 %2399
%2327 = OpFMul %float %2324 %2264
%2332 = OpFSub %float %1681 %1683
%2335 = OpFSub %float %1683 %1675
%2337 = OpExtInst %float %1 FAbs %2332
%2339 = OpExtInst %float %1 FAbs %2335
%2340 = OpExtInst %float %1 FMax %2337 %2339
%2411 = OpBitcast %uint %2340
%2412 = OpISub %uint %uint_2129690299 %2411
%2413 = OpBitcast %float %2412
%2345 = OpFSub %float %1681 %1675
%2348 = OpFMul %float %2345 %2264
%2354 = OpExtInst %float %1 FAbs %2345
%2356 = OpFMul %float %2354 %2413
%2424 = OpExtInst %float %1 FClamp %2356 %float_0 %float_1
%2360 = OpFMul %float %2424 %2424
%2363 = OpFMul %float %2360 %2264
%2365 = OpFAdd %float %2327 %2363
%2471 = OpFMul %float %2258 %2263
%2493 = OpFSub %float %1691 %1693
%2498 = OpExtInst %float %1 FAbs %2493
%2501 = OpExtInst %float %1 FMax %2498 %2301
%2583 = OpBitcast %uint %2501
%2584 = OpISub %uint %uint_2129690299 %2583
%2585 = OpBitcast %float %2584
%2506 = OpFSub %float %1691 %1683
%2509 = OpFMul %float %2506 %2471
%2512 = OpFAdd %float %2312 %2509
%2515 = OpExtInst %float %1 FAbs %2506
%2517 = OpFMul %float %2515 %2585
%2596 = OpExtInst %float %1 FClamp %2517 %float_0 %float_1
%2521 = OpFMul %float %2596 %2596
%2524 = OpFMul %float %2521 %2471
%2526 = OpFAdd %float %2365 %2524
%2529 = OpFSub %float %1687 %1693
%2532 = OpFSub %float %1693 %1677
%2534 = OpExtInst %float %1 FAbs %2529
%2536 = OpExtInst %float %1 FAbs %2532
%2537 = OpExtInst %float %1 FMax %2534 %2536
%2608 = OpBitcast %uint %2537
%2609 = OpISub %uint %uint_2129690299 %2608
%2610 = OpBitcast %float %2609
%2542 = OpFSub %float %1687 %1677
%2545 = OpFMul %float %2542 %2471
%2548 = OpFAdd %float %2348 %2545
%2551 = OpExtInst %float %1 FAbs %2542
%2553 = OpFMul %float %2551 %2610
%2621 = OpExtInst %float %1 FClamp %2553 %float_0 %float_1
%2557 = OpFMul %float %2621 %2621
%2560 = OpFMul %float %2557 %2471
%2562 = OpFAdd %float %2526 %2560
%2678 = OpFMul %float %2259 %2262
%2690 = OpFSub %float %1687 %1681
%2693 = OpFSub %float %1681 %1679
%2695 = OpExtInst %float %1 FAbs %2690
%2697 = OpExtInst %float %1 FAbs %2693
%2698 = OpExtInst %float %1 FMax %2695 %2697
%2780 = OpBitcast %uint %2698
%2781 = OpISub %uint %uint_2129690299 %2780
%2782 = OpBitcast %float %2781
%2703 = OpFSub %float %1687 %1679
%2706 = OpFMul %float %2703 %2678
%2709 = OpFAdd %float %2512 %2706
%2712 = OpExtInst %float %1 FAbs %2703
%2714 = OpFMul %float %2712 %2782
%2793 = OpExtInst %float %1 FClamp %2714 %float_0 %float_1
%2718 = OpFMul %float %2793 %2793
%2721 = OpFMul %float %2718 %2678
%2723 = OpFAdd %float %2562 %2721
%2726 = OpFSub %float %1697 %1681
%2731 = OpExtInst %float %1 FAbs %2726
%2734 = OpExtInst %float %1 FMax %2731 %2337
%2805 = OpBitcast %uint %2734
%2806 = OpISub %uint %uint_2129690299 %2805
%2807 = OpBitcast %float %2806
%2739 = OpFSub %float %1697 %1683
%2742 = OpFMul %float %2739 %2678
%2745 = OpFAdd %float %2548 %2742
%2748 = OpExtInst %float %1 FAbs %2739
%2750 = OpFMul %float %2748 %2807
%2818 = OpExtInst %float %1 FClamp %2750 %float_0 %float_1
%2754 = OpFMul %float %2818 %2818
%2757 = OpFMul %float %2754 %2678
%2759 = OpFAdd %float %2723 %2757
%2883 = OpFMul %float %2258 %2262
%2887 = OpFSub %float %1689 %1687
%2892 = OpExtInst %float %1 FAbs %2887
%2895 = OpExtInst %float %1 FMax %2892 %2695
%2977 = OpBitcast %uint %2895
%2978 = OpISub %uint %uint_2129690299 %2977
%2979 = OpBitcast %float %2978
%2900 = OpFSub %float %1689 %1681
%2903 = OpFMul %float %2900 %2883
%2906 = OpFAdd %float %2709 %2903
%4398 = OpCompositeInsert %v2float %2906 %4701 0
%2909 = OpExtInst %float %1 FAbs %2900
%2911 = OpFMul %float %2909 %2979
%2990 = OpExtInst %float %1 FClamp %2911 %float_0 %float_1
%2915 = OpFMul %float %2990 %2990
%2918 = OpFMul %float %2915 %2883
%2920 = OpFAdd %float %2759 %2918
%2923 = OpFSub %float %1695 %1687
%2928 = OpExtInst %float %1 FAbs %2923
%2931 = OpExtInst %float %1 FMax %2928 %2534
%3002 = OpBitcast %uint %2931
%3003 = OpISub %uint %uint_2129690299 %3002
%3004 = OpBitcast %float %3003
%2936 = OpFSub %float %1695 %1693
%2939 = OpFMul %float %2936 %2883
%2942 = OpFAdd %float %2745 %2939
%4401 = OpCompositeInsert %v2float %2942 %4398 1
%2945 = OpExtInst %float %1 FAbs %2936
%2947 = OpFMul %float %2945 %3004
%3015 = OpExtInst %float %1 FClamp %2947 %float_0 %float_1
%2951 = OpFMul %float %3015 %3015
%2954 = OpFMul %float %2951 %2883
%2956 = OpFAdd %float %2920 %2954
%1746 = OpFMul %v2float %4401 %4401
%1748 = OpCompositeExtract %float %1746 0
%1750 = OpCompositeExtract %float %1746 1
%1751 = OpFAdd %float %1748 %1750
%1754 = OpFOrdLessThan %bool %1751 %float_3_05175781en05
%3031 = OpBitcast %uint %1751
%3033 = OpShiftRightLogical %uint %3031 %uint_1
%3034 = OpISub %uint %uint_1597275508 %3033
%3035 = OpBitcast %float %3034
OpBranch %1762
%1762 = OpLabel
%4700 = OpSelect %float %1754 %float_1 %3035
OpSelectionMerge %1770 None
OpBranchConditional %1754 %1765 %1767
%1767 = OpLabel
OpBranch %1770
%1765 = OpLabel
OpBranch %1770
%1770 = OpLabel
%4670 = OpPhi %float %2906 %1767 %float_1 %1765
%4406 = OpCompositeInsert %v2float %4670 %4401 0
%3052 = OpCompositeConstruct %v2float %4700 %4700
%1776 = OpFMul %v2float %4406 %3052
%1779 = OpFMul %float %2956 %float_0_5
%1782 = OpFMul %float %1779 %1779
%1784 = OpCompositeExtract %float %1776 0
%1787 = OpFMul %float %1784 %1784
%1789 = OpCompositeExtract %float %1776 1
%1792 = OpFMul %float %1789 %1789
%1793 = OpFAdd %float %1787 %1792
%1796 = OpExtInst %float %1 FAbs %1784
%1799 = OpExtInst %float %1 FAbs %1789
%1800 = OpExtInst %float %1 FMax %1796 %1799
%3061 = OpBitcast %uint %1800
%3062 = OpISub %uint %uint_2129690299 %3061
%3063 = OpBitcast %float %3062
%1802 = OpFMul %float %1793 %3063
%1806 = OpFSub %float %1802 %float_1
%1808 = OpFMul %float %1806 %1782
%1809 = OpFAdd %float %float_1 %1808
%1813 = OpFMul %float %float_n0_5 %1782
%1814 = OpFAdd %float %float_1 %1813
%1815 = OpCompositeConstruct %v2float %1809 %1814
%1819 = OpFMul %float %float_n0_289999992 %1782
%1820 = OpFAdd %float %float_0_5 %1819
%3090 = OpBitcast %uint %1820
%3091 = OpISub %uint %uint_2129690299 %3090
%3092 = OpBitcast %float %3091
%1824 = OpCompositeExtract %float %2129 2
%1826 = OpCompositeExtract %float %2134 2
%1828 = OpCompositeExtract %float %2139 2
%1829 = OpCompositeConstruct %v3float %1824 %1826 %1828
%1831 = OpCompositeExtract %float %2144 3
%1833 = OpCompositeExtract %float %2149 3
%1835 = OpCompositeExtract %float %2154 3
%1836 = OpCompositeConstruct %v3float %1831 %1833 %1835
%1838 = OpCompositeExtract %float %2129 1
%1840 = OpCompositeExtract %float %2134 1
%1842 = OpCompositeExtract %float %2139 1
%1843 = OpCompositeConstruct %v3float %1838 %1840 %1842
%3101 = OpExtInst %v3float %1 FMin %1836 %1843
%3102 = OpExtInst %v3float %1 FMin %1829 %3101
%1846 = OpCompositeExtract %float %2144 0
%1848 = OpCompositeExtract %float %2149 0
%1850 = OpCompositeExtract %float %2154 0
%1851 = OpCompositeConstruct %v3float %1846 %1848 %1850
%1852 = OpExtInst %v3float %1 FMin %3102 %1851
%3108 = OpExtInst %v3float %1 FMax %1836 %1843
%3109 = OpExtInst %v3float %1 FMax %1829 %3108
%1882 = OpExtInst %v3float %1 FMax %3109 %1851
%1886 = OpFSub %v2float %909 %1574
%1888 = OpCompositeExtract %float %2114 0
%1890 = OpCompositeExtract %float %2119 0
%1892 = OpCompositeExtract %float %2124 0
%1893 = OpCompositeConstruct %v3float %1888 %1890 %1892
%3131 = OpCompositeExtract %float %1886 0
%3134 = OpFMul %float %3131 %1784
%3136 = OpCompositeExtract %float %1886 1
%3139 = OpFMul %float %3136 %1789
%3140 = OpFAdd %float %3134 %3139
%4445 = OpCompositeInsert %v2float %3140 %4701 0
%3146 = OpFNegate %float %1789
%3147 = OpFMul %float %3131 %3146
%3152 = OpFMul %float %3136 %1784
%3153 = OpFAdd %float %3147 %3152
%4451 = OpCompositeInsert %v2float %3153 %4445 1
%3157 = OpFMul %v2float %4451 %1815
%3159 = OpCompositeExtract %float %3157 0
%3162 = OpFMul %float %3159 %3159
%3164 = OpCompositeExtract %float %3157 1
%3167 = OpFMul %float %3164 %3164
%3168 = OpFAdd %float %3162 %3167
%3171 = OpExtInst %float %1 FMin %3168 %3092
%3174 = OpFMul %float %float_0_400000006 %3171
%3176 = OpFAdd %float %3174 %float_n1
%3179 = OpFMul %float %1820 %3171
%3181 = OpFAdd %float %3179 %float_n1
%3184 = OpFMul %float %3176 %3176
%3187 = OpFMul %float %3181 %3181
%3190 = OpFMul %float %float_1_5625 %3184
%3192 = OpFAdd %float %3190 %float_n0_5625
%3195 = OpFMul %float %3192 %3187
%3198 = OpVectorTimesScalar %v3float %1893 %3195
%1904 = OpFSub %v2float %936 %1574
%1906 = OpCompositeExtract %float %2114 1
%1908 = OpCompositeExtract %float %2119 1
%1910 = OpCompositeExtract %float %2124 1
%1911 = OpCompositeConstruct %v3float %1906 %1908 %1910
%3231 = OpCompositeExtract %float %1904 0
%3234 = OpFMul %float %3231 %1784
%3236 = OpCompositeExtract %float %1904 1
%3239 = OpFMul %float %3236 %1789
%3240 = OpFAdd %float %3234 %3239
%4464 = OpCompositeInsert %v2float %3240 %4701 0
%3247 = OpFMul %float %3231 %3146
%3252 = OpFMul %float %3236 %1784
%3253 = OpFAdd %float %3247 %3252
%4470 = OpCompositeInsert %v2float %3253 %4464 1
%3257 = OpFMul %v2float %4470 %1815
%3259 = OpCompositeExtract %float %3257 0
%3262 = OpFMul %float %3259 %3259
%3264 = OpCompositeExtract %float %3257 1
%3267 = OpFMul %float %3264 %3264
%3268 = OpFAdd %float %3262 %3267
%3271 = OpExtInst %float %1 FMin %3268 %3092
%3274 = OpFMul %float %float_0_400000006 %3271
%3276 = OpFAdd %float %3274 %float_n1
%3279 = OpFMul %float %1820 %3271
%3281 = OpFAdd %float %3279 %float_n1
%3284 = OpFMul %float %3276 %3276
%3287 = OpFMul %float %3281 %3281
%3290 = OpFMul %float %float_1_5625 %3284
%3292 = OpFAdd %float %3290 %float_n0_5625
%3295 = OpFMul %float %3292 %3287
%3298 = OpVectorTimesScalar %v3float %1911 %3295
%3300 = OpFAdd %v3float %3198 %3298
%3303 = OpFAdd %float %3195 %3295
%1922 = OpFSub %v2float %963 %1574
%1924 = OpCompositeExtract %float %2129 0
%1926 = OpCompositeExtract %float %2134 0
%1928 = OpCompositeExtract %float %2139 0
%1929 = OpCompositeConstruct %v3float %1924 %1926 %1928
%3331 = OpCompositeExtract %float %1922 0
%3334 = OpFMul %float %3331 %1784
%3336 = OpCompositeExtract %float %1922 1
%3339 = OpFMul %float %3336 %1789
%3340 = OpFAdd %float %3334 %3339
%4483 = OpCompositeInsert %v2float %3340 %4701 0
%3347 = OpFMul %float %3331 %3146
%3352 = OpFMul %float %3336 %1784
%3353 = OpFAdd %float %3347 %3352
%4489 = OpCompositeInsert %v2float %3353 %4483 1
%3357 = OpFMul %v2float %4489 %1815
%3359 = OpCompositeExtract %float %3357 0
%3362 = OpFMul %float %3359 %3359
%3364 = OpCompositeExtract %float %3357 1
%3367 = OpFMul %float %3364 %3364
%3368 = OpFAdd %float %3362 %3367
%3371 = OpExtInst %float %1 FMin %3368 %3092
%3374 = OpFMul %float %float_0_400000006 %3371
%3376 = OpFAdd %float %3374 %float_n1
%3379 = OpFMul %float %1820 %3371
%3381 = OpFAdd %float %3379 %float_n1
%3384 = OpFMul %float %3376 %3376
%3387 = OpFMul %float %3381 %3381
%3390 = OpFMul %float %float_1_5625 %3384
%3392 = OpFAdd %float %3390 %float_n0_5625
%3395 = OpFMul %float %3392 %3387
%3398 = OpVectorTimesScalar %v3float %1929 %3395
%3400 = OpFAdd %v3float %3300 %3398
%3403 = OpFAdd %float %3303 %3395
%1940 = OpFSub %v2float %990 %1574
%3431 = OpCompositeExtract %float %1940 0
%3434 = OpFMul %float %3431 %1784
%3436 = OpCompositeExtract %float %1940 1
%3439 = OpFMul %float %3436 %1789
%3440 = OpFAdd %float %3434 %3439
%4502 = OpCompositeInsert %v2float %3440 %4701 0
%3447 = OpFMul %float %3431 %3146
%3452 = OpFMul %float %3436 %1784
%3453 = OpFAdd %float %3447 %3452
%4508 = OpCompositeInsert %v2float %3453 %4502 1
%3457 = OpFMul %v2float %4508 %1815
%3459 = OpCompositeExtract %float %3457 0
%3462 = OpFMul %float %3459 %3459
%3464 = OpCompositeExtract %float %3457 1
%3467 = OpFMul %float %3464 %3464
%3468 = OpFAdd %float %3462 %3467
%3471 = OpExtInst %float %1 FMin %3468 %3092
%3474 = OpFMul %float %float_0_400000006 %3471
%3476 = OpFAdd %float %3474 %float_n1
%3479 = OpFMul %float %1820 %3471
%3481 = OpFAdd %float %3479 %float_n1
%3484 = OpFMul %float %3476 %3476
%3487 = OpFMul %float %3481 %3481
%3490 = OpFMul %float %float_1_5625 %3484
%3492 = OpFAdd %float %3490 %float_n0_5625
%3495 = OpFMul %float %3492 %3487
%3498 = OpVectorTimesScalar %v3float %1843 %3495
%3500 = OpFAdd %v3float %3400 %3498
%3503 = OpFAdd %float %3403 %3495
%1958 = OpFNegate %v2float %1574
%3531 = OpCompositeExtract %float %1958 0
%3534 = OpFMul %float %3531 %1784
%3536 = OpCompositeExtract %float %1958 1
%3539 = OpFMul %float %3536 %1789
%3540 = OpFAdd %float %3534 %3539
%4521 = OpCompositeInsert %v2float %3540 %4701 0
%3547 = OpFMul %float %3531 %3146
%3552 = OpFMul %float %3536 %1784
%3553 = OpFAdd %float %3547 %3552
%4527 = OpCompositeInsert %v2float %3553 %4521 1
%3557 = OpFMul %v2float %4527 %1815
%3559 = OpCompositeExtract %float %3557 0
%3562 = OpFMul %float %3559 %3559
%3564 = OpCompositeExtract %float %3557 1
%3567 = OpFMul %float %3564 %3564
%3568 = OpFAdd %float %3562 %3567
%3571 = OpExtInst %float %1 FMin %3568 %3092
%3574 = OpFMul %float %float_0_400000006 %3571
%3576 = OpFAdd %float %3574 %float_n1
%3579 = OpFMul %float %1820 %3571
%3581 = OpFAdd %float %3579 %float_n1
%3584 = OpFMul %float %3576 %3576
%3587 = OpFMul %float %3581 %3581
%3590 = OpFMul %float %float_1_5625 %3584
%3592 = OpFAdd %float %3590 %float_n0_5625
%3595 = OpFMul %float %3592 %3587
%3598 = OpVectorTimesScalar %v3float %1829 %3595
%3600 = OpFAdd %v3float %3500 %3598
%3603 = OpFAdd %float %3503 %3595
%1976 = OpFSub %v2float %1044 %1574
%1978 = OpCompositeExtract %float %2129 3
%1980 = OpCompositeExtract %float %2134 3
%1982 = OpCompositeExtract %float %2139 3
%1983 = OpCompositeConstruct %v3float %1978 %1980 %1982
%3631 = OpCompositeExtract %float %1976 0
%3634 = OpFMul %float %3631 %1784
%3636 = OpCompositeExtract %float %1976 1
%3639 = OpFMul %float %3636 %1789
%3640 = OpFAdd %float %3634 %3639
%4540 = OpCompositeInsert %v2float %3640 %4701 0
%3647 = OpFMul %float %3631 %3146
%3652 = OpFMul %float %3636 %1784
%3653 = OpFAdd %float %3647 %3652
%4546 = OpCompositeInsert %v2float %3653 %4540 1
%3657 = OpFMul %v2float %4546 %1815
%3659 = OpCompositeExtract %float %3657 0
%3662 = OpFMul %float %3659 %3659
%3664 = OpCompositeExtract %float %3657 1
%3667 = OpFMul %float %3664 %3664
%3668 = OpFAdd %float %3662 %3667
%3671 = OpExtInst %float %1 FMin %3668 %3092
%3674 = OpFMul %float %float_0_400000006 %3671
%3676 = OpFAdd %float %3674 %float_n1
%3679 = OpFMul %float %1820 %3671
%3681 = OpFAdd %float %3679 %float_n1
%3684 = OpFMul %float %3676 %3676
%3687 = OpFMul %float %3681 %3681
%3690 = OpFMul %float %float_1_5625 %3684
%3692 = OpFAdd %float %3690 %float_n0_5625
%3695 = OpFMul %float %3692 %3687
%3698 = OpVectorTimesScalar %v3float %1983 %3695
%3700 = OpFAdd %v3float %3600 %3698
%3703 = OpFAdd %float %3603 %3695
%1994 = OpFSub %v2float %1071 %1574
%3731 = OpCompositeExtract %float %1994 0
%3734 = OpFMul %float %3731 %1784
%3736 = OpCompositeExtract %float %1994 1
%3739 = OpFMul %float %3736 %1789
%3740 = OpFAdd %float %3734 %3739
%4559 = OpCompositeInsert %v2float %3740 %4701 0
%3747 = OpFMul %float %3731 %3146
%3752 = OpFMul %float %3736 %1784
%3753 = OpFAdd %float %3747 %3752
%4565 = OpCompositeInsert %v2float %3753 %4559 1
%3757 = OpFMul %v2float %4565 %1815
%3759 = OpCompositeExtract %float %3757 0
%3762 = OpFMul %float %3759 %3759
%3764 = OpCompositeExtract %float %3757 1
%3767 = OpFMul %float %3764 %3764
%3768 = OpFAdd %float %3762 %3767
%3771 = OpExtInst %float %1 FMin %3768 %3092
%3774 = OpFMul %float %float_0_400000006 %3771
%3776 = OpFAdd %float %3774 %float_n1
%3779 = OpFMul %float %1820 %3771
%3781 = OpFAdd %float %3779 %float_n1
%3784 = OpFMul %float %3776 %3776
%3787 = OpFMul %float %3781 %3781
%3790 = OpFMul %float %float_1_5625 %3784
%3792 = OpFAdd %float %3790 %float_n0_5625
%3795 = OpFMul %float %3792 %3787
%3798 = OpVectorTimesScalar %v3float %1851 %3795
%3800 = OpFAdd %v3float %3700 %3798
%3803 = OpFAdd %float %3703 %3795
%2012 = OpFSub %v2float %1099 %1574
%2014 = OpCompositeExtract %float %2144 1
%2016 = OpCompositeExtract %float %2149 1
%2018 = OpCompositeExtract %float %2154 1
%2019 = OpCompositeConstruct %v3float %2014 %2016 %2018
%3831 = OpCompositeExtract %float %2012 0
%3834 = OpFMul %float %3831 %1784
%3836 = OpCompositeExtract %float %2012 1
%3839 = OpFMul %float %3836 %1789
%3840 = OpFAdd %float %3834 %3839
%4578 = OpCompositeInsert %v2float %3840 %4701 0
%3847 = OpFMul %float %3831 %3146
%3852 = OpFMul %float %3836 %1784
%3853 = OpFAdd %float %3847 %3852
%4584 = OpCompositeInsert %v2float %3853 %4578 1
%3857 = OpFMul %v2float %4584 %1815
%3859 = OpCompositeExtract %float %3857 0
%3862 = OpFMul %float %3859 %3859
%3864 = OpCompositeExtract %float %3857 1
%3867 = OpFMul %float %3864 %3864
%3868 = OpFAdd %float %3862 %3867
%3871 = OpExtInst %float %1 FMin %3868 %3092
%3874 = OpFMul %float %float_0_400000006 %3871
%3876 = OpFAdd %float %3874 %float_n1
%3879 = OpFMul %float %1820 %3871
%3881 = OpFAdd %float %3879 %float_n1
%3884 = OpFMul %float %3876 %3876
%3887 = OpFMul %float %3881 %3881
%3890 = OpFMul %float %float_1_5625 %3884
%3892 = OpFAdd %float %3890 %float_n0_5625
%3895 = OpFMul %float %3892 %3887
%3898 = OpVectorTimesScalar %v3float %2019 %3895
%3900 = OpFAdd %v3float %3800 %3898
%3903 = OpFAdd %float %3803 %3895
%2030 = OpFSub %v2float %1126 %1574
%2032 = OpCompositeExtract %float %2144 2
%2034 = OpCompositeExtract %float %2149 2
%2036 = OpCompositeExtract %float %2154 2
%2037 = OpCompositeConstruct %v3float %2032 %2034 %2036
%3931 = OpCompositeExtract %float %2030 0
%3934 = OpFMul %float %3931 %1784
%3936 = OpCompositeExtract %float %2030 1
%3939 = OpFMul %float %3936 %1789
%3940 = OpFAdd %float %3934 %3939
%4597 = OpCompositeInsert %v2float %3940 %4701 0
%3947 = OpFMul %float %3931 %3146
%3952 = OpFMul %float %3936 %1784
%3953 = OpFAdd %float %3947 %3952
%4603 = OpCompositeInsert %v2float %3953 %4597 1
%3957 = OpFMul %v2float %4603 %1815
%3959 = OpCompositeExtract %float %3957 0
%3962 = OpFMul %float %3959 %3959
%3964 = OpCompositeExtract %float %3957 1
%3967 = OpFMul %float %3964 %3964
%3968 = OpFAdd %float %3962 %3967
%3971 = OpExtInst %float %1 FMin %3968 %3092
%3974 = OpFMul %float %float_0_400000006 %3971
%3976 = OpFAdd %float %3974 %float_n1
%3979 = OpFMul %float %1820 %3971
%3981 = OpFAdd %float %3979 %float_n1
%3984 = OpFMul %float %3976 %3976
%3987 = OpFMul %float %3981 %3981
%3990 = OpFMul %float %float_1_5625 %3984
%3992 = OpFAdd %float %3990 %float_n0_5625
%3995 = OpFMul %float %3992 %3987
%3998 = OpVectorTimesScalar %v3float %2037 %3995
%4000 = OpFAdd %v3float %3900 %3998
%4003 = OpFAdd %float %3903 %3995
%2048 = OpFSub %v2float %1153 %1574
%4031 = OpCompositeExtract %float %2048 0
%4034 = OpFMul %float %4031 %1784
%4036 = OpCompositeExtract %float %2048 1
%4039 = OpFMul %float %4036 %1789
%4040 = OpFAdd %float %4034 %4039
%4616 = OpCompositeInsert %v2float %4040 %4701 0
%4047 = OpFMul %float %4031 %3146
%4052 = OpFMul %float %4036 %1784
%4053 = OpFAdd %float %4047 %4052
%4622 = OpCompositeInsert %v2float %4053 %4616 1
%4057 = OpFMul %v2float %4622 %1815
%4059 = OpCompositeExtract %float %4057 0
%4062 = OpFMul %float %4059 %4059
%4064 = OpCompositeExtract %float %4057 1
%4067 = OpFMul %float %4064 %4064
%4068 = OpFAdd %float %4062 %4067
%4071 = OpExtInst %float %1 FMin %4068 %3092
%4074 = OpFMul %float %float_0_400000006 %4071
%4076 = OpFAdd %float %4074 %float_n1
%4079 = OpFMul %float %1820 %4071
%4081 = OpFAdd %float %4079 %float_n1
%4084 = OpFMul %float %4076 %4076
%4087 = OpFMul %float %4081 %4081
%4090 = OpFMul %float %float_1_5625 %4084
%4092 = OpFAdd %float %4090 %float_n0_5625
%4095 = OpFMul %float %4092 %4087
%4098 = OpVectorTimesScalar %v3float %1836 %4095
%4100 = OpFAdd %v3float %4000 %4098
%4103 = OpFAdd %float %4003 %4095
%2066 = OpFSub %v2float %1180 %1574
%2068 = OpCompositeExtract %float %2159 2
%2070 = OpCompositeExtract %float %2164 2
%2072 = OpCompositeExtract %float %2169 2
%2073 = OpCompositeConstruct %v3float %2068 %2070 %2072
%4131 = OpCompositeExtract %float %2066 0
%4134 = OpFMul %float %4131 %1784
%4136 = OpCompositeExtract %float %2066 1
%4139 = OpFMul %float %4136 %1789
%4140 = OpFAdd %float %4134 %4139
%4635 = OpCompositeInsert %v2float %4140 %4701 0
%4147 = OpFMul %float %4131 %3146
%4152 = OpFMul %float %4136 %1784
%4153 = OpFAdd %float %4147 %4152
%4641 = OpCompositeInsert %v2float %4153 %4635 1
%4157 = OpFMul %v2float %4641 %1815
%4159 = OpCompositeExtract %float %4157 0
%4162 = OpFMul %float %4159 %4159
%4164 = OpCompositeExtract %float %4157 1
%4167 = OpFMul %float %4164 %4164
%4168 = OpFAdd %float %4162 %4167
%4171 = OpExtInst %float %1 FMin %4168 %3092
%4174 = OpFMul %float %float_0_400000006 %4171
%4176 = OpFAdd %float %4174 %float_n1
%4179 = OpFMul %float %1820 %4171
%4181 = OpFAdd %float %4179 %float_n1
%4184 = OpFMul %float %4176 %4176
%4187 = OpFMul %float %4181 %4181
%4190 = OpFMul %float %float_1_5625 %4184
%4192 = OpFAdd %float %4190 %float_n0_5625
%4195 = OpFMul %float %4192 %4187
%4198 = OpVectorTimesScalar %v3float %2073 %4195
%4200 = OpFAdd %v3float %4100 %4198
%4203 = OpFAdd %float %4103 %4195
%2084 = OpFSub %v2float %1207 %1574
%2086 = OpCompositeExtract %float %2159 3
%2088 = OpCompositeExtract %float %2164 3
%2090 = OpCompositeExtract %float %2169 3
%2091 = OpCompositeConstruct %v3float %2086 %2088 %2090
%4231 = OpCompositeExtract %float %2084 0
%4234 = OpFMul %float %4231 %1784
%4236 = OpCompositeExtract %float %2084 1
%4239 = OpFMul %float %4236 %1789
%4240 = OpFAdd %float %4234 %4239
%4654 = OpCompositeInsert %v2float %4240 %4701 0
%4247 = OpFMul %float %4231 %3146
%4252 = OpFMul %float %4236 %1784
%4253 = OpFAdd %float %4247 %4252
%4660 = OpCompositeInsert %v2float %4253 %4654 1
%4257 = OpFMul %v2float %4660 %1815
%4259 = OpCompositeExtract %float %4257 0
%4262 = OpFMul %float %4259 %4259
%4264 = OpCompositeExtract %float %4257 1
%4267 = OpFMul %float %4264 %4264
%4268 = OpFAdd %float %4262 %4267
%4271 = OpExtInst %float %1 FMin %4268 %3092
%4274 = OpFMul %float %float_0_400000006 %4271
%4276 = OpFAdd %float %4274 %float_n1
%4279 = OpFMul %float %1820 %4271
%4281 = OpFAdd %float %4279 %float_n1
%4284 = OpFMul %float %4276 %4276
%4287 = OpFMul %float %4281 %4281
%4290 = OpFMul %float %float_1_5625 %4284
%4292 = OpFAdd %float %4290 %float_n0_5625
%4295 = OpFMul %float %4292 %4287
%4298 = OpVectorTimesScalar %v3float %2091 %4295
%4300 = OpFAdd %v3float %4200 %4298
%4303 = OpFAdd %float %4203 %4295
%4324 = OpFDiv %float %float_1 %4303
%4333 = OpCompositeConstruct %v3float %4324 %4324 %4324
%2107 = OpFMul %v3float %4300 %4333
%2108 = OpExtInst %v3float %1 FMax %1852 %2107
%2109 = OpExtInst %v3float %1 FMin %1882 %2108
%1307 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_0
%1308 = OpCompositeExtract %float %2109 0
OpStore %1307 %1308
%1309 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_1
%1310 = OpCompositeExtract %float %2109 1
OpStore %1309 %1310
%1311 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_2
%1312 = OpCompositeExtract %float %2109 2
OpStore %1311 %1312
%1313 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_3
OpStore %1313 %float_1
OpReturn
OpFunctionEnd

View File

@@ -0,0 +1,819 @@
// generated from `xb genspirv`
// source: guest_output_ffx_fsr_rcas_dither.frag
const uint8_t guest_output_ffx_fsr_rcas_dither_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x4E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0xA6, 0x03, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x95, 0x01, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0xA6, 0x03, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
0xAA, 0x03, 0x00, 0x00, 0x58, 0x65, 0x46, 0x73, 0x72, 0x52, 0x63, 0x61,
0x73, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0x00,
0x06, 0x00, 0x0A, 0x00, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x66, 0x73, 0x72, 0x5F, 0x72, 0x63, 0x61, 0x73, 0x5F,
0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65,
0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0C, 0x00, 0xAA, 0x03, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x66, 0x73, 0x72, 0x5F, 0x72,
0x63, 0x61, 0x73, 0x5F, 0x73, 0x68, 0x61, 0x72, 0x70, 0x6E, 0x65, 0x73,
0x73, 0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x73, 0x65, 0x74, 0x75, 0x70,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0xAC, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xBD, 0x03, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x66, 0x72, 0x61, 0x67, 0x5F, 0x63, 0x6F, 0x6C, 0x6F,
0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x01, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x95, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0xA6, 0x03, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xAA, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0xAA, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
0xAA, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xBD, 0x03, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x2C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x1C, 0x00, 0x04, 0x00, 0x49, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x84, 0x83, 0x83, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00,
0xE7, 0xE6, 0x66, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4C, 0x00, 0x00, 0x00, 0xDE, 0xDD, 0xDD, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0xCC, 0xCB, 0xCB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
0xA8, 0xA7, 0xA7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x9F, 0x9E, 0x1E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x8C, 0x8B, 0x8B, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
0xB6, 0xB5, 0xB5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x52, 0x00, 0x00, 0x00, 0xB2, 0xB1, 0xB1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x87, 0x86, 0x06, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0xA0, 0x9F, 0x9F, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x55, 0x00, 0x00, 0x00, 0xD2, 0xD1, 0xD1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x9B, 0x9A, 0x1A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
0x95, 0x94, 0x94, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x58, 0x00, 0x00, 0x00, 0x92, 0x91, 0x91, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0xBA, 0xB9, 0xB9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00,
0xBE, 0xBD, 0xBD, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x5B, 0x00, 0x00, 0x00, 0x8F, 0x8E, 0x0E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x89, 0x88, 0x08, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00,
0x9E, 0x9D, 0x9D, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x5E, 0x00, 0x00, 0x00, 0xE5, 0xE4, 0xE4, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x8A, 0x89, 0x89, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
0xA3, 0xA2, 0x22, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x61, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0xFC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
0x90, 0x8F, 0x8F, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0xD1, 0xD0, 0xD0, 0xB8, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x8B, 0x8A, 0x0A, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
0xBC, 0xBB, 0xBB, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x67, 0x00, 0x00, 0x00, 0xFE, 0xFD, 0xFD, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0xB7, 0xB6, 0x36, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
0xA1, 0xA0, 0x20, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x6A, 0x00, 0x00, 0x00, 0xBB, 0xBA, 0x3A, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6B, 0x00, 0x00, 0x00, 0xAC, 0xAB, 0xAB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x90, 0x8F, 0x8F, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x6D, 0x00, 0x00, 0x00, 0x9D, 0x9C, 0x9C, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0xE6, 0xE5, 0xE5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00,
0xDC, 0xDB, 0xDB, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x70, 0x00, 0x00, 0x00, 0xC2, 0xC1, 0xC1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xA1, 0xA0, 0x20, 0xB8,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00,
0xCF, 0xCE, 0x4E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x73, 0x00, 0x00, 0x00, 0xF0, 0xEF, 0xEF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x9D, 0x9C, 0x9C, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
0x82, 0x81, 0x81, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x76, 0x00, 0x00, 0x00, 0x9A, 0x99, 0x99, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0xB9, 0xB8, 0x38, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
0xD8, 0xD7, 0xD7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x79, 0x00, 0x00, 0x00, 0xD0, 0xCF, 0xCF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0xB5, 0xB4, 0xB4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00,
0xF4, 0xF3, 0xF3, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x7C, 0x00, 0x00, 0x00, 0xE8, 0xE7, 0xE7, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0xE3, 0xE2, 0x62, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
0xEB, 0xEA, 0x6A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x00, 0x00, 0xA9, 0xA8, 0x28, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xF3, 0xF2, 0x72, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
0xC8, 0xC7, 0xC7, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x82, 0x00, 0x00, 0x00, 0xAB, 0xAA, 0x2A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0xAA, 0xA9, 0xA9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
0xD3, 0xD2, 0x52, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x85, 0x00, 0x00, 0x00, 0xC0, 0xBF, 0xBF, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xEC, 0xEB, 0xEB, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00,
0xDF, 0xDE, 0x5E, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x88, 0x00, 0x00, 0x00, 0xDF, 0xDE, 0x5E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0xED, 0xEC, 0xEC, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00,
0x8C, 0x8B, 0x8B, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8B, 0x00, 0x00, 0x00, 0x99, 0x98, 0x18, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0xF9, 0xF8, 0x78, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00,
0xBA, 0xB9, 0xB9, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8E, 0x00, 0x00, 0x00, 0x9B, 0x9A, 0x1A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xC9, 0xC8, 0x48, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0xD2, 0xD1, 0xD1, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x91, 0x00, 0x00, 0x00, 0x86, 0x85, 0x85, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0xD5, 0xD4, 0xD4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00,
0xD9, 0xD8, 0x58, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x94, 0x00, 0x00, 0x00, 0xD0, 0xCF, 0xCF, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0xAB, 0xAA, 0x2A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
0x91, 0x90, 0x90, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x97, 0x00, 0x00, 0x00, 0xDD, 0xDC, 0xDC, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0xD8, 0xD7, 0xD7, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00,
0xB4, 0xB3, 0xB3, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x9A, 0x00, 0x00, 0x00, 0xF3, 0xF2, 0x72, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x9B, 0x00, 0x00, 0x00, 0xAF, 0xAE, 0x2E, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00,
0x9C, 0x9B, 0x9B, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x9D, 0x00, 0x00, 0x00, 0xBE, 0xBD, 0xBD, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00, 0x97, 0x96, 0x16, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00,
0xF8, 0xF7, 0xF7, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA0, 0x00, 0x00, 0x00, 0xC7, 0xC6, 0x46, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0xAA, 0xA9, 0xA9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00,
0xFC, 0xFB, 0xFB, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA3, 0x00, 0x00, 0x00, 0xDA, 0xD9, 0xD9, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x88, 0x87, 0x87, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00,
0x83, 0x82, 0x02, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA6, 0x00, 0x00, 0x00, 0xF4, 0xF3, 0xF3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0x9E, 0x9D, 0x9D, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00,
0xAD, 0xAC, 0xAC, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA9, 0x00, 0x00, 0x00, 0xB4, 0xB3, 0xB3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0xD6, 0xD5, 0xD5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00,
0xF2, 0xF1, 0xF1, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xAC, 0x00, 0x00, 0x00, 0xBF, 0xBE, 0x3E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00, 0x00, 0xEF, 0xEE, 0x6E, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00,
0xEE, 0xED, 0xED, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xAF, 0x00, 0x00, 0x00, 0x96, 0x95, 0x95, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xC5, 0xC4, 0xC4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00,
0xD1, 0xD0, 0xD0, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB2, 0x00, 0x00, 0x00, 0xC3, 0xC2, 0x42, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB3, 0x00, 0x00, 0x00, 0x9A, 0x99, 0x99, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00,
0x91, 0x90, 0x90, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB5, 0x00, 0x00, 0x00, 0xC4, 0xC3, 0xC3, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x7E, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00,
0xFB, 0xFA, 0x7A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB8, 0x00, 0x00, 0x00, 0xFE, 0xFD, 0xFD, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x8B, 0x8A, 0x0A, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00,
0xE1, 0xE0, 0x60, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xBB, 0x00, 0x00, 0x00, 0xA4, 0xA3, 0xA3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xBC, 0x00, 0x00, 0x00, 0x8D, 0x8C, 0x8C, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00,
0xCA, 0xC9, 0xC9, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xBE, 0x00, 0x00, 0x00, 0x81, 0x80, 0x00, 0xB7, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0xA5, 0xA4, 0xA4, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
0xB0, 0xAF, 0xAF, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC1, 0x00, 0x00, 0x00, 0xE6, 0xE5, 0xE5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0x83, 0x82, 0x02, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00,
0x9C, 0x9B, 0x9B, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC4, 0x00, 0x00, 0x00, 0xCB, 0xCA, 0x4A, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0xB0, 0xAF, 0xAF, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00,
0x8D, 0x8C, 0x8C, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC7, 0x00, 0x00, 0x00, 0xC2, 0xC1, 0xC1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0x89, 0x88, 0x08, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xC9, 0x00, 0x00, 0x00,
0xCB, 0xCA, 0x4A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xCA, 0x00, 0x00, 0x00, 0xAC, 0xAB, 0xAB, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xCC, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
0xFB, 0xFA, 0x7A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xCD, 0x00, 0x00, 0x00, 0xF5, 0xF4, 0xF4, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0xCA, 0xC9, 0xC9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00,
0x88, 0x87, 0x87, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD0, 0x00, 0x00, 0x00, 0xB3, 0xB2, 0x32, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD1, 0x00, 0x00, 0x00, 0xDC, 0xDB, 0xDB, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00,
0x84, 0x83, 0x83, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD3, 0x00, 0x00, 0x00, 0xDD, 0xDC, 0xDC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0xEA, 0xE9, 0xE9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00,
0xF9, 0xF8, 0x78, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD6, 0x00, 0x00, 0x00, 0xA3, 0xA2, 0x22, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0xDA, 0xD9, 0xD9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00,
0xDB, 0xDA, 0x5A, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD9, 0x00, 0x00, 0x00, 0xE2, 0xE1, 0xE1, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 0x8E, 0x8D, 0x8D, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00,
0xE8, 0xE7, 0xE7, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xDC, 0x00, 0x00, 0x00, 0xCF, 0xCE, 0x4E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0xEA, 0xE9, 0xE9, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00,
0xB3, 0xB2, 0x32, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xDF, 0x00, 0x00, 0x00, 0x82, 0x81, 0x81, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xAE, 0xAD, 0xAD, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00,
0xB9, 0xB8, 0x38, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE2, 0x00, 0x00, 0x00, 0xC6, 0xC5, 0xC5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xAD, 0xAC, 0xAC, 0x39,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xBB, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE5, 0x00, 0x00, 0x00, 0xAF, 0xAE, 0x2E, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0xD4, 0xD3, 0xD3, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00,
0x98, 0x97, 0x97, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE8, 0x00, 0x00, 0x00, 0xED, 0xEC, 0xEC, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE9, 0x00, 0x00, 0x00, 0xE5, 0xE4, 0xE4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00,
0xC9, 0xC8, 0x48, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEB, 0x00, 0x00, 0x00, 0xC4, 0xC3, 0xC3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x96, 0x95, 0x95, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00,
0xB1, 0xB0, 0xB0, 0x38, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEE, 0x00, 0x00, 0x00, 0xF8, 0xF7, 0xF7, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0xB8, 0xB7, 0xB7, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00,
0x93, 0x92, 0x12, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF1, 0x00, 0x00, 0x00, 0xF1, 0xF0, 0xF0, 0x38, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0xA6, 0xA5, 0xA5, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00,
0x97, 0x96, 0x16, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF4, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x7E, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF5, 0x00, 0x00, 0x00, 0xAE, 0xAD, 0xAD, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00,
0xE9, 0xE8, 0x68, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF7, 0x00, 0x00, 0x00, 0xC7, 0xC6, 0x46, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xB2, 0xB1, 0xB1, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00,
0xC0, 0xBF, 0xBF, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xFA, 0x00, 0x00, 0x00, 0xE3, 0xE2, 0x62, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0xBD, 0xBC, 0xBC, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0x8F, 0x8E, 0x0E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xFD, 0x00, 0x00, 0x00, 0x94, 0x93, 0x93, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x85, 0x84, 0x84, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x93, 0x92, 0x12, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0xEE, 0xED, 0xED, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xE2, 0xE1, 0xE1, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
0x98, 0x97, 0x97, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x03, 0x01, 0x00, 0x00, 0xC3, 0xC2, 0x42, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0xCE, 0xCD, 0xCD, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
0xF1, 0xF0, 0xF0, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x06, 0x01, 0x00, 0x00, 0xA0, 0x9F, 0x9F, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0xF0, 0xEF, 0xEF, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
0xC1, 0xC0, 0xC0, 0x37, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x09, 0x01, 0x00, 0x00, 0xFC, 0xFB, 0xFB, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x00, 0xE4, 0xE3, 0xE3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0B, 0x01, 0x00, 0x00,
0xBB, 0xBA, 0x3A, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0C, 0x01, 0x00, 0x00, 0xCC, 0xCB, 0xCB, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0D, 0x01, 0x00, 0x00, 0xE0, 0xDF, 0xDF, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0E, 0x01, 0x00, 0x00,
0xA2, 0xA1, 0xA1, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0F, 0x01, 0x00, 0x00, 0xD9, 0xD8, 0x58, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x8A, 0x89, 0x89, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00,
0xBF, 0xBE, 0x3E, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x12, 0x01, 0x00, 0x00, 0xD6, 0xD5, 0xD5, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0xA5, 0xA4, 0xA4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
0xFD, 0xFC, 0xFC, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x15, 0x01, 0x00, 0x00, 0xEC, 0xEB, 0xEB, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0xF7, 0xF6, 0x76, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00,
0xB5, 0xB4, 0xB4, 0xB9, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x18, 0x01, 0x00, 0x00, 0xB7, 0xB6, 0x36, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x86, 0x85, 0x85, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00,
0xCE, 0xCD, 0xCD, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x1B, 0x01, 0x00, 0x00, 0xC1, 0xC0, 0xC0, 0xB7, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x1C, 0x01, 0x00, 0x00, 0xA8, 0xA7, 0xA7, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1D, 0x01, 0x00, 0x00,
0xD3, 0xD2, 0x52, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x1E, 0x01, 0x00, 0x00, 0xEB, 0xEA, 0x6A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x00, 0x00, 0xBC, 0xBB, 0xBB, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
0x9F, 0x9E, 0x1E, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x21, 0x01, 0x00, 0x00, 0xB1, 0xB0, 0xB0, 0xB8, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0xEF, 0xEE, 0x6E, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3B, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x24, 0x01, 0x00, 0x00, 0xB8, 0xB7, 0xB7, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0xA7, 0xA6, 0x26, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00,
0xC6, 0xC5, 0xC5, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x27, 0x01, 0x00, 0x00, 0xD7, 0xD6, 0x56, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0xA4, 0xA3, 0xA3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00,
0x85, 0x84, 0x84, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2A, 0x01, 0x00, 0x00, 0xC8, 0xC7, 0xC7, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2B, 0x01, 0x00, 0x00, 0x94, 0x93, 0x93, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00,
0xBD, 0xBC, 0xBC, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2D, 0x01, 0x00, 0x00, 0xCD, 0xCC, 0xCC, 0xB9, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2E, 0x01, 0x00, 0x00, 0xFA, 0xF9, 0xF9, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2F, 0x01, 0x00, 0x00,
0xB6, 0xB5, 0xB5, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x30, 0x01, 0x00, 0x00, 0x92, 0x91, 0x91, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0xD4, 0xD3, 0xD3, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00,
0xE7, 0xE6, 0x66, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x33, 0x01, 0x00, 0x00, 0x99, 0x98, 0x18, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x8E, 0x8D, 0x8D, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
0xE1, 0xE0, 0x60, 0xB8, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x36, 0x01, 0x00, 0x00, 0x95, 0x94, 0x94, 0x39, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0xDE, 0xDD, 0xDD, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00,
0xA6, 0xA5, 0xA5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x39, 0x01, 0x00, 0x00, 0x87, 0x86, 0x06, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3A, 0x01, 0x00, 0x00, 0xA9, 0xA8, 0x28, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3B, 0x01, 0x00, 0x00,
0xF6, 0xF5, 0xF5, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x3C, 0x01, 0x00, 0x00, 0xDB, 0xDA, 0x5A, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3D, 0x01, 0x00, 0x00, 0xA7, 0xA6, 0x26, 0x3A,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x00,
0x81, 0x80, 0x00, 0x37, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x3F, 0x01, 0x00, 0x00, 0xFA, 0xF9, 0xF9, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xE9, 0xE8, 0x68, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00,
0xC5, 0xC4, 0xC4, 0x39, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x42, 0x01, 0x00, 0x00, 0xE4, 0xE3, 0xE3, 0xBA, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x43, 0x01, 0x00, 0x00, 0xD5, 0xD4, 0xD4, 0xB9,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00,
0xA2, 0xA1, 0xA1, 0xBA, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x45, 0x01, 0x00, 0x00, 0xE0, 0xDF, 0xDF, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0xF7, 0xF6, 0x76, 0xBA,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00,
0xD7, 0xD6, 0x56, 0x3A, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x48, 0x01, 0x00, 0x00, 0xF2, 0xF1, 0xF1, 0x3A, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0xF5, 0xF4, 0xF4, 0x39,
0x2C, 0x00, 0x03, 0x01, 0x49, 0x00, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00,
0x4A, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00,
0x4D, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
0x56, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x59, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00,
0x5C, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00,
0x5F, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
0x62, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
0x68, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00,
0x6B, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00,
0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
0x77, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
0x7A, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
0x7D, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00,
0x86, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
0x89, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x00, 0x00,
0x8C, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00, 0x8E, 0x00, 0x00, 0x00,
0x8F, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
0x92, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00,
0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
0x98, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00,
0x9B, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x9D, 0x00, 0x00, 0x00,
0x9E, 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00,
0xA1, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00,
0xA4, 0x00, 0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00,
0xA7, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00,
0xAA, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0xAC, 0x00, 0x00, 0x00,
0xAD, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x00, 0x00, 0xAF, 0x00, 0x00, 0x00,
0xB0, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0xB2, 0x00, 0x00, 0x00,
0xB3, 0x00, 0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00,
0xB6, 0x00, 0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00,
0xB9, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0xBC, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0xBE, 0x00, 0x00, 0x00,
0xBF, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC1, 0x00, 0x00, 0x00,
0xC2, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00,
0xC5, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00,
0xC8, 0x00, 0x00, 0x00, 0xC9, 0x00, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x00,
0xCB, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00,
0xCE, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00,
0xD1, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 0xD3, 0x00, 0x00, 0x00,
0xD4, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00,
0xD7, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00, 0xD9, 0x00, 0x00, 0x00,
0xDA, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00,
0xDD, 0x00, 0x00, 0x00, 0xDE, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00,
0xE0, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x00,
0xE3, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00, 0x00, 0x00,
0xE6, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00,
0xE9, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00,
0xEC, 0x00, 0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00,
0xEF, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00,
0xF2, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00,
0xF5, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00,
0xF8, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00, 0xFA, 0x00, 0x00, 0x00,
0xFB, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x00, 0x00,
0xFE, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
0x04, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00,
0x07, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
0x0A, 0x01, 0x00, 0x00, 0x0B, 0x01, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x00,
0x0D, 0x01, 0x00, 0x00, 0x0E, 0x01, 0x00, 0x00, 0x0F, 0x01, 0x00, 0x00,
0x10, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00,
0x13, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00,
0x16, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
0x19, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x00,
0x1C, 0x01, 0x00, 0x00, 0x1D, 0x01, 0x00, 0x00, 0x1E, 0x01, 0x00, 0x00,
0x1F, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00,
0x22, 0x01, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00,
0x25, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00,
0x28, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x00,
0x2B, 0x01, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x00, 0x2D, 0x01, 0x00, 0x00,
0x2E, 0x01, 0x00, 0x00, 0x2F, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00,
0x31, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00,
0x34, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00,
0x37, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00,
0x3A, 0x01, 0x00, 0x00, 0x3B, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x00,
0x3D, 0x01, 0x00, 0x00, 0x3E, 0x01, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x00,
0x40, 0x01, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00,
0x43, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00,
0x46, 0x01, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00,
0x49, 0x01, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x4B, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4E, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x01, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x7F, 0x01, 0x00, 0x00, 0xFF, 0x9F, 0xF1, 0x7E, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0x19, 0x00, 0x09, 0x00, 0x92, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x03, 0x00, 0x93, 0x01, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x93, 0x01, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00,
0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x2C, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x9B, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x00, 0x00,
0xA9, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x05, 0x00,
0x2D, 0x00, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
0xA9, 0x01, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00,
0xB1, 0x01, 0x00, 0x00, 0xA9, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x2C, 0x00, 0x00, 0x00, 0xBD, 0x01, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00,
0xBE, 0x01, 0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00,
0x98, 0x01, 0x00, 0x00, 0xBD, 0x01, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD1, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3E, 0x17, 0x00, 0x04, 0x00, 0xE4, 0x02, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE7, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00,
0x00, 0x00, 0x80, 0x40, 0x2B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0xBE, 0x20, 0x00, 0x04, 0x00,
0xA5, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0xA5, 0x03, 0x00, 0x00, 0xA6, 0x03, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00, 0xAA, 0x03, 0x00, 0x00,
0x2D, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xAB, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xAA, 0x03, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0xAB, 0x03, 0x00, 0x00, 0xAC, 0x03, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xAD, 0x03, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xB3, 0x03, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xBC, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x2F, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0xBC, 0x03, 0x00, 0x00,
0xBD, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xC7, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x06, 0x00, 0x9B, 0x01, 0x00, 0x00, 0xD4, 0x03, 0x00, 0x00,
0x76, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00,
0x2C, 0x00, 0x06, 0x00, 0x9B, 0x01, 0x00, 0x00, 0xD5, 0x03, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xDD, 0x03, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00,
0x4D, 0x07, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00,
0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00,
0x05, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x54, 0x01, 0x00, 0x00,
0x1B, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x2F, 0x00, 0x00, 0x00, 0xA7, 0x03, 0x00, 0x00, 0xA6, 0x03, 0x00, 0x00,
0x4F, 0x00, 0x07, 0x00, 0xE4, 0x02, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00,
0xA7, 0x03, 0x00, 0x00, 0xA7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00,
0xA9, 0x03, 0x00, 0x00, 0xA8, 0x03, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xAD, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0xAC, 0x03, 0x00, 0x00,
0x98, 0x01, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00,
0xAF, 0x03, 0x00, 0x00, 0xAE, 0x03, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x2D, 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0xA9, 0x03, 0x00, 0x00,
0xAF, 0x03, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
0xB1, 0x03, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xB3, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0xAC, 0x03, 0x00, 0x00,
0xBD, 0x01, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0xB5, 0x03, 0x00, 0x00, 0xB4, 0x03, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB6, 0x03, 0x00, 0x00, 0xB5, 0x03, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00,
0xB1, 0x03, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x68, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0xAA, 0x01, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x93, 0x01, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00,
0x95, 0x01, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x92, 0x01, 0x00, 0x00,
0xD4, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x2F, 0x00, 0x00, 0x00, 0xD5, 0x05, 0x00, 0x00, 0xD4, 0x05, 0x00, 0x00,
0x68, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD7, 0x05, 0x00, 0x00,
0xD5, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD8, 0x05, 0x00, 0x00, 0xD5, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xD9, 0x05, 0x00, 0x00, 0xD5, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00,
0x66, 0x04, 0x00, 0x00, 0xB1, 0x01, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x92, 0x01, 0x00, 0x00, 0xDF, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x00, 0x00, 0xE0, 0x05, 0x00, 0x00,
0xDF, 0x05, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x98, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xE2, 0x05, 0x00, 0x00, 0xE0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00,
0xE0, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00, 0xE0, 0x05, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x92, 0x01, 0x00, 0x00,
0xEA, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x2F, 0x00, 0x00, 0x00, 0xEB, 0x05, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00,
0x66, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xED, 0x05, 0x00, 0x00,
0xEB, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEF, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00,
0x66, 0x04, 0x00, 0x00, 0xBE, 0x01, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x92, 0x01, 0x00, 0x00, 0xF5, 0x05, 0x00, 0x00, 0xD2, 0x05, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x00, 0x00, 0xF6, 0x05, 0x00, 0x00,
0xF5, 0x05, 0x00, 0x00, 0x73, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x98, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xF8, 0x05, 0x00, 0x00, 0xF6, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF9, 0x05, 0x00, 0x00,
0xF6, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xFA, 0x05, 0x00, 0x00, 0xF6, 0x05, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x77, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00, 0xC5, 0x01, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x92, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
0xD2, 0x05, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x01, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x04, 0x06, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00,
0x01, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x83, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xE2, 0x05, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x84, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xD7, 0x05, 0x00, 0x00,
0x83, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x17, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x84, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8A, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00, 0xF9, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8B, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xD8, 0x05, 0x00, 0x00,
0x8A, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x1D, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x8B, 0x06, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x91, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00, 0xFA, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x92, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xD9, 0x05, 0x00, 0x00,
0x91, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x23, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x92, 0x06, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x98, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xE2, 0x05, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x99, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xD7, 0x05, 0x00, 0x00,
0x98, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x29, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x99, 0x06, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x9F, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00, 0xF9, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA0, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xD8, 0x05, 0x00, 0x00,
0x9F, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x2F, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0xA0, 0x06, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA6, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00, 0xFA, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA7, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xD9, 0x05, 0x00, 0x00,
0xA6, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x35, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0xA7, 0x06, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x17, 0x05, 0x00, 0x00, 0xED, 0x05, 0x00, 0x00,
0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB0, 0x06, 0x00, 0x00,
0x68, 0x02, 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x3D, 0x05, 0x00, 0x00, 0x38, 0x05, 0x00, 0x00,
0xB0, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x40, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x1D, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xBC, 0x06, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00,
0x2F, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x45, 0x05, 0x00, 0x00, 0x40, 0x05, 0x00, 0x00, 0xBC, 0x06, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x48, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x23, 0x05, 0x00, 0x00,
0xEF, 0x05, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xC8, 0x06, 0x00, 0x00, 0x68, 0x02, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4D, 0x05, 0x00, 0x00,
0x48, 0x05, 0x00, 0x00, 0xC8, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x52, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x29, 0x05, 0x00, 0x00, 0xED, 0x05, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x53, 0x05, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x52, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x56, 0x05, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00,
0x17, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x59, 0x05, 0x00, 0x00, 0x56, 0x05, 0x00, 0x00, 0xE7, 0x02, 0x00, 0x00,
0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xD4, 0x06, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x59, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x5B, 0x05, 0x00, 0x00, 0x53, 0x05, 0x00, 0x00,
0xD4, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x60, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x2F, 0x05, 0x00, 0x00, 0xEE, 0x05, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x61, 0x05, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00,
0x60, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x64, 0x05, 0x00, 0x00, 0xED, 0x02, 0x00, 0x00, 0x1D, 0x05, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x67, 0x05, 0x00, 0x00,
0x64, 0x05, 0x00, 0x00, 0xE7, 0x02, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00,
0x67, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x69, 0x05, 0x00, 0x00, 0x61, 0x05, 0x00, 0x00, 0xE0, 0x06, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x6E, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x35, 0x05, 0x00, 0x00,
0xEF, 0x05, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x6F, 0x05, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00, 0x6E, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x72, 0x05, 0x00, 0x00,
0xED, 0x02, 0x00, 0x00, 0x23, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x75, 0x05, 0x00, 0x00, 0x72, 0x05, 0x00, 0x00,
0xE7, 0x02, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xEC, 0x06, 0x00, 0x00, 0x6E, 0x01, 0x00, 0x00, 0x75, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x77, 0x05, 0x00, 0x00,
0x6F, 0x05, 0x00, 0x00, 0xEC, 0x06, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x79, 0x05, 0x00, 0x00, 0x3D, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7B, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x79, 0x05, 0x00, 0x00,
0x5B, 0x05, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x7D, 0x05, 0x00, 0x00, 0x45, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x7F, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x7D, 0x05, 0x00, 0x00, 0x69, 0x05, 0x00, 0x00,
0x7F, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x81, 0x05, 0x00, 0x00,
0x4D, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x83, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x81, 0x05, 0x00, 0x00, 0x77, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0xF8, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x7F, 0x05, 0x00, 0x00, 0x83, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00, 0xF9, 0x06, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x7B, 0x05, 0x00, 0x00,
0xF8, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8A, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xF9, 0x06, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x09, 0x00, 0x00, 0x00, 0x8B, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8E, 0x05, 0x00, 0x00,
0xB6, 0x03, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x8F, 0x05, 0x00, 0x00, 0x8B, 0x05, 0x00, 0x00, 0x8E, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x92, 0x05, 0x00, 0x00,
0xED, 0x02, 0x00, 0x00, 0x8F, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x94, 0x05, 0x00, 0x00, 0x92, 0x05, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0A, 0x07, 0x00, 0x00, 0x94, 0x05, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00,
0x0A, 0x07, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0C, 0x07, 0x00, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00,
0x09, 0x00, 0x00, 0x00, 0x0F, 0x07, 0x00, 0x00, 0x0C, 0x07, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00,
0x0F, 0x07, 0x00, 0x00, 0x94, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x13, 0x07, 0x00, 0x00, 0x11, 0x07, 0x00, 0x00,
0x8B, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x14, 0x07, 0x00, 0x00, 0x0C, 0x07, 0x00, 0x00, 0x13, 0x07, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x44, 0x07, 0x00, 0x00,
0xD7, 0x05, 0x00, 0x00, 0xE2, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x45, 0x07, 0x00, 0x00, 0x44, 0x07, 0x00, 0x00,
0x03, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x46, 0x07, 0x00, 0x00, 0x45, 0x07, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xA4, 0x05, 0x00, 0x00,
0x8F, 0x05, 0x00, 0x00, 0x46, 0x07, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xA6, 0x05, 0x00, 0x00, 0xA4, 0x05, 0x00, 0x00,
0xED, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xA8, 0x05, 0x00, 0x00, 0xA6, 0x05, 0x00, 0x00, 0x14, 0x07, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x47, 0x07, 0x00, 0x00,
0xD8, 0x05, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x48, 0x07, 0x00, 0x00, 0x47, 0x07, 0x00, 0x00,
0x04, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x49, 0x07, 0x00, 0x00, 0x48, 0x07, 0x00, 0x00, 0xF9, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xB7, 0x05, 0x00, 0x00,
0x8F, 0x05, 0x00, 0x00, 0x49, 0x07, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xB9, 0x05, 0x00, 0x00, 0xB7, 0x05, 0x00, 0x00,
0xEE, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xBB, 0x05, 0x00, 0x00, 0xB9, 0x05, 0x00, 0x00, 0x14, 0x07, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4A, 0x07, 0x00, 0x00,
0xD9, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0x4B, 0x07, 0x00, 0x00, 0x4A, 0x07, 0x00, 0x00,
0x05, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0x4C, 0x07, 0x00, 0x00, 0x4B, 0x07, 0x00, 0x00, 0xFA, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xCA, 0x05, 0x00, 0x00,
0x8F, 0x05, 0x00, 0x00, 0x4C, 0x07, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xCC, 0x05, 0x00, 0x00, 0xCA, 0x05, 0x00, 0x00,
0xEF, 0x05, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xCE, 0x05, 0x00, 0x00, 0xCC, 0x05, 0x00, 0x00, 0x14, 0x07, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xC7, 0x03, 0x00, 0x00, 0xC8, 0x03, 0x00, 0x00,
0xBD, 0x03, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xC8, 0x03, 0x00, 0x00, 0xA8, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xC7, 0x03, 0x00, 0x00, 0xCA, 0x03, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00,
0x4B, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xCA, 0x03, 0x00, 0x00,
0xBB, 0x05, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xC7, 0x03, 0x00, 0x00,
0xCC, 0x03, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00, 0xD1, 0x01, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xCC, 0x03, 0x00, 0x00, 0xCE, 0x05, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x00, 0x00, 0xCD, 0x03, 0x00, 0x00,
0xBD, 0x03, 0x00, 0x00, 0x4F, 0x00, 0x08, 0x00, 0x9B, 0x01, 0x00, 0x00,
0xCE, 0x03, 0x00, 0x00, 0xCD, 0x03, 0x00, 0x00, 0xCD, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0xC7, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x20, 0x07, 0x00, 0x00,
0xB1, 0x03, 0x00, 0x00, 0x4D, 0x07, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x22, 0x07, 0x00, 0x00, 0x20, 0x07, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x84, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x23, 0x07, 0x00, 0x00, 0x22, 0x07, 0x00, 0x00, 0x4E, 0x01, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x25, 0x07, 0x00, 0x00,
0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x26, 0x07, 0x00, 0x00, 0x23, 0x07, 0x00, 0x00,
0x25, 0x07, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0x1B, 0x07, 0x00, 0x00,
0x4A, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x27, 0x07, 0x00, 0x00, 0x1B, 0x07, 0x00, 0x00, 0x26, 0x07, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00,
0x27, 0x07, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x9B, 0x01, 0x00, 0x00,
0xD2, 0x03, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00, 0x28, 0x07, 0x00, 0x00,
0x28, 0x07, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x9B, 0x01, 0x00, 0x00,
0xD3, 0x03, 0x00, 0x00, 0xCE, 0x03, 0x00, 0x00, 0xD2, 0x03, 0x00, 0x00,
0x0C, 0x00, 0x08, 0x00, 0x9B, 0x01, 0x00, 0x00, 0xD6, 0x03, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xD3, 0x03, 0x00, 0x00,
0xD4, 0x03, 0x00, 0x00, 0xD5, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x09, 0x00, 0x00, 0x00, 0xD8, 0x03, 0x00, 0x00, 0xD6, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xC8, 0x03, 0x00, 0x00,
0xD8, 0x03, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00,
0xDA, 0x03, 0x00, 0x00, 0xD6, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xCA, 0x03, 0x00, 0x00, 0xDA, 0x03, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0xDC, 0x03, 0x00, 0x00,
0xD6, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xCC, 0x03, 0x00, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xC7, 0x03, 0x00, 0x00, 0xDE, 0x03, 0x00, 0x00, 0xBD, 0x03, 0x00, 0x00,
0xDD, 0x03, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xDE, 0x03, 0x00, 0x00,
0x6E, 0x01, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00,
};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,345 @@
// generated from `xb genspirv`
// source: guest_output_ffx_fsr_rcas.frag
const uint8_t guest_output_ffx_fsr_rcas_frag[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x15, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x8E, 0x02, 0x00, 0x00, 0xA5, 0x02, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00,
0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x02, 0x00, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x04, 0x00, 0x0A, 0x00,
0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C, 0x45, 0x5F, 0x63, 0x70,
0x70, 0x5F, 0x73, 0x74, 0x79, 0x6C, 0x65, 0x5F, 0x6C, 0x69, 0x6E, 0x65,
0x5F, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00,
0x04, 0x00, 0x08, 0x00, 0x47, 0x4C, 0x5F, 0x47, 0x4F, 0x4F, 0x47, 0x4C,
0x45, 0x5F, 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x5F, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x05, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x8E, 0x02, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6F, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
0x92, 0x02, 0x00, 0x00, 0x58, 0x65, 0x46, 0x73, 0x72, 0x52, 0x63, 0x61,
0x73, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61, 0x6E, 0x74, 0x73, 0x00, 0x00,
0x06, 0x00, 0x0A, 0x00, 0x92, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x66, 0x73, 0x72, 0x5F, 0x72, 0x63, 0x61, 0x73, 0x5F,
0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65,
0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x92, 0x02, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x66, 0x73, 0x72, 0x5F, 0x72,
0x63, 0x61, 0x73, 0x5F, 0x73, 0x68, 0x61, 0x72, 0x70, 0x6E, 0x65, 0x73,
0x73, 0x5F, 0x70, 0x6F, 0x73, 0x74, 0x5F, 0x73, 0x65, 0x74, 0x75, 0x70,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x94, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0xA5, 0x02, 0x00, 0x00,
0x78, 0x65, 0x5F, 0x66, 0x72, 0x61, 0x67, 0x5F, 0x63, 0x6F, 0x6C, 0x6F,
0x72, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x7B, 0x00, 0x00, 0x00,
0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0x7B, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x8E, 0x02, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
0x0F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x92, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00,
0x92, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00,
0xA5, 0x02, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00,
0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
0x26, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
0xFF, 0x9F, 0xF1, 0x7E, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x19, 0x00, 0x09, 0x00,
0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00,
0x79, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x26, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0x2C, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00,
0xA3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0xAB, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xA3, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xB5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3E, 0x17, 0x00, 0x04, 0x00, 0xCC, 0x01, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD5, 0x01, 0x00, 0x00,
0x00, 0x00, 0x80, 0x40, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x36, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xBE, 0x20, 0x00, 0x04, 0x00,
0x8D, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0x8D, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00, 0x92, 0x02, 0x00, 0x00,
0x27, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x93, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x92, 0x02, 0x00, 0x00,
0x3B, 0x00, 0x04, 0x00, 0x93, 0x02, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x95, 0x02, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x9B, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0xA4, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x29, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0xA4, 0x02, 0x00, 0x00,
0xA5, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0xAF, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x29, 0x00, 0x00, 0x00, 0x8F, 0x02, 0x00, 0x00, 0x8E, 0x02, 0x00, 0x00,
0x4F, 0x00, 0x07, 0x00, 0xCC, 0x01, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00,
0x8F, 0x02, 0x00, 0x00, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
0x91, 0x02, 0x00, 0x00, 0x90, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x95, 0x02, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00,
0x97, 0x02, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x27, 0x00, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00,
0x97, 0x02, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
0x99, 0x02, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0x9B, 0x02, 0x00, 0x00, 0x9C, 0x02, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00,
0xA3, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x9D, 0x02, 0x00, 0x00, 0x9C, 0x02, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00,
0x0C, 0x00, 0x00, 0x00, 0x9E, 0x02, 0x00, 0x00, 0x9D, 0x02, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x00,
0x99, 0x02, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x79, 0x00, 0x00, 0x00, 0xAA, 0x04, 0x00, 0x00,
0x7B, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00, 0x00,
0xAC, 0x04, 0x00, 0x00, 0xAA, 0x04, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x29, 0x00, 0x00, 0x00, 0xAD, 0x04, 0x00, 0x00, 0xAC, 0x04, 0x00, 0x00,
0x40, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAF, 0x04, 0x00, 0x00,
0xAD, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00, 0xAD, 0x04, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xB1, 0x04, 0x00, 0x00, 0xAD, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00,
0x3E, 0x03, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x78, 0x00, 0x00, 0x00, 0xB7, 0x04, 0x00, 0x00, 0xAA, 0x04, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x00, 0x00, 0xB8, 0x04, 0x00, 0x00,
0xB7, 0x04, 0x00, 0x00, 0x44, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xBA, 0x04, 0x00, 0x00, 0xB8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00,
0xB8, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xB8, 0x04, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00, 0x00,
0xC2, 0x04, 0x00, 0x00, 0xAA, 0x04, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00,
0x29, 0x00, 0x00, 0x00, 0xC3, 0x04, 0x00, 0x00, 0xC2, 0x04, 0x00, 0x00,
0x3E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x00,
0xC3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xC6, 0x04, 0x00, 0x00, 0xC3, 0x04, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC7, 0x04, 0x00, 0x00, 0xC3, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x80, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00,
0x3E, 0x03, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00,
0x78, 0x00, 0x00, 0x00, 0xCD, 0x04, 0x00, 0x00, 0xAA, 0x04, 0x00, 0x00,
0x5F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00,
0xCD, 0x04, 0x00, 0x00, 0x4B, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xD0, 0x04, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00,
0xCE, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD2, 0x04, 0x00, 0x00, 0xCE, 0x04, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x27, 0x00, 0x00, 0x00,
0x4F, 0x03, 0x00, 0x00, 0x3E, 0x03, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00,
0x64, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00, 0x00, 0xD8, 0x04, 0x00, 0x00,
0xAA, 0x04, 0x00, 0x00, 0x5F, 0x00, 0x07, 0x00, 0x29, 0x00, 0x00, 0x00,
0xD9, 0x04, 0x00, 0x00, 0xD8, 0x04, 0x00, 0x00, 0x4F, 0x03, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xDB, 0x04, 0x00, 0x00, 0xD9, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xDC, 0x04, 0x00, 0x00, 0xD9, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xDD, 0x04, 0x00, 0x00,
0xD9, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x5B, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xBA, 0x04, 0x00, 0x00, 0xD0, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5C, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xAF, 0x04, 0x00, 0x00,
0x5B, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xEF, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x5C, 0x05, 0x00, 0x00, 0xDB, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x62, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x63, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00,
0x62, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xF5, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x63, 0x05, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x69, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xD2, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6A, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00,
0x69, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0xFB, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x6A, 0x05, 0x00, 0x00, 0xDD, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x70, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xBA, 0x04, 0x00, 0x00, 0xD0, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x71, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xAF, 0x04, 0x00, 0x00,
0x70, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x71, 0x05, 0x00, 0x00, 0xDB, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x77, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x78, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xB0, 0x04, 0x00, 0x00,
0x77, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x07, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x78, 0x05, 0x00, 0x00, 0xDC, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x7E, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0xD2, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7F, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xB1, 0x04, 0x00, 0x00,
0x7E, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0D, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x7F, 0x05, 0x00, 0x00, 0xDD, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0xEF, 0x03, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x00,
0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x05, 0x00, 0x00,
0x50, 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00,
0x88, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x18, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xF5, 0x03, 0x00, 0x00, 0xC6, 0x04, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x94, 0x05, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
0x07, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x1D, 0x04, 0x00, 0x00, 0x18, 0x04, 0x00, 0x00, 0x94, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00,
0xC7, 0x04, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA0, 0x05, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x0D, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x25, 0x04, 0x00, 0x00,
0x20, 0x04, 0x00, 0x00, 0xA0, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2A, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x00,
0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2B, 0x04, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x2A, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0xD5, 0x01, 0x00, 0x00,
0xEF, 0x03, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x31, 0x04, 0x00, 0x00, 0x2E, 0x04, 0x00, 0x00, 0xCF, 0x01, 0x00, 0x00,
0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xAC, 0x05, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x31, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x33, 0x04, 0x00, 0x00, 0x2B, 0x04, 0x00, 0x00,
0xAC, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x38, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x07, 0x04, 0x00, 0x00, 0xC6, 0x04, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x38, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x3C, 0x04, 0x00, 0x00, 0xD5, 0x01, 0x00, 0x00, 0xF5, 0x03, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3F, 0x04, 0x00, 0x00,
0x3C, 0x04, 0x00, 0x00, 0xCF, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xB8, 0x05, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
0x3F, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x41, 0x04, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0xB8, 0x05, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0D, 0x04, 0x00, 0x00,
0xC7, 0x04, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x47, 0x04, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4A, 0x04, 0x00, 0x00,
0xD5, 0x01, 0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x4D, 0x04, 0x00, 0x00, 0x4A, 0x04, 0x00, 0x00,
0xCF, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xC4, 0x05, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4D, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4F, 0x04, 0x00, 0x00,
0x47, 0x04, 0x00, 0x00, 0xC4, 0x05, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x51, 0x04, 0x00, 0x00,
0x33, 0x04, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x55, 0x04, 0x00, 0x00, 0x1D, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x55, 0x04, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00,
0x7F, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x59, 0x04, 0x00, 0x00,
0x25, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x5B, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x59, 0x04, 0x00, 0x00, 0x4F, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0xD0, 0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x57, 0x04, 0x00, 0x00, 0x5B, 0x04, 0x00, 0x00,
0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0xD1, 0x05, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00,
0xD0, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00,
0x62, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0xD1, 0x05, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x07, 0x00,
0x06, 0x00, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x62, 0x04, 0x00, 0x00,
0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00,
0x9E, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x67, 0x04, 0x00, 0x00, 0x63, 0x04, 0x00, 0x00, 0x66, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6A, 0x04, 0x00, 0x00,
0xD5, 0x01, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x6A, 0x04, 0x00, 0x00,
0x54, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x00, 0x00,
0xE2, 0x05, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00,
0x0C, 0x00, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
0xE2, 0x05, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0xE4, 0x05, 0x00, 0x00, 0xE3, 0x05, 0x00, 0x00, 0x7F, 0x00, 0x04, 0x00,
0x06, 0x00, 0x00, 0x00, 0xE7, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xE9, 0x05, 0x00, 0x00,
0xE7, 0x05, 0x00, 0x00, 0x6C, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xEB, 0x05, 0x00, 0x00, 0xE9, 0x05, 0x00, 0x00,
0x71, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xEC, 0x05, 0x00, 0x00, 0xE4, 0x05, 0x00, 0x00, 0xEB, 0x05, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x00, 0x00,
0xAF, 0x04, 0x00, 0x00, 0xBA, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x0D, 0x06, 0x00, 0x00, 0x0C, 0x06, 0x00, 0x00,
0xDB, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x0E, 0x06, 0x00, 0x00, 0x0D, 0x06, 0x00, 0x00, 0xD0, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00,
0x67, 0x04, 0x00, 0x00, 0x0E, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x7E, 0x04, 0x00, 0x00, 0x7C, 0x04, 0x00, 0x00,
0xC5, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x80, 0x04, 0x00, 0x00, 0x7E, 0x04, 0x00, 0x00, 0xEC, 0x05, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0F, 0x06, 0x00, 0x00,
0xB0, 0x04, 0x00, 0x00, 0xBB, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0x0F, 0x06, 0x00, 0x00,
0xDC, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x11, 0x06, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0xD1, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8F, 0x04, 0x00, 0x00,
0x67, 0x04, 0x00, 0x00, 0x11, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x91, 0x04, 0x00, 0x00, 0x8F, 0x04, 0x00, 0x00,
0xC6, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x93, 0x04, 0x00, 0x00, 0x91, 0x04, 0x00, 0x00, 0xEC, 0x05, 0x00, 0x00,
0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x06, 0x00, 0x00,
0xB1, 0x04, 0x00, 0x00, 0xBC, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0x13, 0x06, 0x00, 0x00, 0x12, 0x06, 0x00, 0x00,
0xDD, 0x04, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x14, 0x06, 0x00, 0x00, 0x13, 0x06, 0x00, 0x00, 0xD2, 0x04, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xA2, 0x04, 0x00, 0x00,
0x67, 0x04, 0x00, 0x00, 0x14, 0x06, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x06, 0x00, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xA2, 0x04, 0x00, 0x00,
0xC7, 0x04, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0xA6, 0x04, 0x00, 0x00, 0xA4, 0x04, 0x00, 0x00, 0xEC, 0x05, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xAF, 0x02, 0x00, 0x00, 0xB0, 0x02, 0x00, 0x00,
0xA5, 0x02, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xB0, 0x02, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
0xAF, 0x02, 0x00, 0x00, 0xB2, 0x02, 0x00, 0x00, 0xA5, 0x02, 0x00, 0x00,
0xB5, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xB2, 0x02, 0x00, 0x00,
0x93, 0x04, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xAF, 0x02, 0x00, 0x00,
0xB4, 0x02, 0x00, 0x00, 0xA5, 0x02, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00,
0x3E, 0x00, 0x03, 0x00, 0xB4, 0x02, 0x00, 0x00, 0xA6, 0x04, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0xAF, 0x02, 0x00, 0x00, 0xB6, 0x02, 0x00, 0x00,
0xA5, 0x02, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0xB6, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00,
0x38, 0x00, 0x01, 0x00,
};

View File

@@ -0,0 +1,207 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 1557
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %gl_FragCoord %xe_frag_color
OpExecutionMode %main OriginUpperLeft
OpSource GLSL 420
OpSourceExtension "GL_GOOGLE_cpp_style_line_directive"
OpSourceExtension "GL_GOOGLE_include_directive"
OpName %main "main"
OpName %xe_texture "xe_texture"
OpName %gl_FragCoord "gl_FragCoord"
OpName %XeFsrRcasConstants "XeFsrRcasConstants"
OpMemberName %XeFsrRcasConstants 0 "xe_fsr_rcas_output_offset"
OpMemberName %XeFsrRcasConstants 1 "xe_fsr_rcas_sharpness_post_setup"
OpName %_ ""
OpName %xe_frag_color "xe_frag_color"
OpDecorate %xe_texture DescriptorSet 0
OpDecorate %xe_texture Binding 0
OpDecorate %gl_FragCoord BuiltIn FragCoord
OpMemberDecorate %XeFsrRcasConstants 0 Offset 16
OpMemberDecorate %XeFsrRcasConstants 1 Offset 24
OpDecorate %XeFsrRcasConstants Block
OpDecorate %xe_frag_color Location 0
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%uint = OpTypeInt 32 0
%int = OpTypeInt 32 1
%v2int = OpTypeVector %int 2
%v4float = OpTypeVector %float 4
%v2uint = OpTypeVector %uint 2
%float_1 = OpConstant %float 1
%float_0 = OpConstant %float 0
%uint_2129764351 = OpConstant %uint 2129764351
%float_2 = OpConstant %float 2
%120 = OpTypeImage %float 2D 0 0 0 1 Unknown
%121 = OpTypeSampledImage %120
%_ptr_UniformConstant_121 = OpTypePointer UniformConstant %121
%xe_texture = OpVariable %_ptr_UniformConstant_121 UniformConstant
%int_0 = OpConstant %int 0
%int_n1 = OpConstant %int -1
%144 = OpConstantComposite %v2int %int_0 %int_n1
%151 = OpConstantComposite %v2int %int_n1 %int_0
%int_1 = OpConstant %int 1
%164 = OpConstantComposite %v2int %int_1 %int_0
%171 = OpConstantComposite %v2int %int_0 %int_1
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%uint_2 = OpConstant %uint 2
%float_0_25 = OpConstant %float 0.25
%v2float = OpTypeVector %float 2
%float_n4 = OpConstant %float -4
%float_4 = OpConstant %float 4
%float_n0_1875 = OpConstant %float -0.1875
%_ptr_Input_v4float = OpTypePointer Input %v4float
%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
%XeFsrRcasConstants = OpTypeStruct %v2int %float
%_ptr_PushConstant_XeFsrRcasConstants = OpTypePointer PushConstant %XeFsrRcasConstants
%_ = OpVariable %_ptr_PushConstant_XeFsrRcasConstants PushConstant
%_ptr_PushConstant_v2int = OpTypePointer PushConstant %v2int
%_ptr_PushConstant_float = OpTypePointer PushConstant %float
%_ptr_Output_v4float = OpTypePointer Output %v4float
%xe_frag_color = OpVariable %_ptr_Output_v4float Output
%_ptr_Output_float = OpTypePointer Output %float
%uint_3 = OpConstant %uint 3
%main = OpFunction %void None %3
%5 = OpLabel
%655 = OpLoad %v4float %gl_FragCoord
%656 = OpVectorShuffle %v2float %655 %655 0 1
%657 = OpConvertFToS %v2int %656
%662 = OpAccessChain %_ptr_PushConstant_v2int %_ %int_0
%663 = OpLoad %v2int %662
%664 = OpISub %v2int %657 %663
%665 = OpBitcast %v2uint %664
%668 = OpAccessChain %_ptr_PushConstant_float %_ %int_1
%669 = OpLoad %float %668
%670 = OpBitcast %uint %669
%830 = OpBitcast %v2int %665
%832 = OpIAdd %v2int %830 %144
%1194 = OpLoad %121 %xe_texture
%1196 = OpImage %120 %1194
%1197 = OpImageFetch %v4float %1196 %832 Lod %int_0
%1199 = OpCompositeExtract %float %1197 0
%1200 = OpCompositeExtract %float %1197 1
%1201 = OpCompositeExtract %float %1197 2
%836 = OpIAdd %v2int %830 %151
%1207 = OpImage %120 %1194
%1208 = OpImageFetch %v4float %1207 %836 Lod %int_0
%1210 = OpCompositeExtract %float %1208 0
%1211 = OpCompositeExtract %float %1208 1
%1212 = OpCompositeExtract %float %1208 2
%1218 = OpImage %120 %1194
%1219 = OpImageFetch %v4float %1218 %830 Lod %int_0
%1221 = OpCompositeExtract %float %1219 0
%1222 = OpCompositeExtract %float %1219 1
%1223 = OpCompositeExtract %float %1219 2
%843 = OpIAdd %v2int %830 %164
%1229 = OpImage %120 %1194
%1230 = OpImageFetch %v4float %1229 %843 Lod %int_0
%1232 = OpCompositeExtract %float %1230 0
%1233 = OpCompositeExtract %float %1230 1
%1234 = OpCompositeExtract %float %1230 2
%847 = OpIAdd %v2int %830 %171
%1240 = OpImage %120 %1194
%1241 = OpImageFetch %v4float %1240 %847 Lod %int_0
%1243 = OpCompositeExtract %float %1241 0
%1244 = OpCompositeExtract %float %1241 1
%1245 = OpCompositeExtract %float %1241 2
%1371 = OpExtInst %float %1 FMin %1210 %1232
%1372 = OpExtInst %float %1 FMin %1199 %1371
%1007 = OpExtInst %float %1 FMin %1372 %1243
%1378 = OpExtInst %float %1 FMin %1211 %1233
%1379 = OpExtInst %float %1 FMin %1200 %1378
%1013 = OpExtInst %float %1 FMin %1379 %1244
%1385 = OpExtInst %float %1 FMin %1212 %1234
%1386 = OpExtInst %float %1 FMin %1201 %1385
%1019 = OpExtInst %float %1 FMin %1386 %1245
%1392 = OpExtInst %float %1 FMax %1210 %1232
%1393 = OpExtInst %float %1 FMax %1199 %1392
%1025 = OpExtInst %float %1 FMax %1393 %1243
%1399 = OpExtInst %float %1 FMax %1211 %1233
%1400 = OpExtInst %float %1 FMax %1200 %1399
%1031 = OpExtInst %float %1 FMax %1400 %1244
%1406 = OpExtInst %float %1 FMax %1212 %1234
%1407 = OpExtInst %float %1 FMax %1201 %1406
%1037 = OpExtInst %float %1 FMax %1407 %1245
%1040 = OpExtInst %float %1 FMin %1007 %1221
%1416 = OpFDiv %float %float_0_25 %1025
%1045 = OpFMul %float %1040 %1416
%1048 = OpExtInst %float %1 FMin %1013 %1222
%1428 = OpFDiv %float %float_0_25 %1031
%1053 = OpFMul %float %1048 %1428
%1056 = OpExtInst %float %1 FMin %1019 %1223
%1440 = OpFDiv %float %float_0_25 %1037
%1061 = OpFMul %float %1056 %1440
%1066 = OpExtInst %float %1 FMax %1025 %1221
%1067 = OpFSub %float %float_1 %1066
%1070 = OpFMul %float %float_4 %1007
%1073 = OpFAdd %float %1070 %float_n4
%1452 = OpFDiv %float %float_1 %1073
%1075 = OpFMul %float %1067 %1452
%1080 = OpExtInst %float %1 FMax %1031 %1222
%1081 = OpFSub %float %float_1 %1080
%1084 = OpFMul %float %float_4 %1013
%1087 = OpFAdd %float %1084 %float_n4
%1464 = OpFDiv %float %float_1 %1087
%1089 = OpFMul %float %1081 %1464
%1094 = OpExtInst %float %1 FMax %1037 %1223
%1095 = OpFSub %float %float_1 %1094
%1098 = OpFMul %float %float_4 %1019
%1101 = OpFAdd %float %1098 %float_n4
%1476 = OpFDiv %float %float_1 %1101
%1103 = OpFMul %float %1095 %1476
%1105 = OpFNegate %float %1045
%1107 = OpExtInst %float %1 FMax %1105 %1075
%1109 = OpFNegate %float %1053
%1111 = OpExtInst %float %1 FMax %1109 %1089
%1113 = OpFNegate %float %1061
%1115 = OpExtInst %float %1 FMax %1113 %1103
%1488 = OpExtInst %float %1 FMax %1111 %1115
%1489 = OpExtInst %float %1 FMax %1107 %1488
%1122 = OpExtInst %float %1 FMin %1489 %float_0
%1123 = OpExtInst %float %1 FMax %float_n0_1875 %1122
%1126 = OpBitcast %float %670
%1127 = OpFMul %float %1123 %1126
%1130 = OpFMul %float %float_4 %1127
%1132 = OpFAdd %float %1130 %float_1
%1506 = OpBitcast %uint %1132
%1507 = OpISub %uint %uint_2129764351 %1506
%1508 = OpBitcast %float %1507
%1511 = OpFNegate %float %1508
%1513 = OpFMul %float %1511 %1132
%1515 = OpFAdd %float %1513 %float_2
%1516 = OpFMul %float %1508 %1515
%1548 = OpFAdd %float %1199 %1210
%1549 = OpFAdd %float %1548 %1243
%1550 = OpFAdd %float %1549 %1232
%1148 = OpFMul %float %1127 %1550
%1150 = OpFAdd %float %1148 %1221
%1152 = OpFMul %float %1150 %1516
%1551 = OpFAdd %float %1200 %1211
%1552 = OpFAdd %float %1551 %1244
%1553 = OpFAdd %float %1552 %1233
%1167 = OpFMul %float %1127 %1553
%1169 = OpFAdd %float %1167 %1222
%1171 = OpFMul %float %1169 %1516
%1554 = OpFAdd %float %1201 %1212
%1555 = OpFAdd %float %1554 %1245
%1556 = OpFAdd %float %1555 %1234
%1186 = OpFMul %float %1127 %1556
%1188 = OpFAdd %float %1186 %1223
%1190 = OpFMul %float %1188 %1516
%688 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_0
OpStore %688 %1152
%690 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_1
OpStore %690 %1171
%692 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_2
OpStore %692 %1190
%694 = OpAccessChain %_ptr_Output_float %xe_frag_color %uint_3
OpStore %694 %float_1
OpReturn
OpFunctionEnd

View File

@@ -0,0 +1,109 @@
// generated from `xb genspirv`
// source: guest_output_triangle_strip_rect.vert
const uint8_t guest_output_triangle_strip_rect_vert[] = {
0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0A, 0x00, 0x08, 0x00,
0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
0x01, 0x00, 0x00, 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, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00,
0x04, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x50,
0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x67, 0x6C, 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00,
0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x67, 0x6C, 0x5F, 0x50, 0x6F, 0x69, 0x6E, 0x74, 0x53, 0x69, 0x7A, 0x65,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x58, 0x65, 0x54, 0x72, 0x69, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x53, 0x74,
0x72, 0x69, 0x70, 0x52, 0x65, 0x63, 0x74, 0x43, 0x6F, 0x6E, 0x73, 0x74,
0x61, 0x6E, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0B, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74,
0x72, 0x69, 0x61, 0x6E, 0x67, 0x6C, 0x65, 0x5F, 0x73, 0x74, 0x72, 0x69,
0x70, 0x5F, 0x72, 0x65, 0x63, 0x74, 0x5F, 0x6F, 0x66, 0x66, 0x73, 0x65,
0x74, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0A, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x74, 0x72, 0x69, 0x61, 0x6E,
0x67, 0x6C, 0x65, 0x5F, 0x73, 0x74, 0x72, 0x69, 0x70, 0x5F, 0x72, 0x65,
0x63, 0x74, 0x5F, 0x73, 0x69, 0x7A, 0x65, 0x00, 0x05, 0x00, 0x03, 0x00,
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00,
0x15, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x5F, 0x56, 0x65, 0x72, 0x74, 0x65,
0x78, 0x49, 0x6E, 0x64, 0x65, 0x78, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x47, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x48, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0E, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
0x02, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00,
0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x0D, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x04, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x0E, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00,
0x20, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00,
0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x17, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00,
0x1B, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00,
0x0B, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x20, 0x00, 0x04, 0x00,
0x2C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
0x2C, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00,
0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00,
0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
0x15, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
0x19, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00,
0xC7, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x1E, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x04, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00,
0x85, 0x00, 0x05, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
0x21, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
0x0D, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x25, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00,
0x29, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00,
0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
0x07, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x41, 0x00, 0x05, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x0A, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00,
0x2D, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x01, 0x00,
0x38, 0x00, 0x01, 0x00,
};

View File

@@ -0,0 +1,74 @@
; SPIR-V
; Version: 1.0
; Generator: Khronos Glslang Reference Front End; 10
; Bound: 47
; Schema: 0
OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Vertex %main "main" %_ %gl_VertexIndex
OpSource ESSL 310
OpName %main "main"
OpName %gl_PerVertex "gl_PerVertex"
OpMemberName %gl_PerVertex 0 "gl_Position"
OpMemberName %gl_PerVertex 1 "gl_PointSize"
OpName %_ ""
OpName %XeTriangleStripRectConstants "XeTriangleStripRectConstants"
OpMemberName %XeTriangleStripRectConstants 0 "xe_triangle_strip_rect_offset"
OpMemberName %XeTriangleStripRectConstants 1 "xe_triangle_strip_rect_size"
OpName %__0 ""
OpName %gl_VertexIndex "gl_VertexIndex"
OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
OpDecorate %gl_PerVertex Block
OpMemberDecorate %XeTriangleStripRectConstants 0 Offset 0
OpMemberDecorate %XeTriangleStripRectConstants 1 Offset 8
OpDecorate %XeTriangleStripRectConstants Block
OpDecorate %gl_VertexIndex BuiltIn VertexIndex
%void = OpTypeVoid
%3 = OpTypeFunction %void
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%gl_PerVertex = OpTypeStruct %v4float %float
%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
%_ = OpVariable %_ptr_Output_gl_PerVertex Output
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%v2float = OpTypeVector %float 2
%XeTriangleStripRectConstants = OpTypeStruct %v2float %v2float
%_ptr_PushConstant_XeTriangleStripRectConstants = OpTypePointer PushConstant %XeTriangleStripRectConstants
%__0 = OpVariable %_ptr_PushConstant_XeTriangleStripRectConstants PushConstant
%_ptr_PushConstant_v2float = OpTypePointer PushConstant %v2float
%_ptr_Input_int = OpTypePointer Input %int
%gl_VertexIndex = OpVariable %_ptr_Input_int Input
%uint = OpTypeInt 32 0
%v2uint = OpTypeVector %uint 2
%uint_0 = OpConstant %uint 0
%uint_1 = OpConstant %uint 1
%29 = OpConstantComposite %v2uint %uint_0 %uint_1
%int_1 = OpConstant %int 1
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%_ptr_Output_v4float = OpTypePointer Output %v4float
%46 = OpConstantComposite %v2uint %uint_1 %uint_1
%main = OpFunction %void None %3
%5 = OpLabel
%18 = OpAccessChain %_ptr_PushConstant_v2float %__0 %int_0
%19 = OpLoad %v2float %18
%22 = OpLoad %int %gl_VertexIndex
%24 = OpBitcast %uint %22
%26 = OpCompositeConstruct %v2uint %24 %24
%30 = OpShiftRightLogical %v2uint %26 %29
%32 = OpBitwiseAnd %v2uint %30 %46
%33 = OpConvertUToF %v2float %32
%35 = OpAccessChain %_ptr_PushConstant_v2float %__0 %int_1
%36 = OpLoad %v2float %35
%37 = OpFMul %v2float %33 %36
%38 = OpFAdd %v2float %19 %37
%41 = OpCompositeExtract %float %38 0
%42 = OpCompositeExtract %float %38 1
%43 = OpCompositeConstruct %v4float %41 %42 %float_0 %float_1
%45 = OpAccessChain %_ptr_Output_v4float %_ %int_0
OpStore %45 %43
OpReturn
OpFunctionEnd

View File

@@ -32,9 +32,10 @@ const uint8_t immediate_vert[] = {
0x74, 0x74, 0x72, 0x5F, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x1A, 0x00, 0x00, 0x00,
0x58, 0x65, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6F, 0x6E, 0x73, 0x74, 0x61,
0x6E, 0x74, 0x73, 0x00, 0x06, 0x00, 0x08, 0x00, 0x1A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x76, 0x69, 0x65, 0x77, 0x70, 0x6F, 0x72, 0x74,
0x5F, 0x73, 0x69, 0x7A, 0x65, 0x5F, 0x69, 0x6E, 0x76, 0x00, 0x00, 0x00,
0x6E, 0x74, 0x73, 0x00, 0x06, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0x65, 0x5F, 0x63, 0x6F, 0x6F, 0x72, 0x64,
0x69, 0x6E, 0x61, 0x74, 0x65, 0x5F, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5F,
0x73, 0x69, 0x7A, 0x65, 0x5F, 0x69, 0x6E, 0x76, 0x00, 0x00, 0x00, 0x00,
0x05, 0x00, 0x03, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0B, 0x00, 0x00, 0x00,

View File

@@ -19,7 +19,7 @@
OpName %_ ""
OpName %xe_attr_position "xe_attr_position"
OpName %XePushConstants "XePushConstants"
OpMemberName %XePushConstants 0 "viewport_size_inv"
OpMemberName %XePushConstants 0 "xe_coordinate_space_size_inv"
OpName %__0 ""
OpDecorate %xe_var_texcoord Location 0
OpDecorate %xe_attr_texcoord Location 1

View File

@@ -0,0 +1,34 @@
#ifndef XENIA_UI_SHADERS_DITHER_8BPC_XESLI_
#define XENIA_UI_SHADERS_DITHER_8BPC_XESLI_
#include "xesl.xesli"
#include "noise.xesli"
xesl_static const float xe_dither_8bpc_noise[] = {
// The conversion to 8bpc in the fixed-function output-merger is done as
// floor(saturate(color) * 255.0 + 0.5). This dithering function effectively
// replaces that 0.5 offset, done for rounding to the nearest, with the noise.
// To do that, first, 0.5/255 needs to be subtracted from the color, and
// then the noise value `[0, 255/256] / 255` from xe_dither_8bpc_noise needs
// to be added. However, due to rounding (because division by 255.0 is
// inexact), subtracting 0.5/255 from exact 8-bit integer color values
// (including, for instance, 1.0, or 255/255) may result in the result being
// smaller than the original exact 8-bit value where the noise value is 0. So,
// remapping the noise to the `[0.5/256, 255.5/256] / 255` range. Another way
// of preventing rounding issues is doing it manually and returning only exact
// integer 8-bit color values divided by 255, but that would assume that the
// render target is specifically 8bpc, so it's better to avoid that in case
// the window system, for instance, provides a 10bpc render target (for which
// dithering is still done here for more consistency between displays, but
// some addition precision would still be desirable).
XeBlueNoise16x16Values0Until256(1.0 / 256.0 / 255.0,
(-0.5 + 0.5 / 256.0) / 255.0)
};
float XeDitherOffset8bpc(xesl_uint2 pixel_coord) {
pixel_coord &= 15u;
return xe_dither_8bpc_noise[pixel_coord.y * 16u + pixel_coord.x];
}
#endif // XENIA_UI_SHADERS_DITHER_8BPC_XESLI_

View File

@@ -0,0 +1,3 @@
#version 420
#extension GL_GOOGLE_include_directive : require
#include "guest_output_bilinear.glsli"

View File

@@ -0,0 +1,38 @@
// At least #version 420.
#if XE_GUEST_OUTPUT_DITHER
#include "dither_8bpc.xesli"
#endif // XE_GUEST_OUTPUT_DITHER
layout(push_constant) uniform XeBilinearConstants {
// 16 occupied by the vertex shader.
layout(offset = 16) ivec2 xe_bilinear_output_offset;
layout(offset = 24) vec2 xe_bilinear_output_size_inv;
};
layout(set = 0, binding = 0) uniform sampler2D xe_texture;
layout(location = 0) out vec4 xe_frag_color;
void main() {
uvec2 pixel_coord = uvec2(ivec2(gl_FragCoord.xy) - xe_bilinear_output_offset);
// + 0.5 so the origin is at the pixel center, and at 1:1 the original pixel
// is taken.
// Interpolating the four colors in the perceptual space because doing it in
// linear space causes, in particular, bright text on a dark background to
// become too thick, and aliasing of bright parts on top of dark areas to be
// too apparent (4D5307E6 HUD, for example, mainly the edges of the
// multiplayer score bars).
xe_frag_color.rgb =
textureLod(xe_texture,
(vec2(pixel_coord) + 0.5) * xe_bilinear_output_size_inv,
0.0).rgb;
#if XE_GUEST_OUTPUT_DITHER
// Clamping because on Vulkan, the surface may specify any format, including
// floating-point.
xe_frag_color.rgb =
clamp(xe_frag_color.rgb + XeDitherOffset8bpc(pixel_coord),
vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));
#endif // XE_GUEST_OUTPUT_DITHER
xe_frag_color.a = 1.0;
}

View File

@@ -0,0 +1,31 @@
#if XE_GUEST_OUTPUT_DITHER
#include "dither_8bpc.xesli"
#endif // XE_GUEST_OUTPUT_DITHER
cbuffer XeBilinearConstants : register(b0) {
int2 xe_bilinear_output_offset;
float2 xe_bilinear_output_size_inv;
};
Texture2D<float3> xe_texture : register(t0);
SamplerState xe_sampler_linear_clamp : register(s0);
float4 main(float4 xe_position : SV_Position) : SV_Target {
uint2 pixel_coord = uint2(int2(xe_position.xy) - xe_bilinear_output_offset);
// + 0.5 so the origin is at the pixel center, and at 1:1 the original pixel
// is taken.
// Interpolating the four colors in the perceptual space because doing it in
// linear space causes, in particular, bright text on a dark background to
// become too thick, and aliasing of bright parts on top of dark areas to be
// too apparent (4D5307E6 HUD, for example, mainly the edges of the
// multiplayer score bars).
float3 color = xe_texture.SampleLevel(
xe_sampler_linear_clamp,
(float2(pixel_coord) + 0.5f) * xe_bilinear_output_size_inv,
0.0f);
#if XE_GUEST_OUTPUT_DITHER
// Not clamping because a normalized format is explicitly requested on DXGI.
color += XeDitherOffset8bpc(pixel_coord);
#endif // XE_GUEST_OUTPUT_DITHER
return float4(color, 1.0f);
}

View File

@@ -0,0 +1 @@
#include "guest_output_bilinear.hlsli"

View File

@@ -0,0 +1,4 @@
#version 420
#extension GL_GOOGLE_include_directive : require
#define XE_GUEST_OUTPUT_DITHER 1
#include "guest_output_bilinear.glsli"

View File

@@ -0,0 +1,2 @@
#define XE_GUEST_OUTPUT_DITHER 1
#include "guest_output_bilinear.hlsli"

View File

@@ -0,0 +1,3 @@
#version 420
#extension GL_GOOGLE_include_directive : require
#include "guest_output_ffx_cas_resample.glsli"

View File

@@ -0,0 +1,57 @@
// At least #version 420.
#if XE_GUEST_OUTPUT_DITHER
#include "dither_8bpc.xesli"
#endif // XE_GUEST_OUTPUT_DITHER
layout(push_constant) uniform XeCasResampleConstants {
// 16 occupied by the vertex shader.
layout(offset = 16) ivec2 xe_cas_output_offset;
// CasSetup const0.xy.
layout(offset = 24) vec2 xe_cas_input_output_size_ratio;
// CasSetup const1.x.
layout(offset = 32) float xe_cas_sharpness_post_setup;
};
layout(set = 0, binding = 0) uniform sampler2D xe_texture;
layout(location = 0) out vec4 xe_frag_color;
#define A_GPU 1
#define A_GLSL 1
#include "../../../../third_party/FidelityFX-CAS/ffx-cas/ffx_a.h"
vec3 CasLoad(ivec2 p) {
return texelFetch(xe_texture, p, 0).rgb;
}
void CasInput(inout float r, inout float g, inout float b) {
// Linear conversion approximation as recommended in the CAS presentation.
r *= r;
g *= g;
b *= b;
}
#include "../../../../third_party/FidelityFX-CAS/ffx-cas/ffx_cas.h"
void main() {
uvec2 pixel_coord = uvec2(ivec2(gl_FragCoord.xy) - xe_cas_output_offset);
// CasSetup with smaller push constant usage.
uvec4 cas_const_0 =
uvec4(floatBitsToUint(xe_cas_input_output_size_ratio),
floatBitsToUint(0.5 * xe_cas_input_output_size_ratio - 0.5));
uvec4 cas_const_1 =
uvec4(floatBitsToUint(xe_cas_sharpness_post_setup),
packHalf2x16(vec2(xe_cas_sharpness_post_setup, 0.0)),
floatBitsToUint(8.0 * xe_cas_input_output_size_ratio.x), 0u);
CasFilter(xe_frag_color.r, xe_frag_color.g, xe_frag_color.b, pixel_coord,
cas_const_0, cas_const_1, false);
// Linear conversion approximation as recommended in the CAS presentation.
xe_frag_color.rgb = sqrt(xe_frag_color.rgb);
#if XE_GUEST_OUTPUT_DITHER
// Clamping because on Vulkan, the surface may specify any format, including
// floating-point.
xe_frag_color.rgb =
clamp(xe_frag_color.rgb + XeDitherOffset8bpc(pixel_coord),
vec3(0.0, 0.0, 0.0), vec3(1.0, 1.0, 1.0));
#endif // XE_GUEST_OUTPUT_DITHER
// Force alpha to 1 to make sure the surface won't be translucent.
xe_frag_color.a = 1.0;
}

View File

@@ -0,0 +1,49 @@
#if XE_GUEST_OUTPUT_DITHER
#include "dither_8bpc.xesli"
#endif // XE_GUEST_OUTPUT_DITHER
cbuffer XeCasResampleConstants : register(b0) {
int2 xe_cas_output_offset;
// CasSetup const0.xy.
float2 xe_cas_input_output_size_ratio;
// CasSetup const1.x.
float xe_cas_sharpness_post_setup;
};
Texture2D<float3> xe_texture : register(t0);
#define A_GPU 1
#define A_HLSL 1
#include "../../../../third_party/FidelityFX-CAS/ffx-cas/ffx_a.h"
float3 CasLoad(int2 p) {
return xe_texture.Load(int3(p, 0)).rgb;
}
void CasInput(inout float r, inout float g, inout float b) {
// Linear conversion approximation as recommended in the CAS presentation.
r *= r;
g *= g;
b *= b;
}
#include "../../../../third_party/FidelityFX-CAS/ffx-cas/ffx_cas.h"
float4 main(float4 xe_position : SV_Position) : SV_Target {
uint2 pixel_coord = uint2(int2(xe_position.xy) - xe_cas_output_offset);
// CasSetup with smaller root signature usage.
uint4 cas_const_0 =
uint4(asuint(xe_cas_input_output_size_ratio),
asuint(0.5f * xe_cas_input_output_size_ratio - 0.5f));
uint4 cas_const_1 =
uint4(asuint(xe_cas_sharpness_post_setup),
f32tof16(xe_cas_sharpness_post_setup),
asuint(8.0f * xe_cas_input_output_size_ratio.x), 0u);
float3 cas_color;
CasFilter(cas_color.r, cas_color.g, cas_color.b, pixel_coord, cas_const_0,
cas_const_1, false);
// Linear conversion approximation as recommended in the CAS presentation.
cas_color = sqrt(cas_color);
#if XE_GUEST_OUTPUT_DITHER
// Not clamping because a normalized format is explicitly requested on DXGI.
cas_color += XeDitherOffset8bpc(pixel_coord);
#endif // XE_GUEST_OUTPUT_DITHER
return float4(cas_color, 1.0f);
}

View File

@@ -0,0 +1 @@
#include "guest_output_ffx_cas_resample.hlsli"

View File

@@ -0,0 +1,4 @@
#version 420
#extension GL_GOOGLE_include_directive : require
#define XE_GUEST_OUTPUT_DITHER 1
#include "guest_output_ffx_cas_resample.glsli"

View File

@@ -0,0 +1,2 @@
#define XE_GUEST_OUTPUT_DITHER 1
#include "guest_output_ffx_cas_resample.hlsli"

View File

@@ -0,0 +1,3 @@
#version 420
#extension GL_GOOGLE_include_directive : require
#include "guest_output_ffx_cas_sharpen.glsli"

Some files were not shown because too many files have changed in this diff Show More