From 26798ae01ebe7cdf3676370b376b3fb06419b8cc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Wed, 11 Sep 2019 12:47:33 +0200 Subject: [PATCH] test push desc --- shaders/vkvg_main.vert | 14 +- shaders/vkvg_main_lcd.frag | 20 +- src/shaders.h | 1362 ++++++++++++++++++----------------- src/vkvg_buff.c | 2 + src/vkvg_context.c | 91 ++- src/vkvg_context_internal.c | 249 +++++-- src/vkvg_context_internal.h | 16 +- src/vkvg_device.c | 6 +- src/vkvg_device_internal.c | 69 +- src/vkvg_device_internal.h | 3 + src/vkvg_fonts.c | 2 +- src/vkvg_pattern.c | 1 + src/vkvg_surface.c | 26 +- tests/common/test.c | 6 +- tests/common/vkengine.c | 8 +- tests/fill_and_stroke.c | 2 + tests/img_surf.c | 27 +- tests/line_join_2.c | 4 +- tests/rect_fill.c | 4 + tests/svg.c | 2 +- vkh | 2 +- 21 files changed, 1085 insertions(+), 831 deletions(-) diff --git a/shaders/vkvg_main.vert b/shaders/vkvg_main.vert index 8fc78a3..61060ce 100644 --- a/shaders/vkvg_main.vert +++ b/shaders/vkvg_main.vert @@ -61,7 +61,7 @@ void main() if (pc.fullScreenQuad != 0) { gl_Position = vec4(vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2) * 2.0f + -1.0f, 0.0f, 1.0f); - outUV = vec3((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2, -1); + outUV = vec3((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2, -2); //outUV = vec3(0,0,-1); return; } @@ -69,15 +69,19 @@ void main() vec2 p0 = inPos; if (pc.srcType == SURFACE) { - outUV = vec3(inPos.x / pc.source.z, inPos.y / pc.source.w ,-1); + vec2 uv = vec2( + pc.matInv[0][0] * p0.x + pc.matInv[1][0] * p0.y + pc.matInv[2][0], + pc.matInv[0][1] * p0.x + pc.matInv[1][1] * p0.y + pc.matInv[2][1] + ); + outUV = vec3(uv.x / pc.source.z, uv.y / pc.source.w ,-1); p0 = inPos + pc.source.xy; }else outUV = vec3(0,0,-1); - vec2 p = vec2( + /*vec2 p = vec2( pc.mat[0][0] * p0.x + pc.mat[1][0] * p0.y + pc.mat[2][0], pc.mat[0][1] * p0.x + pc.mat[1][1] * p0.y + pc.mat[2][1] - ); + );*/ - gl_Position = vec4(p * vec2(2) / pc.size - vec2(1), 0.0, 1.0); + gl_Position = vec4(p0 * vec2(2) / pc.size - vec2(1), 0.0, 1.0); } diff --git a/shaders/vkvg_main_lcd.frag b/shaders/vkvg_main_lcd.frag index 5491e62..e4469fa 100644 --- a/shaders/vkvg_main_lcd.frag +++ b/shaders/vkvg_main_lcd.frag @@ -25,8 +25,8 @@ #extension GL_ARB_shading_language_420pack : enable layout (set=0, binding = 0) uniform sampler2DArray fontMap; -layout (set=1, binding = 0) uniform sampler2D source; -layout (set=2, binding = 0) uniform _uboGrad { +layout (set=0, binding = 1) uniform sampler2D source; +layout (set=0, binding = 2) uniform _uboGrad { vec4 cp[3]; vec4 colors[16]; vec4 stops[16]; @@ -58,12 +58,16 @@ void main() c = inSrc; break; case SURFACE: - vec2 p = (gl_FragCoord.xy - inSrc.xy); - vec2 uv = vec2( - inMat[0][0] * p.x + inMat[1][0] * p.y + inMat[2][0], - inMat[0][1] * p.x + inMat[1][1] * p.y + inMat[2][1] - ); - c = texture (source, inFontUV.xy); + if (inFontUV.z < 1.0){ + //pattern is drawn with a full screen quad with no tex coord + //so we have to transform pixel + vec2 p = (gl_FragCoord.xy - textureSize(source,0)); + vec2 uv = vec2( + inMat[0][0] * p.x + inMat[1][0] * p.y + inMat[2][0], + inMat[0][1] * p.x + inMat[1][1] * p.y + inMat[2][1]); + c = texture (source, uv); + }else + c = texture (source, inFontUV.xy); break; case LINEAR: //credit to Nikita Rokotyan for linear grad diff --git a/src/shaders.h b/src/shaders.h index ad685c3..3601c6e 100644 --- a/src/shaders.h +++ b/src/shaders.h @@ -1007,7 +1007,7 @@ unsigned char vkvg_main_frag_spv[] = { unsigned int vkvg_main_frag_spv_len = 5780; unsigned char vkvg_main_vert_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0d, 0x00, - 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, + 0x9c, 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, @@ -1015,7 +1015,7 @@ unsigned char vkvg_main_vert_spv[] = { 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, @@ -1057,10 +1057,10 @@ unsigned char vkvg_main_vert_spv[] = { 0x2b, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x6f, - 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x6f, + 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x75, 0x76, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, @@ -1091,7 +1091,7 @@ unsigned char vkvg_main_vert_spv[] = { 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x50, 0x00, 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, @@ -1142,687 +1142,707 @@ unsigned char vkvg_main_vert_spv[] = { 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x04, 0x00, 0x56, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x56, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x56, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x56, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x69, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x91, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x93, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x97, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3b, 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, 0x4c, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0xab, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0xf7, 0x00, 0x03, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x92, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3b, 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, 0x4d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0xab, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0xc4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x26, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0xaa, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x54, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x6d, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x55, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x6f, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x55, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x55, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x7b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x81, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x74, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, - 0x86, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x74, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x8a, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x93, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 + 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x6f, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x05, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x56, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x55, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x55, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x71, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x76, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x75, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x7d, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x56, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8d, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x42, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x56, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, + 0x90, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x92, 0x00, 0x00, 0x00, + 0x93, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x93, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x99, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, + 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int vkvg_main_vert_spv_len = 3996; +unsigned int vkvg_main_vert_spv_len = 3980; unsigned char vkvg_main_lcd_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0d, 0x00, - 0xee, 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, 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x32, 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, 0x0b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, + 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x65, 0x70, 0x61, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, + 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, + 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 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, - 0x0e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x64, - 0x65, 0x72, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, - 0x04, 0x00, 0x09, 0x00, 0x47, 0x4c, 0x5f, 0x41, 0x52, 0x42, 0x5f, 0x73, - 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, - 0x61, 0x67, 0x65, 0x5f, 0x34, 0x32, 0x30, 0x70, 0x61, 0x63, 0x6b, 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, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x69, 0x6e, 0x50, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x53, 0x72, - 0x63, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6f, 0x72, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x52, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x46, 0x6f, - 0x6e, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5f, 0x75, 0x62, 0x6f, - 0x47, 0x72, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x70, 0x00, 0x00, - 0x06, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70, - 0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x75, 0x62, 0x6f, 0x47, - 0x72, 0x61, 0x64, 0x00, 0x05, 0x00, 0x09, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x50, 0x6f, 0x73, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x50, - 0x6f, 0x73, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x85, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x89, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x78, 0x4c, 0x6f, 0x63, - 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x00, 0x05, 0x00, 0x03, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0xe4, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x6e, 0x74, 0x4d, 0x61, 0x70, 0x00, - 0x05, 0x00, 0x06, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0xed, 0x00, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, - 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x50, 0x61, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x53, 0x72, 0x63, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x05, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x46, 0x6f, + 0x6e, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, + 0x29, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x37, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x4d, 0x61, + 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x5f, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x70, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70, 0x73, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64, 0x00, + 0x05, 0x00, 0x09, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, + 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x08, 0x00, 0x88, 0x00, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, + 0x69, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x52, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x64, 0x58, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x9e, 0x00, 0x00, 0x00, 0x78, 0x4c, 0x6f, 0x63, 0x52, 0x6f, 0x74, 0x61, + 0x74, 0x65, 0x64, 0x00, 0x05, 0x00, 0x03, 0x00, 0xbe, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00, + 0x66, 0x6f, 0x6e, 0x74, 0x4d, 0x61, 0x70, 0x00, 0x05, 0x00, 0x06, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0xfa, 0x00, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, + 0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe4, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x05, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x30, 0x02, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0xe4, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xed, 0x00, 0x00, 0x00, - 0x01, 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, 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x19, 0x00, 0x09, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xf1, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x01, 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, + 0x17, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3f, 0x14, 0x00, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x09, 0x00, 0x2c, 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, 0x4c, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x51, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x5a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x27, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0xae, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xb8, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, - 0xbc, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0xdb, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, - 0xe1, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x39, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, + 0x6c, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x6d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0xc6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0xc7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x19, 0x00, 0x09, 0x00, 0xee, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, - 0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0xe3, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xea, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0xea, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, - 0x08, 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, - 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0xae, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x1d, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x1b, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x39, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x44, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x29, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x4c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x03, 0x00, 0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xef, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0xf7, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x00, 0x00, 0x08, 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, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xf7, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfb, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0xb8, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x64, 0x00, 0x04, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x05, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x04, 0x00, + 0x26, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x53, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x05, 0x00, 0x26, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x19, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x26, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x25, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x6c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x6e, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x72, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x7a, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x86, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, - 0x86, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x89, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x8c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x91, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x93, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, - 0x89, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x95, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, - 0x96, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, - 0x9a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, - 0x9c, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x9d, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa0, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, - 0xa0, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0xa2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa4, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0x60, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, - 0xa5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0xa3, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xad, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0xb2, 0x00, 0x00, 0x00, - 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xb4, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb4, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0xb6, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0xb7, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x27, 0x00, 0x00, 0x00, - 0xba, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, - 0x27, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0xbc, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, - 0xb2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0xbf, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, - 0xc1, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xc2, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x75, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x7d, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x86, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x8b, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x8d, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, + 0x8f, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, + 0x92, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x93, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x9a, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x9d, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xa1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0xa0, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xa2, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, + 0x98, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, + 0xa5, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xa7, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x9e, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, + 0xa9, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00, + 0xab, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xac, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xaf, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, + 0xaf, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, + 0xb1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xb3, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xb6, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, + 0xb6, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xb8, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, + 0x9e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xba, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0xb2, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, + 0xba, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, + 0xba, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xbc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0xaa, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xbf, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0xc1, 0x00, 0x00, 0x00, + 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0xc3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, - 0xc5, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xc4, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xc8, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, - 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0x60, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xce, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0xce, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xd2, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, - 0xd2, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, - 0xd3, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0xd5, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xb3, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, - 0xd6, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xb0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x00, 0x00, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc5, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0xc7, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0xc6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc9, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xcb, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x04, 0x00, 0xcb, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0xc1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0xcd, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, + 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00, + 0xcf, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0xce, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xd0, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, + 0xd3, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, + 0xd2, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, + 0xd1, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xdc, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, + 0xdc, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, + 0xde, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, + 0xe1, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, + 0xe2, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xe3, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, + 0xe4, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0xbf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x29, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0xdb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xdd, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00, - 0xbc, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xde, 0x00, 0x00, 0x00, - 0xdf, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xdf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xe2, 0x00, 0x00, 0x00, - 0xe5, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, - 0xe5, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, - 0xe8, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xeb, 0x00, 0x00, 0x00, - 0xec, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 + 0x1e, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xea, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00, + 0x22, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xed, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xeb, 0x00, 0x00, 0x00, + 0xec, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xec, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xef, 0x00, 0x00, 0x00, + 0xf2, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x19, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, + 0xf2, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, + 0xf5, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0xed, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xed, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xf8, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int vkvg_main_lcd_frag_spv_len = 5748; +unsigned int vkvg_main_lcd_frag_spv_len = 6000; unsigned char wired_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0d, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, diff --git a/src/vkvg_buff.c b/src/vkvg_buff.c index 7e51696..ba9f351 100644 --- a/src/vkvg_buff.c +++ b/src/vkvg_buff.c @@ -31,6 +31,8 @@ void vkvg_buffer_create(VkvgDevice pDev, VkBufferUsageFlags usage, VmaMemoryUsag VmaAllocationCreateInfo allocInfo = { .usage = memoryPropertyFlags, .flags = VMA_ALLOCATION_CREATE_MAPPED_BIT }; VK_CHECK_RESULT(vmaCreateBuffer (pDev->allocator, &bufCreateInfo, &allocInfo, &buff->buffer, &buff->alloc, &buff->allocInfo)); + buff->descriptor = (VkDescriptorBufferInfo){buff->buffer, 0, VK_WHOLE_SIZE}; + } void vkvg_buffer_destroy(vkvg_buff *buff){ diff --git a/src/vkvg_context.c b/src/vkvg_context.c index d1327d2..b031acc 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -127,12 +127,15 @@ VkvgContext vkvg_create(VkvgSurface surf) _create_vertices_buff (ctx); _create_gradient_buff (ctx); _create_cmd_buff (ctx); - _createDescriptorPool (ctx); - _init_descriptor_sets (ctx); - _update_descriptor_set (ctx, ctx->pSurf->dev->fontCache->texture, ctx->dsFont); - _update_descriptor_set (ctx, surf->dev->emptyImg, ctx->dsSrc); - _update_gradient_desc_set(ctx); - + if (CmdPushDescriptorSet) { + _init_push_descriptor_writes(ctx); + }else{ + _createDescriptorPool (ctx); + _init_descriptor_sets (ctx); + _update_descriptor_set (ctx, ctx->pSurf->dev->fontCache->texture, ctx->dsFont); + _update_descriptor_set (ctx, surf->dev->emptyImg, ctx->dsSrc); + _update_gradient_desc_set(ctx); + } _clear_path (ctx); ctx->cmd = ctx->cmdBuffers[0];//current recording buffer @@ -199,11 +202,14 @@ void vkvg_destroy (VkvgContext ctx) vkFreeCommandBuffers(dev, ctx->cmdPool, 2, ctx->cmdBuffers); vkDestroyCommandPool(dev, ctx->cmdPool, NULL); - VkDescriptorSet dss[] = {ctx->dsFont, ctx->dsSrc, ctx->dsGrad}; - vkFreeDescriptorSets (dev, ctx->descriptorPool, 3, dss); + if (CmdPushDescriptorSet) { - vkDestroyDescriptorPool (dev, ctx->descriptorPool,NULL); + }else{ + VkDescriptorSet dss[] = {ctx->dsFont, ctx->dsSrc, ctx->dsGrad}; + vkFreeDescriptorSets (dev, ctx->descriptorPool, 3, dss); + vkDestroyDescriptorPool (dev, ctx->descriptorPool,NULL); + } vkvg_buffer_destroy (&ctx->uboGrad); vkvg_buffer_destroy (&ctx->indices); vkvg_buffer_destroy (&ctx->vertices); @@ -315,8 +321,7 @@ void vkvg_rel_line_to (VkvgContext ctx, float x, float y){ ctx->status = VKVG_STATUS_NO_CURRENT_POINT; return; } - vec2 cp = _get_current_position(ctx); - vkvg_line_to(ctx, cp.x + x, cp.y + y); + _add_point_relative (ctx, x, y); } /** * @brief Draw line from current point, if no current point is defined, only a move to will be executed. @@ -336,7 +341,7 @@ void vkvg_line_to (VkvgContext ctx, float x, float y) _add_point(ctx,x,y); } /** - * @brief Draw arc + * @brief Draw arc clockwise * @param context pointer * @param center x coordinate * @param center y coordinate @@ -388,6 +393,15 @@ void vkvg_arc (VkvgContext ctx, float xc, float yc, float radius, float a1, floa _add_point (ctx, v.x, v.y); _set_curve_end(ctx); } +/** + * @brief Draw arc counter clockwise + * @param context pointer + * @param center x coordinate + * @param center y coordinate + * @param radius + * @param start angle of arc + * @param end angle of arc + */ void vkvg_arc_negative (VkvgContext ctx, float xc, float yc, float radius, float a1, float a2) { while (a2 > a1) a2 -= 2.f*M_PIF; @@ -437,7 +451,15 @@ void vkvg_rel_move_to (VkvgContext ctx, float x, float y) return; } vec2 cp = _get_current_position(ctx); - vkvg_move_to(ctx, cp.x + x, cp.y + y); + + _finish_path(ctx); + //start subpath + ctx->pathes[ctx->pathPtr] = ctx->pointCount; + vkvg_matrix_transform_distance(&ctx->pushConsts.mat, &x, &y); + _add_point_pretransformed(ctx, cp.x + x, cp.y + y); + _check_pathes_array(ctx); + ctx->pathPtr++; + //*** } void vkvg_move_to (VkvgContext ctx, float x, float y) { @@ -451,11 +473,17 @@ void vkvg_curve_to (VkvgContext ctx, float x1, float y1, float x2, float y2, flo vec2 cp = _get_current_position(ctx); _set_curve_start (ctx); + + //TODO:x1,y1 are transformed 2 times if path is empty, one in move_to, and one before recursive_bezier. + vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x1, &y1); + vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x2, &y2); + vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x3, &y3); + _recursive_bezier (ctx, cp.x, cp.y, x1, y1, x2, y2, x3, y3, 0); /*cp.x = x3; cp.y = y3; if (!vec2_equ(ctx->points[ctx->pointCount-1],cp))*/ - _add_point(ctx,x3,y3); + _add_point_pretransformed(ctx,x3,y3); _set_curve_end (ctx); } void vkvg_rel_curve_to (VkvgContext ctx, float x1, float y1, float x2, float y2, float x3, float y3) { @@ -464,11 +492,20 @@ void vkvg_rel_curve_to (VkvgContext ctx, float x1, float y1, float x2, float y2, return; } vec2 cp = _get_current_position(ctx); - vkvg_curve_to (ctx, cp.x + x1, cp.y + y1, cp.x + x2, cp.y + y2, cp.x + x3, cp.y + y3); + + _set_curve_start (ctx); + + vkvg_matrix_transform_distance (&ctx->pushConsts.mat, &x1, &y1); + vkvg_matrix_transform_distance (&ctx->pushConsts.mat, &x2, &y2); + vkvg_matrix_transform_distance (&ctx->pushConsts.mat, &x3, &y3); + + _recursive_bezier (ctx, cp.x, cp.y, cp.x + x1, cp.y + y1, cp.x + x2, cp.y + y2, cp.x + x3, cp.y + y3, 0); + _add_point_pretransformed(ctx, cp.x + x3, cp.y + y3); + _set_curve_end (ctx); } void vkvg_fill_rectangle (VkvgContext ctx, float x, float y, float w, float h){ _vao_add_rectangle (ctx,x,y,w,h); - _record_draw_cmd(ctx); + //_record_draw_cmd(ctx); } void vkvg_rectangle (VkvgContext ctx, float x, float y, float w, float h){ @@ -551,7 +588,7 @@ void vkvg_fill_preserve (VkvgContext ctx){ _draw_full_screen_quad(ctx,true); CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); }else{ - _check_cmd_buff_state (ctx); + //_check_cmd_buff_state (ctx); //CmdSetStencilCompareMask(ctx->cmd, VK_STENCIL_FRONT_AND_BACK, STENCIL_CLIP_BIT); _fill_ec(ctx); } @@ -705,17 +742,20 @@ void vkvg_stroke_preserve (VkvgContext ctx) } void vkvg_paint (VkvgContext ctx){ _check_cmd_buff_state (ctx); - vec4 r = {0}; + if (ctx->pattern == NULL || ctx->pattern->type == VKVG_PATTERN_TYPE_SOLID){ - /*r.width = ctx->bounds.extent.width; - r.height = ctx->bounds.extent.height;*/ - _draw_full_screen_quad (ctx, true); + _vao_add_rectangle (ctx, 0, 0, ctx->bounds.extent.width, ctx->bounds.extent.height); return; }else{ - r.width = ctx->pushConsts.source.width; - r.height = ctx->pushConsts.source.height; + vec4 r = ctx->pushConsts.source; + //vkvg_matrix_transform_point (&ctx->pushConsts.matInv, &r.x, &r.y); + r.width = ctx->bounds.extent.width; + r.height = ctx->bounds.extent.height; + //vkvg_matrix_transform_point(&ctx->pushConsts.matInv, &r.width, &r.height); + _vao_add_rectangle (ctx, r.x, r.y, r.width, r.height); + /*vkvg_rectangle(ctx, r.x, r.y, r.width, r.height); + vkvg_fill(ctx);*/ } - vkvg_fill_rectangle(ctx, 0, 0, r.width, r.height); } inline void vkvg_set_source_rgb (VkvgContext ctx, float r, float g, float b) { vkvg_set_source_rgba (ctx, r, g, b, 1); @@ -727,8 +767,7 @@ void vkvg_set_source_rgba (VkvgContext ctx, float r, float g, float b, float a) } void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y){ _update_cur_pattern (ctx, vkvg_pattern_create_for_surface(surf)); - ctx->pushConsts.source.x = x; - ctx->pushConsts.source.y = y; + ctx->pushConsts.source = (vec4){x, y, surf->width, surf->height}; ctx->pushCstDirty = true; } void vkvg_set_source (VkvgContext ctx, VkvgPattern pat){ diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index 8509d21..77adad7 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -36,13 +36,6 @@ #include "vkh_queue.h" #include "vkh_image.h" -void _check_flush_needed (VkvgContext ctx) { - if (!ctx->cmdStarted) - return; - if (ctx->pointCount * 4 < ctx->sizeIndices - ctx->indCount) - return; - _flush_cmd_buff(ctx); -} void _check_vbo_size (VkvgContext ctx) { if (ctx->sizeVertices - ctx->vertCount > VKVG_ARRAY_THRESHOLD) return; @@ -145,16 +138,50 @@ void _resetMinMax (VkvgContext ctx) { ctx->xMin = ctx->yMin = FLT_MAX; ctx->xMax = ctx->yMax = FLT_MIN; } -void _add_point (VkvgContext ctx, float x, float y){ +void _add_point_relative (VkvgContext ctx, float dx, float dy){ + vkvg_matrix_transform_distance(&ctx->pushConsts.mat, &dx, &dy); + + dx += ctx->points[ctx->pointCount-1].x; + dy += ctx->points[ctx->pointCount-1].y; + ctx->points[ctx->pointCount].x = dx; + ctx->points[ctx->pointCount].y = dy; + ctx->pointCount++; + + _check_point_array(ctx); + + if (dx < ctx->xMin) + ctx->xMin = dx; + if (dx > ctx->xMax) + ctx->xMax = dx; + if (dy < ctx->yMin) + ctx->yMin = dy; + if (dy > ctx->yMax) + ctx->yMax = dy; +} +void _add_point_pretransformed (VkvgContext ctx, float x, float y){ ctx->points[ctx->pointCount] = (vec2){x,y}; ctx->pointCount++; _check_point_array(ctx); - //bounds are computed here to scissor the painting operation - //that speed up fill drastically. + if (x < ctx->xMin) + ctx->xMin = x; + if (x > ctx->xMax) + ctx->xMax = x; + if (y < ctx->yMin) + ctx->yMin = y; + if (y > ctx->yMax) + ctx->yMax = y; +} +void _add_point (VkvgContext ctx, float x, float y){ + //pretransform all points vkvg_matrix_transform_point (&ctx->pushConsts.mat, &x, &y); + ctx->points[ctx->pointCount] = (vec2){x,y}; + ctx->pointCount++; + + _check_point_array(ctx); + if (x < ctx->xMin) ctx->xMin = x; if (x > ctx->xMax) @@ -253,10 +280,10 @@ void _add_triangle_indices(VkvgContext ctx, VKVG_IBO_INDEX_TYPE i0, VKVG_IBO_IND void _vao_add_rectangle (VkvgContext ctx, float x, float y, float width, float height){ Vertex v[4] = { - {{x,y}, {0,0,-1}}, - {{x,y+height}, {0,1,-1}}, - {{x+width,y}, {1,0,-1}}, - {{x+width,y+height},{1,1,-1}} + {{x,y}, ctx->curColor}, + {{x,y+height}, ctx->curColor}, + {{x+width,y}, ctx->curColor}, + {{x+width,y+height},ctx->curColor} }; VKVG_IBO_INDEX_TYPE firstIdx = ctx->vertCount - ctx->curVertOffset; Vertex* pVert = &ctx->vertexCache[ctx->vertCount]; @@ -361,7 +388,7 @@ void _end_render_pass (VkvgContext ctx) { CmdEndRenderPass (ctx->cmd); ctx->renderPassBeginInfo.renderPass = ctx->pSurf->dev->renderPass; } -void _record_draw_cmd (VkvgContext ctx){ +void _new_flush (VkvgContext ctx){ if (ctx->indCount == ctx->curIndStart) return; @@ -374,11 +401,51 @@ void _record_draw_cmd (VkvgContext ctx){ _flush_vertices_caches_until_vertex_base (ctx); vkh_cmd_end (ctx->cmd); _wait_and_submit_cmd (ctx); - //we could resize here _resize_vbo(ctx, ctx->sizeVertices); _resize_ibo(ctx, ctx->sizeIndices); }else{ - //should resize vbo here + _resize_vbo(ctx, ctx->sizeVertices); + _resize_ibo(ctx, ctx->sizeIndices); + } + } + + _check_cmd_buff_state(ctx); + CmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, (int32_t)ctx->curVertOffset, 0); + + LOG(LOG_INFO, "RECORD DRAW CMD: ctx = %lu; vertices = %d; indices = %d\n", (ulong)ctx, ctx->vertCount - ctx->indexCache[ctx->curIndStart], ctx->indCount - ctx->curIndStart); + +#ifdef VKVG_WIRED_DEBUG + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineWired); + CmdDrawIndexed(ctx->cmd, ctx->indCount - ctx->curIndStart, 1, ctx->curIndStart, (int32_t)ctx->curVertOffset, 0); + CmdBindPipeline(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipe_OVER); +#endif + + ctx->curIndStart = ctx->indCount; + ctx->curVertOffset = ctx->vertCount; + + _end_render_pass (ctx); + _flush_vertices_caches (ctx); + vkh_cmd_end (ctx->cmd); + + LOG(LOG_INFO, "FLUSH CTX: ctx = %lu; vertices = %d; indices = %d\n", ctx, ctx->vertCount, ctx->indCount); + _wait_and_submit_cmd(ctx); +} +inline bool _undrawn_vertices (VkvgContext ctx) { + return ctx->indCount > ctx->curIndStart; +} +void _record_draw_cmd (VkvgContext ctx){ + if (ctx->vertCount > ctx->sizeVBO || ctx->indCount > ctx->sizeIBO){ + //vbo or ibo buffers too small + if (ctx->cmdStarted) { + //if cmd is started buffers, are already bound, so no resize is possible + //instead we flush, and clear vbo and ibo caches + _end_render_pass (ctx); + _flush_vertices_caches_until_vertex_base (ctx); + vkh_cmd_end (ctx->cmd); + _wait_and_submit_cmd (ctx); + _resize_vbo(ctx, ctx->sizeVertices); + _resize_ibo(ctx, ctx->sizeIndices); + }else{ _resize_vbo(ctx, ctx->sizeVertices); _resize_ibo(ctx, ctx->sizeIndices); } @@ -399,10 +466,12 @@ void _record_draw_cmd (VkvgContext ctx){ ctx->curVertOffset = ctx->vertCount; } void _flush_cmd_buff (VkvgContext ctx){ - if (!ctx->cmdStarted) + if (_undrawn_vertices(ctx)){ + if (!ctx->cmdStarted) + _start_cmd_for_render_pass(ctx); + _record_draw_cmd (ctx); + }else if (!ctx->cmdStarted) return; - - _record_draw_cmd (ctx); _end_render_pass (ctx); _flush_vertices_caches (ctx); vkh_cmd_end (ctx->cmd); @@ -426,7 +495,35 @@ void _bind_draw_pipeline (VkvgContext ctx) { break; } } - +void _init_push_descriptor_writes (VkvgContext ctx) { + ctx->descFontTex = vkh_image_get_descriptor (ctx->pSurf->dev->fontCache->texture, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + VkWriteDescriptorSet wds = {0}; + wds.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + wds.dstSet = 0; + wds.dstBinding = 0; + wds.descriptorCount = 1; + wds.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + wds.pImageInfo = &ctx->descFontTex; + ctx->wds[0] = wds; + + ctx->descSrcTex = vkh_image_get_descriptor (ctx->pSurf->dev->emptyImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + wds.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + wds.dstSet = 0; + wds.dstBinding = 1; + wds.descriptorCount = 1; + wds.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + wds.pImageInfo = &ctx->descSrcTex; + ctx->wds[1] = wds; + + wds.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; + wds.dstSet = 0; + wds.dstBinding = 2; + wds.descriptorCount = 1; + wds.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + wds.pImageInfo = 0; + wds.pBufferInfo = &ctx->uboGrad.descriptor; + ctx->wds[2] = wds; +} void _start_cmd_for_render_pass (VkvgContext ctx) { LOG(LOG_INFO, "START RENDER PASS: ctx = %lu\n", ctx); vkh_cmd_begin (ctx->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); @@ -443,16 +540,24 @@ void _start_cmd_for_render_pass (VkvgContext ctx) { VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); } + if (ctx->source && ctx->source->layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) + vkh_image_set_layout (ctx->cmd, ctx->source, VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); + CmdBeginRenderPass (ctx->cmd, &ctx->renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); VkViewport viewport = {0,0,ctx->pSurf->width,ctx->pSurf->height,0,1}; CmdSetViewport(ctx->cmd, 0, 1, &viewport); CmdSetScissor(ctx->cmd, 0, 1, &ctx->bounds); - VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc,ctx->dsGrad}; - CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, - 0, 3, dss, 0, NULL); - + if (CmdPushDescriptorSet) { + CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 3, ctx->wds); + }else{ + VkDescriptorSet dss[] = {ctx->dsFont,ctx->dsSrc,ctx->dsGrad}; + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, + 0, 3, dss, 0, NULL); + } VkDeviceSize offsets[1] = { 0 }; CmdBindVertexBuffers(ctx->cmd, 0, 1, &ctx->vertices.buffer, offsets); if (sizeof (VKVG_IBO_INDEX_TYPE) == 4) @@ -489,22 +594,36 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { switch (pat->type) { case VKVG_PATTERN_TYPE_SOLID: - memcpy (&ctx->pushConsts.source, ctx->pattern->data, sizeof(vkvg_color_t)); - + if (ctx->source) + ctx->source = NULL; if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE){ - _flush_cmd_buff (ctx); - _update_descriptor_set (ctx, ctx->pSurf->dev->emptyImg, ctx->dsSrc); - //_init_cmd_buff (ctx);//push csts updated by init - }//else - //_update_push_constants (ctx); - + ctx->descSrcTex = vkh_image_get_descriptor (ctx->pSurf->dev->emptyImg, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + if (ctx->cmdStarted){ + CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 1, &ctx->wds[1]); + } + } break; case VKVG_PATTERN_TYPE_SURFACE: { VkvgSurface surf = (VkvgSurface)pat->data; + ctx->source = surf->img; + if (CmdPushDescriptorSet != VK_NULL_HANDLE) { + ctx->descSrcTex = (VkDescriptorImageInfo){ + _get_sampler_for_pattern(ctx->pSurf->dev, pat), vkh_image_get_view(surf->img), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL}; + if (!ctx->cmdStarted) + _start_cmd_for_render_pass(ctx); + else{ + vkh_image_set_layout (ctx->cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT, + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, + VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); + CmdPushDescriptorSet(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->pSurf->dev->pipelineLayout, 0, 1, &ctx->wds[1]); + } + } + vec4 srcRect = {0,0,surf->width,surf->height}; + ctx->pushConsts.source = srcRect; //flush ctx in two steps to add the src transitioning in the cmd buff - if (ctx->cmdStarted){//transition of img without appropriate dependencies in subpass must be done outside renderpass. + /*if (ctx->cmdStarted){//transition of img without appropriate dependencies in subpass must be done outside renderpass. _record_draw_cmd (ctx);//ensure all vertices are flushed _end_render_pass (ctx); _flush_vertices_caches (ctx); @@ -512,43 +631,17 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { vkh_cmd_begin (ctx->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); ctx->cmdStarted = true; } - + */ //transition source surface for sampling + /* vkh_image_set_layout (ctx->cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); vkh_cmd_end (ctx->cmd); - _wait_and_submit_cmd (ctx); + _wait_and_submit_cmd (ctx);*/ - ctx->source = surf->img; - //if (vkh_image_get_sampler (ctx->source) == VK_NULL_HANDLE){ - VkSamplerAddressMode addrMode; - VkFilter filter = VK_FILTER_NEAREST; - switch (pat->extend) { - case VKVG_EXTEND_NONE: - addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; - break; - case VKVG_EXTEND_PAD: - addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; - break; - case VKVG_EXTEND_REPEAT: - addrMode = VK_SAMPLER_ADDRESS_MODE_REPEAT; - break; - case VKVG_EXTEND_REFLECT: - addrMode = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; - break; - } - switch (pat->filter) { - case VKVG_FILTER_BILINEAR: - case VKVG_FILTER_BEST: - filter = VK_FILTER_LINEAR; - break; - } - vkh_image_create_sampler(ctx->source, filter, filter, - VK_SAMPLER_MIPMAP_MODE_NEAREST, addrMode); - //} /*if (vkh_image_get_layout (ctx->source) != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL){ vkh_cmd_begin (ctx->cmd,VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); @@ -559,11 +652,11 @@ void _update_cur_pattern (VkvgContext ctx, VkvgPattern pat) { _submit_wait_and_reset_cmd (ctx); }*/ - +/* _update_descriptor_set (ctx, ctx->source, ctx->dsSrc); - vec4 srcRect = {0,0,surf->width,surf->height}; - ctx->pushConsts.source = srcRect; + + */ //_init_cmd_buff (ctx); break; @@ -852,7 +945,7 @@ void _recursive_bezier (VkvgContext ctx, //---------------------- if(m_angle_tolerance < curve_angle_tolerance_epsilon) { - _add_point (ctx, x1234, y1234); + _add_point_pretransformed(ctx, x1234, y1234); return; } @@ -868,7 +961,7 @@ void _recursive_bezier (VkvgContext ctx, { // Finally we can stop the recursion //---------------------- - _add_point (ctx, x1234, y1234); + _add_point_pretransformed(ctx, x1234, y1234); return; } @@ -876,13 +969,13 @@ void _recursive_bezier (VkvgContext ctx, { if(da1 > m_cusp_limit) { - _add_point (ctx, x2, y2); + _add_point_pretransformed (ctx, x2, y2); return; } if(da2 > m_cusp_limit) { - _add_point (ctx, x3, y3); + _add_point_pretransformed (ctx, x3, y3); return; } } @@ -896,7 +989,7 @@ void _recursive_bezier (VkvgContext ctx, { if(m_angle_tolerance < curve_angle_tolerance_epsilon) { - _add_point (ctx, x1234, y1234); + _add_point_pretransformed (ctx, x1234, y1234); return; } @@ -907,8 +1000,8 @@ void _recursive_bezier (VkvgContext ctx, if(da1 < m_angle_tolerance) { - _add_point (ctx, x2, y2); - _add_point (ctx, x3, y3); + _add_point_pretransformed (ctx, x2, y2); + _add_point_pretransformed (ctx, x3, y3); return; } @@ -916,7 +1009,7 @@ void _recursive_bezier (VkvgContext ctx, { if(da1 > m_cusp_limit) { - _add_point (ctx, x2, y2); + _add_point_pretransformed (ctx, x2, y2); return; } } @@ -928,7 +1021,7 @@ void _recursive_bezier (VkvgContext ctx, { if(m_angle_tolerance < curve_angle_tolerance_epsilon) { - _add_point (ctx, x1234, y1234); + _add_point_pretransformed (ctx, x1234, y1234); return; } @@ -939,8 +1032,8 @@ void _recursive_bezier (VkvgContext ctx, if(da1 < m_angle_tolerance) { - _add_point (ctx, x2, y2); - _add_point (ctx, x3, y3); + _add_point_pretransformed (ctx, x2, y2); + _add_point_pretransformed (ctx, x3, y3); return; } @@ -962,7 +1055,7 @@ void _recursive_bezier (VkvgContext ctx, dy = y1234 - (y1 + y4) / 2; if(dx*dx + dy*dy <= m_distance_tolerance) { - _add_point (ctx, x1234, y1234); + _add_point_pretransformed (ctx, x1234, y1234); return; } } diff --git a/src/vkvg_context_internal.h b/src/vkvg_context_internal.h index eec0518..e514850 100644 --- a/src/vkvg_context_internal.h +++ b/src/vkvg_context_internal.h @@ -35,7 +35,7 @@ #define VKVG_ARRAY_THRESHOLD 8 #define VKVG_IBO_INDEX_TYPE uint16_t #define CreateRgba(r, g, b, a) ((a << 24) | (r << 16) | (g << 8) | b) -#define CreateRgbaf(r, g, b, a) (((int)(a * 255.0f) << 24) | ((int)(r * a * 255.0f) << 16) | ((int)(g * a * 255.0f) << 8) | (int)(b * a * 255.0f)) +#define CreateRgbaf(r, g, b, a) (((int)(a * 255.0f) << 24) | ((int)(b * a * 255.0f) << 16) | ((int)(g * a * 255.0f) << 8) | (int)(r * a * 255.0f)) typedef struct{ vec2 pos; uint32_t color; @@ -145,6 +145,10 @@ typedef struct _vkvg_context_t { _vkvg_font_t* currentFont; //font pointing to cached fonts ready for lookup vkvg_direction_t textDirection; + VkWriteDescriptorSet wds[3]; + VkDescriptorImageInfo descSrcTex; + VkDescriptorImageInfo descFontTex; + push_constants pushConsts; VkvgPattern pattern; vkvg_status_t status; @@ -182,6 +186,8 @@ float _get_arc_step (float radius); vec2 _get_current_position (VkvgContext ctx); void _add_point (VkvgContext ctx, float x, float y); +void _add_point_pretransformed (VkvgContext ctx, float x, float y); +void _add_point_relative (VkvgContext ctx, float dx, float dy); void _resetMinMax (VkvgContext ctx); @@ -203,7 +209,13 @@ void _bind_draw_pipeline (VkvgContext ctx); void _create_cmd_buff (VkvgContext ctx); void _check_cmd_buff_state (VkvgContext ctx); void _flush_cmd_buff (VkvgContext ctx); -void _record_draw_cmd (VkvgContext ctx); + +bool _undrawn_vertices (VkvgContext ctx); +void _init_push_descriptor_writes (VkvgContext ctx); + +void _new_flush (VkvgContext ctx); + +void _record_draw_cmd (VkvgContext ctx); void _wait_flush_fence (VkvgContext ctx); void _reset_flush_fence (VkvgContext ctx); void _wait_and_submit_cmd (VkvgContext ctx); diff --git a/src/vkvg_device.c b/src/vkvg_device.c index 53af110..560c1e6 100644 --- a/src/vkvg_device.c +++ b/src/vkvg_device.c @@ -102,6 +102,8 @@ VkvgDevice vkvg_device_create_multisample(VkInstance inst, VkPhysicalDevice phy, _create_empty_texture (dev); + memset(dev->samplers, 0, 10 * sizeof (VkSampler)); + dev->references = 1; return dev; @@ -117,8 +119,8 @@ void vkvg_device_destroy (VkvgDevice dev) vkh_image_destroy (dev->emptyImg); - vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslGrad,NULL); - vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslFont,NULL); + //vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslGrad,NULL); + //vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslFont,NULL); vkDestroyDescriptorSetLayout (dev->vkDev, dev->dslSrc, NULL); vkDestroyPipeline (dev->vkDev, dev->pipelinePolyFill, NULL); diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index 0c77f61..8bc4023 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -24,6 +24,7 @@ #include "vkvg_device_internal.h" #include "vkvg_context_internal.h" +#include "vkvg_pattern.h" #include "shaders.h" void _flush_all_contexes (VkvgDevice dev){ @@ -346,30 +347,76 @@ void _setupPipelines(VkvgDevice dev) void _createDescriptorSetLayout (VkvgDevice dev) { - VkDescriptorSetLayoutBinding dsLayoutBinding = - {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1,VK_SHADER_STAGE_FRAGMENT_BIT, NULL}; + VkDescriptorSetLayoutBinding dsLayoutBinding[] = { + {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1,VK_SHADER_STAGE_FRAGMENT_BIT, NULL}, + {1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1,VK_SHADER_STAGE_FRAGMENT_BIT, NULL}, + {2, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1,VK_SHADER_STAGE_FRAGMENT_BIT, NULL} + }; VkDescriptorSetLayoutCreateInfo dsLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, - .bindingCount = 1, - .pBindings = &dsLayoutBinding }; - VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslFont)); + .bindingCount = 3, + .pBindings = dsLayoutBinding }; + if (CmdPushDescriptorSet) + dsLayoutCreateInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; + + //VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslFont)); VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslSrc)); - dsLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslGrad)); + //dsLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + + //VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslGrad)); VkPushConstantRange pushConstantRange[] = { {VK_SHADER_STAGE_VERTEX_BIT,0,sizeof(push_constants)}, //{VK_SHADER_STAGE_FRAGMENT_BIT,0,sizeof(push_constants)} }; - VkDescriptorSetLayout dsls[] = {dev->dslFont,dev->dslSrc,dev->dslGrad}; + //VkDescriptorSetLayout dsls[] = {dev->dslFont,dev->dslSrc,dev->dslGrad}; VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, .pushConstantRangeCount = 1, .pPushConstantRanges = (VkPushConstantRange*)&pushConstantRange, - .setLayoutCount = 3, - .pSetLayouts = dsls }; + .setLayoutCount = 1, + .pSetLayouts = &dev->dslSrc }; VK_CHECK_RESULT(vkCreatePipelineLayout(dev->vkDev, &pipelineLayoutCreateInfo, NULL, &dev->pipelineLayout)); } +VkSampler _get_sampler_for_pattern (VkvgDevice dev, VkvgPattern pat) { + VkFilter filter = VK_FILTER_NEAREST; + switch (pat->filter) { + case VKVG_FILTER_BILINEAR: + case VKVG_FILTER_BEST: + filter = VK_FILTER_LINEAR; + break; + default: + filter = VK_FILTER_NEAREST; + break; + } + VkSamplerAddressMode addrMode; + switch (pat->extend) { + case VKVG_EXTEND_NONE: + addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; + break; + case VKVG_EXTEND_PAD: + addrMode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + break; + case VKVG_EXTEND_REPEAT: + addrMode = VK_SAMPLER_ADDRESS_MODE_REPEAT; + break; + case VKVG_EXTEND_REFLECT: + addrMode = VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; + break; + } + if (dev->samplers[filter][addrMode] == VK_NULL_HANDLE) + dev->samplers[filter][addrMode] = vkh_device_create_sampler((VkhDevice)dev, filter, filter, + VK_SAMPLER_MIPMAP_MODE_NEAREST, addrMode); + return dev->samplers[filter][addrMode]; +} +void _destroy_samplers (VkvgDevice dev) { + for (int i=0;i<5;i++) { + for (int j=0;j<2;j++) { + if (dev->samplers[j][i] != VK_NULL_HANDLE) + vkh_device_destroy_sampler((VkhDevice)dev, dev->samplers[j][i]); + } + } +} void _wait_idle (VkvgDevice dev) { vkDeviceWaitIdle (dev->vkDev); } @@ -399,7 +446,7 @@ void _init_function_pointers (VkvgDevice dev) { CmdSetViewport = GetInstProcAddress(dev->instance, vkCmdSetViewport); CmdSetScissor = GetInstProcAddress(dev->instance, vkCmdSetScissor); CmdPushConstants = GetInstProcAddress(dev->instance, vkCmdPushConstants); - CmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSetKHR)vkGetInstanceProcAddr(dev->instance, "vkCmdDescriptorSet"); + CmdPushDescriptorSet = (PFN_vkCmdPushDescriptorSetKHR)vkGetInstanceProcAddr(dev->instance, "vkCmdPushDescriptorSetKHR"); } void _create_empty_texture (VkvgDevice dev) { diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h index 3d27f44..e4b77bf 100644 --- a/src/vkvg_device_internal.h +++ b/src/vkvg_device_internal.h @@ -89,6 +89,8 @@ typedef struct _vkvg_device_t{ int hdpi, /**< only used for FreeType fonts and svg loading */ vdpi; + VkSampler samplers[2][5]; /**< source samplers, created on request */ + VkhImage emptyImg; /**< prevent unbound descriptor to trigger Validation error 61 */ VkSampleCountFlags samples; /**< samples count common to all surfaces */ bool deferredResolve; /**< if true, resolve only on context destruction and set as source */ @@ -107,6 +109,7 @@ VkRenderPass _createRenderPassNoResolve(VkvgDevice dev, VkAttachmentLoadOp loadO void _setupPipelines (VkvgDevice dev); void _createDescriptorSetLayout (VkvgDevice dev); void _flush_all_contexes (VkvgDevice dev); +VkSampler _get_sampler_for_pattern (VkvgDevice dev, VkvgPattern pat); void _wait_idle (VkvgDevice dev); void _wait_and_reset_device_fence (VkvgDevice dev); void _submit_cmd (VkvgDevice dev, VkCommandBuffer* cmd, VkFence fence); diff --git a/src/vkvg_fonts.c b/src/vkvg_fonts.c index 91e2488..0fb50bb 100644 --- a/src/vkvg_fonts.c +++ b/src/vkvg_fonts.c @@ -533,7 +533,7 @@ void _show_texture (vkvg_context* ctx){ void _show_text (VkvgContext ctx, const char* text){ - vkvg_text_run_t tr = {}; + vkvg_text_run_t tr = {0}; _create_text_run (ctx, text, &tr); _show_text_run (ctx, &tr); diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index 0f4ebd3..e3d0928 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -29,6 +29,7 @@ VkvgPattern vkvg_pattern_create(){ VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); pat->type = VKVG_PATTERN_TYPE_SOLID; pat->extend = VKVG_EXTEND_NONE; + pat->filter = VKVG_FILTER_BEST; pat->data = (vkvg_color_t*)calloc(1,sizeof(vkvg_color_t)); pat->references = 1; diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c index e280353..47d5db0 100644 --- a/src/vkvg_surface.c +++ b/src/vkvg_surface.c @@ -114,19 +114,17 @@ void _clear_surface (VkvgSurface surf, VkImageAspectFlags aspect) void _create_surface_main_image (VkvgSurface surf){ surf->img = vkh_image_create((VkhDevice)surf->dev,surf->format,surf->width,surf->height,VKVG_TILING,VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); - vkh_image_create_descriptor(surf->img, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); + vkh_image_create_view(surf->img, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); } //create multisample color img if sample count > 1 and the stencil buffer multisampled or not void _create_surface_secondary_images (VkvgSurface surf) { if (surf->dev->samples > VK_SAMPLE_COUNT_1_BIT){ surf->imgMS = vkh_image_ms_create((VkhDevice)surf->dev,surf->format,surf->dev->samples,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - vkh_image_create_descriptor(surf->imgMS, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, VK_FILTER_NEAREST, - VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); + vkh_image_create_view(surf->imgMS, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); } surf->stencil = vkh_image_ms_create((VkhDevice)surf->dev,FB_STENCIL_FORMAT,surf->dev->samples,surf->width,surf->height,VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT); - vkh_image_create_descriptor(surf->stencil, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_STENCIL_BIT, VK_FILTER_NEAREST, - VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); + vkh_image_create_view(surf->stencil, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_STENCIL_BIT); } void _create_framebuffer (VkvgSurface surf) { VkImageView attachments[] = { @@ -192,8 +190,8 @@ VkvgSurface vkvg_surface_create_for_VkhImage (VkvgDevice dev, void* vkhImg) { surf->img = img; - vkh_image_create_sampler(img, VK_FILTER_NEAREST, VK_FILTER_NEAREST, - VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); + /*vkh_image_create_sampler(img, VK_FILTER_NEAREST, VK_FILTER_NEAREST, + VK_SAMPLER_MIPMAP_MODE_NEAREST,VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE);*/ _create_surface_secondary_images (surf); _create_framebuffer (surf); @@ -225,8 +223,7 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img, VkhImage tmpImg = vkh_image_create ((VkhDevice)surf->dev,surf->format,surf->width,surf->height,VK_IMAGE_TILING_LINEAR, VMA_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_SAMPLED_BIT|VK_IMAGE_USAGE_TRANSFER_DST_BIT); - vkh_image_create_descriptor (tmpImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT, - VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); + vkh_image_create_view (tmpImg, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); //staging buffer vkvg_buff buff = {0}; vkvg_buffer_create(dev, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU, imgSize, &buff); @@ -291,11 +288,20 @@ VkvgSurface vkvg_surface_create_from_bitmap (VkvgDevice dev, unsigned char* img, ctx->pushConsts.patternType = VKVG_PATTERN_TYPE_SURFACE; //_update_push_constants (ctx); - _update_descriptor_set (ctx, tmpImg, ctx->dsSrc); + + VkvgPattern pat = vkvg_pattern_create(); + if (CmdPushDescriptorSet != VK_NULL_HANDLE) { + ctx->source = tmpImg; + ctx->descSrcTex = (VkDescriptorImageInfo){ + _get_sampler_for_pattern(ctx->pSurf->dev,pat), vkh_image_get_view(tmpImg), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL}; + }else { + _update_descriptor_set (ctx, tmpImg, ctx->dsSrc); + } _check_cmd_buff_state (ctx); vkvg_paint (ctx); vkvg_destroy (ctx); + vkvg_pattern_destroy(pat); vkh_image_destroy (tmpImg); diff --git a/tests/common/test.c b/tests/common/test.c index 85bfc4b..96b254d 100644 --- a/tests/common/test.c +++ b/tests/common/test.c @@ -137,7 +137,7 @@ void run_test_func (void(*testfunc)(void),uint width, uint height) { int i = 0; - while (!vkengine_should_close (e) && i < iterations) { + while (!vkengine_should_close (e)){// && i < iterations) { glfwPollEvents(); start_time = get_tick(); @@ -218,7 +218,7 @@ void perform_test (void(*testfunc)(void),uint width, uint height) { int i = 0; - while (!vkengine_should_close (e) && i < iterations) { + while (!vkengine_should_close (e)){// && i < iterations) { glfwPollEvents(); start_time = get_tick(); @@ -260,7 +260,7 @@ void perform_test (void(*testfunc)(void),uint width, uint height) { vkDeviceWaitIdle(e->dev->dev); - if (paused) + //if (paused) continue; stop_time = get_tick(); diff --git a/tests/common/vkengine.c b/tests/common/vkengine.c index 92f6993..5cb0c86 100644 --- a/tests/common/vkengine.c +++ b/tests/common/vkengine.c @@ -190,11 +190,11 @@ vk_engine_t* vkengine_create (VkPhysicalDeviceType preferedGPU, VkPresentModeKHR } #if defined(DEBUG) && defined(VKVG_USE_VALIDATION) - char const * dex [] = {"VK_KHR_swapchain", "VK_EXT_debug_marker"}; - enabledExtsCount = 2; + char const * dex [] = {"VK_KHR_swapchain", "VK_KHR_push_descriptor", "VK_EXT_debug_marker"}; + enabledExtsCount = 3; #else - char const * dex [] = {"VK_KHR_swapchain"}; - enabledExtsCount = 1; + char const * dex [] = {"VK_KHR_swapchain", "VK_KHR_push_descriptor"}; + enabledExtsCount = 2; #endif diff --git a/tests/fill_and_stroke.c b/tests/fill_and_stroke.c index 791d391..b431c8e 100644 --- a/tests/fill_and_stroke.c +++ b/tests/fill_and_stroke.c @@ -3,6 +3,8 @@ void test(){ VkvgContext ctx = vkvg_create(surf); + vkvg_translate(ctx,250,150); + vkvg_move_to (ctx, 100, 100); vkvg_rel_line_to (ctx, 50, -80); vkvg_rel_line_to (ctx, 50, 80); diff --git a/tests/img_surf.c b/tests/img_surf.c index 3a36209..bc890e3 100644 --- a/tests/img_surf.c +++ b/tests/img_surf.c @@ -5,12 +5,27 @@ void test(){ vkvg_set_fill_rule(ctx,VKVG_FILL_RULE_NON_ZERO); VkvgSurface imgSurf = vkvg_surface_create_from_image(device, "data/miroir.jpg"); - vkvg_set_operator(ctx, VKVG_OPERATOR_CLEAR); - vkvg_paint(ctx); - vkvg_set_operator(ctx, VKVG_OPERATOR_OVER); - /*vkvg_translate(ctx,200,200); + //vkvg_rotate(ctx,0.5); + //vkvg_set_source_rgba(ctx,1,0,0,1); + //vkvg_rectangle(ctx,100,100,200,200); + /*vkvg_rectangle(ctx, + 0, + 0, + 500, + 500);*/ + //vkvg_fill(ctx); + //vkvg_paint(ctx); + vkvg_set_source_surface(ctx, imgSurf, 0, 0); + //vkvg_rectangle(ctx,0,0,400,400); + //vkvg_fill(ctx); + vkvg_paint(ctx); + + /*vkvg_set_operator(ctx, VKVG_OPERATOR_CLEAR); + vkvg_paint(ctx); + vkvg_set_operator(ctx, VKVG_OPERATOR_OVER);*/ + /*vkvg_translate(ctx,200,200); vkvg_set_line_width(ctx,20.f); vkvg_set_source_rgba(ctx,1,0,0,1); @@ -23,7 +38,7 @@ void test(){ vkvg_set_source_rgba(ctx,0.2,0.3,0.8,1); vkvg_stroke(ctx);*/ - +/* //vkvg_translate(ctx,200,200); vkvg_rotate(ctx,0.1f); @@ -36,7 +51,7 @@ void test(){ vkvg_rectangle(ctx,100,100,200,200); vkvg_stroke(ctx); //vkvg_paint(ctx); - +*/ vkvg_surface_destroy(imgSurf); vkvg_destroy(ctx); diff --git a/tests/line_join_2.c b/tests/line_join_2.c index fb5f126..3c736fd 100644 --- a/tests/line_join_2.c +++ b/tests/line_join_2.c @@ -6,13 +6,13 @@ void test(){ //vkvg_set_fill_rule(ctx, VKVG_FILL_RULE); vkvg_set_line_width(ctx, 30); - //vkvg_set_line_join(ctx, VKVG_LINE_JOIN_ROUND); + vkvg_set_line_join(ctx, VKVG_LINE_JOIN_ROUND); //vkvg_arc (ctx, 200, 500, 100, 0, M_PI); vkvg_translate(ctx,-50,-50); - vkvg_set_source_rgba (ctx, 0.5,0,0,1); + vkvg_set_source_rgba (ctx, 0.2f,0.2f,1.0f,1); for (int j=0;j<2;j++) { int i=0; diff --git a/tests/rect_fill.c b/tests/rect_fill.c index 017a371..1cb347c 100644 --- a/tests/rect_fill.c +++ b/tests/rect_fill.c @@ -7,10 +7,13 @@ void test(){ //vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); + vkvg_rotate(ctx,0.1f); + vkvg_set_source_rgba(ctx,0,0,1,0.5); vkvg_rectangle(ctx,100,100,200,200); vkvg_fill(ctx); + vkvg_set_source_rgba(ctx,1,0,0,0.5); vkvg_rectangle(ctx,200,200,200,200); vkvg_fill(ctx); @@ -19,6 +22,7 @@ void test(){ vkvg_rectangle(ctx,500,500,200,200); vkvg_fill(ctx); + vkvg_destroy(ctx); } diff --git a/tests/svg.c b/tests/svg.c index 36df00c..3e3428b 100644 --- a/tests/svg.c +++ b/tests/svg.c @@ -36,7 +36,7 @@ void test_nsvg() { NSVGimage* svg = nsvg_load_file(device, path); VkvgContext ctx = vkvg_create(surf); - vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); + //vkvg_set_fill_rule(ctx, VKVG_FILL_RULE_EVEN_ODD); vkvg_set_source_rgba(ctx,0.9f,1.0,1.0,1); vkvg_paint(ctx); diff --git a/vkh b/vkh index 1e7702d..325e0d2 160000 --- a/vkh +++ b/vkh @@ -1 +1 @@ -Subproject commit 1e7702d2b18dbe7c777bb8f3bdef60720fb24028 +Subproject commit 325e0d25c28363ca0ee0693055ff785b9fb500fe -- 2.47.3