From 4753ef3a9b7e25077962710a86449ca7b6be656f Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Fri, 10 Jan 2025 20:08:40 -0600 Subject: [PATCH] fix render --- scripts/prosperon.js | 5 - scripts/render.js | 154 ++-- scripts/std.js | 4 +- shaders/compile.sh | 12 +- shaders/dxil/dbgline.frag.dxil | Bin 2960 -> 3000 bytes shaders/dxil/dbgline.vert.dxil | Bin 4440 -> 4480 bytes shaders/dxil/model.frag.dxil | Bin 4292 -> 4328 bytes shaders/dxil/model.vert.dxil | Bin 5460 -> 5496 bytes shaders/dxil/model_lit.frag.dxil | Bin 4764 -> 4804 bytes shaders/dxil/post.frag.dxil | Bin 3800 -> 3836 bytes shaders/dxil/post.vert.dxil | Bin 4272 -> 4308 bytes shaders/dxil/ps1.frag.dxil | Bin 4492 -> 4528 bytes shaders/dxil/ps1.vert.dxil | Bin 5152 -> 5188 bytes shaders/dxil/rectangle.frag.dxil | Bin 2952 -> 2992 bytes shaders/dxil/sprite.frag.dxil | Bin 3968 -> 3916 bytes shaders/dxil/sprite.vert.dxil | Bin 5152 -> 5192 bytes shaders/msl/sprite.frag.msl | 8 +- shaders/sprite.frag.hlsl | 1 - shaders/spv/sprite.frag.spv | Bin 1012 -> 864 bytes source/font.c | 6 +- source/jsffi.c | 112 +-- .../thirdparty/imgui/imgui_impl_sdlgpu3.cpp | 12 +- .../imgui/imgui_impl_sdlgpu3_shaders.h | 668 ++++++++++++++++++ 23 files changed, 848 insertions(+), 134 deletions(-) diff --git a/scripts/prosperon.js b/scripts/prosperon.js index 7c995a22..49aa9e3a 100644 --- a/scripts/prosperon.js +++ b/scripts/prosperon.js @@ -84,11 +84,6 @@ prosperon.init = function () { globalThis.audio = use("sound.js"); world_start(); - prosperon.camera = prosperon.make_camera(); - prosperon.camera.transform.pos = [0, 0, -100]; - prosperon.camera.mode = "keep"; - prosperon.camera.break = "fit"; - prosperon.camera.size = game.size; /* shape.quad = { pos: os.make_buffer([ 0, 0, 0, diff --git a/scripts/render.js b/scripts/render.js index b386680e..ec5d7a8f 100644 --- a/scripts/render.js +++ b/scripts/render.js @@ -94,24 +94,25 @@ var base_pipeline = { var cornflower = [62/255,96/255,113/255,1]; var sprite_pipeline = Object.create(base_pipeline); -sprite_pipeline.target = { - color_targets: [{ - format:"rgba8", - blend:base_pipeline.blend - }], - depth: "d32 float s8" -}; - sprite_pipeline.blend = { enabled:true, src_rgb: "src_alpha", // zero/one/src_color/one_minus_src_color/dst_color/one_minus_dst_color/src_alpha/one_minus_src_alpha/dst_alpha/one_minus_dst_alpha/constant_color/one_minus_constant_color/src_alpha_saturate dst_rgb: "one_minus_src_alpha", op_rgb: "add", // add/sub/rev_sub/min/max src_alpha: "one", - dst_alpha: "one_minus_src_alpha", + dst_alpha: "zero", op_alpha: "add" }; +sprite_pipeline.target = { + color_targets: [{ + format:"rgba8", + blend:sprite_pipeline.blend + }], + depth: "d32 float s8" +}; + + var rect_pipeline = Object.create(sprite_pipeline) rect_pipeline.fragment = "rectangle.frag" @@ -123,17 +124,6 @@ dbgline_pipeline.vertex = "dbgline.vert.hlsl" dbgline_pipeline.fragment = "dbgline.frag.hlsl" dbgline_pipeline.primitive = "line" -var post_camera = {}; -post_camera.transform = os.make_transform(); -post_camera.transform.unit(); -post_camera.zoom = 1; -post_camera.size = [640,360]; -post_camera.mode = 'keep'; -post_camera.viewport = {x:0,y:0,width:1,height:1} -post_camera.fov = 45; -post_camera.ortho = true; -post_camera.aspect = 16/9; - function get_pipeline_ubo_slot(pipeline, name) { if (!pipeline.vertex.reflection.ubos) return; @@ -271,7 +261,7 @@ function make_pipeline(pipeline) { } else if (typeStr == "vec4") { // Special case: if "COLOR" is in the name, treat it as packed bytes if (nameStr.indexOf("COLOR") >= 0) { - pitch = 4 + pitch = 16 fmt = "color" // signals engine to use SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4NORM } else { pitch = 16 @@ -322,10 +312,12 @@ function make_shader(sh_file) { num_uniform_buffers: refl.ubos ? refl.ubos.length : 0, entrypoint: shader_type === "msl" ? "main0" : "main" } + console.log(`making shader ${sh_file} of format ${shader_type}`) shader.gpu = render._main.make_shader(shader) shader.reflection = refl; shader_cache[file] = shader + shader.file = sh_file return shader } @@ -479,9 +471,11 @@ var main_depth = { function render_camera(cmds, camera) { +var pass; +try{ if (!camera.target) { - main_color.width = main_depth.width = prosperon.camera.size.x; - main_color.height = main_depth.height = prosperon.camera.size.y; + main_color.width = main_depth.width = camera.size.x; + main_color.height = main_depth.height = camera.size.y; camera.target = { color_targets: [{ texture: render._main.texture(main_color), @@ -495,9 +489,9 @@ function render_camera(cmds, camera) depth_stencil: { texture: render._main.texture(main_depth), clear:1, - load:"clear", + load:"dont_care", // if clear, crash on dx12 store:"dont_care", - stencil_load:"clear", + stencil_load:"dont_care", // ditto stencil_store:"dont_care", stencil_clear:0 } @@ -522,8 +516,10 @@ function render_camera(cmds, camera) var mesh; var img; var modelslot; - + + cmds.push_debug_group("draw") for (var group of render_queue) { + var add; if (pipeline != group.pipeline) { pipeline = group.pipeline; bind_pipeline(pass, pipeline); @@ -552,7 +548,37 @@ function render_camera(cmds, camera) pass.draw_indexed(group.num_indices, 1, group.first_index, 0, 0); } + cmds.pop_debug_group() + cmds.push_debug_group("sprites") + + var buckets = component.sprite_buckets(); + bind_pipeline(pass,sprite_pipeline); + var camslot = get_pipeline_ubo_slot(pipeline, 'TransformBuffer'); + if (typeof camslot !== 'undefined') + cmds.hud(camera.size, camslot); + + modelslot = get_pipeline_ubo_slot(pipeline, "model"); + if (typeof modelslot !== 'undefined') { + var ubo = ubo_obj_to_array(pipeline, 'model', sprite_model_ubo); + cmds.push_vertex_uniform_data(modelslot, ubo); + } + for (var l in buckets) { + var layer = buckets[l]; + for (var img in layer) { + var sparray = layer[img]; + if (sparray.length === 0) continue; + + + ss.baseinstance = render.make_sprite_ssbo(sparray, sprite_ssbo); + render.use_mat(ss); + render.draw(shape.quad, sprite_ssbo, sparray.length); + } + } + + cmds.pop_debug_group() + + cmds.push_debug_group("hud") for (var group of hud_queue) { if (pipeline != group.pipeline) { pipeline = group.pipeline; @@ -582,10 +608,14 @@ function render_camera(cmds, camera) pass.draw_indexed(group.num_indices, 1, group.first_index, 0, 0); } - - pass.end(); + cmds.pop_debug_group(); +} catch(e) {console.error(e); } +finally{ + pass?.end(); render_queue = []; + hud_queue = []; +} } function mode_rect(src,dst,mode = "stretch") @@ -628,6 +658,43 @@ function mode_rect(src,dst,mode = "stretch") return out; } +prosperon.camera = {}; +// If camera viewport is defined, will draw to the screen +// If target is defined, will render to a target, too + +prosperon.camera.draw_rect = function(size) +{ + var mode = this.presentation || "letterbox" + var vp = { + x:this.viewport.x, + y:1-this.viewport.y-this.viewport.height, + width:this.viewport.width, + height:this.viewport.height + } + var src_rect = {x:0,y:0,width:this.size.x,height:this.size.y} + var dst_rect = {x:vp.x*size.x,y:vp.y*size.y,width:vp.width*size.x,height:vp.height*size.y}; + return mode_rect(src_rect,dst_rect,mode); +} + +// Camera coordinates are [0,0] +prosperon.camera.screen2camera = function(pos) +{ + var draw_rect = this.draw_rect(prosperon.window.size); + var ret = [pos.x-draw_rect.x, pos.y - draw_rect.y]; + ret.x /= draw_rect.width; + ret.y /= draw_rect.height; + ret.y = 1 - ret.y; + return ret; +} + +prosperon.camera.screen2hud = function(pos) +{ + var cam = this.screen2camera(pos); + cam.x *= this.size.x; + cam.y *= this.size.y; + return cam; +} + var swaps = []; function gpupresent() { @@ -639,10 +706,7 @@ function gpupresent() if (!swapchain_tex) cmds.cancel(); else { - var mode = prosperon.camera.presentation || "letterbox" - var src_rect = {x:0,y:0,width:prosperon.camera.size.x,height:prosperon.camera.size.y} - var dst_rect = {x:0,y:0,width:swapchain_tex.width,height:swapchain_tex.height}; - var torect = mode_rect(src_rect,dst_rect,mode); + var torect = prosperon.camera.draw_rect(prosperon.window.size); torect.texture = swapchain_tex; if (swapchain_tex) { cmds.blit({ @@ -651,14 +715,15 @@ function gpupresent() filter:"nearest", load: "clear" }); - - imgui.prepend(cmds); - // now imgui + // imgui + cmds.push_debug_group("imgui") + imgui.prepend(cmds); var pass = cmds.render_pass({ color_targets:[{texture:swapchain_tex}]}); imgui.endframe(cmds,pass); pass.end(); + cmds.pop_debug_group() } cmds.submit() } @@ -701,23 +766,6 @@ render.draw_hud = true; render.draw_gui = true; render.draw_gizmos = true; -render.sprites = function render_sprites() { - var buckets = component.sprite_buckets(); - if (buckets.length === 0) return; - render.use_shader(spritessboshader); - for (var l in buckets) { - var layer = buckets[l]; - for (var img in layer) { - var sparray = layer[img]; - if (sparray.length === 0) continue; - var ss = sparray[0]; - ss.baseinstance = render.make_sprite_ssbo(sparray, sprite_ssbo); - render.use_mat(ss); - render.draw(shape.quad, sprite_ssbo, sparray.length); - } - } -}; - function draw_sprites() { var buckets = component.sprite_buckets(); @@ -825,7 +873,7 @@ render.text = function text(text, rect, font = prosperon.font, size = 0, color = texture:font.texture, pipeline, first_index:0, - num_indices:mesh.indices.length + num_indices:mesh.num_indices }); return; diff --git a/scripts/std.js b/scripts/std.js index e84e6527..c8f33da5 100644 --- a/scripts/std.js +++ b/scripts/std.js @@ -253,12 +253,14 @@ Cmdline.register_order( driver = "vulkan" break case "Windows": - driver = "direct3d12" +// driver = "direct3d12" + driver = "vulkan" break case "macOS": driver = "metal" break } + render._main = prosperon.window.make_gpu(false, driver); render._main.window = prosperon.window; render._main.claim_window(prosperon.window); diff --git a/shaders/compile.sh b/shaders/compile.sh index 2ef9c936..dbaf29b0 100755 --- a/shaders/compile.sh +++ b/shaders/compile.sh @@ -11,8 +11,8 @@ for filename in *.vert.hlsl; do if [ -f "$filename" ]; then echo "compiling ${filename}" # Produce SPIR-V dxc -spirv -T vs_6_0 -Fo "spv/${filename/.hlsl/.spv}" "$filename" - # Produce DXIL - dxc -T vs_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" + # Produce DXIL + PDB + dxc -Zi -Fd "dxil/${filename/.hlsl/.pdb}" -T vs_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" # Convert SPIR-V to Metal Shader Language spirv-cross "spv/${filename/.hlsl/.spv}" --msl > "msl/${filename/.hlsl/.msl}" # Generate reflection @@ -25,8 +25,8 @@ for filename in *.frag.hlsl; do if [ -f "$filename" ]; then echo "compiling ${filename}" # Produce SPIR-V dxc -spirv -T ps_6_0 -Fo "spv/${filename/.hlsl/.spv}" "$filename" - # Produce DXIL - dxc -T ps_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" + # Produce DXIL + PDB + dxc -Zi -Fd "dxil/${filename/.hlsl/.pdb}" -T ps_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" # Convert SPIR-V to Metal Shader Language spirv-cross "spv/${filename/.hlsl/.spv}" --msl > "msl/${filename/.hlsl/.msl}" # Generate reflection @@ -39,8 +39,8 @@ for filename in *.comp.hlsl; do if [ -f "$filename" ]; then echo "compiling ${filename}" # Produce SPIR-V dxc -spirv -T cs_6_0 -Fo "spv/${filename/.hlsl/.spv}" "$filename" - # Produce DXIL - dxc -T cs_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" + # Produce DXIL + PDB + dxc -Zi -Fd "dxil/${filename/.hlsl/.pdb}" -T cs_6_0 -Fo "dxil/${filename/.hlsl/.dxil}" "$filename" # Convert SPIR-V to Metal Shader Language spirv-cross "spv/${filename/.hlsl/.spv}" --msl > "msl/${filename/.hlsl/.msl}" # Generate reflection diff --git a/shaders/dxil/dbgline.frag.dxil b/shaders/dxil/dbgline.frag.dxil index fcc2b2cfff5d22cc8c83eb88ad11ac85f559f68f..8d71dd1696b2371e0b40b014d7bfe340007c3846 100644 GIT binary patch delta 180 zcmbOrzC+yBCBn&h-F$<`w{}iwu?+ll{(0E6Z;T8K3_G|P7&w5m0}uxQ@fINd0K^M` zk`-(W40C{Z$41K>X1W>lGIR7( zlG1ZB^HTNFiW1ZH3R04QG9He>9wJ~h3=C)QUq1WiQp(>uRL37SOBgga7(`;9L&2Vym#mKNB!Iv5y48B!`TbM#Y^ z(sMHNQuWGGi%RqgQj&l&9*)5tB49NP4Cjv)EWP--HY=~5Nj&bh_oB^LIF~Y^o7~QG Gkp%!QOgRDo delta 140 zcmZorzM*9465-?=x+pTu^#<4dxkAA=xW3N&!N|bC5FyCGzz(EsfY=9!R{${&P~r;^ z@8D!$xU$i{k8HG@!OFLB<3vWsg`FD>xrH|iuHJl~bt$urr;m%D1W*?PgD^u%MP`nE zZhlH?j$T?(V!B>IN)m&IW3Yz^Se}7F=0fzM*h{y=#STXqF6}ugv3UWfATzqD`*~Pd E00fjX#{d8T delta 140 zcmaE%ctp|CCBn%$>HY6{8)jbRV&*PSixc5vVPs%nI3mEnzz(EsfY=9!6@Y>E zfuV(yfnmW$+Zn8UJ7=C`bW}Xexmxq|PQ~WUk6D*8%Xl~jdx!vafPhfTJiR2D6YOg^ VZ%xV0i|HxuVUf|Gb3)Wd6?)Y*0z!+Qjpg3Ej}&e35Jb D)NL}R delta 140 zcmeyNbw$h4CBn(MnpI{0)5(6O7U>Uamrt0c!pOkD5F*OJzz(EsfY=9!KLGI&po9%G z1H%(;AZMek1RLMZnI{ZOP)WH4FCrAD)s;X diff --git a/shaders/dxil/model_lit.frag.dxil b/shaders/dxil/model_lit.frag.dxil index 8c3046f5ef9e041e3fe27d0f3bf261debefb528e..036544cb995b13ced4dcce33090f1aeca8785b76 100644 GIT binary patch delta 180 zcmbQEdPLRMCBn(sFIIAH((Y&fUpb@|FZ;Eq%j1JuF5AkL6dk(r~P zo1c=J6Q7e=qL)^bn66illEmQQ80;YeR>Q#1w?F^y=|{IWSie%#z4KGTdb0ypB{RCo J$9b=^006DsHp~D3 delta 140 zcmX@2I!D#gCBn)1dY)t6z1^I@)`VEi?q2hvnUR5kVU7?313Qqm0b(B@z5&D{KnWWr z1_l)_1_p^$Amc*tsys7 Wh1R}ynx4NogR7DmUDtcwt1JM3v@JRS diff --git a/shaders/dxil/post.frag.dxil b/shaders/dxil/post.frag.dxil index caeb8b2cb86279d997efb76ac1cc1e3aafb5103f..d62b17af0e9f1e0ea80807d608f469c25afa9081 100644 GIT binary patch delta 176 zcmca1`$yK+CBn&>AtgZAa?ZV1c6s*FS6a*S85tND{_rs{Z~$osAPxZH4M6+`i0=R; zO@I<1KwPlVas>KM9~}1_mL9l#0w8{et}B z61}vd#B{xalq3cQ5655+5wJW1gWun$O!coWX?0!;N#+ory?C<^2P-qWsqx&E%mAe_ BGQj`< delta 140 zcmew(dqdXJCBn&>aeAxj3TCd;Z97gY92Vg+Wn^GrxWUK3zz(EsfY=9!*8uSgAie>V zG~fV=ZM0p%!nbqgNk&J-)10d{Pw!N0-u#)xky*yWG1x-{s1gLUo(jM4*=Fq?UA1{d U&+9|Jn+rHtnbCDMb5}A00J+I3nE(I) diff --git a/shaders/dxil/post.vert.dxil b/shaders/dxil/post.vert.dxil index 0ef3caf8fbf7e3836723f25bf126951b2f2f3382..0c6b61ed8ecbc3bddfc9211e351577f42d215c1a 100644 GIT binary patch delta 176 zcmdm>ctz3HCBn%$=XBYM(1S%wuF1}RCUfjX5F-Nv!xaGr1`Z(Y0K@@6yaI>?fD%7| zcn2o~!wn$*veB}Gg>U1=iHwd5J2x6~3vU)&z4<)LQx+Rf9~VCfpbiEGA%>KS%pCoK z{NfV5vecpyy@He^1_lquU=IWA0NcSTM*si- diff --git a/shaders/dxil/ps1.frag.dxil b/shaders/dxil/ps1.frag.dxil index ec3dfb2285ff6d5de18ce4f54d8260d076c626fb..7f7ca9cb6aa4aa4d809c4fa7676b4c9a61a2a5a4 100644 GIT binary patch delta 176 zcmeBC-k@yj65-^$kbUd%zSiES(~q)nKj&JufsuiMVS^w80|$_H0O9~3-T}m4Ko}_L z!pXpp0>lj)EfrY#Hg25A=(wZKJWrt1}?BmqS|9D_YX!14?XKNQ7R#2(z$BiD0VQ0UFVrp+;&iOlGxp5{5o0s#LO BGur?F delta 140 zcmdm>+@oyi65-_Rdhl#>yY6!Kf8D$N_j@REGBPkQ^awIAumfouAoc;`EkOJMgn^O{ zoD2*x8*LR>`F74c$>^wfnsc@0>79zro3mMOGRt^4278DARf2$X3FjG0Q^7+kPD=(k TB$~HxZs1I0M%VS8=O7CJ!qqAJ diff --git a/shaders/dxil/ps1.vert.dxil b/shaders/dxil/ps1.vert.dxil index e28f3bcf8fb6af2bbcd286138a73cfa725980bad..86de505e4e6d4677a1b5196671362c6620ee394b 100644 GIT binary patch delta 176 zcmZ3WaYVz`CBn)1sJZ7hzO)n*gM85}Y4cSQj0_A6E+PyJ96;Iuhy#H50uaXlC1x-& zF#Oc3@H_vIr>GZ z$t8(-={c!-X+??YdIc#-3?7cb9wJ~h3=9%ZPxY&Q_x|`}{Po#^H7uJqPhewZLN|Fa H$5SQ%H0n94 delta 140 zcmdlW-XU)365-^$kHyVm!fPKtIbIR}kOK|jj0_A69o!5I>_FNEh<$)~4G_No;w3=I z5;g{g2^(z-nE7_jJjv*&c$#yy=INb^&6{^K?`4wla18bk0jdOn8b49?L)ZIf>0H@) VWTot~vzvFYu`;3SI?eHv2>?K4D%Ai0 diff --git a/shaders/dxil/sprite.frag.dxil b/shaders/dxil/sprite.frag.dxil index b76bf0284f0ebf11917046d1f1f1f1f4a62daf60..70fffab6441fc436309e8d55829262aa0c8f0400 100644 GIT binary patch delta 1479 zcmdUvZ%h+s9LJw)kK-t%J!sWK5Fem4bE#O=F_6~X^@;%pTE`q+21)s+kQ8LVj4xa$ zZS5eyLU&aV0x1fKn`Udr+(t6BLgzpV6wFYxTOi6@3<)M~O0qY55MPib+xtDqH&1@| zeeV0@$?x+#mhFKAt=_2PJ}gnS>^B~{ap~f$s8tv5#Q*?#QUFLaGe`y`57IJH2$>pW zn2=6;GcRH(MgmpHIfop*F*gsOnL;&#zUw&OuZdy++IdXSgK>PX0AiK=b-}?#xy`8? zOU|IwZH#!&)tea}E+a6i`5xQp67COj+A%J34BPRvN$VQT2##ir3Ac9%vwq+*g2Ffp zwrv%oSDO-kXR`)`n!xC;Ah+MgWx6c^1@X`)SyW4(EfC)rB&&?{Pbgi2;RC+#=LX3` zM!Eu}r%jUOr;W0(=e<>^l)A3Vb%Eo+(bYyowi2o&oH&s>!275pDI%m4x&ibqSVzRE# z@nY$@^6s~+)0XMB?ehp9Nqz%T$LnVE$?DXq@`{><0;^jT+t*rrK2&tS=Yh*osdGFo z-E!+#q4Ld?*Pe7N4hQI(#4#N@>GMHVL% zz2DLEAg-7$Mj0U&yv(7H&i77s>eI8g94Jgrxwn?&8lD+nVy_Jj&rIe=EVv_M`zG#v z&>M%g4!MAIXj-hrG!gswE6Lcai5?{>U@q)b zO}3LqqvwKmc=-(8U#TR|3?)J(`Qx4h7M_b5c~Na7s~_$=@syN^jbd$@HW%H4N-Lx0 zlf+5bg`sTmPyY&prZEdOS%$N!wO1(&>5l`TIRNCk9j>CqBRgy{?ld7tCL(~<1ggU9 zCF9MkzyfKehb=$9yR-v9lDO4r?jC5P6@auhVT9E!!Sy_BmMGjhfNg^4C}{i*d^q=0 delta 1477 zcmdUvZ%kWN6u|FmU)u+~mIr0{*r0pm&y#<$0u4CVy7vmJg^Y=?Fw}u9W5NuSh86~B zgqB(evW)S-!O&5*#h_yYWHa`Irc}npp9(G-C?UvVhWIZd3%Y$U#!KMC;)lhr-sI%m zbI!fz-jnmYcUIQ4cYkJ~CgZImzn@K@d3f24 zT}a1EBV>DsMmA+_GN2_rpNJ=|5gvnVZCqSF5WZoR{ldzoS&7aX_}f7Eq*b=U${xGJ z7w<)Qtg=Obue$@??!ZkZa7iAqYLLBal|4jc(}zcD+T-BMX^gzpoamh$GG4E+G0{>~MDlhx)^RmObYCBLwX?-!AMMZL>i z&cO`FPbn>-+5&oEQ(G{Z7Q;+;+;iRO_I~;O)R}H?j^AK*sje=`Qg1rR8jV#Jg9YX= z=i7!PTS;E?6$Sf3ipU~gm;Nful((jR_Ppqi57xBl=`l^sN$}VcRW(KnJUXAJ0%OBM zHA3xz4Je?*=O3uPB7)qRb|y8^9;E#G{(-XxsZNmD+=;0U>DYW-$WEj37N&nSqwO)V zas6KZzUzm!AjKfpdKmZo3)+n*pmqI!p?%r^DbVf>NDyt{;O8)~#Jv)rD0&*FG=_f0 zlDNOgEJY)I3d%2;b<;cuXfH*~2(6~H=n0Q zb#5i#nK%=T-5QfqG$v58RFBy6sIm~N{PBgV4NQU;;_75|7R0#R#wa-%9*JBTWAWSn zrOnSb8YuYZz&1)zHgW5b!cPfoYQbO^6GrqRvG%-JmnY#a*c}B2q;6%@bUd}B15lW7l8h}r_T2UweaHC2ddW^e8>Y~2yz1TFLB2U} zM@UuDH#=t8s+}cE=XR{}jaDnEn{OTG!{o}cd8&noo+8^>?tvsc|Exgzjw8y}_E?MK z038Qy%?V_(4iG4OeadtbKUJZ{gSP^`e6M)fo$#dP#9M=!QNSvgHO9(K3LQZ{x;^jE)OCHyUyaZx&p=c{*z>tAnSHi=PZo2Lpo$LrO(v zj(%}LQD#Z1URi2UiC#fU5=h3wF&JbC7})+5zsXq4b@Xl4oGrmtc8r?^xQ{ZSoBWv9 GmJI+Gw>9Db delta 140 zcmX@1u|UJpCBn(s?a|H&nWleqYHHbT{yEd`%gDgMpdiA)zz(EsfY=9!&j4`*P+|%b z1H%_C1_ptRwgIesJ7=C`bW}Xexmxq|PQ~WUvsq(VWjq{%J%F0QAn%uXV3&q diffuse [[texture(0)]], sampler smp [[sampler(0)]]) { main0_out out = {}; - float4 _29 = diffuse.sample(smp, in.in_var_TEXCOORD0); - float4 _30 = _29 * in.in_var_COLOR0; - if ((_30.w - 0.00999999977648258209228515625) < 0.0) - { - discard_fragment(); - } - out.out_var_SV_TARGET = _30; + out.out_var_SV_TARGET = diffuse.sample(smp, in.in_var_TEXCOORD0) * in.in_var_COLOR0; return out; } diff --git a/shaders/sprite.frag.hlsl b/shaders/sprite.frag.hlsl index e604b238..0d32a7a8 100644 --- a/shaders/sprite.frag.hlsl +++ b/shaders/sprite.frag.hlsl @@ -8,6 +8,5 @@ float4 main(PSInput input) : SV_TARGET { float4 color = diffuse.Sample(smp, input.uv); color *= input.color; - clip(color.a-0.01); return color; } \ No newline at end of file diff --git a/shaders/spv/sprite.frag.spv b/shaders/spv/sprite.frag.spv index 08f7ac3ee2019cc129eb56a4598ea5d2ff9bd673..4eff762d6469c126f96a83b9595c329da557653c 100644 GIT binary patch delta 405 zcmXwzK~4fu5JYBWMG8|M;7IWa*gl>M%gF_!e)>p6LGX-}vyx zz2SUBZvpu@@_44dqm1dkYu;UY2dvmn^a5CN{T>?D@IzymBWUV^h8oUIS;E NY_Kt?+J%T;;0iU-5xxKb literal 1012 zcmY+C-D+A<5QTR&YHQLYHa3aoPh;)^QhHGe{ehB*Hvx%}BzHkjgAfx@6X5<*xG2mESRlcN&*RtycT^)ni?j$`E4hsCCk6D|p8F?(S#Np|kU=&Zl;> z(TTK$|Ms!=8T{M~{|0Vyi~H{4n%I6~_ZHh{UU$EJ+;i&UDz1s$YhD*8`Z~Ag!4>?F zTJuFb|GoA;!AoFm1N}MC8fOqM$JpK_w(>pHomDO|u~y;C%3~VUmZ|bRN`Yur;LR$*Qe&9}(?&dyXsUnjnc`}>VFv3>m}n%KV1Zf~)D?UP{p zy1(2TZnu}3X78Vz-XMOU%Goz@?-M&~3HPkn*~+-{h~0e)cb;=p=ikPyk-wnQJ9cn+ z@7BIjEARh8%^s(4zQrCcZ_h6=S0R`8t-rzfZK`+$_q~5my-(DBF_&5mmvcY!-)wCz O_mTSKfB6UgE&dnWK0)dL diff --git a/source/font.c b/source/font.c index 37047e10..686af696 100644 --- a/source/font.c +++ b/source/font.c @@ -306,8 +306,10 @@ struct text_vert *renderText(const char *text, HMM_Vec2 pos, font *f, float scal cursor.y -= lineHeight + f->linegap; lineWidth = 0; } - - draw_char_verts(&buffer, chara, cursor, scale, color); + + if (!isspace(*c)) + draw_char_verts(&buffer, chara, cursor, scale, color); + lineWidth += chara.advance; cursor.x += chara.advance; } diff --git a/source/jsffi.c b/source/jsffi.c index f0907781..69737e7b 100644 --- a/source/jsffi.c +++ b/source/jsffi.c @@ -32,6 +32,7 @@ #include #include #include +#include #ifdef __APPLE__ #include @@ -2682,9 +2683,21 @@ SDL_GPUShaderFormat js2SDL_GPUShaderFormat(JSContext *js, JSValue v) JSC_SCALL(SDL_Window_make_gpu, SDL_Window *win = js2SDL_Window(js,self); const char *name = JS_ToCString(js,argv[1]); - SDL_GPUDevice *gpu = SDL_CreateGPUDevice(SDL_GPU_SHADERFORMAT_DXIL | SDL_GPU_SHADERFORMAT_SPIRV | SDL_GPU_SHADERFORMAT_MSL, JS_ToBool(js,argv[0]), name); - + SDL_PropertiesID props = SDL_CreateProperties(); + SDL_SetStringProperty(props, SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING, name); JS_FreeCString(js,name); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, JS_ToBool(js,argv[0])); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN, 1); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN, 1); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN, 1); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN, 1); + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN, 1); + + SDL_SetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN, 1); + + SDL_GPUDevice *gpu = SDL_CreateGPUDeviceWithProperties(props); + SDL_DestroyProperties(props); + if (!gpu) return JS_ThrowReferenceError("Could not create GPU device! %s", SDL_GetError()); global_gpu = gpu; @@ -3287,7 +3300,7 @@ JSC_CCALL(renderer_make_sprite_mesh, ret = JS_NewObject(js); JS_SetProperty(js, ret, pos_atom, make_gpu_buffer(js, posdata, sizeof(*posdata) * verts, JS_TYPED_ARRAY_FLOAT32, 2, 0,0)); JS_SetProperty(js, ret, uv_atom, make_gpu_buffer(js, uvdata, sizeof(*uvdata) * verts, JS_TYPED_ARRAY_FLOAT32, 2, 0,0)); - JS_SetProperty(js, ret, color_atom, make_gpu_buffer(js, colordata, sizeof(*colordata) * verts, JS_TYPED_ARRAY_FLOAT32, 0, 0,0)); + JS_SetProperty(js, ret, color_atom, make_gpu_buffer(js, colordata, sizeof(*colordata) * verts, JS_TYPED_ARRAY_FLOAT32, 4, 0,0)); JS_SetProperty(js, ret, indices_atom, make_quad_indices_buffer(js, quads)); JS_SetProperty(js, ret, vertices_atom, number2js(js, verts)); JS_SetProperty(js, ret, count_atom, number2js(js, count)); @@ -3699,11 +3712,7 @@ static JSValue js_gpu_make_pipeline(JSContext *js, JSValueConst self, int argc, else if (!strcmp(fmt_str, "float3")) format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3; else if (!strcmp(fmt_str, "float4")) format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4; else if (!strcmp(fmt_str, "color")) - // Engine handles color as 4 packed bytes -// format = SDL_GPU_VERTEXELEMENTFORMAT_UBYTE4_NORM; format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4; - // else fallback to FLOAT1 - JS_FreeCString(js, fmt_str); } JS_FreeValue(js, fmt_val); @@ -4057,6 +4066,8 @@ static JSValue js_gpu_make_shader(JSContext *js, JSValueConst self, int argc, JS JSValue jsfile = JS_GetPropertyStr(js,obj,"file"); const char *file = JS_ToCString(js,jsfile); JS_FreeValue(js,jsfile); + + SDL_GPUShaderCreateInfo info = {0}; // code JSValue code_val = JS_GetPropertyStr(js, obj, "code"); @@ -4078,51 +4089,21 @@ static JSValue js_gpu_make_shader(JSContext *js, JSValueConst self, int argc, JS JS_FreeValue(js, stage_val); // num_samplers - JSValue samplers_val = JS_GetPropertyStr(js, obj, "num_samplers"); - Uint32 samplers = 0; - JS_ToUint32(js, &samplers, samplers_val); - JS_FreeValue(js, samplers_val); - - // num_textures (storage textures) - JSValue textures_val = JS_GetPropertyStr(js, obj, "num_textures"); - Uint32 textures = 0; - JS_ToUint32(js, &textures, textures_val); - JS_FreeValue(js, textures_val); - - // num_storage_buffers - JSValue storage_bufs_val = JS_GetPropertyStr(js, obj, "num_storage_buffers"); - Uint32 storage_bufs = 0; - JS_ToUint32(js, &storage_bufs, storage_bufs_val); - JS_FreeValue(js, storage_bufs_val); - - // num_uniform_buffers - JSValue uniform_bufs_val = JS_GetPropertyStr(js, obj, "num_uniform_buffers"); - Uint32 uniform_bufs = 0; - JS_ToUint32(js, &uniform_bufs, uniform_bufs_val); - JS_FreeValue(js, uniform_bufs_val); - - // format - JSValue format_val = JS_GetPropertyStr(js, obj, "format"); - SDL_GPUShaderFormat format = js2SDL_GPUShaderFormat(js,format_val); - JS_FreeValue(js, format_val); + JS_GETPROP(js, info.num_samplers, obj, num_samplers, number) + JS_GETPROP(js, info.num_storage_textures, obj, num_textures, number) + JS_GETPROP(js, info.num_storage_buffers, obj, num_storage_buffers, number) + JS_GETPROP(js, info.num_uniform_buffers, obj, num_uniform_buffers, number) + JS_GETPROP(js, info.format, obj, format, SDL_GPUShaderFormat) JSValue entry_val = JS_GetPropertyStr(js,obj,"entrypoint"); - const char *entry = JS_ToCString(js,entry_val); + info.entrypoint = JS_ToCString(js,entry_val); JS_FreeValue(js,entry_val); - SDL_GPUShaderCreateInfo info = {0}; info.code_size = code_size; info.code = code_data; - info.entrypoint = entry; - info.format = format; - info.stage = stage; - info.num_samplers = samplers; - info.num_storage_textures = textures; - info.num_storage_buffers = storage_bufs; - info.num_uniform_buffers = uniform_bufs; info.props = 0; // No extension properties by default - JS_FreeCString(js,entry); + JS_FreeCString(js,info.entrypoint); SDL_GPUShader *shader = SDL_CreateGPUShader(gpu, &info); if (!shader) @@ -4418,8 +4399,34 @@ JSC_CCALL(renderpass_bind_storage_textures, ) +JSC_CCALL(renderpass_viewport, + SDL_GPURenderPass *pass = js2SDL_GPURenderPass(js,self); + rect r = js2rect(js,argv[0]); + SDL_GPUViewport vp ={0}; + vp.x = r.x; + vp.y = r.y; + vp.w = r.w; + vp.h = r.h; + vp.min_depth = 0; + vp.max_depth = 1; + SDL_SetGPUViewport(pass,&vp); +) + +JSC_CCALL(renderpass_scissor, + SDL_GPURenderPass *pass = js2SDL_GPURenderPass(js,self); + rect r = js2rect(js,argv[0]); + SDL_Rect rr; + rr.x = r.x; + rr.y = r.y; + rr.w = r.w; + rr.h = r.h; + SDL_SetGPUScissor(pass,&rr); +) + static const JSCFunctionListEntry js_SDL_GPURenderPass_funcs[] = { MIST_FUNC_DEF(renderpass, bind_pipeline, 1), + MIST_FUNC_DEF(renderpass, viewport, 1), + MIST_FUNC_DEF(renderpass, scissor, 1), MIST_FUNC_DEF(renderpass, draw, 4), MIST_FUNC_DEF(renderpass, draw_indexed, 5), MIST_FUNC_DEF(renderpass, end, 0), @@ -4583,21 +4590,21 @@ JSC_CCALL(cmd_camera, JS_GETPROP(js,far,camera,far,number) HMM_Mat4 proj; - if (ortho) + HMM_Mat4 view; + + shader_globals data = {0}; + + if (ortho) { proj = HMM_Orthographic_RH_NO( -size.x*0.5, 0.5*size.x, -size.y*0.5, 0.5*size.y, -1.0f, 1.0f ); - else + view = HMM_Translate((HMM_Vec3){ -transform->pos.x, -transform->pos.y, 0.0f }); + } + else { proj = HMM_Perspective_RH_NO(fov, aspect,near,far); - - // Build the view matrix (translate by -camera.pos) - HMM_Mat4 view; - if (ortho) - view = HMM_Translate((HMM_Vec3){ -transform->pos.x, -transform->pos.y, 0.0f }); - else { HMM_Mat4 camera_transform = HMM_Translate(transform->pos); camera_transform = HMM_MulM4(camera_transform, HMM_QToM4(transform->rotation)); // camera_transform = HMM_MulM4(camera_transform, HMM_Scale(transform->scale)); // don't bother w/ scale @@ -4605,7 +4612,6 @@ JSC_CCALL(cmd_camera, } // Update your shader globals - shader_globals data = {0}; data.world_to_projection = HMM_MulM4(proj, view); data.projection_to_world = HMM_InvGeneralM4(data.world_to_projection); data.camera_pos_world = transform->pos; diff --git a/source/thirdparty/imgui/imgui_impl_sdlgpu3.cpp b/source/thirdparty/imgui/imgui_impl_sdlgpu3.cpp index 643e6d93..e4b6381f 100644 --- a/source/thirdparty/imgui/imgui_impl_sdlgpu3.cpp +++ b/source/thirdparty/imgui/imgui_impl_sdlgpu3.cpp @@ -404,12 +404,12 @@ static void Imgui_ImplSDLGPU3_CreateShaders() } else if (strcmp(driver, "direct3d12") == 0) { - vertex_shader_info.format = SDL_GPU_SHADERFORMAT_DXBC; - vertex_shader_info.code = dxbc_vertex; - vertex_shader_info.code_size = sizeof(dxbc_vertex); - fragment_shader_info.format = SDL_GPU_SHADERFORMAT_DXBC; - fragment_shader_info.code = dxbc_fragment; - fragment_shader_info.code_size = sizeof(dxbc_fragment); + vertex_shader_info.format = SDL_GPU_SHADERFORMAT_DXIL; + vertex_shader_info.code = dxil_vertex; + vertex_shader_info.code_size = sizeof(dxil_vertex); + fragment_shader_info.format = SDL_GPU_SHADERFORMAT_DXIL; + fragment_shader_info.code = dxil_fragment; + fragment_shader_info.code_size = sizeof(dxil_fragment); } #ifdef __APPLE__ else diff --git a/source/thirdparty/imgui/imgui_impl_sdlgpu3_shaders.h b/source/thirdparty/imgui/imgui_impl_sdlgpu3_shaders.h index f792aa6a..ec378382 100644 --- a/source/thirdparty/imgui/imgui_impl_sdlgpu3_shaders.h +++ b/source/thirdparty/imgui/imgui_impl_sdlgpu3_shaders.h @@ -46,6 +46,674 @@ const uint8_t spirv_fragment[844] = { 0,0,26,0,0,0,87,0,5,0,7,0,0,0,28,0,0,0,23,0,0,0,27,0,0,0,133,0,5,0,7,0,0,0,29,0,0,0,18,0,0,0,28,0,0,0,62,0,3,0,9,0,0,0,29,0,0,0,253,0,1,0,56,0,1,0, }; +const uint8_t dxil_vertex[4056] = { + 0x44, 0x58, 0x42, 0x43, 0x1c, 0xc9, 0x66, 0x42, 0xd9, 0x4b, 0x50, 0x3e, + 0x3b, 0x5c, 0x7d, 0x0c, 0xc3, 0xe3, 0x43, 0xa6, 0x01, 0x00, 0x00, 0x00, + 0xd8, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, + 0x8c, 0x02, 0x00, 0x00, 0xe4, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x74, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, + 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, + 0x80, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x68, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x53, 0x56, 0x5f, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x53, 0x56, 0x30, 0x34, 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, + 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, + 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, + 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, + 0x44, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x44, 0x03, + 0x03, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x50, 0x06, 0x00, 0x00, + 0x60, 0x00, 0x01, 0x00, 0x94, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x06, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x8b, 0x01, 0x00, 0x00, + 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, + 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, + 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, + 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, + 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, + 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, + 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, + 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, + 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, + 0xb0, 0x87, 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, + 0x11, 0x31, 0xc6, 0x18, 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, + 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, + 0x6d, 0x8e, 0x20, 0x28, 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20, 0x60, + 0x18, 0x41, 0x18, 0x0e, 0x99, 0xb0, 0x87, 0xf8, 0xdd, 0x0d, 0x45, 0xc2, + 0x9c, 0x44, 0xd3, 0x81, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, + 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, + 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, + 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, + 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, + 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, + 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, + 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, + 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, + 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, + 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, + 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, + 0x40, 0x07, 0x43, 0x9e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x86, 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, + 0x12, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, + 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, + 0x0c, 0x05, 0x52, 0x06, 0xe5, 0x50, 0x12, 0xa5, 0x51, 0x04, 0x05, 0x51, + 0x1e, 0xa5, 0x50, 0x3c, 0x45, 0x41, 0xa5, 0x24, 0x46, 0x00, 0x8a, 0xa0, + 0x10, 0xca, 0x80, 0x5e, 0x0d, 0x10, 0x9d, 0x01, 0xa0, 0x3a, 0x03, 0x40, + 0x76, 0x2c, 0x87, 0x61, 0x40, 0x04, 0x84, 0x00, 0x00, 0x02, 0x03, 0x00, + 0x08, 0x04, 0x02, 0x01, 0x79, 0x18, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, + 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, + 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, + 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, + 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, + 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, 0x20, 0x36, 0x08, 0x04, + 0x41, 0xc1, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, 0x86, 0x03, 0x21, 0x26, + 0x08, 0x95, 0x46, 0x84, 0x2e, 0x0f, 0xae, 0xec, 0xab, 0x4a, 0xe8, 0x69, + 0x82, 0x40, 0x20, 0x1b, 0x10, 0x42, 0x59, 0x06, 0x62, 0x60, 0x80, 0x0d, + 0x41, 0xb3, 0x81, 0x00, 0x00, 0x07, 0x98, 0x20, 0x50, 0x19, 0x9d, 0x2a, + 0xa1, 0xa7, 0xaf, 0x3a, 0xb1, 0xb7, 0xaf, 0xba, 0xa9, 0xb1, 0x30, 0xb6, + 0xb2, 0x09, 0x02, 0x91, 0x4c, 0x10, 0x08, 0x65, 0x82, 0x40, 0x2c, 0x13, + 0x84, 0x07, 0x9b, 0x20, 0x10, 0xcc, 0x04, 0x81, 0x68, 0x36, 0x28, 0x48, + 0x24, 0x11, 0x13, 0x45, 0x55, 0xd6, 0x45, 0xa9, 0x4a, 0xe8, 0xe9, 0xab, + 0x4e, 0xec, 0xed, 0xab, 0x8e, 0x4a, 0x2e, 0xcc, 0x6d, 0x8e, 0x2d, 0x8c, + 0xae, 0x6c, 0x82, 0x40, 0x38, 0x1b, 0x14, 0x24, 0x93, 0xb4, 0x89, 0xa2, + 0x2a, 0xeb, 0xda, 0x30, 0x30, 0xd8, 0xb6, 0x61, 0x20, 0x20, 0x6e, 0x82, + 0x20, 0x00, 0x1b, 0x80, 0x0d, 0x03, 0xf1, 0x7d, 0x1b, 0x02, 0x30, 0xd8, + 0x30, 0x0c, 0x5e, 0x18, 0x4c, 0x10, 0xac, 0x6d, 0x43, 0x30, 0x06, 0x24, + 0xda, 0xc2, 0xd2, 0xdc, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, 0x49, + 0x11, 0x4d, 0x10, 0x8a, 0x69, 0x82, 0x50, 0x50, 0x1b, 0x02, 0x62, 0x82, + 0x50, 0x54, 0x1b, 0x04, 0x49, 0xda, 0xb0, 0x10, 0x66, 0x70, 0x06, 0x68, + 0x90, 0x06, 0x68, 0x30, 0xa8, 0x01, 0x81, 0x06, 0x6b, 0xb0, 0x21, 0x18, + 0x36, 0x2c, 0x83, 0x19, 0x9c, 0x01, 0x1a, 0xb4, 0x01, 0x1a, 0x0c, 0x6a, + 0x30, 0xa0, 0xc1, 0x1a, 0x6c, 0x08, 0xae, 0x09, 0x42, 0x61, 0x4d, 0x10, + 0x88, 0x67, 0x83, 0x20, 0xc5, 0xc1, 0x86, 0xe5, 0x32, 0x83, 0x33, 0x40, + 0x83, 0x37, 0x40, 0x83, 0x01, 0x0e, 0x2e, 0x34, 0x90, 0x83, 0x0d, 0x03, + 0x1b, 0xb8, 0xc1, 0x1c, 0x6c, 0x58, 0x08, 0x33, 0x38, 0x03, 0x34, 0x48, + 0x03, 0x35, 0x18, 0xe0, 0x80, 0x40, 0x03, 0x39, 0xd8, 0xb0, 0x0c, 0x66, + 0x70, 0x06, 0x68, 0xd0, 0x06, 0x6a, 0x30, 0xa8, 0xc1, 0x80, 0x06, 0x6b, + 0xc0, 0x65, 0xca, 0xea, 0x0b, 0xea, 0x6d, 0x2e, 0x8d, 0x2e, 0xed, 0xcd, + 0x6d, 0x82, 0x50, 0x5c, 0x1b, 0x96, 0xeb, 0x0e, 0xce, 0x00, 0x0f, 0xd2, + 0x00, 0x0e, 0x06, 0x38, 0xb8, 0xd0, 0x40, 0x0e, 0x36, 0x0c, 0x75, 0x60, + 0x07, 0x79, 0xb0, 0x61, 0xa0, 0x03, 0x3d, 0x00, 0x36, 0x14, 0x5e, 0x19, + 0xec, 0xc1, 0x03, 0xd0, 0x30, 0x63, 0x7b, 0x0b, 0xa3, 0x9b, 0x9b, 0x20, + 0x10, 0x10, 0x8b, 0x34, 0xb7, 0x39, 0xba, 0xb9, 0x09, 0x02, 0x11, 0xd1, + 0x98, 0x4b, 0x3b, 0xfb, 0x62, 0x23, 0xa3, 0x31, 0x97, 0x76, 0xf6, 0x35, + 0x47, 0x37, 0x41, 0x20, 0xa4, 0x0d, 0x48, 0x1f, 0xf8, 0xc1, 0x1f, 0x80, + 0x42, 0x28, 0x68, 0xa2, 0x30, 0x0a, 0x55, 0xd8, 0xd8, 0xec, 0xda, 0x5c, + 0xd2, 0xc8, 0xca, 0xdc, 0xe8, 0xa6, 0x04, 0x41, 0x15, 0x32, 0x3c, 0x17, + 0xbb, 0x32, 0xb9, 0xb9, 0xb4, 0x37, 0xb7, 0x29, 0x01, 0xd1, 0x84, 0x0c, + 0xcf, 0xc5, 0x2e, 0x8c, 0xcd, 0xae, 0x4c, 0x6e, 0x4a, 0x50, 0xd4, 0x21, + 0xc3, 0x73, 0x99, 0x43, 0x0b, 0x23, 0x2b, 0x93, 0x6b, 0x7a, 0x23, 0x2b, + 0x63, 0x9b, 0x12, 0x20, 0x65, 0xc8, 0xf0, 0x5c, 0xe4, 0xca, 0xe6, 0xde, + 0xea, 0xe4, 0xc6, 0xca, 0xe6, 0xa6, 0x04, 0x4e, 0x25, 0x32, 0x3c, 0x17, + 0xba, 0x3c, 0xb8, 0xb2, 0x20, 0x37, 0xb7, 0x37, 0xba, 0x30, 0xba, 0xb4, + 0x37, 0xb7, 0xb9, 0x29, 0x02, 0x17, 0x06, 0x75, 0xc8, 0xf0, 0x5c, 0xec, + 0xd2, 0xca, 0xee, 0x92, 0xc8, 0xa6, 0xe8, 0xc2, 0xe8, 0xca, 0xa6, 0x04, + 0x63, 0x50, 0x87, 0x0c, 0xcf, 0xa5, 0xcc, 0x8d, 0x4e, 0x2e, 0x0f, 0xea, + 0x2d, 0xcd, 0x8d, 0x6e, 0x6e, 0x4a, 0xb0, 0x07, 0x5d, 0xc8, 0xf0, 0x5c, + 0xc6, 0xde, 0xea, 0xdc, 0xe8, 0xca, 0xe4, 0xe6, 0xa6, 0x04, 0xa3, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, + 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, + 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, + 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, + 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, + 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, + 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, + 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, + 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, + 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x36, 0xb0, 0x0d, 0x97, + 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, + 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x04, 0xd2, 0x70, 0xf9, 0xce, + 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, 0xc3, 0x42, 0x58, 0xc0, + 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, 0x62, 0xf3, 0x50, 0x93, + 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x4d, 0x4e, + 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x01, 0x10, 0x0c, + 0x80, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, + 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x6e, 0x45, 0xa6, + 0x49, 0xbd, 0xa4, 0xc6, 0xb7, 0x5d, 0x46, 0x83, 0xf8, 0x1f, 0xe2, 0xee, + 0x44, 0x58, 0x49, 0x4c, 0xd0, 0x06, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, + 0xb4, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0xb8, 0x06, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, + 0x21, 0x0c, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, + 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, + 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x14, 0x45, 0x02, + 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, + 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, + 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, 0x91, 0x22, 0xc4, 0x50, + 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x29, 0x46, 0x06, + 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, 0x84, 0xf0, 0xff, 0xff, + 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x89, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x32, 0x22, 0x48, 0x09, + 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, 0x93, 0x22, 0xe3, + 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, 0x84, 0xa4, 0x4c, + 0x10, 0x5c, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, 0x00, 0xe6, 0x08, 0xc0, + 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, 0x42, 0xa6, 0x18, 0x80, + 0x10, 0x52, 0x06, 0xa1, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, 0x90, 0x7c, + 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x31, 0xc6, 0x18, + 0x54, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, + 0x16, 0x02, 0x05, 0xab, 0x10, 0x8a, 0x30, 0x42, 0x6d, 0x8e, 0x20, 0x28, + 0x06, 0x23, 0x85, 0x90, 0x47, 0x70, 0x20, 0x60, 0x18, 0x41, 0x18, 0x0e, + 0x99, 0xb0, 0x87, 0xf8, 0xdd, 0x0d, 0x45, 0xc2, 0x9c, 0x44, 0xd3, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, + 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, + 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, + 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, + 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, + 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, + 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x10, 0xc5, 0x50, 0x20, + 0x65, 0x50, 0x04, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0x8a, 0xa0, 0x10, + 0xca, 0x80, 0xea, 0x0c, 0x00, 0xd9, 0xb1, 0x1c, 0x86, 0x01, 0x11, 0x10, + 0x02, 0x00, 0x08, 0x0c, 0x00, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, + 0x46, 0x02, 0x13, 0xc4, 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, + 0xb3, 0x0b, 0xa3, 0x2b, 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, + 0xa1, 0xb1, 0xb1, 0x91, 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, + 0xb3, 0x11, 0xab, 0x49, 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, + 0x10, 0xc6, 0x06, 0x61, 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c, + 0x0a, 0x76, 0x73, 0x13, 0x04, 0x02, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, + 0xa8, 0x24, 0x02, 0x13, 0x04, 0x22, 0xd9, 0x80, 0x10, 0x0b, 0x33, 0x10, + 0x43, 0x03, 0x6c, 0x08, 0x9c, 0x0d, 0x04, 0x00, 0x3c, 0xc0, 0x04, 0xc1, + 0x9a, 0x36, 0x04, 0xd1, 0x04, 0x41, 0x00, 0x48, 0xb4, 0x85, 0xa5, 0xb9, + 0x11, 0xa1, 0x2a, 0xc2, 0x1a, 0x7a, 0x7a, 0x92, 0x22, 0x9a, 0x20, 0x14, + 0xcd, 0x04, 0xa1, 0x70, 0x36, 0x04, 0xc4, 0x04, 0xa1, 0x78, 0x26, 0x08, + 0x84, 0xb2, 0x41, 0xd0, 0xb4, 0x0d, 0x0b, 0x51, 0x59, 0x17, 0x76, 0x0d, + 0x19, 0x71, 0x6d, 0x1b, 0x82, 0x61, 0xc3, 0x32, 0x54, 0xd6, 0xd5, 0x5d, + 0x43, 0x36, 0x5c, 0xdb, 0x04, 0x81, 0x58, 0x36, 0x04, 0xdf, 0x04, 0xa1, + 0x80, 0x26, 0x08, 0x04, 0xb3, 0x41, 0xd0, 0xc4, 0x60, 0xc3, 0xf2, 0x55, + 0xd6, 0x05, 0x06, 0xd7, 0x10, 0x06, 0xdf, 0x35, 0x06, 0x1b, 0x06, 0xce, + 0x23, 0x83, 0x0d, 0x0b, 0x51, 0x59, 0x17, 0x96, 0x0d, 0x61, 0x40, 0x5c, + 0x63, 0xb0, 0x61, 0x19, 0x2a, 0xeb, 0xea, 0xb2, 0x21, 0x1b, 0xae, 0x8d, + 0xcb, 0x94, 0xd5, 0x17, 0xd4, 0xdb, 0x5c, 0x1a, 0x5d, 0xda, 0x9b, 0xdb, + 0x04, 0xa1, 0x88, 0x36, 0x2c, 0x1f, 0x1a, 0x58, 0x69, 0x80, 0x85, 0xc1, + 0x10, 0x06, 0xdf, 0x35, 0x06, 0x1b, 0x06, 0x33, 0x38, 0x03, 0x35, 0xd8, + 0x30, 0x94, 0xc1, 0x1a, 0x00, 0x1b, 0x8a, 0x89, 0x62, 0x03, 0x08, 0xa8, + 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, + 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, + 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, + 0x72, 0x53, 0x02, 0xa3, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, + 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x20, 0x29, 0x43, 0x86, + 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, + 0x78, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, 0x95, 0xdd, 0x25, 0x91, 0x4d, + 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0xa2, 0x3a, 0x64, 0x78, 0x2e, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x53, 0x02, + 0x36, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, + 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, + 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, + 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, + 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, + 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, + 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, + 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, + 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, + 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, + 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, + 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, + 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, + 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, + 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, + 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, + 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, + 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, + 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, + 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, + 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, + 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, + 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, + 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, + 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x36, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, + 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x04, + 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x11, 0x01, 0x4c, 0x44, 0x08, 0x34, + 0xc3, 0x42, 0x58, 0xc0, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x8b, 0x03, 0x0c, + 0x62, 0xf3, 0x50, 0x93, 0x5f, 0xdc, 0xb6, 0x09, 0x54, 0xc3, 0xe5, 0x3b, + 0x8f, 0x2f, 0x4d, 0x4e, 0x44, 0xa0, 0xd4, 0xf4, 0x50, 0x93, 0x5f, 0xdc, + 0xb6, 0x01, 0x10, 0x0c, 0x80, 0x34, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0xf4, 0x46, 0x00, 0xa8, 0x94, 0x00, 0x91, 0xb2, + 0x2b, 0x85, 0x42, 0x98, 0x01, 0x28, 0x39, 0x1a, 0x63, 0x04, 0x20, 0x08, + 0x82, 0xf8, 0x37, 0x02, 0x30, 0x46, 0x00, 0x82, 0x20, 0x08, 0x82, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0x69, + 0xc4, 0x83, 0x61, 0xca, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xde, + 0x41, 0x65, 0x91, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x87, + 0x54, 0xda, 0x72, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x01, 0x06, + 0x89, 0xb5, 0x49, 0xc8, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x61, + 0xa0, 0x5c, 0x5c, 0x94, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x21, + 0x06, 0x8b, 0xd7, 0x55, 0xca, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, + 0x63, 0xc0, 0x7c, 0xde, 0xb3, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, + 0x41, 0x06, 0xcd, 0xf7, 0x5d, 0xcc, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, + 0x18, 0x65, 0xe0, 0x80, 0x01, 0x18, 0x44, 0xcd, 0x88, 0xc1, 0x01, 0x80, + 0x20, 0x18, 0x34, 0x64, 0x10, 0x25, 0x61, 0x30, 0x9a, 0x10, 0x00, 0xa3, + 0x09, 0x42, 0x60, 0x42, 0x21, 0x1f, 0x13, 0x0a, 0xf9, 0x8c, 0x26, 0x14, + 0xc2, 0x68, 0x82, 0x31, 0x18, 0x21, 0xc0, 0xc7, 0x04, 0x02, 0x3e, 0x36, + 0x05, 0xf1, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xe4, 0x0d, 0xb4, + 0x35, 0x58, 0x83, 0x31, 0x90, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, + 0x79, 0x03, 0x6d, 0x0d, 0xd6, 0x80, 0x8b, 0x46, 0x0c, 0x12, 0x00, 0x04, + 0xc1, 0x00, 0x79, 0x03, 0x6d, 0x0d, 0xd6, 0x40, 0x0c, 0xa0, 0x11, 0x83, + 0x04, 0x00, 0x41, 0x30, 0x40, 0xde, 0x40, 0x5b, 0x83, 0x35, 0x00, 0x83, + 0x67, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x90, 0x37, 0xd0, 0xd8, 0x60, + 0x0d, 0xc6, 0xc0, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xe4, 0x0d, + 0x34, 0x36, 0x58, 0x03, 0xae, 0x19, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, + 0xe4, 0x0d, 0x34, 0x33, 0x58, 0x83, 0x31, 0x18, 0x46, 0x0c, 0x12, 0x00, + 0x04, 0xc1, 0x00, 0x79, 0x03, 0xcd, 0x0c, 0xd6, 0x80, 0x0b, 0x46, 0x0c, + 0x12, 0x00, 0x04, 0xc1, 0x00, 0x79, 0x03, 0xcd, 0x0c, 0xd6, 0x40, 0x0c, + 0xaa, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xde, 0x40, 0x33, 0x83, + 0x35, 0x00, 0x03, 0x0b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const uint8_t dxil_fragment[3884] = { + 0x44, 0x58, 0x42, 0x43, 0xf9, 0x1e, 0xd8, 0xef, 0xca, 0x7f, 0xcf, 0x8a, + 0x86, 0xac, 0x74, 0x0e, 0xe6, 0xcb, 0xf0, 0x0c, 0x01, 0x00, 0x00, 0x00, + 0x2c, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, + 0xd8, 0x01, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x5c, 0x08, 0x00, 0x00, + 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x54, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x00, 0x00, 0x00, + 0x4f, 0x53, 0x47, 0x31, 0x34, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x53, 0x56, 0x5f, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0x00, 0x00, + 0x50, 0x53, 0x56, 0x30, 0xec, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, + 0x44, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x6d, + 0x61, 0x69, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x02, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x42, 0x00, + 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x44, 0x10, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x60, 0x06, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x06, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, + 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, + 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, + 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, + 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, + 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, + 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, + 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, + 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, + 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, + 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, + 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, + 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, + 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42, + 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38, + 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, + 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, + 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, + 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, + 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, 0x3c, 0xcc, 0xc3, 0x2f, + 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, 0xcc, 0x24, 0x06, 0xe3, + 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, + 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, + 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, + 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, + 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, + 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0xd0, + 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, + 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, + 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, + 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, + 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, + 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, + 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x0c, 0x45, 0x50, 0x12, + 0x65, 0x50, 0x1e, 0x85, 0x50, 0x2c, 0x54, 0x4a, 0x62, 0x04, 0xa0, 0x08, + 0x0a, 0xa1, 0x40, 0xc8, 0xce, 0x00, 0x10, 0x9e, 0x01, 0xa0, 0x3c, 0x16, + 0x62, 0x10, 0x81, 0x40, 0x20, 0xcf, 0x03, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x7d, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, + 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, + 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, + 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, + 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, + 0x20, 0x36, 0x08, 0x04, 0x41, 0x01, 0x6e, 0x6e, 0x82, 0x40, 0x1c, 0x1b, + 0x86, 0x03, 0x21, 0x26, 0x08, 0xd6, 0x44, 0x64, 0x8e, 0xaa, 0x0c, 0x8f, + 0xae, 0x4e, 0xae, 0x6c, 0x82, 0x40, 0x20, 0x13, 0x04, 0x22, 0xd9, 0x20, + 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, 0x86, 0x18, 0x18, 0xc2, 0xd9, 0x10, + 0x3c, 0x13, 0x04, 0x8c, 0x62, 0xf4, 0x35, 0x47, 0x55, 0x86, 0x47, 0x57, + 0x27, 0x57, 0xf6, 0x35, 0x17, 0xd6, 0x06, 0xc7, 0x56, 0x26, 0xb7, 0x01, + 0x21, 0x22, 0x89, 0x21, 0x06, 0x02, 0xd8, 0x10, 0x4c, 0x1b, 0x08, 0x08, + 0x00, 0xa8, 0x09, 0x82, 0x00, 0x6c, 0x00, 0x36, 0x0c, 0xc4, 0x75, 0x6d, + 0x08, 0xb0, 0x0d, 0xc3, 0x60, 0x65, 0x13, 0x84, 0xac, 0xda, 0x10, 0x6c, + 0x24, 0xda, 0xc2, 0xd2, 0xdc, 0x88, 0x50, 0x15, 0x61, 0x0d, 0x3d, 0x3d, + 0x49, 0x11, 0x4d, 0x10, 0x0a, 0x67, 0x82, 0x50, 0x3c, 0x1b, 0x02, 0x62, + 0x82, 0x50, 0x40, 0x13, 0x84, 0x22, 0x9a, 0x20, 0x10, 0xca, 0x04, 0x81, + 0x58, 0x36, 0x08, 0x64, 0x50, 0x06, 0x1b, 0x16, 0xc2, 0xfb, 0xc0, 0x20, + 0x0c, 0xc4, 0x60, 0x18, 0x03, 0x02, 0x0c, 0xcc, 0x60, 0x43, 0x30, 0x6c, + 0x10, 0xc8, 0x80, 0x0c, 0x36, 0x2c, 0x83, 0xf7, 0x81, 0x01, 0x1a, 0x88, + 0xc1, 0x20, 0x06, 0x03, 0x18, 0xa4, 0xc1, 0x06, 0xe1, 0x0c, 0xd4, 0x80, + 0xc9, 0x94, 0xd5, 0x17, 0x55, 0x98, 0xdc, 0x59, 0x19, 0xdd, 0x04, 0xa1, + 0x90, 0x36, 0x2c, 0x04, 0x1b, 0x7c, 0x6d, 0x10, 0x06, 0x60, 0x30, 0x8c, + 0x01, 0x01, 0x06, 0x66, 0xb0, 0x21, 0x70, 0x83, 0x0d, 0xc3, 0x1a, 0xbc, + 0x01, 0xb0, 0xa1, 0xb0, 0x3a, 0x38, 0xa8, 0x00, 0x1a, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x73, 0x13, 0x04, 0x82, 0x61, 0x91, 0xe6, 0x36, 0x47, 0x37, + 0x37, 0x41, 0x20, 0x1a, 0x1a, 0x73, 0x69, 0x67, 0x5f, 0x6c, 0x64, 0x34, + 0xe6, 0xd2, 0xce, 0xbe, 0xe6, 0xe8, 0x88, 0xd0, 0x95, 0xe1, 0x7d, 0xb9, + 0xbd, 0xc9, 0xb5, 0x6d, 0x50, 0xe4, 0x60, 0x0e, 0xe8, 0xa0, 0x0e, 0xec, + 0x00, 0xb9, 0x83, 0x39, 0xc0, 0x83, 0xa1, 0x0a, 0x1b, 0x9b, 0x5d, 0x9b, + 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, 0xa8, 0x42, 0x86, 0xe7, + 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, 0x25, 0x20, 0x9a, 0x90, + 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, 0x4d, 0x09, 0x8a, 0x3a, + 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x6f, 0x64, + 0x65, 0x6c, 0x53, 0x02, 0xa4, 0x0c, 0x19, 0x9e, 0x8b, 0x5c, 0xd9, 0xdc, + 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0x80, 0xaa, 0x44, 0x86, 0xe7, + 0x42, 0x97, 0x07, 0x57, 0x16, 0xe4, 0xe6, 0xf6, 0x46, 0x17, 0x46, 0x97, + 0xf6, 0xe6, 0x36, 0x37, 0x25, 0xc8, 0xea, 0x90, 0xe1, 0xb9, 0xd8, 0xa5, + 0x95, 0xdd, 0x25, 0x91, 0x4d, 0xd1, 0x85, 0xd1, 0x95, 0x4d, 0x09, 0xb6, + 0x3a, 0x64, 0x78, 0x2e, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x53, 0x02, 0x38, 0xe8, 0x42, 0x86, 0xe7, 0x32, 0xf6, + 0x56, 0xe7, 0x46, 0x57, 0x26, 0x37, 0x37, 0x25, 0xc0, 0x03, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, + 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, + 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, + 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, + 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, + 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, 0x21, 0x07, 0x7c, 0x70, + 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, 0x08, 0x07, 0x79, 0x60, + 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, 0x98, 0x81, 0x3c, 0xe4, + 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, 0xf0, 0x00, 0x00, 0x00, + 0x71, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x46, 0x20, 0x0d, 0x97, + 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, + 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, 0xc0, 0x20, 0x36, 0x0f, + 0x35, 0xf9, 0xc5, 0x6d, 0xdb, 0x00, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0x12, + 0xc0, 0x3c, 0x0b, 0xe1, 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, + 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, 0xd4, 0xe4, 0x17, 0xb7, + 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xab, 0x99, 0x02, 0x6f, 0x30, 0x68, 0xb3, 0x31, 0x43, 0x41, 0xba, 0x15, + 0xea, 0xf6, 0x26, 0xa8, 0x44, 0x58, 0x49, 0x4c, 0xc8, 0x06, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0xb2, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb0, 0x06, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00, + 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x52, 0x88, 0x48, 0x90, 0x14, 0x20, + 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, + 0x91, 0x22, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, + 0x04, 0x29, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, + 0x84, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x6d, 0x30, 0x86, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x00, 0x09, 0xa8, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, + 0x32, 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, + 0x04, 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, + 0x0b, 0x84, 0xa4, 0x4c, 0x10, 0x68, 0x23, 0x00, 0x25, 0x00, 0x14, 0x66, + 0x00, 0xe6, 0x08, 0xc0, 0x60, 0x8e, 0x00, 0x29, 0xc6, 0x20, 0x84, 0x14, + 0x42, 0xa6, 0x18, 0x80, 0x10, 0x52, 0x06, 0xa1, 0x9b, 0x86, 0xcb, 0x9f, + 0xb0, 0x87, 0x90, 0xfc, 0x95, 0x90, 0x56, 0x62, 0xf2, 0x8b, 0xdb, 0x46, + 0xc5, 0x18, 0x63, 0x10, 0x2a, 0xf7, 0x0c, 0x97, 0x3f, 0x61, 0x0f, 0x21, + 0xf9, 0x21, 0xd0, 0x0c, 0x0b, 0x81, 0x82, 0x55, 0x18, 0x45, 0x18, 0x1b, + 0x63, 0x0c, 0x42, 0xc8, 0xa0, 0x36, 0x47, 0x10, 0x14, 0x83, 0x91, 0x42, + 0xc8, 0x23, 0x38, 0x10, 0x30, 0x8c, 0x40, 0x0c, 0x33, 0xb5, 0xc1, 0x38, + 0xb0, 0x43, 0x38, 0xcc, 0xc3, 0x3c, 0xb8, 0x01, 0x2d, 0x94, 0x03, 0x3e, + 0xd0, 0x43, 0x3d, 0xc8, 0x43, 0x39, 0xc8, 0x01, 0x29, 0xf0, 0x81, 0x3d, + 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, 0xc8, 0x03, 0x1f, 0x98, 0x03, 0x3b, + 0xbc, 0x43, 0x38, 0xd0, 0x03, 0x1b, 0x80, 0x01, 0x1d, 0xf8, 0x01, 0x18, + 0xf8, 0x81, 0x1e, 0xe8, 0x41, 0x3b, 0xa4, 0x03, 0x3c, 0xcc, 0xc3, 0x2f, + 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xa0, 0x80, 0xcc, 0x24, 0x06, 0xe3, + 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, + 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, + 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, + 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x74, 0xe0, 0x07, 0x60, + 0xe0, 0x07, 0x48, 0x98, 0x94, 0xea, 0x4d, 0xd2, 0x14, 0x51, 0xc2, 0xe4, + 0xb3, 0x00, 0xf3, 0x2c, 0x44, 0xc4, 0x4e, 0xc0, 0x44, 0xa0, 0x80, 0xd0, + 0x4d, 0x04, 0x02, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, + 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, + 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, + 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, + 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, + 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, + 0x3c, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x79, 0x10, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0xe4, 0x81, 0x80, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x0b, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x22, 0x25, 0x30, 0x02, 0x50, 0x10, 0xc5, 0x50, 0x04, + 0x25, 0x51, 0x06, 0xe5, 0x41, 0xa5, 0x24, 0x46, 0x00, 0x8a, 0xa0, 0x10, + 0x0a, 0x84, 0xec, 0x0c, 0x00, 0xe1, 0x19, 0x00, 0xca, 0x63, 0x21, 0x06, + 0x11, 0x08, 0x04, 0xf2, 0x3c, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x5a, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, + 0x31, 0x20, 0xc3, 0x1b, 0x43, 0x81, 0x93, 0x4b, 0xb3, 0x0b, 0xa3, 0x2b, + 0x4b, 0x01, 0x89, 0x71, 0xc1, 0x71, 0x81, 0x71, 0xa1, 0xb1, 0xb1, 0x91, + 0x01, 0x41, 0xa1, 0x89, 0xb1, 0x31, 0x0b, 0x13, 0xb3, 0x11, 0xab, 0x49, + 0xd9, 0x10, 0x04, 0x13, 0x04, 0xa2, 0x98, 0x20, 0x10, 0xc6, 0x06, 0x61, + 0x20, 0x26, 0x08, 0xc4, 0xb1, 0x41, 0x18, 0x0c, 0x0a, 0x70, 0x73, 0x13, + 0x04, 0x02, 0xd9, 0x30, 0x20, 0x09, 0x31, 0x41, 0xb0, 0x24, 0x02, 0x13, + 0x04, 0x22, 0x99, 0x20, 0x10, 0xca, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, + 0xc2, 0x34, 0xc4, 0xd0, 0x10, 0xcf, 0x86, 0x00, 0x9a, 0x20, 0x60, 0xd3, + 0x06, 0x84, 0x90, 0x98, 0x86, 0x18, 0x08, 0x60, 0x43, 0x30, 0x6d, 0x20, + 0x22, 0x00, 0xa0, 0x26, 0x08, 0x19, 0xb5, 0x21, 0xb0, 0x26, 0x08, 0x02, + 0x40, 0xa2, 0x2d, 0x2c, 0xcd, 0x8d, 0x08, 0x55, 0x11, 0xd6, 0xd0, 0xd3, + 0x93, 0x14, 0xd1, 0x04, 0xa1, 0x68, 0x26, 0x08, 0x85, 0xb3, 0x21, 0x20, + 0x26, 0x08, 0xc5, 0x33, 0x41, 0x28, 0xa0, 0x09, 0x02, 0xb1, 0x4c, 0x10, + 0x08, 0x66, 0x83, 0x00, 0x06, 0x61, 0xb0, 0x61, 0x21, 0xb4, 0x8d, 0xeb, + 0xbc, 0xe1, 0x23, 0x38, 0x31, 0xd8, 0x10, 0x0c, 0x1b, 0x04, 0x30, 0x00, + 0x83, 0x0d, 0xcb, 0xa0, 0x6d, 0x1c, 0x19, 0x78, 0x83, 0x37, 0x70, 0x65, + 0xb0, 0x41, 0x18, 0x03, 0x33, 0x60, 0x32, 0x65, 0xf5, 0x45, 0x15, 0x26, + 0x77, 0x56, 0x46, 0x37, 0x41, 0x28, 0xa2, 0x0d, 0x0b, 0x81, 0x06, 0x5b, + 0x1a, 0x74, 0xdc, 0xf0, 0x11, 0x9c, 0x18, 0x6c, 0x08, 0xd4, 0x60, 0xc3, + 0x70, 0x06, 0x6b, 0x00, 0x6c, 0x28, 0xb0, 0x8c, 0x0d, 0x2a, 0xa0, 0x0a, + 0x1b, 0x9b, 0x5d, 0x9b, 0x4b, 0x1a, 0x59, 0x99, 0x1b, 0xdd, 0x94, 0x20, + 0xa8, 0x42, 0x86, 0xe7, 0x62, 0x57, 0x26, 0x37, 0x97, 0xf6, 0xe6, 0x36, + 0x25, 0x20, 0x9a, 0x90, 0xe1, 0xb9, 0xd8, 0x85, 0xb1, 0xd9, 0x95, 0xc9, + 0x4d, 0x09, 0x8c, 0x3a, 0x64, 0x78, 0x2e, 0x73, 0x68, 0x61, 0x64, 0x65, + 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x53, 0x82, 0xa4, 0x0c, 0x19, 0x9e, + 0x8b, 0x5c, 0xd9, 0xdc, 0x5b, 0x9d, 0xdc, 0x58, 0xd9, 0xdc, 0x94, 0x80, + 0xaa, 0x43, 0x86, 0xe7, 0x62, 0x97, 0x56, 0x76, 0x97, 0x44, 0x36, 0x45, + 0x17, 0x46, 0x57, 0x36, 0x25, 0xb0, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, + 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xd8, + 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, + 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, + 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, + 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, + 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, + 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, + 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, + 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, + 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, + 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, + 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, + 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, + 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, + 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, + 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, + 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, + 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, + 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, + 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, + 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, + 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, + 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x8c, 0xc8, + 0x21, 0x07, 0x7c, 0x70, 0x03, 0x72, 0x10, 0x87, 0x73, 0x70, 0x03, 0x7b, + 0x08, 0x07, 0x79, 0x60, 0x87, 0x70, 0xc8, 0x87, 0x77, 0xa8, 0x07, 0x7a, + 0x98, 0x81, 0x3c, 0xe4, 0x80, 0x0f, 0x6e, 0x40, 0x0f, 0xe5, 0xd0, 0x0e, + 0xf0, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x46, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, + 0x40, 0x33, 0x2c, 0x84, 0x05, 0x4c, 0xc3, 0xe5, 0x3b, 0x8f, 0xbf, 0x38, + 0xc0, 0x20, 0x36, 0x0f, 0x35, 0xf9, 0xc5, 0x6d, 0xdb, 0x00, 0x34, 0x5c, + 0xbe, 0xf3, 0xf8, 0x12, 0xc0, 0x3c, 0x0b, 0xe1, 0x17, 0xb7, 0x6d, 0x02, + 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4b, 0x93, 0x13, 0x11, 0x28, 0x35, 0x3d, + 0xd4, 0xe4, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf4, 0x46, 0x00, 0x88, + 0xcc, 0x00, 0x14, 0x42, 0x29, 0x94, 0x5c, 0xe1, 0x51, 0x29, 0x83, 0x12, + 0xa0, 0x31, 0x03, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0x00, 0x69, + 0x05, 0x84, 0x61, 0xc9, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x40, 0x9b, + 0x41, 0x64, 0x99, 0x32, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x97, + 0x6c, 0x9a, 0xa4, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x01, 0x06, + 0x0a, 0xb7, 0x15, 0xcb, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0x61, + 0xb0, 0x70, 0x1c, 0xc5, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0x21, + 0x06, 0x4c, 0xd7, 0x1d, 0xcd, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, + 0x63, 0xd0, 0x78, 0x5e, 0xe5, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, + 0x41, 0x06, 0xce, 0xf7, 0x29, 0xcf, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, + 0x34, 0x63, 0xc0, 0x20, 0x87, 0x51, 0x24, 0x09, 0x18, 0x80, 0x01, 0x94, + 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, + 0x02, 0x31, 0x18, 0x91, 0xc8, 0xc7, 0x88, 0x44, 0x3e, 0x46, 0x24, 0xf2, + 0x31, 0x22, 0x91, 0xcf, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x20, 0x6d, + 0x70, 0xa5, 0x41, 0x1a, 0x84, 0x01, 0x31, 0x62, 0x90, 0x00, 0x20, 0x08, + 0x06, 0x48, 0x1b, 0x5c, 0x69, 0x90, 0x06, 0xd3, 0x30, 0x62, 0x90, 0x00, + 0x20, 0x08, 0x06, 0x48, 0x1b, 0x5c, 0x69, 0x90, 0x06, 0x60, 0x20, 0x8c, + 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd2, 0x06, 0x57, 0x1a, 0xa4, 0x01, + 0x15, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + const uint8_t dxbc_vertex[1064] = { 68,88,66,67,32,50,127,204,241,196,165,104,216,114,216,116,220,164,29,45,1,0,0,0,40,4,0,0,5,0,0,0,52,0,0,0,136,1,0,0,236,1,0,0,92,2,0,0,140,3,0,0,82,68,69,70,76,1,0,0,1,0,0,0,116,0, 0,0,1,0,0,0,60,0,0,0,1,5,254,255,0,5,0,0,34,1,0,0,19,19,68,37,60,0,0,0,24,0,0,0,40,0,0,0,40,0,0,0,36,0,0,0,12,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,