diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2026-10-19 14:50:48 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2026-10-19 14:50:48 +0200 |
| commit | 52f88915e975484122ffc4039c7b28cd86f88929 (patch) | |
| tree | cda5deef225ed62162659bc61e9f5599e9b40612 | |
| parent | 084853e03591fcc81284c4fe8ca5e91a2fc27875 (diff) | |
source desc set in pattern, grad buffer and desc set in surface, split img and sampler for source, debug, wip
| -rw-r--r-- | shaders/vkvg_main.frag | 9 | ||||
| -rw-r--r-- | src/shaders.h | 1241 | ||||
| -rw-r--r-- | src/vkvg_context.c | 23 | ||||
| -rw-r--r-- | src/vkvg_context_internal.c | 166 | ||||
| -rw-r--r-- | src/vkvg_context_internal.h | 1 | ||||
| -rw-r--r-- | src/vkvg_device_internal.c | 40 | ||||
| -rw-r--r-- | src/vkvg_device_internal.h | 2 | ||||
| -rw-r--r-- | src/vkvg_pattern.c | 119 | ||||
| -rw-r--r-- | src/vkvg_pattern.h | 9 | ||||
| -rw-r--r-- | src/vkvg_surface.c | 25 | ||||
| -rw-r--r-- | src/vkvg_surface_internal.c | 73 | ||||
| -rw-r--r-- | src/vkvg_surface_internal.h | 30 | ||||
| -rw-r--r-- | tests/gradient.c | 27 | ||||
| -rw-r--r-- | tests/img_surf.c | 14 |
14 files changed, 889 insertions, 890 deletions
diff --git a/shaders/vkvg_main.frag b/shaders/vkvg_main.frag index 24a6afb..090a35c 100644 --- a/shaders/vkvg_main.frag +++ b/shaders/vkvg_main.frag @@ -9,8 +9,9 @@ #extension GL_EXT_scalar_block_layout : enable #endif -layout (set=0, binding = 0) uniform sampler2DArray fontMap; -layout (set=1, binding = 0) uniform sampler2D source; +layout (set=0, binding = 0) uniform sampler2DArray fontMap; +layout (set=1, binding = 0) uniform texture2D source; +layout (set=1, binding = 1) uniform sampler sourceSampler; #if defined(GL_EXT_scalar_block_layout) && defined(VKVG_ENABLE_VK_SCALAR_BLOCK_LAYOUT) layout (scalar, set=2, binding = 0) uniform _uboGrad { vec4 colors[16]; @@ -54,13 +55,13 @@ void main() 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][0] * p.x + inMat[1][0] * p.y + inMat[2][0], inMat[0][1] * p.x + inMat[1][1] * p.y + inMat[2][1] ); uv /= inSrc.zw; /*if (uv.x < 0 || uv.y < 0 || uv.x > 1 || uv.y > 1) discard;*/ - c = texture (source, uv); + c = texture(sampler2D(source, sourceSampler), uv); break; case LINEAR: float dist = 1; diff --git a/src/shaders.h b/src/shaders.h index ec5f278..cce09a1 100644 --- a/src/shaders.h +++ b/src/shaders.h @@ -518,15 +518,15 @@ unsigned char shader2_comp_spv[] = { unsigned int shader2_comp_spv_len = 2556; unsigned char vkvg_main_frag_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x0d, 0x00, - 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, + 0x9d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, - 0x95, 0x01, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, + 0x9a, 0x01, 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, @@ -554,50 +554,52 @@ unsigned char vkvg_main_frag_spv[] = { 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x21, 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, 0x04, 0x00, 0x53, 0x00, 0x00, 0x00, 0x64, 0x69, 0x73, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x70, 0x30, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x00, 0x00, + 0x05, 0x00, 0x06, 0x00, 0x51, 0x00, 0x00, 0x00, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x64, 0x69, 0x73, 0x74, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x70, 0x30, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5f, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70, - 0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x73, 0x74, 0x6f, 0x70, + 0x73, 0x00, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x63, 0x70, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, 0x75, 0x62, 0x6f, 0x47, 0x72, 0x61, 0x64, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x70, 0x31, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x76, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x9f, 0x00, 0x00, 0x00, 0x62, 0x62, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0xcd, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x63, 0x30, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0xfa, 0x00, 0x00, 0x00, 0x63, 0x31, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x72, 0x31, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, - 0x0d, 0x01, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x01, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x70, 0x31, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x76, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x9d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0xa4, 0x00, 0x00, 0x00, 0x62, 0x62, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0xd2, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x63, 0x30, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x63, 0x31, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x06, 0x01, 0x00, 0x00, 0x72, 0x30, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, + 0x0c, 0x01, 0x00, 0x00, 0x72, 0x31, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, + 0x12, 0x01, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x13, 0x01, 0x00, 0x00, 0x64, 0x69, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x12, 0x01, 0x00, 0x00, 0x72, 0x61, 0x79, 0x44, 0x69, 0x72, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x17, 0x01, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x21, 0x01, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x29, 0x01, 0x00, 0x00, 0x64, 0x69, 0x73, 0x63, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x37, 0x01, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x41, 0x01, 0x00, 0x00, + 0x17, 0x01, 0x00, 0x00, 0x72, 0x61, 0x79, 0x44, 0x69, 0x72, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x20, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x03, 0x00, 0x26, 0x01, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x2e, 0x01, 0x00, 0x00, 0x64, 0x69, 0x73, 0x63, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x3c, 0x01, 0x00, 0x00, + 0x74, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x46, 0x01, 0x00, 0x00, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x60, 0x01, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x80, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x51, 0x01, 0x00, 0x00, 0x67, 0x72, 0x61, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x65, 0x01, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x85, 0x01, 0x00, 0x00, 0x69, 0x6e, 0x46, 0x6f, 0x6e, 0x74, 0x55, 0x56, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x89, 0x01, 0x00, 0x00, 0x66, 0x6f, 0x6e, 0x74, - 0x4d, 0x61, 0x70, 0x00, 0x05, 0x00, 0x05, 0x00, 0x90, 0x01, 0x00, 0x00, + 0x05, 0x00, 0x04, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x66, 0x6f, 0x6e, 0x74, + 0x4d, 0x61, 0x70, 0x00, 0x05, 0x00, 0x05, 0x00, 0x95, 0x01, 0x00, 0x00, 0x69, 0x6e, 0x4f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x06, 0x00, 0x95, 0x01, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, + 0x05, 0x00, 0x06, 0x00, 0x9a, 0x01, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x05, 0x00, 0x97, 0x01, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, + 0x05, 0x00, 0x05, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, @@ -605,109 +607,115 @@ unsigned char vkvg_main_frag_spv[] = { 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x48, 0x00, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x5b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x60, 0x01, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x80, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x89, 0x01, 0x00, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x89, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x03, 0x00, 0x90, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x04, 0x00, 0x90, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x95, 0x01, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x97, 0x01, 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, 0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x15, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, - 0x4b, 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, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x56, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, - 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x5c, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x51, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x85, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x8e, 0x01, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, + 0x95, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x95, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x47, 0x00, 0x04, 0x00, 0x9a, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x9c, 0x01, 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, + 0x20, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x4b, 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, 0x20, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x02, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x4b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, + 0x23, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc3, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xd6, 0x00, 0x00, 0x00, + 0xd1, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, - 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x40, 0x17, 0x00, 0x04, 0x00, 0x7e, 0x01, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x2b, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x40, 0x17, 0x00, 0x04, 0x00, 0x83, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, - 0x7f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x86, 0x01, 0x00, 0x00, + 0x84, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x84, 0x01, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x8b, 0x01, 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, 0x1b, 0x00, 0x03, 0x00, 0x87, 0x01, 0x00, 0x00, - 0x86, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x88, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x88, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x94, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x8c, 0x01, 0x00, 0x00, + 0x8b, 0x01, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x8d, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x8d, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x25, 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x99, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x94, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, + 0x99, 0x01, 0x00, 0x00, 0x9a, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x9c, 0x01, 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, @@ -715,36 +723,36 @@ unsigned char vkvg_main_frag_spv[] = { 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, + 0x9d, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0xd1, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x16, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x16, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, + 0x0c, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x12, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, + 0x17, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x21, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x41, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3b, 0x00, 0x04, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, + 0x46, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, @@ -819,504 +827,507 @@ unsigned char vkvg_main_frag_spv[] = { 0x49, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1e, 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, - 0x15, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x4b, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x4f, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, + 0x56, 0x00, 0x05, 0x00, 0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, + 0x4e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x57, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x5f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, + 0x64, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x55, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x69, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x6b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x69, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x6b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x73, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x74, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x75, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x77, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x45, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x76, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x73, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x75, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x81, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x7f, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, - 0x82, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0xf7, 0x00, 0x03, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0x84, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x85, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x86, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x85, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, + 0x87, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x83, 0x00, 0x00, 0x00, + 0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, + 0xf7, 0x00, 0x03, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x04, 0x00, 0x89, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8a, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x8f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x94, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, - 0x71, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x96, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x86, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x81, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x28, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, + 0x8d, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, + 0x76, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x93, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x58, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x95, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x97, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x97, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x99, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, + 0x76, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x58, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x8b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x9a, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0x76, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, - 0x9b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x28, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, + 0x9f, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, + 0x7b, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, + 0xa0, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x9d, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa1, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, - 0x55, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, - 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, - 0xa2, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, - 0xa5, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9f, 0x00, 0x00, 0x00, - 0xa6, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, - 0xa7, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xa9, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x28, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0xa6, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, + 0xa7, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, + 0xaa, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xab, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x00, + 0xac, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, + 0xac, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xae, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, - 0xab, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xad, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, - 0x9f, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xb1, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, - 0xb1, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xb3, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, - 0xb5, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x53, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x28, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0xb0, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, + 0xb0, 0x00, 0x00, 0x00, 0x83, 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, + 0xa4, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, + 0x9d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xb6, 0x00, 0x00, 0x00, 0x9d, 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, 0x59, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, + 0xba, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x58, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x28, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xb9, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, - 0x7d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xbc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xba, 0x00, 0x00, 0x00, - 0xbb, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xbb, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xbd, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x53, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xbc, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x81, 0x00, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x81, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xbe, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, + 0x83, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, + 0x82, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xc1, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xbf, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xc2, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x58, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xc1, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x63, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, - 0xc1, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0xc4, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, + 0xc6, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0xc9, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xc5, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xca, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0xc8, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0x53, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xc9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0xc5, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, - 0xc9, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, - 0xc9, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xcb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xce, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xce, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0xd0, 0x00, 0x00, 0x00, - 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xd2, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd2, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, - 0xcd, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0xd4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0xd6, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0xd5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0xd8, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, - 0x23, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, - 0x2f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0xda, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0xda, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcf, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xce, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0xca, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, + 0xce, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, + 0xce, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xd0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0xc5, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xd3, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0xd5, 0x00, 0x00, 0x00, + 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0xd7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd7, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, + 0xd2, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xd9, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0xdb, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, + 0xdd, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, + 0x23, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, 0x83, 0x00, 0x00, 0x00, + 0xdf, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x04, 0x00, 0xdf, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, + 0xd5, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd4, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xdc, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, - 0xde, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, - 0xdd, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xdf, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, - 0xe1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xe3, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0xe5, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0xe4, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0xe6, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, - 0xe6, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, - 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, - 0xdf, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xd1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd1, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, - 0xcd, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0xec, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xcd, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0xce, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0xd0, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, + 0xe1, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, + 0xe3, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, + 0xe2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0xe4, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, + 0xe6, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xe8, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0xea, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0xe9, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0xeb, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, + 0xeb, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, + 0xed, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0xe4, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0xd6, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd6, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0xd2, 0x00, 0x00, 0x00, 0x80, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0xf1, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0xd2, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0xd5, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, - 0xee, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, + 0xf3, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, - 0xef, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x17, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, + 0x15, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, + 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, + 0xf4, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x17, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x63, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, - 0xf5, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, - 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, - 0xf6, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, + 0x15, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0xfb, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, - 0xfc, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, - 0x15, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0xfd, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0xfa, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, - 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, - 0x04, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x06, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x01, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, - 0x41, 0x00, 0x07, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x09, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x03, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, + 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x41, 0x00, 0x07, 0x00, + 0xc8, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, + 0x07, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x09, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, + 0x09, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x0b, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00, + 0x41, 0x00, 0x07, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x5e, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x0e, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0x25, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x0b, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, - 0x0b, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x07, 0x01, 0x00, 0x00, - 0x0c, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x01, 0x00, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x0f, 0x01, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, - 0x0f, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x0e, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x15, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, - 0x0c, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x12, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, - 0x12, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x19, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, - 0x19, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x17, 0x01, 0x00, 0x00, - 0x1a, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x1d, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, - 0x94, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, - 0x1d, 0x01, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, - 0x1f, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1b, 0x01, 0x00, 0x00, - 0x20, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x22, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, + 0x10, 0x01, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, + 0x10, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0c, 0x01, 0x00, 0x00, + 0x11, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x01, 0x00, 0x00, + 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x14, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, + 0x14, 0x01, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x13, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x1a, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, + 0x0c, 0x00, 0x06, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x17, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00, + 0x17, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x1e, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00, + 0x1e, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1c, 0x01, 0x00, 0x00, + 0x1f, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x22, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, - 0x22, 0x01, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, - 0x07, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x27, 0x01, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x21, 0x01, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, + 0x22, 0x01, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x20, 0x01, 0x00, 0x00, + 0x25, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x27, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, + 0x94, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, + 0x27, 0x01, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, - 0x1b, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x0c, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, - 0x17, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x2f, 0x01, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, + 0x29, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x26, 0x01, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, - 0x21, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x20, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, - 0x2c, 0x01, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x29, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, - 0xbe, 0x00, 0x05, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, - 0x33, 0x01, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, - 0x36, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, - 0x34, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x35, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, - 0x7f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, - 0x38, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x3a, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, - 0x3c, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x3e, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, - 0x3e, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x40, 0x01, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x37, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x43, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, - 0x43, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, - 0x45, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x41, 0x01, 0x00, 0x00, - 0x46, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x47, 0x01, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, - 0x48, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x4a, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, - 0x4a, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x01, 0x00, 0x00, - 0x4b, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x36, 0x01, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x36, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x15, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, - 0xf3, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x4f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, - 0x4d, 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, - 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, - 0x4f, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, - 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, - 0x51, 0x01, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x4c, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, + 0x1c, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x36, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, + 0x31, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x2e, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, + 0xbe, 0x00, 0x05, 0x00, 0x83, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, + 0x38, 0x01, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, + 0x3b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, + 0x39, 0x01, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, + 0x7f, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, + 0x3d, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x3f, 0x01, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, + 0x41, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x43, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x43, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x45, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x48, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, + 0x8e, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x00, + 0x48, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, + 0x4a, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x46, 0x01, 0x00, 0x00, + 0x4b, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x4c, 0x01, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x4f, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, + 0x4f, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x12, 0x01, 0x00, 0x00, + 0x50, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x3b, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x15, 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x54, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x52, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, + 0x83, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, + 0x54, 0x01, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, + 0x56, 0x01, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x51, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0x63, 0x00, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, - 0x56, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0x58, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, + 0x5b, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0x5d, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x59, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x5e, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, + 0xc8, 0x00, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, - 0x4c, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x5d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x59, 0x01, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, - 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x00, - 0x5d, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, - 0x5d, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x5f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0x55, 0x01, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x60, 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0xf9, 0x00, 0x02, 0x00, 0x61, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x61, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0x63, 0x01, 0x00, 0x00, - 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x65, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x65, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00, - 0x60, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x67, 0x01, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0xd6, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, - 0xd5, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, - 0x69, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, - 0x69, 0x01, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x6a, 0x01, 0x00, 0x00, - 0x62, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, - 0x62, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x6b, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, - 0x6d, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x6f, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00, - 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, - 0x71, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, - 0x70, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x72, 0x01, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, - 0x5d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, - 0x74, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x76, 0x01, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, - 0x76, 0x01, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x78, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, - 0x77, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, - 0x78, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x79, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x64, 0x01, 0x00, 0x00, - 0xf8, 0x00, 0x02, 0x00, 0x64, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, - 0x80, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x00, - 0x7a, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x60, 0x01, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x61, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x63, 0x01, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, + 0x51, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x62, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x5e, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, + 0x62, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, + 0x62, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x64, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0x5a, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, + 0x3e, 0x00, 0x03, 0x00, 0x65, 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x66, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x66, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x04, 0x00, 0x68, 0x01, 0x00, 0x00, + 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x6a, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6a, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, + 0x65, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x6c, 0x01, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, + 0xdb, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0xda, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x6e, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0xb0, 0x00, 0x05, 0x00, + 0x83, 0x00, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, + 0x6e, 0x01, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x6f, 0x01, 0x00, 0x00, + 0x67, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x67, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x70, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0x63, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, + 0x72, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x74, 0x01, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, + 0x76, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x75, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x77, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, + 0x41, 0x00, 0x06, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, + 0x79, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x7b, 0x01, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, + 0x7b, 0x01, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x7d, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, + 0x7c, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, + 0x7d, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x7e, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x69, 0x01, 0x00, 0x00, + 0xf8, 0x00, 0x02, 0x00, 0x69, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x05, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, + 0x7f, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x65, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x66, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x68, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x14, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, - 0x81, 0x01, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00, 0x7e, 0x00, 0x00, 0x00, - 0x83, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0xf7, 0x00, 0x03, 0x00, 0x85, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfa, 0x00, 0x04, 0x00, 0x83, 0x01, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, - 0x85, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x84, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x87, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, - 0x89, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x7e, 0x01, 0x00, 0x00, - 0x8b, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, - 0x8b, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, - 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, - 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, - 0x8e, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0x85, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x85, 0x01, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x91, 0x01, 0x00, 0x00, - 0x90, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x92, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, - 0x91, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x93, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x96, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, - 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, + 0x86, 0x01, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, + 0x86, 0x01, 0x00, 0x00, 0xbe, 0x00, 0x05, 0x00, 0x83, 0x00, 0x00, 0x00, + 0x88, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, + 0xf7, 0x00, 0x03, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfa, 0x00, 0x04, 0x00, 0x88, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, + 0x8a, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x89, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, + 0x8e, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x83, 0x01, 0x00, 0x00, + 0x90, 0x01, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x58, 0x00, 0x07, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x91, 0x01, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, + 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, + 0x51, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, + 0x91, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x8e, 0x00, 0x05, 0x00, 0x07, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, + 0x93, 0x01, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x8a, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, + 0x95, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x97, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, + 0x96, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x98, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x9b, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, + 0x9a, 0x01, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00 }; -unsigned int vkvg_main_frag_spv_len = 9568; +unsigned int vkvg_main_frag_spv_len = 9700; unsigned char vkvg_main_vert_spv[] = { 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, diff --git a/src/vkvg_context.c b/src/vkvg_context.c index 3445693..9d0ad2c 100644 --- a/src/vkvg_context.c +++ b/src/vkvg_context.c @@ -146,12 +146,7 @@ VkvgContext vkvg_create(VkvgSurface surf) { #endif _create_vertices_buff(ctx); - _create_gradient_buff(ctx); _create_cmd_buff(ctx); - //_createDescriptorPool(ctx); - //_init_descriptor_sets(ctx); - //_font_cache_update_context_descset(ctx); - //_update_gradient_desc_set(ctx); _clear_path(ctx); @@ -171,9 +166,6 @@ VkvgContext vkvg_create(VkvgSurface surf) { #ifndef VKVG_ENABLE_VK_TIMELINE_SEMAPHORE vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_FENCE, (uint64_t)ctx->flushFence, "CTX Flush Fence"); #endif - //vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)ctx->dsSrc, "CTX DescSet SOURCE"); - //vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)ctx->dsGrad, "CTX DescSet GRADIENT"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_BUFFER, (uint64_t)ctx->indices.buffer, "CTX Index Buff"); vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_BUFFER, (uint64_t)ctx->vertices.buffer, "CTX Vertex Buff"); #endif @@ -1059,18 +1051,11 @@ void vkvg_set_source_surface(VkvgContext ctx, VkvgSurface surf, float x, float y if (vkvg_status(ctx) || vkvg_surface_status(surf)) return; RECORD(ctx, VKVG_CMD_SET_SOURCE_SURFACE, x, y, surf); - ctx->pushConsts.source = (vec4) { x, y, (float)surf->width, (float)surf->height }; - ctx->pushConsts.fsq_patternType = (ctx->pushConsts.fsq_patternType & FULLSCREEN_BIT) + VKVG_PATTERN_TYPE_SURFACE; - ctx->pushCstDirty = true; - - _ensure_renderpass_is_started(ctx); - /*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);*/ + ctx->pushConsts.source.x = x; + ctx->pushConsts.source.y = y; - CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->dev->pipelineLayout, - 1, 1, &surf->dsSrc, 0, NULL); - //vkvg_surface_reference(surf); + VkvgPattern pat = vkvg_pattern_create_for_surface(surf); + _update_cur_pattern(ctx, pat); } void vkvg_set_source(VkvgContext ctx, VkvgPattern pat) { if (vkvg_status(ctx) || vkvg_pattern_status(pat)) diff --git a/src/vkvg_context_internal.c b/src/vkvg_context_internal.c index d9d9c75..bab2a0b 100644 --- a/src/vkvg_context_internal.c +++ b/src/vkvg_context_internal.c @@ -249,10 +249,6 @@ float _get_arc_step(VkvgContext ctx, float radius) { return fminf(M_PIF / 3.f, M_PIF / r); return fminf(M_PIF / 3.f, M_PIF / (r * 0.4f)); } -void _create_gradient_buff(VkvgContext ctx) { - vkh_buffer_init((VkhDevice)&ctx->dev->vkDev, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VKH_MEMORY_USAGE_CPU_TO_GPU, - sizeof(vkvg_gradient_t), &ctx->uboGrad, true); -} void _create_vertices_buff(VkvgContext ctx) { vkh_buffer_init((VkhDevice)&ctx->dev->vkDev, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VKH_MEMORY_USAGE_CPU_TO_GPU, ctx->sizeVBO * sizeof(Vertex), &ctx->vertices, true); @@ -692,76 +688,40 @@ void _update_cur_pattern(VkvgContext ctx, VkvgPattern pat) { } else newPatternType = pat->type; + if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE) { + //if lastpat has only one ref, descriptorSet would be destroyed, so flush context + if (vkvg_pattern_get_reference_count(lastPat) == 1) + vkvg_flush(ctx); + } + ctx->pattern = pat; switch (newPatternType) { case VKVG_PATTERN_TYPE_SOLID: { - //_flush_cmd_buff(ctx); - //if (!_wait_ctx_flush_end(ctx)) - // return; - VkDescriptorSet dss[] = {ctx->dev->dummySrcSet, ctx->dev->dummyGradSet}; - CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, - ctx->dev->pipelineLayout, 1, 2, dss, 0, NULL); - + if (ctx->cmdStarted && lastPat) { + switch (lastPat->type) { + case VKVG_PATTERN_TYPE_SURFACE: + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, + ctx->dev->pipelineLayout, 1, 1, &ctx->dev->dummySrcSet, 0, NULL); + break; + case VKVG_PATTERN_TYPE_LINEAR: + case VKVG_PATTERN_TYPE_RADIAL: + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, + ctx->dev->pipelineLayout, 2, 1, &ctx->dev->dummyGradSet, 0, NULL); + break; + } + } break; } -/* case VKVG_PATTERN_TYPE_SURFACE: { - _emit_draw_cmd_undrawn_vertices(ctx); - - VkvgSurface surf = (VkvgSurface)pat->data; - - // 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. - _end_render_pass(ctx); - _flush_vertices_caches(ctx); - } else { - vkh_cmd_begin(ctx->cmd, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); - ctx->cmdStarted = true; - } + case VKVG_PATTERN_TYPE_SURFACE: { + surface_pattern_t* sp = (surface_pattern_t*)pat; + ctx->pushConsts.source.width = (float)sp->surf->width; + ctx->pushConsts.source.height = (float)sp->surf->height; - // 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); - if (!_wait_ctx_flush_end(ctx)) - return; - - VkSamplerAddressMode addrMode = 0; - 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; - default: - filter = VK_FILTER_NEAREST; - break; - } - vkh_image_create_sampler(surf->img, filter, filter, VK_SAMPLER_MIPMAP_MODE_NEAREST, addrMode); - - //_update_descriptor_set(ctx, surf->img, ctx->dsSrc); - - ctx->pushConsts.source.width = (float)surf->width; - ctx->pushConsts.source.height = (float)surf->height; + _ensure_renderpass_is_started(ctx); + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->dev->pipelineLayout, + 1, 1, &sp->dsSource, 0, NULL); vkvg_matrix_t mat; if (pat->hasMatrix) { vkvg_pattern_get_matrix(pat, &mat); @@ -771,18 +731,14 @@ void _update_cur_pattern(VkvgContext ctx, VkvgPattern pat) { // vkvg_matrix_transform_distance(&mat, &ctx->pushConsts.source.width, &ctx->pushConsts.source.height); vkvg_matrix_multiply(&ctx->pushConsts.matInv, &ctx->pushConsts.matInv, &mat); } - break; - }*/ + } case VKVG_PATTERN_TYPE_LINEAR: case VKVG_PATTERN_TYPE_RADIAL: _flush_cmd_buff(ctx); if (!_wait_ctx_flush_end(ctx)) return; - /*if (lastPat && lastPat->type == VKVG_PATTERN_TYPE_SURFACE) - _update_descriptor_set(ctx, ctx->dev->emptyImg, ctx->dsSrc);*/ - vec4 bounds = {{(float)ctx->pSurf->width}, {(float)ctx->pSurf->height}, {0}, @@ -800,8 +756,6 @@ void _update_cur_pattern(VkvgContext ctx, VkvgPattern pat) { vkvg_matrix_t mat; if (pat->hasMatrix) { vkvg_pattern_get_matrix(pat, &mat); - /*if (vkvg_matrix_invert(&mat) != VKVG_STATUS_SUCCESS) - mat = VKVG_IDENTITY_MATRIX;*/ vkvg_matrix_transform_point(&mat, &grad->cp[0].x, &grad->cp[0].y); } @@ -824,8 +778,12 @@ void _update_cur_pattern(VkvgContext ctx, VkvgPattern pat) { vkvg_matrix_transform_distance(&ctx->pushConsts.mat, &grad->cp[1].z, &grad->cp[0].w); } - memcpy(vkh_buffer_get_mapped_pointer(&ctx->uboGrad), &grad, sizeof(vkvg_gradient_t)); - vkh_buffer_flush(&ctx->uboGrad); + memcpy(vkh_buffer_get_mapped_pointer(&ctx->pSurf->uboGrad), grad, sizeof(vkvg_gradient_t)); + vkh_buffer_flush(&ctx->pSurf->uboGrad); + + _ensure_renderpass_is_started(ctx); + CmdBindDescriptorSets(ctx->cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ctx->dev->pipelineLayout, + 2, 1, &ctx->pSurf->dsGradient, 0, NULL); break; } ctx->pushConsts.fsq_patternType = (ctx->pushConsts.fsq_patternType & FULLSCREEN_BIT) + newPatternType; @@ -833,63 +791,6 @@ void _update_cur_pattern(VkvgContext ctx, VkvgPattern pat) { if (lastPat) vkvg_pattern_destroy(lastPat); } -/*void _update_descriptor_set(VkvgContext ctx, VkhImage img, VkDescriptorSet ds) { - VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor(img, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); - VkWriteDescriptorSet writeDescriptorSet = {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = ds, - .dstBinding = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &descSrcTex}; - vkUpdateDescriptorSets(ctx->dev->vkDev, 1, &writeDescriptorSet, 0, NULL); -}*/ - -/*void _update_gradient_desc_set(VkvgContext ctx) { - VkDescriptorBufferInfo dbi = {ctx->uboGrad.buffer, 0, VK_WHOLE_SIZE}; - VkWriteDescriptorSet writeDescriptorSet = {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = ctx->dsGrad, - .dstBinding = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, - .pBufferInfo = &dbi}; - vkUpdateDescriptorSets(ctx->dev->vkDev, 1, &writeDescriptorSet, 0, NULL); -}*/ -/* - * Reset currently bound descriptor which image could be destroyed - */ -/*void _reset_src_descriptor_set (VkvgContext ctx){ - VkvgDevice dev = ctx->pSurf->dev; - //VkDescriptorSet dss[] = {ctx->dsSrc}; - vkFreeDescriptorSets (dev->vkDev, ctx->descriptorPool, 1, &ctx->dsSrc); - - VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .descriptorPool = ctx->descriptorPool, - .descriptorSetCount = 1, - .pSetLayouts = &dev->dslSrc }; - VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsSrc)); -}*/ - -/*void _createDescriptorPool(VkvgContext ctx) { - VkvgDevice dev = ctx->dev; - const VkDescriptorPoolSize descriptorPoolSize[] = {{VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2}, - {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1}}; - VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .maxSets = 3, - .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, - .poolSizeCount = 2, - .pPoolSizes = descriptorPoolSize}; - VK_CHECK_RESULT(vkCreateDescriptorPool(dev->vkDev, &descriptorPoolCreateInfo, NULL, &ctx->descriptorPool)); -}*/ -/*void _init_descriptor_sets(VkvgContext ctx) { - VkvgDevice dev = ctx->dev; - VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .descriptorPool = ctx->descriptorPool, - .descriptorSetCount = 1, - .pSetLayouts = &dev->dslSrc}; - VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsSrc)); - descriptorSetAllocateInfo.pSetLayouts = &dev->dslGrad; - VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &ctx->dsGrad)); -}*/ void _release_context_ressources(VkvgContext ctx) { VkDevice dev = ctx->dev->vkDev; @@ -903,7 +804,6 @@ void _release_context_ressources(VkvgContext ctx) { // VkDescriptorSet dss[] = {ctx->dsFont, ctx->dsSrc, ctx->dsGrad}; // vkFreeDescriptorSets(dev, ctx->descriptorPool, 3, dss); - vkh_buffer_reset(&ctx->uboGrad); vkh_buffer_reset(&ctx->indices); vkh_buffer_reset(&ctx->vertices); diff --git a/src/vkvg_context_internal.h b/src/vkvg_context_internal.h index 920590a..c22f4bd 100644 --- a/src/vkvg_context_internal.h +++ b/src/vkvg_context_internal.h @@ -175,7 +175,6 @@ typedef struct _vkvg_context_t { //VkhImage fontCacheImg; // current font cache, may not be the last one, updated only if new glyphs are uploaded by the current context // vk buffers, holds data until flush - vkh_buffer_t uboGrad; // uniform buff obj holdings gradient infos vkh_buffer_t indices; // index buffer with persistent map memory vkh_buffer_t vertices; // vertex buffer with persistent mapped memory diff --git a/src/vkvg_device_internal.c b/src/vkvg_device_internal.c index 78fdcea..1fdffdd 100644 --- a/src/vkvg_device_internal.c +++ b/src/vkvg_device_internal.c @@ -86,26 +86,34 @@ void _device_createDescriptorSetLayout(VkvgDevice dev) { vkCreateSampler(dev->vkDev, &samplerInfo, NULL, &dev->smpFont); VkDescriptorBindingFlags bindingFlags[] = { - VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT // Allows empty/unbound slots in this binding + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, // Allows empty/unbound slots in this binding + VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT }; VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlagsInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, - .bindingCount = 1, + .bindingCount = 2, .pBindingFlags = bindingFlags }; - - VkDescriptorSetLayoutBinding dsLayoutBinding = {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, - VK_SHADER_STAGE_FRAGMENT_BIT, &dev->smpFont}; + VkDescriptorSetLayoutBinding dsLayoutBinding[] = { + {0, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1, VK_SHADER_STAGE_FRAGMENT_BIT, NULL}, + {1, VK_DESCRIPTOR_TYPE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT, NULL} + }; VkDescriptorSetLayoutCreateInfo dsLayoutCreateInfo = { .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, .pNext = &bindingFlagsInfo, - .bindingCount = 1, - .pBindings = &dsLayoutBinding + .bindingCount = 2, + .pBindings = dsLayoutBinding }; - VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslFont)); - dsLayoutBinding.pImmutableSamplers = NULL; VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslSrc)); - dsLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + + bindingFlagsInfo.bindingCount = 1; + dsLayoutCreateInfo.bindingCount = 1; + dsLayoutBinding[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; + dsLayoutBinding[0].pImmutableSamplers = &dev->smpFont; + VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslFont)); + + dsLayoutBinding[0].pImmutableSamplers = NULL; + dsLayoutBinding[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; VK_CHECK_RESULT(vkCreateDescriptorSetLayout(dev->vkDev, &dsLayoutCreateInfo, NULL, &dev->dslGrad)); VkPushConstantRange pushConstantRange[] = { @@ -114,12 +122,12 @@ void _device_createDescriptorSetLayout(VkvgDevice dev) { }; 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}; + VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = { + .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, + .pushConstantRangeCount = 1, + .pPushConstantRanges = (VkPushConstantRange*)&pushConstantRange, + .setLayoutCount = 3, + .pSetLayouts = dsls}; VK_CHECK_RESULT(vkCreatePipelineLayout(dev->vkDev, &pipelineLayoutCreateInfo, NULL, &dev->pipelineLayout)); } void _device_allocalte_dummy_descriptors (VkvgDevice dev) { diff --git a/src/vkvg_device_internal.h b/src/vkvg_device_internal.h index 43adc3b..0ea8a5b 100644 --- a/src/vkvg_device_internal.h +++ b/src/vkvg_device_internal.h @@ -64,7 +64,6 @@ CTOR_ARRAY(SurfaceClass) ARRAY_DEL_ELT(SurfaceClass) typedef struct _vkvg_device_t { - vkvg_status_t status; /**< Current status of device, affected by last operation */ VkDevice vkDev; /**< Vulkan Logical Device */ VkPhysicalDeviceMemoryProperties phyMemProps; /**< Vulkan Physical device memory properties */ VkPhysicalDevice phy; /**< Vulkan Physical device */ @@ -72,6 +71,7 @@ typedef struct _vkvg_device_t { #ifdef VKH_USE_VMA void* allocator; /**< Vulkan Memory allocator */ #endif + vkvg_status_t status; /**< Current status of device, affected by last operation */ VkImageTiling supportedTiling; /**< Supported image tiling for surface, 0xFF=no support */ VkFormat stencilFormat; /**< Supported vulkan image format for stencil */ diff --git a/src/vkvg_pattern.c b/src/vkvg_pattern.c index a2a28d4..d1ea604 100644 --- a/src/vkvg_pattern.c +++ b/src/vkvg_pattern.c @@ -2,6 +2,95 @@ // // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) #include "vkvg_pattern.h" +#include "vkvg_device_internal.h" +#include "vkvg_surface_internal.h" + +void _update_descriptor (surface_pattern_t* pat) { + VkDescriptorImageInfo diiImg = vkh_image_get_descriptor(pat->surf->img, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); + VkDescriptorImageInfo diiSampler = {pat->sampler}; + VkWriteDescriptorSet writeDescriptorSet[] = { + { + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstSet = pat->dsSource, + .dstBinding = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, + .pImageInfo = &diiImg + },{ + .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstSet = pat->dsSource, + .dstBinding = 1, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER, + .pImageInfo = &diiSampler + } + }; + vkUpdateDescriptorSets(pat->surf->dev->vkDev, 2, writeDescriptorSet, 0, NULL); +} + +void _surface_pattern_init (VkvgDevice dev, surface_pattern_t* pat) { + const VkDescriptorPoolSize descriptorPoolSize[] = { + {VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1}, + {VK_DESCRIPTOR_TYPE_SAMPLER, 1} + }; + VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, + .maxSets = 1, + .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, + .poolSizeCount = 2, + .pPoolSizes = descriptorPoolSize}; + VK_CHECK_RESULT(vkCreateDescriptorPool(dev->vkDev, &descriptorPoolCreateInfo, NULL, &pat->descPool)); + + VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, + .descriptorPool = pat->descPool, + .descriptorSetCount = 1, + .pSetLayouts = &dev->dslSrc}; + VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &pat->dsSource)); + +#if defined(DEBUG) && defined(VKVG_DBG_UTILS) + vkh_device_set_object_name((VkhDevice)dev, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)pat->descPool, + "Pattern Descriptor Pool"); + vkh_device_set_object_name((VkhDevice)dev, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)pat->dsSource, "Pattern DescSet"); +#endif +} +void _create_sampler(surface_pattern_t* pat) { + if (pat->sampler != VK_NULL_HANDLE) + vkDestroySampler(pat->surf->dev->vkDev, pat->sampler, NULL); + VkSamplerAddressMode addrMode = 0; + VkFilter filter = VK_FILTER_NEAREST; + switch (pat->base.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->base.filter) { + case VKVG_FILTER_BILINEAR: + case VKVG_FILTER_BEST: + filter = VK_FILTER_LINEAR; + break; + default: + filter = VK_FILTER_NEAREST; + break; + } + VkSamplerCreateInfo samplerCreateInfo = {.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, + .maxAnisotropy = 1.0, + .addressModeU = addrMode, + .addressModeV = addrMode, + .addressModeW = addrMode, + .magFilter = filter, + .minFilter = filter, + .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST}; + VK_CHECK_RESULT(vkCreateSampler(pat->surf->dev->vkDev, &samplerCreateInfo, NULL, &pat->sampler)); + pat->samplerIsDirty = false; +} VkvgPattern vkvg_pattern_create_solid(float r, float g, float b, float a) { VkvgPattern pat = (vkvg_pattern_t*)calloc(1, sizeof(vkvg_pattern_t)); @@ -10,15 +99,13 @@ VkvgPattern vkvg_pattern_create_solid(float r, float g, float b, float a) { } pat->type = VKVG_PATTERN_TYPE_SOLID; pat->extend = VKVG_EXTEND_NONE; + atomic_init(&pat->references, 1); return pat; } VkvgPattern vkvg_pattern_create_for_surface(VkvgSurface surf) { - if (!surf) { - return (VkvgPattern)&_vkvg_status_null_pointer; - } - vkvg_surface_pattern_t* pat = (vkvg_surface_pattern_t*)calloc(1, sizeof(vkvg_surface_pattern_t)); + surface_pattern_t* pat = (surface_pattern_t*)calloc(1, sizeof(surface_pattern_t)); if (!pat) { return (VkvgPattern)&_vkvg_status_no_memory; } @@ -26,11 +113,17 @@ VkvgPattern vkvg_pattern_create_for_surface(VkvgSurface surf) { pat->base.type = VKVG_PATTERN_TYPE_SURFACE; pat->base.extend = VKVG_EXTEND_NONE; pat->surf = surf; - atomic_init(&pat->base.references, 1); vkvg_surface_reference(surf); - if (vkvg_surface_status(surf)) + if (vkvg_surface_status(surf)) { pat->base.status = VKVG_STATUS_INVALID_SURFACE; + } else { + _surface_pattern_init(surf->dev, pat); + + _create_sampler(pat); + _update_descriptor(pat); + } + atomic_init(&pat->base.references, 1); return (VkvgPattern)pat; } @@ -57,6 +150,7 @@ VkvgPattern vkvg_pattern_create_radial(float cx0, float cy0, float radius0, floa pat->base.extend = VKVG_EXTEND_NONE; vkvg_pattern_edit_radial((VkvgPattern)pat, cx0, cy0, radius0, cx1, cy1, radius1); + atomic_init(&pat->base.references, 1); return (VkvgPattern)pat; @@ -148,14 +242,18 @@ vkvg_status_t vkvg_pattern_add_color_stop(VkvgPattern pat, float offset, float r return VKVG_STATUS_SUCCESS; } void vkvg_pattern_set_extend(VkvgPattern pat, vkvg_extend_t extend) { - if (vkvg_pattern_status(pat)) + if (vkvg_pattern_status(pat) || pat->extend == extend) return; pat->extend = extend; + if (pat->type == VKVG_PATTERN_TYPE_SURFACE) + ((surface_pattern_t*)pat)->samplerIsDirty = true; } void vkvg_pattern_set_filter(VkvgPattern pat, vkvg_filter_t filter) { - if (vkvg_pattern_status(pat)) + if (vkvg_pattern_status(pat) || pat->filter == filter) return; pat->filter = filter; + if (pat->type == VKVG_PATTERN_TYPE_SURFACE) + ((surface_pattern_t*)pat)->samplerIsDirty = true; } vkvg_extend_t vkvg_pattern_get_extend(VkvgPattern pat) { @@ -228,7 +326,10 @@ void vkvg_pattern_destroy(VkvgPattern pat) { return; if (pat->type == VKVG_PATTERN_TYPE_SURFACE) { - vkvg_surface_destroy(((vkvg_surface_pattern_t*)pat)->surf); + surface_pattern_t* sp = (surface_pattern_t*)pat; + vkDestroyDescriptorPool(sp->surf->dev->vkDev, sp->descPool, NULL); + vkDestroySampler(sp->surf->dev->vkDev, sp->sampler, NULL); + vkvg_surface_destroy(sp->surf); } free(pat); diff --git a/src/vkvg_pattern.h b/src/vkvg_pattern.h index eb89a7f..49bff1b 100644 --- a/src/vkvg_pattern.h +++ b/src/vkvg_pattern.h @@ -14,12 +14,17 @@ typedef struct _vkvg_pattern_t { vkvg_filter_t filter; vkvg_matrix_t matrix; bool hasMatrix; + } vkvg_pattern_t; -typedef struct _vkvg_surface_pattern_t { +typedef struct _surface_pattern_t { vkvg_pattern_t base; VkvgSurface surf; -} vkvg_surface_pattern_t; + VkDescriptorPool descPool; + VkDescriptorSet dsSource; + VkSampler sampler; + bool samplerIsDirty; +} surface_pattern_t; typedef struct _vkvg_gradient_t { vkvg_color_t colors[16]; diff --git a/src/vkvg_surface.c b/src/vkvg_surface.c index 1d5a04f..985a623 100644 --- a/src/vkvg_surface.c +++ b/src/vkvg_surface.c @@ -49,7 +49,6 @@ VkvgSurface vkvg_surface_create(VkvgDevice dev, uint32_t width, uint32_t height) surf->newSurf = true; // used to clear all attacments on first render pass _create_surface_images (surf); - _update_descriptor (surf); _transition_surf_images(surf); surf->status = VKVG_STATUS_SUCCESS; @@ -104,13 +103,6 @@ VkvgSurface vkvg_surface_create_from_bitmap(VkvgDevice dev, unsigned char* img, VkhImage stagImg = vkh_image_create((VkhDevice)&surf->dev->vkDev, VK_FORMAT_R8G8B8A8_UNORM, surf->width, surf->height, VK_IMAGE_TILING_LINEAR, VKH_MEMORY_USAGE_GPU_ONLY, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT); - // bgra bliting target - VkhImage tmpImg = - vkh_image_create((VkhDevice)&surf->dev->vkDev, surf->surfClass->format, surf->width, surf->height, VK_IMAGE_TILING_LINEAR, - VKH_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); // staging buffer vkh_buffer_t buff = {0}; vkh_buffer_init((VkhDevice)&dev->vkDev, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VKH_MEMORY_USAGE_CPU_TO_GPU, imgSize, @@ -134,7 +126,7 @@ VkvgSurface vkvg_surface_create_from_bitmap(VkvgDevice dev, unsigned char* img, vkh_image_set_layout(cmd, stagImg, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); - vkh_image_set_layout(cmd, tmpImg, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, + vkh_image_set_layout(cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT); @@ -145,9 +137,9 @@ VkvgSurface vkvg_surface_create_from_bitmap(VkvgDevice dev, unsigned char* img, .dstOffsets[1] = {(int32_t)surf->width, (int32_t)surf->height, 1}, }; vkCmdBlitImage(cmd, vkh_image_get_vkimage(stagImg), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, - vkh_image_get_vkimage(tmpImg), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit, VK_FILTER_LINEAR); + vkh_image_get_vkimage(surf->img), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &blit, VK_FILTER_LINEAR); - vkh_image_set_layout(cmd, tmpImg, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + vkh_image_set_layout(cmd, surf->img, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT); @@ -161,13 +153,13 @@ VkvgSurface vkvg_surface_create_from_bitmap(VkvgDevice dev, unsigned char* img, surf->newSurf = true; // create tmp context with rendering pipeline to create the multisample img - VkvgContext ctx = vkvg_create(surf); + //VkvgContext ctx = vkvg_create(surf); /* VkClearAttachment ca = {VK_IMAGE_ASPECT_COLOR_BIT,0, { 0.0f, 0.0f, 0.0f, 0.0f }}; VkClearRect cr = {{{0,0},{surf->width,surf->height}},0,1}; vkCmdClearAttachments(ctx->cmd, 1, &ca, 1, &cr);*/ - vec4 srcRect = {.x = 0, .y = 0, .width = (float)surf->width, .height = (float)surf->height}; + /*vec4 srcRect = {.x = 0, .y = 0, .width = (float)surf->width, .height = (float)surf->height}; ctx->pushConsts.source = srcRect; ctx->pushConsts.fsq_patternType = (ctx->pushConsts.fsq_patternType & FULLSCREEN_BIT) + VKVG_PATTERN_TYPE_SURFACE; @@ -178,7 +170,7 @@ VkvgSurface vkvg_surface_create_from_bitmap(VkvgDevice dev, unsigned char* img, vkvg_paint(ctx); vkvg_destroy(ctx); - vkh_image_destroy(tmpImg); + vkh_image_destroy(tmpImg);*/ surf->status = VKVG_STATUS_SUCCESS; return surf; @@ -217,18 +209,17 @@ void vkvg_surface_destroy(VkvgSurface surf) { _destroy_surface_class (surf->surfClass); - + vkDestroyDescriptorPool(dev->vkDev, surf->descPool, NULL); vkDestroyCommandPool(dev->vkDev, surf->cmdPool, NULL); vkDestroyFramebuffer(dev->vkDev, surf->fb, NULL); - vkDestroyDescriptorPool(dev->vkDev, surf->descriptorPool, NULL); - if (!surf->img->imported) vkh_image_destroy(surf->img); vkh_image_destroy(surf->imgMS); vkh_image_destroy(surf->stencil); + vkh_buffer_reset(&surf->uboGrad); if (surf->dev->threadAware) mtx_destroy(&surf->mutex); diff --git a/src/vkvg_surface_internal.c b/src/vkvg_surface_internal.c index 85b8736..3a2b7ce 100644 --- a/src/vkvg_surface_internal.c +++ b/src/vkvg_surface_internal.c @@ -23,6 +23,7 @@ #include "vkvg_device_internal.h" #include "vkvg_surface_internal.h" #include "vkvg_context_internal.h" +#include "vkvg_pattern.h" #include "vkh_queue.h" @@ -461,15 +462,13 @@ void _create_surface_main_image(VkvgSurface surf) { VKH_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); #if defined(DEBUG) && defined(VKVG_DBG_UTILS) vkh_image_set_name(surf->img, "SURF main color"); vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)vkh_image_get_view(surf->img), "SURF main color VIEW"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->img), - "SURF main color SAMPLER"); + /*vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->img), + "SURF main color SAMPLER");*/ #endif } // create multisample color img if sample count > 1 and the stencil buffer multisampled or not @@ -479,30 +478,32 @@ void _create_surface_secondary_images(VkvgSurface surf) { surf->imgMS = vkh_image_ms_create( vkhd, surf->surfClass->format, surf->surfClass->samples, surf->width, surf->height, VKH_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, + vkh_image_create_view(surf->imgMS, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_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); + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE);*/ #if defined(DEBUG) && defined(VKVG_DBG_UTILS) vkh_image_set_name(surf->imgMS, "SURF MS color IMG"); vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)vkh_image_get_view(surf->imgMS), "SURF MS color VIEW"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->imgMS), - "SURF MS color SAMPLER"); + /*vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->imgMS), + "SURF MS color SAMPLER");*/ #endif } surf->stencil = vkh_image_ms_create(vkhd, surf->dev->stencilFormat, surf->surfClass->samples, surf->width, surf->height, VKH_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, + vkh_image_create_view(surf->stencil, VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_STENCIL_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); + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE);*/ #if defined(DEBUG) && defined(VKVG_DBG_UTILS) vkh_image_set_name(surf->stencil, "SURF stencil"); vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)vkh_image_get_view(surf->stencil), "SURF stencil VIEW"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->stencil), - "SURF stencil SAMPLER"); + /*vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_SAMPLER, (uint64_t)vkh_image_get_sampler(surf->stencil), + "SURF stencil SAMPLER");*/ #endif } void _create_framebuffer(VkvgSurface surf) { @@ -629,20 +630,6 @@ surface_class* _get_surface_class (VkvgDevice dev, VkFormat format, VkSampleCoun return _create_surface_class (dev, format, samples); } -void _update_descriptor (VkvgSurface surf) { - vkh_image_create_sampler(surf->img, VK_FILTER_NEAREST, VK_FILTER_NEAREST, - VK_SAMPLER_MIPMAP_MODE_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); - - VkDescriptorImageInfo descSrcTex = vkh_image_get_descriptor(surf->img, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); - VkWriteDescriptorSet writeDescriptorSet = {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, - .dstSet = surf->dsSrc, - .dstBinding = 0, - .descriptorCount = 1, - .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, - .pImageInfo = &descSrcTex}; - vkUpdateDescriptorSets(surf->dev->vkDev, 1, &writeDescriptorSet, 0, NULL); -} - VkvgSurface _create_surface(VkvgDevice dev, VkFormat format, VkSampleCountFlags samples) { LOG(VKVG_LOG_INFO, "CREATE Surface\n"); if (vkvg_device_status(dev)) { @@ -676,28 +663,42 @@ VkvgSurface _create_surface(VkvgDevice dev, VkFormat format, VkSampleCountFlags surf->flushFence = vkh_fence_create(vkhd); #endif - const VkDescriptorPoolSize descriptorPoolSize = {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1}; + const VkDescriptorPoolSize descriptorPoolSize = {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1}; VkDescriptorPoolCreateInfo descriptorPoolCreateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, - .maxSets = 2, + .maxSets = 1, .flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, .poolSizeCount = 1, .pPoolSizes = &descriptorPoolSize}; - VK_CHECK_RESULT(vkCreateDescriptorPool(dev->vkDev, &descriptorPoolCreateInfo, NULL, &surf->descriptorPool)); + VK_CHECK_RESULT(vkCreateDescriptorPool(dev->vkDev, &descriptorPoolCreateInfo, NULL, &surf->descPool)); VkDescriptorSetAllocateInfo descriptorSetAllocateInfo = {.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, - .descriptorPool = surf->descriptorPool, + .descriptorPool = surf->descPool, .descriptorSetCount = 1, - .pSetLayouts = &dev->dslSrc}; - VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &surf->dsSrc)); + .pSetLayouts = &dev->dslGrad}; + VK_CHECK_RESULT(vkAllocateDescriptorSets(dev->vkDev, &descriptorSetAllocateInfo, &surf->dsGradient)); + + vkh_buffer_init((VkhDevice)dev, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VKH_MEMORY_USAGE_CPU_TO_GPU, + sizeof(vkvg_gradient_t), &surf->uboGrad, true); + + VkDescriptorBufferInfo dbi = {surf->uboGrad.buffer, 0, VK_WHOLE_SIZE}; + VkWriteDescriptorSet writeDescriptorSet = {.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, + .dstSet = surf->dsGradient, + .dstBinding = 0, + .descriptorCount = 1, + .descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, + .pBufferInfo = &dbi}; + vkUpdateDescriptorSets(dev->vkDev, 1, &writeDescriptorSet, 0, NULL); #if defined(DEBUG) && defined(VKVG_DBG_UTILS) vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)surf->cmd, "vkvgSurfCmd"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)surf->descriptorPool, - "Surf Descriptor Pool"); - vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)surf->dsSrc, "Surf DescSet"); + vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)surf->descPool, + "Surface Descriptor Pool"); + vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)surf->dsGradient, "Gradient DescSet"); + vkh_device_set_object_name(vkhd, VK_OBJECT_TYPE_BUFFER, (uint64_t)surf->uboGrad.buffer, "CTX Index Buff"); #endif atomic_init(&surf->references, 1); + vkvg_device_reference(surf->dev); return surf; } diff --git a/src/vkvg_surface_internal.h b/src/vkvg_surface_internal.h index c3c97bf..5b7614e 100644 --- a/src/vkvg_surface_internal.h +++ b/src/vkvg_surface_internal.h @@ -25,20 +25,21 @@ #include "vkvg_internal.h" #include "vkvg.h" #include "vkh.h" +#include "vkh_buffer.h" typedef struct _surface_class { atomic_int references; VkvgDevice dev; VkFormat format; VkSampleCountFlags samples; /**< samples count */ - VkRenderPass renderPass; /**< Vulkan render pass, common for all surfaces */ - VkRenderPass renderPass_ClearStencil; /**< Vulkan render pass for first draw with context, stencil has to be cleared */ - VkRenderPass renderPass_ClearAll; /**< Vulkan render pass for new surface, clear all attacments*/ - VkPipeline pipe_OVER; /**< default operator */ - VkPipeline pipe_SUB; - VkPipeline pipe_CLEAR; /**< clear operator */ - VkPipeline pipelinePolyFill; /**< even-odd polygon filling first step */ - VkPipeline pipelineClipping; /**< draw on stencil to update clipping regions */ + VkRenderPass renderPass; /**< Vulkan render pass, common for all surfaces */ + VkRenderPass renderPass_ClearStencil; /**< Vulkan render pass for first draw with context, stencil has to be cleared */ + VkRenderPass renderPass_ClearAll; /**< Vulkan render pass for new surface, clear all attacments*/ + VkPipeline pipe_OVER; /**< default operator */ + VkPipeline pipe_SUB; + VkPipeline pipe_CLEAR; /**< clear operator */ + VkPipeline pipelinePolyFill; /**< even-odd polygon filling first step */ + VkPipeline pipelineClipping; /**< draw on stencil to update clipping regions */ } surface_class; typedef struct _vkvg_surface_t { @@ -59,14 +60,14 @@ typedef struct _vkvg_surface_t { VkSemaphore timeline; /**< Timeline semaphore */ uint64_t timelineStep; #else - VkFence flushFence; // unsignaled idle. + VkFence flushFence; // unsignaled idle. #endif - int hdpi, /**< only used for FreeType fonts and svg loading */ + int hdpi, // only used for FreeType fonts and svg loading */ vdpi; - surface_class * surfClass; - - VkDescriptorPool descriptorPool; - VkDescriptorSet dsSrc; // source ds + surface_class *surfClass; + VkDescriptorPool descPool; + VkDescriptorSet dsGradient; + vkh_buffer_t uboGrad; // uniform buff obj holdings gradient infos } vkvg_surface; #define LOCK_SURFACE(surf) \ @@ -87,7 +88,6 @@ void _create_framebuffer(VkvgSurface surf); void _create_surface_images(VkvgSurface surf); VkvgSurface _create_surface(VkvgDevice dev, VkFormat format, VkSampleCountFlags samples); void _surface_submit_cmd(VkvgSurface surf); -void _update_descriptor (VkvgSurface surf); void _destroy_surface_class (surface_class* surf); // bool _surface_wait_cmd (VkvgSurface surf); diff --git a/tests/gradient.c b/tests/gradient.c index 74b7337..07e7ac8 100644 --- a/tests/gradient.c +++ b/tests/gradient.c @@ -2,9 +2,9 @@ VkvgPattern create_grad(VkvgContext ctx, float x) { VkvgPattern pat = vkvg_pattern_create_linear(x, 0, 300, 0); - vkvg_pattern_add_color_stop(pat, 0, 1, 0, 0, 1); + vkvg_pattern_add_color_stop(pat, 0.0f, 1, 0, 0, 1); vkvg_pattern_add_color_stop(pat, 0.5f, 0, 1, 0, 1); - vkvg_pattern_add_color_stop(pat, 1, 0, 0, 1, 1); + vkvg_pattern_add_color_stop(pat, 1.0f, 0, 0, 1, 1); return pat; } @@ -65,7 +65,7 @@ void paint() { vkvg_destroy(ctx); } void paint_repeat() { - VkvgContext ctx = _initCtx(surf); + VkvgContext ctx = _initCtx(); VkvgPattern pat = create_grad(ctx, 0); vkvg_pattern_set_extend(pat, VKVG_EXTEND_REPEAT); vkvg_set_source(ctx, pat); @@ -75,21 +75,21 @@ void paint_repeat() { vkvg_destroy(ctx); } -void test() { - VkvgContext ctx = _initCtx(surf); +void gradient() { + VkvgContext ctx = _initCtx(); VkvgPattern pat = create_grad(ctx, 0); vkvg_set_source(ctx, pat); - vkvg_rectangle(ctx, 100, 100, 200, 200); - vkvg_set_line_width(ctx, 20); - // vkvg_fill (ctx); - // vkvg_paint(ctx); - vkvg_stroke(ctx); + vkvg_rectangle(ctx, 0, 0, 300, 200); + // vkvg_set_line_width(ctx, 20); + vkvg_fill (ctx); + //vkvg_paint(ctx); + //vkvg_stroke(ctx); vkvg_pattern_destroy(pat); vkvg_destroy(ctx); } void test2() { - VkvgContext ctx = _initCtx(surf); + VkvgContext ctx = _initCtx(); vkvg_set_source_rgb(ctx, 1, 0, 0); vkvg_paint(ctx); @@ -108,7 +108,7 @@ void test2() { } void gradient_transform() { - VkvgContext ctx = _initCtx(surf); + VkvgContext ctx = _initCtx(); // vkvg_translate(ctx,-100,-100); @@ -132,7 +132,7 @@ void gradient_transform() { vkvg_destroy(ctx); } void gradient_alpha() { - VkvgContext ctx = _initCtx(surf); + VkvgContext ctx = _initCtx(); vkvg_set_source_rgb(ctx, 0, 1, 0); vkvg_paint(ctx); @@ -150,6 +150,7 @@ void gradient_alpha() { int main(int argc, char* argv[]) { no_test_size = true; + PERFORM_TEST(gradient, argc, argv); PERFORM_TEST(gradient_alpha, argc, argv); PERFORM_TEST(paint, argc, argv); PERFORM_TEST(paint_repeat, argc, argv); diff --git a/tests/img_surf.c b/tests/img_surf.c index 0d52ced..6acf2d1 100644 --- a/tests/img_surf.c +++ b/tests/img_surf.c @@ -3,8 +3,8 @@ const char* imgPath = TESTS_DATA_ROOT "mirror.jpg"; const char* imgPath2 = TESTS_DATA_ROOT "mirror.png"; const char* imgPath3 = TESTS_DATA_ROOT "filled.png"; -const char* imgPath4 = TESTS_DATA_ROOT "mirfor2.png"; -const char* imgPath5 = TESTS_DATA_ROOT "mirfor2-64.png"; +const char* imgPath4 = TESTS_DATA_ROOT "mirror2.png"; +const char* imgPath5 = TESTS_DATA_ROOT "mirror2-64.png"; void paint() { VkvgContext ctx = vkvg_create(surf); @@ -302,19 +302,15 @@ void imgTest4() { float arcSize = 70.f; - // vkvg_set_operator(ctx, VKVG_OPERATOR_OVER); - // vkvg_set_source_rgba(ctx, 1.0, 1.0, 1.0, 0.4); vkvg_set_source_surface(ctx, imgSurf2, 50, 50); - // vkvg_arc(ctx, arcSize, arcSize, 60.f, 0, 2.f * M_PIF); + vkvg_rectangle(ctx, 50, 50, 120, 120); vkvg_paint(ctx); vkvg_set_source_rgba(ctx, 1.0f, 0.0f, 0.0f, 0.9f); - vkvg_arc(ctx, 200, 200, 21.f, 0, M_PIF * 2); - vkvg_fill(ctx); - - // vkvg_set_line_width(ctx, 1); +/* vkvg_arc(ctx, 200, 200, 21.f, 0, M_PIF * 2); + vkvg_fill(ctx);*/ vkvg_surface_destroy(imgSurf2); vkvg_surface_destroy(imgSurf); |