1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html lang="en"> 3 <head> 4 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 5 <title>Mesa Release Notes</title> 6 <link rel="stylesheet" type="text/css" href="mesa.css"> 7 </head> 8 <body> 9 10 <h1>Mesa 7.9.1 Release Notes / January 7, 2011</h1> 11 12 <p> 13 Mesa 7.9.1 is a bug fix release which fixes bugs found since the 7.9 release. 14 </p> 15 <p> 16 Mesa 7.9.1 implements the OpenGL 2.1 API, but the version reported by 17 glGetString(GL_VERSION) depends on the particular driver being used. 18 Some drivers don't support all the features required in OpenGL 2.1. 19 </p> 20 <p> 21 See the <a href="install.html">Compiling/Installing page</a> for prerequisites 22 for DRI hardware acceleration. 23 </p> 24 25 26 <h2>MD5 checksums</h2> 27 <pre> 28 78422843ea875ad4eac35b9b8584032b MesaLib-7.9.1.tar.gz 29 07dc6cfb5928840b8b9df5bd1b3ae434 MesaLib-7.9.1.tar.bz2 30 c8eaea5b3c3d6dee784bd8c2db91c80f MesaLib-7.9.1.zip 31 ee9ecae4ca56fbb2d14dc15e3a0a7640 MesaGLUT-7.9.1.tar.gz 32 41fc477d524e7dc5c84da8ef22422bea MesaGLUT-7.9.1.tar.bz2 33 90b287229afdf19317aa989d19462e7a MesaGLUT-7.9.1.zip 34 </pre> 35 36 37 <h2>New features</h2> 38 <p>None.</p> 39 40 <h2>Bug fixes</h2> 41 <p>This list is likely incomplete.</p> 42 <ul> 43 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=28800">Bug 28800</a> - [r300c, r300g] Texture corruption with World of Warcraft</li> 44 45 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=29420">Bug 29420</a> - Amnesia / HPL2 RendererFeatTest - not rendering correctly</li> 46 47 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=29946">Bug 29946</a> - [swrast] piglit valgrind glsl-array-bounds-04 fails</li> 48 49 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=30261">Bug 30261</a> - [GLSL 1.20] allowing inconsistent invariant declaration between two vertex shaders</li> 50 51 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=30632">Bug 30632</a> - [softpipe] state_tracker/st_manager.c:489: st_context_notify_invalid_framebuffer: Assertion `stfb && stfb->iface == stfbi' failed.</li> 52 53 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=30694">Bug 30694</a> - wincopy will crash on Gallium drivers when going to front buffer</li> 54 55 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=30787">Bug 30787</a> - Invalid asm shader does not generate draw-time error when used with GLSL shader</li> 56 57 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=30993">Bug 30993</a> - getFramebufferAttachmentParameteriv wrongly generates error</li> 58 59 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31101">Bug 31101</a> - [glsl2] abort() in ir_validate::visit_enter(ir_assignment *ir)</li> 60 61 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31193">Bug 31193</a> - [regression] aa43176e break water reflections</li> 62 63 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31194">Bug 31194</a> - The mesa meta save/restore code doesn't ref the current GLSL program</li> 64 65 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31371">Bug 31371</a> - glslparsertest: ir.cpp:358: ir_constant::ir_constant(const glsl_type*, const ir_constant_data*): Assertion `(type->base_type >= 0) && (type->base_type <= 3)' failed.</li> 66 67 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31439">Bug 31439</a> - Crash in glBufferSubData() with size == 0</li> 68 69 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31495">Bug 31495</a> - [i965 gles2c bisected] OpenGL ES 2.0 conformance GL2Tests_GetBIFD_input.run regressed</li> 70 71 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31514">Bug 31514</a> - isBuffer returns true for unbound buffers</li> 72 73 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31560">Bug 31560</a> - [tdfx] tdfx_tex.c:702: error: 'const struct gl_color_table' has no member named 'Format'</li> 74 75 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31617">Bug 31617</a> - Radeon/Compiz: 'failed to attach dri2 front buffer', error case not handled</li> 76 77 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31648">Bug 31648</a> - [GLSL] array-struct-array gets assertion: `(size >= 1) && (size <= 4)' failed.</li> 78 79 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31650">Bug 31650</a> - [GLSL] varying gl_TexCoord fails to be re-declared to different size in the second shader</li> 80 81 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31673">Bug 31673</a> - GL_FRAGMENT_PRECISION_HIGH preprocessor macro undefined in GLSL ES</li> 82 83 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31690">Bug 31690</a> - i915 shader compiler fails to flatten if in Aquarium webgl demo.</li> 84 85 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31832">Bug 31832</a> - [i915] Bad renderbuffer format: 21</li> 86 87 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31841">Bug 31841</a> - [drm:radeon_cs_ioctl] *ERROR* Invalid command stream !</li> 88 89 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31894">Bug 31894</a> - Writing to gl_PointSize with GLES2 corrupts other varyings</li> 90 91 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31909">Bug 31909</a> - [i965] brw_fs.cpp:1461: void fs_visitor::emit_bool_to_cond_code(ir_rvalue*): Assertion `expr->operands[i]->type->is_scalar()' failed.</li> 92 93 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31934">Bug 31934</a> - [gallium] Mapping empty buffer object causes SIGSEGV</li> 94 95 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31983">Bug 31983</a> - [i915 gles2] "if (expression with builtin/varying variables) discard" breaks linkage</li> 96 97 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31985">Bug 31985</a> - [GLSL 1.20] initialized uniform array considered as "unsized"</li> 98 99 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=31987">Bug 31987</a> - [gles2] if input a wrong pname(GL_NONE) to glGetBoolean, it will not case GL_INVALID_ENUM</li> 100 101 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32035">Bug 32035</a> - [GLSL bisected] comparing unsized array gets segfault</li> 102 103 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32070">Bug 32070</a> - llvmpipe renders stencil demo incorrectly</li> 104 105 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32273">Bug 32273</a> - assertion fails when starting vdrift 2010 release with shaders enabled</li> 106 107 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32287">Bug 32287</a> - [bisected GLSL] float-int failure</li> 108 109 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32311">Bug 32311</a> - [965 bisected] Array look-ups broken on GM45</li> 110 111 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32520">Bug 32520</a> - [gles2] glBlendFunc(GL_ZERO, GL_DST_COLOR) will result in GL_INVALID_ENUM</li> 112 113 <li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=32825">Bug 32825</a> - egl_glx driver completely broken in 7.9 branch [fix in master]</li> 114 </ul> 115 116 117 <h2>Changes</h2> 118 <p>The full set of changes can be viewed by using the following GIT command:</p> 119 120 <pre> 121 git log mesa-7.9..mesa-7.9.1 122 </pre> 123 124 <p>Alex Deucher (5):</p> 125 <ul> 126 <li>r100: revalidate after radeon_update_renderbuffers</li> 127 <li>r600c: add missing radeon_prepare_render() call on evergreen</li> 128 <li>r600c: properly align mipmaps to group size</li> 129 <li>gallium/egl: fix r300 vs r600 loading</li> 130 <li>r600c: fix some opcodes on evergreen</li> 131 </ul> 132 133 <p>Aras Pranckevicius (2):</p> 134 <ul> 135 <li>glsl: fix crash in loop analysis when some controls can't be determined</li> 136 <li>glsl: fix matrix type check in ir_algebraic</li> 137 </ul> 138 139 <p>Brian Paul (27):</p> 140 <ul> 141 <li>swrast: fix choose_depth_texture_level() to respect mipmap filtering state</li> 142 <li>st/mesa: replace assertion w/ conditional in framebuffer invalidation</li> 143 <li>egl/i965: include inline_wrapper_sw_helper.h</li> 144 <li>mesa: Add missing else in do_row_3D</li> 145 <li>mesa: add missing formats in _mesa_format_to_type_and_comps()</li> 146 <li>mesa: handle more pixel types in mipmap generation code</li> 147 <li>mesa: make glIsBuffer() return false for never bound buffers</li> 148 <li>mesa: fix glDeleteBuffers() regression</li> 149 <li>swrast: init alpha value to 1.0 in opt_sample_rgb_2d()</li> 150 <li>meta: Mask Stencil.Clear against stencilMax in _mesa_meta_Clear</li> 151 <li>st/mesa: fix mapping of zero-sized buffer objects</li> 152 <li>mesa: check for posix_memalign() errors</li> 153 <li>llvmpipe: fix broken stencil writemask</li> 154 <li>mesa: fix GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME query</li> 155 <li>mesa: return GL_FRAMEBUFFER_DEFAULT as FBO attachment type</li> 156 <li>mesa: make glGet*(GL_NONE) generate GL_INVALID_ENUM</li> 157 <li>mesa: test for cube map completeness in glGenerateMipmap()</li> 158 <li>tnl: Initialize gl_program_machine memory in run_vp.</li> 159 <li>tnl: a better way to initialize the gl_program_machine memory</li> 160 <li>mesa, st/mesa: disable GL_ARB_geometry_shader4</li> 161 <li>glsl: fix off by one in register index assertion</li> 162 <li>st/mesa: fix mipmap generation bug</li> 163 <li>glsl: new glsl_strtod() wrapper to fix decimal point interpretation</li> 164 <li>mesa: no-op glBufferSubData() on size==0</li> 165 <li>tdfx: s/Format/_BaseFormat/</li> 166 <li>st/mesa: fix renderbuffer pointer check in st_Clear()</li> 167 <li>mesa: Bump the number of bits in the register index.</li> 168 </ul> 169 170 <p>Chad Versace (5):</p> 171 <ul> 172 <li>glsl: Fix lexer rule for ^=</li> 173 <li>glsl: Fix ast-to-hir for ARB_fragment_coord_conventions</li> 174 <li>glsl: Fix ir_expression::constant_expression_value()</li> 175 <li>glsl: Fix erroneous cast in ast_jump_statement::hir()</li> 176 <li>glsl: Fix linker bug in cross_validate_globals()</li> 177 </ul> 178 179 <p>Chia-I Wu (10):</p> 180 <ul> 181 <li>targets/egl: Fix linking with libdrm.</li> 182 <li>st/vega: Fix version check in context creation.</li> 183 <li>st/egl: Do not finish a fence that is NULL.</li> 184 <li>egl: Fix a false negative check in _eglCheckMakeCurrent.</li> 185 <li>st/mesa: Unreference the sampler view in st_bind_surface.</li> 186 <li>egl_dri2: Fix __DRI_DRI2 version 1 support.</li> 187 <li>st/vega: Do not wait NULL fences.</li> 188 <li>mesa: Do not advertise GL_OES_texture_3D.</li> 189 <li>egl_glx: Fix borken driver.</li> 190 <li>egl: Check extensions.</li> 191 </ul> 192 193 <p>Daniel Lichtenberger (1):</p> 194 <ul> 195 <li>radeon: fix potential segfault in renderbuffer update</li> 196 </ul> 197 198 <p>Daniel Vetter (1):</p> 199 <ul> 200 <li>r200: revalidate after radeon_update_renderbuffers</li> 201 </ul> 202 203 <p>Dave Airlie (1):</p> 204 <ul> 205 <li>r300g: fixup rs690 tiling stride alignment calculations.</li> 206 </ul> 207 208 <p>Eric Anholt (13):</p> 209 <ul> 210 <li>intel: Allow CopyTexSubImage to InternalFormat 3/4 textures, like RGB/RGBA.</li> 211 <li>glsl: Free the loop state context when we free the loop state.</li> 212 <li>i965: Allow OPCODE_SWZ to put immediates in the first arg.</li> 213 <li>i965: Add support for rendering to SARGB8 FBOs.</li> 214 <li>glsl: Add a helper constructor for expressions that works out result type.</li> 215 <li>glsl: Fix structure and array comparisions.</li> 216 <li>glsl: Quiet unreachable no-return-from-function warning.</li> 217 <li>glsl: Mark the array access for whole-array comparisons.</li> 218 <li>glsl: Fix flipped return of has_value() for array constants.</li> 219 <li>mesa: Add getters for the rest of the supported draw buffers.</li> 220 <li>mesa: Add getters for ARB_copy_buffer's attachment points.</li> 221 <li>i965: Correct the dp_read message descriptor setup on g4x.</li> 222 <li>glsl: Correct the marking of InputsRead/OutputsWritten on in/out matrices.</li> 223 </ul> 224 225 <p>Fabian Bieler (1):</p> 226 <ul> 227 <li>glsl: fix lowering conditional returns in subroutines</li> 228 </ul> 229 230 <p>Francisco Jerez (3):</p> 231 <ul> 232 <li>meta: Don't leak alpha function/reference value changes.</li> 233 <li>meta: Fix incorrect rendering of the bitmap alpha component.</li> 234 <li>meta: Don't try to disable cube maps if the driver doesn't expose the extension.</li> 235 </ul> 236 237 <p>Henri Verbeet (2):</p> 238 <ul> 239 <li>r600: Evergreen has two extra frac_bits for the sampler LOD state.</li> 240 <li>st/mesa: Handle wrapped depth buffers in st_copy_texsubimage().</li> 241 </ul> 242 243 <p>Ian Romanick (33):</p> 244 <ul> 245 <li>Add 7.9 md5sums</li> 246 <li>docs: Import 7.8.x release notes from 7.8 branch.</li> 247 <li>docs: download.html does not need to be updated for each release</li> 248 <li>docs: Update mailing lines from sf.net to freedesktop.org</li> 249 <li>docs: added news item for 7.9 release</li> 250 <li>mesa: Validate assembly shaders when GLSL shaders are used</li> 251 <li>linker: Reject shaders that have unresolved function calls</li> 252 <li>mesa: Refactor validation of shader targets</li> 253 <li>glsl: Slightly change the semantic of _LinkedShaders</li> 254 <li>linker: Improve handling of unread/unwritten shader inputs/outputs</li> 255 <li>glsl: Commit lexer files changed by previous cherry picking</li> 256 <li>mesa: Make metaops use program refcounts instead of names.</li> 257 <li>glsl: Fix incorrect gl_type of sampler2DArray and sampler1DArrayShadow</li> 258 <li>mesa: Allow query of MAX_SAMPLES with EXT_framebuffer_multisample</li> 259 <li>glsl: better handling of linker failures</li> 260 <li>mesa: Fix glGet of ES2's GL_MAX_*_VECTORS properties.</li> 261 <li>i915: Disallow alpha, red, RG, and sRGB as render targets</li> 262 <li>glsl/linker: Free any IR discarded by optimization passes.</li> 263 <li>glsl: Add an optimization pass to simplify discards.</li> 264 <li>glsl: Add a lowering pass to move discards out of if-statements.</li> 265 <li>i915: Correctly generate unconditional KIL instructions</li> 266 <li>glsl: Add unary ir_expression constructor</li> 267 <li>glsl: Ensure that equality comparisons don't return a NULL IR tree</li> 268 <li>glcpp: Commit changes in generated files cause by previous commit</li> 269 <li>glsl: Inherrit type of declared variable from initializer</li> 270 <li>glsl: Inherrit type of declared variable from initializer after processing assignment</li> 271 <li>linker: Ensure that unsized arrays have a size after linking</li> 272 <li>linker: Fix regressions caused by previous commit</li> 273 <li>linker: Allow built-in arrays to have different sizes between shader stages</li> 274 <li>ir_to_mesa: Don't generate swizzles for record derefs of non-scalar/vectors</li> 275 <li>Refresh autogenerated file builtin_function.cpp.</li> 276 <li>docs: Initial set of release notes for 7.9.1</li> 277 <li>mesa: set version string to 7.9.1</li> 278 </ul> 279 280 <p>Julien Cristau (1):</p> 281 <ul> 282 <li>Makefile: don't include the same files twice in the tarball</li> 283 </ul> 284 285 <p>Kenneth Graunke (19):</p> 286 <ul> 287 <li>glcpp: Return NEWLINE token for newlines inside multi-line comments.</li> 288 <li>generate_builtins.py: Output large strings as arrays of characters.</li> 289 <li>glsl: Fix constant component count in vector constructor emitting.</li> 290 <li>ir_dead_functions: Actually free dead functions and signatures.</li> 291 <li>glcpp: Define GL_FRAGMENT_PRECISION_HIGH if GLSL version >= 1.30.</li> 292 <li>glsl: Unconditionally define GL_FRAGMENT_PRECISION_HIGH in ES2 shaders.</li> 293 <li>glsl: Fix constant expression handling for <, >, <=, >= on vectors.</li> 294 <li>glsl: Use do_common_optimization in the standalone compiler.</li> 295 <li>glsl: Don't inline function prototypes.</li> 296 <li>glsl: Add a virtual as_discard() method.</li> 297 <li>glsl: Remove "discard" support from lower_jumps.</li> 298 <li>glsl: Refactor get_num_operands.</li> 299 <li>glcpp: Don't emit SPACE tokens in conditional_tokens production.</li> 300 <li>glsl: Clean up code by adding a new is_break() function.</li> 301 <li>glsl: Consider the "else" branch when looking for loop breaks.</li> 302 <li>Remove OES_compressed_paletted_texture from the ES2 extension list.</li> 303 <li>glsl/builtins: Compute the correct value for smoothstep(vec, vec, vec).</li> 304 <li>Fix build on systems where "python" is python 3.</li> 305 <li>i965: Internally enable GL_NV_blend_square on ES2.</li> 306 </ul> 307 308 <p>Kristian Hgsberg (1):</p> 309 <ul> 310 <li>i965: Don't write mrf assignment for pointsize output</li> 311 </ul> 312 313 <p>Luca Barbieri (1):</p> 314 <ul> 315 <li>glsl: Unroll loops with conditional breaks anywhere (not just the end)</li> 316 </ul> 317 318 <p>Marek Olk (17):</p> 319 <ul> 320 <li>r300g: fix microtiling for 16-bits-per-channel formats</li> 321 <li>r300g: fix texture border for 16-bits-per-channel formats</li> 322 <li>r300g: add a default channel ordering of texture border for unhandled formats</li> 323 <li>r300g: fix texture border color for all texture formats</li> 324 <li>r300g: fix rendering with no vertex elements</li> 325 <li>r300/compiler: fix rc_rewrite_depth_out for it to work with any instruction</li> 326 <li>r300g: fix texture border color once again</li> 327 <li>r300g: fix texture swizzling with compressed textures on r400-r500</li> 328 <li>r300g: disable ARB_texture_swizzle if S3TC is enabled on r3xx-only</li> 329 <li>mesa, st/mesa: fix gl_FragCoord with FBOs in Gallium</li> 330 <li>st/mesa: initialize key in st_vp_varient</li> 331 <li>r300/compiler: fix swizzle lowering with a presubtract source operand</li> 332 <li>r300g: fix rendering with a vertex attrib having a zero stride</li> 333 <li>ir_to_mesa: Add support for conditional discards.</li> 334 <li>r300g: finally fix the texture corruption on r3xx-r4xx</li> 335 <li>mesa: fix texel store functions for some float formats</li> 336 <li>r300/compiler: disable the rename_regs pass for loops</li> 337 </ul> 338 339 <p>Mario Kleiner (1):</p> 340 <ul> 341 <li>mesa/r300classic: Fix dri2Invalidate/radeon_prepare_render for page flipping.</li> 342 </ul> 343 344 <p>Peter Clifton (1):</p> 345 <ul> 346 <li>intel: Fix emit_linear_blit to use DWORD aligned width blits</li> 347 </ul> 348 349 <p>Robert Hooker (2):</p> 350 <ul> 351 <li>intel: Add a new B43 pci id.</li> 352 <li>egl_dri2: Add missing intel chip ids.</li> 353 </ul> 354 355 <p>Roland Scheidegger (1):</p> 356 <ul> 357 <li>r200: fix r200 large points</li> 358 </ul> 359 360 <p>Thomas Hellstrom (17):</p> 361 <ul> 362 <li>st/xorg: Don't try to use option values before processing options</li> 363 <li>xorg/vmwgfx: Make vmwarectrl work also on 64-bit servers</li> 364 <li>st/xorg: Add a customizer option to get rid of annoying cursor update flicker</li> 365 <li>xorg/vmwgfx: Don't hide HW cursors when updating them</li> 366 <li>st/xorg: Don't try to remove invalid fbs</li> 367 <li>st/xorg: Fix typo</li> 368 <li>st/xorg, xorg/vmwgfx: Be a bit more frendly towards cross-compiling environments</li> 369 <li>st/xorg: Fix compilation errors for Xservers compiled without Composite</li> 370 <li>st/xorg: Don't use deprecated x*alloc / xfree functions</li> 371 <li>xorg/vmwgfx: Don't use deprecated x*alloc / xfree functions</li> 372 <li>st/xorg: Fix compilation for Xservers >= 1.10</li> 373 <li>mesa: Make sure we have the talloc cflags when using the talloc headers</li> 374 <li>egl: Add an include for size_t</li> 375 <li>mesa: Add talloc includes for gles</li> 376 <li>st/egl: Fix build for include files in nonstandard places</li> 377 <li>svga/drm: Optionally resolve calls to powf during link-time</li> 378 <li>gallium/targets: Trivial crosscompiling fix</li> 379 </ul> 380 381 <p>Tom Stellard (7):</p> 382 <ul> 383 <li>r300/compiler: Make sure presubtract sources use supported swizzles</li> 384 <li>r300/compiler: Fix register allocator's handling of loops</li> 385 <li>r300/compiler: Fix instruction scheduling within IF blocks</li> 386 <li>r300/compiler: Use zero as the register index for unused sources</li> 387 <li>r300/compiler: Ignore alpha dest register when replicating the result</li> 388 <li>r300/compiler: Use correct swizzles for all presubtract sources</li> 389 <li>r300/compiler: Don't allow presubtract sources to be remapped twice</li> 390 </ul> 391 392 <p>Vinson Lee (1):</p> 393 <ul> 394 <li>glsl: Fix 'control reaches end of non-void function' warning.</li> 395 </ul> 396 397 <p>richard (1):</p> 398 <ul> 399 <li>r600c : inline vertex format is not updated in an app, switch to use vfetch constants. For the 7.9 and 7.10 branches as well.</li> 400 </ul> 401 402 </body> 403 </html> 404