From 3d85d77cedfd9e8aece1c1feb622d82425f7e9ee Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Wed, 28 Sep 2022 13:29:19 +0200 Subject: [PATCH] demos/gears: Recompile shaders with our compiler. --- demos/gears.c | 28 +++-- demos/gears.hlsl | 55 -------- demos/gears_hlsl.h | 56 +++++++++ demos/gears_ps_flat.h | 73 ----------- demos/gears_ps_smooth.h | 73 ----------- demos/gears_vs.h | 272 ---------------------------------------- 6 files changed, 75 insertions(+), 482 deletions(-) delete mode 100644 demos/gears.hlsl create mode 100644 demos/gears_hlsl.h delete mode 100644 demos/gears_ps_flat.h delete mode 100644 demos/gears_ps_smooth.h delete mode 100644 demos/gears_vs.h diff --git a/demos/gears.c b/demos/gears.c index 2045b3cd..ab90e0d4 100644 --- a/demos/gears.c +++ b/demos/gears.c @@ -48,9 +48,7 @@ #include #include "demo.h" -#include "gears_vs.h" -#include "gears_ps_flat.h" -#include "gears_ps_smooth.h" +#include "gears_hlsl.h" struct cxg_fence { @@ -659,6 +657,7 @@ static void cxg_load_assets(struct cx_gears *cxg) D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc; D3D12_CPU_DESCRIPTOR_HANDLE dsv_handle; D3D12_ROOT_PARAMETER root_parameter; + ID3DBlob *vs, *ps_flat, *ps_smooth; D3D12_RESOURCE_DESC resource_desc; D3D12_HEAP_PROPERTIES heap_desc; D3D12_RANGE read_range = {0, 0}; @@ -682,14 +681,21 @@ static void cxg_load_assets(struct cx_gears *cxg) hr = demo_create_root_signature(cxg->device, &root_signature_desc, &cxg->root_signature); assert(SUCCEEDED(hr)); + hr = D3DCompile(gears_hlsl, strlen(gears_hlsl), NULL, NULL, NULL, "vs_main", "vs_5_0", 0, 0, &vs, NULL); + assert(SUCCEEDED(hr)); + hr = D3DCompile(gears_hlsl, strlen(gears_hlsl), NULL, NULL, NULL, "ps_main_flat", "ps_5_0", 0, 0, &ps_flat, NULL); + assert(SUCCEEDED(hr)); + hr = D3DCompile(gears_hlsl, strlen(gears_hlsl), NULL, NULL, NULL, "ps_main_smooth", "ps_5_0", 0, 0, &ps_smooth, NULL); + assert(SUCCEEDED(hr)); + memset(&pso_desc, 0, sizeof(pso_desc)); pso_desc.InputLayout.pInputElementDescs = il_desc; pso_desc.InputLayout.NumElements = ARRAY_SIZE(il_desc); pso_desc.pRootSignature = cxg->root_signature; - pso_desc.VS.pShaderBytecode = g_vs_main; - pso_desc.VS.BytecodeLength = sizeof(g_vs_main); - pso_desc.PS.pShaderBytecode = g_ps_main_flat; - pso_desc.PS.BytecodeLength = sizeof(g_ps_main_flat); + pso_desc.VS.pShaderBytecode = ID3D10Blob_GetBufferPointer(vs); + pso_desc.VS.BytecodeLength = ID3D10Blob_GetBufferSize(vs); + pso_desc.PS.pShaderBytecode = ID3D10Blob_GetBufferPointer(ps_flat); + pso_desc.PS.BytecodeLength = ID3D10Blob_GetBufferSize(ps_flat); demo_rasterizer_desc_init_default(&pso_desc.RasterizerState); pso_desc.RasterizerState.FrontCounterClockwise = TRUE; @@ -708,12 +714,16 @@ static void cxg_load_assets(struct cx_gears *cxg) &IID_ID3D12PipelineState, (void **)&cxg->pipeline_state_flat); assert(SUCCEEDED(hr)); - pso_desc.PS.pShaderBytecode = g_ps_main_smooth; - pso_desc.PS.BytecodeLength = sizeof(g_ps_main_smooth); + pso_desc.PS.pShaderBytecode = ID3D10Blob_GetBufferPointer(ps_smooth); + pso_desc.PS.BytecodeLength = ID3D10Blob_GetBufferSize(ps_smooth); hr = ID3D12Device_CreateGraphicsPipelineState(cxg->device, &pso_desc, &IID_ID3D12PipelineState, (void **)&cxg->pipeline_state_smooth); assert(SUCCEEDED(hr)); + ID3D10Blob_Release(vs); + ID3D10Blob_Release(ps_flat); + ID3D10Blob_Release(ps_smooth); + for (i = 0; i < ARRAY_SIZE(cxg->command_list); ++i) { hr = ID3D12Device_CreateCommandList(cxg->device, 0, D3D12_COMMAND_LIST_TYPE_DIRECT, diff --git a/demos/gears.hlsl b/demos/gears.hlsl deleted file mode 100644 index 6b5c3579..00000000 --- a/demos/gears.hlsl +++ /dev/null @@ -1,55 +0,0 @@ -cbuffer gear_block : register(b0) -{ - float4x4 mvp_matrix; - float3x3 normal_matrix; -}; - -struct vs_in -{ - float4 position : POSITION; - float3 normal : NORMAL; - float3 diffuse : DIFFUSE; - float4 transform : TRANSFORM; -}; - -struct vs_out -{ - float4 position : SV_POSITION; - float4 colour : COLOR; -}; - -struct vs_out vs_main(struct vs_in i) -{ - const float3 l_pos = float3(5.0, 5.0, 10.0); - float3 dir, normal; - float4 position; - struct vs_out o; - float att; - - position.x = i.transform.x * i.position.x - i.transform.y * i.position.y + i.transform.z; - position.y = i.transform.x * i.position.y + i.transform.y * i.position.x + i.transform.w; - position.zw = i.position.zw; - - o.position = mul(mvp_matrix, position); - dir = normalize(l_pos - o.position.xyz / o.position.w); - - normal.x = i.transform.x * i.normal.x - i.transform.y * i.normal.y; - normal.y = i.transform.x * i.normal.y + i.transform.y * i.normal.x; - normal.z = i.normal.z; - att = 0.2 + dot(dir, normalize(mul(normal_matrix, normal))); - - o.colour.xyz = i.diffuse.xyz * att; - o.colour.w = 1.0; - - return o; -} - -float4 ps_main_smooth(float4 position : SV_POSITION, float4 colour : COLOR) : SV_TARGET -{ - return colour; -} - -float4 ps_main_flat(float4 position : SV_POSITION, nointerpolation float4 colour : COLOR) : SV_TARGET -{ - return colour; -} diff --git a/demos/gears_hlsl.h b/demos/gears_hlsl.h new file mode 100644 index 00000000..c711f0b3 --- /dev/null +++ b/demos/gears_hlsl.h @@ -0,0 +1,56 @@ +static const char gears_hlsl[] = +"cbuffer gear_block : register(b0)\n" +"{\n" +" float4x4 mvp_matrix;\n" +" float3x3 normal_matrix;\n" +"};\n" +"\n" +"struct vs_in\n" +"{\n" +" float4 position : POSITION;\n" +" float3 normal : NORMAL;\n" +" float3 diffuse : DIFFUSE;\n" +" float4 transform : TRANSFORM;\n" +"};\n" +"\n" +"struct vs_out\n" +"{\n" +" float4 position : SV_POSITION;\n" +" float4 colour : COLOR;\n" +"};\n" +"\n" +"struct vs_out vs_main(struct vs_in i)\n" +"{\n" +" const float3 l_pos = float3(5.0, 5.0, 10.0);\n" +" float3 dir, normal;\n" +" float4 position;\n" +" struct vs_out o;\n" +" float att;\n" +"\n" +" position.x = i.transform.x * i.position.x - i.transform.y * i.position.y + i.transform.z;\n" +" position.y = i.transform.x * i.position.y + i.transform.y * i.position.x + i.transform.w;\n" +" position.zw = i.position.zw;\n" +"\n" +" o.position = mul(mvp_matrix, position);\n" +" dir = normalize(l_pos - o.position.xyz / o.position.w);\n" +"\n" +" normal.x = i.transform.x * i.normal.x - i.transform.y * i.normal.y;\n" +" normal.y = i.transform.x * i.normal.y + i.transform.y * i.normal.x;\n" +" normal.z = i.normal.z;\n" +" att = 0.2 + dot(dir, normalize(mul(normal_matrix, normal)));\n" +"\n" +" o.colour.xyz = i.diffuse.xyz * att;\n" +" o.colour.w = 1.0;\n" +"\n" +" return o;\n" +"}\n" +"\n" +"float4 ps_main_smooth(float4 position : SV_POSITION, float4 colour : COLOR) : SV_TARGET\n" +"{\n" +" return colour;\n" +"}\n" +"\n" +"float4 ps_main_flat(float4 position : SV_POSITION, nointerpolation float4 colour : COLOR) : SV_TARGET\n" +"{\n" +" return colour;\n" +"}\n"; diff --git a/demos/gears_ps_flat.h b/demos/gears_ps_flat.h deleted file mode 100644 index 413981bf..00000000 --- a/demos/gears_ps_flat.h +++ /dev/null @@ -1,73 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) D3D Shader Disassembler -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// SV_POSITION 0 xyzw 0 POS float -// COLOR 0 xyzw 1 NONE float xyzw -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// SV_TARGET 0 xyzw 0 TARGET float xyzw -// -ps_5_0 -dcl_globalFlags refactoringAllowed -dcl_input_ps constant v1.xyzw -dcl_output o0.xyzw -mov o0.xyzw, v1.xyzw -ret -// Approximately 0 instruction slots used -#endif - -const BYTE g_ps_main_flat[] = -{ - 68, 88, 66, 67, 254, 211, - 50, 72, 228, 208, 73, 13, - 143, 221, 134, 105, 6, 165, - 26, 140, 1, 0, 0, 0, - 248, 0, 0, 0, 3, 0, - 0, 0, 44, 0, 0, 0, - 128, 0, 0, 0, 180, 0, - 0, 0, 73, 83, 71, 78, - 76, 0, 0, 0, 2, 0, - 0, 0, 8, 0, 0, 0, - 56, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 15, 15, 0, 0, - 83, 86, 95, 80, 79, 83, - 73, 84, 73, 79, 78, 0, - 67, 79, 76, 79, 82, 0, - 171, 171, 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, 65, 82, - 71, 69, 84, 0, 171, 171, - 83, 72, 69, 88, 60, 0, - 0, 0, 80, 0, 0, 0, - 15, 0, 0, 0, 106, 8, - 0, 1, 98, 8, 0, 3, - 242, 16, 16, 0, 1, 0, - 0, 0, 101, 0, 0, 3, - 242, 32, 16, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 0, 0, - 0, 0, 70, 30, 16, 0, - 1, 0, 0, 0, 62, 0, - 0, 1 -}; diff --git a/demos/gears_ps_smooth.h b/demos/gears_ps_smooth.h deleted file mode 100644 index 0407adb5..00000000 --- a/demos/gears_ps_smooth.h +++ /dev/null @@ -1,73 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) D3D Shader Disassembler -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// SV_POSITION 0 xyzw 0 POS float -// COLOR 0 xyzw 1 NONE float xyzw -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// SV_TARGET 0 xyzw 0 TARGET float xyzw -// -ps_5_0 -dcl_globalFlags refactoringAllowed -dcl_input_ps linear v1.xyzw -dcl_output o0.xyzw -mov o0.xyzw, v1.xyzw -ret -// Approximately 0 instruction slots used -#endif - -const BYTE g_ps_main_smooth[] = -{ - 68, 88, 66, 67, 80, 239, - 109, 26, 0, 147, 6, 156, - 240, 104, 206, 124, 185, 57, - 18, 98, 1, 0, 0, 0, - 248, 0, 0, 0, 3, 0, - 0, 0, 44, 0, 0, 0, - 128, 0, 0, 0, 180, 0, - 0, 0, 73, 83, 71, 78, - 76, 0, 0, 0, 2, 0, - 0, 0, 8, 0, 0, 0, - 56, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 15, 15, 0, 0, - 83, 86, 95, 80, 79, 83, - 73, 84, 73, 79, 78, 0, - 67, 79, 76, 79, 82, 0, - 171, 171, 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, 65, 82, - 71, 69, 84, 0, 171, 171, - 83, 72, 69, 88, 60, 0, - 0, 0, 80, 0, 0, 0, - 15, 0, 0, 0, 106, 8, - 0, 1, 98, 16, 0, 3, - 242, 16, 16, 0, 1, 0, - 0, 0, 101, 0, 0, 3, - 242, 32, 16, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 242, 32, 16, 0, 0, 0, - 0, 0, 70, 30, 16, 0, - 1, 0, 0, 0, 62, 0, - 0, 1 -}; diff --git a/demos/gears_vs.h b/demos/gears_vs.h deleted file mode 100644 index e3ccea8b..00000000 --- a/demos/gears_vs.h +++ /dev/null @@ -1,272 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) D3D Shader Disassembler -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// POSITION 0 xyzw 0 NONE float xyzw -// NORMAL 0 xyz 1 NONE float xyz -// DIFFUSE 0 xyz 2 NONE float xyz -// TRANSFORM 0 xyzw 3 NONE float xyzw -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------- ------ -// SV_POSITION 0 xyzw 0 POS float xyzw -// COLOR 0 xyzw 1 NONE float xyzw -// -vs_5_0 -dcl_globalFlags refactoringAllowed -dcl_constantbuffer CB0[7], immediateIndexed -dcl_input v0.xyzw -dcl_input v1.xyz -dcl_input v2.xyz -dcl_input v3.xyzw -dcl_output_siv o0.xyzw, position -dcl_output o1.xyzw -dcl_temps 2 -mul r0.x, v0.y, v3.y -mad r0.x, v3.x, v0.x, -r0.x -dp2 r0.y, v3.yxyy, v0.xyxx -add r0.xy, r0.xyxx, v3.zwzz -mul r1.xyzw, r0.yyyy, cb0[1].xyzw -mad r0.xyzw, cb0[0].xyzw, r0.xxxx, r1.xyzw -mad r0.xyzw, cb0[2].xyzw, v0.zzzz, r0.xyzw -mad r0.xyzw, cb0[3].xyzw, v0.wwww, r0.xyzw -mov o0.xyzw, r0.xyzw -div r0.xyz, r0.xyzx, r0.wwww -add r0.xyz, -r0.xyzx, l(5.000000, 5.000000, 10.000000, 0.000000) -dp3 r0.w, r0.xyzx, r0.xyzx -rsq r0.w, r0.w -mul r0.xyz, r0.wwww, r0.xyzx -mul r0.w, v1.y, v3.y -mad r0.w, v3.x, v1.x, -r0.w -dp2 r1.x, v3.yxyy, v1.xyxx -mul r1.xyz, r1.xxxx, cb0[5].xyzx -mad r1.xyz, cb0[4].xyzx, r0.wwww, r1.xyzx -mad r1.xyz, cb0[6].xyzx, v1.zzzz, r1.xyzx -dp3 r0.w, r1.xyzx, r1.xyzx -rsq r0.w, r0.w -mul r1.xyz, r0.wwww, r1.xyzx -dp3 r0.x, r0.xyzx, r1.xyzx -add r0.x, r0.x, l(0.200000) -mul o1.xyz, r0.xxxx, v2.xyzx -mov o1.w, l(1.000000) -ret -// Approximately 0 instruction slots used -#endif - -const BYTE g_vs_main[] = -{ - 68, 88, 66, 67, 82, 90, - 22, 185, 41, 66, 113, 173, - 43, 53, 199, 35, 30, 50, - 78, 7, 1, 0, 0, 0, - 208, 4, 0, 0, 3, 0, - 0, 0, 44, 0, 0, 0, - 192, 0, 0, 0, 20, 1, - 0, 0, 73, 83, 71, 78, - 140, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 15, 0, 0, - 113, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 7, 7, 0, 0, - 120, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 2, 0, - 0, 0, 7, 7, 0, 0, - 128, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 3, 0, - 0, 0, 15, 15, 0, 0, - 80, 79, 83, 73, 84, 73, - 79, 78, 0, 78, 79, 82, - 77, 65, 76, 0, 68, 73, - 70, 70, 85, 83, 69, 0, - 84, 82, 65, 78, 83, 70, - 79, 82, 77, 0, 171, 171, - 79, 83, 71, 78, 76, 0, - 0, 0, 2, 0, 0, 0, - 8, 0, 0, 0, 56, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 68, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 15, 0, 0, 0, 83, 86, - 95, 80, 79, 83, 73, 84, - 73, 79, 78, 0, 67, 79, - 76, 79, 82, 0, 171, 171, - 83, 72, 69, 88, 180, 3, - 0, 0, 80, 0, 1, 0, - 237, 0, 0, 0, 106, 8, - 0, 1, 89, 0, 0, 4, - 70, 142, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 95, 0, 0, 3, 242, 16, - 16, 0, 0, 0, 0, 0, - 95, 0, 0, 3, 114, 16, - 16, 0, 1, 0, 0, 0, - 95, 0, 0, 3, 114, 16, - 16, 0, 2, 0, 0, 0, - 95, 0, 0, 3, 242, 16, - 16, 0, 3, 0, 0, 0, - 103, 0, 0, 4, 242, 32, - 16, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 101, 0, - 0, 3, 242, 32, 16, 0, - 1, 0, 0, 0, 104, 0, - 0, 2, 2, 0, 0, 0, - 56, 0, 0, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 26, 16, 16, 0, 0, 0, - 0, 0, 26, 16, 16, 0, - 3, 0, 0, 0, 50, 0, - 0, 10, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 16, - 16, 0, 3, 0, 0, 0, - 10, 16, 16, 0, 0, 0, - 0, 0, 10, 0, 16, 128, - 65, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 7, - 34, 0, 16, 0, 0, 0, - 0, 0, 22, 21, 16, 0, - 3, 0, 0, 0, 70, 16, - 16, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 50, 0, - 16, 0, 0, 0, 0, 0, - 70, 0, 16, 0, 0, 0, - 0, 0, 230, 26, 16, 0, - 3, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 1, 0, 0, 0, 86, 5, - 16, 0, 0, 0, 0, 0, - 70, 142, 32, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 0, 0, 0, 0, - 70, 142, 32, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 6, 0, 16, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 1, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 0, 0, 0, 0, 70, 142, - 32, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 166, 26, - 16, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 0, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 0, 0, - 0, 0, 70, 142, 32, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 246, 31, 16, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 0, 0, 0, 0, - 54, 0, 0, 5, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 0, 0, - 0, 0, 14, 0, 0, 7, - 114, 0, 16, 0, 0, 0, - 0, 0, 70, 2, 16, 0, - 0, 0, 0, 0, 246, 15, - 16, 0, 0, 0, 0, 0, - 0, 0, 0, 11, 114, 0, - 16, 0, 0, 0, 0, 0, - 70, 2, 16, 128, 65, 0, - 0, 0, 0, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 160, 64, 0, 0, 160, 64, - 0, 0, 32, 65, 0, 0, - 0, 0, 16, 0, 0, 7, - 130, 0, 16, 0, 0, 0, - 0, 0, 70, 2, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 0, 0, 0, 0, - 68, 0, 0, 5, 130, 0, - 16, 0, 0, 0, 0, 0, - 58, 0, 16, 0, 0, 0, - 0, 0, 56, 0, 0, 7, - 114, 0, 16, 0, 0, 0, - 0, 0, 246, 15, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 0, 0, 0, 0, - 56, 0, 0, 7, 130, 0, - 16, 0, 0, 0, 0, 0, - 26, 16, 16, 0, 1, 0, - 0, 0, 26, 16, 16, 0, - 3, 0, 0, 0, 50, 0, - 0, 10, 130, 0, 16, 0, - 0, 0, 0, 0, 10, 16, - 16, 0, 3, 0, 0, 0, - 10, 16, 16, 0, 1, 0, - 0, 0, 58, 0, 16, 128, - 65, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 7, - 18, 0, 16, 0, 1, 0, - 0, 0, 22, 21, 16, 0, - 3, 0, 0, 0, 70, 16, - 16, 0, 1, 0, 0, 0, - 56, 0, 0, 8, 114, 0, - 16, 0, 1, 0, 0, 0, - 6, 0, 16, 0, 1, 0, - 0, 0, 70, 130, 32, 0, - 0, 0, 0, 0, 5, 0, - 0, 0, 50, 0, 0, 10, - 114, 0, 16, 0, 1, 0, - 0, 0, 70, 130, 32, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 246, 15, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 1, 0, 0, 0, - 50, 0, 0, 10, 114, 0, - 16, 0, 1, 0, 0, 0, - 70, 130, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 166, 26, 16, 0, 1, 0, - 0, 0, 70, 2, 16, 0, - 1, 0, 0, 0, 16, 0, - 0, 7, 130, 0, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 1, 0, 0, 0, - 70, 2, 16, 0, 1, 0, - 0, 0, 68, 0, 0, 5, - 130, 0, 16, 0, 0, 0, - 0, 0, 58, 0, 16, 0, - 0, 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, 16, 0, 0, 7, - 18, 0, 16, 0, 0, 0, - 0, 0, 70, 2, 16, 0, - 0, 0, 0, 0, 70, 2, - 16, 0, 1, 0, 0, 0, - 0, 0, 0, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 205, 204, 76, 62, 56, 0, - 0, 7, 114, 32, 16, 0, - 1, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 18, 16, 0, 2, 0, - 0, 0, 54, 0, 0, 5, - 130, 32, 16, 0, 1, 0, - 0, 0, 1, 64, 0, 0, - 0, 0, 128, 63, 62, 0, - 0, 1 -};