]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
FFI: Add callback support (for x86/x64).
authorMike Pall <mike>
Mon, 14 Nov 2011 13:15:57 +0000 (14:15 +0100)
committerMike Pall <mike>
Mon, 14 Nov 2011 13:18:25 +0000 (14:18 +0100)
27 files changed:
doc/ext_ffi_api.html
doc/ext_ffi_semantics.html
src/Makefile
src/Makefile.dep
src/buildvm.c
src/buildvm_x64.h
src/buildvm_x64win.h
src/buildvm_x86.dasc
src/buildvm_x86.h
src/lib_ffi.c
src/lj_ccall.c
src/lj_ccall.h
src/lj_ccallback.c [new file with mode: 0644]
src/lj_ccallback.h [new file with mode: 0644]
src/lj_cconv.c
src/lj_crecord.c
src/lj_ctype.c
src/lj_ctype.h
src/lj_debug.c
src/lj_def.h
src/lj_err.c
src/lj_errmsg.h
src/lj_frame.h
src/lj_meta.c
src/lj_target_x86.h
src/lj_vm.h
src/ljamalg.c

index e865a5f7a0a75e2b9c49ba1c355f33e4634e8519..222c580eb90c6a9eaaf8dc9c27716fa36e8294a6 100644 (file)
@@ -78,6 +78,9 @@ corresponding <b>ctype</b>.</li>
 <li><b>ct</b> &mdash; A C&nbsp;type specification which can be used for
 most of the API functions. Either a <b>cdecl</b>, a <b>ctype</b> or a
 <b>cdata</b> serving as a template type.</li>
+<li><b>cb</b> &mdash; A callback object. This is a C&nbsp;data object
+holding a special function pointer. Calling this function from
+C&nbsp;code runs an associated Lua function.</li>
 <li><b>VLA</b> &mdash; A variable-length array is declared with a
 <tt>?</tt> instead of the number of elements, e.g. <tt>"int[?]"</tt>.
 The number of elements (<tt>nelem</tt>) must be given when it's
@@ -473,6 +476,31 @@ Contains the target architecture name. Same contents as
 <a href="ext_jit.html#jit_arch"><tt>jit.arch</tt></a>.
 </p>
 
+<h2 id="callback">Methods for Callbacks</h2>
+<p>
+The C&nbsp;types for <a href="ext_ffi_semantics.html#callback">callbacks</a>
+have some extra methods:
+</p>
+
+<h3 id="callback_free"><tt>cb:free()</tt></h3>
+<p>
+Free the resources associated with a callback. The associated Lua
+function is unanchored and may be garbage collected. The callback
+function pointer is no longer valid and must not be called anymore
+(it may be reused by a subsequently created callback).
+</p>
+
+<h3 id="callback_set"><tt>cb:set(func)</tt></h3>
+<p>
+Associate a new Lua function with a callback. The C&nbsp;type of the
+callback and the callback function pointer are unchanged.
+</p>
+<p>
+This method is useful to dynamically switch the receiver of callbacks
+without creating a new callback each time and registering it again (e.g.
+with a GUI library).
+</p>
+
 <h2 id="extended">Extended Standard Library Functions</h2>
 <p>
 The following standard library functions have been extended to work
index 79f25510a9476bbb5f471563f6d6fe2cf47fdde3..7e140e27ce4dffc565f737763bb6ffbfc1974d59 100644 (file)
@@ -297,10 +297,12 @@ arguments to C&nbsp;calls:
 <tr class="even">
 <td class="convin">string</td><td class="convop">string data &rarr;</td><td class="convout"><tt>const char[]</tt></td></tr>
 <tr class="odd separate">
+<td class="convin">function</td><td class="convop"><a href="#callback">create callback</a> &rarr;</td><td class="convout">C function type</td></tr>
+<tr class="even separate">
 <td class="convin">table</td><td class="convop"><a href="#init_table">table initializer</a></td><td class="convout">Array</td></tr>
-<tr class="even">
+<tr class="odd">
 <td class="convin">table</td><td class="convop"><a href="#init_table">table initializer</a></td><td class="convout"><tt>struct</tt>/<tt>union</tt></td></tr>
-<tr class="odd separate">
+<tr class="even separate">
 <td class="convin">cdata</td><td class="convop">cdata payload &rarr;</td><td class="convout">C type</td></tr>
 </table>
 <p>
@@ -821,6 +823,127 @@ cdata objects are indistinguishable from pointers returned by C
 functions (which is one of the reasons why the GC cannot follow them).
 </p>
 
+<h2 id="callback">Callbacks</h2>
+<p>
+The LuaJIT FFI automatically generates special callback functions
+whenever a Lua function is converted to a C&nbsp;function pointer. This
+associates the generated callback function pointer with the C&nbsp;type
+of the function pointer and the Lua function object (closure).
+</p>
+<p>
+This can happen implicitly due to the usual conversions, e.g. when
+passing a Lua function to a function pointer argument. Or you can use
+<tt>ffi.cast()</tt> to explicitly cast a Lua function to a
+C&nbsp;function pointer.
+</p>
+<p>
+Currently only certain C&nbsp;function types can be used as callback
+functions. Neither C&nbsp;vararg functions nor functions with
+pass-by-value aggregate argument or result types are supported. There
+are no restrictions for the kind of Lua functions that can be called
+from the callback &mdash; no checks for the proper number of arguments
+are made. The return value of the Lua function will be converted to the
+result type and an error will be thrown for invalid conversions.
+</p>
+<p>
+It's allowed to throw errors across a callback invocation, but it's not
+advisable in general. Do this only if you know the C&nbsp;function, that
+called the callback, copes with the forced stack unwinding and doesn't
+leak resources.
+</p>
+
+<h3 id="callback_resources">Callback resource handling</h3>
+<p>
+Callbacks take up resources &mdash; you can only have a limited number
+of them at the same time (500&nbsp;-&nbsp;1000, depending on the
+architecture). The associated Lua functions are anchored to prevent
+garbage collection, too.
+</p>
+<p>
+<b>Callbacks due to implicit conversions are permanent!</b> There is no
+way to guess their lifetime, since the C&nbsp;side might store the
+function pointer for later use (typical for GUI toolkits). The associated
+resources cannot be reclaimed until termination:
+</p>
+<pre class="code">
+ffi.cdef[[
+typedef int (__stdcall *WNDENUMPROC)(void *hwnd, intptr_t l);
+int EnumWindows(WNDENUMPROC func, intptr_t l);
+]]
+
+-- Implicit conversion to a callback via function pointer argument.
+local count = 0
+ffi.C.EnumWindows(function(hwnd, l)
+  count = count + 1
+end, 0)
+-- The callback is permanent and its resources cannot be reclaimed!
+-- Ok, so this may not be a problem, if you do this only once.
+</pre>
+<p>
+Note: this example shows that you <em>must</em> properly declare
+<tt>__stdcall</tt> callbacks on Windows/x86 systems. The calling
+convention cannot be automatically detected, unlike for
+<tt>__stdcall</tt> calls <em>to</em> Windows functions.
+</p>
+<p>
+For some use cases it's necessary to free up the resources or to
+dynamically redirect callbacks. Use an explicit cast to a
+C&nbsp;function pointer and keep the resulting cdata object. Then use
+the <a href="ext_ffi_api.html#callback_free"><tt>cb:free()</tt></a>
+or <a href="ext_ffi_api.html#callback_set"><tt>cb:set()</tt></a> methods
+on the cdata object:
+</p>
+<pre class="code">
+-- Explicitly convert to a callback via cast.
+local count = 0
+local cb = ffi.cast("WNDENUMPROC", function(hwnd, l)
+  count = count + 1
+end)
+
+-- Pass it to a C function.
+ffi.C.EnumWindows(cb, 0)
+-- EnumWindows doesn't need the callback after it returns, so free it.
+
+cb:free()
+-- The callback function pointer is no longer valid and its resources
+-- will be reclaimed. The created Lua closure will be garbage collected.
+</pre>
+
+<h3 id="callback_performance">Callback performance</h3>
+<p>
+<b>Callbacks are slow!</b> First, the C&nbsp;to Lua transition itself
+has an unavoidable cost, similar to a <tt>lua_call()</tt> or
+<tt>lua_pcall()</tt>. Argument and result marshalling add to that cost.
+And finally, neither the C&nbsp;compiler nor LuaJIT can inline or
+optimize across the language barrier and hoist repeated computations out
+of a callback function.
+</p>
+<p>
+Do not use callbacks for performance-sensitive work: e.g. consider a
+numerical integration routine which takes a user-defined function to
+integrate over. It's a bad idea to call a user-defined Lua function from
+C&nbsp;code millions of times. The callback overhead will be absolutely
+detrimental for performance.
+</p>
+<p>
+It's considerably faster to write the numerical integration routine
+itself in Lua &mdash; the JIT compiler will be able to inline the
+user-defined function and optimize it together with its calling context,
+with very competitive performance.
+</p>
+<p>
+As a general guideline: <b>use callbacks only when you must</b>, because
+of existing C&nbsp;APIs. E.g. callback performance is irrelevant for a
+GUI application, which waits for user input most of the time, anyway.
+</p>
+<p>
+For new designs <b>avoid push-style APIs</b> (C&nbsp;function repeatedly
+calling a callback for each result). Instead <b>use pull-style APIs</b>
+(call a C&nbsp;function repeatedly to get a new result). Calls from Lua
+to C via the FFI are much faster than the other way round. Most well
+designed libraries already use pull-style APIs (read/write, get/put).
+</p>
+
 <h2 id="clib">C Library Namespaces</h2>
 <p>
 A C&nbsp;library namespace is a special kind of object which allows
@@ -1002,7 +1125,6 @@ Other missing features:
 <ul>
 <li>Bit operations for 64&nbsp;bit types.</li>
 <li>Arithmetic for <tt>complex</tt> numbers.</li>
-<li>Callbacks from C&nbsp;code to Lua functions.</li>
 <li>Passing structs by value to vararg C&nbsp;functions.</li>
 <li><a href="extensions.html#exceptions">C++ exception interoperability</a>
 does not extend to C&nbsp;functions called via the FFI, if the call is
index 30985003428da13ae6d5d12e3f59364b66f84514..d4f8033247c2d33f8e7f0b9062189bdd9e1ec3e1 100644 (file)
@@ -377,8 +377,8 @@ LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \
          lj_opt_dce.o lj_opt_loop.o lj_opt_split.o \
          lj_mcode.o lj_snap.o lj_record.o lj_crecord.o lj_ffrecord.o \
          lj_asm.o lj_trace.o lj_gdbjit.o \
-         lj_ctype.o lj_cdata.o lj_cconv.o lj_ccall.o lj_carith.o lj_clib.o \
-         lj_cparse.o \
+         lj_ctype.o lj_cdata.o lj_cconv.o lj_ccall.o lj_ccallback.o \
+         lj_carith.o lj_clib.o lj_cparse.o \
          lj_lib.o lj_alloc.o lib_aux.o \
          $(LJLIB_O) lib_init.o
 
index 81bbed29b4ec0b8dc9bd53ae5ed847b44b0e926a..b9d0df476b1de4cf762c0a1433443536540dd3fb 100644 (file)
@@ -1,6 +1,6 @@
 buildvm.o: buildvm.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \
  lj_obj.h lj_gc.h lj_bc.h lj_ir.h lj_ircall.h lj_jit.h lj_frame.h \
- lj_dispatch.h lj_ccall.h lj_ctype.h luajit.h \
+ lj_dispatch.h lj_ctype.h lj_ccall.h luajit.h \
  lj_traceerr.h
 buildvm_asm.o: buildvm_asm.c buildvm.h lj_def.h lua.h luaconf.h lj_arch.h \
  lj_bc.h
@@ -23,7 +23,7 @@ lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
 lib_ffi.o: lib_ffi.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
  lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h \
  lj_ctype.h lj_cparse.h lj_cdata.h lj_cconv.h lj_carith.h lj_ccall.h \
- lj_clib.h lj_ff.h lj_ffdef.h lj_lib.h lj_libdef.h
+ lj_ccallback.h lj_clib.h lj_ff.h lj_ffdef.h lj_lib.h lj_libdef.h
 lib_init.o: lib_init.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h
 lib_io.o: lib_io.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
  lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_ff.h lj_ffdef.h \
@@ -69,11 +69,16 @@ lj_carith.o: lj_carith.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
  lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_meta.h lj_ctype.h lj_cconv.h \
  lj_cdata.h lj_carith.h
 lj_ccall.o: lj_ccall.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
- lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_ctype.h lj_cconv.h lj_cdata.h \
- lj_ccall.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \
+ lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cconv.h \
+ lj_cdata.h lj_ccall.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \
  lj_traceerr.h
+lj_ccallback.o: lj_ccallback.c lj_obj.h lua.h luaconf.h lj_def.h \
+ lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_state.h lj_frame.h \
+ lj_bc.h lj_ctype.h lj_cconv.h lj_ccall.h lj_ccallback.h lj_target.h \
+ lj_target_*.h lj_vm.h
 lj_cconv.o: lj_cconv.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
- lj_err.h lj_errmsg.h lj_tab.h lj_ctype.h lj_gc.h lj_cdata.h lj_cconv.h
+ lj_err.h lj_errmsg.h lj_tab.h lj_ctype.h lj_gc.h lj_cdata.h lj_cconv.h \
+ lj_ccallback.h
 lj_cdata.o: lj_cdata.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
  lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cconv.h \
  lj_cdata.h
@@ -86,11 +91,11 @@ lj_cparse.o: lj_cparse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
  lj_bc.h lj_vm.h lj_char.h
 lj_crecord.o: lj_crecord.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
  lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ctype.h \
- lj_gc.h lj_cparse.h lj_cconv.h lj_clib.h lj_ccall.h lj_ir.h lj_jit.h \
- lj_ircall.h lj_iropt.h lj_trace.h lj_dispatch.h lj_traceerr.h \
+ lj_gc.h lj_cdata.h lj_cparse.h lj_cconv.h lj_clib.h lj_ccall.h lj_ir.h \
+ lj_jit.h lj_ircall.h lj_iropt.h lj_trace.h lj_dispatch.h lj_traceerr.h \
  lj_record.h lj_ffrecord.h lj_crecord.h
 lj_ctype.o: lj_ctype.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
- lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h
+ lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_ccallback.h
 lj_debug.o: lj_debug.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
  lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_state.h lj_frame.h \
  lj_bc.h lj_jit.h lj_ir.h
@@ -188,15 +193,15 @@ ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \
  lj_obj.c lj_str.c lj_tab.c lj_func.c lj_udata.c lj_meta.c lj_debug.c \
  lj_state.c lj_lex.h lj_alloc.h lj_dispatch.c luajit.h lj_vmevent.c \
  lj_vmevent.h lj_vmmath.c lj_api.c lj_bcdump.h lj_parse.h lj_lex.c \
- lualib.h lj_parse.c lj_bcread.c lj_bcwrite.c lj_ctype.c lj_cdata.c \
- lj_cconv.h lj_cconv.c lj_ccall.c lj_ccall.h lj_carith.c lj_carith.h \
- lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_lib.c lj_lib.h lj_ir.c \
- lj_ircall.h lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h \
- lj_opt_narrow.c lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_opt_split.c \
- lj_mcode.c lj_mcode.h lj_snap.c lj_target.h lj_target_*.h lj_record.c \
- lj_record.h lj_ffrecord.h lj_crecord.c lj_crecord.h lj_ffrecord.c \
- lj_recdef.h lj_asm.c lj_asm.h lj_emit_*.h lj_asm_*.h lj_trace.c \
- lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c lj_libdef.h \
- lib_math.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c \
- lib_debug.c lib_bit.c lib_jit.c lib_ffi.c lib_init.c
+ lualib.h lj_parse.c lj_bcread.c lj_bcwrite.c lj_ctype.c lj_ccallback.h \
+ lj_cdata.c lj_cconv.h lj_cconv.c lj_ccall.c lj_ccall.h lj_ccallback.c \
+ lj_target.h lj_target_*.h lj_carith.c lj_carith.h lj_clib.c lj_clib.h \
+ lj_cparse.c lj_cparse.h lj_lib.c lj_lib.h lj_ir.c lj_ircall.h lj_iropt.h \
+ lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c lj_opt_dce.c \
+ lj_opt_loop.c lj_snap.h lj_opt_split.c lj_mcode.c lj_mcode.h lj_snap.c \
+ lj_record.c lj_record.h lj_ffrecord.h lj_crecord.c lj_crecord.h \
+ lj_ffrecord.c lj_recdef.h lj_asm.c lj_asm.h lj_emit_*.h lj_asm_*.h \
+ lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c \
+ lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c lib_os.c \
+ lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_ffi.c lib_init.c
 luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h lj_arch.h
index 72c2dd83a49ebb65b3c799b066d008a8d4815e9d..3e5d7b1c0ea4abbc1cda3025890c49f7760f71cf 100644 (file)
@@ -23,6 +23,7 @@
 #include "lj_frame.h"
 #include "lj_dispatch.h"
 #if LJ_HASFFI
+#include "lj_ctype.h"
 #include "lj_ccall.h"
 #endif
 #include "luajit.h"
index 06d6b0383d292a752927afeab0dd06500ab7a45f..55b22b2e842e6fc5758a412c79e8ac94cc497325 100644 (file)
@@ -12,7 +12,7 @@
 #define DASM_SECTION_CODE_OP   0
 #define DASM_SECTION_CODE_SUB  1
 #define DASM_MAXSECTION                2
-static const unsigned char build_actionlist[16165] = {
+static const unsigned char build_actionlist[16378] = {
   254,1,248,10,252,247,195,237,15,132,244,11,131,227,252,248,41,218,72,141,
   76,25,252,248,139,90,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36,4,
   252,247,195,237,15,132,244,13,248,14,129,252,243,239,252,247,195,237,15,133,
@@ -52,426 +52,427 @@ static const unsigned char build_actionlist[16165] = {
   68,137,124,36,16,76,139,189,233,76,137,124,36,32,72,137,165,233,252,255,209,
   133,192,15,132,244,15,137,193,187,237,252,233,244,2,248,11,1,209,131,227,
   252,248,137,213,41,218,199,68,193,252,252,237,137,200,139,93,252,244,72,99,
-  77,252,240,133,201,15,132,244,247,255,76,141,61,245,76,1,252,249,68,139,122,
-  252,248,69,139,191,233,69,139,191,233,252,255,225,248,1,41,213,193,252,237,
-  3,141,69,252,255,252,233,244,32,248,33,15,182,75,252,255,131,252,237,16,141,
-  12,202,41,252,233,15,132,244,34,252,247,217,193,252,233,3,139,124,36,24,137,
-  151,233,137,202,72,139,8,72,137,77,0,137,252,238,252,233,244,35,248,36,137,
-  4,36,199,68,36,4,237,72,141,4,36,128,123,252,252,235,15,133,244,247,65,141,
-  142,233,137,41,199,65,4,237,255,137,205,252,233,244,248,248,37,15,182,67,
-  252,254,255,199,68,36,4,237,137,4,36,255,252,242,15,42,192,252,242,15,17,
-  4,36,255,72,141,4,36,252,233,244,247,248,38,15,182,67,252,254,141,4,194,248,
-  1,15,182,107,252,255,141,44,252,234,248,2,139,124,36,24,137,151,233,137,252,
-  238,72,137,194,137,252,253,137,92,36,28,232,251,1,2,139,149,233,133,192,15,
-  132,244,249,248,34,15,182,75,252,253,72,139,40,72,137,44,202,139,3,15,182,
-  204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,3,139,141,233,
-  137,89,252,244,141,153,233,41,211,139,105,252,248,184,237,252,233,244,30,
-  248,39,137,4,36,199,68,36,4,237,72,141,4,36,128,123,252,252,235,15,133,244,
-  247,255,65,141,142,233,137,41,199,65,4,237,137,205,252,233,244,248,248,40,
-  15,182,67,252,254,255,72,141,4,36,252,233,244,247,248,41,15,182,67,252,254,
-  141,4,194,248,1,15,182,107,252,255,141,44,252,234,248,2,139,124,36,24,137,
-  151,233,137,252,238,72,137,194,137,252,253,137,92,36,28,232,251,1,3,139,149,
-  233,133,192,15,132,244,249,15,182,75,252,253,72,139,44,202,72,137,40,248,
-  42,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,
-  248,3,139,141,233,137,89,252,244,15,182,67,252,253,72,139,44,194,72,137,105,
-  16,141,153,233,41,211,139,105,252,248,184,237,252,233,244,30,248,43,139,108,
-  36,24,137,149,233,141,52,202,141,20,194,137,252,239,15,182,75,252,252,137,
-  92,36,28,232,251,1,4,248,3,139,149,233,255,131,252,248,1,15,135,244,44,248,
-  4,141,91,4,15,130,244,252,248,5,15,183,67,252,254,141,156,253,131,233,248,
-  6,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,
-  248,45,131,195,4,129,120,253,4,239,15,130,244,5,252,233,244,6,248,46,129,
-  120,253,4,239,252,233,244,4,248,47,131,252,235,4,137,206,137,252,233,139,
-  108,36,24,137,149,233,255,137,194,137,252,239,137,92,36,28,232,251,1,5,252,
-  233,244,3,248,48,255,131,252,235,4,139,108,36,24,137,149,233,137,252,239,
-  139,115,252,252,137,92,36,28,232,251,1,6,252,233,244,3,255,248,49,255,15,
-  182,107,252,255,255,248,50,65,141,4,199,252,233,244,247,248,51,255,248,52,
-  65,141,4,199,141,44,252,234,149,252,233,244,248,248,53,141,4,194,137,197,
-  252,233,244,248,248,54,255,248,55,141,4,194,248,1,141,44,252,234,248,2,141,
-  12,202,68,15,182,67,252,252,137,206,137,193,139,124,36,24,137,151,233,137,
-  252,234,137,252,253,137,92,36,28,232,251,1,7,139,149,233,133,192,15,132,244,
-  42,248,44,137,193,41,208,137,89,252,244,141,152,233,184,237,252,233,244,28,
-  248,56,139,108,36,24,137,149,233,141,52,194,137,252,239,137,92,36,28,232,
-  251,1,8,139,149,233,255,133,192,15,133,244,44,15,183,67,252,254,139,60,194,
-  252,233,244,57,255,252,233,244,44,255,248,58,141,76,202,8,248,29,137,76,36,
-  4,137,4,36,131,252,233,8,139,108,36,24,137,149,233,137,206,141,20,193,137,
-  252,239,137,92,36,28,232,251,1,9,139,149,233,139,76,36,4,139,4,36,139,105,
-  252,248,131,192,1,65,57,215,15,132,244,59,137,202,137,90,252,252,139,157,
-  233,139,11,15,182,252,233,15,182,205,131,195,4,65,252,255,36,252,238,248,
-  60,139,108,36,24,137,149,233,137,206,137,252,239,137,92,36,28,232,251,1,10,
-  139,149,233,139,67,252,252,15,182,204,15,182,232,193,232,16,65,252,255,164,
-  253,252,238,233,248,61,129,252,248,239,15,130,244,62,139,106,4,129,252,253,
-  239,15,131,244,62,139,90,252,252,137,68,36,4,137,106,252,252,139,42,137,106,
-  252,248,131,232,2,15,132,244,248,255,137,209,248,1,131,193,8,72,139,41,72,
-  137,105,252,248,131,232,1,15,133,244,1,248,2,139,68,36,4,252,233,244,63,248,
-  64,129,252,248,239,15,130,244,62,139,106,4,137,252,233,193,252,249,15,131,
-  252,249,252,254,15,132,244,249,184,237,252,247,213,57,232,255,15,71,197,255,
-  15,134,244,247,137,232,248,1,255,248,2,139,106,252,248,139,132,253,197,233,
-  139,90,252,252,199,66,252,252,237,137,66,252,248,252,233,244,65,248,3,184,
-  237,252,233,244,2,248,66,129,252,248,239,15,130,244,62,139,106,4,139,90,252,
-  252,129,252,253,239,15,133,244,252,248,1,139,42,139,173,233,248,2,133,252,
-  237,199,66,252,252,237,255,15,132,244,65,65,139,134,233,199,66,252,252,237,
-  137,106,252,248,139,141,233,35,136,233,105,201,239,3,141,233,248,3,129,185,
-  233,239,15,133,244,250,57,129,233,15,132,244,251,248,4,139,137,233,133,201,
-  15,133,244,3,255,252,233,244,65,248,5,139,105,4,129,252,253,239,15,132,244,
-  65,139,1,137,106,252,252,137,66,252,248,252,233,244,65,248,6,129,252,253,
-  239,15,132,244,1,129,252,253,239,15,135,244,254,129,252,253,239,15,134,244,
-  253,189,237,252,233,244,254,248,7,255,189,237,248,8,252,247,213,65,139,172,
-  253,174,233,252,233,244,2,248,67,129,252,248,239,15,130,244,62,129,122,253,
-  4,239,15,133,244,62,139,42,131,189,233,0,15,133,244,62,129,122,253,12,239,
-  15,133,244,62,139,66,8,137,133,233,139,90,252,252,199,66,252,252,237,255,
-  137,106,252,248,252,246,133,233,235,15,132,244,247,128,165,233,235,65,139,
-  134,233,65,137,174,233,137,133,233,248,1,252,233,244,65,248,68,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,133,244,62,137,213,139,50,141,82,8,
-  139,124,36,24,232,251,1,11,137,252,234,72,139,40,139,90,252,252,72,137,106,
-  252,248,252,233,244,65,248,69,255,129,252,248,239,15,133,244,62,129,122,253,
-  4,239,255,15,133,244,247,139,42,252,233,244,70,248,1,15,135,244,62,255,15,
-  131,244,62,255,252,242,15,16,2,252,233,244,71,255,221,2,252,233,244,72,255,
-  248,73,129,252,248,239,15,130,244,62,139,90,252,252,129,122,253,4,239,15,
-  133,244,249,139,2,248,2,199,66,252,252,237,137,66,252,248,252,233,244,65,
-  248,3,129,122,253,4,239,15,135,244,62,65,131,190,233,0,15,133,244,62,65,139,
-  174,233,65,59,174,233,255,15,130,244,247,232,244,74,248,1,139,108,36,24,137,
-  149,233,137,92,36,28,137,214,137,252,239,255,232,251,1,12,255,232,251,1,13,
-  255,139,149,233,252,233,244,2,248,75,129,252,248,239,15,130,244,62,15,132,
-  244,248,248,1,129,122,253,4,239,15,133,244,62,139,108,36,24,137,149,233,137,
-  149,233,139,90,252,252,139,50,141,82,8,137,252,239,137,92,36,28,232,251,1,
-  14,139,149,233,133,192,15,132,244,249,72,139,106,8,72,139,66,16,72,137,106,
-  252,248,72,137,2,248,76,184,237,255,252,233,244,77,248,2,199,66,12,237,252,
-  233,244,1,248,3,199,66,252,252,237,252,233,244,65,248,78,129,252,248,239,
-  15,130,244,62,139,42,129,122,253,4,239,15,133,244,62,255,131,189,233,0,15,
-  133,244,62,255,139,106,252,248,139,133,233,139,90,252,252,199,66,252,252,
-  237,137,66,252,248,199,66,12,237,184,237,252,233,244,77,248,79,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,133,244,62,129,122,253,12,239,255,
-  139,90,252,252,255,139,66,8,131,192,1,199,66,252,252,237,137,66,252,248,255,
-  252,242,15,16,66,8,72,189,237,237,102,72,15,110,205,252,242,15,88,193,252,
-  242,15,45,192,252,242,15,17,66,252,248,255,139,42,59,133,233,15,131,244,248,
-  193,224,3,3,133,233,248,1,129,120,253,4,239,15,132,244,80,72,139,40,72,137,
-  42,252,233,244,76,248,2,131,189,233,0,15,132,244,80,137,252,239,137,213,137,
-  198,232,251,1,15,137,252,234,133,192,15,133,244,1,248,80,184,237,252,233,
-  244,77,248,81,255,139,106,252,248,139,133,233,139,90,252,252,199,66,252,252,
-  237,137,66,252,248,255,199,66,12,237,199,66,8,0,0,0,0,255,15,87,192,252,242,
-  15,17,66,8,255,217,252,238,221,90,8,255,184,237,252,233,244,77,248,82,129,
-  252,248,239,15,130,244,62,141,74,8,131,232,1,187,237,248,1,65,15,182,174,
-  233,193,252,237,235,131,229,1,1,252,235,252,233,244,28,248,83,129,252,248,
-  239,15,130,244,62,129,122,253,12,239,15,133,244,62,255,139,106,4,137,106,
-  12,199,66,4,237,139,42,139,90,8,137,106,8,137,26,141,74,16,131,232,2,187,
-  237,252,233,244,1,248,84,129,252,248,239,15,130,244,62,139,42,139,90,252,
-  252,137,92,36,28,137,44,36,129,122,253,4,239,15,133,244,62,72,131,189,233,
-  0,15,133,244,62,128,189,233,235,15,135,244,62,139,141,233,15,132,244,247,
-  255,59,141,233,15,132,244,62,248,1,141,92,193,252,240,59,157,233,15,135,244,
-  62,137,157,233,139,108,36,24,137,149,233,131,194,8,137,149,233,141,108,194,
-  232,72,41,221,57,203,15,132,244,249,248,2,72,139,4,43,72,137,67,252,248,131,
-  252,235,8,57,203,15,133,244,2,248,3,137,206,139,60,36,232,244,25,65,199,134,
-  233,237,255,139,108,36,24,139,28,36,139,149,233,129,252,248,239,15,135,244,
-  254,248,4,139,139,233,68,139,187,233,137,139,233,68,137,252,251,41,203,15,
-  132,244,252,141,4,26,193,252,235,3,59,133,233,15,135,244,255,137,213,72,41,
-  205,248,5,72,139,1,72,137,4,41,131,193,8,68,57,252,249,15,133,244,5,248,6,
-  141,67,2,199,66,252,252,237,248,7,139,92,36,28,137,68,36,4,72,199,193,252,
-  248,252,255,252,255,252,255,252,247,195,237,255,15,132,244,13,252,233,244,
-  14,248,8,199,66,252,252,237,139,139,233,131,252,233,8,137,139,233,72,139,
-  1,72,137,2,184,237,252,233,244,7,248,9,139,12,36,68,137,185,233,137,222,137,
-  252,239,232,251,1,0,139,28,36,139,149,233,252,233,244,4,248,85,139,106,252,
-  248,139,173,233,139,90,252,252,137,92,36,28,137,44,36,72,131,189,233,0,15,
-  133,244,62,255,128,189,233,235,15,135,244,62,139,141,233,15,132,244,247,59,
-  141,233,15,132,244,62,248,1,141,92,193,252,248,59,157,233,15,135,244,62,137,
-  157,233,139,108,36,24,137,149,233,137,149,233,141,108,194,252,240,72,41,221,
-  57,203,15,132,244,249,248,2,255,72,139,4,43,72,137,67,252,248,131,252,235,
-  8,57,203,15,133,244,2,248,3,137,206,139,60,36,232,244,25,65,199,134,233,237,
-  139,108,36,24,139,28,36,139,149,233,129,252,248,239,15,135,244,254,248,4,
-  139,139,233,68,139,187,233,137,139,233,68,137,252,251,41,203,15,132,244,252,
-  141,4,26,193,252,235,3,59,133,233,15,135,244,255,255,137,213,72,41,205,248,
-  5,72,139,1,72,137,4,41,131,193,8,68,57,252,249,15,133,244,5,248,6,141,67,
-  1,248,7,139,92,36,28,137,68,36,4,49,201,252,247,195,237,15,132,244,13,252,
-  233,244,14,248,8,137,222,137,252,239,232,251,1,16,248,9,139,12,36,68,137,
-  185,233,137,222,137,252,239,232,251,1,0,139,28,36,139,149,233,252,233,244,
-  4,248,86,139,108,36,24,72,252,247,133,233,237,15,132,244,62,255,137,149,233,
-  141,68,194,252,248,137,133,233,49,192,72,137,133,233,176,235,136,133,233,
-  252,233,244,16,255,248,70,255,248,72,139,90,252,252,221,90,252,248,252,233,
-  244,65,255,248,87,129,252,248,239,15,130,244,62,255,129,122,253,4,239,15,
-  133,244,248,139,42,131,252,253,0,15,137,244,70,252,247,221,15,136,244,247,
-  248,88,248,70,139,90,252,252,199,66,252,252,237,137,106,252,248,252,233,244,
-  65,248,1,139,90,252,252,199,66,252,252,0,0,224,65,199,66,252,248,0,0,0,0,
-  252,233,244,65,248,2,15,135,244,62,255,129,122,253,4,239,15,131,244,62,255,
-  252,242,15,16,2,72,184,237,237,102,72,15,110,200,15,84,193,248,71,139,90,
-  252,252,252,242,15,17,66,252,248,255,221,2,217,225,248,71,248,72,139,90,252,
-  252,221,90,252,248,255,248,65,184,237,248,77,137,68,36,4,248,63,252,247,195,
-  237,15,133,244,253,248,5,56,67,252,255,15,135,244,252,15,182,75,252,253,72,
-  252,247,209,141,20,202,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,
-  252,255,36,252,238,248,6,199,68,194,252,244,237,131,192,1,252,233,244,5,248,
-  7,72,199,193,252,248,252,255,252,255,252,255,252,233,244,14,248,89,255,129,
-  122,253,4,239,15,133,244,247,139,42,252,233,244,70,248,1,15,135,244,62,255,
-  252,242,15,16,2,232,244,90,255,252,242,15,45,232,129,252,253,0,0,0,128,15,
-  133,244,70,252,242,15,42,205,102,15,46,193,15,138,244,71,15,132,244,70,255,
-  221,2,232,244,90,255,248,91,255,252,242,15,16,2,232,244,92,255,221,2,232,
-  244,92,255,248,93,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,252,242,15,81,2,252,233,244,71,255,248,93,129,252,248,239,15,130,244,
-  62,129,122,253,4,239,15,131,244,62,221,2,217,252,250,252,233,244,72,255,248,
-  94,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,217,252,
-  237,221,2,217,252,241,252,233,244,72,248,95,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,15,131,244,62,217,252,236,221,2,217,252,241,252,233,244,
-  72,248,96,129,252,248,239,255,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,221,2,232,244,97,252,233,244,72,248,98,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,221,2,217,252,254,252,233,244,72,248,99,129,252,
-  248,239,255,15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,252,255,
-  252,233,244,72,248,100,129,252,248,239,15,130,244,62,129,122,253,4,239,15,
-  131,244,62,221,2,217,252,242,221,216,252,233,244,72,248,101,129,252,248,239,
-  15,130,244,62,255,129,122,253,4,239,15,131,244,62,221,2,217,192,216,200,217,
-  232,222,225,217,252,250,217,252,243,252,233,244,72,248,102,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,192,216,200,217,232,
-  222,225,217,252,250,217,201,217,252,243,252,233,244,72,248,103,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,131,244,62,255,221,2,217,232,217,252,
-  243,252,233,244,72,255,248,104,129,252,248,239,15,130,244,62,129,122,253,
-  4,239,15,131,244,62,252,242,15,16,2,255,137,213,232,251,1,17,137,252,234,
-  252,233,244,71,255,248,105,129,252,248,239,15,130,244,62,129,122,253,4,239,
-  15,131,244,62,252,242,15,16,2,255,137,213,232,251,1,18,137,252,234,252,233,
-  244,71,255,248,106,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,252,242,15,16,2,255,137,213,232,251,1,19,137,252,234,252,233,244,71,
-  248,107,255,248,108,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,252,242,15,16,2,139,106,252,248,252,242,15,89,133,233,252,233,244,
-  71,255,248,108,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,221,2,139,106,252,248,220,141,233,252,233,244,72,255,248,109,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,
-  244,62,221,2,221,66,8,217,252,243,252,233,244,72,248,110,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,255,15,131,
-  244,62,221,66,8,221,2,217,252,253,221,217,252,233,244,72,248,111,129,252,
-  248,239,15,130,244,62,139,106,4,129,252,253,239,15,131,244,62,139,90,252,
-  252,139,2,137,106,252,252,137,66,252,248,209,229,129,252,253,0,0,224,252,
-  255,15,131,244,249,9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,
-  32,0,15,130,244,250,248,1,193,252,237,21,41,197,255,252,242,15,42,197,255,
-  137,44,36,219,4,36,255,139,106,252,252,129,229,252,255,252,255,15,128,129,
-  205,0,0,224,63,137,106,252,252,248,2,255,252,242,15,17,2,255,221,26,255,184,
-  237,252,233,244,77,248,3,255,15,87,192,252,233,244,2,255,217,252,238,252,
-  233,244,2,255,248,4,255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,
-  252,242,15,89,193,252,242,15,17,66,252,248,255,221,2,199,4,36,0,0,128,90,
-  216,12,36,221,90,252,248,255,139,106,252,252,184,52,4,0,0,209,229,252,233,
-  244,1,255,248,112,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,252,242,15,16,2,255,248,112,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,15,131,244,62,221,2,255,139,106,4,139,90,252,252,209,229,129,252,
-  253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,244,113,252,242,15,92,
-  224,248,1,252,242,15,17,66,252,248,252,242,15,17,34,255,217,192,232,244,113,
-  220,252,233,248,1,221,90,252,248,221,26,255,139,66,252,252,139,106,4,49,232,
-  15,136,244,249,248,2,184,237,252,233,244,77,248,3,129,252,245,0,0,0,128,137,
-  106,4,252,233,244,2,248,4,255,15,87,228,252,233,244,1,255,217,252,238,217,
-  201,252,233,244,1,255,248,114,129,252,248,239,15,130,244,62,129,122,253,4,
-  239,15,131,244,62,129,122,253,12,239,15,131,244,62,221,66,8,221,2,248,1,217,
-  252,248,223,224,158,15,138,244,1,221,217,252,233,244,72,255,248,115,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,
-  15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,232,244,116,252,233,244,
-  71,255,248,115,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,129,122,253,12,239,15,131,244,62,221,2,221,66,8,232,244,116,252,233,244,
-  72,255,248,117,185,2,0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,
-  1,57,193,15,131,244,70,129,124,253,202,252,252,239,15,133,244,249,59,108,
-  202,252,248,15,79,108,202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,
-  62,255,252,233,244,252,248,4,15,135,244,62,255,252,242,15,16,2,248,5,57,193,
-  15,131,244,71,129,124,253,202,252,252,239,255,15,130,244,252,15,135,244,62,
-  252,242,15,42,76,202,252,248,252,233,244,253,255,248,6,252,242,15,16,76,202,
-  252,248,248,7,252,242,15,93,193,131,193,1,252,233,244,5,255,248,118,185,2,
-  0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,15,131,244,
-  70,129,124,253,202,252,252,239,15,133,244,249,59,108,202,252,248,15,76,108,
-  202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,62,255,248,6,252,242,
-  15,16,76,202,252,248,248,7,252,242,15,95,193,131,193,1,252,233,244,5,255,
-  248,9,221,216,252,233,244,62,255,248,119,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,133,244,62,139,42,255,139,173,233,252,233,244,70,255,252,
-  242,15,42,133,233,252,233,244,71,255,219,133,233,252,233,244,72,255,248,120,
-  129,252,248,239,15,133,244,62,129,122,253,4,239,15,133,244,62,139,42,139,
-  90,252,252,131,189,233,1,15,130,244,80,15,182,173,233,255,252,242,15,42,197,
-  252,233,244,71,255,137,44,36,219,4,36,252,233,244,72,255,248,121,65,139,174,
-  233,65,59,174,233,15,130,244,247,232,244,74,248,1,129,252,248,239,15,133,
-  244,62,129,122,253,4,239,255,15,133,244,62,139,42,129,252,253,252,255,0,0,
-  0,15,135,244,62,137,108,36,4,255,15,131,244,62,252,242,15,44,42,129,252,253,
-  252,255,0,0,0,15,135,244,62,137,108,36,4,255,15,131,244,62,221,2,219,92,36,
-  4,129,124,36,4,252,255,0,0,0,15,135,244,62,255,199,68,36,8,1,0,0,0,72,141,
-  68,36,4,248,122,139,108,36,24,137,149,233,139,84,36,8,72,137,198,137,252,
-  239,137,92,36,28,232,251,1,20,139,149,233,139,90,252,252,199,66,252,252,237,
-  137,66,252,248,252,233,244,65,248,123,65,139,174,233,65,59,174,233,15,130,
-  244,247,232,244,74,248,1,199,68,36,4,252,255,252,255,252,255,252,255,129,
-  252,248,239,15,130,244,62,15,134,244,247,129,122,253,20,239,255,15,133,244,
-  62,139,106,16,137,108,36,4,255,15,131,244,62,252,242,15,44,106,16,137,108,
-  36,4,255,15,131,244,62,221,66,16,219,92,36,4,255,248,1,129,122,253,4,239,
-  15,133,244,62,129,122,253,12,239,255,139,42,137,108,36,8,139,173,233,255,
-  139,74,8,255,252,242,15,44,74,8,255,139,68,36,4,57,197,15,130,244,251,248,
-  2,133,201,15,142,244,253,248,3,139,108,36,8,41,200,15,140,244,124,141,172,
-  253,13,233,131,192,1,248,4,137,68,36,8,137,232,252,233,244,122,248,5,15,140,
-  244,252,141,68,40,1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,
-  132,244,254,1,252,233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,
-  3,248,124,49,192,252,233,244,4,248,125,129,252,248,239,15,130,244,62,65,139,
-  174,233,65,59,174,233,15,130,244,247,232,244,74,248,1,255,129,122,253,4,239,
-  15,133,244,62,129,122,253,12,239,139,42,255,15,133,244,62,139,66,8,255,15,
-  131,244,62,252,242,15,44,66,8,255,15,131,244,62,221,66,8,219,92,36,4,139,
-  68,36,4,255,133,192,15,142,244,124,131,189,233,1,15,130,244,124,15,133,244,
-  126,65,57,134,233,15,130,244,126,15,182,141,233,65,139,174,233,137,68,36,
-  8,248,1,136,77,0,131,197,1,131,232,1,15,133,244,1,65,139,134,233,252,233,
-  244,122,248,127,129,252,248,239,255,15,130,244,62,65,139,174,233,65,59,174,
-  233,15,130,244,247,232,244,74,248,1,129,122,253,4,239,15,133,244,62,139,42,
-  139,133,233,133,192,15,132,244,124,65,57,134,233,15,130,244,128,129,197,239,
-  137,92,36,4,137,68,36,8,65,139,158,233,248,1,255,15,182,77,0,131,197,1,131,
-  232,1,136,12,3,15,133,244,1,137,216,139,92,36,4,252,233,244,122,248,129,129,
-  252,248,239,15,130,244,62,65,139,174,233,65,59,174,233,15,130,244,247,232,
-  244,74,248,1,129,122,253,4,239,15,133,244,62,139,42,139,133,233,65,57,134,
-  233,255,15,130,244,128,129,197,239,137,92,36,4,137,68,36,8,65,139,158,233,
-  252,233,244,249,248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,
-  249,90,15,135,244,248,131,252,241,32,248,2,136,12,3,248,3,131,232,1,15,137,
-  244,1,137,216,139,92,36,4,252,233,244,122,248,130,129,252,248,239,15,130,
-  244,62,255,65,139,174,233,65,59,174,233,15,130,244,247,232,244,74,248,1,129,
-  122,253,4,239,15,133,244,62,139,42,139,133,233,65,57,134,233,15,130,244,128,
-  129,197,239,137,92,36,4,137,68,36,8,65,139,158,233,252,233,244,249,248,1,
-  15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122,15,135,244,
-  248,131,252,241,32,248,2,136,12,3,248,3,131,232,1,15,137,244,1,137,216,139,
-  92,36,4,252,233,244,122,248,131,129,252,248,239,15,130,244,62,129,122,253,
-  4,239,15,133,244,62,137,213,139,58,232,251,1,21,137,252,234,255,137,197,252,
-  233,244,70,255,252,242,15,42,192,252,233,244,71,255,248,132,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,88,
-  248,1,15,135,244,62,255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,
-  252,242,15,88,193,102,15,126,197,255,252,233,244,88,255,248,133,129,252,248,
-  239,15,130,244,62,255,72,189,237,237,102,72,15,110,205,255,199,4,36,0,0,192,
-  89,255,15,133,244,247,139,42,252,233,244,248,248,1,15,135,244,62,255,252,
-  242,15,16,2,252,242,15,88,193,102,15,126,197,255,248,2,137,68,36,4,141,68,
-  194,252,240,248,1,57,208,15,134,244,88,129,120,253,4,239,255,15,133,244,248,
-  35,40,131,232,8,252,233,244,1,248,2,15,135,244,134,255,15,131,244,134,255,
-  252,242,15,16,0,252,242,15,88,193,102,15,126,193,33,205,255,131,232,8,252,
-  233,244,1,248,135,129,252,248,239,15,130,244,62,255,15,133,244,248,11,40,
-  131,232,8,252,233,244,1,248,2,15,135,244,134,255,252,242,15,16,0,252,242,
-  15,88,193,102,15,126,193,9,205,255,131,232,8,252,233,244,1,248,136,129,252,
-  248,239,15,130,244,62,255,15,133,244,248,51,40,131,232,8,252,233,244,1,248,
-  2,15,135,244,134,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,49,
-  205,255,131,232,8,252,233,244,1,248,137,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,255,248,2,15,205,252,233,244,88,248,138,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,255,248,2,252,247,213,255,248,88,252,242,15,
-  42,197,252,233,244,71,255,248,134,139,68,36,4,252,233,244,62,255,248,139,
-  129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,2,129,122,253,12,
-  239,15,133,244,62,139,74,8,255,248,139,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,15,16,
-  2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,
-  242,15,88,202,102,15,126,197,102,15,126,201,255,211,229,252,233,244,88,255,
-  248,140,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,140,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,
-  15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,
-  110,213,252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,
-  255,211,252,237,252,233,244,88,255,248,141,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,255,248,141,129,252,248,239,15,130,244,62,129,122,253,4,
-  239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,15,16,2,252,242,
-  15,16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,
-  88,202,102,15,126,197,102,15,126,201,255,211,252,253,252,233,244,88,255,248,
-  142,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,142,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,
-  244,62,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,
-  252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,211,
-  197,252,233,244,88,255,248,143,129,252,248,239,15,130,244,62,129,122,253,
-  4,239,255,248,143,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,129,122,253,12,239,15,131,244,62,252,242,15,16,2,252,242,15,16,74,
+  77,252,240,255,131,252,249,1,15,134,244,247,255,76,141,61,245,76,1,252,249,
+  255,68,139,122,252,248,69,139,191,233,69,139,191,233,252,255,225,255,248,
+  1,15,132,244,32,41,213,193,252,237,3,141,69,252,255,252,233,244,33,255,248,
+  34,15,182,75,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,35,252,
+  247,217,193,252,233,3,139,124,36,24,137,151,233,137,202,72,139,8,72,137,77,
+  0,137,252,238,252,233,244,36,248,37,137,4,36,199,68,36,4,237,72,141,4,36,
+  128,123,252,252,235,15,133,244,247,65,141,142,233,137,41,199,65,4,237,137,
+  205,252,233,244,248,248,38,15,182,67,252,254,255,199,68,36,4,237,137,4,36,
+  255,252,242,15,42,192,252,242,15,17,4,36,255,72,141,4,36,252,233,244,247,
+  248,39,15,182,67,252,254,141,4,194,248,1,15,182,107,252,255,141,44,252,234,
+  248,2,139,124,36,24,137,151,233,137,252,238,72,137,194,137,252,253,137,92,
+  36,28,232,251,1,2,139,149,233,133,192,15,132,244,249,248,35,15,182,75,252,
+  253,72,139,40,72,137,44,202,139,3,15,182,204,15,182,232,131,195,4,193,232,
+  16,65,252,255,36,252,238,248,3,139,141,233,137,89,252,244,141,153,233,41,
+  211,139,105,252,248,184,237,252,233,244,30,248,40,137,4,36,199,68,36,4,237,
+  72,141,4,36,128,123,252,252,235,15,133,244,247,255,65,141,142,233,137,41,
+  199,65,4,237,137,205,252,233,244,248,248,41,15,182,67,252,254,255,72,141,
+  4,36,252,233,244,247,248,42,15,182,67,252,254,141,4,194,248,1,15,182,107,
+  252,255,141,44,252,234,248,2,139,124,36,24,137,151,233,137,252,238,72,137,
+  194,137,252,253,137,92,36,28,232,251,1,3,139,149,233,133,192,15,132,244,249,
+  15,182,75,252,253,72,139,44,202,72,137,40,248,43,139,3,15,182,204,15,182,
+  232,131,195,4,193,232,16,65,252,255,36,252,238,248,3,139,141,233,137,89,252,
+  244,15,182,67,252,253,72,139,44,194,72,137,105,16,141,153,233,41,211,139,
+  105,252,248,184,237,252,233,244,30,248,44,139,108,36,24,137,149,233,141,52,
+  202,141,20,194,137,252,239,15,182,75,252,252,137,92,36,28,232,251,1,4,248,
+  3,139,149,233,255,131,252,248,1,15,135,244,45,248,4,141,91,4,15,130,244,252,
+  248,5,15,183,67,252,254,141,156,253,131,233,248,6,139,3,15,182,204,15,182,
+  232,131,195,4,193,232,16,65,252,255,36,252,238,248,46,131,195,4,129,120,253,
+  4,239,15,130,244,5,252,233,244,6,248,47,129,120,253,4,239,252,233,244,4,248,
+  48,131,252,235,4,137,206,137,252,233,139,108,36,24,137,149,233,255,137,194,
+  137,252,239,137,92,36,28,232,251,1,5,252,233,244,3,248,49,255,131,252,235,
+  4,139,108,36,24,137,149,233,137,252,239,139,115,252,252,137,92,36,28,232,
+  251,1,6,252,233,244,3,255,248,50,255,15,182,107,252,255,255,248,51,65,141,
+  4,199,252,233,244,247,248,52,255,248,53,65,141,4,199,141,44,252,234,149,252,
+  233,244,248,248,54,141,4,194,137,197,252,233,244,248,248,55,255,248,56,141,
+  4,194,248,1,141,44,252,234,248,2,141,12,202,68,15,182,67,252,252,137,206,
+  137,193,139,124,36,24,137,151,233,137,252,234,137,252,253,137,92,36,28,232,
+  251,1,7,139,149,233,133,192,15,132,244,43,248,45,137,193,41,208,137,89,252,
+  244,141,152,233,184,237,252,233,244,28,248,57,139,108,36,24,137,149,233,141,
+  52,194,137,252,239,137,92,36,28,232,251,1,8,139,149,233,255,133,192,15,133,
+  244,45,15,183,67,252,254,139,60,194,252,233,244,58,255,252,233,244,45,255,
+  248,59,141,76,202,8,248,29,137,76,36,4,137,4,36,131,252,233,8,139,108,36,
+  24,137,149,233,137,206,141,20,193,137,252,239,137,92,36,28,232,251,1,9,139,
+  149,233,139,76,36,4,139,4,36,139,105,252,248,131,192,1,65,57,215,15,132,244,
+  60,137,202,137,90,252,252,139,157,233,139,11,15,182,252,233,15,182,205,131,
+  195,4,65,252,255,36,252,238,248,61,139,108,36,24,137,149,233,137,206,137,
+  252,239,137,92,36,28,232,251,1,10,139,149,233,139,67,252,252,15,182,204,15,
+  182,232,193,232,16,65,252,255,164,253,252,238,233,248,62,129,252,248,239,
+  15,130,244,63,139,106,4,129,252,253,239,15,131,244,63,139,90,252,252,137,
+  68,36,4,137,106,252,252,139,42,137,106,252,248,131,232,2,15,132,244,248,255,
+  137,209,248,1,131,193,8,72,139,41,72,137,105,252,248,131,232,1,15,133,244,
+  1,248,2,139,68,36,4,252,233,244,64,248,65,129,252,248,239,15,130,244,63,139,
+  106,4,137,252,233,193,252,249,15,131,252,249,252,254,15,132,244,249,184,237,
+  252,247,213,57,232,255,15,71,197,255,15,134,244,247,137,232,248,1,255,248,
+  2,139,106,252,248,139,132,253,197,233,139,90,252,252,199,66,252,252,237,137,
+  66,252,248,252,233,244,66,248,3,184,237,252,233,244,2,248,67,129,252,248,
+  239,15,130,244,63,139,106,4,139,90,252,252,129,252,253,239,15,133,244,252,
+  248,1,139,42,139,173,233,248,2,133,252,237,199,66,252,252,237,255,15,132,
+  244,66,65,139,134,233,199,66,252,252,237,137,106,252,248,139,141,233,35,136,
+  233,105,201,239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129,233,
+  15,132,244,251,248,4,139,137,233,133,201,15,133,244,3,255,252,233,244,66,
+  248,5,139,105,4,129,252,253,239,15,132,244,66,139,1,137,106,252,252,137,66,
+  252,248,252,233,244,66,248,6,129,252,253,239,15,132,244,1,129,252,253,239,
+  15,135,244,254,129,252,253,239,15,134,244,253,189,237,252,233,244,254,248,
+  7,255,189,237,248,8,252,247,213,65,139,172,253,174,233,252,233,244,2,248,
+  68,129,252,248,239,15,130,244,63,129,122,253,4,239,15,133,244,63,139,42,131,
+  189,233,0,15,133,244,63,129,122,253,12,239,15,133,244,63,139,66,8,137,133,
+  233,139,90,252,252,199,66,252,252,237,255,137,106,252,248,252,246,133,233,
+  235,15,132,244,247,128,165,233,235,65,139,134,233,65,137,174,233,137,133,
+  233,248,1,252,233,244,66,248,69,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,15,133,244,63,137,213,139,50,141,82,8,139,124,36,24,232,251,1,11,137,
+  252,234,72,139,40,139,90,252,252,72,137,106,252,248,252,233,244,66,248,70,
+  255,129,252,248,239,15,133,244,63,129,122,253,4,239,255,15,133,244,247,139,
+  42,252,233,244,71,248,1,15,135,244,63,255,15,131,244,63,255,252,242,15,16,
+  2,252,233,244,72,255,221,2,252,233,244,73,255,248,74,129,252,248,239,15,130,
+  244,63,139,90,252,252,129,122,253,4,239,15,133,244,249,139,2,248,2,199,66,
+  252,252,237,137,66,252,248,252,233,244,66,248,3,129,122,253,4,239,15,135,
+  244,63,65,131,190,233,0,15,133,244,63,65,139,174,233,65,59,174,233,255,15,
+  130,244,247,232,244,75,248,1,139,108,36,24,137,149,233,137,92,36,28,137,214,
+  137,252,239,255,232,251,1,12,255,232,251,1,13,255,139,149,233,252,233,244,
+  2,248,76,129,252,248,239,15,130,244,63,15,132,244,248,248,1,129,122,253,4,
+  239,15,133,244,63,139,108,36,24,137,149,233,137,149,233,139,90,252,252,139,
+  50,141,82,8,137,252,239,137,92,36,28,232,251,1,14,139,149,233,133,192,15,
+  132,244,249,72,139,106,8,72,139,66,16,72,137,106,252,248,72,137,2,248,77,
+  184,237,255,252,233,244,78,248,2,199,66,12,237,252,233,244,1,248,3,199,66,
+  252,252,237,252,233,244,66,248,79,129,252,248,239,15,130,244,63,139,42,129,
+  122,253,4,239,15,133,244,63,255,131,189,233,0,15,133,244,63,255,139,106,252,
+  248,139,133,233,139,90,252,252,199,66,252,252,237,137,66,252,248,199,66,12,
+  237,184,237,252,233,244,78,248,80,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,15,133,244,63,129,122,253,12,239,255,139,90,252,252,255,139,66,8,131,
+  192,1,199,66,252,252,237,137,66,252,248,255,252,242,15,16,66,8,72,189,237,
+  237,102,72,15,110,205,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,
+  252,248,255,139,42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,
+  120,253,4,239,15,132,244,81,72,139,40,72,137,42,252,233,244,77,248,2,131,
+  189,233,0,15,132,244,81,137,252,239,137,213,137,198,232,251,1,15,137,252,
+  234,133,192,15,133,244,1,248,81,184,237,252,233,244,78,248,82,255,139,106,
+  252,248,139,133,233,139,90,252,252,199,66,252,252,237,137,66,252,248,255,
+  199,66,12,237,199,66,8,0,0,0,0,255,15,87,192,252,242,15,17,66,8,255,217,252,
+  238,221,90,8,255,184,237,252,233,244,78,248,83,129,252,248,239,15,130,244,
+  63,141,74,8,131,232,1,187,237,248,1,65,15,182,174,233,193,252,237,235,131,
+  229,1,1,252,235,252,233,244,28,248,84,129,252,248,239,15,130,244,63,129,122,
+  253,12,239,15,133,244,63,255,139,106,4,137,106,12,199,66,4,237,139,42,139,
+  90,8,137,106,8,137,26,141,74,16,131,232,2,187,237,252,233,244,1,248,85,129,
+  252,248,239,15,130,244,63,139,42,139,90,252,252,137,92,36,28,137,44,36,129,
+  122,253,4,239,15,133,244,63,72,131,189,233,0,15,133,244,63,128,189,233,235,
+  15,135,244,63,139,141,233,15,132,244,247,255,59,141,233,15,132,244,63,248,
+  1,141,92,193,252,240,59,157,233,15,135,244,63,137,157,233,139,108,36,24,137,
+  149,233,131,194,8,137,149,233,141,108,194,232,72,41,221,57,203,15,132,244,
+  249,248,2,72,139,4,43,72,137,67,252,248,131,252,235,8,57,203,15,133,244,2,
+  248,3,137,206,139,60,36,232,244,25,65,199,134,233,237,255,139,108,36,24,139,
+  28,36,139,149,233,129,252,248,239,15,135,244,254,248,4,139,139,233,68,139,
+  187,233,137,139,233,68,137,252,251,41,203,15,132,244,252,141,4,26,193,252,
+  235,3,59,133,233,15,135,244,255,137,213,72,41,205,248,5,72,139,1,72,137,4,
+  41,131,193,8,68,57,252,249,15,133,244,5,248,6,141,67,2,199,66,252,252,237,
+  248,7,139,92,36,28,137,68,36,4,72,199,193,252,248,252,255,252,255,252,255,
+  252,247,195,237,255,15,132,244,13,252,233,244,14,248,8,199,66,252,252,237,
+  139,139,233,131,252,233,8,137,139,233,72,139,1,72,137,2,184,237,252,233,244,
+  7,248,9,139,12,36,68,137,185,233,137,222,137,252,239,232,251,1,0,139,28,36,
+  139,149,233,252,233,244,4,248,86,139,106,252,248,139,173,233,139,90,252,252,
+  137,92,36,28,137,44,36,72,131,189,233,0,15,133,244,63,255,128,189,233,235,
+  15,135,244,63,139,141,233,15,132,244,247,59,141,233,15,132,244,63,248,1,141,
+  92,193,252,248,59,157,233,15,135,244,63,137,157,233,139,108,36,24,137,149,
+  233,137,149,233,141,108,194,252,240,72,41,221,57,203,15,132,244,249,248,2,
+  255,72,139,4,43,72,137,67,252,248,131,252,235,8,57,203,15,133,244,2,248,3,
+  137,206,139,60,36,232,244,25,65,199,134,233,237,139,108,36,24,139,28,36,139,
+  149,233,129,252,248,239,15,135,244,254,248,4,139,139,233,68,139,187,233,137,
+  139,233,68,137,252,251,41,203,15,132,244,252,141,4,26,193,252,235,3,59,133,
+  233,15,135,244,255,255,137,213,72,41,205,248,5,72,139,1,72,137,4,41,131,193,
+  8,68,57,252,249,15,133,244,5,248,6,141,67,1,248,7,139,92,36,28,137,68,36,
+  4,49,201,252,247,195,237,15,132,244,13,252,233,244,14,248,8,137,222,137,252,
+  239,232,251,1,16,248,9,139,12,36,68,137,185,233,137,222,137,252,239,232,251,
+  1,0,139,28,36,139,149,233,252,233,244,4,248,87,139,108,36,24,72,252,247,133,
+  233,237,15,132,244,63,255,137,149,233,141,68,194,252,248,137,133,233,49,192,
+  72,137,133,233,176,235,136,133,233,252,233,244,16,255,248,71,255,248,73,139,
+  90,252,252,221,90,252,248,252,233,244,66,255,248,88,129,252,248,239,15,130,
+  244,63,255,129,122,253,4,239,15,133,244,248,139,42,131,252,253,0,15,137,244,
+  71,252,247,221,15,136,244,247,248,89,248,71,139,90,252,252,199,66,252,252,
+  237,137,106,252,248,252,233,244,66,248,1,139,90,252,252,199,66,252,252,0,
+  0,224,65,199,66,252,248,0,0,0,0,252,233,244,66,248,2,15,135,244,63,255,129,
+  122,253,4,239,15,131,244,63,255,252,242,15,16,2,72,184,237,237,102,72,15,
+  110,200,15,84,193,248,72,139,90,252,252,252,242,15,17,66,252,248,255,221,
+  2,217,225,248,72,248,73,139,90,252,252,221,90,252,248,255,248,66,184,237,
+  248,78,137,68,36,4,248,64,252,247,195,237,15,133,244,253,248,5,56,67,252,
+  255,15,135,244,252,15,182,75,252,253,72,252,247,209,141,20,202,139,3,15,182,
+  204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,6,199,68,194,
+  252,244,237,131,192,1,252,233,244,5,248,7,72,199,193,252,248,252,255,252,
+  255,252,255,252,233,244,14,248,90,255,129,122,253,4,239,15,133,244,247,139,
+  42,252,233,244,71,248,1,15,135,244,63,255,252,242,15,16,2,232,244,91,255,
+  252,242,15,45,232,129,252,253,0,0,0,128,15,133,244,71,252,242,15,42,205,102,
+  15,46,193,15,138,244,72,15,132,244,71,255,221,2,232,244,91,255,248,92,255,
+  252,242,15,16,2,232,244,93,255,221,2,232,244,93,255,248,94,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,15,81,2,252,233,244,
+  72,255,248,94,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,221,2,217,252,250,252,233,244,73,255,248,95,129,252,248,239,15,130,244,
+  63,129,122,253,4,239,15,131,244,63,217,252,237,221,2,217,252,241,252,233,
+  244,73,248,96,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,217,252,236,221,2,217,252,241,252,233,244,73,248,97,129,252,248,239,255,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,232,244,98,252,233,244,
+  73,248,99,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,
+  2,217,252,254,252,233,244,73,248,100,129,252,248,239,255,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,221,2,217,252,255,252,233,244,73,248,101,129,
+  252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,217,252,242,
+  221,216,252,233,244,73,248,102,129,252,248,239,15,130,244,63,255,129,122,
+  253,4,239,15,131,244,63,221,2,217,192,216,200,217,232,222,225,217,252,250,
+  217,252,243,252,233,244,73,248,103,129,252,248,239,15,130,244,63,129,122,
+  253,4,239,15,131,244,63,221,2,217,192,216,200,217,232,222,225,217,252,250,
+  217,201,217,252,243,252,233,244,73,248,104,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,15,131,244,63,255,221,2,217,232,217,252,243,252,233,244,
+  73,255,248,105,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,252,242,15,16,2,255,137,213,232,251,1,17,137,252,234,252,233,244,72,255,
+  248,106,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,
+  242,15,16,2,255,137,213,232,251,1,18,137,252,234,252,233,244,72,255,248,107,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,15,
+  16,2,255,137,213,232,251,1,19,137,252,234,252,233,244,72,248,108,255,248,
+  109,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,
+  15,16,2,139,106,252,248,252,242,15,89,133,233,252,233,244,72,255,248,109,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,139,106,
+  252,248,220,141,233,252,233,244,73,255,248,110,129,252,248,239,15,130,244,
+  63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,63,221,2,
+  221,66,8,217,252,243,252,233,244,73,248,111,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,15,131,244,63,129,122,253,12,239,255,15,131,244,63,221,
+  66,8,221,2,217,252,253,221,217,252,233,244,73,248,112,129,252,248,239,15,
+  130,244,63,139,106,4,129,252,253,239,15,131,244,63,139,90,252,252,139,2,137,
+  106,252,252,137,66,252,248,209,229,129,252,253,0,0,224,252,255,15,131,244,
+  249,9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,0,15,130,244,
+  250,248,1,193,252,237,21,41,197,255,252,242,15,42,197,255,137,44,36,219,4,
+  36,255,139,106,252,252,129,229,252,255,252,255,15,128,129,205,0,0,224,63,
+  137,106,252,252,248,2,255,252,242,15,17,2,255,221,26,255,184,237,252,233,
+  244,78,248,3,255,15,87,192,252,233,244,2,255,217,252,238,252,233,244,2,255,
+  248,4,255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,252,242,15,89,
+  193,252,242,15,17,66,252,248,255,221,2,199,4,36,0,0,128,90,216,12,36,221,
+  90,252,248,255,139,106,252,252,184,52,4,0,0,209,229,252,233,244,1,255,248,
+  113,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,
+  15,16,2,255,248,113,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,221,2,255,139,106,4,139,90,252,252,209,229,129,252,253,0,0,224,252,
+  255,15,132,244,250,255,15,40,224,232,244,114,252,242,15,92,224,248,1,252,
+  242,15,17,66,252,248,252,242,15,17,34,255,217,192,232,244,114,220,252,233,
+  248,1,221,90,252,248,221,26,255,139,66,252,252,139,106,4,49,232,15,136,244,
+  249,248,2,184,237,252,233,244,78,248,3,129,252,245,0,0,0,128,137,106,4,252,
+  233,244,2,248,4,255,15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,
+  244,1,255,248,115,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,129,122,253,12,239,15,131,244,63,221,66,8,221,2,248,1,217,252,248,
+  223,224,158,15,138,244,1,221,217,252,233,244,73,255,248,116,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,252,242,15,16,2,252,242,15,16,74,8,232,244,117,252,233,244,72,255,248,
+  116,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,
+  253,12,239,15,131,244,63,221,2,221,66,8,232,244,117,252,233,244,73,255,248,
+  118,185,2,0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,
+  15,131,244,71,129,124,253,202,252,252,239,15,133,244,249,59,108,202,252,248,
+  15,79,108,202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,63,255,252,
+  233,244,252,248,4,15,135,244,63,255,252,242,15,16,2,248,5,57,193,15,131,244,
+  72,129,124,253,202,252,252,239,255,15,130,244,252,15,135,244,63,252,242,15,
+  42,76,202,252,248,252,233,244,253,255,248,6,252,242,15,16,76,202,252,248,
+  248,7,252,242,15,93,193,131,193,1,252,233,244,5,255,248,119,185,2,0,0,0,129,
+  122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,15,131,244,71,129,124,
+  253,202,252,252,239,15,133,244,249,59,108,202,252,248,15,76,108,202,252,248,
+  131,193,1,252,233,244,1,248,3,15,135,244,63,255,248,6,252,242,15,16,76,202,
+  252,248,248,7,252,242,15,95,193,131,193,1,252,233,244,5,255,248,9,221,216,
+  252,233,244,63,255,248,120,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,133,244,63,139,42,255,139,173,233,252,233,244,71,255,252,242,15,42,133,
+  233,252,233,244,72,255,219,133,233,252,233,244,73,255,248,121,129,252,248,
+  239,15,133,244,63,129,122,253,4,239,15,133,244,63,139,42,139,90,252,252,131,
+  189,233,1,15,130,244,81,15,182,173,233,255,252,242,15,42,197,252,233,244,
+  72,255,137,44,36,219,4,36,252,233,244,73,255,248,122,65,139,174,233,65,59,
+  174,233,15,130,244,247,232,244,75,248,1,129,252,248,239,15,133,244,63,129,
+  122,253,4,239,255,15,133,244,63,139,42,129,252,253,252,255,0,0,0,15,135,244,
+  63,137,108,36,4,255,15,131,244,63,252,242,15,44,42,129,252,253,252,255,0,
+  0,0,15,135,244,63,137,108,36,4,255,15,131,244,63,221,2,219,92,36,4,129,124,
+  36,4,252,255,0,0,0,15,135,244,63,255,199,68,36,8,1,0,0,0,72,141,68,36,4,248,
+  123,139,108,36,24,137,149,233,139,84,36,8,72,137,198,137,252,239,137,92,36,
+  28,232,251,1,20,139,149,233,139,90,252,252,199,66,252,252,237,137,66,252,
+  248,252,233,244,66,248,124,65,139,174,233,65,59,174,233,15,130,244,247,232,
+  244,75,248,1,199,68,36,4,252,255,252,255,252,255,252,255,129,252,248,239,
+  15,130,244,63,15,134,244,247,129,122,253,20,239,255,15,133,244,63,139,106,
+  16,137,108,36,4,255,15,131,244,63,252,242,15,44,106,16,137,108,36,4,255,15,
+  131,244,63,221,66,16,219,92,36,4,255,248,1,129,122,253,4,239,15,133,244,63,
+  129,122,253,12,239,255,139,42,137,108,36,8,139,173,233,255,139,74,8,255,252,
+  242,15,44,74,8,255,139,68,36,4,57,197,15,130,244,251,248,2,133,201,15,142,
+  244,253,248,3,139,108,36,8,41,200,15,140,244,125,141,172,253,13,233,131,192,
+  1,248,4,137,68,36,8,137,232,252,233,244,123,248,5,15,140,244,252,141,68,40,
+  1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244,254,1,252,
+  233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248,125,49,192,
+  252,233,244,4,248,126,129,252,248,239,15,130,244,63,65,139,174,233,65,59,
+  174,233,15,130,244,247,232,244,75,248,1,255,129,122,253,4,239,15,133,244,
+  63,129,122,253,12,239,139,42,255,15,133,244,63,139,66,8,255,15,131,244,63,
+  252,242,15,44,66,8,255,15,131,244,63,221,66,8,219,92,36,4,139,68,36,4,255,
+  133,192,15,142,244,125,131,189,233,1,15,130,244,125,15,133,244,127,65,57,
+  134,233,15,130,244,127,15,182,141,233,65,139,174,233,137,68,36,8,248,1,136,
+  77,0,131,197,1,131,232,1,15,133,244,1,65,139,134,233,252,233,244,123,248,
+  128,129,252,248,239,255,15,130,244,63,65,139,174,233,65,59,174,233,15,130,
+  244,247,232,244,75,248,1,129,122,253,4,239,15,133,244,63,139,42,139,133,233,
+  133,192,15,132,244,125,65,57,134,233,15,130,244,129,129,197,239,137,92,36,
+  4,137,68,36,8,65,139,158,233,248,1,255,15,182,77,0,131,197,1,131,232,1,136,
+  12,3,15,133,244,1,137,216,139,92,36,4,252,233,244,123,248,130,129,252,248,
+  239,15,130,244,63,65,139,174,233,65,59,174,233,15,130,244,247,232,244,75,
+  248,1,129,122,253,4,239,15,133,244,63,139,42,139,133,233,65,57,134,233,255,
+  15,130,244,129,129,197,239,137,92,36,4,137,68,36,8,65,139,158,233,252,233,
+  244,249,248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,249,90,
+  15,135,244,248,131,252,241,32,248,2,136,12,3,248,3,131,232,1,15,137,244,1,
+  137,216,139,92,36,4,252,233,244,123,248,131,129,252,248,239,15,130,244,63,
+  255,65,139,174,233,65,59,174,233,15,130,244,247,232,244,75,248,1,129,122,
+  253,4,239,15,133,244,63,139,42,139,133,233,65,57,134,233,15,130,244,129,129,
+  197,239,137,92,36,4,137,68,36,8,65,139,158,233,252,233,244,249,248,1,15,182,
+  76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,
+  252,241,32,248,2,136,12,3,248,3,131,232,1,15,137,244,1,137,216,139,92,36,
+  4,252,233,244,123,248,132,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,133,244,63,137,213,139,58,232,251,1,21,137,252,234,255,137,197,252,233,
+  244,71,255,252,242,15,42,192,252,233,244,72,255,248,133,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,89,248,
+  1,15,135,244,63,255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,252,
+  242,15,88,193,102,15,126,197,255,252,233,244,89,255,248,134,129,252,248,239,
+  15,130,244,63,255,72,189,237,237,102,72,15,110,205,255,199,4,36,0,0,192,89,
+  255,15,133,244,247,139,42,252,233,244,248,248,1,15,135,244,63,255,252,242,
+  15,16,2,252,242,15,88,193,102,15,126,197,255,248,2,137,68,36,4,141,68,194,
+  252,240,248,1,57,208,15,134,244,89,129,120,253,4,239,255,15,133,244,248,35,
+  40,131,232,8,252,233,244,1,248,2,15,135,244,135,255,15,131,244,135,255,252,
+  242,15,16,0,252,242,15,88,193,102,15,126,193,33,205,255,131,232,8,252,233,
+  244,1,248,136,129,252,248,239,15,130,244,63,255,15,133,244,248,11,40,131,
+  232,8,252,233,244,1,248,2,15,135,244,135,255,252,242,15,16,0,252,242,15,88,
+  193,102,15,126,193,9,205,255,131,232,8,252,233,244,1,248,137,129,252,248,
+  239,15,130,244,63,255,15,133,244,248,51,40,131,232,8,252,233,244,1,248,2,
+  15,135,244,135,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,49,205,
+  255,131,232,8,252,233,244,1,248,138,129,252,248,239,15,130,244,63,129,122,
+  253,4,239,255,248,2,15,205,252,233,244,89,248,139,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,255,248,2,252,247,213,255,248,89,252,242,15,42,197,
+  252,233,244,72,255,248,135,139,68,36,4,252,233,244,63,255,248,140,129,252,
+  248,239,15,130,244,63,129,122,253,4,239,255,248,2,129,122,253,12,239,15,133,
+  244,63,139,74,8,255,248,140,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,
+  16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,88,
+  202,102,15,126,197,102,15,126,201,255,211,229,252,233,244,89,255,248,141,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,141,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,252,
+  242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,211,252,
+  237,252,233,244,89,255,248,142,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,255,248,142,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,74,
   8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,88,202,102,
-  15,126,197,102,15,126,201,255,211,205,252,233,244,88,248,126,184,237,252,
-  233,244,62,248,128,184,237,248,62,139,108,36,24,139,90,252,252,137,92,36,
-  28,137,149,233,141,68,194,252,248,141,136,233,137,133,233,139,66,252,248,
-  59,141,233,15,135,244,251,137,252,239,252,255,144,233,139,149,233,133,192,
-  15,143,244,77,248,1,255,139,141,233,41,209,193,252,233,3,133,192,141,65,1,
-  139,106,252,248,15,133,244,32,139,157,233,139,11,15,182,252,233,15,182,205,
-  131,195,4,65,252,255,36,252,238,248,32,137,209,252,247,195,237,15,133,244,
-  249,15,182,107,252,253,72,252,247,213,141,20,252,234,252,233,244,28,248,3,
-  137,221,131,229,252,248,41,252,234,252,233,244,28,248,5,190,237,137,252,239,
-  232,251,1,0,139,149,233,49,192,252,233,244,1,248,74,93,72,137,108,36,8,139,
-  108,36,24,137,92,36,28,137,149,233,255,141,68,194,252,248,137,252,239,137,
-  133,233,232,251,1,22,139,149,233,139,133,233,41,208,193,232,3,131,192,1,72,
-  139,108,36,8,85,195,248,144,255,65,15,182,134,233,168,235,15,133,244,251,
-  168,235,15,133,244,247,168,235,15,132,244,247,65,252,255,142,233,252,233,
-  244,247,255,248,145,65,15,182,134,233,168,235,15,133,244,251,252,233,244,
-  247,248,146,65,15,182,134,233,168,235,15,133,244,251,168,235,15,132,244,251,
-  65,252,255,142,233,15,132,244,247,168,235,15,132,244,251,248,1,255,139,108,
-  36,24,137,149,233,137,222,137,252,239,232,251,1,23,248,3,139,149,233,248,
-  4,15,182,75,252,253,248,5,15,182,107,252,252,15,183,67,252,254,65,252,255,
-  164,253,252,238,233,248,147,131,195,4,139,77,232,137,76,36,4,252,233,244,
-  4,248,148,255,139,106,252,248,139,173,233,15,182,133,233,141,4,194,139,108,
-  36,24,137,149,233,137,133,233,137,222,65,141,190,233,73,137,174,233,137,92,
-  36,28,232,251,1,24,252,233,244,3,255,248,149,137,92,36,28,255,248,150,255,
-  137,92,36,28,131,203,1,248,1,255,141,68,194,252,248,139,108,36,24,137,149,
-  233,137,133,233,137,222,137,252,239,232,251,1,25,199,68,36,28,0,0,0,0,255,
-  131,227,252,254,255,139,149,233,72,137,193,139,133,233,41,208,72,137,205,
-  15,182,75,252,253,193,232,3,131,192,1,252,255,229,248,151,255,65,85,65,84,
-  65,83,65,82,65,81,65,80,87,86,85,72,141,108,36,88,85,83,82,81,80,15,182,69,
-  252,248,138,101,252,240,76,137,125,252,248,76,137,117,252,240,68,139,117,
-  0,65,139,142,233,65,199,134,233,237,65,137,134,233,65,137,142,233,72,129,
-  252,236,239,72,131,197,128,252,242,68,15,17,125,252,248,252,242,68,15,17,
-  117,252,240,252,242,68,15,17,109,232,252,242,68,15,17,101,224,252,242,68,
-  15,17,93,216,252,242,68,15,17,85,208,252,242,68,15,17,77,200,252,242,68,15,
-  17,69,192,252,242,15,17,125,184,252,242,15,17,117,176,252,242,15,17,109,168,
-  252,242,15,17,101,160,252,242,15,17,93,152,252,242,15,17,85,144,252,242,15,
-  17,77,136,252,242,15,17,69,128,65,139,174,233,65,139,150,233,73,137,174,233,
-  65,199,134,233,0,0,0,0,137,149,233,72,137,230,65,141,190,233,232,251,1,26,
-  72,139,141,233,72,129,225,239,72,137,204,137,169,233,139,149,233,139,153,
-  233,252,233,244,247,255,248,152,255,72,131,196,16,248,1,76,139,108,36,8,76,
-  139,36,36,133,192,15,136,244,249,137,68,36,4,68,139,122,252,248,69,139,191,
-  233,69,139,191,233,65,199,134,233,0,0,0,0,65,199,134,233,237,139,3,15,182,
-  204,15,182,232,131,195,4,193,232,16,129,252,253,239,15,130,244,248,139,68,
-  36,4,248,2,65,252,255,36,252,238,248,3,252,247,216,137,252,239,137,198,232,
-  251,1,1,255,248,90,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,
-  4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,
-  36,4,139,68,36,8,195,255,248,153,72,184,237,237,102,72,15,110,208,72,184,
+  15,126,197,102,15,126,201,255,211,252,253,252,233,244,89,255,248,143,129,
+  252,248,239,15,130,244,63,129,122,253,4,239,255,248,143,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,252,
+  242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,211,197,
+  252,233,244,89,255,248,144,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  255,248,144,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,
+  129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,74,8,72,189,
+  237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,88,202,102,15,126,
+  197,102,15,126,201,255,211,205,252,233,244,89,248,127,184,237,252,233,244,
+  63,248,129,184,237,248,63,139,108,36,24,139,90,252,252,137,92,36,28,137,149,
+  233,141,68,194,252,248,141,136,233,137,133,233,139,66,252,248,59,141,233,
+  15,135,244,251,137,252,239,252,255,144,233,139,149,233,133,192,15,143,244,
+  78,248,1,255,139,141,233,41,209,193,252,233,3,133,192,141,65,1,139,106,252,
+  248,15,133,244,33,139,157,233,139,11,15,182,252,233,15,182,205,131,195,4,
+  65,252,255,36,252,238,248,33,137,209,252,247,195,237,15,133,244,249,15,182,
+  107,252,253,72,252,247,213,141,20,252,234,252,233,244,28,248,3,137,221,131,
+  229,252,248,41,252,234,252,233,244,28,248,5,190,237,137,252,239,232,251,1,
+  0,139,149,233,49,192,252,233,244,1,248,75,93,72,137,108,36,8,139,108,36,24,
+  137,92,36,28,137,149,233,255,141,68,194,252,248,137,252,239,137,133,233,232,
+  251,1,22,139,149,233,139,133,233,41,208,193,232,3,131,192,1,72,139,108,36,
+  8,85,195,248,145,255,65,15,182,134,233,168,235,15,133,244,251,168,235,15,
+  133,244,247,168,235,15,132,244,247,65,252,255,142,233,252,233,244,247,255,
+  248,146,65,15,182,134,233,168,235,15,133,244,251,252,233,244,247,248,147,
+  65,15,182,134,233,168,235,15,133,244,251,168,235,15,132,244,251,65,252,255,
+  142,233,15,132,244,247,168,235,15,132,244,251,248,1,255,139,108,36,24,137,
+  149,233,137,222,137,252,239,232,251,1,23,248,3,139,149,233,248,4,15,182,75,
+  252,253,248,5,15,182,107,252,252,15,183,67,252,254,65,252,255,164,253,252,
+  238,233,248,148,131,195,4,139,77,232,137,76,36,4,252,233,244,4,248,149,255,
+  139,106,252,248,139,173,233,15,182,133,233,141,4,194,139,108,36,24,137,149,
+  233,137,133,233,137,222,65,141,190,233,73,137,174,233,137,92,36,28,232,251,
+  1,24,252,233,244,3,255,248,150,137,92,36,28,255,248,151,255,137,92,36,28,
+  131,203,1,248,1,255,141,68,194,252,248,139,108,36,24,137,149,233,137,133,
+  233,137,222,137,252,239,232,251,1,25,199,68,36,28,0,0,0,0,255,131,227,252,
+  254,255,139,149,233,72,137,193,139,133,233,41,208,72,137,205,15,182,75,252,
+  253,193,232,3,131,192,1,252,255,229,248,152,255,65,85,65,84,65,83,65,82,65,
+  81,65,80,87,86,85,72,141,108,36,88,85,83,82,81,80,15,182,69,252,248,138,101,
+  252,240,76,137,125,252,248,76,137,117,252,240,68,139,117,0,65,139,142,233,
+  65,199,134,233,237,65,137,134,233,65,137,142,233,72,129,252,236,239,72,131,
+  197,128,252,242,68,15,17,125,252,248,252,242,68,15,17,117,252,240,252,242,
+  68,15,17,109,232,252,242,68,15,17,101,224,252,242,68,15,17,93,216,252,242,
+  68,15,17,85,208,252,242,68,15,17,77,200,252,242,68,15,17,69,192,252,242,15,
+  17,125,184,252,242,15,17,117,176,252,242,15,17,109,168,252,242,15,17,101,
+  160,252,242,15,17,93,152,252,242,15,17,85,144,252,242,15,17,77,136,252,242,
+  15,17,69,128,65,139,174,233,65,139,150,233,73,137,174,233,65,199,134,233,
+  0,0,0,0,137,149,233,72,137,230,65,141,190,233,232,251,1,26,72,139,141,233,
+  72,129,225,239,72,137,204,137,169,233,139,149,233,139,153,233,252,233,244,
+  247,255,248,153,255,72,131,196,16,248,1,76,139,108,36,8,76,139,36,36,133,
+  192,15,136,244,249,137,68,36,4,68,139,122,252,248,69,139,191,233,69,139,191,
+  233,65,199,134,233,0,0,0,0,65,199,134,233,237,139,3,15,182,204,15,182,232,
+  131,195,4,193,232,16,129,252,253,239,15,130,244,248,139,68,36,4,248,2,65,
+  252,255,36,252,238,248,3,252,247,216,137,252,239,137,198,232,251,1,1,255,
+  248,91,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,
+  255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,
+  36,8,195,255,248,154,72,184,237,237,102,72,15,110,208,72,184,237,237,102,
+  72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,
+  85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,72,184,237,237,102,
+  72,15,110,208,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,
+  193,248,1,195,248,93,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,
+  4,102,37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,
+  36,4,139,68,36,8,195,255,248,155,72,184,237,237,102,72,15,110,208,72,184,
   237,237,102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,
   247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,72,184,
-  237,237,102,72,15,110,208,252,242,15,194,193,1,102,15,84,194,252,242,15,92,
-  200,15,40,193,248,1,195,248,92,255,217,124,36,4,137,68,36,8,102,184,0,8,102,
-  11,68,36,4,102,37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,
-  217,108,36,4,139,68,36,8,195,255,248,154,72,184,237,237,102,72,15,110,208,
-  72,184,237,237,102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,
-  134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,
-  72,184,237,237,102,72,15,110,208,252,242,15,194,193,6,102,15,84,194,252,242,
-  15,92,200,15,40,193,248,1,195,248,113,255,217,124,36,4,137,68,36,8,102,184,
-  0,12,102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,
-  139,68,36,8,195,255,248,155,72,184,237,237,102,72,15,110,208,72,184,237,237,
-  102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,
-  15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,72,184,237,237,102,
-  72,15,110,216,252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,
-  86,202,15,40,193,248,1,195,248,156,255,15,40,232,252,242,15,94,193,72,184,
-  237,237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,15,40,224,102,
-  15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,
-  242,15,92,227,102,15,86,226,72,184,237,237,102,72,15,110,208,252,242,15,194,
-  196,1,102,15,84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,
-  15,92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,255,
-  217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,
-  252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,
-  252,233,195,255,248,97,217,252,234,222,201,248,157,217,84,36,252,248,129,
-  124,36,252,248,0,0,128,127,15,132,244,247,129,124,36,252,248,0,0,128,252,
-  255,15,132,244,248,248,158,217,192,217,252,252,220,252,233,217,201,217,252,
-  240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,
-  195,255,248,116,255,248,159,252,242,15,45,193,252,242,15,42,208,102,15,46,
-  202,15,133,244,254,15,138,244,255,248,160,131,252,248,1,15,142,244,252,248,
-  1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,252,233,244,1,248,
-  2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,192,209,232,15,132,
-  244,250,15,131,244,3,255,252,242,15,89,200,252,233,244,3,248,4,252,242,15,
-  89,193,248,5,195,248,6,15,132,244,5,15,130,244,253,252,247,216,232,244,1,
-  72,184,237,237,102,72,15,110,200,252,242,15,94,200,15,40,193,195,248,7,72,
-  184,237,237,102,72,15,110,192,195,248,8,102,72,15,126,200,72,209,224,72,193,
-  192,12,72,61,252,254,15,0,0,15,132,244,248,102,72,15,126,192,72,209,224,15,
-  132,244,250,255,72,193,192,12,72,61,252,254,15,0,0,15,132,244,251,252,242,
-  15,17,76,36,252,240,252,242,15,17,68,36,252,248,221,68,36,252,240,221,68,
-  36,252,248,217,252,241,217,192,217,252,252,220,252,233,217,201,217,252,240,
-  217,232,222,193,217,252,253,221,217,221,92,36,252,248,252,242,15,16,68,36,
-  252,248,195,248,9,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,
-  247,15,40,193,248,1,195,248,2,72,184,237,237,102,72,15,110,208,102,15,84,
-  194,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,1,102,15,80,
-  193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,72,184,237,237,
-  255,102,72,15,110,192,195,248,4,102,15,80,193,133,192,15,133,244,3,15,87,
-  192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,248,161,255,
-  131,252,255,1,15,130,244,90,15,132,244,92,131,252,255,3,15,130,244,113,15,
-  135,244,248,252,242,15,81,192,195,248,2,252,242,15,17,68,36,252,248,221,68,
-  36,252,248,131,252,255,5,15,135,244,248,15,132,244,247,232,244,97,252,233,
-  244,253,248,1,232,244,157,255,252,233,244,253,248,2,131,252,255,7,15,132,
-  244,247,15,135,244,248,217,252,237,217,201,217,252,241,252,233,244,253,248,
-  1,217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,255,9,15,132,
-  244,247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,244,253,248,
-  1,255,217,252,254,252,233,244,253,248,2,131,252,255,11,15,132,244,247,15,
-  135,244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,216,248,7,221,
-  92,36,252,248,252,242,15,16,68,36,252,248,195,255,139,124,36,12,221,68,36,
-  4,131,252,255,1,15,130,244,90,15,132,244,92,131,252,255,3,15,130,244,113,
-  15,135,244,248,217,252,250,195,248,2,131,252,255,5,15,130,244,97,15,132,244,
-  157,131,252,255,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,
+  237,237,102,72,15,110,208,252,242,15,194,193,6,102,15,84,194,252,242,15,92,
+  200,15,40,193,248,1,195,248,114,255,217,124,36,4,137,68,36,8,102,184,0,12,
+  102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,
+  68,36,8,195,255,248,156,72,184,237,237,102,72,15,110,208,72,184,237,237,102,
+  72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,
+  85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,72,184,237,237,102,72,
+  15,110,216,252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,86,
+  202,15,40,193,248,1,195,248,157,255,15,40,232,252,242,15,94,193,72,184,237,
+  237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,15,40,224,102,15,84,
+  226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,242,
+  15,92,227,102,15,86,226,72,184,237,237,102,72,15,110,208,252,242,15,194,196,
+  1,102,15,84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,15,
+  92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,255,217,
+  193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,
+  247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,
+  233,195,255,248,98,217,252,234,222,201,248,158,217,84,36,252,248,129,124,
+  36,252,248,0,0,128,127,15,132,244,247,129,124,36,252,248,0,0,128,252,255,
+  15,132,244,248,248,159,217,192,217,252,252,220,252,233,217,201,217,252,240,
+  217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,
+  255,248,117,255,248,160,252,242,15,45,193,252,242,15,42,208,102,15,46,202,
+  15,133,244,254,15,138,244,255,248,161,131,252,248,1,15,142,244,252,248,1,
+  169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,252,233,244,1,248,2,
+  209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,192,209,232,15,132,244,
+  250,15,131,244,3,255,252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,
+  193,248,5,195,248,6,15,132,244,5,15,130,244,253,252,247,216,232,244,1,72,
+  184,237,237,102,72,15,110,200,252,242,15,94,200,15,40,193,195,248,7,72,184,
+  237,237,102,72,15,110,192,195,248,8,102,72,15,126,200,72,209,224,72,193,192,
+  12,72,61,252,254,15,0,0,15,132,244,248,102,72,15,126,192,72,209,224,15,132,
+  244,250,255,72,193,192,12,72,61,252,254,15,0,0,15,132,244,251,252,242,15,
+  17,76,36,252,240,252,242,15,17,68,36,252,248,221,68,36,252,240,221,68,36,
+  252,248,217,252,241,217,192,217,252,252,220,252,233,217,201,217,252,240,217,
+  232,222,193,217,252,253,221,217,221,92,36,252,248,252,242,15,16,68,36,252,
+  248,195,248,9,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,247,
+  15,40,193,248,1,195,248,2,72,184,237,237,102,72,15,110,208,102,15,84,194,
+  72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,1,102,15,80,193,
+  15,87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,72,184,237,237,255,
+  102,72,15,110,192,195,248,4,102,15,80,193,133,192,15,133,244,3,15,87,192,
+  195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,248,162,255,131,
+  252,255,1,15,130,244,91,15,132,244,93,131,252,255,3,15,130,244,114,15,135,
+  244,248,252,242,15,81,192,195,248,2,252,242,15,17,68,36,252,248,221,68,36,
+  252,248,131,252,255,5,15,135,244,248,15,132,244,247,232,244,98,252,233,244,
+  253,248,1,232,244,158,255,252,233,244,253,248,2,131,252,255,7,15,132,244,
+  247,15,135,244,248,217,252,237,217,201,217,252,241,252,233,244,253,248,1,
+  217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,255,9,15,132,244,
+  247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,244,253,248,1,
+  255,217,252,254,252,233,244,253,248,2,131,252,255,11,15,132,244,247,15,135,
+  244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,216,248,7,221,92,
+  36,252,248,252,242,15,16,68,36,252,248,195,255,139,124,36,12,221,68,36,4,
+  131,252,255,1,15,130,244,91,15,132,244,93,131,252,255,3,15,130,244,114,15,
+  135,244,248,217,252,250,195,248,2,131,252,255,5,15,130,244,98,15,132,244,
+  158,131,252,255,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,
   241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,255,9,15,132,
   244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217,
   252,254,195,248,2,131,252,255,11,15,132,244,247,15,135,244,255,217,252,255,
-  195,248,1,217,252,242,221,216,195,255,248,9,204,255,248,162,255,131,252,255,
+  195,248,1,217,252,242,221,216,195,255,248,9,204,255,248,163,255,131,252,255,
   1,15,132,244,247,15,135,244,248,252,242,15,88,193,195,248,1,252,242,15,92,
   193,195,248,2,131,252,255,3,15,132,244,247,15,135,244,248,252,242,15,89,193,
-  195,248,1,252,242,15,94,193,195,248,2,131,252,255,5,15,130,244,156,15,132,
-  244,116,131,252,255,7,15,132,244,247,15,135,244,248,72,184,237,237,255,102,
+  195,248,1,252,242,15,94,193,195,248,2,131,252,255,5,15,130,244,157,15,132,
+  244,117,131,252,255,7,15,132,244,247,15,135,244,248,72,184,237,237,255,102,
   72,15,110,200,15,87,193,195,248,1,72,184,237,237,102,72,15,110,200,15,84,
   193,195,248,2,131,252,255,9,15,135,244,248,252,242,15,17,68,36,252,248,252,
   242,15,17,76,36,252,240,221,68,36,252,248,221,68,36,252,240,15,132,244,247,
@@ -481,55 +482,65 @@ static const unsigned char build_actionlist[16165] = {
   9,204,255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,
   247,15,135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3,
   15,132,244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131,
-  252,248,5,15,130,244,156,15,132,244,116,131,252,248,7,15,132,244,247,15,135,
+  252,248,5,15,130,244,157,15,132,244,117,131,252,248,7,15,132,244,247,15,135,
   244,248,255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248,
   9,15,132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253,
   221,217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252,
   233,219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225,
   223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221,
   225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248,
-  163,137,252,248,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,195,248,164,
-  255,204,248,165,255,85,72,137,229,83,72,137,252,251,139,131,233,72,41,196,
-  255,15,182,139,233,131,252,233,1,15,136,244,248,248,1,72,139,132,253,203,
-  233,72,137,132,253,204,233,131,252,233,1,15,137,244,1,248,2,15,182,131,233,
-  72,139,187,233,72,139,179,233,72,139,147,233,72,139,139,233,76,139,131,233,
-  76,139,139,233,133,192,15,132,244,251,15,40,131,233,15,40,139,233,255,15,
-  40,147,233,15,40,155,233,131,252,248,4,15,134,244,251,15,40,163,233,15,40,
-  171,233,15,40,179,233,15,40,187,233,248,5,252,255,147,233,72,137,131,233,
-  15,41,131,233,72,137,147,233,15,41,139,233,255,72,139,93,252,248,201,195,
-  255,249,255,129,124,253,202,4,239,15,133,244,253,129,124,253,194,4,239,15,
-  133,244,254,139,44,202,131,195,4,59,44,194,255,15,141,244,255,255,15,140,
-  244,255,255,15,143,244,255,255,15,142,244,255,255,248,6,15,183,67,252,254,
-  141,156,253,131,233,248,9,139,3,15,182,204,15,182,232,131,195,4,193,232,16,
-  65,252,255,36,252,238,248,7,15,135,244,43,129,124,253,194,4,239,15,130,244,
-  247,15,133,244,43,255,252,242,15,42,4,194,252,233,244,248,255,221,4,202,219,
-  4,194,252,233,244,249,255,248,8,15,135,244,43,255,252,242,15,42,12,202,252,
-  242,15,16,4,194,131,195,4,102,15,46,193,255,15,134,244,9,255,15,135,244,9,
-  255,15,130,244,9,255,15,131,244,9,255,252,233,244,6,255,219,4,202,252,233,
-  244,248,255,129,124,253,202,4,239,15,131,244,43,129,124,253,194,4,239,15,
-  131,244,43,255,248,1,252,242,15,16,4,194,248,2,131,195,4,102,15,46,4,202,
-  248,3,255,248,1,221,4,202,248,2,221,4,194,248,3,131,195,4,255,223,252,233,
-  221,216,255,218,252,233,223,224,158,255,15,134,244,247,255,15,135,244,247,
-  255,15,130,244,247,255,15,131,244,247,255,15,183,67,252,254,141,156,253,131,
-  233,248,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,
-  252,238,255,139,108,194,4,131,195,4,255,129,252,253,239,15,133,244,253,129,
-  124,253,202,4,239,15,133,244,254,139,44,194,59,44,202,255,15,133,244,255,
-  255,15,132,244,255,255,15,183,67,252,254,141,156,253,131,233,248,9,139,3,
-  15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,7,15,
-  135,244,251,129,124,253,202,4,239,15,130,244,247,15,133,244,251,255,252,242,
-  15,42,4,202,255,219,4,202,255,252,233,244,248,248,8,15,135,244,251,255,252,
-  242,15,42,4,194,102,15,46,4,202,255,219,4,194,221,4,202,255,252,233,244,250,
-  255,129,252,253,239,15,131,244,251,129,124,253,202,4,239,15,131,244,251,255,
-  248,1,252,242,15,16,4,202,248,2,102,15,46,4,194,248,4,255,248,1,221,4,202,
-  248,2,221,4,194,248,4,255,15,138,244,248,15,133,244,248,255,15,138,244,248,
-  15,132,244,247,255,248,1,15,183,67,252,254,141,156,253,131,233,248,2,255,
-  248,2,15,183,67,252,254,141,156,253,131,233,248,1,255,252,233,244,9,255,248,
-  5,255,129,252,253,239,15,132,244,48,129,124,253,202,4,239,15,132,244,48,255,
+  164,137,252,248,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,195,248,165,
+  255,204,248,166,255,83,65,87,65,86,72,131,252,236,40,68,141,181,233,139,157,
+  233,15,183,192,137,131,233,72,137,187,233,72,137,179,233,72,137,147,233,72,
+  137,139,233,252,242,15,17,131,233,252,242,15,17,139,233,252,242,15,17,147,
+  233,252,242,15,17,155,233,72,141,132,253,36,233,76,137,131,233,76,137,139,
+  233,252,242,15,17,163,233,252,242,15,17,171,233,252,242,15,17,179,233,252,
+  242,15,17,187,233,72,137,131,233,72,137,230,137,92,36,28,137,223,232,251,
+  1,27,65,199,134,233,237,255,139,144,233,139,128,233,41,208,139,106,252,248,
+  193,232,3,131,192,1,139,157,233,139,11,15,182,252,233,15,182,205,131,195,
+  4,65,252,255,36,252,238,255,248,32,255,139,76,36,24,65,139,158,233,72,137,
+  139,233,137,145,233,137,169,233,137,223,137,198,232,251,1,28,72,139,131,233,
+  252,242,15,16,131,233,252,233,244,16,255,248,167,255,85,72,137,229,83,72,
+  137,252,251,139,131,233,72,41,196,255,15,182,139,233,131,252,233,1,15,136,
+  244,248,248,1,72,139,132,253,203,233,72,137,132,253,204,233,131,252,233,1,
+  15,137,244,1,248,2,15,182,131,233,72,139,187,233,72,139,179,233,72,139,147,
+  233,72,139,139,233,76,139,131,233,76,139,139,233,133,192,15,132,244,251,15,
+  40,131,233,15,40,139,233,255,15,40,147,233,15,40,155,233,131,252,248,4,15,
+  134,244,251,15,40,163,233,15,40,171,233,15,40,179,233,15,40,187,233,248,5,
+  252,255,147,233,72,137,131,233,15,41,131,233,72,137,147,233,15,41,139,233,
+  255,72,139,93,252,248,201,195,255,129,124,253,202,4,239,15,133,244,253,129,
+  124,253,194,4,239,15,133,244,254,139,44,202,131,195,4,59,44,194,255,15,141,
+  244,255,255,15,140,244,255,255,15,143,244,255,255,15,142,244,255,255,248,
+  6,15,183,67,252,254,141,156,253,131,233,248,9,139,3,15,182,204,15,182,232,
+  131,195,4,193,232,16,65,252,255,36,252,238,248,7,15,135,244,44,129,124,253,
+  194,4,239,15,130,244,247,15,133,244,44,255,252,242,15,42,4,194,252,233,244,
+  248,255,221,4,202,219,4,194,252,233,244,249,255,248,8,15,135,244,44,255,252,
+  242,15,42,12,202,252,242,15,16,4,194,131,195,4,102,15,46,193,255,15,134,244,
+  9,255,15,135,244,9,255,15,130,244,9,255,15,131,244,9,255,252,233,244,6,255,
+  219,4,202,252,233,244,248,255,129,124,253,202,4,239,15,131,244,44,129,124,
+  253,194,4,239,15,131,244,44,255,248,1,252,242,15,16,4,194,248,2,131,195,4,
+  102,15,46,4,202,248,3,255,248,1,221,4,202,248,2,221,4,194,248,3,131,195,4,
+  255,223,252,233,221,216,255,218,252,233,223,224,158,255,15,135,244,247,255,
+  15,130,244,247,255,15,131,244,247,255,15,183,67,252,254,141,156,253,131,233,
+  248,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
+  238,255,139,108,194,4,131,195,4,255,129,252,253,239,15,133,244,253,129,124,
+  253,202,4,239,15,133,244,254,139,44,194,59,44,202,255,15,133,244,255,255,
+  15,132,244,255,255,15,183,67,252,254,141,156,253,131,233,248,9,139,3,15,182,
+  204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,7,15,135,244,
+  251,129,124,253,202,4,239,15,130,244,247,15,133,244,251,255,252,242,15,42,
+  4,202,255,219,4,202,255,252,233,244,248,248,8,15,135,244,251,255,252,242,
+  15,42,4,194,102,15,46,4,202,255,219,4,194,221,4,202,255,252,233,244,250,255,
+  129,252,253,239,15,131,244,251,129,124,253,202,4,239,15,131,244,251,255,248,
+  1,252,242,15,16,4,202,248,2,102,15,46,4,194,248,4,255,248,1,221,4,202,248,
+  2,221,4,194,248,4,255,15,138,244,248,15,133,244,248,255,15,138,244,248,15,
+  132,244,247,255,248,1,15,183,67,252,254,141,156,253,131,233,248,2,255,248,
+  2,15,183,67,252,254,141,156,253,131,233,248,1,255,252,233,244,9,255,248,5,
+  255,129,252,253,239,15,132,244,49,129,124,253,202,4,239,15,132,244,49,255,
   57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12,202,139,4,194,
   57,193,15,132,244,1,129,252,253,239,15,135,244,2,129,252,253,239,15,130,244,
   2,139,169,233,133,252,237,15,132,244,2,252,246,133,233,235,15,133,244,2,255,
-  49,252,237,255,189,1,0,0,0,255,252,233,244,47,255,248,3,129,252,253,239,255,
-  15,133,244,9,255,252,233,244,48,255,72,252,247,208,139,108,202,4,131,195,
+  49,252,237,255,189,1,0,0,0,255,252,233,244,48,255,248,3,129,252,253,239,255,
+  15,133,244,9,255,252,233,244,49,255,72,252,247,208,139,108,202,4,131,195,
   4,129,252,253,239,15,133,244,249,139,12,202,65,59,12,135,255,139,108,202,
   4,131,195,4,255,129,252,253,239,15,133,244,253,65,129,124,253,199,4,239,15,
   133,244,254,65,139,44,199,59,44,202,255,15,183,67,252,254,141,156,253,131,
@@ -541,8 +552,8 @@ static const unsigned char build_actionlist[16165] = {
   202,248,4,255,248,1,65,221,4,199,248,2,221,4,202,248,4,255,72,252,247,208,
   139,108,202,4,131,195,4,57,197,255,15,133,244,249,15,183,67,252,254,141,156,
   253,131,233,248,2,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,
-  255,36,252,238,248,3,129,252,253,239,15,133,244,2,252,233,244,48,255,15,132,
-  244,248,129,252,253,239,15,132,244,48,15,183,67,252,254,141,156,253,131,233,
+  255,36,252,238,248,3,129,252,253,239,15,133,244,2,252,233,244,49,255,15,132,
+  244,248,129,252,253,239,15,132,244,49,15,183,67,252,254,141,156,253,131,233,
   248,2,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
   238,255,139,108,194,4,131,195,4,129,252,253,239,255,137,108,202,4,139,44,
   194,137,44,202,255,72,139,44,194,72,137,44,202,139,3,15,182,204,15,182,232,
@@ -551,42 +562,42 @@ static const unsigned char build_actionlist[16165] = {
   232,16,65,252,255,36,252,238,255,129,124,253,194,4,239,15,133,244,251,139,
   44,194,252,247,221,15,128,244,250,199,68,202,4,237,137,44,202,248,9,139,3,
   15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,4,199,
-  68,202,4,0,0,224,65,199,4,202,0,0,0,0,252,233,244,9,248,5,15,135,244,53,255,
-  129,124,253,194,4,239,15,131,244,53,255,252,242,15,16,4,194,72,184,237,237,
+  68,202,4,0,0,224,65,199,4,202,0,0,0,0,252,233,244,9,248,5,15,135,244,54,255,
+  129,124,253,194,4,239,15,131,244,54,255,252,242,15,16,4,194,72,184,237,237,
   102,72,15,110,200,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224,221,
   28,202,255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,139,128,233,
   248,1,199,68,202,4,237,137,4,202,255,15,87,192,252,242,15,42,128,233,248,
   1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,3,15,182,204,
   15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,129,124,253,194,
-  4,239,15,133,244,56,139,60,194,255,139,175,233,131,252,253,0,15,133,244,255,
-  248,3,255,248,57,137,213,232,251,1,21,255,252,242,15,42,192,255,137,252,234,
+  4,239,15,133,244,57,139,60,194,255,139,175,233,131,252,253,0,15,133,244,255,
+  248,3,255,248,58,137,213,232,251,1,21,255,252,242,15,42,192,255,137,252,234,
   15,182,75,252,253,252,233,244,1,255,248,9,252,246,133,233,235,15,133,244,
-  3,252,233,244,56,255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,
-  239,15,133,244,50,65,129,124,253,199,4,239,15,133,244,50,139,44,252,234,65,
-  3,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,52,65,129,
-  124,253,199,4,239,15,133,244,52,65,139,4,199,3,4,252,234,15,128,244,51,255,
-  129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,15,133,244,
-  55,139,44,252,234,3,44,194,15,128,244,54,255,199,68,202,4,237,255,129,124,
-  253,252,234,4,239,15,131,244,50,255,65,129,124,253,199,4,239,15,131,244,50,
+  3,252,233,244,57,255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,
+  239,15,133,244,51,65,129,124,253,199,4,239,15,133,244,51,139,44,252,234,65,
+  3,44,199,15,128,244,50,255,129,124,253,252,234,4,239,15,133,244,53,65,129,
+  124,253,199,4,239,15,133,244,53,65,139,4,199,3,4,252,234,15,128,244,52,255,
+  129,124,253,252,234,4,239,15,133,244,56,129,124,253,194,4,239,15,133,244,
+  56,139,44,252,234,3,44,194,15,128,244,55,255,199,68,202,4,237,255,129,124,
+  253,252,234,4,239,15,131,244,51,255,65,129,124,253,199,4,239,15,131,244,51,
   255,252,242,15,16,4,252,234,252,242,65,15,88,4,199,255,221,4,252,234,65,220,
-  4,199,255,129,124,253,252,234,4,239,15,131,244,52,255,65,129,124,253,199,
-  4,239,15,131,244,52,255,252,242,65,15,16,4,199,252,242,15,88,4,252,234,255,
-  65,221,4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,131,244,55,129,
-  124,253,194,4,239,15,131,244,55,255,252,242,15,16,4,252,234,252,242,15,88,
+  4,199,255,129,124,253,252,234,4,239,15,131,244,53,255,65,129,124,253,199,
+  4,239,15,131,244,53,255,252,242,65,15,16,4,199,252,242,15,88,4,252,234,255,
+  65,221,4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,131,244,56,129,
+  124,253,194,4,239,15,131,244,56,255,252,242,15,16,4,252,234,252,242,15,88,
   4,194,255,221,4,252,234,220,4,194,255,129,124,253,252,234,4,239,15,133,244,
-  50,65,129,124,253,199,4,239,15,133,244,50,139,44,252,234,65,43,44,199,15,
-  128,244,49,255,129,124,253,252,234,4,239,15,133,244,52,65,129,124,253,199,
-  4,239,15,133,244,52,65,139,4,199,43,4,252,234,15,128,244,51,255,129,124,253,
-  252,234,4,239,15,133,244,55,129,124,253,194,4,239,15,133,244,55,139,44,252,
-  234,43,44,194,15,128,244,54,255,252,242,15,16,4,252,234,252,242,65,15,92,
+  51,65,129,124,253,199,4,239,15,133,244,51,139,44,252,234,65,43,44,199,15,
+  128,244,50,255,129,124,253,252,234,4,239,15,133,244,53,65,129,124,253,199,
+  4,239,15,133,244,53,65,139,4,199,43,4,252,234,15,128,244,52,255,129,124,253,
+  252,234,4,239,15,133,244,56,129,124,253,194,4,239,15,133,244,56,139,44,252,
+  234,43,44,194,15,128,244,55,255,252,242,15,16,4,252,234,252,242,65,15,92,
   4,199,255,221,4,252,234,65,220,36,199,255,252,242,65,15,16,4,199,252,242,
   15,92,4,252,234,255,65,221,4,199,220,36,252,234,255,252,242,15,16,4,252,234,
   252,242,15,92,4,194,255,221,4,252,234,220,36,194,255,129,124,253,252,234,
-  4,239,15,133,244,50,65,129,124,253,199,4,239,15,133,244,50,139,44,252,234,
-  65,15,175,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,52,
-  65,129,124,253,199,4,239,15,133,244,52,65,139,4,199,15,175,4,252,234,15,128,
-  244,51,255,129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,
-  15,133,244,55,139,44,252,234,15,175,44,194,15,128,244,54,255,252,242,15,16,
+  4,239,15,133,244,51,65,129,124,253,199,4,239,15,133,244,51,139,44,252,234,
+  65,15,175,44,199,15,128,244,50,255,129,124,253,252,234,4,239,15,133,244,53,
+  65,129,124,253,199,4,239,15,133,244,53,65,139,4,199,15,175,4,252,234,15,128,
+  244,52,255,129,124,253,252,234,4,239,15,133,244,56,129,124,253,194,4,239,
+  15,133,244,56,139,44,252,234,15,175,44,194,15,128,244,55,255,252,242,15,16,
   4,252,234,252,242,65,15,89,4,199,255,221,4,252,234,65,220,12,199,255,252,
   242,65,15,16,4,199,252,242,15,89,4,252,234,255,65,221,4,199,220,12,252,234,
   255,252,242,15,16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,
@@ -596,10 +607,10 @@ static const unsigned char build_actionlist[16165] = {
   221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,242,65,15,16,12,
   199,255,221,4,252,234,65,221,4,199,255,252,242,65,15,16,4,199,252,242,15,
   16,12,252,234,255,65,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,
-  252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,166,232,244,156,
-  255,252,233,244,166,255,232,244,116,255,15,182,252,236,15,182,192,139,124,
-  36,24,137,151,233,141,52,194,137,194,41,252,234,248,35,137,252,253,137,92,
-  36,28,232,251,1,27,139,149,233,133,192,15,133,244,44,15,182,107,252,255,15,
+  252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,168,232,244,157,
+  255,252,233,244,168,255,232,244,117,255,15,182,252,236,15,182,192,139,124,
+  36,24,137,151,233,141,52,194,137,194,41,252,234,248,36,137,252,253,137,92,
+  36,28,232,251,1,29,139,149,233,133,192,15,133,244,45,15,182,107,252,255,15,
   182,75,252,253,72,139,4,252,234,72,137,4,202,139,3,15,182,204,15,182,232,
   131,195,4,193,232,16,65,252,255,36,252,238,255,72,252,247,208,65,139,4,135,
   199,68,202,4,237,137,4,202,139,3,15,182,204,15,182,232,131,195,4,193,232,
@@ -616,82 +627,82 @@ static const unsigned char build_actionlist[16165] = {
   69,4,15,132,244,247,252,246,133,233,235,15,133,244,248,248,1,139,3,15,182,
   204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,129,232,239,
   129,252,248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,137,252,238,
-  137,213,65,141,190,233,255,232,251,1,28,137,252,234,252,233,244,1,255,72,
+  137,213,65,141,190,233,255,232,251,1,30,137,252,234,252,233,244,1,255,72,
   252,247,208,139,106,252,248,139,172,253,141,233,65,139,12,135,139,133,233,
   137,8,199,64,4,237,252,246,133,233,235,15,133,244,248,248,1,139,3,15,182,
   204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,252,246,129,
   233,235,15,132,244,1,128,189,233,0,15,132,244,1,137,213,137,198,65,141,190,
-  233,232,251,1,28,137,252,234,252,233,244,1,255,139,106,252,248,255,252,242,
+  233,232,251,1,30,137,252,234,252,233,244,1,255,139,106,252,248,255,252,242,
   65,15,16,4,199,255,139,172,253,141,233,139,141,233,255,252,242,15,17,1,255,
   221,25,255,72,252,247,208,139,106,252,248,139,172,253,141,233,139,141,233,
   137,65,4,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
   238,255,141,156,253,131,233,139,108,36,24,131,189,233,0,15,132,244,247,137,
-  149,233,141,52,202,137,252,239,232,251,1,29,139,149,233,248,1,139,3,15,182,
+  149,233,141,52,202,137,252,239,232,251,1,31,139,149,233,248,1,139,3,15,182,
   204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,72,252,247,
   208,139,108,36,24,137,149,233,139,82,252,248,65,139,52,135,137,252,239,137,
-  92,36,28,232,251,1,30,139,149,233,15,182,75,252,253,137,4,202,199,68,202,
+  92,36,28,232,251,1,32,139,149,233,15,182,75,252,253,137,4,202,199,68,202,
   4,237,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
   238,255,139,108,36,24,137,149,233,65,139,142,233,65,59,142,233,137,92,36,
   28,15,131,244,251,248,1,137,194,37,252,255,7,0,0,193,252,234,11,61,252,255,
-  7,0,0,15,132,244,249,248,2,137,252,239,137,198,232,251,1,31,139,149,233,15,
+  7,0,0,15,132,244,249,248,2,137,252,239,137,198,232,251,1,33,139,149,233,15,
   182,75,252,253,137,4,202,199,68,202,4,237,139,3,15,182,204,15,182,232,131,
   195,4,193,232,16,65,252,255,36,252,238,248,3,184,1,8,0,0,252,233,244,2,248,
-  5,137,252,239,232,251,1,32,15,183,67,252,254,252,233,244,1,255,72,252,247,
+  5,137,252,239,232,251,1,34,15,183,67,252,254,252,233,244,1,255,72,252,247,
   208,139,108,36,24,65,139,142,233,137,92,36,28,65,59,142,233,137,149,233,15,
-  131,244,249,248,2,65,139,52,135,137,252,239,232,251,1,33,139,149,233,15,182,
+  131,244,249,248,2,65,139,52,135,137,252,239,232,251,1,35,139,149,233,15,182,
   75,252,253,137,4,202,199,68,202,4,237,139,3,15,182,204,15,182,232,131,195,
-  4,193,232,16,65,252,255,36,252,238,248,3,137,252,239,232,251,1,32,15,183,
+  4,193,232,16,65,252,255,36,252,238,248,3,137,252,239,232,251,1,34,15,183,
   67,252,254,72,252,247,208,252,233,244,2,255,72,252,247,208,139,106,252,248,
-  139,173,233,65,139,4,135,252,233,244,167,255,72,252,247,208,139,106,252,248,
-  139,173,233,65,139,4,135,252,233,244,168,255,15,182,252,236,15,182,192,129,
-  124,253,252,234,4,239,15,133,244,38,139,44,252,234,255,129,124,253,194,4,
+  139,173,233,65,139,4,135,252,233,244,169,255,72,252,247,208,139,106,252,248,
+  139,173,233,65,139,4,135,252,233,244,170,255,15,182,252,236,15,182,192,129,
+  124,253,252,234,4,239,15,133,244,39,139,44,252,234,255,129,124,253,194,4,
   239,15,133,244,251,139,4,194,255,129,124,253,194,4,239,15,131,244,251,255,
   252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200,102,15,46,193,255,
-  15,133,244,38,255,59,133,233,15,131,244,38,193,224,3,3,133,233,129,120,253,
+  15,133,244,39,255,59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,
   4,239,15,132,244,248,72,139,40,72,137,44,202,248,1,139,3,15,182,204,15,182,
   232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,131,189,233,0,15,132,
-  244,249,139,141,233,252,246,129,233,235,15,132,244,38,15,182,75,252,253,248,
+  244,249,139,141,233,252,246,129,233,235,15,132,244,39,15,182,75,252,253,248,
   3,199,68,202,4,237,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244,
-  38,139,4,194,252,233,244,167,255,15,182,252,236,15,182,192,72,252,247,208,
-  65,139,4,135,129,124,253,252,234,4,239,15,133,244,36,139,44,252,234,248,167,
+  39,139,4,194,252,233,244,169,255,15,182,252,236,15,182,192,72,252,247,208,
+  65,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44,252,234,248,169,
   139,141,233,35,136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133,
   244,250,57,129,233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182,
   67,252,253,72,139,41,72,137,44,194,248,2,255,139,3,15,182,204,15,182,232,
   131,195,4,193,232,16,65,252,255,36,252,238,248,3,15,182,67,252,253,199,68,
   194,4,237,252,233,244,2,248,4,139,137,233,133,201,15,133,244,1,248,5,139,
   141,233,133,201,15,132,244,3,252,246,129,233,235,15,133,244,3,252,233,244,
-  36,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,37,
-  139,44,252,234,59,133,233,15,131,244,37,193,224,3,3,133,233,129,120,253,4,
+  37,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,38,
+  139,44,252,234,59,133,233,15,131,244,38,193,224,3,3,133,233,129,120,253,4,
   239,15,132,244,248,72,139,40,72,137,44,202,248,1,139,3,15,182,204,15,182,
   232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,131,189,233,0,15,132,
-  244,249,139,141,233,252,246,129,233,235,15,132,244,37,255,15,182,75,252,253,
+  244,249,139,141,233,252,246,129,233,235,15,132,244,38,255,15,182,75,252,253,
   248,3,199,68,202,4,237,252,233,244,1,255,15,182,252,236,15,182,192,129,124,
-  253,252,234,4,239,15,133,244,41,139,44,252,234,255,15,133,244,41,255,59,133,
-  233,15,131,244,41,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,
+  253,252,234,4,239,15,133,244,42,139,44,252,234,255,15,133,244,42,255,59,133,
+  233,15,131,244,42,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,
   1,252,246,133,233,235,15,133,244,253,248,2,72,139,44,202,72,137,40,139,3,
   15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,3,131,
-  189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,255,15,132,244,41,
-  15,182,75,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133,244,41,
-  139,4,194,252,233,244,168,248,7,128,165,233,235,65,139,142,233,65,137,174,
+  189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,255,15,132,244,42,
+  15,182,75,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133,244,42,
+  139,4,194,252,233,244,170,248,7,128,165,233,235,65,139,142,233,65,137,174,
   233,137,141,233,15,182,75,252,253,252,233,244,2,255,15,182,252,236,15,182,
-  192,72,252,247,208,65,139,4,135,129,124,253,252,234,4,239,15,133,244,39,139,
-  44,252,234,248,168,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,
+  192,72,252,247,208,65,139,4,135,129,124,253,252,234,4,239,15,133,244,40,139,
+  44,252,234,248,170,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,
   233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,
   253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,
   3,15,182,67,252,253,72,139,44,194,72,137,41,139,3,15,182,204,15,182,232,131,
   195,4,193,232,16,65,252,255,36,252,238,248,4,131,189,233,0,15,132,244,2,137,
-  12,36,139,141,233,252,246,129,233,235,15,132,244,39,139,12,36,252,233,244,
+  12,36,139,141,233,252,246,129,233,235,15,132,244,40,139,12,36,252,233,244,
   2,248,5,139,137,233,133,201,15,133,244,1,255,139,141,233,133,201,15,132,244,
-  252,252,246,129,233,235,15,132,244,39,248,6,137,4,36,199,68,36,4,237,137,
+  252,252,246,129,233,235,15,132,244,40,248,6,137,4,36,199,68,36,4,237,137,
   108,36,8,139,124,36,24,137,151,233,72,141,20,36,137,252,238,137,252,253,137,
-  92,36,28,232,251,1,34,139,149,233,139,108,36,8,137,193,252,233,244,2,248,
+  92,36,28,232,251,1,36,139,149,233,139,108,36,8,137,193,252,233,244,2,248,
   7,128,165,233,235,65,139,134,233,65,137,174,233,137,133,233,252,233,244,3,
-  255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,40,139,
-  44,252,234,59,133,233,15,131,244,40,193,224,3,3,133,233,129,120,253,4,239,
+  255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,41,139,
+  44,252,234,59,133,233,15,131,244,41,193,224,3,3,133,233,129,120,253,4,239,
   15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,72,139,12,202,
   72,137,8,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
   238,248,3,131,189,233,0,15,132,244,1,255,139,141,233,252,246,129,233,235,
-  15,132,244,40,15,182,75,252,253,252,233,244,1,248,7,128,165,233,235,65,139,
+  15,132,244,41,15,182,75,252,253,252,233,244,1,248,7,128,165,233,235,65,139,
   142,233,65,137,174,233,137,141,233,15,182,75,252,253,252,233,244,2,255,68,
   137,60,36,69,139,60,199,248,1,141,12,202,139,105,252,248,252,246,133,233,
   235,15,133,244,253,248,2,139,68,36,4,131,232,1,15,132,244,250,68,1,252,248,
@@ -699,12 +710,12 @@ static const unsigned char build_actionlist[16165] = {
   139,41,131,193,8,73,137,47,65,131,199,8,131,232,1,15,133,244,3,248,4,68,139,
   60,36,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,
   238,248,5,139,124,36,24,137,151,233,137,252,238,137,194,137,252,253,137,92,
-  36,28,232,251,1,35,139,149,233,15,182,75,252,253,252,233,244,1,248,7,255,
+  36,28,232,251,1,37,139,149,233,15,182,75,252,253,252,233,244,1,248,7,255,
   128,165,233,235,65,139,134,233,65,137,174,233,137,133,233,252,233,244,2,255,
-  3,68,36,4,255,129,124,253,202,4,239,139,44,202,15,133,244,58,141,84,202,8,
+  3,68,36,4,255,129,124,253,202,4,239,139,44,202,15,133,244,59,141,84,202,8,
   137,90,252,252,139,157,233,139,11,15,182,252,233,15,182,205,131,195,4,65,
   252,255,36,252,238,255,141,76,202,8,65,137,215,139,105,252,248,129,121,253,
-  252,252,239,15,133,244,29,248,59,139,90,252,252,252,247,195,237,15,133,244,
+  252,252,239,15,133,244,29,248,60,139,90,252,252,252,247,195,237,15,133,244,
   253,248,1,137,106,252,248,137,68,36,4,131,232,1,15,132,244,249,248,2,72,139,
   41,131,193,8,73,137,47,65,131,199,8,131,232,1,15,133,244,2,139,106,252,248,
   248,3,139,68,36,4,128,189,233,1,15,135,244,251,248,4,139,157,233,139,11,15,
@@ -752,19 +763,19 @@ static const unsigned char build_actionlist[16165] = {
   65,199,71,252,252,237,65,131,199,8,255,199,68,194,252,244,237,255,131,192,
   1,252,233,244,5,248,7,141,171,233,252,247,197,237,15,133,244,14,41,252,234,
   255,1,252,233,255,137,221,209,252,237,129,229,239,102,65,129,172,253,46,233,
-  238,15,130,244,148,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,
-  129,121,253,12,239,15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,
-  131,121,16,0,15,140,244,251,255,129,121,253,12,239,15,133,244,164,129,121,
-  253,20,239,15,133,244,164,255,139,105,16,133,252,237,15,136,244,251,3,41,
+  238,15,130,244,149,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,
+  129,121,253,12,239,15,133,244,61,129,121,253,20,239,15,133,244,61,139,41,
+  131,121,16,0,15,140,244,251,255,129,121,253,12,239,15,133,244,165,129,121,
+  253,20,239,15,133,244,165,255,139,105,16,133,252,237,15,136,244,251,3,41,
   15,128,244,247,137,41,255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,
   253,248,1,248,6,141,156,253,131,233,255,141,156,253,131,233,15,183,67,252,
   254,15,142,245,248,1,248,6,255,15,143,244,253,248,6,141,156,253,131,233,248,
   1,255,248,7,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,
   252,238,248,5,255,3,41,15,128,244,1,137,41,255,15,141,244,7,255,141,156,253,
   131,233,15,183,67,252,254,15,141,245,255,15,140,244,7,255,252,233,244,6,248,
-  9,255,129,121,253,4,239,255,15,131,244,60,129,121,253,12,239,15,131,244,60,
-  255,129,121,253,12,239,15,131,244,164,129,121,253,20,239,15,131,244,164,255,
-  139,105,20,255,129,252,253,239,15,131,244,60,255,252,242,15,16,1,252,242,
+  9,255,129,121,253,4,239,255,15,131,244,61,129,121,253,12,239,15,131,244,61,
+  255,129,121,253,12,239,15,131,244,165,129,121,253,20,239,15,131,244,165,255,
+  139,105,20,255,129,252,253,239,15,131,244,61,255,252,242,15,16,1,252,242,
   15,16,73,8,255,252,242,15,88,65,16,252,242,15,17,1,133,252,237,15,136,244,
   249,255,15,140,244,249,255,102,15,46,200,248,1,252,242,15,17,65,24,255,221,
   65,8,221,1,255,220,65,16,221,17,221,81,24,133,252,237,15,136,244,247,255,
@@ -778,7 +789,7 @@ static const unsigned char build_actionlist[16165] = {
   233,76,137,36,36,76,137,108,36,8,72,131,252,236,16,252,255,224,255,141,156,
   253,131,233,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,
   252,238,255,137,221,209,252,237,129,229,239,102,65,129,172,253,46,233,238,
-  15,130,244,150,255,68,139,187,233,139,108,36,24,141,12,202,59,141,233,15,
+  15,130,244,151,255,68,139,187,233,139,108,36,24,141,12,202,59,141,233,15,
   135,244,24,15,182,139,233,57,200,15,134,244,249,248,2,255,15,183,67,252,254,
   252,233,245,255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,
   3,252,233,244,2,255,141,44,197,237,141,4,194,68,139,122,252,248,137,104,252,
@@ -818,6 +829,7 @@ enum {
   GLOB_vmeta_call,
   GLOB_vm_call_dispatch_f,
   GLOB_vm_cpcall,
+  GLOB_cont_ffi_callback,
   GLOB_vm_call_tail,
   GLOB_cont_cat,
   GLOB_cont_ra,
@@ -951,6 +963,7 @@ enum {
   GLOB_vm_foldarith,
   GLOB_vm_cpuid,
   GLOB_assert_bad_for_arg_type,
+  GLOB_vm_ffi_callback,
   GLOB_vm_ffi_call,
   GLOB_BC_MODVN_Z,
   GLOB_BC_TGETS_Z,
@@ -980,6 +993,7 @@ static const char *const globnames[] = {
   "vmeta_call",
   "vm_call_dispatch_f",
   "vm_cpcall",
+  "cont_ffi_callback",
   "vm_call_tail",
   "cont_cat",
   "cont_ra",
@@ -1113,6 +1127,7 @@ static const char *const globnames[] = {
   "vm_foldarith",
   "vm_cpuid",
   "assert_bad_for_arg_type",
+  "vm_ffi_callback",
   "vm_ffi_call@4",
   "BC_MODVN_Z",
   "BC_TGETS_Z",
@@ -1147,6 +1162,8 @@ static const char *const extnames[] = {
   "lj_trace_hot@8",
   "lj_dispatch_call@8",
   "lj_trace_exit@8",
+  "lj_ccallback_enter@8",
+  "lj_ccallback_leave@8",
   "lj_meta_cat",
   "lj_gc_barrieruv@8",
   "lj_func_closeuv@8",
@@ -1187,667 +1204,686 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   dasm_put(Dst, 385, Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->pc), FRAME_CP, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE);
   dasm_put(Dst, 548, FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
   dasm_put(Dst, 648, Dt1(->top), LJ_TFUNC, Dt7(->pc), Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL);
-  dasm_put(Dst, 819, 0, Dt7(->pc), PC2PROTO(k), Dt1(->base), LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
-  dasm_put(Dst, 944);
+#if LJ_HASFFI
+  dasm_put(Dst, 813);
+#endif
+  dasm_put(Dst, 822, 0);
+#if LJ_HASFFI
+#endif
+  dasm_put(Dst, 831, Dt7(->pc), PC2PROTO(k));
+#if LJ_HASFFI
+  dasm_put(Dst, 848);
+#endif
+  dasm_put(Dst, 869, Dt1(->base), LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 958, LJ_TISNUM);
+    dasm_put(Dst, 967, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 967);
+    dasm_put(Dst, 976);
   } else {
   }
-  dasm_put(Dst, 979, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
-  dasm_put(Dst, 1125, DISPATCH_GL(tmptv), LJ_TTAB);
+  dasm_put(Dst, 988, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
+  dasm_put(Dst, 1134, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 958, LJ_TISNUM);
+    dasm_put(Dst, 967, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 967);
+    dasm_put(Dst, 976);
   } else {
   }
-  dasm_put(Dst, 1149, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 1321, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
-  dasm_put(Dst, 1420);
+  dasm_put(Dst, 1158, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1330, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
+  dasm_put(Dst, 1429);
 #if LJ_HASFFI
-  dasm_put(Dst, 1440, Dt1(->base));
+  dasm_put(Dst, 1449, Dt1(->base));
 #endif
-  dasm_put(Dst, 1471);
+  dasm_put(Dst, 1480);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1474);
+  dasm_put(Dst, 1483);
 #endif
-  dasm_put(Dst, 1480);
+  dasm_put(Dst, 1489);
 #if LJ_DUALNUM
-  dasm_put(Dst, 952);
+  dasm_put(Dst, 961);
 #endif
-  dasm_put(Dst, 1493);
+  dasm_put(Dst, 1502);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1474);
+  dasm_put(Dst, 1483);
 #endif
-  dasm_put(Dst, 1522, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1531, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 1624);
+  dasm_put(Dst, 1633);
 #else
-  dasm_put(Dst, 1643);
+  dasm_put(Dst, 1652);
 #endif
-  dasm_put(Dst, 1648, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
-  dasm_put(Dst, 1834, 1+1, ~LJ_TNUMX);
+  dasm_put(Dst, 1657, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
+  dasm_put(Dst, 1843, 1+1, ~LJ_TNUMX);
   if (cmov) {
-  dasm_put(Dst, 1903);
+  dasm_put(Dst, 1912);
   } else {
-  dasm_put(Dst, 1907);
+  dasm_put(Dst, 1916);
   }
-  dasm_put(Dst, 1916, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, ~LJ_TLIGHTUD, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL);
-  dasm_put(Dst, 1995, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next));
-  dasm_put(Dst, 2053, LJ_TNIL, LJ_TUDATA, LJ_TNUMX, LJ_TISNUM, LJ_TLIGHTUD);
-  dasm_put(Dst, 2119, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB);
-  dasm_put(Dst, 2190, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist), 2+1, LJ_TTAB);
-  dasm_put(Dst, 2280, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 1925, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, ~LJ_TLIGHTUD, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL);
+  dasm_put(Dst, 2004, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next));
+  dasm_put(Dst, 2062, LJ_TNIL, LJ_TUDATA, LJ_TNUMX, LJ_TISNUM, LJ_TLIGHTUD);
+  dasm_put(Dst, 2128, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB);
+  dasm_put(Dst, 2199, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist), 2+1, LJ_TTAB);
+  dasm_put(Dst, 2289, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2294);
+    dasm_put(Dst, 2303);
   } else {
-    dasm_put(Dst, 2311);
+    dasm_put(Dst, 2320);
   }
   if (sse) {
-    dasm_put(Dst, 2316);
+    dasm_put(Dst, 2325);
   } else {
-    dasm_put(Dst, 2326);
+    dasm_put(Dst, 2335);
   }
-  dasm_put(Dst, 2333, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 2402, Dt1(->base));
+  dasm_put(Dst, 2342, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2411, Dt1(->base));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2428);
+    dasm_put(Dst, 2437);
   } else {
-    dasm_put(Dst, 2433);
+    dasm_put(Dst, 2442);
   }
-  dasm_put(Dst, 2438, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
-  dasm_put(Dst, 2530, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2447, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
+  dasm_put(Dst, 2539, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2577, Dt6(->metatable));
+  dasm_put(Dst, 2586, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2586, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
+  dasm_put(Dst, 2595, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2572);
+    dasm_put(Dst, 2581);
   } else {
-    dasm_put(Dst, 2311);
+    dasm_put(Dst, 2320);
   }
-  dasm_put(Dst, 2641);
+  dasm_put(Dst, 2650);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2646, LJ_TISNUM);
+    dasm_put(Dst, 2655, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2662, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+    dasm_put(Dst, 2671, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 2695, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
-  dasm_put(Dst, 2557, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2704, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
+  dasm_put(Dst, 2566, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2577, Dt6(->metatable));
+  dasm_put(Dst, 2586, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2772, Dt8(->upvalue[0]), LJ_TFUNC);
+  dasm_put(Dst, 2781, Dt8(->upvalue[0]), LJ_TFUNC);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2793, LJ_TISNUM);
+    dasm_put(Dst, 2802, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2805);
-  } else {
-    dasm_put(Dst, 2815);
-  }
-  dasm_put(Dst, 2822, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
-  dasm_put(Dst, 2887, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
-  dasm_put(Dst, 2976, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
-  dasm_put(Dst, 3063, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
-  dasm_put(Dst, 3178, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
-  dasm_put(Dst, 3273, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
-  dasm_put(Dst, 3339, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
-  dasm_put(Dst, 3428, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
-  dasm_put(Dst, 3538, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
+    dasm_put(Dst, 2814);
+  } else {
+    dasm_put(Dst, 2824);
+  }
+  dasm_put(Dst, 2831, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
+  dasm_put(Dst, 2896, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
+  dasm_put(Dst, 2985, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 3072, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
+  dasm_put(Dst, 3187, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
+  dasm_put(Dst, 3282, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 3348, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
+  dasm_put(Dst, 3437, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
+  dasm_put(Dst, 3547, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
   if (!LJ_DUALNUM) {
-    dasm_put(Dst, 3565);
+    dasm_put(Dst, 3574);
   }
   if (sse) {
-    dasm_put(Dst, 3568);
+    dasm_put(Dst, 3577);
   }
-  dasm_put(Dst, 3583, 1+1);
+  dasm_put(Dst, 3592, 1+1);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 3594, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 3603, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3674, LJ_TISNUM);
+    dasm_put(Dst, 3683, LJ_TISNUM);
   }
   if (sse) {
-    dasm_put(Dst, 3684, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
+    dasm_put(Dst, 3693, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
   } else {
-    dasm_put(Dst, 3715);
+    dasm_put(Dst, 3724);
   }
-  dasm_put(Dst, 3732, 1+1, FRAME_TYPE, LJ_TNIL);
+  dasm_put(Dst, 3741, 1+1, FRAME_TYPE, LJ_TNIL);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3829, LJ_TISNUM);
+  dasm_put(Dst, 3838, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3674, LJ_TISNUM);
+  dasm_put(Dst, 3683, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3851);
-    if (LJ_DUALNUM) {
   dasm_put(Dst, 3860);
+    if (LJ_DUALNUM) {
+  dasm_put(Dst, 3869);
     }
-  dasm_put(Dst, 2321);
+  dasm_put(Dst, 2330);
   } else {
-  dasm_put(Dst, 3894);
+  dasm_put(Dst, 3903);
     if (LJ_DUALNUM) {
     } else {
-  dasm_put(Dst, 2328);
+  dasm_put(Dst, 2337);
     }
   }
-  dasm_put(Dst, 3900);
+  dasm_put(Dst, 3909);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3829, LJ_TISNUM);
+  dasm_put(Dst, 3838, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3674, LJ_TISNUM);
+  dasm_put(Dst, 3683, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3903);
+  dasm_put(Dst, 3912);
     if (LJ_DUALNUM) {
-  dasm_put(Dst, 3860);
+  dasm_put(Dst, 3869);
     }
-  dasm_put(Dst, 2321);
+  dasm_put(Dst, 2330);
   } else {
-  dasm_put(Dst, 3912);
+  dasm_put(Dst, 3921);
     if (LJ_DUALNUM) {
     } else {
-  dasm_put(Dst, 2328);
+  dasm_put(Dst, 2337);
     }
   }
   if (sse) {
-    dasm_put(Dst, 3918, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3927, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3947, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3956, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 3976, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4045, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4102, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4165, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-  dasm_put(Dst, 4255);
+  dasm_put(Dst, 3985, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4054, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4111, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4174, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4264);
   if (sse) {
-  dasm_put(Dst, 4267, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4276, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4292);
+  dasm_put(Dst, 4301);
   if (sse) {
-  dasm_put(Dst, 4306, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4315, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4331);
+  dasm_put(Dst, 4340);
   if (sse) {
-  dasm_put(Dst, 4345, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4354, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4370);
+  dasm_put(Dst, 4379);
   if (sse) {
-    dasm_put(Dst, 4386, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4395, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   } else {
-    dasm_put(Dst, 4425, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4434, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   }
-  dasm_put(Dst, 4458, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
-  dasm_put(Dst, 4523, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4467, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4532, 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4622);
+    dasm_put(Dst, 4631);
   } else {
-    dasm_put(Dst, 4628);
+    dasm_put(Dst, 4637);
   }
-  dasm_put(Dst, 4635);
+  dasm_put(Dst, 4644);
   if (sse) {
-    dasm_put(Dst, 4660);
+    dasm_put(Dst, 4669);
   } else {
-    dasm_put(Dst, 4666);
+    dasm_put(Dst, 4675);
   }
-  dasm_put(Dst, 4669, 1+2);
+  dasm_put(Dst, 4678, 1+2);
   if (sse) {
-    dasm_put(Dst, 4678);
+    dasm_put(Dst, 4687);
   } else {
-    dasm_put(Dst, 4686);
+    dasm_put(Dst, 4695);
   }
-  dasm_put(Dst, 4694);
+  dasm_put(Dst, 4703);
   if (sse) {
-    dasm_put(Dst, 4697, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32));
+    dasm_put(Dst, 4706, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32));
   } else {
-    dasm_put(Dst, 4724);
+    dasm_put(Dst, 4733);
   }
-  dasm_put(Dst, 4741);
+  dasm_put(Dst, 4750);
   if (sse) {
-    dasm_put(Dst, 4757, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4766, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4782, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4791, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4804);
+  dasm_put(Dst, 4813);
   if (sse) {
-    dasm_put(Dst, 4826);
+    dasm_put(Dst, 4835);
   } else {
-    dasm_put(Dst, 4852);
+    dasm_put(Dst, 4861);
   }
-  dasm_put(Dst, 4869, 1+2);
+  dasm_put(Dst, 4878, 1+2);
   if (sse) {
-    dasm_put(Dst, 4909);
+    dasm_put(Dst, 4918);
   } else {
-    dasm_put(Dst, 4917);
+    dasm_put(Dst, 4926);
   }
-  dasm_put(Dst, 4927, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4936, 2+1, LJ_TISNUM, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4979, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 4988, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 5026, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 5035, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 5067, LJ_TISNUM);
+  dasm_put(Dst, 5076, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5080, LJ_TISNUM);
+  dasm_put(Dst, 5089, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4622);
+  dasm_put(Dst, 4631);
   } else {
   }
-  dasm_put(Dst, 5130);
+  dasm_put(Dst, 5139);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 5141, LJ_TISNUM);
+  dasm_put(Dst, 5150, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5162);
+  dasm_put(Dst, 5171);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
-  dasm_put(Dst, 5183);
+  dasm_put(Dst, 5192);
   } else {
   }
-  dasm_put(Dst, 5208, LJ_TISNUM);
+  dasm_put(Dst, 5217, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5221, LJ_TISNUM);
+  dasm_put(Dst, 5230, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4622);
+  dasm_put(Dst, 4631);
   } else {
   }
-  dasm_put(Dst, 5130);
+  dasm_put(Dst, 5139);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 5141, LJ_TISNUM);
+  dasm_put(Dst, 5150, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5162);
+  dasm_put(Dst, 5171);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
-  dasm_put(Dst, 5271);
+  dasm_put(Dst, 5280);
   } else {
   }
   if (!sse) {
-    dasm_put(Dst, 5296);
+    dasm_put(Dst, 5305);
   }
-  dasm_put(Dst, 5305, 1+1, LJ_TSTR);
+  dasm_put(Dst, 5314, 1+1, LJ_TSTR);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5327, Dt5(->len));
+    dasm_put(Dst, 5336, Dt5(->len));
   } else if (sse) {
-    dasm_put(Dst, 5335, Dt5(->len));
+    dasm_put(Dst, 5344, Dt5(->len));
   } else {
-    dasm_put(Dst, 5346, Dt5(->len));
+    dasm_put(Dst, 5355, Dt5(->len));
   }
-  dasm_put(Dst, 5354, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
+  dasm_put(Dst, 5363, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5330);
+    dasm_put(Dst, 5339);
   } else if (sse) {
-    dasm_put(Dst, 5392);
+    dasm_put(Dst, 5401);
   } else {
-    dasm_put(Dst, 5402);
+    dasm_put(Dst, 5411);
   }
-  dasm_put(Dst, 5413, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
+  dasm_put(Dst, 5422, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5446);
+    dasm_put(Dst, 5455);
   } else if (sse) {
-    dasm_put(Dst, 5469);
+    dasm_put(Dst, 5478);
   } else {
-    dasm_put(Dst, 5495);
+    dasm_put(Dst, 5504);
   }
-  dasm_put(Dst, 5519, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
+  dasm_put(Dst, 5528, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5628);
+    dasm_put(Dst, 5637);
   } else if (sse) {
-    dasm_put(Dst, 5640);
+    dasm_put(Dst, 5649);
   } else {
-    dasm_put(Dst, 5655);
+    dasm_put(Dst, 5664);
   }
-  dasm_put(Dst, 5667, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 5676, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2572);
+    dasm_put(Dst, 2581);
   } else {
-    dasm_put(Dst, 2311);
+    dasm_put(Dst, 2320);
   }
-  dasm_put(Dst, 5684, Dt5(->len));
+  dasm_put(Dst, 5693, Dt5(->len));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5694);
+    dasm_put(Dst, 5703);
   } else if (sse) {
-    dasm_put(Dst, 5698);
+    dasm_put(Dst, 5707);
   } else {
   }
-  dasm_put(Dst, 5705, sizeof(GCstr)-1);
-  dasm_put(Dst, 5780, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 5841, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 5714, sizeof(GCstr)-1);
+  dasm_put(Dst, 5789, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 5850, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5858);
+    dasm_put(Dst, 5867);
   } else if (sse) {
-    dasm_put(Dst, 5866);
+    dasm_put(Dst, 5875);
   } else {
-    dasm_put(Dst, 5877);
+    dasm_put(Dst, 5886);
   }
-  dasm_put(Dst, 5893, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 5961, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6028, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
-  dasm_put(Dst, 6101, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6186, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6260, 1+1, LJ_TTAB);
+  dasm_put(Dst, 5902, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 5970, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6037, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
+  dasm_put(Dst, 6110, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6195, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6269, 1+1, LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6327);
+    dasm_put(Dst, 6336);
   } else if (sse) {
-    dasm_put(Dst, 6334);
+    dasm_put(Dst, 6343);
   } else {
   }
-  dasm_put(Dst, 6344, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6353, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6360);
+  dasm_put(Dst, 6369);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
   dasm_put(Dst, 106);
   if (LJ_DUALNUM || sse) {
     if (!sse) {
     }
-    dasm_put(Dst, 6401);
+    dasm_put(Dst, 6410);
   } else {
   }
-  dasm_put(Dst, 6406, 1+1);
+  dasm_put(Dst, 6415, 1+1);
   if (sse) {
-  dasm_put(Dst, 6417, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6426, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6427);
+  dasm_put(Dst, 6436);
   }
-  dasm_put(Dst, 2288, LJ_TISNUM);
+  dasm_put(Dst, 2297, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6452);
+  dasm_put(Dst, 6461);
   } else {
   }
-  dasm_put(Dst, 6467, LJ_TISNUM);
+  dasm_put(Dst, 6476, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6492);
+  dasm_put(Dst, 6501);
   } else {
-  dasm_put(Dst, 6512);
+  dasm_put(Dst, 6521);
   }
   if (sse) {
-  dasm_put(Dst, 6517);
+  dasm_put(Dst, 6526);
   } else {
   }
-  dasm_put(Dst, 6534, 1+1);
+  dasm_put(Dst, 6543, 1+1);
   if (sse) {
-  dasm_put(Dst, 6417, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6426, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6427);
+  dasm_put(Dst, 6436);
   }
-  dasm_put(Dst, 2288, LJ_TISNUM);
+  dasm_put(Dst, 2297, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6452);
+  dasm_put(Dst, 6461);
   } else {
   }
-  dasm_put(Dst, 6467, LJ_TISNUM);
+  dasm_put(Dst, 6476, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6552);
+  dasm_put(Dst, 6561);
   } else {
-  dasm_put(Dst, 6512);
+  dasm_put(Dst, 6521);
   }
   if (sse) {
-  dasm_put(Dst, 6572);
+  dasm_put(Dst, 6581);
   } else {
   }
-  dasm_put(Dst, 6589, 1+1);
+  dasm_put(Dst, 6598, 1+1);
   if (sse) {
-  dasm_put(Dst, 6417, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6426, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6427);
+  dasm_put(Dst, 6436);
   }
-  dasm_put(Dst, 2288, LJ_TISNUM);
+  dasm_put(Dst, 2297, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6452);
+  dasm_put(Dst, 6461);
   } else {
   }
-  dasm_put(Dst, 6467, LJ_TISNUM);
+  dasm_put(Dst, 6476, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6607);
+  dasm_put(Dst, 6616);
   } else {
-  dasm_put(Dst, 6512);
+  dasm_put(Dst, 6521);
   }
   if (sse) {
-  dasm_put(Dst, 6627);
+  dasm_put(Dst, 6636);
   } else {
   }
-  dasm_put(Dst, 6644, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6653, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6667, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6676, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6691);
+  dasm_put(Dst, 6700);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6401);
+    dasm_put(Dst, 6410);
   } else if (sse) {
-    dasm_put(Dst, 6697);
+    dasm_put(Dst, 6706);
   } else {
   }
-  dasm_put(Dst, 6709);
+  dasm_put(Dst, 6718);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6720, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6729, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6736, LJ_TISNUM);
+  dasm_put(Dst, 6745, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6751, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6760, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6818);
+  dasm_put(Dst, 6827);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6825, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6834, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6736, LJ_TISNUM);
+  dasm_put(Dst, 6745, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6841, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6850, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6908);
+  dasm_put(Dst, 6917);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6916, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6925, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6736, LJ_TISNUM);
+  dasm_put(Dst, 6745, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6932, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6941, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6999);
+  dasm_put(Dst, 7008);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7007, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7016, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6736, LJ_TISNUM);
+  dasm_put(Dst, 6745, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7023, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 7032, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 7090);
+  dasm_put(Dst, 7099);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7097, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7106, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6435);
+  dasm_put(Dst, 6444);
   } else {
-  dasm_put(Dst, 2311);
+  dasm_put(Dst, 2320);
   }
   if (sse) {
-  dasm_put(Dst, 6377, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6386, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6736, LJ_TISNUM);
+  dasm_put(Dst, 6745, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7113, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 7122, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 7180, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
-  dasm_put(Dst, 7256, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 7383, Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7189, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
+  dasm_put(Dst, 7265, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 7392, Dt1(->top), Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7422, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
+  dasm_put(Dst, 7431, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
 #endif
-  dasm_put(Dst, 7455, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
-  dasm_put(Dst, 7509, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
+  dasm_put(Dst, 7464, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
+  dasm_put(Dst, 7518, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
 #if LJ_HASJIT
-  dasm_put(Dst, 7576, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
+  dasm_put(Dst, 7585, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
 #endif
-  dasm_put(Dst, 7623);
+  dasm_put(Dst, 7632);
 #if LJ_HASJIT
-  dasm_put(Dst, 7450);
+  dasm_put(Dst, 7459);
 #endif
-  dasm_put(Dst, 7630);
+  dasm_put(Dst, 7639);
 #if LJ_HASJIT
-  dasm_put(Dst, 7633);
+  dasm_put(Dst, 7642);
 #endif
-  dasm_put(Dst, 7643, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7652, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7676);
+  dasm_put(Dst, 7685);
 #endif
-  dasm_put(Dst, 7681, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7690, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7712, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
+  dasm_put(Dst, 7721, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
 #endif
-  dasm_put(Dst, 7951);
+  dasm_put(Dst, 7960);
 #if LJ_HASJIT
-  dasm_put(Dst, 7954, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
+  dasm_put(Dst, 7963, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
 #endif
-  dasm_put(Dst, 8054);
+  dasm_put(Dst, 8063);
   if (!sse) {
-  dasm_put(Dst, 8057);
+  dasm_put(Dst, 8066);
   }
-  dasm_put(Dst, 8102, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8111, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   if (!sse) {
-  dasm_put(Dst, 8188);
+  dasm_put(Dst, 8197);
   }
-  dasm_put(Dst, 8233, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32));
+  dasm_put(Dst, 8242, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32));
   if (!sse) {
-  dasm_put(Dst, 8319);
+  dasm_put(Dst, 8328);
   }
-  dasm_put(Dst, 8358, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8367, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   if (sse) {
-    dasm_put(Dst, 8447, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+    dasm_put(Dst, 8456, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   } else {
-    dasm_put(Dst, 8561);
+    dasm_put(Dst, 8570);
   }
-  dasm_put(Dst, 8608);
+  dasm_put(Dst, 8617);
   if (!sse) {
   } else {
-    dasm_put(Dst, 8685);
+    dasm_put(Dst, 8694);
   }
-  dasm_put(Dst, 8688);
-  dasm_put(Dst, 8773, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
-  dasm_put(Dst, 8876, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32));
-  dasm_put(Dst, 9038);
+  dasm_put(Dst, 8697);
+  dasm_put(Dst, 8782, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8885, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32));
+  dasm_put(Dst, 9047);
 #if LJ_HASJIT
   if (sse) {
-    dasm_put(Dst, 9079);
-    dasm_put(Dst, 9149);
-    dasm_put(Dst, 9221);
+    dasm_put(Dst, 9088);
+    dasm_put(Dst, 9158);
+    dasm_put(Dst, 9230);
   } else {
-    dasm_put(Dst, 9273);
-    dasm_put(Dst, 9365);
+    dasm_put(Dst, 9282);
+    dasm_put(Dst, 9374);
   }
-  dasm_put(Dst, 9411);
+  dasm_put(Dst, 9420);
 #endif
-  dasm_put(Dst, 9415);
+  dasm_put(Dst, 9424);
   if (sse) {
-    dasm_put(Dst, 9418, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
-    dasm_put(Dst, 9503, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
+    dasm_put(Dst, 9427, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
+    dasm_put(Dst, 9512, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
   } else {
-    dasm_put(Dst, 9631);
-    dasm_put(Dst, 9714);
+    dasm_put(Dst, 9640);
+    dasm_put(Dst, 9723);
     if (cmov) {
-    dasm_put(Dst, 9769);
+    dasm_put(Dst, 9778);
     } else {
-    dasm_put(Dst, 9788);
+    dasm_put(Dst, 9797);
     }
-    dasm_put(Dst, 9411);
+    dasm_put(Dst, 9420);
   }
-  dasm_put(Dst, 9829);
+  dasm_put(Dst, 9838);
 #ifdef LUA_USE_ASSERT
-  dasm_put(Dst, 9413);
+  dasm_put(Dst, 9422);
+#endif
+  dasm_put(Dst, 9862);
+#if LJ_HASFFI
+#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
+  dasm_put(Dst, 9866, GG_G2DISP, Dt2(->ctype_state), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[0]), DtE(->cb.fpr[1]), DtE(->cb.fpr[2]), DtE(->cb.fpr[3]), CFRAME_SIZE, DtE(->cb.gpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[4]), DtE(->cb.fpr[5]), DtE(->cb.fpr[6]), DtE(->cb.fpr[7]), DtE(->cb.stack), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 9990, Dt1(->base), Dt1(->top), Dt7(->pc));
 #endif
-  dasm_put(Dst, 9853);
+  dasm_put(Dst, 10030);
 #if LJ_HASFFI
-#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
-  dasm_put(Dst, 9857, DtE(->spadj));
+  dasm_put(Dst, 10033, DISPATCH_GL(ctype_state), DtE(->L), Dt1(->base), Dt1(->top), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]));
+#endif
+  dasm_put(Dst, 10074);
+#if LJ_HASFFI
+#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
+  dasm_put(Dst, 10077, DtF(->spadj));
 #if LJ_TARGET_WINDOWS
 #endif
-  dasm_put(Dst, 9873, DtE(->nsp), offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, DtE(->nfpr), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->fpr[0]), DtE(->fpr[1]));
-  dasm_put(Dst, 9952, DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->fpr[1]));
+  dasm_put(Dst, 10093, DtF(->nsp), offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, DtF(->nfpr), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->fpr[0]), DtF(->fpr[1]));
+  dasm_put(Dst, 10172, DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->fpr[1]));
 #if LJ_TARGET_WINDOWS
 #endif
-  dasm_put(Dst, 10007);
+  dasm_put(Dst, 10227);
 #endif
 }
 
@@ -1855,7 +1891,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
 static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 {
   int vk = 0;
-  dasm_put(Dst, 10015, defop);
+  dasm_put(Dst, 829, defop);
 
   switch (op) {
 
@@ -1866,302 +1902,302 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10017, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10235, LJ_TISNUM, LJ_TISNUM);
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 10047);
+      dasm_put(Dst, 10265);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10052);
+      dasm_put(Dst, 10270);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10057);
+      dasm_put(Dst, 10275);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10062);
+      dasm_put(Dst, 10280);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10067, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10285, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10122);
+       dasm_put(Dst, 10340);
       } else {
-       dasm_put(Dst, 10133);
+       dasm_put(Dst, 10351);
       }
-      dasm_put(Dst, 10144);
+      dasm_put(Dst, 10362);
       if (sse) {
-       dasm_put(Dst, 10151);
+       dasm_put(Dst, 10369);
        switch (op) {
        case BC_ISLT:
-       dasm_put(Dst, 10171);
+       dasm_put(Dst, 10389);
        break;
        case BC_ISGE:
-       dasm_put(Dst, 10176);
+       dasm_put(Dst, 10394);
        break;
        case BC_ISLE:
-       dasm_put(Dst, 10181);
+       dasm_put(Dst, 10399);
        break;
        case BC_ISGT:
-       dasm_put(Dst, 10186);
+       dasm_put(Dst, 10404);
        break;
        default: break;  /* Shut up GCC. */
        }
-       dasm_put(Dst, 10191);
+       dasm_put(Dst, 10409);
       } else {
-       dasm_put(Dst, 10196);
+       dasm_put(Dst, 10414);
       }
     } else {
-      dasm_put(Dst, 10204, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10422, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10225);
+      dasm_put(Dst, 10443);
     } else {
-      dasm_put(Dst, 10246);
+      dasm_put(Dst, 10464);
       if (cmov) {
-      dasm_put(Dst, 10262);
+      dasm_put(Dst, 10480);
       } else {
-      dasm_put(Dst, 10268);
+      dasm_put(Dst, 10486);
       }
     }
     if (LJ_DUALNUM) {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 10171);
+      dasm_put(Dst, 10389);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10176);
+      dasm_put(Dst, 10394);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10181);
+      dasm_put(Dst, 10399);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10186);
+      dasm_put(Dst, 10404);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10191);
+      dasm_put(Dst, 10409);
     } else {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 10275);
+      dasm_put(Dst, 817);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10280);
+      dasm_put(Dst, 10493);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10285);
+      dasm_put(Dst, 10498);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10290);
+      dasm_put(Dst, 10503);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10295, -BCBIAS_J*4);
+      dasm_put(Dst, 10508, -BCBIAS_J*4);
     }
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
-    dasm_put(Dst, 10328);
+    dasm_put(Dst, 10541);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10336, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10549, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 10361);
+       dasm_put(Dst, 10574);
       } else {
-       dasm_put(Dst, 10366);
+       dasm_put(Dst, 10579);
       }
-      dasm_put(Dst, 10371, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10584, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10424);
+       dasm_put(Dst, 10637);
       } else {
-       dasm_put(Dst, 10431);
+       dasm_put(Dst, 10644);
       }
-      dasm_put(Dst, 10435);
+      dasm_put(Dst, 10648);
       if (sse) {
-       dasm_put(Dst, 10446);
+       dasm_put(Dst, 10659);
       } else {
-       dasm_put(Dst, 10458);
+       dasm_put(Dst, 10671);
       }
-      dasm_put(Dst, 10465);
+      dasm_put(Dst, 10678);
     } else {
-      dasm_put(Dst, 10470, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10683, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10489);
+      dasm_put(Dst, 10702);
     } else {
-      dasm_put(Dst, 10507);
+      dasm_put(Dst, 10720);
       if (cmov) {
-      dasm_put(Dst, 10262);
+      dasm_put(Dst, 10480);
       } else {
-      dasm_put(Dst, 10268);
+      dasm_put(Dst, 10486);
       }
     }
   iseqne_fp:
     if (vk) {
-      dasm_put(Dst, 10520);
+      dasm_put(Dst, 10733);
     } else {
-      dasm_put(Dst, 10529);
+      dasm_put(Dst, 10742);
     }
   iseqne_end:
     if (vk) {
-      dasm_put(Dst, 10538, -BCBIAS_J*4);
+      dasm_put(Dst, 10751, -BCBIAS_J*4);
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4675);
+       dasm_put(Dst, 4684);
       }
     } else {
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4675);
+       dasm_put(Dst, 4684);
       }
-      dasm_put(Dst, 10553, -BCBIAS_J*4);
+      dasm_put(Dst, 10766, -BCBIAS_J*4);
     }
     if (LJ_DUALNUM && (op == BC_ISEQV || op == BC_ISNEV ||
                       op == BC_ISEQN || op == BC_ISNEN)) {
-      dasm_put(Dst, 10568);
+      dasm_put(Dst, 10781);
     } else {
-      dasm_put(Dst, 10307);
+      dasm_put(Dst, 10520);
     }
     if (op == BC_ISEQV || op == BC_ISNEV) {
-      dasm_put(Dst, 10573);
+      dasm_put(Dst, 10786);
       if (LJ_HASFFI) {
-       dasm_put(Dst, 10576, LJ_TCDATA, LJ_TCDATA);
+       dasm_put(Dst, 10789, LJ_TCDATA, LJ_TCDATA);
       }
-      dasm_put(Dst, 10595, LJ_TISPRI, LJ_TISTABUD, LJ_TUDATA, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
+      dasm_put(Dst, 10808, LJ_TISPRI, LJ_TISTABUD, LJ_TUDATA, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 10659);
+       dasm_put(Dst, 10872);
       } else {
-       dasm_put(Dst, 10663);
+       dasm_put(Dst, 10876);
       }
-      dasm_put(Dst, 10669);
+      dasm_put(Dst, 10882);
     } else if (LJ_HASFFI) {
-      dasm_put(Dst, 10674, LJ_TCDATA);
+      dasm_put(Dst, 10887, LJ_TCDATA);
       if (LJ_DUALNUM && vk) {
-       dasm_put(Dst, 10681);
+       dasm_put(Dst, 10894);
       } else {
-       dasm_put(Dst, 10654);
+       dasm_put(Dst, 10867);
       }
-      dasm_put(Dst, 10686);
+      dasm_put(Dst, 10899);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 10691, LJ_TSTR);
+    dasm_put(Dst, 10904, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 10524);
+      dasm_put(Dst, 10737);
     } else {
-      dasm_put(Dst, 814);
+      dasm_put(Dst, 2980);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 10718);
+    dasm_put(Dst, 10931);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10726, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10939, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 10361);
+       dasm_put(Dst, 10574);
       } else {
-       dasm_put(Dst, 10366);
+       dasm_put(Dst, 10579);
       }
-      dasm_put(Dst, 10753, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10966, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10803);
+       dasm_put(Dst, 11016);
       } else {
-       dasm_put(Dst, 10811);
+       dasm_put(Dst, 11024);
       }
-      dasm_put(Dst, 10816);
+      dasm_put(Dst, 11029);
       if (sse) {
-       dasm_put(Dst, 10823);
+       dasm_put(Dst, 11036);
       } else {
-       dasm_put(Dst, 10836);
+       dasm_put(Dst, 11049);
       }
-      dasm_put(Dst, 10465);
+      dasm_put(Dst, 10678);
     } else {
-      dasm_put(Dst, 10844, LJ_TISNUM);
+      dasm_put(Dst, 11057, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10853);
+      dasm_put(Dst, 11066);
     } else {
-      dasm_put(Dst, 10872);
+      dasm_put(Dst, 11085);
       if (cmov) {
-      dasm_put(Dst, 10262);
+      dasm_put(Dst, 10480);
       } else {
-      dasm_put(Dst, 10268);
+      dasm_put(Dst, 10486);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 10886);
+    dasm_put(Dst, 11099);
     if (!LJ_HASFFI) goto iseqne_test;
     if (vk) {
-      dasm_put(Dst, 10900, -BCBIAS_J*4, LJ_TCDATA);
+      dasm_put(Dst, 11113, -BCBIAS_J*4, LJ_TCDATA);
     } else {
-      dasm_put(Dst, 10951, LJ_TCDATA, -BCBIAS_J*4);
+      dasm_put(Dst, 11164, LJ_TCDATA, -BCBIAS_J*4);
     }
     break;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 10996, LJ_TISTRUECOND);
+    dasm_put(Dst, 11209, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 10290);
+      dasm_put(Dst, 10503);
     } else {
-      dasm_put(Dst, 10285);
+      dasm_put(Dst, 10498);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 11008);
+      dasm_put(Dst, 11221);
     }
-    dasm_put(Dst, 10295, -BCBIAS_J*4);
+    dasm_put(Dst, 10508, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 11019);
+    dasm_put(Dst, 11232);
     break;
   case BC_NOT:
-    dasm_put(Dst, 11048, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 11261, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11085, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11298, LJ_TISNUM, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 11163, LJ_TISNUM);
+      dasm_put(Dst, 11376, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 11174, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
+      dasm_put(Dst, 11387, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
     } else {
-      dasm_put(Dst, 11199);
+      dasm_put(Dst, 11412);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10568);
+      dasm_put(Dst, 10781);
     } else {
-      dasm_put(Dst, 10307);
+      dasm_put(Dst, 10520);
     }
     break;
   case BC_LEN:
-    dasm_put(Dst, 11208, LJ_TSTR);
+    dasm_put(Dst, 11421, LJ_TSTR);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11222, Dt5(->len), LJ_TISNUM);
+      dasm_put(Dst, 11435, Dt5(->len), LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 11236, Dt5(->len));
+      dasm_put(Dst, 11449, Dt5(->len));
     } else {
-      dasm_put(Dst, 11254, Dt5(->len));
+      dasm_put(Dst, 11467, Dt5(->len));
     }
-    dasm_put(Dst, 11263, LJ_TTAB);
+    dasm_put(Dst, 11476, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 11299, Dt6(->metatable));
+    dasm_put(Dst, 11512, Dt6(->metatable));
 #endif
-    dasm_put(Dst, 11313);
+    dasm_put(Dst, 11526);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 11322);
+      dasm_put(Dst, 11535);
     } else {
     }
-    dasm_put(Dst, 11328);
+    dasm_put(Dst, 11541);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 11341, Dt6(->nomm), 1<<MM_len);
+    dasm_put(Dst, 11554, Dt6(->nomm), 1<<MM_len);
 #endif
     break;
 
@@ -2170,605 +2206,605 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11365, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11578, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11400, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11613, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11435, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11648, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11468, LJ_TISNUM);
+    dasm_put(Dst, 11681, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11232);
+    dasm_put(Dst, 11445);
     } else {
-    dasm_put(Dst, 11015);
+    dasm_put(Dst, 11228);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     } else {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11498);
+    dasm_put(Dst, 11711);
     } else {
-    dasm_put(Dst, 11513);
+    dasm_put(Dst, 11726);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11546);
+    dasm_put(Dst, 11759);
     } else {
-    dasm_put(Dst, 11561);
+    dasm_put(Dst, 11774);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11592);
+    dasm_put(Dst, 11805);
     } else {
-    dasm_put(Dst, 11606);
+    dasm_put(Dst, 11819);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     }
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11614, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11827, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11649, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11862, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11684, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11897, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11468, LJ_TISNUM);
+    dasm_put(Dst, 11681, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11232);
+    dasm_put(Dst, 11445);
     } else {
-    dasm_put(Dst, 11015);
+    dasm_put(Dst, 11228);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     } else {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11717);
+    dasm_put(Dst, 11930);
     } else {
-    dasm_put(Dst, 11732);
+    dasm_put(Dst, 11945);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11741);
+    dasm_put(Dst, 11954);
     } else {
-    dasm_put(Dst, 11756);
+    dasm_put(Dst, 11969);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11765);
+    dasm_put(Dst, 11978);
     } else {
-    dasm_put(Dst, 11779);
+    dasm_put(Dst, 11992);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     }
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11787, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12000, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11823, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12036, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11859, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12072, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11468, LJ_TISNUM);
+    dasm_put(Dst, 11681, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11232);
+    dasm_put(Dst, 11445);
     } else {
-    dasm_put(Dst, 11015);
+    dasm_put(Dst, 11228);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     } else {
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11893);
+    dasm_put(Dst, 12106);
     } else {
-    dasm_put(Dst, 11908);
+    dasm_put(Dst, 12121);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11917);
+    dasm_put(Dst, 12130);
     } else {
-    dasm_put(Dst, 11932);
+    dasm_put(Dst, 12145);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11941);
+    dasm_put(Dst, 12154);
     } else {
-    dasm_put(Dst, 11955);
+    dasm_put(Dst, 12168);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     }
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11963);
+    dasm_put(Dst, 12176);
     } else {
-    dasm_put(Dst, 11978);
+    dasm_put(Dst, 12191);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11987);
+    dasm_put(Dst, 12200);
     } else {
-    dasm_put(Dst, 12002);
+    dasm_put(Dst, 12215);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12011);
+    dasm_put(Dst, 12224);
     } else {
-    dasm_put(Dst, 12025);
+    dasm_put(Dst, 12238);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
   case BC_MODVN:
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12033);
+    dasm_put(Dst, 12246);
     } else {
-    dasm_put(Dst, 12048);
+    dasm_put(Dst, 12261);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12270);
     } else {
-    dasm_put(Dst, 12072);
+    dasm_put(Dst, 12285);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12081);
+    dasm_put(Dst, 12294);
     } else {
-    dasm_put(Dst, 12095);
+    dasm_put(Dst, 12308);
     }
       break;
     }
-    dasm_put(Dst, 12103);
+    dasm_put(Dst, 12316);
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
   case BC_MODNV: case BC_MODVV:
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12033);
+    dasm_put(Dst, 12246);
     } else {
-    dasm_put(Dst, 12048);
+    dasm_put(Dst, 12261);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12270);
     } else {
-    dasm_put(Dst, 12072);
+    dasm_put(Dst, 12285);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12081);
+    dasm_put(Dst, 12294);
     } else {
-    dasm_put(Dst, 12095);
+    dasm_put(Dst, 12308);
     }
       break;
     }
-    dasm_put(Dst, 12109);
+    dasm_put(Dst, 12322);
     break;
   case BC_POW:
-    dasm_put(Dst, 11357);
+    dasm_put(Dst, 11570);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11474, LJ_TISNUM);
+    dasm_put(Dst, 11687, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11486, LJ_TISNUM);
+    dasm_put(Dst, 11699, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12033);
+    dasm_put(Dst, 12246);
     } else {
-    dasm_put(Dst, 12048);
+    dasm_put(Dst, 12261);
     }
       break;
     case 1:
-    dasm_put(Dst, 11522, LJ_TISNUM);
+    dasm_put(Dst, 11735, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11534, LJ_TISNUM);
+    dasm_put(Dst, 11747, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12057);
+    dasm_put(Dst, 12270);
     } else {
-    dasm_put(Dst, 12072);
+    dasm_put(Dst, 12285);
     }
       break;
     default:
-    dasm_put(Dst, 11570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11783, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12081);
+    dasm_put(Dst, 12294);
     } else {
-    dasm_put(Dst, 12095);
+    dasm_put(Dst, 12308);
     }
       break;
     }
-    dasm_put(Dst, 12114);
+    dasm_put(Dst, 12327);
     if (sse) {
-    dasm_put(Dst, 11192);
+    dasm_put(Dst, 11405);
     } else {
-    dasm_put(Dst, 11204);
+    dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
 
   case BC_CAT:
-    dasm_put(Dst, 12118, Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12331, Dt1(->base), Dt1(->base));
     break;
 
   /* -- Constant ops ------------------------------------------------------ */
 
   case BC_KSTR:
-    dasm_put(Dst, 12202, LJ_TSTR);
+    dasm_put(Dst, 12415, LJ_TSTR);
     break;
   case BC_KCDATA:
 #if LJ_HASFFI
-    dasm_put(Dst, 12202, LJ_TCDATA);
+    dasm_put(Dst, 12415, LJ_TCDATA);
 #endif
     break;
   case BC_KSHORT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12239, LJ_TISNUM);
+      dasm_put(Dst, 12452, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 12251);
+      dasm_put(Dst, 12464);
     } else {
-      dasm_put(Dst, 12266);
+      dasm_put(Dst, 12479);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 12274);
+      dasm_put(Dst, 12487);
     } else {
-      dasm_put(Dst, 12288);
+      dasm_put(Dst, 12501);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
   case BC_KPRI:
-    dasm_put(Dst, 12296);
+    dasm_put(Dst, 12509);
     break;
   case BC_KNIL:
-    dasm_put(Dst, 12325, LJ_TNIL);
+    dasm_put(Dst, 12538, LJ_TNIL);
     break;
 
   /* -- Upvalue and function ops ------------------------------------------ */
 
   case BC_UGET:
-    dasm_put(Dst, 12373, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12586, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETV:
 #define TV2MARKOFS \
  ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv))
-    dasm_put(Dst, 12414, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
-    dasm_put(Dst, 12510);
+    dasm_put(Dst, 12627, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
+    dasm_put(Dst, 12723);
     break;
 #undef TV2MARKOFS
   case BC_USETS:
-    dasm_put(Dst, 12522, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
+    dasm_put(Dst, 12735, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
     break;
   case BC_USETN:
-    dasm_put(Dst, 12618);
+    dasm_put(Dst, 12831);
     if (sse) {
-      dasm_put(Dst, 12623);
+      dasm_put(Dst, 12836);
     } else {
-      dasm_put(Dst, 10839);
+      dasm_put(Dst, 11052);
     }
-    dasm_put(Dst, 12631, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12844, offsetof(GCfuncL, uvptr), DtA(->v));
     if (sse) {
-      dasm_put(Dst, 12640);
+      dasm_put(Dst, 12853);
     } else {
-      dasm_put(Dst, 12646);
+      dasm_put(Dst, 12859);
     }
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
   case BC_USETP:
-    dasm_put(Dst, 12649, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12862, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_UCLO:
-    dasm_put(Dst, 12689, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12902, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
     break;
 
   case BC_FNEW:
-    dasm_put(Dst, 12745, Dt1(->base), Dt1(->base), LJ_TFUNC);
+    dasm_put(Dst, 12958, Dt1(->base), Dt1(->base), LJ_TFUNC);
     break;
 
   /* -- Table ops --------------------------------------------------------- */
 
   case BC_TNEW:
-    dasm_put(Dst, 12812, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 13025, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
     break;
   case BC_TDUP:
-    dasm_put(Dst, 12936, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 13149, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
     break;
 
   case BC_GGET:
-    dasm_put(Dst, 13035, Dt7(->env));
+    dasm_put(Dst, 13248, Dt7(->env));
     break;
   case BC_GSET:
-    dasm_put(Dst, 13055, Dt7(->env));
+    dasm_put(Dst, 13268, Dt7(->env));
     break;
 
   case BC_TGETV:
-    dasm_put(Dst, 13075, LJ_TTAB);
+    dasm_put(Dst, 13288, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 13098, LJ_TISNUM);
+      dasm_put(Dst, 13311, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 13112, LJ_TISNUM);
+      dasm_put(Dst, 13325, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 13123);
+       dasm_put(Dst, 13336);
       } else {
       }
-      dasm_put(Dst, 13144);
+      dasm_put(Dst, 13357);
     }
-    dasm_put(Dst, 13149, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
-    dasm_put(Dst, 13241, LJ_TSTR);
+    dasm_put(Dst, 13362, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
+    dasm_put(Dst, 13454, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 13259, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13344, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13472, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13557, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 13416, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 13512, LJ_TNIL);
+    dasm_put(Dst, 13629, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13725, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 13529, LJ_TTAB);
+    dasm_put(Dst, 13742, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 13098, LJ_TISNUM);
+      dasm_put(Dst, 13311, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 13112, LJ_TISNUM);
+      dasm_put(Dst, 13325, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 13123);
+       dasm_put(Dst, 13336);
       } else {
       }
-      dasm_put(Dst, 13552);
+      dasm_put(Dst, 13765);
     }
-    dasm_put(Dst, 13557, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
-    dasm_put(Dst, 13638, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13770, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 13851, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETS:
-    dasm_put(Dst, 13697, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13774, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 13861, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13910, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13987, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 14074, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETB:
-    dasm_put(Dst, 13953, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
-    dasm_put(Dst, 14048, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 14166, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
+    dasm_put(Dst, 14261, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   case BC_TSETM:
-    dasm_put(Dst, 14096, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
-    dasm_put(Dst, 14246, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 14309, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 14459, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   /* -- Calls and vararg handling ----------------------------------------- */
 
   case BC_CALL: case BC_CALLM:
-    dasm_put(Dst, 11361);
+    dasm_put(Dst, 11574);
     if (op == BC_CALLM) {
-      dasm_put(Dst, 14266);
+      dasm_put(Dst, 14479);
     }
-    dasm_put(Dst, 14271, LJ_TFUNC, Dt7(->pc));
+    dasm_put(Dst, 14484, LJ_TFUNC, Dt7(->pc));
     break;
 
   case BC_CALLMT:
-    dasm_put(Dst, 14266);
+    dasm_put(Dst, 14479);
     break;
   case BC_CALLT:
-    dasm_put(Dst, 14314, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
-    dasm_put(Dst, 14432, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
+    dasm_put(Dst, 14527, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
+    dasm_put(Dst, 14645, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
     break;
 
   case BC_ITERC:
-    dasm_put(Dst, 14506, LJ_TFUNC, 2+1, Dt7(->pc));
+    dasm_put(Dst, 14719, LJ_TFUNC, 2+1, Dt7(->pc));
     break;
 
   case BC_ITERN:
 #if LJ_HASJIT
 #endif
-    dasm_put(Dst, 14578, Dt6(->asize), Dt6(->array), LJ_TNIL);
+    dasm_put(Dst, 14791, Dt6(->asize), Dt6(->array), LJ_TNIL);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11227, LJ_TISNUM);
+      dasm_put(Dst, 11440, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 11322);
+      dasm_put(Dst, 11535);
     } else {
-      dasm_put(Dst, 14630);
+      dasm_put(Dst, 14843);
     }
-    dasm_put(Dst, 14636);
+    dasm_put(Dst, 14849);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 11192);
+      dasm_put(Dst, 11405);
     } else {
-      dasm_put(Dst, 11204);
+      dasm_put(Dst, 11417);
     }
-    dasm_put(Dst, 14649, -BCBIAS_J*4);
+    dasm_put(Dst, 14862, -BCBIAS_J*4);
     if (!LJ_DUALNUM && !sse) {
-      dasm_put(Dst, 14703);
+      dasm_put(Dst, 14916);
     }
-    dasm_put(Dst, 14709, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val));
+    dasm_put(Dst, 14922, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val));
     break;
 
   case BC_ISNEXT:
-    dasm_put(Dst, 14788, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
+    dasm_put(Dst, 15001, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
     break;
 
   case BC_VARG:
-    dasm_put(Dst, 14889, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
-    dasm_put(Dst, 15056, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 15102, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
+    dasm_put(Dst, 15269, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
     break;
 
   /* -- Returns ----------------------------------------------------------- */
 
   case BC_RETM:
-    dasm_put(Dst, 14266);
+    dasm_put(Dst, 14479);
     break;
 
   case BC_RET: case BC_RET0: case BC_RET1:
     if (op != BC_RET0) {
-      dasm_put(Dst, 15126);
+      dasm_put(Dst, 15339);
     }
-    dasm_put(Dst, 15130, FRAME_TYPE);
+    dasm_put(Dst, 15343, FRAME_TYPE);
     switch (op) {
     case BC_RET:
-      dasm_put(Dst, 15149);
+      dasm_put(Dst, 15362);
       break;
     case BC_RET1:
-      dasm_put(Dst, 15203);
+      dasm_put(Dst, 15416);
       /* fallthrough */
     case BC_RET0:
-      dasm_put(Dst, 15213);
+      dasm_put(Dst, 15426);
     default:
       break;
     }
-    dasm_put(Dst, 15224, Dt7(->pc), PC2PROTO(k));
+    dasm_put(Dst, 15437, Dt7(->pc), PC2PROTO(k));
     if (op == BC_RET) {
-      dasm_put(Dst, 15272, LJ_TNIL);
+      dasm_put(Dst, 15485, LJ_TNIL);
     } else {
-      dasm_put(Dst, 15283, LJ_TNIL);
+      dasm_put(Dst, 15496, LJ_TNIL);
     }
-    dasm_put(Dst, 15290, -FRAME_VARG, FRAME_TYPEP);
+    dasm_put(Dst, 15503, -FRAME_VARG, FRAME_TYPEP);
     if (op != BC_RET0) {
-      dasm_put(Dst, 15314);
+      dasm_put(Dst, 15527);
     }
-    dasm_put(Dst, 4752);
+    dasm_put(Dst, 4761);
     break;
 
   /* -- Loops and branches ------------------------------------------------ */
@@ -2776,7 +2812,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FORL:
 #if LJ_HASJIT
-    dasm_put(Dst, 15318, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15531, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -2788,111 +2824,111 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
   case BC_FORI:
   case BC_IFORL:
     vk = (op == BC_IFORL || op == BC_JFORL);
-    dasm_put(Dst, 15339);
+    dasm_put(Dst, 15552);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 15343, LJ_TISNUM);
+      dasm_put(Dst, 15556, LJ_TISNUM);
       if (!vk) {
-       dasm_put(Dst, 15353, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 15566, LJ_TISNUM, LJ_TISNUM);
       } else {
 #ifdef LUA_USE_ASSERT
-       dasm_put(Dst, 15382, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 15595, LJ_TISNUM, LJ_TISNUM);
 #endif
-       dasm_put(Dst, 15401);
+       dasm_put(Dst, 15614);
       }
-      dasm_put(Dst, 15420, LJ_TISNUM);
+      dasm_put(Dst, 15633, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 15431, -BCBIAS_J*4);
+       dasm_put(Dst, 15644, -BCBIAS_J*4);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 15445, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 15658, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 15463, -BCBIAS_J*4);
+       dasm_put(Dst, 15676, -BCBIAS_J*4);
       } else {
-       dasm_put(Dst, 15455, BC_JLOOP);
+       dasm_put(Dst, 15668, BC_JLOOP);
       }
-      dasm_put(Dst, 15477);
+      dasm_put(Dst, 15690);
       if (vk) {
-       dasm_put(Dst, 15502);
+       dasm_put(Dst, 15715);
       }
-      dasm_put(Dst, 15420, LJ_TISNUM);
+      dasm_put(Dst, 15633, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 15511);
+       dasm_put(Dst, 15724);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 15516, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 15729, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 15530);
+       dasm_put(Dst, 15743);
       } else {
-       dasm_put(Dst, 15526, BC_JLOOP);
+       dasm_put(Dst, 15739, BC_JLOOP);
       }
-      dasm_put(Dst, 15535);
+      dasm_put(Dst, 15748);
     } else if (!vk) {
-      dasm_put(Dst, 15542, LJ_TISNUM);
+      dasm_put(Dst, 15755, LJ_TISNUM);
     }
     if (!vk) {
-      dasm_put(Dst, 15548, LJ_TISNUM);
+      dasm_put(Dst, 15761, LJ_TISNUM);
     } else {
 #ifdef LUA_USE_ASSERT
-      dasm_put(Dst, 15562, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 15775, LJ_TISNUM, LJ_TISNUM);
 #endif
     }
-    dasm_put(Dst, 15581);
+    dasm_put(Dst, 15794);
     if (!vk) {
-      dasm_put(Dst, 15585, LJ_TISNUM);
+      dasm_put(Dst, 15798, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 15594);
+      dasm_put(Dst, 15807);
       if (vk) {
-       dasm_put(Dst, 15606);
+       dasm_put(Dst, 15819);
       } else {
-       dasm_put(Dst, 15625);
+       dasm_put(Dst, 15838);
       }
-      dasm_put(Dst, 15630);
+      dasm_put(Dst, 15843);
     } else {
-      dasm_put(Dst, 15643);
+      dasm_put(Dst, 15856);
       if (vk) {
-       dasm_put(Dst, 15649);
+       dasm_put(Dst, 15862);
       } else {
-       dasm_put(Dst, 15665);
+       dasm_put(Dst, 15878);
       }
-      dasm_put(Dst, 15673);
+      dasm_put(Dst, 15886);
       if (cmov) {
-      dasm_put(Dst, 10262);
+      dasm_put(Dst, 10480);
       } else {
-      dasm_put(Dst, 10268);
+      dasm_put(Dst, 10486);
       }
       if (!cmov) {
-       dasm_put(Dst, 15678);
+       dasm_put(Dst, 15891);
       }
     }
     if (op == BC_FORI) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 15684);
+       dasm_put(Dst, 15897);
       } else {
-       dasm_put(Dst, 15689, -BCBIAS_J*4);
+       dasm_put(Dst, 15902, -BCBIAS_J*4);
       }
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 15699, -BCBIAS_J*4, BC_JLOOP);
+      dasm_put(Dst, 15912, -BCBIAS_J*4, BC_JLOOP);
     } else if (op == BC_IFORL) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 15713);
+       dasm_put(Dst, 15926);
       } else {
-       dasm_put(Dst, 15718, -BCBIAS_J*4);
+       dasm_put(Dst, 15931, -BCBIAS_J*4);
       }
     } else {
-      dasm_put(Dst, 15709, BC_JLOOP);
+      dasm_put(Dst, 15922, BC_JLOOP);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10191);
+      dasm_put(Dst, 10409);
     } else {
-      dasm_put(Dst, 10973);
+      dasm_put(Dst, 11186);
     }
     if (sse) {
-      dasm_put(Dst, 15728);
+      dasm_put(Dst, 15941);
     }
     break;
 
   case BC_ITERL:
 #if LJ_HASJIT
-    dasm_put(Dst, 15318, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15531, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -2901,33 +2937,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IITERL:
-    dasm_put(Dst, 15739, LJ_TNIL);
+    dasm_put(Dst, 15952, LJ_TNIL);
     if (op == BC_JITERL) {
-      dasm_put(Dst, 15754, BC_JLOOP);
+      dasm_put(Dst, 15967, BC_JLOOP);
     } else {
-      dasm_put(Dst, 15768, -BCBIAS_J*4);
+      dasm_put(Dst, 15981, -BCBIAS_J*4);
     }
-    dasm_put(Dst, 10305);
+    dasm_put(Dst, 10518);
     break;
 
   case BC_LOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 15318, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15531, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
   case BC_ILOOP:
-    dasm_put(Dst, 10307);
+    dasm_put(Dst, 10520);
     break;
 
   case BC_JLOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 15784, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
+    dasm_put(Dst, 15997, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
 #endif
     break;
 
   case BC_JMP:
-    dasm_put(Dst, 15825, -BCBIAS_J*4);
+    dasm_put(Dst, 16038, -BCBIAS_J*4);
     break;
 
   /* -- Function headers -------------------------------------------------- */
@@ -2941,7 +2977,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FUNCF:
 #if LJ_HASJIT
-    dasm_put(Dst, 15851, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
+    dasm_put(Dst, 16064, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
 #endif
   case BC_FUNCV:  /* NYI: compiled vararg functions. */
     break;
@@ -2951,47 +2987,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IFUNCF:
-    dasm_put(Dst, 15872, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
+    dasm_put(Dst, 16085, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
     if (op == BC_JFUNCF) {
-      dasm_put(Dst, 15903, BC_JLOOP);
+      dasm_put(Dst, 16116, BC_JLOOP);
     } else {
-      dasm_put(Dst, 10307);
+      dasm_put(Dst, 10520);
     }
-    dasm_put(Dst, 15912, LJ_TNIL);
+    dasm_put(Dst, 16125, LJ_TNIL);
     break;
 
   case BC_JFUNCV:
 #if !LJ_HASJIT
     break;
 #endif
-    dasm_put(Dst, 9413);
+    dasm_put(Dst, 9422);
     break;  /* NYI: compiled vararg functions. */
 
   case BC_IFUNCV:
-    dasm_put(Dst, 15934, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
+    dasm_put(Dst, 16147, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
     if (op == BC_JFUNCV) {
-      dasm_put(Dst, 15903, BC_JLOOP);
+      dasm_put(Dst, 16116, BC_JLOOP);
     } else {
-      dasm_put(Dst, 16031, -4+PC2PROTO(k));
+      dasm_put(Dst, 16244, -4+PC2PROTO(k));
     }
-    dasm_put(Dst, 16056, LJ_TNIL);
+    dasm_put(Dst, 16269, LJ_TNIL);
     break;
 
   case BC_FUNCC:
   case BC_FUNCCW:
-    dasm_put(Dst, 16078, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
+    dasm_put(Dst, 16291, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 2424);
+      dasm_put(Dst, 2433);
     } else {
-      dasm_put(Dst, 16108);
+      dasm_put(Dst, 16321);
     }
-    dasm_put(Dst, 16116, DISPATCH_GL(vmstate), ~LJ_VMST_C);
+    dasm_put(Dst, 16329, DISPATCH_GL(vmstate), ~LJ_VMST_C);
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 16126);
+      dasm_put(Dst, 16339);
     } else {
-      dasm_put(Dst, 16131, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 16344, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 16137, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 16350, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
     break;
 
   /* ---------------------------------------------------------------------- */
@@ -3019,7 +3055,7 @@ static int build_backend(BuildCtx *ctx)
 
   build_subroutines(ctx, cmov, sse);
 
-  dasm_put(Dst, 16163);
+  dasm_put(Dst, 16376);
   for (op = 0; op < BC__MAX; op++)
     build_ins(ctx, (BCOp)op, op, cmov, sse);
 
index b051974cccad0f06cb78fe1a2a97fddb7607baec..533d5b006a788a11a42ffc0a509c924fe901b3c2 100644 (file)
@@ -12,7 +12,7 @@
 #define DASM_SECTION_CODE_OP   0
 #define DASM_SECTION_CODE_SUB  1
 #define DASM_MAXSECTION                2
-static const unsigned char build_actionlist[16020] = {
+static const unsigned char build_actionlist[16196] = {
   254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,72,
   141,76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68,
   36,84,252,247,198,237,15,132,244,13,248,14,129,252,246,239,252,247,198,237,
@@ -50,746 +50,755 @@ static const unsigned char build_actionlist[16020] = {
   124,36,88,72,139,189,233,72,137,124,36,104,72,137,165,233,65,252,255,209,
   133,192,15,132,244,15,137,193,190,237,252,233,244,2,248,11,1,209,131,230,
   252,248,137,213,41,252,242,199,68,193,252,252,237,137,200,139,117,252,244,
-  72,99,77,252,240,133,201,15,132,244,247,255,72,141,61,245,72,1,252,249,139,
-  122,252,248,139,191,233,139,191,233,252,255,225,248,1,41,213,193,252,237,
-  3,141,69,252,255,252,233,244,32,248,33,15,182,78,252,255,131,252,237,16,141,
-  12,202,41,252,233,15,132,244,34,252,247,217,193,252,233,3,65,137,200,139,
-  76,36,96,137,145,233,72,139,0,72,137,69,0,137,252,234,252,233,244,35,248,
-  36,137,68,36,80,199,68,36,84,237,72,141,68,36,80,128,126,252,252,235,15,133,
-  244,247,141,139,233,137,41,199,65,4,237,255,137,205,252,233,244,248,248,37,
-  15,182,70,252,254,255,199,68,36,84,237,137,68,36,80,255,252,242,15,42,192,
-  252,242,15,17,68,36,80,255,72,141,68,36,80,252,233,244,247,248,38,15,182,
-  70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,2,139,76,
-  36,96,137,145,233,137,252,234,73,137,192,137,205,137,116,36,100,232,251,1,
-  1,139,149,233,133,192,15,132,244,249,248,34,15,182,78,252,253,72,139,40,72,
-  137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
-  235,248,3,139,141,233,137,113,252,244,141,177,233,41,214,139,105,252,248,
-  184,237,252,233,244,30,248,39,137,68,36,80,199,68,36,84,237,72,141,68,36,
-  80,128,126,252,252,235,15,133,244,247,255,141,139,233,137,41,199,65,4,237,
-  137,205,252,233,244,248,248,40,15,182,70,252,254,255,72,141,68,36,80,252,
-  233,244,247,248,41,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,
-  44,252,234,248,2,139,76,36,96,137,145,233,137,252,234,73,137,192,137,205,
-  137,116,36,100,232,251,1,2,139,149,233,133,192,15,132,244,249,15,182,78,252,
-  253,72,139,44,202,72,137,40,248,42,139,6,15,182,204,15,182,232,131,198,4,
-  193,232,16,252,255,36,252,235,248,3,139,141,233,137,113,252,244,15,182,70,
-  252,253,72,139,44,194,72,137,105,16,141,177,233,41,214,139,105,252,248,184,
-  237,252,233,244,30,248,43,139,108,36,96,137,149,233,68,141,4,194,141,20,202,
-  137,252,233,68,15,182,78,252,252,137,116,36,100,232,251,1,3,248,3,139,149,
-  233,255,131,252,248,1,15,135,244,44,248,4,141,118,4,15,130,244,252,248,5,
-  15,183,70,252,254,141,180,253,134,233,248,6,139,6,15,182,204,15,182,232,131,
-  198,4,193,232,16,252,255,36,252,235,248,45,131,198,4,129,120,253,4,239,15,
-  130,244,5,252,233,244,6,248,46,129,120,253,4,239,252,233,244,4,248,47,131,
-  252,238,4,65,137,192,65,137,252,233,139,108,36,96,137,149,233,255,137,202,
-  137,252,233,137,116,36,100,232,251,1,4,252,233,244,3,248,48,255,131,252,238,
-  4,139,108,36,96,137,149,233,137,252,233,139,86,252,252,137,116,36,100,232,
-  251,1,5,252,233,244,3,255,248,49,255,15,182,110,252,255,255,248,50,141,4,
-  199,252,233,244,247,248,51,255,248,52,141,4,199,141,44,252,234,149,252,233,
-  244,248,248,53,141,4,194,137,197,252,233,244,248,248,54,255,248,55,141,4,
-  194,248,1,141,44,252,234,248,2,141,12,202,65,137,232,65,137,193,15,182,70,
-  252,252,137,68,36,32,139,108,36,96,137,149,233,137,202,137,252,233,137,116,
-  36,100,232,251,1,6,139,149,233,133,192,15,132,244,42,248,44,137,193,41,208,
-  137,113,252,244,141,176,233,184,237,252,233,244,28,248,56,139,108,36,96,137,
-  149,233,141,20,194,137,252,233,137,116,36,100,232,251,1,7,139,149,233,255,
-  133,192,15,133,244,44,15,183,70,252,254,139,12,194,252,233,244,57,255,252,
-  233,244,44,255,248,58,141,76,202,8,248,29,137,76,36,84,137,68,36,80,131,252,
-  233,8,139,108,36,96,137,149,233,137,202,68,141,4,193,137,252,233,137,116,
-  36,100,232,251,1,8,139,149,233,139,76,36,84,139,68,36,80,139,105,252,248,
-  131,192,1,57,215,15,132,244,59,137,202,137,114,252,252,139,181,233,139,14,
-  15,182,252,233,15,182,205,131,198,4,252,255,36,252,235,248,60,139,108,36,
-  96,137,149,233,137,202,137,252,233,137,116,36,100,232,251,1,9,139,149,233,
-  139,70,252,252,15,182,204,15,182,232,193,232,16,252,255,164,253,252,235,233,
-  248,61,129,252,248,239,15,130,244,62,139,106,4,129,252,253,239,15,131,244,
-  62,139,114,252,252,137,68,36,84,137,106,252,252,139,42,137,106,252,248,131,
-  232,2,15,132,244,248,255,137,209,248,1,131,193,8,72,139,41,72,137,105,252,
-  248,131,232,1,15,133,244,1,248,2,139,68,36,84,252,233,244,63,248,64,129,252,
-  248,239,15,130,244,62,139,106,4,137,252,233,193,252,249,15,131,252,249,252,
-  254,15,132,244,249,184,237,252,247,213,57,232,255,15,71,197,255,15,134,244,
-  247,137,232,248,1,255,248,2,139,106,252,248,139,132,253,197,233,139,114,252,
-  252,199,66,252,252,237,137,66,252,248,252,233,244,65,248,3,184,237,252,233,
-  244,2,248,66,129,252,248,239,15,130,244,62,139,106,4,139,114,252,252,129,
-  252,253,239,15,133,244,252,248,1,139,42,139,173,233,248,2,133,252,237,199,
-  66,252,252,237,255,15,132,244,65,139,131,233,199,66,252,252,237,137,106,252,
-  248,139,141,233,35,136,233,105,201,239,3,141,233,248,3,129,185,233,239,15,
-  133,244,250,57,129,233,15,132,244,251,248,4,139,137,233,133,201,15,133,244,
-  3,255,252,233,244,65,248,5,139,105,4,129,252,253,239,15,132,244,65,139,1,
-  137,106,252,252,137,66,252,248,252,233,244,65,248,6,129,252,253,239,15,132,
-  244,1,129,252,253,239,15,135,244,254,129,252,253,239,15,134,244,253,189,237,
-  252,233,244,254,248,7,255,189,237,248,8,252,247,213,139,172,253,171,233,252,
-  233,244,2,248,67,129,252,248,239,15,130,244,62,129,122,253,4,239,15,133,244,
-  62,139,42,131,189,233,0,15,133,244,62,129,122,253,12,239,15,133,244,62,139,
-  66,8,137,133,233,139,114,252,252,199,66,252,252,237,255,137,106,252,248,252,
-  246,133,233,235,15,132,244,247,128,165,233,235,139,131,233,137,171,233,137,
-  133,233,248,1,252,233,244,65,248,68,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,15,133,244,62,137,213,68,141,66,8,139,18,139,76,36,96,232,251,1,
-  10,137,252,234,72,139,40,139,114,252,252,72,137,106,252,248,252,233,244,65,
-  248,69,255,129,252,248,239,15,133,244,62,129,122,253,4,239,255,15,133,244,
-  247,139,42,252,233,244,70,248,1,15,135,244,62,255,15,131,244,62,255,252,242,
-  15,16,2,252,233,244,71,255,221,2,252,233,244,72,255,248,73,129,252,248,239,
-  15,130,244,62,139,114,252,252,129,122,253,4,239,15,133,244,249,139,2,248,
-  2,199,66,252,252,237,137,66,252,248,252,233,244,65,248,3,129,122,253,4,239,
-  15,135,244,62,131,187,233,0,15,133,244,62,139,171,233,59,171,233,255,15,130,
-  244,247,232,244,74,248,1,139,108,36,96,137,149,233,137,116,36,100,137,252,
-  233,255,232,251,1,11,255,232,251,1,12,255,139,149,233,252,233,244,2,248,75,
-  129,252,248,239,15,130,244,62,15,132,244,248,248,1,129,122,253,4,239,15,133,
-  244,62,139,108,36,96,137,149,233,137,149,233,139,114,252,252,68,141,66,8,
-  139,18,137,252,233,137,116,36,100,232,251,1,13,139,149,233,133,192,15,132,
-  244,249,72,139,106,8,72,139,66,16,72,137,106,252,248,72,137,2,248,76,184,
-  237,255,252,233,244,77,248,2,199,66,12,237,252,233,244,1,248,3,199,66,252,
-  252,237,252,233,244,65,248,78,129,252,248,239,15,130,244,62,139,42,129,122,
-  253,4,239,15,133,244,62,255,131,189,233,0,15,133,244,62,255,139,106,252,248,
-  139,133,233,139,114,252,252,199,66,252,252,237,137,66,252,248,199,66,12,237,
-  184,237,252,233,244,77,248,79,129,252,248,239,15,130,244,62,129,122,253,4,
-  239,15,133,244,62,129,122,253,12,239,255,139,114,252,252,255,139,66,8,131,
-  192,1,199,66,252,252,237,137,66,252,248,255,252,242,15,16,66,8,72,189,237,
-  237,102,72,15,110,205,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,
-  252,248,255,139,42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,
-  120,253,4,239,15,132,244,80,72,139,40,72,137,42,252,233,244,76,248,2,131,
-  189,233,0,15,132,244,80,137,252,233,137,213,137,194,232,251,1,14,137,252,
-  234,133,192,15,133,244,1,248,80,184,237,252,233,244,77,248,81,255,139,106,
-  252,248,139,133,233,139,114,252,252,199,66,252,252,237,137,66,252,248,255,
-  199,66,12,237,199,66,8,0,0,0,0,255,15,87,192,252,242,15,17,66,8,255,217,252,
-  238,221,90,8,255,184,237,252,233,244,77,248,82,129,252,248,239,15,130,244,
-  62,141,74,8,131,232,1,190,237,248,1,15,182,171,233,193,252,237,235,131,229,
-  1,1,252,238,252,233,244,28,248,83,129,252,248,239,15,130,244,62,129,122,253,
-  12,239,15,133,244,62,255,139,106,4,137,106,12,199,66,4,237,139,42,139,114,
-  8,137,106,8,137,50,141,74,16,131,232,2,190,237,252,233,244,1,248,84,129,252,
-  248,239,15,130,244,62,139,42,139,114,252,252,137,116,36,100,137,108,36,80,
-  129,122,253,4,239,15,133,244,62,72,131,189,233,0,15,133,244,62,128,189,233,
-  235,15,135,244,62,139,141,233,15,132,244,247,255,59,141,233,15,132,244,62,
-  248,1,141,116,193,252,240,59,181,233,15,135,244,62,137,181,233,139,108,36,
-  96,137,149,233,131,194,8,137,149,233,141,108,194,232,72,41,252,245,57,206,
-  15,132,244,249,248,2,72,139,4,46,72,137,70,252,248,131,252,238,8,57,206,15,
-  133,244,2,248,3,137,202,139,76,36,80,232,244,25,199,131,233,237,255,139,108,
-  36,96,139,116,36,80,139,149,233,129,252,248,239,15,135,244,254,248,4,139,
-  142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,
-  193,252,238,3,59,133,233,15,135,244,255,137,213,72,41,205,248,5,72,139,1,
-  72,137,4,41,131,193,8,57,252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,
-  237,248,7,139,116,36,100,137,68,36,84,72,199,193,252,248,252,255,252,255,
-  252,255,252,247,198,237,255,15,132,244,13,252,233,244,14,248,8,199,66,252,
-  252,237,139,142,233,131,252,233,8,137,142,233,72,139,1,72,137,2,184,237,252,
-  233,244,7,248,9,139,76,36,80,137,185,233,137,252,242,137,252,233,232,251,
-  1,0,139,116,36,80,139,149,233,252,233,244,4,248,85,139,106,252,248,139,173,
-  233,139,114,252,252,137,116,36,100,137,108,36,80,72,131,189,233,0,15,133,
-  244,62,255,128,189,233,235,15,135,244,62,139,141,233,15,132,244,247,59,141,
-  233,15,132,244,62,248,1,141,116,193,252,248,59,181,233,15,135,244,62,137,
-  181,233,139,108,36,96,137,149,233,137,149,233,141,108,194,252,240,72,41,252,
-  245,57,206,15,132,244,249,248,2,255,72,139,4,46,72,137,70,252,248,131,252,
-  238,8,57,206,15,133,244,2,248,3,137,202,139,76,36,80,232,244,25,199,131,233,
-  237,139,108,36,96,139,116,36,80,139,149,233,129,252,248,239,15,135,244,254,
-  248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,
-  141,4,50,193,252,238,3,59,133,233,15,135,244,255,255,137,213,72,41,205,248,
-  5,72,139,1,72,137,4,41,131,193,8,57,252,249,15,133,244,5,248,6,141,70,1,248,
-  7,139,116,36,100,137,68,36,84,49,201,252,247,198,237,15,132,244,13,252,233,
-  244,14,248,8,137,252,242,137,252,233,232,251,1,15,248,9,139,76,36,80,137,
-  185,233,137,252,242,137,252,233,232,251,1,0,139,116,36,80,139,149,233,252,
-  233,244,4,248,86,139,108,36,96,72,252,247,133,233,237,15,132,244,62,255,137,
-  149,233,141,68,194,252,248,137,133,233,49,192,72,137,133,233,176,235,136,
-  133,233,252,233,244,16,255,248,70,255,248,72,139,114,252,252,221,90,252,248,
-  252,233,244,65,255,248,87,129,252,248,239,15,130,244,62,255,129,122,253,4,
-  239,15,133,244,248,139,42,131,252,253,0,15,137,244,70,252,247,221,15,136,
-  244,247,248,88,248,70,139,114,252,252,199,66,252,252,237,137,106,252,248,
-  252,233,244,65,248,1,139,114,252,252,199,66,252,252,0,0,224,65,199,66,252,
-  248,0,0,0,0,252,233,244,65,248,2,15,135,244,62,255,129,122,253,4,239,15,131,
-  244,62,255,252,242,15,16,2,72,184,237,237,102,72,15,110,200,15,84,193,248,
-  71,139,114,252,252,252,242,15,17,66,252,248,255,221,2,217,225,248,71,248,
-  72,139,114,252,252,221,90,252,248,255,248,65,184,237,248,77,137,68,36,84,
-  248,63,252,247,198,237,15,133,244,253,248,5,56,70,252,255,15,135,244,252,
-  15,182,78,252,253,72,252,247,209,141,20,202,139,6,15,182,204,15,182,232,131,
-  198,4,193,232,16,252,255,36,252,235,248,6,199,68,194,252,244,237,131,192,
-  1,252,233,244,5,248,7,72,199,193,252,248,252,255,252,255,252,255,252,233,
-  244,14,248,89,255,129,122,253,4,239,15,133,244,247,139,42,252,233,244,70,
-  248,1,15,135,244,62,255,252,242,15,16,2,232,244,90,255,252,242,15,45,232,
-  129,252,253,0,0,0,128,15,133,244,70,252,242,15,42,205,102,15,46,193,15,138,
-  244,71,15,132,244,70,255,221,2,232,244,90,255,248,91,255,252,242,15,16,2,
-  232,244,92,255,221,2,232,244,92,255,248,93,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,15,131,244,62,252,242,15,81,2,252,233,244,71,255,248,93,
-  129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,252,
-  250,252,233,244,72,255,248,94,129,252,248,239,15,130,244,62,129,122,253,4,
-  239,15,131,244,62,217,252,237,221,2,217,252,241,252,233,244,72,248,95,129,
-  252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,217,252,236,221,
-  2,217,252,241,252,233,244,72,248,96,129,252,248,239,255,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,221,2,232,244,97,252,233,244,72,248,98,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,252,254,252,
-  233,244,72,248,99,129,252,248,239,255,15,130,244,62,129,122,253,4,239,15,
-  131,244,62,221,2,217,252,255,252,233,244,72,248,100,129,252,248,239,15,130,
-  244,62,129,122,253,4,239,15,131,244,62,221,2,217,252,242,221,216,252,233,
-  244,72,248,101,129,252,248,239,15,130,244,62,255,129,122,253,4,239,15,131,
-  244,62,221,2,217,192,216,200,217,232,222,225,217,252,250,217,252,243,252,
-  233,244,72,248,102,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,221,2,217,192,216,200,217,232,222,225,217,252,250,217,201,217,252,
-  243,252,233,244,72,248,103,129,252,248,239,15,130,244,62,129,122,253,4,239,
-  15,131,244,62,255,221,2,217,232,217,252,243,252,233,244,72,255,248,104,129,
-  252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,
-  255,137,213,232,251,1,16,137,252,234,252,233,244,71,255,248,105,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,255,137,
-  213,232,251,1,17,137,252,234,252,233,244,71,255,248,106,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,255,137,213,232,
-  251,1,18,137,252,234,252,233,244,71,248,107,255,248,108,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,139,106,252,248,
-  252,242,15,89,133,233,252,233,244,71,255,248,108,129,252,248,239,15,130,244,
-  62,129,122,253,4,239,15,131,244,62,221,2,139,106,252,248,220,141,233,252,
-  233,244,72,255,248,109,129,252,248,239,15,130,244,62,129,122,253,4,239,15,
-  131,244,62,129,122,253,12,239,15,131,244,62,221,2,221,66,8,217,252,243,252,
-  233,244,72,248,110,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,129,122,253,12,239,255,15,131,244,62,221,66,8,221,2,217,252,253,221,
-  217,252,233,244,72,248,111,129,252,248,239,15,130,244,62,139,106,4,129,252,
-  253,239,15,131,244,62,139,114,252,252,139,2,137,106,252,252,137,66,252,248,
-  209,229,129,252,253,0,0,224,252,255,15,131,244,249,9,232,15,132,244,249,184,
-  252,254,3,0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,252,237,21,41,
-  197,255,252,242,15,42,197,255,137,108,36,80,219,68,36,80,255,139,106,252,
-  252,129,229,252,255,252,255,15,128,129,205,0,0,224,63,137,106,252,252,248,
-  2,255,252,242,15,17,2,255,221,26,255,184,237,252,233,244,77,248,3,255,15,
-  87,192,252,233,244,2,255,217,252,238,252,233,244,2,255,248,4,255,252,242,
-  15,16,2,72,189,237,237,102,72,15,110,205,252,242,15,89,193,252,242,15,17,
-  66,252,248,255,221,2,199,68,36,80,0,0,128,90,216,76,36,80,221,90,252,248,
-  255,139,106,252,252,184,52,4,0,0,209,229,252,233,244,1,255,248,112,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,255,
-  248,112,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,221,
-  2,255,139,106,4,139,114,252,252,209,229,129,252,253,0,0,224,252,255,15,132,
-  244,250,255,15,40,224,232,244,113,252,242,15,92,224,248,1,252,242,15,17,66,
-  252,248,252,242,15,17,34,255,217,192,232,244,113,220,252,233,248,1,221,90,
-  252,248,221,26,255,139,66,252,252,139,106,4,49,232,15,136,244,249,248,2,184,
-  237,252,233,244,77,248,3,129,252,245,0,0,0,128,137,106,4,252,233,244,2,248,
-  4,255,15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,244,1,255,248,
-  114,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,
-  253,12,239,15,131,244,62,221,66,8,221,2,248,1,217,252,248,223,224,158,15,
-  138,244,1,221,217,252,233,244,72,255,248,115,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,
-  15,16,2,252,242,15,16,74,8,232,244,116,252,233,244,71,255,248,115,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,
-  15,131,244,62,221,2,221,66,8,232,244,116,252,233,244,72,255,248,117,185,2,
-  0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,15,131,244,
-  70,129,124,253,202,252,252,239,15,133,244,249,59,108,202,252,248,15,79,108,
-  202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,62,255,252,233,244,252,
-  248,4,15,135,244,62,255,252,242,15,16,2,248,5,57,193,15,131,244,71,129,124,
-  253,202,252,252,239,255,15,130,244,252,15,135,244,62,252,242,15,42,76,202,
-  252,248,252,233,244,253,255,248,6,252,242,15,16,76,202,252,248,248,7,252,
-  242,15,93,193,131,193,1,252,233,244,5,255,248,118,185,2,0,0,0,129,122,253,
-  4,239,255,15,133,244,250,139,42,248,1,57,193,15,131,244,70,129,124,253,202,
-  252,252,239,15,133,244,249,59,108,202,252,248,15,76,108,202,252,248,131,193,
-  1,252,233,244,1,248,3,15,135,244,62,255,248,6,252,242,15,16,76,202,252,248,
-  248,7,252,242,15,95,193,131,193,1,252,233,244,5,255,248,9,221,216,252,233,
-  244,62,255,248,119,129,252,248,239,15,130,244,62,129,122,253,4,239,15,133,
-  244,62,139,42,255,139,173,233,252,233,244,70,255,252,242,15,42,133,233,252,
-  233,244,71,255,219,133,233,252,233,244,72,255,248,120,129,252,248,239,15,
-  133,244,62,129,122,253,4,239,15,133,244,62,139,42,139,114,252,252,131,189,
-  233,1,15,130,244,80,15,182,173,233,255,252,242,15,42,197,252,233,244,71,255,
-  137,108,36,80,219,68,36,80,252,233,244,72,255,248,121,139,171,233,59,171,
-  233,15,130,244,247,232,244,74,248,1,129,252,248,239,15,133,244,62,129,122,
-  253,4,239,255,15,133,244,62,139,42,129,252,253,252,255,0,0,0,15,135,244,62,
-  137,108,36,84,255,15,131,244,62,252,242,15,44,42,129,252,253,252,255,0,0,
-  0,15,135,244,62,137,108,36,84,255,15,131,244,62,221,2,219,92,36,84,129,124,
-  36,84,252,255,0,0,0,15,135,244,62,255,199,68,36,32,1,0,0,0,72,141,68,36,84,
-  248,122,139,108,36,96,137,149,233,68,139,68,36,32,72,137,194,137,252,233,
-  137,116,36,100,232,251,1,19,139,149,233,139,114,252,252,199,66,252,252,237,
-  137,66,252,248,252,233,244,65,248,123,139,171,233,59,171,233,15,130,244,247,
-  232,244,74,248,1,199,68,36,84,252,255,252,255,252,255,252,255,129,252,248,
-  239,15,130,244,62,15,134,244,247,129,122,253,20,239,255,15,133,244,62,139,
-  106,16,137,108,36,84,255,15,131,244,62,252,242,15,44,106,16,137,108,36,84,
-  255,15,131,244,62,221,66,16,219,92,36,84,255,248,1,129,122,253,4,239,15,133,
-  244,62,129,122,253,12,239,255,139,42,137,108,36,32,139,173,233,255,139,74,
-  8,255,252,242,15,44,74,8,255,139,68,36,84,57,197,15,130,244,251,248,2,133,
-  201,15,142,244,253,248,3,139,108,36,32,41,200,15,140,244,124,141,172,253,
-  13,233,131,192,1,248,4,137,68,36,32,137,232,252,233,244,122,248,5,15,140,
-  244,252,141,68,40,1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,
-  132,244,254,1,252,233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,
-  3,248,124,49,192,252,233,244,4,248,125,129,252,248,239,15,130,244,62,139,
-  171,233,59,171,233,15,130,244,247,232,244,74,248,1,255,129,122,253,4,239,
-  15,133,244,62,129,122,253,12,239,139,42,255,15,133,244,62,139,66,8,255,15,
-  131,244,62,252,242,15,44,66,8,255,15,131,244,62,221,66,8,219,92,36,84,139,
-  68,36,84,255,133,192,15,142,244,124,131,189,233,1,15,130,244,124,15,133,244,
-  126,57,131,233,15,130,244,126,15,182,141,233,139,171,233,137,68,36,32,248,
-  1,136,77,0,131,197,1,131,232,1,15,133,244,1,139,131,233,252,233,244,122,248,
-  127,129,252,248,239,255,15,130,244,62,139,171,233,59,171,233,15,130,244,247,
-  232,244,74,248,1,129,122,253,4,239,15,133,244,62,139,42,139,133,233,133,192,
-  15,132,244,124,57,131,233,15,130,244,128,129,197,239,137,116,36,84,137,68,
-  36,32,139,179,233,248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,
-  244,1,137,252,240,139,116,36,84,252,233,244,122,248,129,129,252,248,239,15,
-  130,244,62,139,171,233,59,171,233,15,130,244,247,232,244,74,248,1,129,122,
-  253,4,239,15,133,244,62,139,42,139,133,233,57,131,233,255,15,130,244,128,
+  72,99,77,252,240,255,131,252,249,1,15,134,244,247,255,72,141,61,245,72,1,
+  252,249,255,139,122,252,248,139,191,233,139,191,233,252,255,225,255,248,1,
+  15,132,244,32,41,213,193,252,237,3,141,69,252,255,252,233,244,33,255,248,
+  34,15,182,78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,35,252,
+  247,217,193,252,233,3,65,137,200,139,76,36,96,137,145,233,72,139,0,72,137,
+  69,0,137,252,234,252,233,244,36,248,37,137,68,36,80,199,68,36,84,237,72,141,
+  68,36,80,128,126,252,252,235,15,133,244,247,141,139,233,137,41,199,65,4,237,
+  137,205,252,233,244,248,248,38,15,182,70,252,254,255,199,68,36,84,237,137,
+  68,36,80,255,252,242,15,42,192,252,242,15,17,68,36,80,255,72,141,68,36,80,
+  252,233,244,247,248,39,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,
+  141,44,252,234,248,2,139,76,36,96,137,145,233,137,252,234,73,137,192,137,
+  205,137,116,36,100,232,251,1,1,139,149,233,133,192,15,132,244,249,248,35,
+  15,182,78,252,253,72,139,40,72,137,44,202,139,6,15,182,204,15,182,232,131,
+  198,4,193,232,16,252,255,36,252,235,248,3,139,141,233,137,113,252,244,141,
+  177,233,41,214,139,105,252,248,184,237,252,233,244,30,248,40,137,68,36,80,
+  199,68,36,84,237,72,141,68,36,80,128,126,252,252,235,15,133,244,247,255,141,
+  139,233,137,41,199,65,4,237,137,205,252,233,244,248,248,41,15,182,70,252,
+  254,255,72,141,68,36,80,252,233,244,247,248,42,15,182,70,252,254,141,4,194,
+  248,1,15,182,110,252,255,141,44,252,234,248,2,139,76,36,96,137,145,233,137,
+  252,234,73,137,192,137,205,137,116,36,100,232,251,1,2,139,149,233,133,192,
+  15,132,244,249,15,182,78,252,253,72,139,44,202,72,137,40,248,43,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,139,141,
+  233,137,113,252,244,15,182,70,252,253,72,139,44,194,72,137,105,16,141,177,
+  233,41,214,139,105,252,248,184,237,252,233,244,30,248,44,139,108,36,96,137,
+  149,233,68,141,4,194,141,20,202,137,252,233,68,15,182,78,252,252,137,116,
+  36,100,232,251,1,3,248,3,139,149,233,255,131,252,248,1,15,135,244,45,248,
+  4,141,118,4,15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248,
+  6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,
+  46,131,198,4,129,120,253,4,239,15,130,244,5,252,233,244,6,248,47,129,120,
+  253,4,239,252,233,244,4,248,48,131,252,238,4,65,137,192,65,137,252,233,139,
+  108,36,96,137,149,233,255,137,202,137,252,233,137,116,36,100,232,251,1,4,
+  252,233,244,3,248,49,255,131,252,238,4,139,108,36,96,137,149,233,137,252,
+  233,139,86,252,252,137,116,36,100,232,251,1,5,252,233,244,3,255,248,50,255,
+  15,182,110,252,255,255,248,51,141,4,199,252,233,244,247,248,52,255,248,53,
+  141,4,199,141,44,252,234,149,252,233,244,248,248,54,141,4,194,137,197,252,
+  233,244,248,248,55,255,248,56,141,4,194,248,1,141,44,252,234,248,2,141,12,
+  202,65,137,232,65,137,193,15,182,70,252,252,137,68,36,32,139,108,36,96,137,
+  149,233,137,202,137,252,233,137,116,36,100,232,251,1,6,139,149,233,133,192,
+  15,132,244,43,248,45,137,193,41,208,137,113,252,244,141,176,233,184,237,252,
+  233,244,28,248,57,139,108,36,96,137,149,233,141,20,194,137,252,233,137,116,
+  36,100,232,251,1,7,139,149,233,255,133,192,15,133,244,45,15,183,70,252,254,
+  139,12,194,252,233,244,58,255,252,233,244,45,255,248,59,141,76,202,8,248,
+  29,137,76,36,84,137,68,36,80,131,252,233,8,139,108,36,96,137,149,233,137,
+  202,68,141,4,193,137,252,233,137,116,36,100,232,251,1,8,139,149,233,139,76,
+  36,84,139,68,36,80,139,105,252,248,131,192,1,57,215,15,132,244,60,137,202,
+  137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,198,4,252,
+  255,36,252,235,248,61,139,108,36,96,137,149,233,137,202,137,252,233,137,116,
+  36,100,232,251,1,9,139,149,233,139,70,252,252,15,182,204,15,182,232,193,232,
+  16,252,255,164,253,252,235,233,248,62,129,252,248,239,15,130,244,63,139,106,
+  4,129,252,253,239,15,131,244,63,139,114,252,252,137,68,36,84,137,106,252,
+  252,139,42,137,106,252,248,131,232,2,15,132,244,248,255,137,209,248,1,131,
+  193,8,72,139,41,72,137,105,252,248,131,232,1,15,133,244,1,248,2,139,68,36,
+  84,252,233,244,64,248,65,129,252,248,239,15,130,244,63,139,106,4,137,252,
+  233,193,252,249,15,131,252,249,252,254,15,132,244,249,184,237,252,247,213,
+  57,232,255,15,71,197,255,15,134,244,247,137,232,248,1,255,248,2,139,106,252,
+  248,139,132,253,197,233,139,114,252,252,199,66,252,252,237,137,66,252,248,
+  252,233,244,66,248,3,184,237,252,233,244,2,248,67,129,252,248,239,15,130,
+  244,63,139,106,4,139,114,252,252,129,252,253,239,15,133,244,252,248,1,139,
+  42,139,173,233,248,2,133,252,237,199,66,252,252,237,255,15,132,244,66,139,
+  131,233,199,66,252,252,237,137,106,252,248,139,141,233,35,136,233,105,201,
+  239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,
+  251,248,4,139,137,233,133,201,15,133,244,3,255,252,233,244,66,248,5,139,105,
+  4,129,252,253,239,15,132,244,66,139,1,137,106,252,252,137,66,252,248,252,
+  233,244,66,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,
+  254,129,252,253,239,15,134,244,253,189,237,252,233,244,254,248,7,255,189,
+  237,248,8,252,247,213,139,172,253,171,233,252,233,244,2,248,68,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,15,133,244,63,139,42,131,189,233,0,15,
+  133,244,63,129,122,253,12,239,15,133,244,63,139,66,8,137,133,233,139,114,
+  252,252,199,66,252,252,237,255,137,106,252,248,252,246,133,233,235,15,132,
+  244,247,128,165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,233,
+  244,66,248,69,129,252,248,239,15,130,244,63,129,122,253,4,239,15,133,244,
+  63,137,213,68,141,66,8,139,18,139,76,36,96,232,251,1,10,137,252,234,72,139,
+  40,139,114,252,252,72,137,106,252,248,252,233,244,66,248,70,255,129,252,248,
+  239,15,133,244,63,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,
+  71,248,1,15,135,244,63,255,15,131,244,63,255,252,242,15,16,2,252,233,244,
+  72,255,221,2,252,233,244,73,255,248,74,129,252,248,239,15,130,244,63,139,
+  114,252,252,129,122,253,4,239,15,133,244,249,139,2,248,2,199,66,252,252,237,
+  137,66,252,248,252,233,244,66,248,3,129,122,253,4,239,15,135,244,63,131,187,
+  233,0,15,133,244,63,139,171,233,59,171,233,255,15,130,244,247,232,244,75,
+  248,1,139,108,36,96,137,149,233,137,116,36,100,137,252,233,255,232,251,1,
+  11,255,232,251,1,12,255,139,149,233,252,233,244,2,248,76,129,252,248,239,
+  15,130,244,63,15,132,244,248,248,1,129,122,253,4,239,15,133,244,63,139,108,
+  36,96,137,149,233,137,149,233,139,114,252,252,68,141,66,8,139,18,137,252,
+  233,137,116,36,100,232,251,1,13,139,149,233,133,192,15,132,244,249,72,139,
+  106,8,72,139,66,16,72,137,106,252,248,72,137,2,248,77,184,237,255,252,233,
+  244,78,248,2,199,66,12,237,252,233,244,1,248,3,199,66,252,252,237,252,233,
+  244,66,248,79,129,252,248,239,15,130,244,63,139,42,129,122,253,4,239,15,133,
+  244,63,255,131,189,233,0,15,133,244,63,255,139,106,252,248,139,133,233,139,
+  114,252,252,199,66,252,252,237,137,66,252,248,199,66,12,237,184,237,252,233,
+  244,78,248,80,129,252,248,239,15,130,244,63,129,122,253,4,239,15,133,244,
+  63,129,122,253,12,239,255,139,114,252,252,255,139,66,8,131,192,1,199,66,252,
+  252,237,137,66,252,248,255,252,242,15,16,66,8,72,189,237,237,102,72,15,110,
+  205,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,252,248,255,139,
+  42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120,253,4,239,
+  15,132,244,81,72,139,40,72,137,42,252,233,244,77,248,2,131,189,233,0,15,132,
+  244,81,137,252,233,137,213,137,194,232,251,1,14,137,252,234,133,192,15,133,
+  244,1,248,81,184,237,252,233,244,78,248,82,255,139,106,252,248,139,133,233,
+  139,114,252,252,199,66,252,252,237,137,66,252,248,255,199,66,12,237,199,66,
+  8,0,0,0,0,255,15,87,192,252,242,15,17,66,8,255,217,252,238,221,90,8,255,184,
+  237,252,233,244,78,248,83,129,252,248,239,15,130,244,63,141,74,8,131,232,
+  1,190,237,248,1,15,182,171,233,193,252,237,235,131,229,1,1,252,238,252,233,
+  244,28,248,84,129,252,248,239,15,130,244,63,129,122,253,12,239,15,133,244,
+  63,255,139,106,4,137,106,12,199,66,4,237,139,42,139,114,8,137,106,8,137,50,
+  141,74,16,131,232,2,190,237,252,233,244,1,248,85,129,252,248,239,15,130,244,
+  63,139,42,139,114,252,252,137,116,36,100,137,108,36,80,129,122,253,4,239,
+  15,133,244,63,72,131,189,233,0,15,133,244,63,128,189,233,235,15,135,244,63,
+  139,141,233,15,132,244,247,255,59,141,233,15,132,244,63,248,1,141,116,193,
+  252,240,59,181,233,15,135,244,63,137,181,233,139,108,36,96,137,149,233,131,
+  194,8,137,149,233,141,108,194,232,72,41,252,245,57,206,15,132,244,249,248,
+  2,72,139,4,46,72,137,70,252,248,131,252,238,8,57,206,15,133,244,2,248,3,137,
+  202,139,76,36,80,232,244,25,199,131,233,237,255,139,108,36,96,139,116,36,
+  80,139,149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,
+  137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,
+  233,15,135,244,255,137,213,72,41,205,248,5,72,139,1,72,137,4,41,131,193,8,
+  57,252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,237,248,7,139,116,36,
+  100,137,68,36,84,72,199,193,252,248,252,255,252,255,252,255,252,247,198,237,
+  255,15,132,244,13,252,233,244,14,248,8,199,66,252,252,237,139,142,233,131,
+  252,233,8,137,142,233,72,139,1,72,137,2,184,237,252,233,244,7,248,9,139,76,
+  36,80,137,185,233,137,252,242,137,252,233,232,251,1,0,139,116,36,80,139,149,
+  233,252,233,244,4,248,86,139,106,252,248,139,173,233,139,114,252,252,137,
+  116,36,100,137,108,36,80,72,131,189,233,0,15,133,244,63,255,128,189,233,235,
+  15,135,244,63,139,141,233,15,132,244,247,59,141,233,15,132,244,63,248,1,141,
+  116,193,252,248,59,181,233,15,135,244,63,137,181,233,139,108,36,96,137,149,
+  233,137,149,233,141,108,194,252,240,72,41,252,245,57,206,15,132,244,249,248,
+  2,255,72,139,4,46,72,137,70,252,248,131,252,238,8,57,206,15,133,244,2,248,
+  3,137,202,139,76,36,80,232,244,25,199,131,233,237,139,108,36,96,139,116,36,
+  80,139,149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,
+  137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,
+  233,15,135,244,255,255,137,213,72,41,205,248,5,72,139,1,72,137,4,41,131,193,
+  8,57,252,249,15,133,244,5,248,6,141,70,1,248,7,139,116,36,100,137,68,36,84,
+  49,201,252,247,198,237,15,132,244,13,252,233,244,14,248,8,137,252,242,137,
+  252,233,232,251,1,15,248,9,139,76,36,80,137,185,233,137,252,242,137,252,233,
+  232,251,1,0,139,116,36,80,139,149,233,252,233,244,4,248,87,139,108,36,96,
+  72,252,247,133,233,237,15,132,244,63,255,137,149,233,141,68,194,252,248,137,
+  133,233,49,192,72,137,133,233,176,235,136,133,233,252,233,244,16,255,248,
+  71,255,248,73,139,114,252,252,221,90,252,248,252,233,244,66,255,248,88,129,
+  252,248,239,15,130,244,63,255,129,122,253,4,239,15,133,244,248,139,42,131,
+  252,253,0,15,137,244,71,252,247,221,15,136,244,247,248,89,248,71,139,114,
+  252,252,199,66,252,252,237,137,106,252,248,252,233,244,66,248,1,139,114,252,
+  252,199,66,252,252,0,0,224,65,199,66,252,248,0,0,0,0,252,233,244,66,248,2,
+  15,135,244,63,255,129,122,253,4,239,15,131,244,63,255,252,242,15,16,2,72,
+  184,237,237,102,72,15,110,200,15,84,193,248,72,139,114,252,252,252,242,15,
+  17,66,252,248,255,221,2,217,225,248,72,248,73,139,114,252,252,221,90,252,
+  248,255,248,66,184,237,248,78,137,68,36,84,248,64,252,247,198,237,15,133,
+  244,253,248,5,56,70,252,255,15,135,244,252,15,182,78,252,253,72,252,247,209,
+  141,20,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
+  235,248,6,199,68,194,252,244,237,131,192,1,252,233,244,5,248,7,72,199,193,
+  252,248,252,255,252,255,252,255,252,233,244,14,248,90,255,129,122,253,4,239,
+  15,133,244,247,139,42,252,233,244,71,248,1,15,135,244,63,255,252,242,15,16,
+  2,232,244,91,255,252,242,15,45,232,129,252,253,0,0,0,128,15,133,244,71,252,
+  242,15,42,205,102,15,46,193,15,138,244,72,15,132,244,71,255,221,2,232,244,
+  91,255,248,92,255,252,242,15,16,2,232,244,93,255,221,2,232,244,93,255,248,
+  94,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,
+  15,81,2,252,233,244,72,255,248,94,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,15,131,244,63,221,2,217,252,250,252,233,244,73,255,248,95,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,15,131,244,63,217,252,237,221,2,217,252,
+  241,252,233,244,73,248,96,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,217,252,236,221,2,217,252,241,252,233,244,73,248,97,129,252,
+  248,239,255,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,232,244,98,
+  252,233,244,73,248,99,129,252,248,239,15,130,244,63,129,122,253,4,239,15,
+  131,244,63,221,2,217,252,254,252,233,244,73,248,100,129,252,248,239,255,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,221,2,217,252,255,252,233,244,
+  73,248,101,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,
+  221,2,217,252,242,221,216,252,233,244,73,248,102,129,252,248,239,15,130,244,
+  63,255,129,122,253,4,239,15,131,244,63,221,2,217,192,216,200,217,232,222,
+  225,217,252,250,217,252,243,252,233,244,73,248,103,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,15,131,244,63,221,2,217,192,216,200,217,232,222,
+  225,217,252,250,217,201,217,252,243,252,233,244,73,248,104,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,255,221,2,217,232,217,252,243,
+  252,233,244,73,255,248,105,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,252,242,15,16,2,255,137,213,232,251,1,16,137,252,234,252,233,
+  244,72,255,248,106,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,252,242,15,16,2,255,137,213,232,251,1,17,137,252,234,252,233,244,72,
+  255,248,107,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,
+  252,242,15,16,2,255,137,213,232,251,1,18,137,252,234,252,233,244,72,248,108,
+  255,248,109,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,
+  252,242,15,16,2,139,106,252,248,252,242,15,89,133,233,252,233,244,72,255,
+  248,109,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,
+  2,139,106,252,248,220,141,233,252,233,244,73,255,248,110,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,2,221,66,8,217,252,243,252,233,244,73,248,111,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,255,15,131,244,
+  63,221,66,8,221,2,217,252,253,221,217,252,233,244,73,248,112,129,252,248,
+  239,15,130,244,63,139,106,4,129,252,253,239,15,131,244,63,139,114,252,252,
+  139,2,137,106,252,252,137,66,252,248,209,229,129,252,253,0,0,224,252,255,
+  15,131,244,249,9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,
+  0,15,130,244,250,248,1,193,252,237,21,41,197,255,252,242,15,42,197,255,137,
+  108,36,80,219,68,36,80,255,139,106,252,252,129,229,252,255,252,255,15,128,
+  129,205,0,0,224,63,137,106,252,252,248,2,255,252,242,15,17,2,255,221,26,255,
+  184,237,252,233,244,78,248,3,255,15,87,192,252,233,244,2,255,217,252,238,
+  252,233,244,2,255,248,4,255,252,242,15,16,2,72,189,237,237,102,72,15,110,
+  205,252,242,15,89,193,252,242,15,17,66,252,248,255,221,2,199,68,36,80,0,0,
+  128,90,216,76,36,80,221,90,252,248,255,139,106,252,252,184,52,4,0,0,209,229,
+  252,233,244,1,255,248,113,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,252,242,15,16,2,255,248,113,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,221,2,255,139,106,4,139,114,252,252,209,229,129,
+  252,253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,244,114,252,242,
+  15,92,224,248,1,252,242,15,17,66,252,248,252,242,15,17,34,255,217,192,232,
+  244,114,220,252,233,248,1,221,90,252,248,221,26,255,139,66,252,252,139,106,
+  4,49,232,15,136,244,249,248,2,184,237,252,233,244,78,248,3,129,252,245,0,
+  0,0,128,137,106,4,252,233,244,2,248,4,255,15,87,228,252,233,244,1,255,217,
+  252,238,217,201,252,233,244,1,255,248,115,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,63,221,66,8,221,
+  2,248,1,217,252,248,223,224,158,15,138,244,1,221,217,252,233,244,73,255,248,
+  116,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,
+  253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,74,8,232,244,117,252,
+  233,244,72,255,248,116,129,252,248,239,15,130,244,63,129,122,253,4,239,15,
+  131,244,63,129,122,253,12,239,15,131,244,63,221,2,221,66,8,232,244,117,252,
+  233,244,73,255,248,118,185,2,0,0,0,129,122,253,4,239,255,15,133,244,250,139,
+  42,248,1,57,193,15,131,244,71,129,124,253,202,252,252,239,15,133,244,249,
+  59,108,202,252,248,15,79,108,202,252,248,131,193,1,252,233,244,1,248,3,15,
+  135,244,63,255,252,233,244,252,248,4,15,135,244,63,255,252,242,15,16,2,248,
+  5,57,193,15,131,244,72,129,124,253,202,252,252,239,255,15,130,244,252,15,
+  135,244,63,252,242,15,42,76,202,252,248,252,233,244,253,255,248,6,252,242,
+  15,16,76,202,252,248,248,7,252,242,15,93,193,131,193,1,252,233,244,5,255,
+  248,119,185,2,0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,
+  193,15,131,244,71,129,124,253,202,252,252,239,15,133,244,249,59,108,202,252,
+  248,15,76,108,202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,63,255,
+  248,6,252,242,15,16,76,202,252,248,248,7,252,242,15,95,193,131,193,1,252,
+  233,244,5,255,248,9,221,216,252,233,244,63,255,248,120,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,133,244,63,139,42,255,139,173,233,252,233,
+  244,71,255,252,242,15,42,133,233,252,233,244,72,255,219,133,233,252,233,244,
+  73,255,248,121,129,252,248,239,15,133,244,63,129,122,253,4,239,15,133,244,
+  63,139,42,139,114,252,252,131,189,233,1,15,130,244,81,15,182,173,233,255,
+  252,242,15,42,197,252,233,244,72,255,137,108,36,80,219,68,36,80,252,233,244,
+  73,255,248,122,139,171,233,59,171,233,15,130,244,247,232,244,75,248,1,129,
+  252,248,239,15,133,244,63,129,122,253,4,239,255,15,133,244,63,139,42,129,
+  252,253,252,255,0,0,0,15,135,244,63,137,108,36,84,255,15,131,244,63,252,242,
+  15,44,42,129,252,253,252,255,0,0,0,15,135,244,63,137,108,36,84,255,15,131,
+  244,63,221,2,219,92,36,84,129,124,36,84,252,255,0,0,0,15,135,244,63,255,199,
+  68,36,32,1,0,0,0,72,141,68,36,84,248,123,139,108,36,96,137,149,233,68,139,
+  68,36,32,72,137,194,137,252,233,137,116,36,100,232,251,1,19,139,149,233,139,
+  114,252,252,199,66,252,252,237,137,66,252,248,252,233,244,66,248,124,139,
+  171,233,59,171,233,15,130,244,247,232,244,75,248,1,199,68,36,84,252,255,252,
+  255,252,255,252,255,129,252,248,239,15,130,244,63,15,134,244,247,129,122,
+  253,20,239,255,15,133,244,63,139,106,16,137,108,36,84,255,15,131,244,63,252,
+  242,15,44,106,16,137,108,36,84,255,15,131,244,63,221,66,16,219,92,36,84,255,
+  248,1,129,122,253,4,239,15,133,244,63,129,122,253,12,239,255,139,42,137,108,
+  36,32,139,173,233,255,139,74,8,255,252,242,15,44,74,8,255,139,68,36,84,57,
+  197,15,130,244,251,248,2,133,201,15,142,244,253,248,3,139,108,36,32,41,200,
+  15,140,244,125,141,172,253,13,233,131,192,1,248,4,137,68,36,32,137,232,252,
+  233,244,123,248,5,15,140,244,252,141,68,40,1,252,233,244,2,248,6,137,232,
+  252,233,244,2,248,7,255,15,132,244,254,1,252,233,131,193,1,15,143,244,3,248,
+  8,185,1,0,0,0,252,233,244,3,248,125,49,192,252,233,244,4,248,126,129,252,
+  248,239,15,130,244,63,139,171,233,59,171,233,15,130,244,247,232,244,75,248,
+  1,255,129,122,253,4,239,15,133,244,63,129,122,253,12,239,139,42,255,15,133,
+  244,63,139,66,8,255,15,131,244,63,252,242,15,44,66,8,255,15,131,244,63,221,
+  66,8,219,92,36,84,139,68,36,84,255,133,192,15,142,244,125,131,189,233,1,15,
+  130,244,125,15,133,244,127,57,131,233,15,130,244,127,15,182,141,233,139,171,
+  233,137,68,36,32,248,1,136,77,0,131,197,1,131,232,1,15,133,244,1,139,131,
+  233,252,233,244,123,248,128,129,252,248,239,255,15,130,244,63,139,171,233,
+  59,171,233,15,130,244,247,232,244,75,248,1,129,122,253,4,239,15,133,244,63,
+  139,42,139,133,233,133,192,15,132,244,125,57,131,233,15,130,244,129,129,197,
+  239,137,116,36,84,137,68,36,32,139,179,233,248,1,255,15,182,77,0,131,197,
+  1,131,232,1,136,12,6,15,133,244,1,137,252,240,139,116,36,84,252,233,244,123,
+  248,130,129,252,248,239,15,130,244,63,139,171,233,59,171,233,15,130,244,247,
+  232,244,75,248,1,129,122,253,4,239,15,133,244,63,139,42,139,133,233,57,131,
+  233,255,15,130,244,129,129,197,239,137,116,36,84,137,68,36,32,139,179,233,
+  252,233,244,249,248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,
+  249,90,15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,
+  244,1,137,252,240,139,116,36,84,252,233,244,123,248,131,129,252,248,239,15,
+  130,244,63,255,139,171,233,59,171,233,15,130,244,247,232,244,75,248,1,129,
+  122,253,4,239,15,133,244,63,139,42,139,133,233,57,131,233,15,130,244,129,
   129,197,239,137,116,36,84,137,68,36,32,139,179,233,252,233,244,249,248,1,
-  15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244,248,
-  131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,
-  116,36,84,252,233,244,122,248,130,129,252,248,239,15,130,244,62,255,139,171,
-  233,59,171,233,15,130,244,247,232,244,74,248,1,129,122,253,4,239,15,133,244,
-  62,139,42,139,133,233,57,131,233,15,130,244,128,129,197,239,137,116,36,84,
-  137,68,36,32,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252,249,
-  97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,252,241,32,248,2,
-  136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,84,252,233,244,
-  122,248,131,129,252,248,239,15,130,244,62,129,122,253,4,239,15,133,244,62,
-  137,213,139,10,232,251,1,20,137,252,234,255,137,197,252,233,244,70,255,252,
-  242,15,42,192,252,233,244,71,255,248,132,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,255,15,133,244,247,139,42,252,233,244,88,248,1,15,135,244,62,
-  255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,252,242,15,88,193,102,
-  15,126,197,255,252,233,244,88,255,248,133,129,252,248,239,15,130,244,62,255,
-  72,189,237,237,102,72,15,110,205,255,199,68,36,80,0,0,192,89,255,15,133,244,
-  247,139,42,252,233,244,248,248,1,15,135,244,62,255,252,242,15,16,2,252,242,
-  15,88,193,102,15,126,197,255,248,2,137,68,36,84,141,68,194,252,240,248,1,
-  57,208,15,134,244,88,129,120,253,4,239,255,15,133,244,248,35,40,131,232,8,
-  252,233,244,1,248,2,15,135,244,134,255,15,131,244,134,255,252,242,15,16,0,
-  252,242,15,88,193,102,15,126,193,33,205,255,131,232,8,252,233,244,1,248,135,
-  129,252,248,239,15,130,244,62,255,15,133,244,248,11,40,131,232,8,252,233,
-  244,1,248,2,15,135,244,134,255,252,242,15,16,0,252,242,15,88,193,102,15,126,
-  193,9,205,255,131,232,8,252,233,244,1,248,136,129,252,248,239,15,130,244,
-  62,255,15,133,244,248,51,40,131,232,8,252,233,244,1,248,2,15,135,244,134,
-  255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,49,205,255,131,232,8,
-  252,233,244,1,248,137,129,252,248,239,15,130,244,62,129,122,253,4,239,255,
-  248,2,15,205,252,233,244,88,248,138,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,255,248,2,252,247,213,255,248,88,252,242,15,42,197,252,233,244,
-  71,255,248,134,139,68,36,84,252,233,244,62,255,248,139,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,255,248,2,129,122,253,12,239,15,133,244,62,139,
-  74,8,255,248,139,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,129,122,253,12,239,15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,72,
-  189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,88,202,102,15,
-  126,197,102,15,126,201,255,211,229,252,233,244,88,255,248,140,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,255,248,140,129,252,248,239,15,130,244,
-  62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,
-  15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,
-  194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,211,252,237,252,233,
-  244,88,255,248,141,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,
-  141,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,
-  253,12,239,15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,
-  102,72,15,110,213,252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,
-  15,126,201,255,211,252,253,252,233,244,88,255,248,142,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,255,248,142,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,15,16,
+  15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122,15,135,244,
+  248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,
+  139,116,36,84,252,233,244,123,248,132,129,252,248,239,15,130,244,63,129,122,
+  253,4,239,15,133,244,63,137,213,139,10,232,251,1,20,137,252,234,255,137,197,
+  252,233,244,71,255,252,242,15,42,192,252,233,244,72,255,248,133,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,
+  89,248,1,15,135,244,63,255,252,242,15,16,2,72,189,237,237,102,72,15,110,205,
+  252,242,15,88,193,102,15,126,197,255,252,233,244,89,255,248,134,129,252,248,
+  239,15,130,244,63,255,72,189,237,237,102,72,15,110,205,255,199,68,36,80,0,
+  0,192,89,255,15,133,244,247,139,42,252,233,244,248,248,1,15,135,244,63,255,
+  252,242,15,16,2,252,242,15,88,193,102,15,126,197,255,248,2,137,68,36,84,141,
+  68,194,252,240,248,1,57,208,15,134,244,89,129,120,253,4,239,255,15,133,244,
+  248,35,40,131,232,8,252,233,244,1,248,2,15,135,244,135,255,15,131,244,135,
+  255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,33,205,255,131,232,8,
+  252,233,244,1,248,136,129,252,248,239,15,130,244,63,255,15,133,244,248,11,
+  40,131,232,8,252,233,244,1,248,2,15,135,244,135,255,252,242,15,16,0,252,242,
+  15,88,193,102,15,126,193,9,205,255,131,232,8,252,233,244,1,248,137,129,252,
+  248,239,15,130,244,63,255,15,133,244,248,51,40,131,232,8,252,233,244,1,248,
+  2,15,135,244,135,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,49,
+  205,255,131,232,8,252,233,244,1,248,138,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,255,248,2,15,205,252,233,244,89,248,139,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,255,248,2,252,247,213,255,248,89,252,242,15,
+  42,197,252,233,244,72,255,248,135,139,68,36,84,252,233,244,63,255,248,140,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,2,129,122,253,12,
+  239,15,133,244,63,139,74,8,255,248,140,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,
   2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,
-  242,15,88,202,102,15,126,197,102,15,126,201,255,211,197,252,233,244,88,255,
-  248,143,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,143,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,
-  15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,
+  242,15,88,202,102,15,126,197,102,15,126,201,255,211,229,252,233,244,89,255,
+  248,141,129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,141,129,252,
+  248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,
+  15,131,244,63,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,
   110,213,252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,
-  255,211,205,252,233,244,88,248,126,184,237,252,233,244,62,248,128,184,237,
-  248,62,139,108,36,96,139,114,252,252,137,116,36,100,137,149,233,141,68,194,
-  252,248,141,136,233,137,133,233,139,66,252,248,59,141,233,15,135,244,251,
-  137,252,233,252,255,144,233,139,149,233,133,192,15,143,244,77,248,1,255,139,
-  141,233,41,209,193,252,233,3,133,192,141,65,1,139,106,252,248,15,133,244,
-  32,139,181,233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,252,
-  235,248,32,137,209,252,247,198,237,15,133,244,249,15,182,110,252,253,72,252,
-  247,213,141,20,252,234,252,233,244,28,248,3,137,252,245,131,229,252,248,41,
-  252,234,252,233,244,28,248,5,186,237,137,252,233,232,251,1,0,139,149,233,
-  49,192,252,233,244,1,248,74,93,72,137,108,36,32,139,108,36,96,137,116,36,
-  100,137,149,233,255,141,68,194,252,248,137,252,233,137,133,233,232,251,1,
-  21,139,149,233,139,133,233,41,208,193,232,3,131,192,1,72,139,108,36,32,85,
-  195,248,144,255,15,182,131,233,168,235,15,133,244,251,168,235,15,133,244,
-  247,168,235,15,132,244,247,252,255,139,233,252,233,244,247,255,248,145,15,
-  182,131,233,168,235,15,133,244,251,252,233,244,247,248,146,15,182,131,233,
-  168,235,15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,
-  247,168,235,15,132,244,251,248,1,255,139,108,36,96,137,149,233,137,252,242,
-  137,252,233,232,251,1,22,248,3,139,149,233,248,4,15,182,78,252,253,248,5,
-  15,182,110,252,252,15,183,70,252,254,252,255,164,253,252,235,233,248,147,
-  131,198,4,139,77,232,137,76,36,84,252,233,244,4,248,148,255,139,106,252,248,
-  139,173,233,15,182,133,233,141,4,194,139,108,36,96,137,149,233,137,133,233,
-  137,252,242,141,139,233,72,137,171,233,137,116,36,100,232,251,1,23,252,233,
-  244,3,255,248,149,137,116,36,100,255,248,150,255,137,116,36,100,131,206,1,
-  248,1,255,141,68,194,252,248,139,108,36,96,137,149,233,137,133,233,137,252,
-  242,137,252,233,232,251,1,24,199,68,36,100,0,0,0,0,255,131,230,252,254,255,
-  139,149,233,72,137,193,139,133,233,41,208,72,137,205,15,182,78,252,253,193,
-  232,3,131,192,1,252,255,229,248,151,255,65,85,65,84,65,83,65,82,65,81,65,
-  80,87,86,85,72,141,108,36,88,85,83,82,81,80,15,182,69,252,248,138,101,252,
-  240,76,137,125,252,248,76,137,117,252,240,139,93,0,139,139,233,199,131,233,
-  237,137,131,233,137,139,233,72,129,252,236,239,72,131,197,128,252,242,68,
-  15,17,125,252,248,252,242,68,15,17,117,252,240,252,242,68,15,17,109,232,252,
-  242,68,15,17,101,224,252,242,68,15,17,93,216,252,242,68,15,17,85,208,252,
-  242,68,15,17,77,200,252,242,68,15,17,69,192,252,242,15,17,125,184,252,242,
-  15,17,117,176,252,242,15,17,109,168,252,242,15,17,101,160,252,242,15,17,93,
-  152,252,242,15,17,85,144,252,242,15,17,77,136,252,242,15,17,69,128,139,171,
-  233,139,147,233,72,137,171,233,199,131,233,0,0,0,0,137,149,233,72,141,148,
-  253,36,233,141,139,233,232,251,1,25,72,139,141,233,72,129,225,239,137,169,
-  233,139,149,233,139,177,233,252,233,244,247,255,248,152,255,72,141,140,253,
-  36,233,248,1,102,68,15,111,185,233,102,68,15,111,177,233,102,68,15,111,169,
-  233,102,68,15,111,161,233,102,68,15,111,153,233,102,68,15,111,145,233,102,
-  68,15,111,137,233,102,68,15,111,129,233,102,15,111,185,233,72,137,204,102,
-  15,111,49,76,139,124,36,16,76,139,116,36,24,76,139,108,36,32,76,139,100,36,
-  80,133,192,15,136,244,249,137,68,36,84,139,122,252,248,139,191,233,139,191,
-  233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,
-  4,193,232,16,129,252,253,239,15,130,244,248,255,139,68,36,84,248,2,252,255,
-  36,252,235,248,3,252,247,216,137,252,233,137,194,232,251,1,26,255,248,90,
-  255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252,
-  247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,
-  255,248,153,72,184,237,237,102,72,15,110,208,72,184,237,237,102,72,15,110,
-  216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,252,
-  242,15,88,203,252,242,15,92,203,102,15,86,202,72,184,237,237,102,72,15,110,
-  208,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1,
-  195,248,92,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37,
-  252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,
-  68,36,8,195,255,248,154,72,184,237,237,102,72,15,110,208,72,184,237,237,102,
-  72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,
-  85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,72,184,237,237,102,
-  72,15,110,208,252,242,15,194,193,6,102,15,84,194,252,242,15,92,200,15,40,
-  193,248,1,195,248,113,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,
-  36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,
-  255,248,155,72,184,237,237,102,72,15,110,208,72,184,237,237,102,72,15,110,
-  216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,15,
-  40,193,252,242,15,88,203,252,242,15,92,203,72,184,237,237,102,72,15,110,216,
-  252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,86,202,15,40,
-  193,248,1,195,248,156,255,15,40,232,252,242,15,94,193,72,184,237,237,102,
-  72,15,110,208,72,184,237,237,102,72,15,110,216,15,40,224,102,15,84,226,102,
-  15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,
-  102,15,86,226,72,184,237,237,102,72,15,110,208,252,242,15,194,196,1,102,15,
-  84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,15,92,193,195,
-  248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,255,217,193,216,252,
-  241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137,
-  68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,233,195,255,
-  248,97,217,252,234,222,201,248,157,217,84,36,8,129,124,36,8,0,0,128,127,15,
-  132,244,247,129,124,36,8,0,0,128,252,255,15,132,244,248,248,158,217,192,217,
-  252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,217,
-  248,1,195,248,2,221,216,217,252,238,195,255,248,116,255,248,159,252,242,15,
-  45,193,252,242,15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,
-  160,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,
-  15,89,192,209,232,252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248,
-  3,252,242,15,89,192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89,
-  200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,6,15,132,244,5,15,
-  130,244,253,252,247,216,232,244,1,72,184,237,237,102,72,15,110,200,252,242,
-  15,94,200,15,40,193,195,248,7,72,184,237,237,102,72,15,110,192,195,248,8,
-  102,72,15,126,200,72,209,224,72,193,192,12,72,61,252,254,15,0,0,15,132,244,
-  248,102,72,15,126,192,72,209,224,15,132,244,250,255,72,193,192,12,72,61,252,
-  254,15,0,0,15,132,244,251,252,242,15,17,76,36,16,252,242,15,17,68,36,8,221,
-  68,36,16,221,68,36,8,217,252,241,217,192,217,252,252,220,252,233,217,201,
-  217,252,240,217,232,222,193,217,252,253,221,217,221,92,36,8,252,242,15,16,
-  68,36,8,195,248,9,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,
-  247,15,40,193,248,1,195,248,2,72,184,237,237,102,72,15,110,208,102,15,84,
-  194,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,1,102,15,80,
-  193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,72,184,237,237,
-  255,102,72,15,110,192,195,248,4,102,15,80,193,133,192,15,133,244,3,15,87,
-  192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,248,161,255,
-  131,252,250,1,15,130,244,90,15,132,244,92,131,252,250,3,15,130,244,113,15,
-  135,244,248,252,242,15,81,192,195,248,2,252,242,15,17,68,36,8,221,68,36,8,
-  131,252,250,5,15,135,244,248,88,15,132,244,247,232,244,97,80,252,233,244,
-  253,248,1,232,244,157,255,80,252,233,244,253,248,2,131,252,250,7,15,132,244,
-  247,15,135,244,248,217,252,237,217,201,217,252,241,252,233,244,253,248,1,
-  217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,250,9,15,132,244,
-  247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,244,253,248,1,
-  255,217,252,254,252,233,244,253,248,2,131,252,250,11,15,132,244,247,15,135,
-  244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,216,248,7,221,92,
-  36,8,252,242,15,16,68,36,8,195,255,139,84,36,12,221,68,36,4,131,252,250,1,
-  15,130,244,90,15,132,244,92,131,252,250,3,15,130,244,113,15,135,244,248,217,
-  252,250,195,248,2,131,252,250,5,15,130,244,97,15,132,244,157,131,252,250,
-  7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,
-  217,232,217,201,217,252,241,195,248,2,131,252,250,9,15,132,244,247,255,15,
-  135,244,248,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,
-  2,131,252,250,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,
-  252,242,221,216,195,255,248,9,204,255,248,162,255,65,131,252,248,1,15,132,
-  244,247,15,135,244,248,252,242,15,88,193,195,248,1,252,242,15,92,193,195,
-  248,2,65,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,89,193,195,
-  248,1,252,242,15,94,193,195,248,2,65,131,252,248,5,15,130,244,156,15,132,
-  244,116,65,131,252,248,7,15,132,244,247,15,135,244,248,72,184,237,237,255,
-  102,72,15,110,200,15,87,193,195,248,1,72,184,237,237,102,72,15,110,200,15,
-  84,193,195,248,2,65,131,252,248,9,15,135,244,248,252,242,15,17,68,36,8,252,
-  242,15,17,76,36,16,221,68,36,8,221,68,36,16,15,132,244,247,217,252,243,248,
-  7,221,92,36,8,252,242,15,16,68,36,8,195,248,1,217,201,217,252,253,221,217,
-  252,233,244,7,248,2,65,131,252,248,11,15,132,244,247,15,135,244,255,252,242,
-  15,93,193,195,248,1,252,242,15,95,193,195,248,9,204,255,139,68,36,20,221,
-  68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193,
-  195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248,
-  222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,156,15,132,
-  244,116,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195,
-  248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,
-  217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,
-  15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219,
-  252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244,
-  248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133,
-  244,248,217,201,248,2,221,216,195,255,248,163,137,200,86,72,137,214,83,15,
-  162,137,6,137,94,4,137,78,8,137,86,12,91,94,195,248,164,255,204,248,165,255,
-  85,72,137,229,83,72,137,203,139,131,233,72,41,196,255,15,182,139,233,131,
-  252,233,1,15,136,244,248,248,1,72,139,132,253,203,233,72,137,132,253,204,
-  233,131,252,233,1,15,137,244,1,248,2,15,182,131,233,72,139,139,233,72,139,
-  147,233,76,139,131,233,76,139,139,233,133,192,15,132,244,251,15,40,131,233,
-  15,40,139,233,15,40,147,233,15,40,155,233,248,5,255,252,255,147,233,72,137,
-  131,233,15,41,131,233,255,72,139,93,252,248,201,195,255,249,255,129,124,253,
-  202,4,239,15,133,244,253,129,124,253,194,4,239,15,133,244,254,139,44,202,
-  131,198,4,59,44,194,255,15,141,244,255,255,15,140,244,255,255,15,143,244,
-  255,255,15,142,244,255,255,248,6,15,183,70,252,254,141,180,253,134,233,248,
-  9,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,
-  7,15,135,244,43,129,124,253,194,4,239,15,130,244,247,15,133,244,43,255,252,
-  242,15,42,4,194,252,233,244,248,255,221,4,202,219,4,194,252,233,244,249,255,
-  248,8,15,135,244,43,255,252,242,15,42,12,202,252,242,15,16,4,194,131,198,
-  4,102,15,46,193,255,15,134,244,9,255,15,135,244,9,255,15,130,244,9,255,15,
-  131,244,9,255,252,233,244,6,255,219,4,202,252,233,244,248,255,129,124,253,
-  202,4,239,15,131,244,43,129,124,253,194,4,239,15,131,244,43,255,248,1,252,
-  242,15,16,4,194,248,2,131,198,4,102,15,46,4,202,248,3,255,248,1,221,4,202,
-  248,2,221,4,194,248,3,131,198,4,255,223,252,233,221,216,255,218,252,233,223,
-  224,158,255,15,134,244,247,255,15,135,244,247,255,15,130,244,247,255,15,131,
-  244,247,255,15,183,70,252,254,141,180,253,134,233,248,1,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,108,194,4,131,
-  198,4,255,129,252,253,239,15,133,244,253,129,124,253,202,4,239,15,133,244,
-  254,139,44,194,59,44,202,255,15,133,244,255,255,15,132,244,255,255,15,183,
-  70,252,254,141,180,253,134,233,248,9,139,6,15,182,204,15,182,232,131,198,
-  4,193,232,16,252,255,36,252,235,248,7,15,135,244,251,129,124,253,202,4,239,
-  15,130,244,247,15,133,244,251,255,252,242,15,42,4,202,255,219,4,202,255,252,
-  233,244,248,248,8,15,135,244,251,255,252,242,15,42,4,194,102,15,46,4,202,
-  255,219,4,194,221,4,202,255,252,233,244,250,255,129,252,253,239,15,131,244,
-  251,129,124,253,202,4,239,15,131,244,251,255,248,1,252,242,15,16,4,202,248,
-  2,102,15,46,4,194,248,4,255,248,1,221,4,202,248,2,221,4,194,248,4,255,15,
-  138,244,248,15,133,244,248,255,15,138,244,248,15,132,244,247,255,248,1,15,
-  183,70,252,254,141,180,253,134,233,248,2,255,248,2,15,183,70,252,254,141,
-  180,253,134,233,248,1,255,252,233,244,9,255,129,252,253,239,15,132,244,48,
-  129,124,253,202,4,239,15,132,244,48,255,57,108,202,4,15,133,244,2,129,252,
-  253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129,252,253,
-  239,15,135,244,2,129,252,253,239,15,130,244,2,139,169,233,133,252,237,15,
-  132,244,2,252,246,133,233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,
-  255,252,233,244,47,255,248,3,129,252,253,239,255,15,133,244,9,255,252,233,
-  244,48,255,72,252,247,208,139,108,202,4,131,198,4,129,252,253,239,15,133,
-  244,249,139,12,202,59,12,135,255,139,108,202,4,131,198,4,255,129,252,253,
-  239,15,133,244,253,129,124,253,199,4,239,15,133,244,254,139,44,199,59,44,
-  202,255,15,183,70,252,254,141,180,253,134,233,248,9,139,6,15,182,204,15,182,
-  232,131,198,4,193,232,16,252,255,36,252,235,248,7,15,135,244,249,129,124,
-  253,199,4,239,15,130,244,247,255,252,242,15,42,4,199,255,219,4,199,255,252,
-  233,244,248,248,8,255,252,242,15,42,4,202,102,15,46,4,199,255,219,4,202,221,
-  4,199,255,129,252,253,239,15,131,244,249,255,248,1,252,242,15,16,4,199,248,
-  2,102,15,46,4,202,248,4,255,248,1,221,4,199,248,2,221,4,202,248,4,255,72,
-  252,247,208,139,108,202,4,131,198,4,57,197,255,15,133,244,249,15,183,70,252,
-  254,141,180,253,134,233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,
-  16,252,255,36,252,235,248,3,129,252,253,239,15,133,244,2,252,233,244,48,255,
-  15,132,244,248,129,252,253,239,15,132,244,48,15,183,70,252,254,141,180,253,
-  134,233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
-  252,235,255,139,108,194,4,131,198,4,129,252,253,239,255,137,108,202,4,139,
-  44,194,137,44,202,255,72,139,44,194,72,137,44,202,139,6,15,182,204,15,182,
-  232,131,198,4,193,232,16,252,255,36,252,235,255,49,252,237,129,124,253,194,
-  4,239,129,213,239,137,108,202,4,139,6,15,182,204,15,182,232,131,198,4,193,
-  232,16,252,255,36,252,235,255,129,124,253,194,4,239,15,133,244,251,139,44,
-  194,252,247,221,15,128,244,250,199,68,202,4,237,137,44,202,248,9,139,6,15,
-  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,4,199,68,202,
-  4,0,0,224,65,199,4,202,0,0,0,0,252,233,244,9,248,5,15,135,244,53,255,129,
-  124,253,194,4,239,15,131,244,53,255,252,242,15,16,4,194,72,184,237,237,102,
-  72,15,110,200,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,
-  202,255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,139,128,233,248,
-  1,199,68,202,4,237,137,4,202,255,15,87,192,252,242,15,42,128,233,248,1,252,
-  242,15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,6,15,182,204,15,
-  182,232,131,198,4,193,232,16,252,255,36,252,235,248,2,129,124,253,194,4,239,
-  15,133,244,56,139,12,194,255,139,169,233,131,252,253,0,15,133,244,255,248,
-  3,255,248,57,137,213,232,251,1,20,255,252,242,15,42,192,255,137,252,234,15,
-  182,78,252,253,252,233,244,1,255,248,9,252,246,133,233,235,15,133,244,3,252,
-  233,244,56,255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,239,15,
-  133,244,50,129,124,253,199,4,239,15,133,244,50,139,44,252,234,3,44,199,15,
-  128,244,49,255,129,124,253,252,234,4,239,15,133,244,52,129,124,253,199,4,
-  239,15,133,244,52,139,4,199,3,4,252,234,15,128,244,51,255,129,124,253,252,
-  234,4,239,15,133,244,55,129,124,253,194,4,239,15,133,244,55,139,44,252,234,
-  3,44,194,15,128,244,54,255,199,68,202,4,237,255,129,124,253,252,234,4,239,
-  15,131,244,50,255,129,124,253,199,4,239,15,131,244,50,255,252,242,15,16,4,
-  252,234,252,242,15,88,4,199,255,221,4,252,234,220,4,199,255,129,124,253,252,
-  234,4,239,15,131,244,52,255,129,124,253,199,4,239,15,131,244,52,255,252,242,
-  15,16,4,199,252,242,15,88,4,252,234,255,221,4,199,220,4,252,234,255,129,124,
-  253,252,234,4,239,15,131,244,55,129,124,253,194,4,239,15,131,244,55,255,252,
-  242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,129,
-  124,253,252,234,4,239,15,133,244,50,129,124,253,199,4,239,15,133,244,50,139,
-  44,252,234,43,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,
-  52,129,124,253,199,4,239,15,133,244,52,139,4,199,43,4,252,234,15,128,244,
-  51,255,129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,15,133,
-  244,55,139,44,252,234,43,44,194,15,128,244,54,255,252,242,15,16,4,252,234,
-  252,242,15,92,4,199,255,221,4,252,234,220,36,199,255,252,242,15,16,4,199,
-  252,242,15,92,4,252,234,255,221,4,199,220,36,252,234,255,252,242,15,16,4,
-  252,234,252,242,15,92,4,194,255,221,4,252,234,220,36,194,255,129,124,253,
-  252,234,4,239,15,133,244,50,129,124,253,199,4,239,15,133,244,50,139,44,252,
-  234,15,175,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,
-  52,129,124,253,199,4,239,15,133,244,52,139,4,199,15,175,4,252,234,15,128,
-  244,51,255,129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,
-  15,133,244,55,139,44,252,234,15,175,44,194,15,128,244,54,255,252,242,15,16,
-  4,252,234,252,242,15,89,4,199,255,221,4,252,234,220,12,199,255,252,242,15,
-  16,4,199,252,242,15,89,4,252,234,255,221,4,199,220,12,252,234,255,252,242,
-  15,16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,194,255,252,
-  242,15,16,4,252,234,252,242,15,94,4,199,255,221,4,252,234,220,52,199,255,
-  252,242,15,16,4,199,252,242,15,94,4,252,234,255,221,4,199,220,52,252,234,
-  255,252,242,15,16,4,252,234,252,242,15,94,4,194,255,221,4,252,234,220,52,
-  194,255,252,242,15,16,4,252,234,252,242,15,16,12,199,255,221,4,252,234,221,
-  4,199,255,252,242,15,16,4,199,252,242,15,16,12,252,234,255,221,4,199,221,
-  4,252,234,255,252,242,15,16,4,252,234,252,242,15,16,12,194,255,221,4,252,
-  234,221,4,194,255,248,166,232,244,156,255,252,233,244,166,255,232,244,116,
-  255,15,182,252,236,15,182,192,139,76,36,96,137,145,233,141,20,194,65,137,
-  192,65,41,232,248,35,137,205,137,116,36,100,232,251,1,27,139,149,233,133,
-  192,15,133,244,44,15,182,110,252,255,15,182,78,252,253,72,139,4,252,234,72,
-  137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
-  235,255,72,252,247,208,139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,
-  204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,15,191,192,199,
-  68,202,4,237,137,4,202,255,15,191,192,252,242,15,42,192,252,242,15,17,4,202,
-  255,223,70,252,254,221,28,202,255,252,242,15,16,4,199,252,242,15,17,4,202,
-  255,221,4,199,221,28,202,255,72,252,247,208,137,68,202,4,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,141,76,202,12,141,
-  68,194,4,189,237,137,105,252,248,248,1,137,41,131,193,8,57,193,15,134,244,
-  1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,
-  139,106,252,248,139,172,253,133,233,139,173,233,72,139,69,0,72,137,4,202,
-  139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,
-  106,252,248,139,172,253,141,233,128,189,233,0,139,173,233,139,12,194,139,
-  68,194,4,137,77,0,137,69,4,15,132,244,247,252,246,133,233,235,15,133,244,
-  248,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
-  235,248,2,129,232,239,129,252,248,239,15,134,244,1,252,246,129,233,235,15,
-  132,244,1,135,213,141,139,233,255,232,251,1,28,137,252,234,252,233,244,1,
-  255,72,252,247,208,139,106,252,248,139,172,253,141,233,139,12,135,139,133,
-  233,137,8,199,64,4,237,252,246,133,233,235,15,133,244,248,248,1,139,6,15,
-  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,2,252,246,
-  129,233,235,15,132,244,1,128,189,233,0,15,132,244,1,137,213,137,194,141,139,
-  233,232,251,1,28,137,252,234,252,233,244,1,255,139,106,252,248,255,252,242,
-  15,16,4,199,255,139,172,253,141,233,139,141,233,255,252,242,15,17,1,255,221,
-  25,255,72,252,247,208,139,106,252,248,139,172,253,141,233,139,141,233,137,
-  65,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
-  255,141,180,253,134,233,139,108,36,96,131,189,233,0,15,132,244,247,137,149,
-  233,141,20,202,137,252,233,232,251,1,29,139,149,233,248,1,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,72,252,247,208,139,
-  108,36,96,137,149,233,68,139,66,252,248,139,20,135,137,252,233,137,116,36,
-  100,232,251,1,30,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,
-  139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,
-  108,36,96,137,149,233,139,139,233,59,139,233,137,116,36,100,15,131,244,251,
-  248,1,65,137,192,37,252,255,7,0,0,65,193,232,11,61,252,255,7,0,0,15,132,244,
-  249,248,2,137,252,233,137,194,232,251,1,31,139,149,233,15,182,78,252,253,
+  255,211,252,237,252,233,244,89,255,248,142,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,255,248,142,129,252,248,239,15,130,244,63,129,122,253,4,
+  239,15,131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,
+  15,16,74,8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,
+  88,202,102,15,126,197,102,15,126,201,255,211,252,253,252,233,244,89,255,248,
+  143,129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,143,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,
+  244,63,252,242,15,16,2,252,242,15,16,74,8,72,189,237,237,102,72,15,110,213,
+  252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,211,
+  197,252,233,244,89,255,248,144,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,255,248,144,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,74,
+  8,72,189,237,237,102,72,15,110,213,252,242,15,88,194,252,242,15,88,202,102,
+  15,126,197,102,15,126,201,255,211,205,252,233,244,89,248,127,184,237,252,
+  233,244,63,248,129,184,237,248,63,139,108,36,96,139,114,252,252,137,116,36,
+  100,137,149,233,141,68,194,252,248,141,136,233,137,133,233,139,66,252,248,
+  59,141,233,15,135,244,251,137,252,233,252,255,144,233,139,149,233,133,192,
+  15,143,244,78,248,1,255,139,141,233,41,209,193,252,233,3,133,192,141,65,1,
+  139,106,252,248,15,133,244,33,139,181,233,139,14,15,182,252,233,15,182,205,
+  131,198,4,252,255,36,252,235,248,33,137,209,252,247,198,237,15,133,244,249,
+  15,182,110,252,253,72,252,247,213,141,20,252,234,252,233,244,28,248,3,137,
+  252,245,131,229,252,248,41,252,234,252,233,244,28,248,5,186,237,137,252,233,
+  232,251,1,0,139,149,233,49,192,252,233,244,1,248,75,93,72,137,108,36,32,139,
+  108,36,96,137,116,36,100,137,149,233,255,141,68,194,252,248,137,252,233,137,
+  133,233,232,251,1,21,139,149,233,139,133,233,41,208,193,232,3,131,192,1,72,
+  139,108,36,32,85,195,248,145,255,15,182,131,233,168,235,15,133,244,251,168,
+  235,15,133,244,247,168,235,15,132,244,247,252,255,139,233,252,233,244,247,
+  255,248,146,15,182,131,233,168,235,15,133,244,251,252,233,244,247,248,147,
+  15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,255,139,
+  233,15,132,244,247,168,235,15,132,244,251,248,1,255,139,108,36,96,137,149,
+  233,137,252,242,137,252,233,232,251,1,22,248,3,139,149,233,248,4,15,182,78,
+  252,253,248,5,15,182,110,252,252,15,183,70,252,254,252,255,164,253,252,235,
+  233,248,148,131,198,4,139,77,232,137,76,36,84,252,233,244,4,248,149,255,139,
+  106,252,248,139,173,233,15,182,133,233,141,4,194,139,108,36,96,137,149,233,
+  137,133,233,137,252,242,141,139,233,72,137,171,233,137,116,36,100,232,251,
+  1,23,252,233,244,3,255,248,150,137,116,36,100,255,248,151,255,137,116,36,
+  100,131,206,1,248,1,255,141,68,194,252,248,139,108,36,96,137,149,233,137,
+  133,233,137,252,242,137,252,233,232,251,1,24,199,68,36,100,0,0,0,0,255,131,
+  230,252,254,255,139,149,233,72,137,193,139,133,233,41,208,72,137,205,15,182,
+  78,252,253,193,232,3,131,192,1,252,255,229,248,152,255,65,85,65,84,65,83,
+  65,82,65,81,65,80,87,86,85,72,141,108,36,88,85,83,82,81,80,15,182,69,252,
+  248,138,101,252,240,76,137,125,252,248,76,137,117,252,240,139,93,0,139,139,
+  233,199,131,233,237,137,131,233,137,139,233,72,129,252,236,239,72,131,197,
+  128,252,242,68,15,17,125,252,248,252,242,68,15,17,117,252,240,252,242,68,
+  15,17,109,232,252,242,68,15,17,101,224,252,242,68,15,17,93,216,252,242,68,
+  15,17,85,208,252,242,68,15,17,77,200,252,242,68,15,17,69,192,252,242,15,17,
+  125,184,252,242,15,17,117,176,252,242,15,17,109,168,252,242,15,17,101,160,
+  252,242,15,17,93,152,252,242,15,17,85,144,252,242,15,17,77,136,252,242,15,
+  17,69,128,139,171,233,139,147,233,72,137,171,233,199,131,233,0,0,0,0,137,
+  149,233,72,141,148,253,36,233,141,139,233,232,251,1,25,72,139,141,233,72,
+  129,225,239,137,169,233,139,149,233,139,177,233,252,233,244,247,255,248,153,
+  255,72,141,140,253,36,233,248,1,102,68,15,111,185,233,102,68,15,111,177,233,
+  102,68,15,111,169,233,102,68,15,111,161,233,102,68,15,111,153,233,102,68,
+  15,111,145,233,102,68,15,111,137,233,102,68,15,111,129,233,102,15,111,185,
+  233,72,137,204,102,15,111,49,76,139,124,36,16,76,139,116,36,24,76,139,108,
+  36,32,76,139,100,36,80,133,192,15,136,244,249,137,68,36,84,139,122,252,248,
+  139,191,233,139,191,233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,129,252,253,239,15,130,244,248,255,139,
+  68,36,84,248,2,252,255,36,252,235,248,3,252,247,216,137,252,233,137,194,232,
+  251,1,26,255,248,91,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,
+  4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,
+  36,4,139,68,36,8,195,255,248,154,72,184,237,237,102,72,15,110,208,72,184,
+  237,237,102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,
+  247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,72,184,
+  237,237,102,72,15,110,208,252,242,15,194,193,1,102,15,84,194,252,242,15,92,
+  200,15,40,193,248,1,195,248,93,255,217,124,36,4,137,68,36,8,102,184,0,8,102,
+  11,68,36,4,102,37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,
+  217,108,36,4,139,68,36,8,195,255,248,155,72,184,237,237,102,72,15,110,208,
+  72,184,237,237,102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,
+  134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,
+  72,184,237,237,102,72,15,110,208,252,242,15,194,193,6,102,15,84,194,252,242,
+  15,92,200,15,40,193,248,1,195,248,114,255,217,124,36,4,137,68,36,8,102,184,
+  0,12,102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,
+  139,68,36,8,195,255,248,156,72,184,237,237,102,72,15,110,208,72,184,237,237,
+  102,72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,
+  15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,72,184,237,237,102,
+  72,15,110,216,252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,
+  86,202,15,40,193,248,1,195,248,157,255,15,40,232,252,242,15,94,193,72,184,
+  237,237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,15,40,224,102,
+  15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,
+  242,15,92,227,102,15,86,226,72,184,237,237,102,72,15,110,208,252,242,15,194,
+  196,1,102,15,84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,
+  15,92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,255,
+  217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,
+  252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,
+  252,233,195,255,248,98,217,252,234,222,201,248,158,217,84,36,8,129,124,36,
+  8,0,0,128,127,15,132,244,247,129,124,36,8,0,0,128,252,255,15,132,244,248,
+  248,159,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,
+  217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,117,255,
+  248,160,252,242,15,45,193,252,242,15,42,208,102,15,46,202,15,133,244,254,
+  15,138,244,255,248,161,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,
+  133,244,248,252,242,15,89,192,209,232,252,233,244,1,248,2,209,232,15,132,
+  244,251,15,40,200,248,3,252,242,15,89,192,209,232,15,132,244,250,15,131,244,
+  3,255,252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,
+  6,15,132,244,5,15,130,244,253,252,247,216,232,244,1,72,184,237,237,102,72,
+  15,110,200,252,242,15,94,200,15,40,193,195,248,7,72,184,237,237,102,72,15,
+  110,192,195,248,8,102,72,15,126,200,72,209,224,72,193,192,12,72,61,252,254,
+  15,0,0,15,132,244,248,102,72,15,126,192,72,209,224,15,132,244,250,255,72,
+  193,192,12,72,61,252,254,15,0,0,15,132,244,251,252,242,15,17,76,36,16,252,
+  242,15,17,68,36,8,221,68,36,16,221,68,36,8,217,252,241,217,192,217,252,252,
+  220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,217,221,92,
+  36,8,252,242,15,16,68,36,8,195,248,9,72,184,237,237,102,72,15,110,208,102,
+  15,46,194,15,132,244,247,15,40,193,248,1,195,248,2,72,184,237,237,102,72,
+  15,110,208,102,15,84,194,72,184,237,237,102,72,15,110,208,102,15,46,194,15,
+  132,244,1,102,15,80,193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,
+  248,3,72,184,237,237,255,102,72,15,110,192,195,248,4,102,15,80,193,133,192,
+  15,133,244,3,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,
+  192,195,248,162,255,131,252,250,1,15,130,244,91,15,132,244,93,131,252,250,
+  3,15,130,244,114,15,135,244,248,252,242,15,81,192,195,248,2,252,242,15,17,
+  68,36,8,221,68,36,8,131,252,250,5,15,135,244,248,88,15,132,244,247,232,244,
+  98,80,252,233,244,253,248,1,232,244,158,255,80,252,233,244,253,248,2,131,
+  252,250,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,252,
+  233,244,253,248,1,217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,
+  250,9,15,132,244,247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,
+  244,253,248,1,255,217,252,254,252,233,244,253,248,2,131,252,250,11,15,132,
+  244,247,15,135,244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,
+  216,248,7,221,92,36,8,252,242,15,16,68,36,8,195,255,139,84,36,12,221,68,36,
+  4,131,252,250,1,15,130,244,91,15,132,244,93,131,252,250,3,15,130,244,114,
+  15,135,244,248,217,252,250,195,248,2,131,252,250,5,15,130,244,98,15,132,244,
+  158,131,252,250,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,
+  241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,250,9,15,132,
+  244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217,
+  252,254,195,248,2,131,252,250,11,15,132,244,247,15,135,244,255,217,252,255,
+  195,248,1,217,252,242,221,216,195,255,248,9,204,255,248,163,255,65,131,252,
+  248,1,15,132,244,247,15,135,244,248,252,242,15,88,193,195,248,1,252,242,15,
+  92,193,195,248,2,65,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,
+  89,193,195,248,1,252,242,15,94,193,195,248,2,65,131,252,248,5,15,130,244,
+  157,15,132,244,117,65,131,252,248,7,15,132,244,247,15,135,244,248,72,184,
+  237,237,255,102,72,15,110,200,15,87,193,195,248,1,72,184,237,237,102,72,15,
+  110,200,15,84,193,195,248,2,65,131,252,248,9,15,135,244,248,252,242,15,17,
+  68,36,8,252,242,15,17,76,36,16,221,68,36,8,221,68,36,16,15,132,244,247,217,
+  252,243,248,7,221,92,36,8,252,242,15,16,68,36,8,195,248,1,217,201,217,252,
+  253,221,217,252,233,244,7,248,2,65,131,252,248,11,15,132,244,247,15,135,244,
+  255,252,242,15,93,193,195,248,1,252,242,15,95,193,195,248,9,204,255,139,68,
+  36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,
+  222,193,195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,
+  244,248,222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,
+  157,15,132,244,117,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,
+  217,224,195,248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,
+  15,135,244,248,217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,
+  2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,
+  217,195,248,1,219,252,233,218,209,221,217,195,255,221,225,223,224,252,246,
+  196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,
+  246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248,164,137,200,86,
+  72,137,214,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,94,195,248,165,
+  255,204,248,166,255,87,86,83,72,131,252,236,40,141,157,233,139,181,233,15,
+  183,192,137,134,233,72,137,142,233,72,137,150,233,76,137,134,233,76,137,142,
+  233,252,242,15,17,134,233,252,242,15,17,142,233,252,242,15,17,150,233,252,
+  242,15,17,158,233,72,141,132,253,36,233,72,137,134,233,72,137,226,137,116,
+  36,100,137,252,241,232,251,1,27,199,131,233,237,139,144,233,139,128,233,41,
+  208,139,106,252,248,193,232,3,131,192,1,139,181,233,139,14,15,182,252,233,
+  15,182,205,131,198,4,252,255,36,252,235,255,248,32,255,139,76,36,96,139,179,
+  233,72,137,142,233,137,145,233,137,169,233,137,252,241,137,194,232,251,1,
+  28,72,139,134,233,252,242,15,16,134,233,252,233,244,16,255,248,167,255,85,
+  72,137,229,83,72,137,203,139,131,233,72,41,196,255,15,182,139,233,131,252,
+  233,1,15,136,244,248,248,1,72,139,132,253,203,233,72,137,132,253,204,233,
+  131,252,233,1,15,137,244,1,248,2,15,182,131,233,72,139,139,233,72,139,147,
+  233,76,139,131,233,76,139,139,233,133,192,15,132,244,251,15,40,131,233,15,
+  40,139,233,15,40,147,233,15,40,155,233,248,5,255,252,255,147,233,72,137,131,
+  233,15,41,131,233,255,72,139,93,252,248,201,195,255,129,124,253,202,4,239,
+  15,133,244,253,129,124,253,194,4,239,15,133,244,254,139,44,202,131,198,4,
+  59,44,194,255,15,141,244,255,255,15,140,244,255,255,15,143,244,255,255,15,
+  142,244,255,255,248,6,15,183,70,252,254,141,180,253,134,233,248,9,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,7,15,135,244,
+  44,129,124,253,194,4,239,15,130,244,247,15,133,244,44,255,252,242,15,42,4,
+  194,252,233,244,248,255,221,4,202,219,4,194,252,233,244,249,255,248,8,15,
+  135,244,44,255,252,242,15,42,12,202,252,242,15,16,4,194,131,198,4,102,15,
+  46,193,255,15,134,244,9,255,15,135,244,9,255,15,130,244,9,255,15,131,244,
+  9,255,252,233,244,6,255,219,4,202,252,233,244,248,255,129,124,253,202,4,239,
+  15,131,244,44,129,124,253,194,4,239,15,131,244,44,255,248,1,252,242,15,16,
+  4,194,248,2,131,198,4,102,15,46,4,202,248,3,255,248,1,221,4,202,248,2,221,
+  4,194,248,3,131,198,4,255,223,252,233,221,216,255,218,252,233,223,224,158,
+  255,15,135,244,247,255,15,130,244,247,255,15,131,244,247,255,15,183,70,252,
+  254,141,180,253,134,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,252,235,255,139,108,194,4,131,198,4,255,129,252,253,239,15,
+  133,244,253,129,124,253,202,4,239,15,133,244,254,139,44,194,59,44,202,255,
+  15,133,244,255,255,15,132,244,255,255,15,183,70,252,254,141,180,253,134,233,
+  248,9,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
+  248,7,15,135,244,251,129,124,253,202,4,239,15,130,244,247,15,133,244,251,
+  255,252,242,15,42,4,202,255,219,4,202,255,252,233,244,248,248,8,15,135,244,
+  251,255,252,242,15,42,4,194,102,15,46,4,202,255,219,4,194,221,4,202,255,252,
+  233,244,250,255,129,252,253,239,15,131,244,251,129,124,253,202,4,239,15,131,
+  244,251,255,248,1,252,242,15,16,4,202,248,2,102,15,46,4,194,248,4,255,248,
+  1,221,4,202,248,2,221,4,194,248,4,255,15,138,244,248,15,133,244,248,255,15,
+  138,244,248,15,132,244,247,255,248,1,15,183,70,252,254,141,180,253,134,233,
+  248,2,255,248,2,15,183,70,252,254,141,180,253,134,233,248,1,255,252,233,244,
+  9,255,129,252,253,239,15,132,244,49,129,124,253,202,4,239,15,132,244,49,255,
+  57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12,202,139,4,194,
+  57,193,15,132,244,1,129,252,253,239,15,135,244,2,129,252,253,239,15,130,244,
+  2,139,169,233,133,252,237,15,132,244,2,252,246,133,233,235,15,133,244,2,255,
+  49,252,237,255,189,1,0,0,0,255,252,233,244,48,255,248,3,129,252,253,239,255,
+  15,133,244,9,255,252,233,244,49,255,72,252,247,208,139,108,202,4,131,198,
+  4,129,252,253,239,15,133,244,249,139,12,202,59,12,135,255,139,108,202,4,131,
+  198,4,255,129,252,253,239,15,133,244,253,129,124,253,199,4,239,15,133,244,
+  254,139,44,199,59,44,202,255,15,183,70,252,254,141,180,253,134,233,248,9,
+  139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,7,
+  15,135,244,249,129,124,253,199,4,239,15,130,244,247,255,252,242,15,42,4,199,
+  255,219,4,199,255,252,233,244,248,248,8,255,252,242,15,42,4,202,102,15,46,
+  4,199,255,219,4,202,221,4,199,255,129,252,253,239,15,131,244,249,255,248,
+  1,252,242,15,16,4,199,248,2,102,15,46,4,202,248,4,255,248,1,221,4,199,248,
+  2,221,4,202,248,4,255,72,252,247,208,139,108,202,4,131,198,4,57,197,255,15,
+  133,244,249,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,129,252,253,239,
+  15,133,244,2,252,233,244,49,255,15,132,244,248,129,252,253,239,15,132,244,
+  49,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,252,235,255,139,108,194,4,131,198,4,129,252,
+  253,239,255,137,108,202,4,139,44,194,137,44,202,255,72,139,44,194,72,137,
+  44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
+  255,49,252,237,129,124,253,194,4,239,129,213,239,137,108,202,4,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,129,124,253,194,
+  4,239,15,133,244,251,139,44,194,252,247,221,15,128,244,250,199,68,202,4,237,
+  137,44,202,248,9,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
+  36,252,235,248,4,199,68,202,4,0,0,224,65,199,4,202,0,0,0,0,252,233,244,9,
+  248,5,15,135,244,54,255,129,124,253,194,4,239,15,131,244,54,255,252,242,15,
+  16,4,194,72,184,237,237,102,72,15,110,200,15,87,193,252,242,15,17,4,202,255,
+  221,4,194,217,224,221,28,202,255,129,124,253,194,4,239,15,133,244,248,139,
+  4,194,255,139,128,233,248,1,199,68,202,4,237,137,4,202,255,15,87,192,252,
+  242,15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,
+  202,255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
+  248,2,129,124,253,194,4,239,15,133,244,57,139,12,194,255,139,169,233,131,
+  252,253,0,15,133,244,255,248,3,255,248,58,137,213,232,251,1,20,255,252,242,
+  15,42,192,255,137,252,234,15,182,78,252,253,252,233,244,1,255,248,9,252,246,
+  133,233,235,15,133,244,3,252,233,244,57,255,15,182,252,236,15,182,192,255,
+  129,124,253,252,234,4,239,15,133,244,51,129,124,253,199,4,239,15,133,244,
+  51,139,44,252,234,3,44,199,15,128,244,50,255,129,124,253,252,234,4,239,15,
+  133,244,53,129,124,253,199,4,239,15,133,244,53,139,4,199,3,4,252,234,15,128,
+  244,52,255,129,124,253,252,234,4,239,15,133,244,56,129,124,253,194,4,239,
+  15,133,244,56,139,44,252,234,3,44,194,15,128,244,55,255,199,68,202,4,237,
+  255,129,124,253,252,234,4,239,15,131,244,51,255,129,124,253,199,4,239,15,
+  131,244,51,255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221,4,252,
+  234,220,4,199,255,129,124,253,252,234,4,239,15,131,244,53,255,129,124,253,
+  199,4,239,15,131,244,53,255,252,242,15,16,4,199,252,242,15,88,4,252,234,255,
+  221,4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,131,244,56,129,124,
+  253,194,4,239,15,131,244,56,255,252,242,15,16,4,252,234,252,242,15,88,4,194,
+  255,221,4,252,234,220,4,194,255,129,124,253,252,234,4,239,15,133,244,51,129,
+  124,253,199,4,239,15,133,244,51,139,44,252,234,43,44,199,15,128,244,50,255,
+  129,124,253,252,234,4,239,15,133,244,53,129,124,253,199,4,239,15,133,244,
+  53,139,4,199,43,4,252,234,15,128,244,52,255,129,124,253,252,234,4,239,15,
+  133,244,56,129,124,253,194,4,239,15,133,244,56,139,44,252,234,43,44,194,15,
+  128,244,55,255,252,242,15,16,4,252,234,252,242,15,92,4,199,255,221,4,252,
+  234,220,36,199,255,252,242,15,16,4,199,252,242,15,92,4,252,234,255,221,4,
+  199,220,36,252,234,255,252,242,15,16,4,252,234,252,242,15,92,4,194,255,221,
+  4,252,234,220,36,194,255,129,124,253,252,234,4,239,15,133,244,51,129,124,
+  253,199,4,239,15,133,244,51,139,44,252,234,15,175,44,199,15,128,244,50,255,
+  129,124,253,252,234,4,239,15,133,244,53,129,124,253,199,4,239,15,133,244,
+  53,139,4,199,15,175,4,252,234,15,128,244,52,255,129,124,253,252,234,4,239,
+  15,133,244,56,129,124,253,194,4,239,15,133,244,56,139,44,252,234,15,175,44,
+  194,15,128,244,55,255,252,242,15,16,4,252,234,252,242,15,89,4,199,255,221,
+  4,252,234,220,12,199,255,252,242,15,16,4,199,252,242,15,89,4,252,234,255,
+  221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242,15,89,4,194,
+  255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252,242,15,94,4,
+  199,255,221,4,252,234,220,52,199,255,252,242,15,16,4,199,252,242,15,94,4,
+  252,234,255,221,4,199,220,52,252,234,255,252,242,15,16,4,252,234,252,242,
+  15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,
+  242,15,16,12,199,255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,
+  242,15,16,12,252,234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,
+  234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,168,232,244,
+  157,255,252,233,244,168,255,232,244,117,255,15,182,252,236,15,182,192,139,
+  76,36,96,137,145,233,141,20,194,65,137,192,65,41,232,248,36,137,205,137,116,
+  36,100,232,251,1,29,139,149,233,133,192,15,133,244,45,15,182,110,252,255,
+  15,182,78,252,253,72,139,4,252,234,72,137,4,202,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,252,235,255,72,252,247,208,139,4,135,199,
+  68,202,4,237,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
+  255,36,252,235,255,15,191,192,199,68,202,4,237,137,4,202,255,15,191,192,252,
+  242,15,42,192,252,242,15,17,4,202,255,223,70,252,254,221,28,202,255,252,242,
+  15,16,4,199,252,242,15,17,4,202,255,221,4,199,221,28,202,255,72,252,247,208,
+  137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
+  252,235,255,141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,
+  41,131,193,8,57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193,
+  232,16,252,255,36,252,235,255,139,106,252,248,139,172,253,133,233,139,173,
+  233,72,139,69,0,72,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,252,235,255,139,106,252,248,139,172,253,141,233,128,189,233,
+  0,139,173,233,139,12,194,139,68,194,4,137,77,0,137,69,4,15,132,244,247,252,
+  246,133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,
+  4,193,232,16,252,255,36,252,235,248,2,129,232,239,129,252,248,239,15,134,
+  244,1,252,246,129,233,235,15,132,244,1,135,213,141,139,233,255,232,251,1,
+  30,137,252,234,252,233,244,1,255,72,252,247,208,139,106,252,248,139,172,253,
+  141,233,139,12,135,139,133,233,137,8,199,64,4,237,252,246,133,233,235,15,
+  133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
+  36,252,235,248,2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132,244,
+  1,137,213,137,194,141,139,233,232,251,1,30,137,252,234,252,233,244,1,255,
+  139,106,252,248,255,252,242,15,16,4,199,255,139,172,253,141,233,139,141,233,
+  255,252,242,15,17,1,255,221,25,255,72,252,247,208,139,106,252,248,139,172,
+  253,141,233,139,141,233,137,65,4,139,6,15,182,204,15,182,232,131,198,4,193,
+  232,16,252,255,36,252,235,255,141,180,253,134,233,139,108,36,96,131,189,233,
+  0,15,132,244,247,137,149,233,141,20,202,137,252,233,232,251,1,31,139,149,
+  233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
+  235,255,72,252,247,208,139,108,36,96,137,149,233,68,139,66,252,248,139,20,
+  135,137,252,233,137,116,36,100,232,251,1,32,139,149,233,15,182,78,252,253,
   137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,
-  16,252,255,36,252,235,248,3,184,1,8,0,0,252,233,244,2,248,5,137,252,233,232,
-  251,1,32,15,183,70,252,254,252,233,244,1,255,72,252,247,208,139,108,36,96,
-  139,139,233,137,116,36,100,59,139,233,137,149,233,15,131,244,249,248,2,139,
-  20,135,137,252,233,232,251,1,33,139,149,233,15,182,78,252,253,137,4,202,199,
-  68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
-  252,235,248,3,137,252,233,232,251,1,32,15,183,70,252,254,72,252,247,208,252,
-  233,244,2,255,72,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,
-  244,167,255,72,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,
-  244,168,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,
-  38,139,44,252,234,255,129,124,253,194,4,239,15,133,244,251,139,4,194,255,
-  129,124,253,194,4,239,15,131,244,251,255,252,242,15,16,4,194,252,242,15,45,
-  192,252,242,15,42,200,102,15,46,193,255,15,133,244,38,255,59,133,233,15,131,
-  244,38,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,72,139,40,72,
-  137,44,202,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
-  36,252,235,248,2,131,189,233,0,15,132,244,249,139,141,233,252,246,129,233,
-  235,15,132,244,38,15,182,78,252,253,248,3,199,68,202,4,237,252,233,244,1,
-  248,5,255,129,124,253,194,4,239,15,133,244,38,139,4,194,252,233,244,167,255,
-  15,182,252,236,15,182,192,72,252,247,208,139,4,135,129,124,253,252,234,4,
-  239,15,133,244,36,139,44,252,234,248,167,139,141,233,35,136,233,105,201,239,
-  3,141,233,248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,
-  129,121,253,4,239,15,132,244,251,15,182,70,252,253,72,139,41,72,137,44,194,
-  248,2,255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
-  235,248,3,15,182,70,252,253,199,68,194,4,237,252,233,244,2,248,4,139,137,
-  233,133,201,15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,
-  233,235,15,133,244,3,252,233,244,36,255,15,182,252,236,15,182,192,129,124,
-  253,252,234,4,239,15,133,244,37,139,44,252,234,59,133,233,15,131,244,37,193,
-  224,3,3,133,233,129,120,253,4,239,15,132,244,248,72,139,40,72,137,44,202,
-  248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
-  248,2,131,189,233,0,15,132,244,249,139,141,233,252,246,129,233,235,15,132,
-  244,37,255,15,182,78,252,253,248,3,199,68,202,4,237,252,233,244,1,255,15,
-  182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,41,139,44,252,
-  234,255,15,133,244,41,255,59,133,233,15,131,244,41,193,224,3,3,133,233,129,
-  120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,
-  2,72,139,44,202,72,137,40,139,6,15,182,204,15,182,232,131,198,4,193,232,16,
-  252,255,36,252,235,248,3,131,189,233,0,15,132,244,1,139,141,233,252,246,129,
-  233,235,255,15,132,244,41,15,182,78,252,253,252,233,244,1,248,5,129,124,253,
-  194,4,239,15,133,244,41,139,4,194,252,233,244,168,248,7,128,165,233,235,139,
-  139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,
-  252,236,15,182,192,72,252,247,208,139,4,135,129,124,253,252,234,4,239,15,
-  133,244,39,139,44,252,234,248,168,139,141,233,35,136,233,105,201,239,198,
-  133,233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,
-  244,251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,
-  133,244,253,248,3,15,182,70,252,253,72,139,44,194,72,137,41,139,6,15,182,
-  204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,4,131,189,233,
-  0,15,132,244,2,137,76,36,80,139,141,233,252,246,129,233,235,15,132,244,39,
-  139,76,36,80,252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,139,
-  141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,39,248,6,137,
-  68,36,80,199,68,36,84,237,137,108,36,32,139,76,36,96,137,145,233,76,141,68,
-  36,80,137,252,234,137,205,137,116,36,100,232,251,1,34,139,149,233,139,108,
-  36,32,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137,171,233,
-  137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253,252,234,
-  4,239,15,133,244,40,139,44,252,234,59,133,233,15,131,244,40,193,224,3,3,133,
-  233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244,
-  253,248,2,72,139,12,202,72,137,8,139,6,15,182,204,15,182,232,131,198,4,193,
-  232,16,252,255,36,252,235,248,3,131,189,233,0,15,132,244,1,255,139,141,233,
-  252,246,129,233,235,15,132,244,40,15,182,78,252,253,252,233,244,1,248,7,128,
-  165,233,235,139,139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,
-  244,2,255,137,124,36,80,139,60,199,248,1,141,12,202,139,105,252,248,252,246,
-  133,233,235,15,133,244,253,248,2,139,68,36,84,131,232,1,15,132,244,250,1,
-  252,248,59,133,233,15,135,244,251,41,252,248,193,231,3,3,189,233,248,3,72,
-  139,41,131,193,8,72,137,47,131,199,8,131,232,1,15,133,244,3,248,4,139,124,
-  36,80,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,
-  248,5,139,76,36,96,137,145,233,137,252,234,65,137,192,137,205,137,116,36,
-  100,232,251,1,35,139,149,233,15,182,78,252,253,252,233,244,1,248,7,255,128,
-  165,233,235,139,131,233,137,171,233,137,133,233,252,233,244,2,255,3,68,36,
-  84,255,129,124,253,202,4,239,139,44,202,15,133,244,58,141,84,202,8,137,114,
-  252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,
-  252,235,255,141,76,202,8,137,215,139,105,252,248,129,121,253,252,252,239,
-  15,133,244,29,248,59,139,114,252,252,252,247,198,237,15,133,244,253,248,1,
-  137,106,252,248,137,68,36,84,131,232,1,15,132,244,249,248,2,72,139,41,131,
-  193,8,72,137,47,131,199,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,
-  68,36,84,128,189,233,1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,
-  233,15,182,205,131,198,4,252,255,36,252,235,248,5,255,252,247,198,237,15,
-  133,244,4,15,182,78,252,253,72,252,247,209,141,12,202,139,121,252,248,139,
-  191,233,139,191,233,252,233,244,4,248,7,129,252,238,239,252,247,198,237,15,
-  133,244,254,41,252,242,137,215,139,114,252,252,252,233,244,1,248,8,129,198,
-  239,252,233,244,1,255,141,76,202,8,72,139,105,232,72,139,65,252,240,72,137,
-  41,72,137,65,8,139,105,224,139,65,228,137,105,252,248,137,65,252,252,129,
-  252,248,239,184,237,15,133,244,29,137,202,137,114,252,252,139,181,233,139,
-  14,15,182,252,233,15,182,205,131,198,4,252,255,36,252,235,255,137,124,36,
-  80,137,92,36,84,139,108,202,252,240,139,68,202,252,248,139,157,233,131,198,
-  4,139,189,233,248,1,57,216,15,131,244,251,129,124,253,199,4,239,15,132,244,
-  250,255,219,68,202,252,248,255,72,139,44,199,72,137,108,202,8,131,192,1,255,
-  137,68,202,252,248,248,2,15,183,70,252,254,141,180,253,134,233,248,3,139,
-  92,36,84,139,124,36,80,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
-  255,36,252,235,248,4,131,192,1,255,137,68,202,252,248,255,252,233,244,1,248,
-  5,41,216,248,6,59,133,233,15,135,244,3,105,252,248,239,3,189,233,129,191,
-  233,239,15,132,244,253,141,92,24,1,72,139,175,233,72,139,135,233,72,137,44,
-  202,72,137,68,202,8,137,92,202,252,248,252,233,244,2,248,7,131,192,1,252,
-  233,244,6,255,129,124,253,202,252,236,239,15,133,244,251,139,108,202,232,
-  129,124,253,202,252,244,239,15,133,244,251,129,124,253,202,252,252,239,15,
-  133,244,251,128,189,233,235,15,133,244,251,141,180,253,134,233,199,68,202,
-  252,248,0,0,0,0,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
-  255,36,252,235,248,5,198,70,252,252,235,141,180,253,134,233,198,6,235,252,
-  233,244,1,255,15,182,252,236,15,182,192,137,124,36,80,141,188,253,194,233,
-  141,12,202,43,122,252,252,133,252,237,15,132,244,251,141,108,252,233,252,
-  248,57,215,15,131,244,248,248,1,72,139,71,252,248,131,199,8,72,137,1,131,
-  193,8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,
-  193,8,57,252,233,15,130,244,2,248,3,139,124,36,80,139,6,15,182,204,15,182,
-  232,131,198,4,193,232,16,252,255,36,252,235,248,5,199,68,36,84,1,0,0,0,137,
-  208,41,252,248,15,134,244,3,137,197,193,252,237,3,131,197,1,137,108,36,84,
-  139,108,36,96,1,200,59,133,233,15,135,244,253,248,6,255,72,139,71,252,248,
-  131,199,8,72,137,1,131,193,8,57,215,15,130,244,6,252,233,244,3,248,7,137,
-  149,233,137,141,233,137,116,36,100,41,215,139,84,36,84,131,252,234,1,137,
-  252,233,232,251,1,0,139,149,233,139,141,233,1,215,252,233,244,6,255,193,225,
-  3,255,248,1,139,114,252,252,137,68,36,84,252,247,198,237,15,133,244,253,255,
-  248,13,137,215,131,232,1,15,132,244,249,248,2,72,139,44,15,72,137,111,252,
-  248,131,199,8,131,232,1,15,133,244,2,248,3,139,68,36,84,15,182,110,252,255,
-  248,5,57,197,15,135,244,252,255,72,139,44,10,72,137,106,252,248,255,248,5,
-  56,70,252,255,15,135,244,252,255,15,182,78,252,253,72,252,247,209,141,20,
-  202,139,122,252,248,139,191,233,139,191,233,139,6,15,182,204,15,182,232,131,
-  198,4,193,232,16,252,255,36,252,235,248,6,255,199,71,252,252,237,131,199,
-  8,255,199,68,194,252,244,237,255,131,192,1,252,233,244,5,248,7,141,174,233,
-  252,247,197,237,15,133,244,14,41,252,234,255,1,252,233,255,137,252,245,209,
-  252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,148,255,141,12,
-  202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,12,239,15,133,244,
-  60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,15,140,244,251,255,
-  129,121,253,12,239,15,133,244,164,129,121,253,20,239,15,133,244,164,255,139,
-  105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,137,41,255,59,105,8,
-  199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,6,141,180,253,134,233,
-  255,141,180,253,134,233,15,183,70,252,254,15,142,245,248,1,248,6,255,15,143,
-  244,253,248,6,141,180,253,134,233,248,1,255,248,7,139,6,15,182,204,15,182,
-  232,131,198,4,193,232,16,252,255,36,252,235,248,5,255,3,41,15,128,244,1,137,
-  41,255,15,141,244,7,255,141,180,253,134,233,15,183,70,252,254,15,141,245,
-  255,15,140,244,7,255,252,233,244,6,248,9,255,129,121,253,4,239,255,15,131,
-  244,60,129,121,253,12,239,15,131,244,60,255,129,121,253,12,239,15,131,244,
-  164,129,121,253,20,239,15,131,244,164,255,139,105,20,255,129,252,253,239,
-  15,131,244,60,255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,
-  16,252,242,15,17,1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,
-  15,46,200,248,1,252,242,15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,
-  17,221,81,24,133,252,237,15,136,244,247,255,221,81,24,15,140,244,247,255,
-  217,201,248,1,255,15,183,70,252,254,255,15,131,244,7,255,15,131,244,248,141,
-  180,253,134,233,255,141,180,253,134,233,15,183,70,252,254,15,131,245,255,
-  15,130,244,7,255,15,130,244,248,141,180,253,134,233,255,248,3,102,15,46,193,
-  252,233,244,1,255,141,12,202,139,105,4,129,252,253,239,15,132,244,247,255,
-  137,105,252,252,139,41,137,105,252,248,252,233,245,255,141,180,253,134,233,
-  139,1,137,105,252,252,137,65,252,248,255,139,139,233,139,4,129,72,139,128,
-  233,139,108,36,96,137,147,233,137,171,233,76,137,100,36,80,76,137,108,36,
-  32,76,137,116,36,24,76,137,124,36,16,72,137,225,72,129,252,236,239,102,15,
-  127,49,102,15,127,185,233,102,68,15,127,129,233,102,68,15,127,137,233,102,
-  68,15,127,145,233,102,68,15,127,153,233,102,68,15,127,161,233,102,68,15,127,
-  169,233,102,68,15,127,177,233,102,68,15,127,185,233,252,255,224,255,141,180,
-  253,134,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
-  235,255,137,252,245,209,252,237,129,229,239,102,129,172,253,43,233,238,15,
-  130,244,150,255,139,190,233,139,108,36,96,141,12,202,59,141,233,15,135,244,
-  24,15,182,142,233,57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,
-  245,255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,
-  244,2,255,141,44,197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,
-  252,248,139,108,36,96,141,12,200,59,141,233,15,135,244,23,137,209,137,194,
-  15,182,174,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,
-  249,139,121,252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252,
-  252,237,131,252,237,1,15,133,244,1,248,2,255,139,190,233,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,248,3,199,64,4,237,
-  131,192,8,131,252,237,1,15,133,244,3,252,233,244,2,255,139,106,252,248,72,
-  139,189,233,139,108,36,96,141,68,194,252,248,137,149,233,141,136,233,59,141,
-  233,137,133,233,255,72,137,252,250,137,252,233,255,15,135,244,22,199,131,
-  233,237,255,252,255,215,255,252,255,147,233,255,199,131,233,237,139,149,233,
-  141,12,194,252,247,217,3,141,233,139,114,252,252,252,233,244,12,255,254,0
+  16,252,255,36,252,235,255,139,108,36,96,137,149,233,139,139,233,59,139,233,
+  137,116,36,100,15,131,244,251,248,1,65,137,192,37,252,255,7,0,0,65,193,232,
+  11,61,252,255,7,0,0,15,132,244,249,248,2,137,252,233,137,194,232,251,1,33,
+  139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,184,1,8,0,0,252,
+  233,244,2,248,5,137,252,233,232,251,1,34,15,183,70,252,254,252,233,244,1,
+  255,72,252,247,208,139,108,36,96,139,139,233,137,116,36,100,59,139,233,137,
+  149,233,15,131,244,249,248,2,139,20,135,137,252,233,232,251,1,35,139,149,
+  233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,252,235,248,3,137,252,233,232,251,1,34,
+  15,183,70,252,254,72,252,247,208,252,233,244,2,255,72,252,247,208,139,106,
+  252,248,139,173,233,139,4,135,252,233,244,169,255,72,252,247,208,139,106,
+  252,248,139,173,233,139,4,135,252,233,244,170,255,15,182,252,236,15,182,192,
+  129,124,253,252,234,4,239,15,133,244,39,139,44,252,234,255,129,124,253,194,
+  4,239,15,133,244,251,139,4,194,255,129,124,253,194,4,239,15,131,244,251,255,
+  252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200,102,15,46,193,255,
+  15,133,244,39,255,59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,
+  4,239,15,132,244,248,72,139,40,72,137,44,202,248,1,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,252,235,248,2,131,189,233,0,15,132,244,
+  249,139,141,233,252,246,129,233,235,15,132,244,39,15,182,78,252,253,248,3,
+  199,68,202,4,237,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244,
+  39,139,4,194,252,233,244,169,255,15,182,252,236,15,182,192,72,252,247,208,
+  139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44,252,234,248,169,
+  139,141,233,35,136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133,
+  244,250,57,129,233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182,
+  70,252,253,72,139,41,72,137,44,194,248,2,255,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,252,235,248,3,15,182,70,252,253,199,68,194,
+  4,237,252,233,244,2,248,4,139,137,233,133,201,15,133,244,1,248,5,139,141,
+  233,133,201,15,132,244,3,252,246,129,233,235,15,133,244,3,252,233,244,37,
+  255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,38,139,
+  44,252,234,59,133,233,15,131,244,38,193,224,3,3,133,233,129,120,253,4,239,
+  15,132,244,248,72,139,40,72,137,44,202,248,1,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,252,235,248,2,131,189,233,0,15,132,244,249,
+  139,141,233,252,246,129,233,235,15,132,244,38,255,15,182,78,252,253,248,3,
+  199,68,202,4,237,252,233,244,1,255,15,182,252,236,15,182,192,129,124,253,
+  252,234,4,239,15,133,244,42,139,44,252,234,255,15,133,244,42,255,59,133,233,
+  15,131,244,42,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,
+  252,246,133,233,235,15,133,244,253,248,2,72,139,44,202,72,137,40,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,131,189,
+  233,0,15,132,244,1,139,141,233,252,246,129,233,235,255,15,132,244,42,15,182,
+  78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133,244,42,139,4,
+  194,252,233,244,170,248,7,128,165,233,235,139,139,233,137,171,233,137,141,
+  233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182,192,72,252,
+  247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,40,139,44,252,234,
+  248,170,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233,248,1,
+  129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,253,4,239,
+  15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,15,182,
+  70,252,253,72,139,44,194,72,137,41,139,6,15,182,204,15,182,232,131,198,4,
+  193,232,16,252,255,36,252,235,248,4,131,189,233,0,15,132,244,2,137,76,36,
+  80,139,141,233,252,246,129,233,235,15,132,244,40,139,76,36,80,252,233,244,
+  2,248,5,139,137,233,133,201,15,133,244,1,255,139,141,233,133,201,15,132,244,
+  252,252,246,129,233,235,15,132,244,40,248,6,137,68,36,80,199,68,36,84,237,
+  137,108,36,32,139,76,36,96,137,145,233,76,141,68,36,80,137,252,234,137,205,
+  137,116,36,100,232,251,1,36,139,149,233,139,108,36,32,137,193,252,233,244,
+  2,248,7,128,165,233,235,139,131,233,137,171,233,137,133,233,252,233,244,3,
+  255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,41,139,
+  44,252,234,59,133,233,15,131,244,41,193,224,3,3,133,233,129,120,253,4,239,
+  15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,72,139,12,202,
+  72,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,
+  235,248,3,131,189,233,0,15,132,244,1,255,139,141,233,252,246,129,233,235,
+  15,132,244,41,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139,139,
+  233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,137,124,36,
+  80,139,60,199,248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,
+  244,253,248,2,139,68,36,84,131,232,1,15,132,244,250,1,252,248,59,133,233,
+  15,135,244,251,41,252,248,193,231,3,3,189,233,248,3,72,139,41,131,193,8,72,
+  137,47,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,80,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,5,139,76,36,96,
+  137,145,233,137,252,234,65,137,192,137,205,137,116,36,100,232,251,1,37,139,
+  149,233,15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235,139,131,
+  233,137,171,233,137,133,233,252,233,244,2,255,3,68,36,84,255,129,124,253,
+  202,4,239,139,44,202,15,133,244,59,141,84,202,8,137,114,252,252,139,181,233,
+  139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,252,235,255,141,76,
+  202,8,137,215,139,105,252,248,129,121,253,252,252,239,15,133,244,29,248,60,
+  139,114,252,252,252,247,198,237,15,133,244,253,248,1,137,106,252,248,137,
+  68,36,84,131,232,1,15,132,244,249,248,2,72,139,41,131,193,8,72,137,47,131,
+  199,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,68,36,84,128,189,233,
+  1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,233,15,182,205,131,198,
+  4,252,255,36,252,235,248,5,255,252,247,198,237,15,133,244,4,15,182,78,252,
+  253,72,252,247,209,141,12,202,139,121,252,248,139,191,233,139,191,233,252,
+  233,244,4,248,7,129,252,238,239,252,247,198,237,15,133,244,254,41,252,242,
+  137,215,139,114,252,252,252,233,244,1,248,8,129,198,239,252,233,244,1,255,
+  141,76,202,8,72,139,105,232,72,139,65,252,240,72,137,41,72,137,65,8,139,105,
+  224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,237,15,
+  133,244,29,137,202,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,
+  205,131,198,4,252,255,36,252,235,255,137,124,36,80,137,92,36,84,139,108,202,
+  252,240,139,68,202,252,248,139,157,233,131,198,4,139,189,233,248,1,57,216,
+  15,131,244,251,129,124,253,199,4,239,15,132,244,250,255,219,68,202,252,248,
+  255,72,139,44,199,72,137,108,202,8,131,192,1,255,137,68,202,252,248,248,2,
+  15,183,70,252,254,141,180,253,134,233,248,3,139,92,36,84,139,124,36,80,139,
+  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,4,131,
+  192,1,255,137,68,202,252,248,255,252,233,244,1,248,5,41,216,248,6,59,133,
+  233,15,135,244,3,105,252,248,239,3,189,233,129,191,233,239,15,132,244,253,
+  141,92,24,1,72,139,175,233,72,139,135,233,72,137,44,202,72,137,68,202,8,137,
+  92,202,252,248,252,233,244,2,248,7,131,192,1,252,233,244,6,255,129,124,253,
+  202,252,236,239,15,133,244,251,139,108,202,232,129,124,253,202,252,244,239,
+  15,133,244,251,129,124,253,202,252,252,239,15,133,244,251,128,189,233,235,
+  15,133,244,251,141,180,253,134,233,199,68,202,252,248,0,0,0,0,248,1,139,6,
+  15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,5,198,70,
+  252,252,235,141,180,253,134,233,198,6,235,252,233,244,1,255,15,182,252,236,
+  15,182,192,137,124,36,80,141,188,253,194,233,141,12,202,43,122,252,252,133,
+  252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244,248,248,
+  1,72,139,71,252,248,131,199,8,72,137,1,131,193,8,57,252,233,15,131,244,249,
+  57,215,15,130,244,1,248,2,199,65,4,237,131,193,8,57,252,233,15,130,244,2,
+  248,3,139,124,36,80,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
+  255,36,252,235,248,5,199,68,36,84,1,0,0,0,137,208,41,252,248,15,134,244,3,
+  137,197,193,252,237,3,131,197,1,137,108,36,84,139,108,36,96,1,200,59,133,
+  233,15,135,244,253,248,6,255,72,139,71,252,248,131,199,8,72,137,1,131,193,
+  8,57,215,15,130,244,6,252,233,244,3,248,7,137,149,233,137,141,233,137,116,
+  36,100,41,215,139,84,36,84,131,252,234,1,137,252,233,232,251,1,0,139,149,
+  233,139,141,233,1,215,252,233,244,6,255,193,225,3,255,248,1,139,114,252,252,
+  137,68,36,84,252,247,198,237,15,133,244,253,255,248,13,137,215,131,232,1,
+  15,132,244,249,248,2,72,139,44,15,72,137,111,252,248,131,199,8,131,232,1,
+  15,133,244,2,248,3,139,68,36,84,15,182,110,252,255,248,5,57,197,15,135,244,
+  252,255,72,139,44,10,72,137,106,252,248,255,248,5,56,70,252,255,15,135,244,
+  252,255,15,182,78,252,253,72,252,247,209,141,20,202,139,122,252,248,139,191,
+  233,139,191,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
+  36,252,235,248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,
+  237,255,131,192,1,252,233,244,5,248,7,141,174,233,252,247,197,237,15,133,
+  244,14,41,252,234,255,1,252,233,255,137,252,245,209,252,237,129,229,239,102,
+  129,172,253,43,233,238,15,130,244,149,255,141,12,202,255,129,121,253,4,239,
+  15,133,244,255,255,129,121,253,12,239,15,133,244,61,129,121,253,20,239,15,
+  133,244,61,139,41,131,121,16,0,15,140,244,251,255,129,121,253,12,239,15,133,
+  244,165,129,121,253,20,239,15,133,244,165,255,139,105,16,133,252,237,15,136,
+  244,251,3,41,15,128,244,247,137,41,255,59,105,8,199,65,28,237,137,105,24,
+  255,15,142,244,253,248,1,248,6,141,180,253,134,233,255,141,180,253,134,233,
+  15,183,70,252,254,15,142,245,248,1,248,6,255,15,143,244,253,248,6,141,180,
+  253,134,233,248,1,255,248,7,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,252,235,248,5,255,3,41,15,128,244,1,137,41,255,15,141,244,7,
+  255,141,180,253,134,233,15,183,70,252,254,15,141,245,255,15,140,244,7,255,
+  252,233,244,6,248,9,255,129,121,253,4,239,255,15,131,244,61,129,121,253,12,
+  239,15,131,244,61,255,129,121,253,12,239,15,131,244,165,129,121,253,20,239,
+  15,131,244,165,255,139,105,20,255,129,252,253,239,15,131,244,61,255,252,242,
+  15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15,17,1,133,252,
+  237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248,1,252,242,15,
+  17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133,252,237,15,
+  136,244,247,255,221,81,24,15,140,244,247,255,217,201,248,1,255,15,183,70,
+  252,254,255,15,131,244,7,255,15,131,244,248,141,180,253,134,233,255,141,180,
+  253,134,233,15,183,70,252,254,15,131,245,255,15,130,244,7,255,15,130,244,
+  248,141,180,253,134,233,255,248,3,102,15,46,193,252,233,244,1,255,141,12,
+  202,139,105,4,129,252,253,239,15,132,244,247,255,137,105,252,252,139,41,137,
+  105,252,248,252,233,245,255,141,180,253,134,233,139,1,137,105,252,252,137,
+  65,252,248,255,139,139,233,139,4,129,72,139,128,233,139,108,36,96,137,147,
+  233,137,171,233,76,137,100,36,80,76,137,108,36,32,76,137,116,36,24,76,137,
+  124,36,16,72,137,225,72,129,252,236,239,102,15,127,49,102,15,127,185,233,
+  102,68,15,127,129,233,102,68,15,127,137,233,102,68,15,127,145,233,102,68,
+  15,127,153,233,102,68,15,127,161,233,102,68,15,127,169,233,102,68,15,127,
+  177,233,102,68,15,127,185,233,252,255,224,255,141,180,253,134,233,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,137,252,245,
+  209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,151,255,139,
+  190,233,139,108,36,96,141,12,202,59,141,233,15,135,244,24,15,182,142,233,
+  57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,255,248,3,199,
+  68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,
+  197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,252,248,139,108,
+  36,96,141,12,200,59,141,233,15,135,244,23,137,209,137,194,15,182,174,233,
+  133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,249,139,121,
+  252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252,252,237,131,
+  252,237,1,15,133,244,1,248,2,255,139,190,233,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,252,235,255,248,3,199,64,4,237,131,192,8,
+  131,252,237,1,15,133,244,3,252,233,244,2,255,139,106,252,248,72,139,189,233,
+  139,108,36,96,141,68,194,252,248,137,149,233,141,136,233,59,141,233,137,133,
+  233,255,72,137,252,250,137,252,233,255,15,135,244,22,199,131,233,237,255,
+  252,255,215,255,252,255,147,233,255,199,131,233,237,139,149,233,141,12,194,
+  252,247,217,3,141,233,139,114,252,252,252,233,244,12,255,254,0
 };
 
 enum {
@@ -815,6 +824,7 @@ enum {
   GLOB_vmeta_call,
   GLOB_vm_call_dispatch_f,
   GLOB_vm_cpcall,
+  GLOB_cont_ffi_callback,
   GLOB_vm_call_tail,
   GLOB_cont_cat,
   GLOB_cont_ra,
@@ -948,6 +958,7 @@ enum {
   GLOB_vm_foldarith,
   GLOB_vm_cpuid,
   GLOB_assert_bad_for_arg_type,
+  GLOB_vm_ffi_callback,
   GLOB_vm_ffi_call,
   GLOB_BC_MODVN_Z,
   GLOB_BC_TGETS_Z,
@@ -977,6 +988,7 @@ static const char *const globnames[] = {
   "vmeta_call",
   "vm_call_dispatch_f",
   "vm_cpcall",
+  "cont_ffi_callback",
   "vm_call_tail",
   "cont_cat",
   "cont_ra",
@@ -1110,6 +1122,7 @@ static const char *const globnames[] = {
   "vm_foldarith",
   "vm_cpuid",
   "assert_bad_for_arg_type",
+  "vm_ffi_callback",
   "vm_ffi_call@4",
   "BC_MODVN_Z",
   "BC_TGETS_Z",
@@ -1144,6 +1157,8 @@ static const char *const extnames[] = {
   "lj_dispatch_call@8",
   "lj_trace_exit@8",
   "lj_err_throw@8",
+  "lj_ccallback_enter@8",
+  "lj_ccallback_leave@8",
   "lj_meta_cat",
   "lj_gc_barrieruv@8",
   "lj_func_closeuv@8",
@@ -1184,668 +1199,686 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   dasm_put(Dst, 356, Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->pc), FRAME_CP, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE);
   dasm_put(Dst, 511, FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
   dasm_put(Dst, 604, Dt1(->top), LJ_TFUNC, Dt7(->pc), Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL);
-  dasm_put(Dst, 770, 0, Dt7(->pc), PC2PROTO(k), Dt1(->base), LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
-  dasm_put(Dst, 894);
+#if LJ_HASFFI
+  dasm_put(Dst, 764);
+#endif
+  dasm_put(Dst, 773, 0);
+#if LJ_HASFFI
+#endif
+  dasm_put(Dst, 782, Dt7(->pc), PC2PROTO(k));
+#if LJ_HASFFI
+  dasm_put(Dst, 796);
+#endif
+  dasm_put(Dst, 817, Dt1(->base), LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 908, LJ_TISNUM);
+    dasm_put(Dst, 917, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 918);
+    dasm_put(Dst, 927);
   } else {
   }
-  dasm_put(Dst, 931, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
-  dasm_put(Dst, 1078, DISPATCH_GL(tmptv), LJ_TTAB);
+  dasm_put(Dst, 940, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
+  dasm_put(Dst, 1087, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 908, LJ_TISNUM);
+    dasm_put(Dst, 917, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 918);
+    dasm_put(Dst, 927);
   } else {
   }
-  dasm_put(Dst, 1101, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 1274, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
-  dasm_put(Dst, 1374);
+  dasm_put(Dst, 1110, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1283, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
+  dasm_put(Dst, 1383);
 #if LJ_HASFFI
-  dasm_put(Dst, 1394, Dt1(->base));
+  dasm_put(Dst, 1403, Dt1(->base));
 #endif
-  dasm_put(Dst, 1425);
+  dasm_put(Dst, 1434);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1428);
+  dasm_put(Dst, 1437);
 #endif
-  dasm_put(Dst, 1434);
+  dasm_put(Dst, 1443);
 #if LJ_DUALNUM
-  dasm_put(Dst, 902);
+  dasm_put(Dst, 911);
 #endif
-  dasm_put(Dst, 1446);
+  dasm_put(Dst, 1455);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1428);
+  dasm_put(Dst, 1437);
 #endif
-  dasm_put(Dst, 1474, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1483, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 1580);
+  dasm_put(Dst, 1589);
 #else
-  dasm_put(Dst, 1599);
+  dasm_put(Dst, 1608);
 #endif
-  dasm_put(Dst, 1604, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
-  dasm_put(Dst, 1790, 1+1, ~LJ_TNUMX);
+  dasm_put(Dst, 1613, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
+  dasm_put(Dst, 1799, 1+1, ~LJ_TNUMX);
   if (cmov) {
-  dasm_put(Dst, 1859);
+  dasm_put(Dst, 1868);
   } else {
-  dasm_put(Dst, 1863);
+  dasm_put(Dst, 1872);
   }
-  dasm_put(Dst, 1872, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, ~LJ_TLIGHTUD, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL);
-  dasm_put(Dst, 1951, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next));
-  dasm_put(Dst, 2008, LJ_TNIL, LJ_TUDATA, LJ_TNUMX, LJ_TISNUM, LJ_TLIGHTUD);
-  dasm_put(Dst, 2074, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB);
-  dasm_put(Dst, 2144, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist), 2+1, LJ_TTAB);
-  dasm_put(Dst, 2233, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 1881, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, ~LJ_TLIGHTUD, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL);
+  dasm_put(Dst, 1960, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next));
+  dasm_put(Dst, 2017, LJ_TNIL, LJ_TUDATA, LJ_TNUMX, LJ_TISNUM, LJ_TLIGHTUD);
+  dasm_put(Dst, 2083, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB);
+  dasm_put(Dst, 2153, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist), 2+1, LJ_TTAB);
+  dasm_put(Dst, 2242, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2247);
+    dasm_put(Dst, 2256);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
   if (sse) {
-    dasm_put(Dst, 2269);
+    dasm_put(Dst, 2278);
   } else {
-    dasm_put(Dst, 2279);
+    dasm_put(Dst, 2288);
   }
-  dasm_put(Dst, 2286, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 2352, Dt1(->base));
+  dasm_put(Dst, 2295, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2361, Dt1(->base));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2376);
+    dasm_put(Dst, 2385);
   } else {
-    dasm_put(Dst, 2381);
+    dasm_put(Dst, 2390);
   }
-  dasm_put(Dst, 2386, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
-  dasm_put(Dst, 2479, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2395, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
+  dasm_put(Dst, 2488, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2526, Dt6(->metatable));
+  dasm_put(Dst, 2535, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2535, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
+  dasm_put(Dst, 2544, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2521);
+    dasm_put(Dst, 2530);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 2590);
+  dasm_put(Dst, 2599);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2595, LJ_TISNUM);
+    dasm_put(Dst, 2604, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2611, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+    dasm_put(Dst, 2620, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 2644, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
-  dasm_put(Dst, 2506, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2653, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
+  dasm_put(Dst, 2515, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2526, Dt6(->metatable));
+  dasm_put(Dst, 2535, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2721, Dt8(->upvalue[0]), LJ_TFUNC);
+  dasm_put(Dst, 2730, Dt8(->upvalue[0]), LJ_TFUNC);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2742, LJ_TISNUM);
+    dasm_put(Dst, 2751, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2754);
-  } else {
-    dasm_put(Dst, 2764);
-  }
-  dasm_put(Dst, 2771, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
-  dasm_put(Dst, 2835, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
-  dasm_put(Dst, 2925, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
-  dasm_put(Dst, 3013, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
-  dasm_put(Dst, 3126, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
-  dasm_put(Dst, 3224, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
-  dasm_put(Dst, 3291, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
-  dasm_put(Dst, 3379, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
-  dasm_put(Dst, 3491, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
+    dasm_put(Dst, 2763);
+  } else {
+    dasm_put(Dst, 2773);
+  }
+  dasm_put(Dst, 2780, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
+  dasm_put(Dst, 2844, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
+  dasm_put(Dst, 2934, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 3022, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
+  dasm_put(Dst, 3135, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
+  dasm_put(Dst, 3233, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 3300, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
+  dasm_put(Dst, 3388, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
+  dasm_put(Dst, 3500, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
   if (!LJ_DUALNUM) {
-    dasm_put(Dst, 3518);
+    dasm_put(Dst, 3527);
   }
   if (sse) {
-    dasm_put(Dst, 3521);
+    dasm_put(Dst, 3530);
   }
-  dasm_put(Dst, 3536, 1+1);
+  dasm_put(Dst, 3545, 1+1);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 3547, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 3556, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3627, LJ_TISNUM);
+    dasm_put(Dst, 3636, LJ_TISNUM);
   }
   if (sse) {
-    dasm_put(Dst, 3637, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
+    dasm_put(Dst, 3646, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
   } else {
-    dasm_put(Dst, 3668);
+    dasm_put(Dst, 3677);
   }
-  dasm_put(Dst, 3685, 1+1, FRAME_TYPE, LJ_TNIL);
+  dasm_put(Dst, 3694, 1+1, FRAME_TYPE, LJ_TNIL);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3781, LJ_TISNUM);
+  dasm_put(Dst, 3790, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3627, LJ_TISNUM);
+  dasm_put(Dst, 3636, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3803);
-    if (LJ_DUALNUM) {
   dasm_put(Dst, 3812);
+    if (LJ_DUALNUM) {
+  dasm_put(Dst, 3821);
     }
-  dasm_put(Dst, 2274);
+  dasm_put(Dst, 2283);
   } else {
-  dasm_put(Dst, 3846);
+  dasm_put(Dst, 3855);
     if (LJ_DUALNUM) {
     } else {
-  dasm_put(Dst, 2281);
+  dasm_put(Dst, 2290);
     }
   }
-  dasm_put(Dst, 3852);
+  dasm_put(Dst, 3861);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3781, LJ_TISNUM);
+  dasm_put(Dst, 3790, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3627, LJ_TISNUM);
+  dasm_put(Dst, 3636, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3855);
+  dasm_put(Dst, 3864);
     if (LJ_DUALNUM) {
-  dasm_put(Dst, 3812);
+  dasm_put(Dst, 3821);
     }
-  dasm_put(Dst, 2274);
+  dasm_put(Dst, 2283);
   } else {
-  dasm_put(Dst, 3864);
+  dasm_put(Dst, 3873);
     if (LJ_DUALNUM) {
     } else {
-  dasm_put(Dst, 2281);
+  dasm_put(Dst, 2290);
     }
   }
   if (sse) {
-    dasm_put(Dst, 3870, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3879, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3899, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 3908, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 3928, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 3997, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4054, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4117, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-  dasm_put(Dst, 4207);
+  dasm_put(Dst, 3937, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4006, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4063, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4126, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4216);
   if (sse) {
-  dasm_put(Dst, 4219, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4228, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4244);
+  dasm_put(Dst, 4253);
   if (sse) {
-  dasm_put(Dst, 4258, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4267, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4283);
+  dasm_put(Dst, 4292);
   if (sse) {
-  dasm_put(Dst, 4297, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4306, 1+1, LJ_TISNUM);
   } else {
   }
-  dasm_put(Dst, 4322);
+  dasm_put(Dst, 4331);
   if (sse) {
-    dasm_put(Dst, 4338, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4347, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   } else {
-    dasm_put(Dst, 4377, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4386, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   }
-  dasm_put(Dst, 4410, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
-  dasm_put(Dst, 4475, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4419, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4484, 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4574);
+    dasm_put(Dst, 4583);
   } else {
-    dasm_put(Dst, 4580);
+    dasm_put(Dst, 4589);
   }
-  dasm_put(Dst, 4589);
+  dasm_put(Dst, 4598);
   if (sse) {
-    dasm_put(Dst, 4614);
+    dasm_put(Dst, 4623);
   } else {
-    dasm_put(Dst, 4620);
+    dasm_put(Dst, 4629);
   }
-  dasm_put(Dst, 4623, 1+2);
+  dasm_put(Dst, 4632, 1+2);
   if (sse) {
-    dasm_put(Dst, 4632);
+    dasm_put(Dst, 4641);
   } else {
-    dasm_put(Dst, 4640);
+    dasm_put(Dst, 4649);
   }
-  dasm_put(Dst, 4648);
+  dasm_put(Dst, 4657);
   if (sse) {
-    dasm_put(Dst, 4651, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32));
+    dasm_put(Dst, 4660, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32));
   } else {
-    dasm_put(Dst, 4678);
+    dasm_put(Dst, 4687);
   }
-  dasm_put(Dst, 4697);
+  dasm_put(Dst, 4706);
   if (sse) {
-    dasm_put(Dst, 4713, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4722, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4738, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4747, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4760);
+  dasm_put(Dst, 4769);
   if (sse) {
-    dasm_put(Dst, 4782);
+    dasm_put(Dst, 4791);
   } else {
-    dasm_put(Dst, 4808);
+    dasm_put(Dst, 4817);
   }
-  dasm_put(Dst, 4825, 1+2);
+  dasm_put(Dst, 4834, 1+2);
   if (sse) {
-    dasm_put(Dst, 4865);
+    dasm_put(Dst, 4874);
   } else {
-    dasm_put(Dst, 4873);
+    dasm_put(Dst, 4882);
   }
-  dasm_put(Dst, 4883, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4892, 2+1, LJ_TISNUM, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4935, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 4944, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4982, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 4991, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 5023, LJ_TISNUM);
+  dasm_put(Dst, 5032, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5036, LJ_TISNUM);
+  dasm_put(Dst, 5045, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4574);
+  dasm_put(Dst, 4583);
   } else {
   }
-  dasm_put(Dst, 5086);
+  dasm_put(Dst, 5095);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 5097, LJ_TISNUM);
+  dasm_put(Dst, 5106, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5118);
+  dasm_put(Dst, 5127);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5139);
+  dasm_put(Dst, 5148);
   } else {
   }
-  dasm_put(Dst, 5164, LJ_TISNUM);
+  dasm_put(Dst, 5173, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5177, LJ_TISNUM);
+  dasm_put(Dst, 5186, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4574);
+  dasm_put(Dst, 4583);
   } else {
   }
-  dasm_put(Dst, 5086);
+  dasm_put(Dst, 5095);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 5097, LJ_TISNUM);
+  dasm_put(Dst, 5106, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5118);
+  dasm_put(Dst, 5127);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5227);
+  dasm_put(Dst, 5236);
   } else {
   }
   if (!sse) {
-    dasm_put(Dst, 5252);
+    dasm_put(Dst, 5261);
   }
-  dasm_put(Dst, 5261, 1+1, LJ_TSTR);
+  dasm_put(Dst, 5270, 1+1, LJ_TSTR);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5283, Dt5(->len));
+    dasm_put(Dst, 5292, Dt5(->len));
   } else if (sse) {
-    dasm_put(Dst, 5291, Dt5(->len));
+    dasm_put(Dst, 5300, Dt5(->len));
   } else {
-    dasm_put(Dst, 5302, Dt5(->len));
+    dasm_put(Dst, 5311, Dt5(->len));
   }
-  dasm_put(Dst, 5310, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
+  dasm_put(Dst, 5319, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5286);
+    dasm_put(Dst, 5295);
   } else if (sse) {
-    dasm_put(Dst, 5348);
+    dasm_put(Dst, 5357);
   } else {
-    dasm_put(Dst, 5358);
+    dasm_put(Dst, 5367);
   }
-  dasm_put(Dst, 5371, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
+  dasm_put(Dst, 5380, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5402);
+    dasm_put(Dst, 5411);
   } else if (sse) {
-    dasm_put(Dst, 5425);
+    dasm_put(Dst, 5434);
   } else {
-    dasm_put(Dst, 5451);
+    dasm_put(Dst, 5460);
   }
-  dasm_put(Dst, 5475, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
+  dasm_put(Dst, 5484, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5583);
+    dasm_put(Dst, 5592);
   } else if (sse) {
-    dasm_put(Dst, 5595);
+    dasm_put(Dst, 5604);
   } else {
-    dasm_put(Dst, 5610);
+    dasm_put(Dst, 5619);
   }
-  dasm_put(Dst, 5622, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 5631, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2521);
+    dasm_put(Dst, 2530);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5639, Dt5(->len));
+  dasm_put(Dst, 5648, Dt5(->len));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5649);
+    dasm_put(Dst, 5658);
   } else if (sse) {
-    dasm_put(Dst, 5653);
+    dasm_put(Dst, 5662);
   } else {
   }
-  dasm_put(Dst, 5660, sizeof(GCstr)-1);
-  dasm_put(Dst, 5735, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 5794, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 5669, sizeof(GCstr)-1);
+  dasm_put(Dst, 5744, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 5803, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5811);
+    dasm_put(Dst, 5820);
   } else if (sse) {
-    dasm_put(Dst, 5819);
+    dasm_put(Dst, 5828);
   } else {
-    dasm_put(Dst, 5830);
+    dasm_put(Dst, 5839);
   }
-  dasm_put(Dst, 5846, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 5911, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 5974, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
-  dasm_put(Dst, 6045, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6130, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6200, 1+1, LJ_TTAB);
+  dasm_put(Dst, 5855, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 5920, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 5983, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
+  dasm_put(Dst, 6054, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6139, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6209, 1+1, LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6268);
+    dasm_put(Dst, 6277);
   } else if (sse) {
-    dasm_put(Dst, 6275);
+    dasm_put(Dst, 6284);
   } else {
   }
-  dasm_put(Dst, 6285, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6294, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6301);
+  dasm_put(Dst, 6310);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
   dasm_put(Dst, 106);
   if (LJ_DUALNUM || sse) {
     if (!sse) {
     }
-    dasm_put(Dst, 6342);
+    dasm_put(Dst, 6351);
   } else {
   }
-  dasm_put(Dst, 6347, 1+1);
+  dasm_put(Dst, 6356, 1+1);
   if (sse) {
-  dasm_put(Dst, 6358, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6367, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6368);
+  dasm_put(Dst, 6377);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6394);
+  dasm_put(Dst, 6403);
   } else {
   }
-  dasm_put(Dst, 6409, LJ_TISNUM);
+  dasm_put(Dst, 6418, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6434);
+  dasm_put(Dst, 6443);
   } else {
-  dasm_put(Dst, 6454);
+  dasm_put(Dst, 6463);
   }
   if (sse) {
-  dasm_put(Dst, 6459);
+  dasm_put(Dst, 6468);
   } else {
   }
-  dasm_put(Dst, 6476, 1+1);
+  dasm_put(Dst, 6485, 1+1);
   if (sse) {
-  dasm_put(Dst, 6358, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6367, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6368);
+  dasm_put(Dst, 6377);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6394);
+  dasm_put(Dst, 6403);
   } else {
   }
-  dasm_put(Dst, 6409, LJ_TISNUM);
+  dasm_put(Dst, 6418, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6494);
+  dasm_put(Dst, 6503);
   } else {
-  dasm_put(Dst, 6454);
+  dasm_put(Dst, 6463);
   }
   if (sse) {
-  dasm_put(Dst, 6514);
+  dasm_put(Dst, 6523);
   } else {
   }
-  dasm_put(Dst, 6531, 1+1);
+  dasm_put(Dst, 6540, 1+1);
   if (sse) {
-  dasm_put(Dst, 6358, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6367, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
-  dasm_put(Dst, 6368);
+  dasm_put(Dst, 6377);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6394);
+  dasm_put(Dst, 6403);
   } else {
   }
-  dasm_put(Dst, 6409, LJ_TISNUM);
+  dasm_put(Dst, 6418, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6549);
+  dasm_put(Dst, 6558);
   } else {
-  dasm_put(Dst, 6454);
+  dasm_put(Dst, 6463);
   }
   if (sse) {
-  dasm_put(Dst, 6569);
+  dasm_put(Dst, 6578);
   } else {
   }
-  dasm_put(Dst, 6586, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6595, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6609, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6618, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6633);
+  dasm_put(Dst, 6642);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6342);
+    dasm_put(Dst, 6351);
   } else if (sse) {
-    dasm_put(Dst, 6639);
+    dasm_put(Dst, 6648);
   } else {
   }
-  dasm_put(Dst, 6651);
+  dasm_put(Dst, 6660);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6662, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6671, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6678, LJ_TISNUM);
+  dasm_put(Dst, 6687, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6693, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6702, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6760);
+  dasm_put(Dst, 6769);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6767, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6776, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6678, LJ_TISNUM);
+  dasm_put(Dst, 6687, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6783, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6792, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6850);
+  dasm_put(Dst, 6859);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6858, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6867, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6678, LJ_TISNUM);
+  dasm_put(Dst, 6687, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6874, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6883, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6941);
+  dasm_put(Dst, 6950);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6949, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6958, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6678, LJ_TISNUM);
+  dasm_put(Dst, 6687, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 6965, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6974, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 7032);
+  dasm_put(Dst, 7041);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7039, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7048, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6377);
+  dasm_put(Dst, 6386);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6318, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 6327, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 6678, LJ_TISNUM);
+  dasm_put(Dst, 6687, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7055, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
+  dasm_put(Dst, 7064, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32));
   } else {
   }
-  dasm_put(Dst, 7122, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
-  dasm_put(Dst, 7198, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 7325, Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7131, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
+  dasm_put(Dst, 7207, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 7334, Dt1(->top), Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7364, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
+  dasm_put(Dst, 7373, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
 #endif
-  dasm_put(Dst, 7395, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
-  dasm_put(Dst, 7446, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
+  dasm_put(Dst, 7404, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
+  dasm_put(Dst, 7455, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
 #if LJ_HASJIT
-  dasm_put(Dst, 7513, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
+  dasm_put(Dst, 7522, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
 #endif
-  dasm_put(Dst, 7560);
+  dasm_put(Dst, 7569);
 #if LJ_HASJIT
-  dasm_put(Dst, 7390);
+  dasm_put(Dst, 7399);
 #endif
-  dasm_put(Dst, 7567);
+  dasm_put(Dst, 7576);
 #if LJ_HASJIT
-  dasm_put(Dst, 7570);
+  dasm_put(Dst, 7579);
 #endif
-  dasm_put(Dst, 7580, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7589, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7614);
+  dasm_put(Dst, 7623);
 #endif
-  dasm_put(Dst, 7619, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7628, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 7650, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
+  dasm_put(Dst, 7659, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
 #endif
-  dasm_put(Dst, 7880);
+  dasm_put(Dst, 7889);
 #if LJ_HASJIT
-  dasm_put(Dst, 7883, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
-  dasm_put(Dst, 8025);
+  dasm_put(Dst, 7892, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
+  dasm_put(Dst, 8034);
 #endif
-  dasm_put(Dst, 8051);
+  dasm_put(Dst, 8060);
   if (!sse) {
-  dasm_put(Dst, 8054);
+  dasm_put(Dst, 8063);
   }
-  dasm_put(Dst, 8099, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8108, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   if (!sse) {
-  dasm_put(Dst, 8185);
+  dasm_put(Dst, 8194);
   }
-  dasm_put(Dst, 8230, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32));
+  dasm_put(Dst, 8239, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32));
   if (!sse) {
-  dasm_put(Dst, 8316);
+  dasm_put(Dst, 8325);
   }
-  dasm_put(Dst, 8355, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8364, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   if (sse) {
-    dasm_put(Dst, 8444, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+    dasm_put(Dst, 8453, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
   } else {
-    dasm_put(Dst, 8558);
+    dasm_put(Dst, 8567);
   }
-  dasm_put(Dst, 8605);
+  dasm_put(Dst, 8614);
   if (!sse) {
   } else {
-    dasm_put(Dst, 8679);
+    dasm_put(Dst, 8688);
   }
-  dasm_put(Dst, 8682);
-  dasm_put(Dst, 8767, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
-  dasm_put(Dst, 8870, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32));
-  dasm_put(Dst, 9026);
+  dasm_put(Dst, 8691);
+  dasm_put(Dst, 8776, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32));
+  dasm_put(Dst, 8879, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32));
+  dasm_put(Dst, 9035);
 #if LJ_HASJIT
   if (sse) {
-    dasm_put(Dst, 9067);
-    dasm_put(Dst, 9137);
-    dasm_put(Dst, 9210);
+    dasm_put(Dst, 9076);
+    dasm_put(Dst, 9146);
+    dasm_put(Dst, 9219);
   } else {
-    dasm_put(Dst, 9260);
-    dasm_put(Dst, 9352);
+    dasm_put(Dst, 9269);
+    dasm_put(Dst, 9361);
   }
-  dasm_put(Dst, 9398);
+  dasm_put(Dst, 9407);
 #endif
-  dasm_put(Dst, 9402);
+  dasm_put(Dst, 9411);
   if (sse) {
-    dasm_put(Dst, 9405, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
-    dasm_put(Dst, 9494, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
+    dasm_put(Dst, 9414, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
+    dasm_put(Dst, 9503, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32));
   } else {
-    dasm_put(Dst, 9618);
-    dasm_put(Dst, 9701);
+    dasm_put(Dst, 9627);
+    dasm_put(Dst, 9710);
     if (cmov) {
-    dasm_put(Dst, 9756);
+    dasm_put(Dst, 9765);
     } else {
-    dasm_put(Dst, 9775);
+    dasm_put(Dst, 9784);
     }
-    dasm_put(Dst, 9398);
+    dasm_put(Dst, 9407);
   }
-  dasm_put(Dst, 9816);
+  dasm_put(Dst, 9825);
 #ifdef LUA_USE_ASSERT
-  dasm_put(Dst, 9400);
+  dasm_put(Dst, 9409);
+#endif
+  dasm_put(Dst, 9853);
+#if LJ_HASFFI
+#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
+  dasm_put(Dst, 9857, GG_G2DISP, Dt2(->ctype_state), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[0]), DtE(->cb.fpr[1]), DtE(->cb.fpr[2]), DtE(->cb.fpr[3]), CFRAME_SIZE+4*8, DtE(->cb.stack), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), Dt7(->pc));
 #endif
-  dasm_put(Dst, 9844);
+  dasm_put(Dst, 9984);
 #if LJ_HASFFI
-#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
-  dasm_put(Dst, 9848, DtE(->spadj));
+  dasm_put(Dst, 9987, DISPATCH_GL(ctype_state), DtE(->L), Dt1(->base), Dt1(->top), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]));
+#endif
+  dasm_put(Dst, 10028);
+#if LJ_HASFFI
+#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
+  dasm_put(Dst, 10031, DtF(->spadj));
 #if LJ_TARGET_WINDOWS
 #endif
-  dasm_put(Dst, 9863, DtE(->nsp), offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, DtE(->nfpr), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3]), DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]));
-  dasm_put(Dst, 9944, DtE(->func), DtE(->gpr[0]), DtE(->fpr[0]));
+  dasm_put(Dst, 10046, DtF(->nsp), offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, DtF(->nfpr), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]));
+  dasm_put(Dst, 10127, DtF(->func), DtF(->gpr[0]), DtF(->fpr[0]));
 #if LJ_TARGET_WINDOWS
 #endif
-  dasm_put(Dst, 9957);
+  dasm_put(Dst, 10140);
 #endif
 }
 
@@ -1853,7 +1886,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
 static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 {
   int vk = 0;
-  dasm_put(Dst, 9965, defop);
+  dasm_put(Dst, 780, defop);
 
   switch (op) {
 
@@ -1864,302 +1897,302 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 9967, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10148, LJ_TISNUM, LJ_TISNUM);
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 9997);
+      dasm_put(Dst, 10178);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10002);
+      dasm_put(Dst, 10183);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10007);
+      dasm_put(Dst, 10188);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10012);
+      dasm_put(Dst, 10193);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10017, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10198, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10071);
+       dasm_put(Dst, 10252);
       } else {
-       dasm_put(Dst, 10082);
+       dasm_put(Dst, 10263);
       }
-      dasm_put(Dst, 10093);
+      dasm_put(Dst, 10274);
       if (sse) {
-       dasm_put(Dst, 10100);
+       dasm_put(Dst, 10281);
        switch (op) {
        case BC_ISLT:
-       dasm_put(Dst, 10120);
+       dasm_put(Dst, 10301);
        break;
        case BC_ISGE:
-       dasm_put(Dst, 10125);
+       dasm_put(Dst, 10306);
        break;
        case BC_ISLE:
-       dasm_put(Dst, 10130);
+       dasm_put(Dst, 10311);
        break;
        case BC_ISGT:
-       dasm_put(Dst, 10135);
+       dasm_put(Dst, 10316);
        break;
        default: break;  /* Shut up GCC. */
        }
-       dasm_put(Dst, 10140);
+       dasm_put(Dst, 10321);
       } else {
-       dasm_put(Dst, 10145);
+       dasm_put(Dst, 10326);
       }
     } else {
-      dasm_put(Dst, 10153, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10334, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10174);
+      dasm_put(Dst, 10355);
     } else {
-      dasm_put(Dst, 10195);
+      dasm_put(Dst, 10376);
       if (cmov) {
-      dasm_put(Dst, 10211);
+      dasm_put(Dst, 10392);
       } else {
-      dasm_put(Dst, 10217);
+      dasm_put(Dst, 10398);
       }
     }
     if (LJ_DUALNUM) {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 10120);
+      dasm_put(Dst, 10301);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10125);
+      dasm_put(Dst, 10306);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10130);
+      dasm_put(Dst, 10311);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10135);
+      dasm_put(Dst, 10316);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10140);
+      dasm_put(Dst, 10321);
     } else {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 10224);
+      dasm_put(Dst, 768);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 10229);
+      dasm_put(Dst, 10405);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 10234);
+      dasm_put(Dst, 10410);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 10239);
+      dasm_put(Dst, 10415);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 10244, -BCBIAS_J*4);
+      dasm_put(Dst, 10420, -BCBIAS_J*4);
     }
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
-    dasm_put(Dst, 10276);
+    dasm_put(Dst, 10452);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10284, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10460, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 10309);
+       dasm_put(Dst, 10485);
       } else {
-       dasm_put(Dst, 10314);
+       dasm_put(Dst, 10490);
       }
-      dasm_put(Dst, 10319, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10495, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10371);
+       dasm_put(Dst, 10547);
       } else {
-       dasm_put(Dst, 10378);
+       dasm_put(Dst, 10554);
       }
-      dasm_put(Dst, 10382);
+      dasm_put(Dst, 10558);
       if (sse) {
-       dasm_put(Dst, 10393);
+       dasm_put(Dst, 10569);
       } else {
-       dasm_put(Dst, 10405);
+       dasm_put(Dst, 10581);
       }
-      dasm_put(Dst, 10412);
+      dasm_put(Dst, 10588);
     } else {
-      dasm_put(Dst, 10417, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10593, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10436);
+      dasm_put(Dst, 10612);
     } else {
-      dasm_put(Dst, 10454);
+      dasm_put(Dst, 10630);
       if (cmov) {
-      dasm_put(Dst, 10211);
+      dasm_put(Dst, 10392);
       } else {
-      dasm_put(Dst, 10217);
+      dasm_put(Dst, 10398);
       }
     }
   iseqne_fp:
     if (vk) {
-      dasm_put(Dst, 10467);
+      dasm_put(Dst, 10643);
     } else {
-      dasm_put(Dst, 10476);
+      dasm_put(Dst, 10652);
     }
   iseqne_end:
     if (vk) {
-      dasm_put(Dst, 10485, -BCBIAS_J*4);
+      dasm_put(Dst, 10661, -BCBIAS_J*4);
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4629);
+       dasm_put(Dst, 4638);
       }
     } else {
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4629);
+       dasm_put(Dst, 4638);
       }
-      dasm_put(Dst, 10500, -BCBIAS_J*4);
+      dasm_put(Dst, 10676, -BCBIAS_J*4);
     }
     if (LJ_DUALNUM && (op == BC_ISEQV || op == BC_ISNEV ||
                       op == BC_ISEQN || op == BC_ISNEN)) {
-      dasm_put(Dst, 10515);
+      dasm_put(Dst, 10691);
     } else {
-      dasm_put(Dst, 10256);
+      dasm_put(Dst, 10432);
     }
     if (op == BC_ISEQV || op == BC_ISNEV) {
-      dasm_put(Dst, 9941);
+      dasm_put(Dst, 10124);
       if (LJ_HASFFI) {
-       dasm_put(Dst, 10520, LJ_TCDATA, LJ_TCDATA);
+       dasm_put(Dst, 10696, LJ_TCDATA, LJ_TCDATA);
       }
-      dasm_put(Dst, 10539, LJ_TISPRI, LJ_TISTABUD, LJ_TUDATA, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
+      dasm_put(Dst, 10715, LJ_TISPRI, LJ_TISTABUD, LJ_TUDATA, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 10603);
+       dasm_put(Dst, 10779);
       } else {
-       dasm_put(Dst, 10607);
+       dasm_put(Dst, 10783);
       }
-      dasm_put(Dst, 10613);
+      dasm_put(Dst, 10789);
     } else if (LJ_HASFFI) {
-      dasm_put(Dst, 10618, LJ_TCDATA);
+      dasm_put(Dst, 10794, LJ_TCDATA);
       if (LJ_DUALNUM && vk) {
-       dasm_put(Dst, 10625);
+       dasm_put(Dst, 10801);
       } else {
-       dasm_put(Dst, 10598);
+       dasm_put(Dst, 10774);
       }
-      dasm_put(Dst, 10630);
+      dasm_put(Dst, 10806);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 10635, LJ_TSTR);
+    dasm_put(Dst, 10811, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 10471);
+      dasm_put(Dst, 10647);
     } else {
-      dasm_put(Dst, 765);
+      dasm_put(Dst, 2929);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 10661);
+    dasm_put(Dst, 10837);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10669, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 10845, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 10309);
+       dasm_put(Dst, 10485);
       } else {
-       dasm_put(Dst, 10314);
+       dasm_put(Dst, 10490);
       }
-      dasm_put(Dst, 10694, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 10870, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 10742);
+       dasm_put(Dst, 10918);
       } else {
-       dasm_put(Dst, 10749);
+       dasm_put(Dst, 10925);
       }
-      dasm_put(Dst, 10753);
+      dasm_put(Dst, 10929);
       if (sse) {
-       dasm_put(Dst, 10760);
+       dasm_put(Dst, 10936);
       } else {
-       dasm_put(Dst, 10772);
+       dasm_put(Dst, 10948);
       }
-      dasm_put(Dst, 10412);
+      dasm_put(Dst, 10588);
     } else {
-      dasm_put(Dst, 10779, LJ_TISNUM);
+      dasm_put(Dst, 10955, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 10788);
+      dasm_put(Dst, 10964);
     } else {
-      dasm_put(Dst, 10806);
+      dasm_put(Dst, 10982);
       if (cmov) {
-      dasm_put(Dst, 10211);
+      dasm_put(Dst, 10392);
       } else {
-      dasm_put(Dst, 10217);
+      dasm_put(Dst, 10398);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 10819);
+    dasm_put(Dst, 10995);
     if (!LJ_HASFFI) goto iseqne_test;
     if (vk) {
-      dasm_put(Dst, 10833, -BCBIAS_J*4, LJ_TCDATA);
+      dasm_put(Dst, 11009, -BCBIAS_J*4, LJ_TCDATA);
     } else {
-      dasm_put(Dst, 10883, LJ_TCDATA, -BCBIAS_J*4);
+      dasm_put(Dst, 11059, LJ_TCDATA, -BCBIAS_J*4);
     }
     break;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 10927, LJ_TISTRUECOND);
+    dasm_put(Dst, 11103, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 10239);
+      dasm_put(Dst, 10415);
     } else {
-      dasm_put(Dst, 10234);
+      dasm_put(Dst, 10410);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 10939);
+      dasm_put(Dst, 11115);
     }
-    dasm_put(Dst, 10244, -BCBIAS_J*4);
+    dasm_put(Dst, 10420, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 10950);
+    dasm_put(Dst, 11126);
     break;
   case BC_NOT:
-    dasm_put(Dst, 10978, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 11154, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11014, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11190, LJ_TISNUM, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 11091, LJ_TISNUM);
+      dasm_put(Dst, 11267, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 11102, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
+      dasm_put(Dst, 11278, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32));
     } else {
-      dasm_put(Dst, 11127);
+      dasm_put(Dst, 11303);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10515);
+      dasm_put(Dst, 10691);
     } else {
-      dasm_put(Dst, 10256);
+      dasm_put(Dst, 10432);
     }
     break;
   case BC_LEN:
-    dasm_put(Dst, 11136, LJ_TSTR);
+    dasm_put(Dst, 11312, LJ_TSTR);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11150, Dt5(->len), LJ_TISNUM);
+      dasm_put(Dst, 11326, Dt5(->len), LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 11164, Dt5(->len));
+      dasm_put(Dst, 11340, Dt5(->len));
     } else {
-      dasm_put(Dst, 11182, Dt5(->len));
+      dasm_put(Dst, 11358, Dt5(->len));
     }
-    dasm_put(Dst, 11191, LJ_TTAB);
+    dasm_put(Dst, 11367, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 11226, Dt6(->metatable));
+    dasm_put(Dst, 11402, Dt6(->metatable));
 #endif
-    dasm_put(Dst, 11240);
+    dasm_put(Dst, 11416);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 11249);
+      dasm_put(Dst, 11425);
     } else {
     }
-    dasm_put(Dst, 11255);
+    dasm_put(Dst, 11431);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 11268, Dt6(->nomm), 1<<MM_len);
+    dasm_put(Dst, 11444, Dt6(->nomm), 1<<MM_len);
 #endif
     break;
 
@@ -2168,605 +2201,605 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11292, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11468, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11325, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11501, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11358, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11534, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11391, LJ_TISNUM);
+    dasm_put(Dst, 11567, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11160);
+    dasm_put(Dst, 11336);
     } else {
-    dasm_put(Dst, 10946);
+    dasm_put(Dst, 11122);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     } else {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11420);
+    dasm_put(Dst, 11596);
     } else {
-    dasm_put(Dst, 11434);
+    dasm_put(Dst, 11610);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11465);
+    dasm_put(Dst, 11641);
     } else {
-    dasm_put(Dst, 11479);
+    dasm_put(Dst, 11655);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11509);
+    dasm_put(Dst, 11685);
     } else {
-    dasm_put(Dst, 11523);
+    dasm_put(Dst, 11699);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     }
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11531, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11707, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11564, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11740, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11597, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11773, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11391, LJ_TISNUM);
+    dasm_put(Dst, 11567, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11160);
+    dasm_put(Dst, 11336);
     } else {
-    dasm_put(Dst, 10946);
+    dasm_put(Dst, 11122);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     } else {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11630);
+    dasm_put(Dst, 11806);
     } else {
-    dasm_put(Dst, 11644);
+    dasm_put(Dst, 11820);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11652);
+    dasm_put(Dst, 11828);
     } else {
-    dasm_put(Dst, 11666);
+    dasm_put(Dst, 11842);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11674);
+    dasm_put(Dst, 11850);
     } else {
-    dasm_put(Dst, 11688);
+    dasm_put(Dst, 11864);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     }
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11696, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11872, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 11730, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11906, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 11764, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11940, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 11391, LJ_TISNUM);
+    dasm_put(Dst, 11567, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 11160);
+    dasm_put(Dst, 11336);
     } else {
-    dasm_put(Dst, 10946);
+    dasm_put(Dst, 11122);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     } else {
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11798);
+    dasm_put(Dst, 11974);
     } else {
-    dasm_put(Dst, 11812);
+    dasm_put(Dst, 11988);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11820);
+    dasm_put(Dst, 11996);
     } else {
-    dasm_put(Dst, 11834);
+    dasm_put(Dst, 12010);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11842);
+    dasm_put(Dst, 12018);
     } else {
-    dasm_put(Dst, 11856);
+    dasm_put(Dst, 12032);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     }
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11864);
+    dasm_put(Dst, 12040);
     } else {
-    dasm_put(Dst, 11878);
+    dasm_put(Dst, 12054);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11886);
+    dasm_put(Dst, 12062);
     } else {
-    dasm_put(Dst, 11900);
+    dasm_put(Dst, 12076);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11908);
+    dasm_put(Dst, 12084);
     } else {
-    dasm_put(Dst, 11922);
+    dasm_put(Dst, 12098);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
   case BC_MODVN:
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11930);
+    dasm_put(Dst, 12106);
     } else {
-    dasm_put(Dst, 11944);
+    dasm_put(Dst, 12120);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11952);
+    dasm_put(Dst, 12128);
     } else {
-    dasm_put(Dst, 11966);
+    dasm_put(Dst, 12142);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11974);
+    dasm_put(Dst, 12150);
     } else {
-    dasm_put(Dst, 11988);
+    dasm_put(Dst, 12164);
     }
       break;
     }
-    dasm_put(Dst, 11996);
+    dasm_put(Dst, 12172);
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
   case BC_MODNV: case BC_MODVV:
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11930);
+    dasm_put(Dst, 12106);
     } else {
-    dasm_put(Dst, 11944);
+    dasm_put(Dst, 12120);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11952);
+    dasm_put(Dst, 12128);
     } else {
-    dasm_put(Dst, 11966);
+    dasm_put(Dst, 12142);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11974);
+    dasm_put(Dst, 12150);
     } else {
-    dasm_put(Dst, 11988);
+    dasm_put(Dst, 12164);
     }
       break;
     }
-    dasm_put(Dst, 12002);
+    dasm_put(Dst, 12178);
     break;
   case BC_POW:
-    dasm_put(Dst, 11284);
+    dasm_put(Dst, 11460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 11397, LJ_TISNUM);
+    dasm_put(Dst, 11573, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11409, LJ_TISNUM);
+    dasm_put(Dst, 11585, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11930);
+    dasm_put(Dst, 12106);
     } else {
-    dasm_put(Dst, 11944);
+    dasm_put(Dst, 12120);
     }
       break;
     case 1:
-    dasm_put(Dst, 11442, LJ_TISNUM);
+    dasm_put(Dst, 11618, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 11454, LJ_TISNUM);
+    dasm_put(Dst, 11630, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 11952);
+    dasm_put(Dst, 12128);
     } else {
-    dasm_put(Dst, 11966);
+    dasm_put(Dst, 12142);
     }
       break;
     default:
-    dasm_put(Dst, 11487, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 11663, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 11974);
+    dasm_put(Dst, 12150);
     } else {
-    dasm_put(Dst, 11988);
+    dasm_put(Dst, 12164);
     }
       break;
     }
-    dasm_put(Dst, 12007);
+    dasm_put(Dst, 12183);
     if (sse) {
-    dasm_put(Dst, 11120);
+    dasm_put(Dst, 11296);
     } else {
-    dasm_put(Dst, 11132);
+    dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
 
   case BC_CAT:
-    dasm_put(Dst, 12011, Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12187, Dt1(->base), Dt1(->base));
     break;
 
   /* -- Constant ops ------------------------------------------------------ */
 
   case BC_KSTR:
-    dasm_put(Dst, 12094, LJ_TSTR);
+    dasm_put(Dst, 12270, LJ_TSTR);
     break;
   case BC_KCDATA:
 #if LJ_HASFFI
-    dasm_put(Dst, 12094, LJ_TCDATA);
+    dasm_put(Dst, 12270, LJ_TCDATA);
 #endif
     break;
   case BC_KSHORT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12129, LJ_TISNUM);
+      dasm_put(Dst, 12305, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 12141);
+      dasm_put(Dst, 12317);
     } else {
-      dasm_put(Dst, 12156);
+      dasm_put(Dst, 12332);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 12164);
+      dasm_put(Dst, 12340);
     } else {
-      dasm_put(Dst, 12177);
+      dasm_put(Dst, 12353);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
   case BC_KPRI:
-    dasm_put(Dst, 12184);
+    dasm_put(Dst, 12360);
     break;
   case BC_KNIL:
-    dasm_put(Dst, 12212, LJ_TNIL);
+    dasm_put(Dst, 12388, LJ_TNIL);
     break;
 
   /* -- Upvalue and function ops ------------------------------------------ */
 
   case BC_UGET:
-    dasm_put(Dst, 12259, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12435, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETV:
 #define TV2MARKOFS \
  ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv))
-    dasm_put(Dst, 12299, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
-    dasm_put(Dst, 12390);
+    dasm_put(Dst, 12475, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
+    dasm_put(Dst, 12566);
     break;
 #undef TV2MARKOFS
   case BC_USETS:
-    dasm_put(Dst, 12402, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
+    dasm_put(Dst, 12578, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
     break;
   case BC_USETN:
-    dasm_put(Dst, 12495);
+    dasm_put(Dst, 12671);
     if (sse) {
-      dasm_put(Dst, 12500);
+      dasm_put(Dst, 12676);
     } else {
-      dasm_put(Dst, 10775);
+      dasm_put(Dst, 10951);
     }
-    dasm_put(Dst, 12507, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12683, offsetof(GCfuncL, uvptr), DtA(->v));
     if (sse) {
-      dasm_put(Dst, 12516);
+      dasm_put(Dst, 12692);
     } else {
-      dasm_put(Dst, 12522);
+      dasm_put(Dst, 12698);
     }
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
   case BC_USETP:
-    dasm_put(Dst, 12525, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 12701, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_UCLO:
-    dasm_put(Dst, 12564, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 12740, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
     break;
 
   case BC_FNEW:
-    dasm_put(Dst, 12619, Dt1(->base), Dt1(->base), LJ_TFUNC);
+    dasm_put(Dst, 12795, Dt1(->base), Dt1(->base), LJ_TFUNC);
     break;
 
   /* -- Table ops --------------------------------------------------------- */
 
   case BC_TNEW:
-    dasm_put(Dst, 12685, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 12861, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
     break;
   case BC_TDUP:
-    dasm_put(Dst, 12807, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 12983, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
     break;
 
   case BC_GGET:
-    dasm_put(Dst, 12902, Dt7(->env));
+    dasm_put(Dst, 13078, Dt7(->env));
     break;
   case BC_GSET:
-    dasm_put(Dst, 12921, Dt7(->env));
+    dasm_put(Dst, 13097, Dt7(->env));
     break;
 
   case BC_TGETV:
-    dasm_put(Dst, 12940, LJ_TTAB);
+    dasm_put(Dst, 13116, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12963, LJ_TISNUM);
+      dasm_put(Dst, 13139, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 12977, LJ_TISNUM);
+      dasm_put(Dst, 13153, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 12988);
+       dasm_put(Dst, 13164);
       } else {
       }
-      dasm_put(Dst, 13009);
+      dasm_put(Dst, 13185);
     }
-    dasm_put(Dst, 13014, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
-    dasm_put(Dst, 13105, LJ_TSTR);
+    dasm_put(Dst, 13190, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
+    dasm_put(Dst, 13281, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 13123, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13207, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13299, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13383, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 13278, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 13373, LJ_TNIL);
+    dasm_put(Dst, 13454, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13549, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 13390, LJ_TTAB);
+    dasm_put(Dst, 13566, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12963, LJ_TISNUM);
+      dasm_put(Dst, 13139, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 12977, LJ_TISNUM);
+      dasm_put(Dst, 13153, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 12988);
+       dasm_put(Dst, 13164);
       } else {
       }
-      dasm_put(Dst, 13413);
+      dasm_put(Dst, 13589);
     }
-    dasm_put(Dst, 13418, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
-    dasm_put(Dst, 13498, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13594, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 13674, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETS:
-    dasm_put(Dst, 13555, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 13631, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 13719, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13731, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 13807, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 13895, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETB:
-    dasm_put(Dst, 13810, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
-    dasm_put(Dst, 13904, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 13986, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
+    dasm_put(Dst, 14080, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   case BC_TSETM:
-    dasm_put(Dst, 13950, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
-    dasm_put(Dst, 14093, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 14126, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 14269, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   /* -- Calls and vararg handling ----------------------------------------- */
 
   case BC_CALL: case BC_CALLM:
-    dasm_put(Dst, 11288);
+    dasm_put(Dst, 11464);
     if (op == BC_CALLM) {
-      dasm_put(Dst, 14111);
+      dasm_put(Dst, 14287);
     }
-    dasm_put(Dst, 14116, LJ_TFUNC, Dt7(->pc));
+    dasm_put(Dst, 14292, LJ_TFUNC, Dt7(->pc));
     break;
 
   case BC_CALLMT:
-    dasm_put(Dst, 14111);
+    dasm_put(Dst, 14287);
     break;
   case BC_CALLT:
-    dasm_put(Dst, 14158, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
-    dasm_put(Dst, 14273, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
+    dasm_put(Dst, 14334, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
+    dasm_put(Dst, 14449, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
     break;
 
   case BC_ITERC:
-    dasm_put(Dst, 14344, LJ_TFUNC, 2+1, Dt7(->pc));
+    dasm_put(Dst, 14520, LJ_TFUNC, 2+1, Dt7(->pc));
     break;
 
   case BC_ITERN:
 #if LJ_HASJIT
 #endif
-    dasm_put(Dst, 14415, Dt6(->asize), Dt6(->array), LJ_TNIL);
+    dasm_put(Dst, 14591, Dt6(->asize), Dt6(->array), LJ_TNIL);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11155, LJ_TISNUM);
+      dasm_put(Dst, 11331, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 11249);
+      dasm_put(Dst, 11425);
     } else {
-      dasm_put(Dst, 14461);
+      dasm_put(Dst, 14637);
     }
-    dasm_put(Dst, 14467);
+    dasm_put(Dst, 14643);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 11120);
+      dasm_put(Dst, 11296);
     } else {
-      dasm_put(Dst, 11132);
+      dasm_put(Dst, 11308);
     }
-    dasm_put(Dst, 14480, -BCBIAS_J*4);
+    dasm_put(Dst, 14656, -BCBIAS_J*4);
     if (!LJ_DUALNUM && !sse) {
-      dasm_put(Dst, 14532);
+      dasm_put(Dst, 14708);
     }
-    dasm_put(Dst, 14538, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val));
+    dasm_put(Dst, 14714, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val));
     break;
 
   case BC_ISNEXT:
-    dasm_put(Dst, 14610, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
+    dasm_put(Dst, 14786, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
     break;
 
   case BC_VARG:
-    dasm_put(Dst, 14710, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
-    dasm_put(Dst, 14870, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 14886, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
+    dasm_put(Dst, 15046, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
     break;
 
   /* -- Returns ----------------------------------------------------------- */
 
   case BC_RETM:
-    dasm_put(Dst, 14111);
+    dasm_put(Dst, 14287);
     break;
 
   case BC_RET: case BC_RET0: case BC_RET1:
     if (op != BC_RET0) {
-      dasm_put(Dst, 14936);
+      dasm_put(Dst, 15112);
     }
-    dasm_put(Dst, 14940, FRAME_TYPE);
+    dasm_put(Dst, 15116, FRAME_TYPE);
     switch (op) {
     case BC_RET:
-      dasm_put(Dst, 14959);
+      dasm_put(Dst, 15135);
       break;
     case BC_RET1:
-      dasm_put(Dst, 15011);
+      dasm_put(Dst, 15187);
       /* fallthrough */
     case BC_RET0:
-      dasm_put(Dst, 15021);
+      dasm_put(Dst, 15197);
     default:
       break;
     }
-    dasm_put(Dst, 15032, Dt7(->pc), PC2PROTO(k));
+    dasm_put(Dst, 15208, Dt7(->pc), PC2PROTO(k));
     if (op == BC_RET) {
-      dasm_put(Dst, 15076, LJ_TNIL);
+      dasm_put(Dst, 15252, LJ_TNIL);
     } else {
-      dasm_put(Dst, 15085, LJ_TNIL);
+      dasm_put(Dst, 15261, LJ_TNIL);
     }
-    dasm_put(Dst, 15092, -FRAME_VARG, FRAME_TYPEP);
+    dasm_put(Dst, 15268, -FRAME_VARG, FRAME_TYPEP);
     if (op != BC_RET0) {
-      dasm_put(Dst, 15116);
+      dasm_put(Dst, 15292);
     }
-    dasm_put(Dst, 4708);
+    dasm_put(Dst, 4717);
     break;
 
   /* -- Loops and branches ------------------------------------------------ */
@@ -2774,7 +2807,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FORL:
 #if LJ_HASJIT
-    dasm_put(Dst, 15120, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15296, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -2786,111 +2819,111 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
   case BC_FORI:
   case BC_IFORL:
     vk = (op == BC_IFORL || op == BC_JFORL);
-    dasm_put(Dst, 15141);
+    dasm_put(Dst, 15317);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 15145, LJ_TISNUM);
+      dasm_put(Dst, 15321, LJ_TISNUM);
       if (!vk) {
-       dasm_put(Dst, 15155, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 15331, LJ_TISNUM, LJ_TISNUM);
       } else {
 #ifdef LUA_USE_ASSERT
-       dasm_put(Dst, 15184, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 15360, LJ_TISNUM, LJ_TISNUM);
 #endif
-       dasm_put(Dst, 15203);
+       dasm_put(Dst, 15379);
       }
-      dasm_put(Dst, 15222, LJ_TISNUM);
+      dasm_put(Dst, 15398, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 15233, -BCBIAS_J*4);
+       dasm_put(Dst, 15409, -BCBIAS_J*4);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 15247, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 15423, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 15265, -BCBIAS_J*4);
+       dasm_put(Dst, 15441, -BCBIAS_J*4);
       } else {
-       dasm_put(Dst, 15257, BC_JLOOP);
+       dasm_put(Dst, 15433, BC_JLOOP);
       }
-      dasm_put(Dst, 15279);
+      dasm_put(Dst, 15455);
       if (vk) {
-       dasm_put(Dst, 15303);
+       dasm_put(Dst, 15479);
       }
-      dasm_put(Dst, 15222, LJ_TISNUM);
+      dasm_put(Dst, 15398, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 15312);
+       dasm_put(Dst, 15488);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 15317, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 15493, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 15331);
+       dasm_put(Dst, 15507);
       } else {
-       dasm_put(Dst, 15327, BC_JLOOP);
+       dasm_put(Dst, 15503, BC_JLOOP);
       }
-      dasm_put(Dst, 15336);
+      dasm_put(Dst, 15512);
     } else if (!vk) {
-      dasm_put(Dst, 15343, LJ_TISNUM);
+      dasm_put(Dst, 15519, LJ_TISNUM);
     }
     if (!vk) {
-      dasm_put(Dst, 15349, LJ_TISNUM);
+      dasm_put(Dst, 15525, LJ_TISNUM);
     } else {
 #ifdef LUA_USE_ASSERT
-      dasm_put(Dst, 15363, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 15539, LJ_TISNUM, LJ_TISNUM);
 #endif
     }
-    dasm_put(Dst, 15382);
+    dasm_put(Dst, 15558);
     if (!vk) {
-      dasm_put(Dst, 15386, LJ_TISNUM);
+      dasm_put(Dst, 15562, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 15395);
+      dasm_put(Dst, 15571);
       if (vk) {
-       dasm_put(Dst, 15407);
+       dasm_put(Dst, 15583);
       } else {
-       dasm_put(Dst, 15426);
+       dasm_put(Dst, 15602);
       }
-      dasm_put(Dst, 15431);
+      dasm_put(Dst, 15607);
     } else {
-      dasm_put(Dst, 15444);
+      dasm_put(Dst, 15620);
       if (vk) {
-       dasm_put(Dst, 15450);
+       dasm_put(Dst, 15626);
       } else {
-       dasm_put(Dst, 15466);
+       dasm_put(Dst, 15642);
       }
-      dasm_put(Dst, 15474);
+      dasm_put(Dst, 15650);
       if (cmov) {
-      dasm_put(Dst, 10211);
+      dasm_put(Dst, 10392);
       } else {
-      dasm_put(Dst, 10217);
+      dasm_put(Dst, 10398);
       }
       if (!cmov) {
-       dasm_put(Dst, 15479);
+       dasm_put(Dst, 15655);
       }
     }
     if (op == BC_FORI) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 15485);
+       dasm_put(Dst, 15661);
       } else {
-       dasm_put(Dst, 15490, -BCBIAS_J*4);
+       dasm_put(Dst, 15666, -BCBIAS_J*4);
       }
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 15500, -BCBIAS_J*4, BC_JLOOP);
+      dasm_put(Dst, 15676, -BCBIAS_J*4, BC_JLOOP);
     } else if (op == BC_IFORL) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 15514);
+       dasm_put(Dst, 15690);
       } else {
-       dasm_put(Dst, 15519, -BCBIAS_J*4);
+       dasm_put(Dst, 15695, -BCBIAS_J*4);
       }
     } else {
-      dasm_put(Dst, 15510, BC_JLOOP);
+      dasm_put(Dst, 15686, BC_JLOOP);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 10140);
+      dasm_put(Dst, 10321);
     } else {
-      dasm_put(Dst, 10905);
+      dasm_put(Dst, 11081);
     }
     if (sse) {
-      dasm_put(Dst, 15529);
+      dasm_put(Dst, 15705);
     }
     break;
 
   case BC_ITERL:
 #if LJ_HASJIT
-    dasm_put(Dst, 15120, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15296, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -2899,33 +2932,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IITERL:
-    dasm_put(Dst, 15540, LJ_TNIL);
+    dasm_put(Dst, 15716, LJ_TNIL);
     if (op == BC_JITERL) {
-      dasm_put(Dst, 15555, BC_JLOOP);
+      dasm_put(Dst, 15731, BC_JLOOP);
     } else {
-      dasm_put(Dst, 15569, -BCBIAS_J*4);
+      dasm_put(Dst, 15745, -BCBIAS_J*4);
     }
-    dasm_put(Dst, 10254);
+    dasm_put(Dst, 10430);
     break;
 
   case BC_LOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 15120, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 15296, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
   case BC_ILOOP:
-    dasm_put(Dst, 10256);
+    dasm_put(Dst, 10432);
     break;
 
   case BC_JLOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 15585, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16);
+    dasm_put(Dst, 15761, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16);
 #endif
     break;
 
   case BC_JMP:
-    dasm_put(Dst, 15694, -BCBIAS_J*4);
+    dasm_put(Dst, 15870, -BCBIAS_J*4);
     break;
 
   /* -- Function headers -------------------------------------------------- */
@@ -2939,7 +2972,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FUNCF:
 #if LJ_HASJIT
-    dasm_put(Dst, 15719, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
+    dasm_put(Dst, 15895, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
 #endif
   case BC_FUNCV:  /* NYI: compiled vararg functions. */
     break;
@@ -2949,47 +2982,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IFUNCF:
-    dasm_put(Dst, 15740, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
+    dasm_put(Dst, 15916, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
     if (op == BC_JFUNCF) {
-      dasm_put(Dst, 15770, BC_JLOOP);
+      dasm_put(Dst, 15946, BC_JLOOP);
     } else {
-      dasm_put(Dst, 10256);
+      dasm_put(Dst, 10432);
     }
-    dasm_put(Dst, 15779, LJ_TNIL);
+    dasm_put(Dst, 15955, LJ_TNIL);
     break;
 
   case BC_JFUNCV:
 #if !LJ_HASJIT
     break;
 #endif
-    dasm_put(Dst, 9400);
+    dasm_put(Dst, 9409);
     break;  /* NYI: compiled vararg functions. */
 
   case BC_IFUNCV:
-    dasm_put(Dst, 15801, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
+    dasm_put(Dst, 15977, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
     if (op == BC_JFUNCV) {
-      dasm_put(Dst, 15770, BC_JLOOP);
+      dasm_put(Dst, 15946, BC_JLOOP);
     } else {
-      dasm_put(Dst, 15892, -4+PC2PROTO(k));
+      dasm_put(Dst, 16068, -4+PC2PROTO(k));
     }
-    dasm_put(Dst, 15915, LJ_TNIL);
+    dasm_put(Dst, 16091, LJ_TNIL);
     break;
 
   case BC_FUNCC:
   case BC_FUNCCW:
-    dasm_put(Dst, 15937, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
+    dasm_put(Dst, 16113, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 2372);
+      dasm_put(Dst, 2381);
     } else {
-      dasm_put(Dst, 15967);
+      dasm_put(Dst, 16143);
     }
-    dasm_put(Dst, 15975, DISPATCH_GL(vmstate), ~LJ_VMST_C);
+    dasm_put(Dst, 16151, DISPATCH_GL(vmstate), ~LJ_VMST_C);
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 15984);
+      dasm_put(Dst, 16160);
     } else {
-      dasm_put(Dst, 15988, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 16164, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 15993, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 16169, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
     break;
 
   /* ---------------------------------------------------------------------- */
@@ -3017,7 +3050,7 @@ static int build_backend(BuildCtx *ctx)
 
   build_subroutines(ctx, cmov, sse);
 
-  dasm_put(Dst, 16018);
+  dasm_put(Dst, 16194);
   for (op = 0; op < BC__MAX; op++)
     build_ins(ctx, (BCOp)op, op, cmov, sse);
 
index dd409c5c0202fe2b79c133e989cc3c387a0d9884..d6dfde88a7b908d7aa09606a4ccc08d8ce970397 100644 (file)
 |.if not X64           // x86 stack layout.
 |
 |.define CFRAME_SPACE, aword*7                 // Delta for esp (see <--).
-|.macro saveregs
-|  push ebp; push edi; push esi; push ebx
+|.macro saveregs_
+|  push edi; push esi; push ebx
 |  sub esp, CFRAME_SPACE
 |.endmacro
+|.macro saveregs
+|  push ebp; saveregs_
+|.endmacro
 |.macro restoreregs
 |  add esp, CFRAME_SPACE
 |  pop ebx; pop esi; pop edi; pop ebp
 |.elif X64WIN          // x64/Windows stack layout
 |
 |.define CFRAME_SPACE, aword*5                 // Delta for rsp (see <--).
-|.macro saveregs
-|  push rbp; push rdi; push rsi; push rbx
+|.macro saveregs_
+|  push rdi; push rsi; push rbx
 |  sub rsp, CFRAME_SPACE
 |.endmacro
+|.macro saveregs
+|  push rbp; saveregs_
+|.endmacro
 |.macro restoreregs
 |  add rsp, CFRAME_SPACE
 |  pop rbx; pop rsi; pop rdi; pop rbp
 |.else                 // x64/POSIX stack layout
 |
 |.define CFRAME_SPACE, aword*5                 // Delta for rsp (see <--).
-|.macro saveregs
-|  push rbp; push rbx; push r15; push r14
+|.macro saveregs_
+|  push rbx; push r15; push r14
 |  sub rsp, CFRAME_SPACE
 |.endmacro
+|.macro saveregs
+|  push rbp; saveregs_
+|.endmacro
 |.macro restoreregs
 |  add rsp, CFRAME_SPACE
 |  pop r14; pop r15; pop rbx; pop rbp
@@ -760,14 +769,18 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |  mov PC, [RB-12]                   // Restore PC from [cont|PC].
   |.if X64
   |  movsxd RAa, dword [RB-16]         // May be negative on WIN64 with debug.
-  |  test RA, RA
-  |  jz >1
+#if LJ_HASFFI
+  |  cmp RA, 1
+  |  jbe >1
+#endif
   |  lea KBASEa, qword [=>0]
   |  add RAa, KBASEa
   |.else
   |  mov RA, dword [RB-16]
-  |  test RA, RA
-  |  jz >1
+#if LJ_HASFFI
+  |  cmp RA, 1
+  |  jbe >1
+#endif
   |.endif
   |  mov LFUNC:KBASE, [BASE-8]
   |  mov KBASE, LFUNC:KBASE->pc
@@ -775,11 +788,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |  // BASE = base, RC = result, RB = meta base
   |  jmp RAa                           // Jump to continuation.
   |
-  |1:  // Tail call from C function.
+#if LJ_HASFFI
+  |1:
+  |  je ->cont_ffi_callback            // cont = 1: return from FFI callback.
+  |  // cont = 0: Tail call from C function.
   |  sub RB, BASE
   |  shr RB, 3
   |  lea RD, [RB-1]
   |  jmp ->vm_call_tail
+#endif
   |
   |->cont_cat:                         // BASE = base, RC = result, RB = mbase
   |  movzx RA, PC_RB
@@ -3699,6 +3716,103 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   |//-----------------------------------------------------------------------
   |//-- FFI helper functions -----------------------------------------------
   |//-----------------------------------------------------------------------
+  |
+  |// Handler for callback functions. Callback slot number in ah/al.
+  |->vm_ffi_callback:
+#if LJ_HASFFI
+  |.type CTSTATE, CTState, PC
+  |.if not X64
+  |  sub esp, 16                       // Leave room for SAVE_ERRF etc.
+  |.endif
+  |  saveregs_ // ebp/rbp already saved. ebp now holds global_State *.
+  |  lea DISPATCH, [ebp+GG_G2DISP]
+  |  mov CTSTATE, GL:ebp->ctype_state
+  |  movzx eax, ax
+  |  mov CTSTATE->cb.slot, eax
+  |.if X64
+  |  mov CTSTATE->cb.gpr[0], CARG1
+  |  mov CTSTATE->cb.gpr[1], CARG2
+  |  mov CTSTATE->cb.gpr[2], CARG3
+  |  mov CTSTATE->cb.gpr[3], CARG4
+  |  movsd qword CTSTATE->cb.fpr[0], xmm0
+  |  movsd qword CTSTATE->cb.fpr[1], xmm1
+  |  movsd qword CTSTATE->cb.fpr[2], xmm2
+  |  movsd qword CTSTATE->cb.fpr[3], xmm3
+  |.if X64WIN
+  |  lea rax, [rsp+CFRAME_SIZE+4*8]
+  |.else
+  |  lea rax, [rsp+CFRAME_SIZE]
+  |  mov CTSTATE->cb.gpr[4], CARG5
+  |  mov CTSTATE->cb.gpr[5], CARG6
+  |  movsd qword CTSTATE->cb.fpr[4], xmm4
+  |  movsd qword CTSTATE->cb.fpr[5], xmm5
+  |  movsd qword CTSTATE->cb.fpr[6], xmm6
+  |  movsd qword CTSTATE->cb.fpr[7], xmm7
+  |.endif
+  |  mov CTSTATE->cb.stack, rax
+  |  mov CARG2, rsp
+  |.else
+  |  lea eax, [esp+CFRAME_SIZE+16]
+  |  mov CTSTATE->cb.gpr[0], FCARG1
+  |  mov CTSTATE->cb.gpr[1], FCARG2
+  |  mov CTSTATE->cb.stack, eax
+  |  mov FCARG1, [esp+CFRAME_SIZE+12]  // Move around misplaced retaddr/ebp.
+  |  mov FCARG2, [esp+CFRAME_SIZE+8]
+  |  mov SAVE_RET, FCARG1
+  |  mov SAVE_R4, FCARG2
+  |  mov FCARG2, esp
+  |.endif
+  |  mov SAVE_PC, CTSTATE              // Any value outside of bytecode is ok.
+  |  mov FCARG1, CTSTATE
+  |  call extern lj_ccallback_enter@8  // (CTState *cts, void *cf)
+  |  // lua_State * returned in eax (RD).
+  |  set_vmstate INTERP
+  |  mov BASE, L:RD->base
+  |  mov RD, L:RD->top
+  |  sub RD, BASE
+  |  mov LFUNC:RB, [BASE-8]
+  |  shr RD, 3
+  |  add RD, 1
+  |  ins_callt
+#endif
+  |
+  |->cont_ffi_callback:                        // Return from FFI callback.
+#if LJ_HASFFI
+  |  mov L:RA, SAVE_L
+  |  mov CTSTATE, [DISPATCH+DISPATCH_GL(ctype_state)]
+  |  mov aword CTSTATE->L, L:RAa
+  |  mov L:RA->base, BASE
+  |  mov L:RA->top, RB
+  |  mov FCARG1, CTSTATE
+  |  mov FCARG2, RC
+  |  call extern lj_ccallback_leave@8  // (CTState *cts, TValue *o)
+  |.if X64
+  |  mov rax, CTSTATE->cb.gpr[0]
+  |  movsd xmm0, qword CTSTATE->cb.fpr[0]
+  |  jmp ->vm_leave_unw
+  |.else
+  |  mov L:RB, SAVE_L
+  |  mov eax, CTSTATE->cb.gpr[0]
+  |  mov edx, CTSTATE->cb.gpr[1]
+  |  cmp dword CTSTATE->cb.gpr[2], 1
+  |  jb >7
+  |  je >6
+  |  fld qword CTSTATE->cb.fpr[0].d
+  |  jmp >7
+  |6:
+  |  fld dword CTSTATE->cb.fpr[0].f
+  |7:
+  |  mov ecx, L:RB->top
+  |  movzx ecx, word [ecx+6]           // Get stack adjustment and copy up.
+  |  mov SAVE_L, ecx                   // Must be one slot above SAVE_RET
+  |  restoreregs
+  |  pop ecx                           // Move return addr from SAVE_RET.
+  |  add esp, [esp]                    // Adjust stack.
+  |  add esp, 16
+  |  push ecx
+  |  ret
+  |.endif
+#endif
   |
   |->vm_ffi_call@4:                    // Call C function via FFI.
   |  // Caveat: needs special frame unwinding, see below.
index 8add07c5daff08a7dd27b8ed1b1c129ad423c85d..cd33cf877caca672b2856e1c51e22cb5b8431aad 100644 (file)
@@ -12,7 +12,7 @@
 #define DASM_SECTION_CODE_OP   0
 #define DASM_SECTION_CODE_SUB  1
 #define DASM_MAXSECTION                2
-static const unsigned char build_actionlist[17112] = {
+static const unsigned char build_actionlist[17321] = {
   254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,141,
   76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36,
   20,252,247,198,237,15,132,244,13,248,14,129,252,246,239,252,247,198,237,15,
@@ -49,795 +49,806 @@ static const unsigned char build_actionlist[17112] = {
   56,137,68,36,8,137,76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,
   252,255,210,133,192,15,132,244,15,137,193,190,237,252,233,244,2,248,11,1,
   209,131,230,252,248,137,213,41,252,242,199,68,193,252,252,237,137,200,139,
-  117,252,244,139,77,252,240,133,201,15,132,244,247,255,139,122,252,248,139,
-  191,233,139,191,233,252,255,225,248,1,41,213,193,252,237,3,141,69,252,255,
-  252,233,244,32,248,33,15,182,78,252,255,131,252,237,16,141,12,202,41,252,
-  233,15,132,244,34,252,247,217,193,252,233,3,137,76,36,8,139,72,4,139,0,137,
-  77,4,137,69,0,137,108,36,4,252,233,244,35,248,36,137,68,36,16,199,68,36,20,
-  237,141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41,199,
-  65,4,237,137,205,252,233,244,248,248,37,255,15,182,70,252,254,255,199,68,
-  36,20,237,137,68,36,16,255,252,242,15,42,192,252,242,15,17,68,36,16,255,137,
-  68,36,12,219,68,36,12,221,92,36,16,255,141,68,36,16,252,233,244,247,248,38,
-  15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,2,
-  137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,24,
-  232,251,1,1,139,149,233,133,192,15,132,244,249,248,34,15,182,78,252,253,139,
-  104,4,139,0,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,
-  193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,141,177,233,41,
-  214,139,105,252,248,184,237,252,233,244,30,248,39,137,68,36,16,199,68,36,
-  20,237,141,68,36,16,128,126,252,252,235,15,133,244,247,255,141,139,233,137,
-  41,199,65,4,237,137,205,252,233,244,248,248,40,15,182,70,252,254,255,141,
-  68,36,16,252,233,244,247,248,41,15,182,70,252,254,141,4,194,248,1,15,182,
+  117,252,244,255,139,77,252,240,255,131,252,249,1,15,134,244,247,255,139,122,
+  252,248,139,191,233,139,191,233,252,255,225,255,248,1,15,132,244,32,41,213,
+  193,252,237,3,141,69,252,255,252,233,244,33,255,248,34,15,182,78,252,255,
+  131,252,237,16,141,12,202,41,252,233,15,132,244,35,252,247,217,193,252,233,
+  3,137,76,36,8,139,72,4,139,0,137,77,4,137,69,0,137,108,36,4,252,233,244,36,
+  248,37,137,68,36,16,199,68,36,20,237,141,68,36,16,128,126,252,252,235,15,
+  133,244,247,141,139,233,137,41,199,65,4,237,137,205,252,233,244,248,248,38,
+  15,182,70,252,254,255,199,68,36,20,237,137,68,36,16,255,252,242,15,42,192,
+  252,242,15,17,68,36,16,255,137,68,36,12,219,68,36,12,221,92,36,16,255,141,
+  68,36,16,252,233,244,247,248,39,15,182,70,252,254,141,4,194,248,1,15,182,
   110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48,137,68,36,8,137,
-  44,36,137,149,233,137,116,36,24,232,251,1,2,139,149,233,133,192,15,132,244,
-  249,15,182,78,252,253,139,108,202,4,139,12,202,137,104,4,137,8,248,42,139,
+  44,36,137,149,233,137,116,36,24,232,251,1,1,139,149,233,133,192,15,132,244,
+  249,248,35,15,182,78,252,253,139,104,4,139,0,137,108,202,4,137,4,202,139,
   6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,139,141,
-  233,137,113,252,244,15,182,70,252,253,139,108,194,4,139,4,194,137,105,20,
-  137,65,16,141,177,233,41,214,139,105,252,248,184,237,252,233,244,30,248,43,
-  15,182,110,252,252,141,4,194,141,12,202,137,108,36,12,139,108,36,48,137,68,
-  36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,3,248,3,139,
-  149,233,255,131,252,248,1,15,135,244,44,248,4,141,118,4,15,130,244,252,248,
-  5,15,183,70,252,254,141,180,253,134,233,248,6,139,6,15,182,204,15,182,232,
-  131,198,4,193,232,16,252,255,36,171,248,45,131,198,4,129,120,253,4,239,15,
-  130,244,5,252,233,244,6,248,46,129,120,253,4,239,252,233,244,4,248,47,131,
-  252,238,4,137,108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,
-  149,233,255,137,116,36,24,232,251,1,4,252,233,244,3,248,48,255,131,252,238,
-  4,139,108,36,48,137,149,233,137,252,233,139,86,252,252,137,116,36,24,232,
-  251,1,5,252,233,244,3,255,248,49,255,15,182,110,252,255,255,248,50,141,4,
-  199,252,233,244,247,248,51,255,248,52,141,4,199,141,44,252,234,149,252,233,
-  244,248,248,53,141,4,194,137,197,252,233,244,248,248,54,255,248,55,141,4,
-  194,248,1,141,44,252,234,248,2,141,12,202,137,108,36,8,139,108,36,48,137,
-  68,36,12,15,182,70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,149,233,
-  137,116,36,24,232,251,1,6,139,149,233,133,192,15,132,244,42,248,44,137,193,
-  41,208,137,113,252,244,141,176,233,184,237,252,233,244,28,248,56,139,108,
-  36,48,137,149,233,141,20,194,137,252,233,137,116,36,24,232,251,1,7,139,149,
-  233,255,133,192,15,133,244,44,15,183,70,252,254,139,12,194,252,233,244,57,
-  255,252,233,244,44,255,248,58,141,76,202,8,248,29,137,76,36,20,137,68,36,
-  16,131,252,233,8,141,4,193,139,108,36,48,137,76,36,4,137,68,36,8,137,44,36,
-  137,149,233,137,116,36,24,232,251,1,8,139,149,233,139,76,36,20,139,68,36,
-  16,139,105,252,248,131,192,1,57,215,15,132,244,59,137,202,137,114,252,252,
-  139,181,233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,248,
-  60,139,108,36,48,137,149,233,137,202,137,252,233,137,116,36,24,232,251,1,
-  9,139,149,233,139,70,252,252,15,182,204,15,182,232,193,232,16,252,255,164,
-  253,171,233,248,61,129,252,248,239,15,130,244,62,139,106,4,129,252,253,239,
-  15,131,244,62,139,114,252,252,137,68,36,20,137,106,252,252,139,42,137,106,
-  252,248,131,232,2,15,132,244,248,255,137,209,248,1,131,193,8,139,105,4,137,
-  105,252,252,139,41,137,105,252,248,131,232,1,15,133,244,1,248,2,139,68,36,
-  20,252,233,244,63,248,64,129,252,248,239,15,130,244,62,139,106,4,184,237,
-  252,247,213,57,232,255,15,71,197,255,15,134,244,247,137,232,248,1,255,248,
-  2,139,106,252,248,139,132,253,197,233,139,114,252,252,199,66,252,252,237,
-  137,66,252,248,252,233,244,65,248,66,129,252,248,239,15,130,244,62,139,106,
-  4,139,114,252,252,129,252,253,239,15,133,244,252,248,1,139,42,139,173,233,
-  248,2,133,252,237,199,66,252,252,237,15,132,244,65,139,131,233,199,66,252,
-  252,237,255,137,106,252,248,139,141,233,35,136,233,105,201,239,3,141,233,
-  248,3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,251,248,4,139,
-  137,233,133,201,15,133,244,3,252,233,244,65,248,5,139,105,4,129,252,253,239,
-  255,15,132,244,65,139,1,137,106,252,252,137,66,252,248,252,233,244,65,248,
-  6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,254,189,237,248,
-  8,252,247,213,139,172,253,171,233,252,233,244,2,248,67,129,252,248,239,15,
-  130,244,62,255,129,122,253,4,239,15,133,244,62,139,42,131,189,233,0,15,133,
-  244,62,129,122,253,12,239,15,133,244,62,139,66,8,137,133,233,139,114,252,
-  252,199,66,252,252,237,137,106,252,248,252,246,133,233,235,15,132,244,247,
-  128,165,233,235,139,131,233,137,171,233,137,133,233,248,1,255,252,233,244,
-  65,248,68,129,252,248,239,15,130,244,62,129,122,253,4,239,15,133,244,62,139,
-  2,139,108,36,48,137,68,36,4,137,44,36,137,213,131,194,8,137,84,36,8,232,251,
-  1,10,137,252,234,139,40,139,64,4,139,114,252,252,137,106,252,248,137,66,252,
-  252,252,233,244,65,248,69,129,252,248,239,15,133,244,62,129,122,253,4,239,
-  255,15,133,244,247,139,42,252,233,244,70,248,1,15,135,244,62,255,15,131,244,
-  62,255,252,242,15,16,2,252,233,244,71,255,221,2,252,233,244,72,255,248,73,
-  129,252,248,239,15,130,244,62,139,114,252,252,129,122,253,4,239,15,133,244,
-  249,139,2,248,2,199,66,252,252,237,137,66,252,248,252,233,244,65,248,3,129,
-  122,253,4,239,15,135,244,62,131,187,233,0,15,133,244,62,139,171,233,59,171,
-  233,255,15,130,244,247,232,244,74,248,1,139,108,36,48,137,149,233,137,116,
-  36,24,137,252,233,255,232,251,1,11,255,232,251,1,12,255,139,149,233,252,233,
-  244,2,248,75,129,252,248,239,15,130,244,62,15,132,244,248,248,1,129,122,253,
-  4,239,15,133,244,62,139,108,36,48,137,149,233,137,149,233,139,114,252,252,
-  139,2,137,68,36,4,137,44,36,131,194,8,137,84,36,8,137,116,36,24,232,251,1,
-  13,139,149,233,133,192,15,132,244,249,139,106,8,139,66,12,137,106,252,248,
-  137,66,252,252,139,106,16,139,66,20,137,42,137,66,4,248,76,184,237,255,252,
-  233,244,77,248,2,199,66,12,237,252,233,244,1,248,3,199,66,252,252,237,252,
-  233,244,65,248,78,129,252,248,239,15,130,244,62,139,42,129,122,253,4,239,
-  15,133,244,62,255,131,189,233,0,15,133,244,62,255,139,106,252,248,139,133,
-  233,139,114,252,252,199,66,252,252,237,137,66,252,248,199,66,12,237,184,237,
-  252,233,244,77,248,79,129,252,248,239,15,130,244,62,129,122,253,4,239,15,
-  133,244,62,129,122,253,12,239,255,139,114,252,252,255,139,66,8,131,192,1,
-  199,66,252,252,237,137,66,252,248,255,252,242,15,16,66,8,189,0,0,252,240,
-  63,102,15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192,252,
-  242,15,17,66,252,248,255,221,66,8,217,232,222,193,219,20,36,221,90,252,248,
-  139,4,36,255,139,42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,
-  120,253,4,239,15,132,244,80,139,40,139,64,4,137,42,137,66,4,252,233,244,76,
-  248,2,131,189,233,0,15,132,244,80,137,252,233,137,213,137,194,232,251,1,14,
-  137,252,234,133,192,15,133,244,1,248,80,184,237,252,233,244,77,248,81,255,
-  139,106,252,248,139,133,233,139,114,252,252,199,66,252,252,237,137,66,252,
-  248,255,199,66,12,237,199,66,8,0,0,0,0,255,15,87,192,252,242,15,17,66,8,255,
-  217,252,238,221,90,8,255,184,237,252,233,244,77,248,82,129,252,248,239,15,
-  130,244,62,141,74,8,131,232,1,190,237,248,1,15,182,171,233,193,252,237,235,
-  131,229,1,1,252,238,252,233,244,28,248,83,129,252,248,239,15,130,244,62,129,
-  122,253,12,239,15,133,244,62,255,139,106,4,137,106,12,199,66,4,237,139,42,
-  139,114,8,137,106,8,137,50,141,74,16,131,232,2,190,237,252,233,244,1,248,
-  84,129,252,248,239,15,130,244,62,139,42,139,114,252,252,137,116,36,24,137,
-  44,36,129,122,253,4,239,15,133,244,62,131,189,233,0,15,133,244,62,128,189,
-  233,235,15,135,244,62,139,141,233,15,132,244,247,255,59,141,233,15,132,244,
-  62,248,1,141,116,193,252,240,59,181,233,15,135,244,62,137,181,233,139,108,
-  36,48,137,149,233,131,194,8,137,149,233,141,108,194,232,41,252,245,57,206,
-  15,132,244,249,248,2,139,68,46,4,137,70,252,252,139,4,46,137,70,252,248,131,
-  252,238,8,57,206,15,133,244,2,248,3,137,76,36,4,49,201,137,76,36,12,137,76,
-  36,8,232,244,25,199,131,233,237,255,139,108,36,48,139,52,36,139,149,233,129,
-  252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,137,142,233,137,
-  252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,233,15,135,244,
-  255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,
-  252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,237,248,7,139,116,36,24,
-  137,68,36,20,185,252,248,252,255,252,255,252,255,252,247,198,237,255,15,132,
-  244,13,252,233,244,14,248,8,199,66,252,252,237,139,142,233,131,252,233,8,
-  137,142,233,139,1,137,2,139,65,4,137,66,4,184,237,252,233,244,7,248,9,139,
-  12,36,137,185,233,137,252,242,137,252,233,232,251,1,0,139,52,36,139,149,233,
-  252,233,244,4,248,85,139,106,252,248,139,173,233,139,114,252,252,137,116,
-  36,24,137,44,36,131,189,233,0,15,133,244,62,255,128,189,233,235,15,135,244,
-  62,139,141,233,15,132,244,247,59,141,233,15,132,244,62,248,1,141,116,193,
-  252,248,59,181,233,15,135,244,62,137,181,233,139,108,36,48,137,149,233,137,
-  149,233,141,108,194,252,240,41,252,245,57,206,15,132,244,249,248,2,255,139,
-  68,46,4,137,70,252,252,139,4,46,137,70,252,248,131,252,238,8,57,206,15,133,
-  244,2,248,3,137,76,36,4,49,201,137,76,36,12,137,76,36,8,232,244,25,199,131,
-  233,237,139,108,36,48,139,52,36,139,149,233,129,252,248,239,15,135,244,254,
-  248,4,139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,
-  141,4,50,193,252,238,3,59,133,233,15,135,244,255,255,137,213,41,205,248,5,
-  139,1,137,4,41,139,65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,
-  6,141,70,1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198,237,15,132,
-  244,13,252,233,244,14,248,8,137,252,242,137,252,233,232,251,1,15,248,9,139,
-  12,36,137,185,233,137,252,242,137,252,233,232,251,1,0,139,52,36,139,149,233,
-  252,233,244,4,248,86,139,108,36,48,252,247,133,233,237,15,132,244,62,255,
-  137,149,233,141,68,194,252,248,137,133,233,49,192,137,133,233,176,235,136,
-  133,233,252,233,244,16,255,248,70,255,248,72,139,114,252,252,221,90,252,248,
-  252,233,244,65,255,248,87,129,252,248,239,15,130,244,62,255,129,122,253,4,
-  239,15,133,244,248,139,42,131,252,253,0,15,137,244,70,252,247,221,15,136,
-  244,247,248,88,248,70,139,114,252,252,199,66,252,252,237,137,106,252,248,
-  252,233,244,65,248,1,139,114,252,252,199,66,252,252,0,0,224,65,199,66,252,
-  248,0,0,0,0,252,233,244,65,248,2,15,135,244,62,255,129,122,253,4,239,15,131,
-  244,62,255,252,242,15,16,2,102,15,252,239,201,102,15,118,201,102,15,115,209,
-  1,15,84,193,248,71,139,114,252,252,252,242,15,17,66,252,248,255,221,2,217,
-  225,248,71,248,72,139,114,252,252,221,90,252,248,255,248,65,184,237,248,77,
-  137,68,36,20,248,63,252,247,198,237,15,133,244,253,248,5,56,70,252,255,15,
-  135,244,252,15,182,78,252,253,252,247,209,141,20,202,139,6,15,182,204,15,
-  182,232,131,198,4,193,232,16,252,255,36,171,248,6,199,68,194,252,244,237,
-  131,192,1,252,233,244,5,248,7,185,252,248,252,255,252,255,252,255,252,233,
-  244,14,248,89,255,129,122,253,4,239,15,133,244,247,139,42,252,233,244,70,
-  248,1,15,135,244,62,255,252,242,15,16,2,232,244,90,255,252,242,15,45,232,
-  129,252,253,0,0,0,128,15,133,244,70,252,242,15,42,205,102,15,46,193,15,138,
-  244,71,15,132,244,70,255,221,2,232,244,90,255,219,20,36,139,44,36,129,252,
-  253,0,0,0,128,15,133,244,248,217,192,219,4,36,255,223,252,233,221,216,255,
-  218,252,233,223,224,158,255,15,138,244,72,15,133,244,72,248,2,221,216,252,
-  233,244,70,255,248,91,255,252,242,15,16,2,232,244,92,255,221,2,232,244,92,
-  255,248,93,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,
-  252,242,15,81,2,252,233,244,71,255,248,93,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,221,2,217,252,250,252,233,244,72,255,248,94,129,
-  252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,217,252,237,221,
-  2,217,252,241,252,233,244,72,248,95,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,15,131,244,62,217,252,236,221,2,217,252,241,252,233,244,72,248,
-  96,129,252,248,239,255,15,130,244,62,129,122,253,4,239,15,131,244,62,221,
-  2,232,244,97,252,233,244,72,248,98,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,15,131,244,62,221,2,217,252,254,252,233,244,72,248,99,129,252,248,
-  239,255,15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,252,255,252,
-  233,244,72,248,100,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,221,2,217,252,242,221,216,252,233,244,72,248,101,129,252,248,239,15,
-  130,244,62,255,129,122,253,4,239,15,131,244,62,221,2,217,192,216,200,217,
-  232,222,225,217,252,250,217,252,243,252,233,244,72,248,102,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,217,192,216,200,217,232,
-  222,225,217,252,250,217,201,217,252,243,252,233,244,72,248,103,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,131,244,62,255,221,2,217,232,217,252,
-  243,252,233,244,72,255,248,104,129,252,248,239,15,130,244,62,129,122,253,
-  4,239,15,131,244,62,252,242,15,16,2,252,242,15,17,4,36,255,248,104,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,221,2,221,28,36,255,
-  137,213,232,251,1,16,137,252,234,252,233,244,72,255,248,105,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,252,242,15,
-  17,4,36,255,248,105,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,221,2,221,28,36,255,137,213,232,251,1,17,137,252,234,252,233,244,72,
-  255,248,106,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,
-  252,242,15,16,2,252,242,15,17,4,36,255,248,106,129,252,248,239,15,130,244,
-  62,129,122,253,4,239,15,131,244,62,221,2,221,28,36,255,137,213,232,251,1,
-  18,137,252,234,252,233,244,72,248,107,255,248,108,129,252,248,239,15,130,
-  244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,139,106,252,248,252,
-  242,15,89,133,233,252,233,244,71,255,248,108,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,15,131,244,62,221,2,139,106,252,248,220,141,233,252,233,
-  244,72,255,248,109,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,
-  244,62,129,122,253,12,239,15,131,244,62,221,2,221,66,8,217,252,243,252,233,
-  244,72,248,110,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,129,122,253,12,239,255,15,131,244,62,221,66,8,221,2,217,252,253,221,217,
-  252,233,244,72,248,111,129,252,248,239,15,130,244,62,139,106,4,129,252,253,
-  239,15,131,244,62,139,114,252,252,139,2,137,106,252,252,137,66,252,248,209,
-  229,129,252,253,0,0,224,252,255,15,131,244,249,9,232,15,132,244,249,184,252,
-  254,3,0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,252,237,21,41,197,
-  255,252,242,15,42,197,255,137,108,36,16,219,68,36,16,255,139,106,252,252,
-  129,229,252,255,252,255,15,128,129,205,0,0,224,63,137,106,252,252,248,2,255,
-  252,242,15,17,2,255,221,26,255,184,237,252,233,244,77,248,3,255,15,87,192,
-  252,233,244,2,255,217,252,238,252,233,244,2,255,248,4,255,252,242,15,16,2,
-  189,0,0,80,67,102,15,110,205,102,15,112,201,81,252,242,15,89,193,252,242,
-  15,17,66,252,248,255,221,2,199,68,36,16,0,0,128,90,216,76,36,16,221,90,252,
-  248,255,139,106,252,252,184,52,4,0,0,209,229,252,233,244,1,255,248,112,129,
-  252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,252,242,15,16,2,
-  255,248,112,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,
-  221,2,255,139,106,4,139,114,252,252,209,229,129,252,253,0,0,224,252,255,15,
-  132,244,250,255,15,40,224,232,244,113,252,242,15,92,224,248,1,252,242,15,
-  17,66,252,248,252,242,15,17,34,255,217,192,232,244,113,220,252,233,248,1,
-  221,90,252,248,221,26,255,139,66,252,252,139,106,4,49,232,15,136,244,249,
-  248,2,184,237,252,233,244,77,248,3,129,252,245,0,0,0,128,137,106,4,252,233,
-  244,2,248,4,255,15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,244,
-  1,255,248,114,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,
-  62,129,122,253,12,239,15,131,244,62,221,66,8,221,2,248,1,217,252,248,223,
-  224,158,15,138,244,1,221,217,252,233,244,72,255,248,115,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,
-  62,252,242,15,16,2,252,242,15,16,74,8,232,244,116,252,233,244,71,255,248,
-  115,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,
-  253,12,239,15,131,244,62,221,2,221,66,8,232,244,116,252,233,244,72,255,248,
-  117,185,2,0,0,0,129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,
-  15,131,244,70,129,124,253,202,252,252,239,15,133,244,249,59,108,202,252,248,
-  15,79,108,202,252,248,131,193,1,252,233,244,1,248,3,15,135,244,62,255,252,
-  233,244,252,248,4,15,135,244,62,255,252,242,15,16,2,248,5,57,193,15,131,244,
-  71,129,124,253,202,252,252,239,255,15,130,244,252,15,135,244,62,252,242,15,
-  42,76,202,252,248,252,233,244,253,255,248,6,252,242,15,16,76,202,252,248,
-  248,7,252,242,15,93,193,131,193,1,252,233,244,5,255,221,2,248,5,57,193,15,
-  131,244,72,129,124,253,202,252,252,239,255,15,130,244,252,15,135,244,255,
-  219,68,202,252,248,252,233,244,253,255,15,131,244,255,255,248,6,221,68,202,
-  252,248,248,7,255,219,252,233,219,209,221,217,255,80,221,225,223,224,252,
-  246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,248,118,185,2,0,0,0,
-  129,122,253,4,239,255,15,133,244,250,139,42,248,1,57,193,15,131,244,70,129,
-  124,253,202,252,252,239,15,133,244,249,59,108,202,252,248,15,76,108,202,252,
-  248,131,193,1,252,233,244,1,248,3,15,135,244,62,255,248,6,252,242,15,16,76,
-  202,252,248,248,7,252,242,15,95,193,131,193,1,252,233,244,5,255,219,252,233,
-  218,209,221,217,255,80,221,225,223,224,252,246,196,1,15,133,244,248,217,201,
-  248,2,221,216,88,255,248,9,221,216,252,233,244,62,255,248,119,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,133,244,62,139,42,255,139,173,233,
-  252,233,244,70,255,252,242,15,42,133,233,252,233,244,71,255,219,133,233,252,
-  233,244,72,255,248,120,129,252,248,239,15,133,244,62,129,122,253,4,239,15,
-  133,244,62,139,42,139,114,252,252,131,189,233,1,15,130,244,80,15,182,173,
-  233,255,252,242,15,42,197,252,233,244,71,255,137,108,36,16,219,68,36,16,252,
-  233,244,72,255,248,121,139,171,233,59,171,233,15,130,244,247,232,244,74,248,
-  1,129,252,248,239,15,133,244,62,129,122,253,4,239,255,15,133,244,62,139,42,
-  129,252,253,252,255,0,0,0,15,135,244,62,137,108,36,20,255,15,131,244,62,252,
-  242,15,44,42,129,252,253,252,255,0,0,0,15,135,244,62,137,108,36,20,255,15,
-  131,244,62,221,2,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,62,255,
-  199,68,36,8,1,0,0,0,141,68,36,20,248,122,139,108,36,48,137,149,233,137,68,
-  36,4,137,44,36,137,116,36,24,232,251,1,19,139,149,233,139,114,252,252,199,
-  66,252,252,237,137,66,252,248,252,233,244,65,248,123,139,171,233,59,171,233,
-  15,130,244,247,232,244,74,248,1,199,68,36,20,252,255,252,255,252,255,252,
-  255,129,252,248,239,15,130,244,62,15,134,244,247,129,122,253,20,239,255,15,
-  133,244,62,139,106,16,137,108,36,20,255,15,131,244,62,252,242,15,44,106,16,
-  137,108,36,20,255,15,131,244,62,221,66,16,219,92,36,20,255,248,1,129,122,
-  253,4,239,15,133,244,62,129,122,253,12,239,255,139,42,137,108,36,12,139,173,
-  233,255,139,74,8,255,252,242,15,44,74,8,255,221,66,8,219,92,36,8,139,76,36,
-  8,255,139,68,36,20,57,197,15,130,244,251,248,2,133,201,15,142,244,253,248,
-  3,139,108,36,12,41,200,15,140,244,124,141,172,253,13,233,131,192,1,248,4,
-  137,68,36,8,137,232,252,233,244,122,248,5,15,140,244,252,141,68,40,1,252,
-  233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244,254,1,252,233,
-  131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248,124,49,192,252,
-  233,244,4,248,125,129,252,248,239,15,130,244,62,139,171,233,59,171,233,15,
-  130,244,247,232,244,74,248,1,255,129,122,253,4,239,15,133,244,62,129,122,
-  253,12,239,139,42,255,15,133,244,62,139,66,8,255,15,131,244,62,252,242,15,
-  44,66,8,255,15,131,244,62,221,66,8,219,92,36,20,139,68,36,20,255,133,192,
-  15,142,244,124,131,189,233,1,15,130,244,124,15,133,244,126,57,131,233,15,
-  130,244,126,15,182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,131,197,
-  1,131,232,1,15,133,244,1,139,131,233,252,233,244,122,248,127,129,252,248,
-  239,255,15,130,244,62,139,171,233,59,171,233,15,130,244,247,232,244,74,248,
-  1,129,122,253,4,239,15,133,244,62,139,42,139,133,233,133,192,15,132,244,124,
-  57,131,233,15,130,244,128,129,197,239,137,116,36,20,137,68,36,8,139,179,233,
-  248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,137,252,240,
-  139,116,36,20,252,233,244,122,248,129,129,252,248,239,15,130,244,62,139,171,
-  233,59,171,233,15,130,244,247,232,244,74,248,1,129,122,253,4,239,15,133,244,
-  62,139,42,139,133,233,57,131,233,255,15,130,244,128,129,197,239,137,116,36,
-  20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252,249,
-  65,15,130,244,248,131,252,249,90,15,135,244,248,131,252,241,32,248,2,136,
-  12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,252,233,244,122,
-  248,130,129,252,248,239,15,130,244,62,255,139,171,233,59,171,233,15,130,244,
-  247,232,244,74,248,1,129,122,253,4,239,15,133,244,62,139,42,139,133,233,57,
-  131,233,15,130,244,128,129,197,239,137,116,36,20,137,68,36,8,139,179,233,
-  252,233,244,249,248,1,15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,
-  252,249,122,15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,
-  15,137,244,1,137,252,240,139,116,36,20,252,233,244,122,248,131,129,252,248,
-  239,15,130,244,62,129,122,253,4,239,15,133,244,62,137,213,139,10,232,251,
-  1,20,137,252,234,255,137,197,252,233,244,70,255,252,242,15,42,192,252,233,
-  244,71,255,137,4,36,219,4,36,252,233,244,72,255,248,132,129,252,248,239,15,
-  130,244,62,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,88,248,
-  1,15,135,244,62,255,252,242,15,16,2,189,0,0,56,67,102,15,110,205,102,15,112,
-  201,81,252,242,15,88,193,102,15,126,197,255,221,2,199,68,36,16,0,0,192,89,
-  216,68,36,16,221,28,36,255,139,44,36,255,252,233,244,88,255,248,133,129,252,
-  248,239,15,130,244,62,255,189,0,0,56,67,102,15,110,205,102,15,112,201,81,
-  255,199,68,36,16,0,0,192,89,255,15,133,244,247,139,42,252,233,244,248,248,
-  1,15,135,244,62,255,252,242,15,16,2,252,242,15,88,193,102,15,126,197,255,
-  221,2,216,68,36,16,221,28,36,139,44,36,255,248,2,137,68,36,20,141,68,194,
-  252,240,248,1,57,208,15,134,244,88,129,120,253,4,239,255,15,133,244,248,35,
-  40,131,232,8,252,233,244,1,248,2,15,135,244,134,255,15,131,244,134,255,252,
-  242,15,16,0,252,242,15,88,193,102,15,126,193,33,205,255,221,0,216,68,36,16,
-  221,28,36,35,44,36,255,131,232,8,252,233,244,1,248,135,129,252,248,239,15,
-  130,244,62,255,15,133,244,248,11,40,131,232,8,252,233,244,1,248,2,15,135,
-  244,134,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,9,205,255,221,
-  0,216,68,36,16,221,28,36,11,44,36,255,131,232,8,252,233,244,1,248,136,129,
-  252,248,239,15,130,244,62,255,15,133,244,248,51,40,131,232,8,252,233,244,
-  1,248,2,15,135,244,134,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,
-  49,205,255,221,0,216,68,36,16,221,28,36,51,44,36,255,131,232,8,252,233,244,
-  1,248,137,129,252,248,239,15,130,244,62,129,122,253,4,239,255,221,2,199,68,
-  36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,248,2,15,205,252,233,
-  244,88,248,138,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,2,
-  252,247,213,255,248,88,252,242,15,42,197,252,233,244,71,255,248,88,137,44,
-  36,219,4,36,252,233,244,72,255,248,134,139,68,36,20,252,233,244,62,255,248,
-  139,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,2,129,122,253,
-  12,239,15,133,244,62,139,74,8,255,248,139,129,252,248,239,15,130,244,62,129,
-  122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,15,16,
-  2,252,242,15,16,74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,
-  15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,248,139,129,
-  252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,
-  239,15,131,244,62,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,36,16,221,
-  92,36,8,216,68,36,16,221,28,36,139,76,36,8,139,44,36,255,211,229,252,233,
-  244,88,255,248,140,129,252,248,239,15,130,244,62,129,122,253,4,239,255,248,
-  140,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,
-  253,12,239,15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,189,0,0,56,67,
-  102,15,110,213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,102,
-  15,126,197,102,15,126,201,255,248,140,129,252,248,239,15,130,244,62,129,122,
-  253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,221,2,221,66,8,199,
-  68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,139,76,
-  36,8,139,44,36,255,211,252,237,252,233,244,88,255,248,141,129,252,248,239,
-  15,130,244,62,129,122,253,4,239,255,248,141,129,252,248,239,15,130,244,62,
-  129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,242,
-  15,16,2,252,242,15,16,74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,
-  252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,248,
-  141,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,122,
-  253,12,239,15,131,244,62,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,36,
-  16,221,92,36,8,216,68,36,16,221,28,36,139,76,36,8,139,44,36,255,211,252,253,
-  252,233,244,88,255,248,142,129,252,248,239,15,130,244,62,129,122,253,4,239,
-  255,248,142,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,
-  129,122,253,12,239,15,131,244,62,252,242,15,16,2,252,242,15,16,74,8,189,0,
-  0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,
-  202,102,15,126,197,102,15,126,201,255,248,142,129,252,248,239,15,130,244,
-  62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,221,2,
-  221,66,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,
-  28,36,139,76,36,8,139,44,36,255,211,197,252,233,244,88,255,248,143,129,252,
-  248,239,15,130,244,62,129,122,253,4,239,255,248,143,129,252,248,239,15,130,
-  244,62,129,122,253,4,239,15,131,244,62,129,122,253,12,239,15,131,244,62,252,
-  242,15,16,2,252,242,15,16,74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,
-  81,252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,201,255,
-  248,143,129,252,248,239,15,130,244,62,129,122,253,4,239,15,131,244,62,129,
-  122,253,12,239,15,131,244,62,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,
-  36,16,221,92,36,8,216,68,36,16,221,28,36,139,76,36,8,139,44,36,255,211,205,
-  252,233,244,88,248,126,184,237,252,233,244,62,248,128,184,237,248,62,139,
-  108,36,48,139,114,252,252,137,116,36,24,137,149,233,141,68,194,252,248,141,
-  136,233,137,133,233,139,66,252,248,59,141,233,15,135,244,251,137,44,36,252,
-  255,144,233,139,149,233,133,192,15,143,244,77,248,1,255,139,141,233,41,209,
-  193,252,233,3,133,192,141,65,1,139,106,252,248,15,133,244,32,139,181,233,
-  139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,248,32,137,209,
-  252,247,198,237,15,133,244,249,15,182,110,252,253,252,247,213,141,20,252,
-  234,252,233,244,28,248,3,137,252,245,131,229,252,248,41,252,234,252,233,244,
-  28,248,5,186,237,137,252,233,232,251,1,0,139,149,233,49,192,252,233,244,1,
-  248,74,93,137,108,36,16,139,108,36,48,137,116,36,24,137,149,233,255,141,68,
-  194,252,248,137,252,233,137,133,233,232,251,1,21,139,149,233,139,133,233,
-  41,208,193,232,3,131,192,1,139,108,36,16,85,195,248,144,255,15,182,131,233,
-  168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132,244,247,252,
-  255,139,233,252,233,244,247,255,248,145,15,182,131,233,168,235,15,133,244,
-  251,252,233,244,247,248,146,15,182,131,233,168,235,15,133,244,251,168,235,
-  15,132,244,251,252,255,139,233,15,132,244,247,168,235,15,132,244,251,248,
-  1,255,139,108,36,48,137,149,233,137,252,242,137,252,233,232,251,1,22,248,
-  3,139,149,233,248,4,15,182,78,252,253,248,5,15,182,110,252,252,15,183,70,
-  252,254,252,255,164,253,171,233,248,147,131,198,4,139,77,232,137,76,36,20,
-  252,233,244,4,248,148,255,139,106,252,248,139,173,233,15,182,133,233,141,
-  4,194,139,108,36,48,137,149,233,137,133,233,137,252,242,141,139,233,137,171,
-  233,137,116,36,24,232,251,1,23,252,233,244,3,255,248,149,137,116,36,24,255,
-  248,150,255,137,116,36,24,131,206,1,248,1,255,141,68,194,252,248,139,108,
-  36,48,137,149,233,137,133,233,137,252,242,137,252,233,232,251,1,24,199,68,
-  36,24,0,0,0,0,255,131,230,252,254,255,139,149,233,137,193,139,133,233,41,
-  208,137,205,15,182,78,252,253,193,232,3,131,192,1,252,255,229,248,151,255,
-  85,141,108,36,12,85,83,82,81,80,15,182,69,252,252,138,101,252,248,137,125,
-  252,252,137,117,252,248,139,93,0,139,139,233,199,131,233,237,137,131,233,
-  137,139,233,129,252,236,239,252,242,15,17,125,216,252,242,15,17,117,208,252,
-  242,15,17,109,200,252,242,15,17,101,192,252,242,15,17,93,184,252,242,15,17,
-  85,176,252,242,15,17,77,168,252,242,15,17,69,160,139,171,233,139,147,233,
-  137,171,233,199,131,233,0,0,0,0,137,149,233,141,84,36,16,141,139,233,232,
-  251,1,25,139,141,233,129,225,239,137,204,137,169,233,139,149,233,139,177,
-  233,255,248,152,255,133,192,15,136,244,249,137,68,36,20,139,122,252,248,139,
-  191,233,139,191,233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,129,252,253,239,15,130,244,248,139,68,36,
-  20,248,2,252,255,36,171,248,3,252,247,216,137,252,233,137,194,232,251,1,26,
-  255,248,90,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,
-  252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,
-  68,36,8,195,255,248,153,102,15,252,239,210,102,15,118,210,102,15,115,210,
+  233,137,113,252,244,141,177,233,41,214,139,105,252,248,184,237,252,233,244,
+  30,248,40,137,68,36,16,199,68,36,20,237,141,68,36,16,128,126,252,252,235,
+  15,133,244,247,255,141,139,233,137,41,199,65,4,237,137,205,252,233,244,248,
+  248,41,15,182,70,252,254,255,141,68,36,16,252,233,244,247,248,42,15,182,70,
+  252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,
+  4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,
+  2,139,149,233,133,192,15,132,244,249,15,182,78,252,253,139,108,202,4,139,
+  12,202,137,104,4,137,8,248,43,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,171,248,3,139,141,233,137,113,252,244,15,182,70,252,253,139,
+  108,194,4,139,4,194,137,105,20,137,65,16,141,177,233,41,214,139,105,252,248,
+  184,237,252,233,244,30,248,44,15,182,110,252,252,141,4,194,141,12,202,137,
+  108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,
+  116,36,24,232,251,1,3,248,3,139,149,233,255,131,252,248,1,15,135,244,45,248,
+  4,141,118,4,15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248,
+  6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,46,
+  131,198,4,129,120,253,4,239,15,130,244,5,252,233,244,6,248,47,129,120,253,
+  4,239,252,233,244,4,248,48,131,252,238,4,137,108,36,12,139,108,36,48,137,
+  68,36,8,137,76,36,4,137,44,36,137,149,233,255,137,116,36,24,232,251,1,4,252,
+  233,244,3,248,49,255,131,252,238,4,139,108,36,48,137,149,233,137,252,233,
+  139,86,252,252,137,116,36,24,232,251,1,5,252,233,244,3,255,248,50,255,15,
+  182,110,252,255,255,248,51,141,4,199,252,233,244,247,248,52,255,248,53,141,
+  4,199,141,44,252,234,149,252,233,244,248,248,54,141,4,194,137,197,252,233,
+  244,248,248,55,255,248,56,141,4,194,248,1,141,44,252,234,248,2,141,12,202,
+  137,108,36,8,139,108,36,48,137,68,36,12,15,182,70,252,252,137,76,36,4,137,
+  68,36,16,137,44,36,137,149,233,137,116,36,24,232,251,1,6,139,149,233,133,
+  192,15,132,244,43,248,45,137,193,41,208,137,113,252,244,141,176,233,184,237,
+  252,233,244,28,248,57,139,108,36,48,137,149,233,141,20,194,137,252,233,137,
+  116,36,24,232,251,1,7,139,149,233,255,133,192,15,133,244,45,15,183,70,252,
+  254,139,12,194,252,233,244,58,255,252,233,244,45,255,248,59,141,76,202,8,
+  248,29,137,76,36,20,137,68,36,16,131,252,233,8,141,4,193,139,108,36,48,137,
+  76,36,4,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,8,139,149,
+  233,139,76,36,20,139,68,36,16,139,105,252,248,131,192,1,57,215,15,132,244,
+  60,137,202,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,
+  198,4,252,255,36,171,248,61,139,108,36,48,137,149,233,137,202,137,252,233,
+  137,116,36,24,232,251,1,9,139,149,233,139,70,252,252,15,182,204,15,182,232,
+  193,232,16,252,255,164,253,171,233,248,62,129,252,248,239,15,130,244,63,139,
+  106,4,129,252,253,239,15,131,244,63,139,114,252,252,137,68,36,20,137,106,
+  252,252,139,42,137,106,252,248,131,232,2,15,132,244,248,255,137,209,248,1,
+  131,193,8,139,105,4,137,105,252,252,139,41,137,105,252,248,131,232,1,15,133,
+  244,1,248,2,139,68,36,20,252,233,244,64,248,65,129,252,248,239,15,130,244,
+  63,139,106,4,184,237,252,247,213,57,232,255,15,71,197,255,15,134,244,247,
+  137,232,248,1,255,248,2,139,106,252,248,139,132,253,197,233,139,114,252,252,
+  199,66,252,252,237,137,66,252,248,252,233,244,66,248,67,129,252,248,239,15,
+  130,244,63,139,106,4,139,114,252,252,129,252,253,239,15,133,244,252,248,1,
+  139,42,139,173,233,248,2,133,252,237,199,66,252,252,237,15,132,244,66,139,
+  131,233,199,66,252,252,237,255,137,106,252,248,139,141,233,35,136,233,105,
+  201,239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129,233,15,132,
+  244,251,248,4,139,137,233,133,201,15,133,244,3,252,233,244,66,248,5,139,105,
+  4,129,252,253,239,255,15,132,244,66,139,1,137,106,252,252,137,66,252,248,
+  252,233,244,66,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,
+  244,254,189,237,248,8,252,247,213,139,172,253,171,233,252,233,244,2,248,68,
+  129,252,248,239,15,130,244,63,255,129,122,253,4,239,15,133,244,63,139,42,
+  131,189,233,0,15,133,244,63,129,122,253,12,239,15,133,244,63,139,66,8,137,
+  133,233,139,114,252,252,199,66,252,252,237,137,106,252,248,252,246,133,233,
+  235,15,132,244,247,128,165,233,235,139,131,233,137,171,233,137,133,233,248,
+  1,255,252,233,244,66,248,69,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,133,244,63,139,2,139,108,36,48,137,68,36,4,137,44,36,137,213,131,194,8,
+  137,84,36,8,232,251,1,10,137,252,234,139,40,139,64,4,139,114,252,252,137,
+  106,252,248,137,66,252,252,252,233,244,66,248,70,129,252,248,239,15,133,244,
+  63,129,122,253,4,239,255,15,133,244,247,139,42,252,233,244,71,248,1,15,135,
+  244,63,255,15,131,244,63,255,252,242,15,16,2,252,233,244,72,255,221,2,252,
+  233,244,73,255,248,74,129,252,248,239,15,130,244,63,139,114,252,252,129,122,
+  253,4,239,15,133,244,249,139,2,248,2,199,66,252,252,237,137,66,252,248,252,
+  233,244,66,248,3,129,122,253,4,239,15,135,244,63,131,187,233,0,15,133,244,
+  63,139,171,233,59,171,233,255,15,130,244,247,232,244,75,248,1,139,108,36,
+  48,137,149,233,137,116,36,24,137,252,233,255,232,251,1,11,255,232,251,1,12,
+  255,139,149,233,252,233,244,2,248,76,129,252,248,239,15,130,244,63,15,132,
+  244,248,248,1,129,122,253,4,239,15,133,244,63,139,108,36,48,137,149,233,137,
+  149,233,139,114,252,252,139,2,137,68,36,4,137,44,36,131,194,8,137,84,36,8,
+  137,116,36,24,232,251,1,13,139,149,233,133,192,15,132,244,249,139,106,8,139,
+  66,12,137,106,252,248,137,66,252,252,139,106,16,139,66,20,137,42,137,66,4,
+  248,77,184,237,255,252,233,244,78,248,2,199,66,12,237,252,233,244,1,248,3,
+  199,66,252,252,237,252,233,244,66,248,79,129,252,248,239,15,130,244,63,139,
+  42,129,122,253,4,239,15,133,244,63,255,131,189,233,0,15,133,244,63,255,139,
+  106,252,248,139,133,233,139,114,252,252,199,66,252,252,237,137,66,252,248,
+  199,66,12,237,184,237,252,233,244,78,248,80,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,15,133,244,63,129,122,253,12,239,255,139,114,252,252,255,
+  139,66,8,131,192,1,199,66,252,252,237,137,66,252,248,255,252,242,15,16,66,
+  8,189,0,0,252,240,63,102,15,110,205,102,15,112,201,81,252,242,15,88,193,252,
+  242,15,45,192,252,242,15,17,66,252,248,255,221,66,8,217,232,222,193,219,20,
+  36,221,90,252,248,139,4,36,255,139,42,59,133,233,15,131,244,248,193,224,3,
+  3,133,233,248,1,129,120,253,4,239,15,132,244,81,139,40,139,64,4,137,42,137,
+  66,4,252,233,244,77,248,2,131,189,233,0,15,132,244,81,137,252,233,137,213,
+  137,194,232,251,1,14,137,252,234,133,192,15,133,244,1,248,81,184,237,252,
+  233,244,78,248,82,255,139,106,252,248,139,133,233,139,114,252,252,199,66,
+  252,252,237,137,66,252,248,255,199,66,12,237,199,66,8,0,0,0,0,255,15,87,192,
+  252,242,15,17,66,8,255,217,252,238,221,90,8,255,184,237,252,233,244,78,248,
+  83,129,252,248,239,15,130,244,63,141,74,8,131,232,1,190,237,248,1,15,182,
+  171,233,193,252,237,235,131,229,1,1,252,238,252,233,244,28,248,84,129,252,
+  248,239,15,130,244,63,129,122,253,12,239,15,133,244,63,255,139,106,4,137,
+  106,12,199,66,4,237,139,42,139,114,8,137,106,8,137,50,141,74,16,131,232,2,
+  190,237,252,233,244,1,248,85,129,252,248,239,15,130,244,63,139,42,139,114,
+  252,252,137,116,36,24,137,44,36,129,122,253,4,239,15,133,244,63,131,189,233,
+  0,15,133,244,63,128,189,233,235,15,135,244,63,139,141,233,15,132,244,247,
+  255,59,141,233,15,132,244,63,248,1,141,116,193,252,240,59,181,233,15,135,
+  244,63,137,181,233,139,108,36,48,137,149,233,131,194,8,137,149,233,141,108,
+  194,232,41,252,245,57,206,15,132,244,249,248,2,139,68,46,4,137,70,252,252,
+  139,4,46,137,70,252,248,131,252,238,8,57,206,15,133,244,2,248,3,137,76,36,
+  4,49,201,137,76,36,12,137,76,36,8,232,244,25,199,131,233,237,255,139,108,
+  36,48,139,52,36,139,149,233,129,252,248,239,15,135,244,254,248,4,139,142,
+  233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,
+  252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137,4,41,139,
+  65,4,137,68,41,4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,2,199,66,
+  252,252,237,248,7,139,116,36,24,137,68,36,20,185,252,248,252,255,252,255,
+  252,255,252,247,198,237,255,15,132,244,13,252,233,244,14,248,8,199,66,252,
+  252,237,139,142,233,131,252,233,8,137,142,233,139,1,137,2,139,65,4,137,66,
+  4,184,237,252,233,244,7,248,9,139,12,36,137,185,233,137,252,242,137,252,233,
+  232,251,1,0,139,52,36,139,149,233,252,233,244,4,248,86,139,106,252,248,139,
+  173,233,139,114,252,252,137,116,36,24,137,44,36,131,189,233,0,15,133,244,
+  63,255,128,189,233,235,15,135,244,63,139,141,233,15,132,244,247,59,141,233,
+  15,132,244,63,248,1,141,116,193,252,248,59,181,233,15,135,244,63,137,181,
+  233,139,108,36,48,137,149,233,137,149,233,141,108,194,252,240,41,252,245,
+  57,206,15,132,244,249,248,2,255,139,68,46,4,137,70,252,252,139,4,46,137,70,
+  252,248,131,252,238,8,57,206,15,133,244,2,248,3,137,76,36,4,49,201,137,76,
+  36,12,137,76,36,8,232,244,25,199,131,233,237,139,108,36,48,139,52,36,139,
+  149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,137,
+  142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,233,
+  15,135,244,255,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,
+  4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,1,248,7,139,116,36,24,137,
+  68,36,20,49,201,252,247,198,237,15,132,244,13,252,233,244,14,248,8,137,252,
+  242,137,252,233,232,251,1,15,248,9,139,12,36,137,185,233,137,252,242,137,
+  252,233,232,251,1,0,139,52,36,139,149,233,252,233,244,4,248,87,139,108,36,
+  48,252,247,133,233,237,15,132,244,63,255,137,149,233,141,68,194,252,248,137,
+  133,233,49,192,137,133,233,176,235,136,133,233,252,233,244,16,255,248,71,
+  255,248,73,139,114,252,252,221,90,252,248,252,233,244,66,255,248,88,129,252,
+  248,239,15,130,244,63,255,129,122,253,4,239,15,133,244,248,139,42,131,252,
+  253,0,15,137,244,71,252,247,221,15,136,244,247,248,89,248,71,139,114,252,
+  252,199,66,252,252,237,137,106,252,248,252,233,244,66,248,1,139,114,252,252,
+  199,66,252,252,0,0,224,65,199,66,252,248,0,0,0,0,252,233,244,66,248,2,15,
+  135,244,63,255,129,122,253,4,239,15,131,244,63,255,252,242,15,16,2,102,15,
+  252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,248,72,139,114,252,
+  252,252,242,15,17,66,252,248,255,221,2,217,225,248,72,248,73,139,114,252,
+  252,221,90,252,248,255,248,66,184,237,248,78,137,68,36,20,248,64,252,247,
+  198,237,15,133,244,253,248,5,56,70,252,255,15,135,244,252,15,182,78,252,253,
+  252,247,209,141,20,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
+  255,36,171,248,6,199,68,194,252,244,237,131,192,1,252,233,244,5,248,7,185,
+  252,248,252,255,252,255,252,255,252,233,244,14,248,90,255,129,122,253,4,239,
+  15,133,244,247,139,42,252,233,244,71,248,1,15,135,244,63,255,252,242,15,16,
+  2,232,244,91,255,252,242,15,45,232,129,252,253,0,0,0,128,15,133,244,71,252,
+  242,15,42,205,102,15,46,193,15,138,244,72,15,132,244,71,255,221,2,232,244,
+  91,255,219,20,36,139,44,36,129,252,253,0,0,0,128,15,133,244,248,217,192,219,
+  4,36,255,223,252,233,221,216,255,218,252,233,223,224,158,255,15,138,244,73,
+  15,133,244,73,248,2,221,216,252,233,244,71,255,248,92,255,252,242,15,16,2,
+  232,244,93,255,221,2,232,244,93,255,248,94,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,15,131,244,63,252,242,15,81,2,252,233,244,72,255,248,94,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,217,252,
+  250,252,233,244,73,255,248,95,129,252,248,239,15,130,244,63,129,122,253,4,
+  239,15,131,244,63,217,252,237,221,2,217,252,241,252,233,244,73,248,96,129,
+  252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,217,252,236,221,
+  2,217,252,241,252,233,244,73,248,97,129,252,248,239,255,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,221,2,232,244,98,252,233,244,73,248,99,129,252,
+  248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,217,252,254,252,
+  233,244,73,248,100,129,252,248,239,255,15,130,244,63,129,122,253,4,239,15,
+  131,244,63,221,2,217,252,255,252,233,244,73,248,101,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,15,131,244,63,221,2,217,252,242,221,216,252,233,
+  244,73,248,102,129,252,248,239,15,130,244,63,255,129,122,253,4,239,15,131,
+  244,63,221,2,217,192,216,200,217,232,222,225,217,252,250,217,252,243,252,
+  233,244,73,248,103,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,
+  244,63,221,2,217,192,216,200,217,232,222,225,217,252,250,217,201,217,252,
+  243,252,233,244,73,248,104,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,255,221,2,217,232,217,252,243,252,233,244,73,255,248,105,129,
+  252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,252,242,15,16,2,
+  252,242,15,17,4,36,255,248,105,129,252,248,239,15,130,244,63,129,122,253,
+  4,239,15,131,244,63,221,2,221,28,36,255,137,213,232,251,1,16,137,252,234,
+  252,233,244,73,255,248,106,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,252,242,15,16,2,252,242,15,17,4,36,255,248,106,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,2,221,28,36,255,137,
+  213,232,251,1,17,137,252,234,252,233,244,73,255,248,107,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,252,242,15,16,2,252,242,15,17,
+  4,36,255,248,107,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,221,2,221,28,36,255,137,213,232,251,1,18,137,252,234,252,233,244,73,248,
+  108,255,248,109,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,252,242,15,16,2,139,106,252,248,252,242,15,89,133,233,252,233,244,72,255,
+  248,109,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,221,
+  2,139,106,252,248,220,141,233,252,233,244,73,255,248,110,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,2,221,66,8,217,252,243,252,233,244,73,248,111,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,255,15,131,244,
+  63,221,66,8,221,2,217,252,253,221,217,252,233,244,73,248,112,129,252,248,
+  239,15,130,244,63,139,106,4,129,252,253,239,15,131,244,63,139,114,252,252,
+  139,2,137,106,252,252,137,66,252,248,209,229,129,252,253,0,0,224,252,255,
+  15,131,244,249,9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,
+  0,15,130,244,250,248,1,193,252,237,21,41,197,255,252,242,15,42,197,255,137,
+  108,36,16,219,68,36,16,255,139,106,252,252,129,229,252,255,252,255,15,128,
+  129,205,0,0,224,63,137,106,252,252,248,2,255,252,242,15,17,2,255,221,26,255,
+  184,237,252,233,244,78,248,3,255,15,87,192,252,233,244,2,255,217,252,238,
+  252,233,244,2,255,248,4,255,252,242,15,16,2,189,0,0,80,67,102,15,110,205,
+  102,15,112,201,81,252,242,15,89,193,252,242,15,17,66,252,248,255,221,2,199,
+  68,36,16,0,0,128,90,216,76,36,16,221,90,252,248,255,139,106,252,252,184,52,
+  4,0,0,209,229,252,233,244,1,255,248,113,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,15,131,244,63,252,242,15,16,2,255,248,113,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,221,2,255,139,106,4,139,114,252,
+  252,209,229,129,252,253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,
+  244,114,252,242,15,92,224,248,1,252,242,15,17,66,252,248,252,242,15,17,34,
+  255,217,192,232,244,114,220,252,233,248,1,221,90,252,248,221,26,255,139,66,
+  252,252,139,106,4,49,232,15,136,244,249,248,2,184,237,252,233,244,78,248,
+  3,129,252,245,0,0,0,128,137,106,4,252,233,244,2,248,4,255,15,87,228,252,233,
+  244,1,255,217,252,238,217,201,252,233,244,1,255,248,115,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,66,8,221,2,248,1,217,252,248,223,224,158,15,138,244,1,221,217,252,
+  233,244,73,255,248,116,129,252,248,239,15,130,244,63,129,122,253,4,239,15,
+  131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,
+  74,8,232,244,117,252,233,244,72,255,248,116,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,63,221,2,221,
+  66,8,232,244,117,252,233,244,73,255,248,118,185,2,0,0,0,129,122,253,4,239,
+  255,15,133,244,250,139,42,248,1,57,193,15,131,244,71,129,124,253,202,252,
+  252,239,15,133,244,249,59,108,202,252,248,15,79,108,202,252,248,131,193,1,
+  252,233,244,1,248,3,15,135,244,63,255,252,233,244,252,248,4,15,135,244,63,
+  255,252,242,15,16,2,248,5,57,193,15,131,244,72,129,124,253,202,252,252,239,
+  255,15,130,244,252,15,135,244,63,252,242,15,42,76,202,252,248,252,233,244,
+  253,255,248,6,252,242,15,16,76,202,252,248,248,7,252,242,15,93,193,131,193,
+  1,252,233,244,5,255,221,2,248,5,57,193,15,131,244,73,129,124,253,202,252,
+  252,239,255,15,130,244,252,15,135,244,255,219,68,202,252,248,252,233,244,
+  253,255,15,131,244,255,255,248,6,221,68,202,252,248,248,7,255,219,252,233,
+  219,209,221,217,255,80,221,225,223,224,252,246,196,1,15,132,244,248,217,201,
+  248,2,221,216,88,255,248,119,185,2,0,0,0,129,122,253,4,239,255,15,133,244,
+  250,139,42,248,1,57,193,15,131,244,71,129,124,253,202,252,252,239,15,133,
+  244,249,59,108,202,252,248,15,76,108,202,252,248,131,193,1,252,233,244,1,
+  248,3,15,135,244,63,255,248,6,252,242,15,16,76,202,252,248,248,7,252,242,
+  15,95,193,131,193,1,252,233,244,5,255,219,252,233,218,209,221,217,255,80,
+  221,225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,88,255,
+  248,9,221,216,252,233,244,63,255,248,120,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,15,133,244,63,139,42,255,139,173,233,252,233,244,71,255,252,
+  242,15,42,133,233,252,233,244,72,255,219,133,233,252,233,244,73,255,248,121,
+  129,252,248,239,15,133,244,63,129,122,253,4,239,15,133,244,63,139,42,139,
+  114,252,252,131,189,233,1,15,130,244,81,15,182,173,233,255,252,242,15,42,
+  197,252,233,244,72,255,137,108,36,16,219,68,36,16,252,233,244,73,255,248,
+  122,139,171,233,59,171,233,15,130,244,247,232,244,75,248,1,129,252,248,239,
+  15,133,244,63,129,122,253,4,239,255,15,133,244,63,139,42,129,252,253,252,
+  255,0,0,0,15,135,244,63,137,108,36,20,255,15,131,244,63,252,242,15,44,42,
+  129,252,253,252,255,0,0,0,15,135,244,63,137,108,36,20,255,15,131,244,63,221,
+  2,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,63,255,199,68,36,8,
+  1,0,0,0,141,68,36,20,248,123,139,108,36,48,137,149,233,137,68,36,4,137,44,
+  36,137,116,36,24,232,251,1,19,139,149,233,139,114,252,252,199,66,252,252,
+  237,137,66,252,248,252,233,244,66,248,124,139,171,233,59,171,233,15,130,244,
+  247,232,244,75,248,1,199,68,36,20,252,255,252,255,252,255,252,255,129,252,
+  248,239,15,130,244,63,15,134,244,247,129,122,253,20,239,255,15,133,244,63,
+  139,106,16,137,108,36,20,255,15,131,244,63,252,242,15,44,106,16,137,108,36,
+  20,255,15,131,244,63,221,66,16,219,92,36,20,255,248,1,129,122,253,4,239,15,
+  133,244,63,129,122,253,12,239,255,139,42,137,108,36,12,139,173,233,255,139,
+  74,8,255,252,242,15,44,74,8,255,221,66,8,219,92,36,8,139,76,36,8,255,139,
+  68,36,20,57,197,15,130,244,251,248,2,133,201,15,142,244,253,248,3,139,108,
+  36,12,41,200,15,140,244,125,141,172,253,13,233,131,192,1,248,4,137,68,36,
+  8,137,232,252,233,244,123,248,5,15,140,244,252,141,68,40,1,252,233,244,2,
+  248,6,137,232,252,233,244,2,248,7,255,15,132,244,254,1,252,233,131,193,1,
+  15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248,125,49,192,252,233,244,4,
+  248,126,129,252,248,239,15,130,244,63,139,171,233,59,171,233,15,130,244,247,
+  232,244,75,248,1,255,129,122,253,4,239,15,133,244,63,129,122,253,12,239,139,
+  42,255,15,133,244,63,139,66,8,255,15,131,244,63,252,242,15,44,66,8,255,15,
+  131,244,63,221,66,8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,125,
+  131,189,233,1,15,130,244,125,15,133,244,127,57,131,233,15,130,244,127,15,
+  182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,131,197,1,131,232,1,15,
+  133,244,1,139,131,233,252,233,244,123,248,128,129,252,248,239,255,15,130,
+  244,63,139,171,233,59,171,233,15,130,244,247,232,244,75,248,1,129,122,253,
+  4,239,15,133,244,63,139,42,139,133,233,133,192,15,132,244,125,57,131,233,
+  15,130,244,129,129,197,239,137,116,36,20,137,68,36,8,139,179,233,248,1,255,
+  15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,137,252,240,139,116,
+  36,20,252,233,244,123,248,130,129,252,248,239,15,130,244,63,139,171,233,59,
+  171,233,15,130,244,247,232,244,75,248,1,129,122,253,4,239,15,133,244,63,139,
+  42,139,133,233,57,131,233,255,15,130,244,129,129,197,239,137,116,36,20,137,
+  68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252,249,65,15,
+  130,244,248,131,252,249,90,15,135,244,248,131,252,241,32,248,2,136,12,6,248,
+  3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,252,233,244,123,248,131,
+  129,252,248,239,15,130,244,63,255,139,171,233,59,171,233,15,130,244,247,232,
+  244,75,248,1,129,122,253,4,239,15,133,244,63,139,42,139,133,233,57,131,233,
+  15,130,244,129,129,197,239,137,116,36,20,137,68,36,8,139,179,233,252,233,
+  244,249,248,1,15,182,76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,
+  122,15,135,244,248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,
+  1,137,252,240,139,116,36,20,252,233,244,123,248,132,129,252,248,239,15,130,
+  244,63,129,122,253,4,239,15,133,244,63,137,213,139,10,232,251,1,20,137,252,
+  234,255,137,197,252,233,244,71,255,252,242,15,42,192,252,233,244,72,255,137,
+  4,36,219,4,36,252,233,244,73,255,248,133,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,255,15,133,244,247,139,42,252,233,244,89,248,1,15,135,244,63,
+  255,252,242,15,16,2,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,
+  15,88,193,102,15,126,197,255,221,2,199,68,36,16,0,0,192,89,216,68,36,16,221,
+  28,36,255,139,44,36,255,252,233,244,89,255,248,134,129,252,248,239,15,130,
+  244,63,255,189,0,0,56,67,102,15,110,205,102,15,112,201,81,255,199,68,36,16,
+  0,0,192,89,255,15,133,244,247,139,42,252,233,244,248,248,1,15,135,244,63,
+  255,252,242,15,16,2,252,242,15,88,193,102,15,126,197,255,221,2,216,68,36,
+  16,221,28,36,139,44,36,255,248,2,137,68,36,20,141,68,194,252,240,248,1,57,
+  208,15,134,244,89,129,120,253,4,239,255,15,133,244,248,35,40,131,232,8,252,
+  233,244,1,248,2,15,135,244,135,255,15,131,244,135,255,252,242,15,16,0,252,
+  242,15,88,193,102,15,126,193,33,205,255,221,0,216,68,36,16,221,28,36,35,44,
+  36,255,131,232,8,252,233,244,1,248,136,129,252,248,239,15,130,244,63,255,
+  15,133,244,248,11,40,131,232,8,252,233,244,1,248,2,15,135,244,135,255,252,
+  242,15,16,0,252,242,15,88,193,102,15,126,193,9,205,255,221,0,216,68,36,16,
+  221,28,36,11,44,36,255,131,232,8,252,233,244,1,248,137,129,252,248,239,15,
+  130,244,63,255,15,133,244,248,51,40,131,232,8,252,233,244,1,248,2,15,135,
+  244,135,255,252,242,15,16,0,252,242,15,88,193,102,15,126,193,49,205,255,221,
+  0,216,68,36,16,221,28,36,51,44,36,255,131,232,8,252,233,244,1,248,138,129,
+  252,248,239,15,130,244,63,129,122,253,4,239,255,221,2,199,68,36,16,0,0,192,
+  89,216,68,36,16,221,28,36,139,44,36,255,248,2,15,205,252,233,244,89,248,139,
+  129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,2,252,247,213,255,
+  248,89,252,242,15,42,197,252,233,244,72,255,248,89,137,44,36,219,4,36,252,
+  233,244,73,255,248,135,139,68,36,20,252,233,244,63,255,248,140,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,255,248,2,129,122,253,12,239,15,133,244,
+  63,139,74,8,255,248,140,129,252,248,239,15,130,244,63,129,122,253,4,239,15,
+  131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,16,
+  74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,252,
+  242,15,88,202,102,15,126,197,102,15,126,201,255,248,140,129,252,248,239,15,
+  130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,
+  36,16,221,28,36,139,76,36,8,139,44,36,255,211,229,252,233,244,89,255,248,
+  141,129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,141,129,252,248,
+  239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,
+  244,63,252,242,15,16,2,252,242,15,16,74,8,189,0,0,56,67,102,15,110,213,102,
+  15,112,210,81,252,242,15,88,194,252,242,15,88,202,102,15,126,197,102,15,126,
+  201,255,248,141,129,252,248,239,15,130,244,63,129,122,253,4,239,15,131,244,
+  63,129,122,253,12,239,15,131,244,63,221,2,221,66,8,199,68,36,16,0,0,192,89,
+  216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,139,76,36,8,139,44,36,255,
+  211,252,237,252,233,244,89,255,248,142,129,252,248,239,15,130,244,63,129,
+  122,253,4,239,255,248,142,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,15,
+  16,74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,
+  252,242,15,88,202,102,15,126,197,102,15,126,201,255,248,142,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,
+  36,16,221,28,36,139,76,36,8,139,44,36,255,211,252,253,252,233,244,89,255,
+  248,143,129,252,248,239,15,130,244,63,129,122,253,4,239,255,248,143,129,252,
+  248,239,15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,
+  15,131,244,63,252,242,15,16,2,252,242,15,16,74,8,189,0,0,56,67,102,15,110,
+  213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,102,15,126,197,
+  102,15,126,201,255,248,143,129,252,248,239,15,130,244,63,129,122,253,4,239,
+  15,131,244,63,129,122,253,12,239,15,131,244,63,221,2,221,66,8,199,68,36,16,
+  0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,139,76,36,8,139,
+  44,36,255,211,197,252,233,244,89,255,248,144,129,252,248,239,15,130,244,63,
+  129,122,253,4,239,255,248,144,129,252,248,239,15,130,244,63,129,122,253,4,
+  239,15,131,244,63,129,122,253,12,239,15,131,244,63,252,242,15,16,2,252,242,
+  15,16,74,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,15,88,194,
+  252,242,15,88,202,102,15,126,197,102,15,126,201,255,248,144,129,252,248,239,
+  15,130,244,63,129,122,253,4,239,15,131,244,63,129,122,253,12,239,15,131,244,
+  63,221,2,221,66,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,
+  36,16,221,28,36,139,76,36,8,139,44,36,255,211,205,252,233,244,89,248,127,
+  184,237,252,233,244,63,248,129,184,237,248,63,139,108,36,48,139,114,252,252,
+  137,116,36,24,137,149,233,141,68,194,252,248,141,136,233,137,133,233,139,
+  66,252,248,59,141,233,15,135,244,251,137,44,36,252,255,144,233,139,149,233,
+  133,192,15,143,244,78,248,1,255,139,141,233,41,209,193,252,233,3,133,192,
+  141,65,1,139,106,252,248,15,133,244,33,139,181,233,139,14,15,182,252,233,
+  15,182,205,131,198,4,252,255,36,171,248,33,137,209,252,247,198,237,15,133,
+  244,249,15,182,110,252,253,252,247,213,141,20,252,234,252,233,244,28,248,
+  3,137,252,245,131,229,252,248,41,252,234,252,233,244,28,248,5,186,237,137,
+  252,233,232,251,1,0,139,149,233,49,192,252,233,244,1,248,75,93,137,108,36,
+  16,139,108,36,48,137,116,36,24,137,149,233,255,141,68,194,252,248,137,252,
+  233,137,133,233,232,251,1,21,139,149,233,139,133,233,41,208,193,232,3,131,
+  192,1,139,108,36,16,85,195,248,145,255,15,182,131,233,168,235,15,133,244,
+  251,168,235,15,133,244,247,168,235,15,132,244,247,252,255,139,233,252,233,
+  244,247,255,248,146,15,182,131,233,168,235,15,133,244,251,252,233,244,247,
+  248,147,15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,
+  255,139,233,15,132,244,247,168,235,15,132,244,251,248,1,255,139,108,36,48,
+  137,149,233,137,252,242,137,252,233,232,251,1,22,248,3,139,149,233,248,4,
+  15,182,78,252,253,248,5,15,182,110,252,252,15,183,70,252,254,252,255,164,
+  253,171,233,248,148,131,198,4,139,77,232,137,76,36,20,252,233,244,4,248,149,
+  255,139,106,252,248,139,173,233,15,182,133,233,141,4,194,139,108,36,48,137,
+  149,233,137,133,233,137,252,242,141,139,233,137,171,233,137,116,36,24,232,
+  251,1,23,252,233,244,3,255,248,150,137,116,36,24,255,248,151,255,137,116,
+  36,24,131,206,1,248,1,255,141,68,194,252,248,139,108,36,48,137,149,233,137,
+  133,233,137,252,242,137,252,233,232,251,1,24,199,68,36,24,0,0,0,0,255,131,
+  230,252,254,255,139,149,233,137,193,139,133,233,41,208,137,205,15,182,78,
+  252,253,193,232,3,131,192,1,252,255,229,248,152,255,85,141,108,36,12,85,83,
+  82,81,80,15,182,69,252,252,138,101,252,248,137,125,252,252,137,117,252,248,
+  139,93,0,139,139,233,199,131,233,237,137,131,233,137,139,233,129,252,236,
+  239,252,242,15,17,125,216,252,242,15,17,117,208,252,242,15,17,109,200,252,
+  242,15,17,101,192,252,242,15,17,93,184,252,242,15,17,85,176,252,242,15,17,
+  77,168,252,242,15,17,69,160,139,171,233,139,147,233,137,171,233,199,131,233,
+  0,0,0,0,137,149,233,141,84,36,16,141,139,233,232,251,1,25,139,141,233,129,
+  225,239,137,204,137,169,233,139,149,233,139,177,233,255,248,153,255,133,192,
+  15,136,244,249,137,68,36,20,139,122,252,248,139,191,233,139,191,233,199,131,
+  233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,129,252,253,239,15,130,244,248,139,68,36,20,248,2,252,255,36,171,248,3,
+  252,247,216,137,252,233,137,194,232,251,1,26,255,248,91,255,217,124,36,4,
+  137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137,68,
+  36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,154,102,
+  15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,
+  102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,
+  15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,184,0,0,252,240,
+  63,102,15,110,208,102,15,112,210,81,252,242,15,194,193,1,102,15,84,194,252,
+  242,15,92,200,15,40,193,248,1,195,248,93,255,217,124,36,4,137,68,36,8,102,
+  184,0,8,102,11,68,36,4,102,37,252,255,252,251,102,137,68,36,6,217,108,36,
+  6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,155,102,15,252,239,210,
+  102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,
+  81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,252,
+  242,15,88,203,252,242,15,92,203,102,15,86,202,184,0,0,252,240,191,102,15,
+  110,208,102,15,112,210,81,252,242,15,194,193,6,102,15,84,194,252,242,15,92,
+  200,15,40,193,248,1,195,248,114,255,217,124,36,4,137,68,36,8,102,184,0,12,
+  102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,
+  68,36,8,195,255,248,156,102,15,252,239,210,102,15,118,210,102,15,115,210,
   1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,202,
-  102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,
-  203,102,15,86,202,184,0,0,252,240,63,102,15,110,208,102,15,112,210,81,252,
-  242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,
-  92,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37,252,255,
-  252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,
-  195,255,248,154,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,
-  0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,
-  217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,
-  15,86,202,184,0,0,252,240,191,102,15,110,208,102,15,112,210,81,252,242,15,
-  194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,113,255,
-  217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137,68,36,6,217,
-  108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,155,102,15,252,
-  239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,
-  15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,
-  85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,184,0,0,252,240,63,102,
-  15,110,216,102,15,112,219,81,252,242,15,194,193,1,102,15,84,195,252,242,15,
-  92,200,102,15,86,202,15,40,193,248,1,195,248,156,255,15,40,232,252,242,15,
-  94,193,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,
-  15,110,216,102,15,112,219,81,15,40,224,102,15,84,226,102,15,46,220,15,134,
-  244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,102,15,86,226,184,
-  0,0,252,240,63,102,15,110,208,102,15,112,210,81,252,242,15,194,196,1,102,
-  15,84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,15,92,193,
-  195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,255,217,193,216,
-  252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,
-  137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,233,195,
-  255,248,97,217,252,234,222,201,248,157,217,84,36,4,129,124,36,4,0,0,128,127,
-  15,132,244,247,129,124,36,4,0,0,128,252,255,15,132,244,248,248,158,217,192,
-  217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,
-  217,248,1,195,248,2,221,216,217,252,238,195,255,248,116,219,84,36,4,219,68,
-  36,4,255,223,252,233,255,221,252,233,223,224,158,255,15,133,244,254,15,138,
-  244,255,221,216,139,68,36,4,131,252,248,1,15,142,244,252,248,1,169,1,0,0,
-  0,15,133,244,248,216,200,209,232,252,233,244,1,248,2,209,232,15,132,244,251,
-  217,192,248,3,216,200,209,232,15,132,244,250,15,131,244,3,220,201,252,233,
-  244,3,248,4,255,222,201,248,5,195,248,6,15,132,244,5,15,130,244,253,217,232,
-  222,252,241,252,247,216,131,252,248,1,15,132,244,5,252,233,244,1,248,7,221,
-  216,217,232,195,248,8,217,84,36,4,217,201,217,84,36,8,139,68,36,4,209,224,
-  61,0,0,0,252,255,15,132,244,248,139,68,36,8,209,224,15,132,244,250,61,0,0,
-  0,252,255,15,132,244,250,217,252,241,252,233,244,158,248,9,255,217,232,255,
-  223,252,234,255,221,252,234,223,224,158,255,15,132,244,247,217,201,248,1,
-  221,216,195,248,2,217,225,217,232,255,15,132,244,249,221,216,217,225,217,
-  252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,4,15,137,244,249,217,201,
-  248,3,221,217,217,225,195,248,4,131,124,36,4,0,15,141,244,3,221,216,221,216,
-  133,192,15,132,244,251,217,252,238,195,248,5,199,68,36,4,0,0,128,127,217,
-  68,36,4,195,255,248,116,255,248,159,252,242,15,45,193,252,242,15,42,208,102,
-  15,46,202,15,133,244,254,15,138,244,255,248,160,131,252,248,1,15,142,244,
-  252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,252,233,244,
-  1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,192,209,232,
-  15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244,3,248,4,252,
-  242,15,89,193,248,5,195,248,6,15,132,244,5,15,130,244,253,252,247,216,232,
-  244,1,184,0,0,252,240,63,102,15,110,200,102,15,112,201,81,252,242,15,94,200,
-  15,40,193,195,248,7,184,0,0,252,240,63,102,15,110,192,102,15,112,192,81,195,
-  248,8,252,242,15,17,76,36,12,252,242,15,17,68,36,4,131,124,36,12,0,15,133,
-  244,247,139,68,36,16,209,224,61,0,0,224,252,255,15,132,244,248,248,1,131,
-  124,36,4,0,15,133,244,247,255,139,68,36,8,209,224,15,132,244,250,61,0,0,224,
-  252,255,15,132,244,251,248,1,221,68,36,12,221,68,36,4,217,252,241,217,192,
-  217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,
-  217,221,92,36,4,252,242,15,16,68,36,4,195,248,9,184,0,0,252,240,63,102,15,
-  110,208,102,15,112,210,81,102,15,46,194,15,132,244,247,15,40,193,248,1,195,
-  248,2,102,15,252,239,210,102,15,118,210,102,15,115,210,1,102,15,84,194,184,
-  0,0,252,240,63,102,15,110,208,102,15,112,210,81,102,15,46,194,15,132,244,
-  1,102,15,80,193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,184,
-  0,0,252,240,127,102,15,110,192,102,15,112,192,81,195,248,4,102,15,80,193,
-  133,192,15,133,244,3,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,
-  3,255,15,87,192,195,248,161,255,139,68,36,12,252,242,15,16,68,36,4,131,252,
-  248,1,15,132,244,247,15,135,244,248,232,244,90,252,233,244,253,248,1,232,
-  244,92,252,233,244,253,248,2,131,252,248,3,15,132,244,247,15,135,244,248,
-  232,244,113,255,252,233,244,253,248,1,252,242,15,81,192,248,7,252,242,15,
-  17,68,36,4,221,68,36,4,195,248,2,221,68,36,4,131,252,248,5,15,130,244,97,
-  15,132,244,157,248,2,131,252,248,7,15,132,244,247,15,135,244,248,217,252,
-  237,217,201,217,252,241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,
-  252,248,9,15,132,244,247,15,135,244,248,255,217,252,236,217,201,217,252,241,
-  195,248,1,217,252,254,195,248,2,131,252,248,11,15,132,244,247,15,135,244,
-  255,217,252,255,195,248,1,217,252,242,221,216,195,255,139,68,36,12,221,68,
-  36,4,131,252,248,1,15,130,244,90,15,132,244,92,131,252,248,3,15,130,244,113,
-  15,135,244,248,217,252,250,195,248,2,131,252,248,5,15,130,244,97,15,132,244,
-  157,131,252,248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,
-  241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,
-  244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217,
-  252,254,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255,
-  195,248,1,217,252,242,221,216,195,255,248,9,204,255,248,162,255,139,68,36,
-  20,252,242,15,16,68,36,4,252,242,15,16,76,36,12,131,252,248,1,15,132,244,
-  247,15,135,244,248,252,242,15,88,193,248,7,252,242,15,17,68,36,4,221,68,36,
-  4,195,248,1,252,242,15,92,193,252,233,244,7,248,2,131,252,248,3,15,132,244,
-  247,15,135,244,248,252,242,15,89,193,252,233,244,7,248,1,252,242,15,94,193,
-  252,233,244,7,248,2,131,252,248,5,15,132,244,247,255,15,135,244,248,232,244,
-  156,252,233,244,7,248,1,90,232,244,116,82,252,233,244,7,248,2,131,252,248,
-  7,15,132,244,247,15,135,244,248,184,0,0,0,128,102,15,110,200,102,15,112,201,
-  81,15,87,193,252,233,244,7,248,1,102,15,252,239,201,102,15,118,201,102,15,
-  115,209,1,15,84,193,252,233,244,7,248,2,255,131,252,248,9,15,135,244,248,
-  221,68,36,4,221,68,36,12,15,132,244,247,217,252,243,195,248,1,217,201,217,
-  252,253,221,217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,252,
-  242,15,93,193,252,233,244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204,
-  255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,
-  135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,
-  244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131,252,248,
-  5,15,130,244,156,15,132,244,116,131,252,248,7,15,132,244,247,15,135,244,248,
-  255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248,9,15,
-  132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253,221,
-  217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252,233,
-  219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225,223,
-  224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221,225,
-  223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248,163,
-  156,90,137,209,129,252,242,0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,
-  247,139,68,36,4,87,83,15,162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,
-  12,91,95,248,1,195,248,164,255,204,248,165,255,85,137,229,83,137,203,43,163,
-  233,255,137,163,233,255,15,182,139,233,131,252,233,1,15,136,244,248,248,1,
-  139,132,253,139,233,137,4,140,131,252,233,1,15,137,244,1,248,2,139,139,233,
-  139,147,233,252,255,147,233,137,131,233,137,147,233,128,187,233,1,15,130,
-  244,253,15,132,244,252,221,155,233,252,233,244,253,248,6,255,217,155,233,
-  248,7,255,41,163,233,255,139,93,252,252,201,195,255,249,255,129,124,253,202,
-  4,239,15,133,244,253,129,124,253,194,4,239,15,133,244,254,139,44,202,131,
-  198,4,59,44,194,255,15,141,244,255,255,15,140,244,255,255,15,143,244,255,
-  255,15,142,244,255,255,248,6,15,183,70,252,254,141,180,253,134,233,248,9,
-  139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,7,15,
-  135,244,43,129,124,253,194,4,239,15,130,244,247,15,133,244,43,255,252,242,
-  15,42,4,194,252,233,244,248,255,221,4,202,219,4,194,252,233,244,249,255,248,
-  8,15,135,244,43,255,252,242,15,42,12,202,252,242,15,16,4,194,131,198,4,102,
-  15,46,193,255,15,134,244,9,255,15,135,244,9,255,15,130,244,9,255,15,131,244,
-  9,255,252,233,244,6,255,219,4,202,252,233,244,248,255,129,124,253,202,4,239,
-  15,131,244,43,129,124,253,194,4,239,15,131,244,43,255,248,1,252,242,15,16,
-  4,194,248,2,131,198,4,102,15,46,4,202,248,3,255,248,1,221,4,202,248,2,221,
-  4,194,248,3,131,198,4,255,15,134,244,247,255,15,135,244,247,255,15,130,244,
-  247,255,15,131,244,247,255,15,183,70,252,254,141,180,253,134,233,248,1,139,
-  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,
-  4,131,198,4,255,129,252,253,239,15,133,244,253,129,124,253,202,4,239,15,133,
-  244,254,139,44,194,59,44,202,255,15,133,244,255,255,15,132,244,255,255,15,
-  183,70,252,254,141,180,253,134,233,248,9,139,6,15,182,204,15,182,232,131,
-  198,4,193,232,16,252,255,36,171,248,7,15,135,244,251,129,124,253,202,4,239,
-  15,130,244,247,15,133,244,251,255,252,242,15,42,4,202,255,219,4,202,255,252,
-  233,244,248,248,8,15,135,244,251,255,252,242,15,42,4,194,102,15,46,4,202,
-  255,219,4,194,221,4,202,255,252,233,244,250,255,129,252,253,239,15,131,244,
-  251,129,124,253,202,4,239,15,131,244,251,255,248,1,252,242,15,16,4,202,248,
-  2,102,15,46,4,194,248,4,255,248,1,221,4,202,248,2,221,4,194,248,4,255,15,
-  138,244,248,15,133,244,248,255,15,138,244,248,15,132,244,247,255,248,1,15,
-  183,70,252,254,141,180,253,134,233,248,2,255,248,2,15,183,70,252,254,141,
-  180,253,134,233,248,1,255,252,233,244,9,255,248,5,255,129,252,253,239,15,
-  132,244,48,129,124,253,202,4,239,15,132,244,48,255,57,108,202,4,15,133,244,
-  2,129,252,253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129,
-  252,253,239,15,135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133,
-  233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,47,255,
-  248,3,129,252,253,239,255,15,133,244,9,255,252,233,244,48,255,252,247,208,
-  139,108,202,4,131,198,4,129,252,253,239,15,133,244,249,139,12,202,59,12,135,
-  255,139,108,202,4,131,198,4,255,129,252,253,239,15,133,244,253,129,124,253,
-  199,4,239,15,133,244,254,139,44,199,59,44,202,255,15,183,70,252,254,141,180,
-  253,134,233,248,9,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
-  36,171,248,7,15,135,244,249,129,124,253,199,4,239,15,130,244,247,255,252,
-  242,15,42,4,199,255,219,4,199,255,252,233,244,248,248,8,255,252,242,15,42,
-  4,202,102,15,46,4,199,255,219,4,202,221,4,199,255,129,252,253,239,15,131,
-  244,249,255,248,1,252,242,15,16,4,199,248,2,102,15,46,4,202,248,4,255,248,
-  1,221,4,199,248,2,221,4,202,248,4,255,252,247,208,139,108,202,4,131,198,4,
-  57,197,255,15,133,244,249,15,183,70,252,254,141,180,253,134,233,248,2,139,
-  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,129,252,
-  253,239,15,133,244,2,252,233,244,48,255,15,132,244,248,129,252,253,239,15,
-  132,244,48,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15,182,204,15,
-  182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,4,131,198,4,129,
-  252,253,239,255,137,108,202,4,139,44,194,137,44,202,255,139,108,194,4,139,
-  4,194,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,
-  16,252,255,36,171,255,49,252,237,129,124,253,194,4,239,129,213,239,137,108,
-  202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,
-  129,124,253,194,4,239,15,133,244,251,139,44,194,252,247,221,15,128,244,250,
-  199,68,202,4,237,137,44,202,248,9,139,6,15,182,204,15,182,232,131,198,4,193,
-  232,16,252,255,36,171,248,4,199,68,202,4,0,0,224,65,199,4,202,0,0,0,0,252,
-  233,244,9,248,5,15,135,244,53,255,129,124,253,194,4,239,15,131,244,53,255,
-  252,242,15,16,4,194,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,
-  193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,202,255,129,124,253,
-  194,4,239,15,133,244,248,139,4,194,255,139,128,233,248,1,199,68,202,4,237,
-  137,4,202,255,15,87,192,252,242,15,42,128,233,248,1,252,242,15,17,4,202,255,
-  219,128,233,248,1,221,28,202,255,139,6,15,182,204,15,182,232,131,198,4,193,
-  232,16,252,255,36,171,248,2,129,124,253,194,4,239,15,133,244,56,139,12,194,
-  255,139,169,233,131,252,253,0,15,133,244,255,248,3,255,248,57,137,213,232,
-  251,1,20,255,252,242,15,42,192,255,137,4,36,219,4,36,255,137,252,234,15,182,
-  78,252,253,252,233,244,1,255,248,9,252,246,133,233,235,15,133,244,3,252,233,
-  244,56,255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,239,15,133,
-  244,50,129,124,253,199,4,239,15,133,244,50,139,44,252,234,3,44,199,15,128,
-  244,49,255,129,124,253,252,234,4,239,15,133,244,52,129,124,253,199,4,239,
-  15,133,244,52,139,4,199,3,4,252,234,15,128,244,51,255,129,124,253,252,234,
-  4,239,15,133,244,55,129,124,253,194,4,239,15,133,244,55,139,44,252,234,3,
-  44,194,15,128,244,54,255,199,68,202,4,237,255,129,124,253,252,234,4,239,15,
-  131,244,50,255,129,124,253,199,4,239,15,131,244,50,255,252,242,15,16,4,252,
-  234,252,242,15,88,4,199,255,221,4,252,234,220,4,199,255,129,124,253,252,234,
-  4,239,15,131,244,52,255,129,124,253,199,4,239,15,131,244,52,255,252,242,15,
-  16,4,199,252,242,15,88,4,252,234,255,221,4,199,220,4,252,234,255,129,124,
-  253,252,234,4,239,15,131,244,55,129,124,253,194,4,239,15,131,244,55,255,252,
-  242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,129,
-  124,253,252,234,4,239,15,133,244,50,129,124,253,199,4,239,15,133,244,50,139,
-  44,252,234,43,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,
-  52,129,124,253,199,4,239,15,133,244,52,139,4,199,43,4,252,234,15,128,244,
-  51,255,129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,15,133,
-  244,55,139,44,252,234,43,44,194,15,128,244,54,255,252,242,15,16,4,252,234,
-  252,242,15,92,4,199,255,221,4,252,234,220,36,199,255,252,242,15,16,4,199,
-  252,242,15,92,4,252,234,255,221,4,199,220,36,252,234,255,252,242,15,16,4,
-  252,234,252,242,15,92,4,194,255,221,4,252,234,220,36,194,255,129,124,253,
-  252,234,4,239,15,133,244,50,129,124,253,199,4,239,15,133,244,50,139,44,252,
-  234,15,175,44,199,15,128,244,49,255,129,124,253,252,234,4,239,15,133,244,
-  52,129,124,253,199,4,239,15,133,244,52,139,4,199,15,175,4,252,234,15,128,
-  244,51,255,129,124,253,252,234,4,239,15,133,244,55,129,124,253,194,4,239,
-  15,133,244,55,139,44,252,234,15,175,44,194,15,128,244,54,255,252,242,15,16,
-  4,252,234,252,242,15,89,4,199,255,221,4,252,234,220,12,199,255,252,242,15,
-  16,4,199,252,242,15,89,4,252,234,255,221,4,199,220,12,252,234,255,252,242,
-  15,16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,194,255,252,
-  242,15,16,4,252,234,252,242,15,94,4,199,255,221,4,252,234,220,52,199,255,
-  252,242,15,16,4,199,252,242,15,94,4,252,234,255,221,4,199,220,52,252,234,
-  255,252,242,15,16,4,252,234,252,242,15,94,4,194,255,221,4,252,234,220,52,
-  194,255,252,242,15,16,4,252,234,252,242,15,16,12,199,255,221,4,252,234,221,
-  4,199,255,252,242,15,16,4,199,252,242,15,16,12,252,234,255,221,4,199,221,
-  4,252,234,255,252,242,15,16,4,252,234,252,242,15,16,12,194,255,221,4,252,
-  234,221,4,194,255,248,166,232,244,156,255,252,233,244,166,255,232,244,116,
-  255,15,182,252,236,15,182,192,141,12,194,41,232,137,76,36,4,137,68,36,8,248,
-  35,139,108,36,48,137,44,36,137,149,233,137,116,36,24,232,251,1,27,139,149,
-  233,133,192,15,133,244,44,15,182,110,252,255,15,182,78,252,253,139,68,252,
-  234,4,139,44,252,234,137,68,202,4,137,44,202,139,6,15,182,204,15,182,232,
-  131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,4,135,199,68,202,
-  4,237,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
-  36,171,255,15,191,192,199,68,202,4,237,137,4,202,255,15,191,192,252,242,15,
-  42,192,252,242,15,17,4,202,255,223,70,252,254,221,28,202,255,252,242,15,16,
-  4,199,252,242,15,17,4,202,255,221,4,199,221,28,202,255,252,247,208,137,68,
-  202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,
-  141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,41,131,193,8,
-  57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
-  255,36,171,255,139,106,252,248,139,172,253,133,233,139,173,233,139,69,4,139,
-  109,0,137,68,202,4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,
-  16,252,255,36,171,255,139,106,252,248,139,172,253,141,233,128,189,233,0,139,
-  173,233,139,12,194,139,68,194,4,137,77,0,137,69,4,15,132,244,247,252,246,
-  133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193,
-  232,16,252,255,36,171,248,2,129,232,239,129,252,248,239,15,134,244,1,252,
-  246,129,233,235,15,132,244,1,135,213,141,139,233,255,232,251,1,28,137,252,
-  234,252,233,244,1,255,252,247,208,139,106,252,248,139,172,253,141,233,139,
-  12,135,139,133,233,137,8,199,64,4,237,252,246,133,233,235,15,133,244,248,
-  248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
-  2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132,244,1,137,213,137,
-  194,141,139,233,232,251,1,28,137,252,234,252,233,244,1,255,139,106,252,248,
-  255,252,242,15,16,4,199,255,139,172,253,141,233,139,141,233,255,252,242,15,
-  17,1,255,221,25,255,252,247,208,139,106,252,248,139,172,253,141,233,139,141,
-  233,137,65,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
-  171,255,141,180,253,134,233,139,108,36,48,131,189,233,0,15,132,244,247,137,
-  149,233,141,20,202,137,252,233,232,251,1,29,139,149,233,248,1,139,6,15,182,
-  204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,74,
-  252,248,139,4,135,139,108,36,48,137,76,36,8,137,68,36,4,137,44,36,137,149,
-  233,137,116,36,24,232,251,1,30,139,149,233,15,182,78,252,253,137,4,202,199,
-  68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
-  171,255,139,108,36,48,137,149,233,139,139,233,59,139,233,137,116,36,24,15,
-  131,244,251,248,1,137,193,37,252,255,7,0,0,193,252,233,11,137,76,36,8,61,
-  252,255,7,0,0,15,132,244,249,248,2,137,44,36,137,68,36,4,232,251,1,31,139,
-  149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,
-  182,232,131,198,4,193,232,16,252,255,36,171,248,3,184,1,8,0,0,252,233,244,
-  2,248,5,137,252,233,232,251,1,32,15,183,70,252,254,252,233,244,1,255,252,
-  247,208,139,108,36,48,139,139,233,137,116,36,24,59,139,233,137,149,233,15,
-  131,244,249,248,2,139,20,135,137,252,233,232,251,1,33,139,149,233,15,182,
-  78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,
-  4,193,232,16,252,255,36,171,248,3,137,252,233,232,251,1,32,15,183,70,252,
-  254,252,247,208,252,233,244,2,255,252,247,208,139,106,252,248,139,173,233,
-  139,4,135,252,233,244,167,255,252,247,208,139,106,252,248,139,173,233,139,
-  4,135,252,233,244,168,255,15,182,252,236,15,182,192,129,124,253,252,234,4,
-  239,15,133,244,38,139,44,252,234,255,129,124,253,194,4,239,15,133,244,251,
-  139,4,194,255,129,124,253,194,4,239,15,131,244,251,255,252,242,15,16,4,194,
-  252,242,15,45,192,252,242,15,42,200,102,15,46,193,255,221,4,194,219,20,36,
-  219,4,36,255,15,133,244,38,255,59,133,233,15,131,244,38,193,224,3,3,133,233,
-  129,120,253,4,239,15,132,244,248,139,40,139,64,4,137,44,202,137,68,202,4,
-  248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
-  2,131,189,233,0,15,132,244,249,139,141,233,252,246,129,233,235,15,132,244,
-  38,15,182,78,252,253,248,3,199,68,202,4,237,252,233,244,1,248,5,255,129,124,
-  253,194,4,239,15,133,244,38,139,4,194,252,233,244,167,255,15,182,252,236,
-  15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,36,
-  139,44,252,234,248,167,139,141,233,35,136,233,105,201,239,3,141,233,248,1,
-  129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253,4,239,
-  15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,137,76,194,4,
-  248,2,255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,
-  248,3,15,182,70,252,253,199,68,194,4,237,252,233,244,2,248,4,139,137,233,
-  133,201,15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,233,
-  235,15,133,244,3,252,233,244,36,255,15,182,252,236,15,182,192,129,124,253,
-  252,234,4,239,15,133,244,37,139,44,252,234,59,133,233,15,131,244,37,193,224,
-  3,3,133,233,129,120,253,4,239,15,132,244,248,139,40,139,64,4,137,44,202,137,
-  68,202,4,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
-  171,248,2,131,189,233,0,15,132,244,249,139,141,233,252,246,129,233,235,15,
-  132,244,37,255,15,182,78,252,253,248,3,199,68,202,4,237,252,233,244,1,255,
-  15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,41,139,44,
-  252,234,255,15,133,244,41,255,59,133,233,15,131,244,41,193,224,3,3,133,233,
-  129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,
-  248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,
-  131,198,4,193,232,16,252,255,36,171,248,3,131,189,233,0,15,132,244,1,139,
-  141,233,252,246,129,233,235,255,15,132,244,41,15,182,78,252,253,252,233,244,
-  1,248,5,129,124,253,194,4,239,15,133,244,41,139,4,194,252,233,244,168,248,
-  7,128,165,233,235,139,139,233,137,171,233,137,141,233,15,182,78,252,253,252,
-  233,244,2,255,15,182,252,236,15,182,192,252,247,208,139,4,135,129,124,253,
-  252,234,4,239,15,133,244,39,139,44,252,234,248,168,139,141,233,35,136,233,
-  105,201,239,198,133,233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,
-  57,129,233,15,133,244,251,129,121,253,4,239,15,132,244,250,248,2,255,252,
-  246,133,233,235,15,133,244,253,248,3,15,182,70,252,253,139,108,194,4,139,
-  4,194,137,105,4,137,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
-  255,36,171,248,4,131,189,233,0,15,132,244,2,137,76,36,16,139,141,233,252,
-  246,129,233,235,15,132,244,39,139,76,36,16,252,233,244,2,248,5,139,137,233,
-  133,201,15,133,244,1,255,139,141,233,133,201,15,132,244,252,252,246,129,233,
-  235,15,132,244,39,248,6,137,68,36,16,199,68,36,20,237,137,108,36,12,141,68,
-  36,16,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,
-  36,24,232,251,1,34,139,149,233,139,108,36,12,137,193,252,233,244,2,248,7,
-  128,165,233,235,139,131,233,137,171,233,137,133,233,252,233,244,3,255,15,
-  182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,40,139,44,252,
-  234,59,133,233,15,131,244,40,193,224,3,3,133,233,129,120,253,4,239,15,132,
-  244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,
-  12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
-  255,36,171,248,3,131,189,233,0,15,132,244,1,255,139,141,233,252,246,129,233,
-  235,15,132,244,40,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139,
-  139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,137,124,
-  36,16,139,60,199,248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,
-  133,244,253,248,2,139,68,36,20,131,232,1,15,132,244,250,1,252,248,59,133,
-  233,15,135,244,251,41,252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,
-  105,4,131,193,8,137,111,4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,
-  36,16,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
-  5,137,108,36,4,139,108,36,48,137,149,233,137,68,36,8,137,44,36,137,116,36,
-  24,232,251,1,35,139,149,233,15,182,78,252,253,252,233,244,1,248,7,255,128,
-  165,233,235,139,131,233,137,171,233,137,133,233,252,233,244,2,255,3,68,36,
-  20,255,129,124,253,202,4,239,139,44,202,15,133,244,58,141,84,202,8,137,114,
-  252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,
-  171,255,141,76,202,8,137,215,139,105,252,248,129,121,253,252,252,239,15,133,
-  244,29,248,59,139,114,252,252,252,247,198,237,15,133,244,253,248,1,137,106,
-  252,248,137,68,36,20,131,232,1,15,132,244,249,248,2,139,41,137,47,139,105,
-  4,131,193,8,137,111,4,131,199,8,131,232,1,15,133,244,2,139,106,252,248,248,
-  3,139,68,36,20,128,189,233,1,15,135,244,251,248,4,139,181,233,139,14,15,182,
-  252,233,15,182,205,131,198,4,252,255,36,171,248,5,255,252,247,198,237,15,
-  133,244,4,15,182,78,252,253,252,247,209,141,12,202,139,121,252,248,139,191,
-  233,139,191,233,252,233,244,4,248,7,129,252,238,239,252,247,198,237,15,133,
-  244,254,41,252,242,137,215,139,114,252,252,252,233,244,1,248,8,129,198,239,
-  252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,236,137,41,137,65,4,
-  139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,105,224,139,65,228,
-  137,105,252,248,137,65,252,252,129,252,248,239,184,237,15,133,244,29,137,
-  202,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,198,
-  4,252,255,36,171,255,137,124,36,16,137,92,36,20,139,108,202,252,240,139,68,
-  202,252,248,139,157,233,131,198,4,139,189,233,248,1,57,216,15,131,244,251,
-  129,124,253,199,4,239,15,132,244,250,255,219,68,202,252,248,255,139,108,199,
-  4,137,108,202,12,139,44,199,137,108,202,8,131,192,1,255,137,68,202,252,248,
-  248,2,15,183,70,252,254,141,180,253,134,233,248,3,139,92,36,20,139,124,36,
-  16,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,4,
-  131,192,1,255,137,68,202,252,248,255,252,233,244,1,248,5,41,216,248,6,59,
-  133,233,15,135,244,3,105,252,248,239,3,189,233,129,191,233,239,15,132,244,
-  253,141,92,24,1,139,175,233,139,135,233,137,44,202,137,68,202,4,139,175,233,
-  139,135,233,137,108,202,8,137,68,202,12,137,92,202,252,248,252,233,244,2,
-  248,7,255,131,192,1,252,233,244,6,255,129,124,253,202,252,236,239,15,133,
-  244,251,139,108,202,232,129,124,253,202,252,244,239,15,133,244,251,129,124,
-  253,202,252,252,239,15,133,244,251,128,189,233,235,15,133,244,251,141,180,
-  253,134,233,199,68,202,252,248,0,0,0,0,248,1,139,6,15,182,204,15,182,232,
-  131,198,4,193,232,16,252,255,36,171,248,5,198,70,252,252,235,141,180,253,
-  134,233,198,6,235,252,233,244,1,255,15,182,252,236,15,182,192,137,124,36,
-  16,141,188,253,194,233,141,12,202,43,122,252,252,133,252,237,15,132,244,251,
-  141,108,252,233,252,248,57,215,15,131,244,248,248,1,139,71,252,248,137,1,
-  139,71,252,252,131,199,8,137,65,4,131,193,8,57,252,233,15,131,244,249,57,
-  215,15,130,244,1,248,2,199,65,4,237,131,193,8,57,252,233,15,130,244,2,248,
-  3,139,124,36,16,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
-  36,171,248,5,199,68,36,20,1,0,0,0,137,208,41,252,248,15,134,244,3,137,197,
-  193,252,237,3,131,197,1,137,108,36,20,139,108,36,48,1,200,59,133,233,15,135,
-  244,253,248,6,255,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,
-  131,193,8,57,215,15,130,244,6,252,233,244,3,248,7,137,149,233,137,141,233,
-  137,116,36,24,41,215,139,84,36,20,131,252,234,1,137,252,233,232,251,1,0,139,
-  149,233,139,141,233,1,215,252,233,244,6,255,193,225,3,255,248,1,139,114,252,
-  252,137,68,36,20,252,247,198,237,15,133,244,253,255,248,13,137,215,131,232,
-  1,15,132,244,249,248,2,139,44,15,137,111,252,248,139,108,15,4,137,111,252,
-  252,131,199,8,131,232,1,15,133,244,2,248,3,139,68,36,20,15,182,110,252,255,
-  248,5,57,197,15,135,244,252,255,139,108,10,4,137,106,252,252,139,44,10,137,
-  106,252,248,255,248,5,56,70,252,255,15,135,244,252,255,15,182,78,252,253,
-  252,247,209,141,20,202,139,122,252,248,139,191,233,139,191,233,139,6,15,182,
-  204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,6,255,199,71,252,252,
-  237,131,199,8,255,199,68,194,252,244,237,255,131,192,1,252,233,244,5,248,
-  7,141,174,233,252,247,197,237,15,133,244,14,41,252,234,255,1,252,233,255,
-  137,252,245,209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,
-  148,255,141,12,202,255,129,121,253,4,239,15,133,244,255,255,129,121,253,12,
-  239,15,133,244,60,129,121,253,20,239,15,133,244,60,139,41,131,121,16,0,15,
-  140,244,251,255,129,121,253,12,239,15,133,244,164,129,121,253,20,239,15,133,
-  244,164,255,139,105,16,133,252,237,15,136,244,251,3,41,15,128,244,247,137,
-  41,255,59,105,8,199,65,28,237,137,105,24,255,15,142,244,253,248,1,248,6,141,
-  180,253,134,233,255,141,180,253,134,233,15,183,70,252,254,15,142,245,248,
-  1,248,6,255,15,143,244,253,248,6,141,180,253,134,233,248,1,255,248,7,139,
-  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,255,3,41,
-  15,128,244,1,137,41,255,15,141,244,7,255,141,180,253,134,233,15,183,70,252,
-  254,15,141,245,255,15,140,244,7,255,252,233,244,6,248,9,255,129,121,253,4,
-  239,255,15,131,244,60,129,121,253,12,239,15,131,244,60,255,129,121,253,12,
-  239,15,131,244,164,129,121,253,20,239,15,131,244,164,255,139,105,20,255,129,
-  252,253,239,15,131,244,60,255,252,242,15,16,1,252,242,15,16,73,8,255,252,
-  242,15,88,65,16,252,242,15,17,1,133,252,237,15,136,244,249,255,15,140,244,
-  249,255,102,15,46,200,248,1,252,242,15,17,65,24,255,221,65,8,221,1,255,220,
-  65,16,221,17,221,81,24,133,252,237,15,136,244,247,255,221,81,24,15,140,244,
-  247,255,217,201,248,1,255,15,183,70,252,254,255,15,131,244,7,255,15,131,244,
-  248,141,180,253,134,233,255,141,180,253,134,233,15,183,70,252,254,15,131,
-  245,255,15,130,244,7,255,15,130,244,248,141,180,253,134,233,255,248,3,102,
-  15,46,193,252,233,244,1,255,141,12,202,139,105,4,129,252,253,239,15,132,244,
-  247,255,137,105,252,252,139,41,137,105,252,248,252,233,245,255,141,180,253,
-  134,233,139,1,137,105,252,252,137,65,252,248,255,139,139,233,139,4,129,139,
-  128,233,139,108,36,48,137,147,233,137,171,233,252,255,224,255,141,180,253,
-  134,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,
-  137,252,245,209,252,237,129,229,239,102,129,172,253,43,233,238,15,130,244,
-  150,255,139,190,233,139,108,36,48,141,12,202,59,141,233,15,135,244,24,15,
-  182,142,233,57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233,245,
-  255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233,244,
-  2,255,141,44,197,237,141,4,194,139,122,252,248,137,104,252,252,137,120,252,
-  248,139,108,36,48,141,12,200,59,141,233,15,135,244,23,137,209,137,194,15,
-  182,174,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244,
-  249,139,121,252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252,
-  252,237,131,252,237,1,15,133,244,1,248,2,255,139,190,233,139,6,15,182,204,
-  15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,3,199,64,4,237,131,
-  192,8,131,252,237,1,15,133,244,3,252,233,244,2,255,139,106,252,248,139,189,
-  233,139,108,36,48,141,68,194,252,248,137,149,233,141,136,233,59,141,233,137,
-  133,233,255,137,44,36,255,137,124,36,4,137,44,36,255,15,135,244,22,199,131,
-  233,237,255,252,255,215,255,252,255,147,233,255,199,131,233,237,139,149,233,
-  141,12,194,252,247,217,3,141,233,139,114,252,252,252,233,244,12,255,254,0
+  102,15,46,217,15,134,244,247,102,15,85,208,15,40,193,252,242,15,88,203,252,
+  242,15,92,203,184,0,0,252,240,63,102,15,110,216,102,15,112,219,81,252,242,
+  15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,86,202,15,40,193,248,
+  1,195,248,157,255,15,40,232,252,242,15,94,193,102,15,252,239,210,102,15,118,
+  210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,
+  224,102,15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,
+  227,252,242,15,92,227,102,15,86,226,184,0,0,252,240,63,102,15,110,208,102,
+  15,112,210,81,252,242,15,194,196,1,102,15,84,194,252,242,15,92,224,15,40,
+  197,252,242,15,89,204,252,242,15,92,193,195,248,1,252,242,15,89,200,15,40,
+  197,252,242,15,92,193,195,255,217,193,216,252,241,217,124,36,4,102,184,0,
+  4,102,11,68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,
+  252,252,217,108,36,4,222,201,222,252,233,195,255,248,98,217,252,234,222,201,
+  248,158,217,84,36,4,129,124,36,4,0,0,128,127,15,132,244,247,129,124,36,4,
+  0,0,128,252,255,15,132,244,248,248,159,217,192,217,252,252,220,252,233,217,
+  201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216,
+  217,252,238,195,255,248,117,219,84,36,4,219,68,36,4,255,223,252,233,255,221,
+  252,233,223,224,158,255,15,133,244,254,15,138,244,255,221,216,139,68,36,4,
+  131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,216,200,209,
+  232,252,233,244,1,248,2,209,232,15,132,244,251,217,192,248,3,216,200,209,
+  232,15,132,244,250,15,131,244,3,220,201,252,233,244,3,248,4,255,222,201,248,
+  5,195,248,6,15,132,244,5,15,130,244,253,217,232,222,252,241,252,247,216,131,
+  252,248,1,15,132,244,5,252,233,244,1,248,7,221,216,217,232,195,248,8,217,
+  84,36,4,217,201,217,84,36,8,139,68,36,4,209,224,61,0,0,0,252,255,15,132,244,
+  248,139,68,36,8,209,224,15,132,244,250,61,0,0,0,252,255,15,132,244,250,217,
+  252,241,252,233,244,159,248,9,255,217,232,255,223,252,234,255,221,252,234,
+  223,224,158,255,15,132,244,247,217,201,248,1,221,216,195,248,2,217,225,217,
+  232,255,15,132,244,249,221,216,217,225,217,252,238,184,0,0,0,0,15,146,208,
+  209,200,51,68,36,4,15,137,244,249,217,201,248,3,221,217,217,225,195,248,4,
+  131,124,36,4,0,15,141,244,3,221,216,221,216,133,192,15,132,244,251,217,252,
+  238,195,248,5,199,68,36,4,0,0,128,127,217,68,36,4,195,255,248,117,255,248,
+  160,252,242,15,45,193,252,242,15,42,208,102,15,46,202,15,133,244,254,15,138,
+  244,255,248,161,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,
+  248,252,242,15,89,192,209,232,252,233,244,1,248,2,209,232,15,132,244,251,
+  15,40,200,248,3,252,242,15,89,192,209,232,15,132,244,250,15,131,244,3,255,
+  252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,6,15,
+  132,244,5,15,130,244,253,252,247,216,232,244,1,184,0,0,252,240,63,102,15,
+  110,200,102,15,112,201,81,252,242,15,94,200,15,40,193,195,248,7,184,0,0,252,
+  240,63,102,15,110,192,102,15,112,192,81,195,248,8,252,242,15,17,76,36,12,
+  252,242,15,17,68,36,4,131,124,36,12,0,15,133,244,247,139,68,36,16,209,224,
+  61,0,0,224,252,255,15,132,244,248,248,1,131,124,36,4,0,15,133,244,247,255,
+  139,68,36,8,209,224,15,132,244,250,61,0,0,224,252,255,15,132,244,251,248,
+  1,221,68,36,12,221,68,36,4,217,252,241,217,192,217,252,252,220,252,233,217,
+  201,217,252,240,217,232,222,193,217,252,253,221,217,221,92,36,4,252,242,15,
+  16,68,36,4,195,248,9,184,0,0,252,240,63,102,15,110,208,102,15,112,210,81,
+  102,15,46,194,15,132,244,247,15,40,193,248,1,195,248,2,102,15,252,239,210,
+  102,15,118,210,102,15,115,210,1,102,15,84,194,184,0,0,252,240,63,102,15,110,
+  208,102,15,112,210,81,102,15,46,194,15,132,244,1,102,15,80,193,15,87,192,
+  136,196,15,146,208,48,224,15,133,244,1,248,3,184,0,0,252,240,127,102,15,110,
+  192,102,15,112,192,81,195,248,4,102,15,80,193,133,192,15,133,244,3,15,87,
+  192,195,248,5,102,15,80,193,133,192,15,132,244,3,255,15,87,192,195,248,162,
+  255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,15,135,
+  244,248,232,244,91,252,233,244,253,248,1,232,244,93,252,233,244,253,248,2,
+  131,252,248,3,15,132,244,247,15,135,244,248,232,244,114,255,252,233,244,253,
+  248,1,252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,2,
+  221,68,36,4,131,252,248,5,15,130,244,98,15,132,244,158,248,2,131,252,248,
+  7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,
+  217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,15,135,
+  244,248,255,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,
+  2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,
+  252,242,221,216,195,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244,
+  91,15,132,244,93,131,252,248,3,15,130,244,114,15,135,244,248,217,252,250,
+  195,248,2,131,252,248,5,15,130,244,98,15,132,244,158,131,252,248,7,15,132,
+  244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232,
+  217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,255,15,135,244,
+  248,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,
+  248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221,
+  216,195,255,248,9,204,255,248,163,255,139,68,36,20,252,242,15,16,68,36,4,
+  252,242,15,16,76,36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,
+  15,88,193,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,
+  193,252,233,244,7,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,
+  15,89,193,252,233,244,7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252,
+  248,5,15,132,244,247,255,15,135,244,248,232,244,157,252,233,244,7,248,1,90,
+  232,244,117,82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244,
+  248,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,233,244,
+  7,248,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,252,
+  233,244,7,248,2,255,131,252,248,9,15,135,244,248,221,68,36,4,221,68,36,12,
+  15,132,244,247,217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,
+  2,131,252,248,11,15,132,244,247,15,135,244,255,252,242,15,93,193,252,233,
+  244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204,255,139,68,36,20,221,
+  68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193,
+  195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248,
+  222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,157,15,132,
+  244,117,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195,
+  248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,
+  217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,
+  15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219,
+  252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244,
+  248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133,
+  244,248,217,201,248,2,221,216,195,255,248,164,156,90,137,209,129,252,242,
+  0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87,83,15,
+  162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195,248,165,
+  255,204,248,166,255,131,252,236,16,87,86,83,131,252,236,28,141,157,233,139,
+  181,233,15,183,192,137,134,233,141,132,253,36,233,137,142,233,137,150,233,
+  137,134,233,139,140,253,36,233,139,148,253,36,233,137,76,36,44,137,84,36,
+  40,137,226,137,116,36,24,137,252,241,232,251,1,27,199,131,233,237,139,144,
+  233,139,128,233,41,208,139,106,252,248,193,232,3,131,192,1,139,181,233,139,
+  14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,255,248,32,255,139,
+  76,36,48,139,179,233,137,142,233,137,145,233,137,169,233,137,252,241,137,
+  194,232,251,1,28,139,108,36,48,139,134,233,139,150,233,131,190,233,1,15,130,
+  244,253,15,132,244,252,221,134,233,252,233,244,253,248,6,217,134,233,248,
+  7,139,141,233,15,183,73,6,137,76,36,48,131,196,28,91,94,95,93,89,3,36,36,
+  131,196,16,81,195,255,248,167,255,85,137,229,83,137,203,43,163,233,255,137,
+  163,233,255,15,182,139,233,131,252,233,1,15,136,244,248,248,1,139,132,253,
+  139,233,137,4,140,131,252,233,1,15,137,244,1,248,2,139,139,233,139,147,233,
+  252,255,147,233,137,131,233,137,147,233,128,187,233,1,15,130,244,253,15,132,
+  244,252,221,155,233,252,233,244,253,248,6,255,217,155,233,248,7,255,41,163,
+  233,255,139,93,252,252,201,195,255,249,255,129,124,253,202,4,239,15,133,244,
+  253,129,124,253,194,4,239,15,133,244,254,139,44,202,131,198,4,59,44,194,255,
+  15,141,244,255,255,15,140,244,255,255,15,143,244,255,255,15,142,244,255,255,
+  248,6,15,183,70,252,254,141,180,253,134,233,248,9,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,171,248,7,15,135,244,44,129,124,253,194,
+  4,239,15,130,244,247,15,133,244,44,255,252,242,15,42,4,194,252,233,244,248,
+  255,221,4,202,219,4,194,252,233,244,249,255,248,8,15,135,244,44,255,252,242,
+  15,42,12,202,252,242,15,16,4,194,131,198,4,102,15,46,193,255,15,134,244,9,
+  255,15,135,244,9,255,15,130,244,9,255,15,131,244,9,255,252,233,244,6,255,
+  219,4,202,252,233,244,248,255,129,124,253,202,4,239,15,131,244,44,129,124,
+  253,194,4,239,15,131,244,44,255,248,1,252,242,15,16,4,194,248,2,131,198,4,
+  102,15,46,4,202,248,3,255,248,1,221,4,202,248,2,221,4,194,248,3,131,198,4,
+  255,15,135,244,247,255,15,130,244,247,255,15,131,244,247,255,15,183,70,252,
+  254,141,180,253,134,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,171,255,139,108,194,4,131,198,4,255,129,252,253,239,15,133,
+  244,253,129,124,253,202,4,239,15,133,244,254,139,44,194,59,44,202,255,15,
+  133,244,255,255,15,132,244,255,255,15,183,70,252,254,141,180,253,134,233,
+  248,9,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
+  7,15,135,244,251,129,124,253,202,4,239,15,130,244,247,15,133,244,251,255,
+  252,242,15,42,4,202,255,219,4,202,255,252,233,244,248,248,8,15,135,244,251,
+  255,252,242,15,42,4,194,102,15,46,4,202,255,219,4,194,221,4,202,255,252,233,
+  244,250,255,129,252,253,239,15,131,244,251,129,124,253,202,4,239,15,131,244,
+  251,255,248,1,252,242,15,16,4,202,248,2,102,15,46,4,194,248,4,255,248,1,221,
+  4,202,248,2,221,4,194,248,4,255,15,138,244,248,15,133,244,248,255,15,138,
+  244,248,15,132,244,247,255,248,1,15,183,70,252,254,141,180,253,134,233,248,
+  2,255,248,2,15,183,70,252,254,141,180,253,134,233,248,1,255,252,233,244,9,
+  255,248,5,255,129,252,253,239,15,132,244,49,129,124,253,202,4,239,15,132,
+  244,49,255,57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12,
+  202,139,4,194,57,193,15,132,244,1,129,252,253,239,15,135,244,2,139,169,233,
+  133,252,237,15,132,244,2,252,246,133,233,235,15,133,244,2,255,49,252,237,
+  255,189,1,0,0,0,255,252,233,244,48,255,248,3,129,252,253,239,255,15,133,244,
+  9,255,252,233,244,49,255,252,247,208,139,108,202,4,131,198,4,129,252,253,
+  239,15,133,244,249,139,12,202,59,12,135,255,139,108,202,4,131,198,4,255,129,
+  252,253,239,15,133,244,253,129,124,253,199,4,239,15,133,244,254,139,44,199,
+  59,44,202,255,15,183,70,252,254,141,180,253,134,233,248,9,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,171,248,7,15,135,244,249,129,124,
+  253,199,4,239,15,130,244,247,255,252,242,15,42,4,199,255,219,4,199,255,252,
+  233,244,248,248,8,255,252,242,15,42,4,202,102,15,46,4,199,255,219,4,202,221,
+  4,199,255,129,252,253,239,15,131,244,249,255,248,1,252,242,15,16,4,199,248,
+  2,102,15,46,4,202,248,4,255,248,1,221,4,199,248,2,221,4,202,248,4,255,252,
+  247,208,139,108,202,4,131,198,4,57,197,255,15,133,244,249,15,183,70,252,254,
+  141,180,253,134,233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,
+  252,255,36,171,248,3,129,252,253,239,15,133,244,2,252,233,244,49,255,15,132,
+  244,248,129,252,253,239,15,132,244,49,15,183,70,252,254,141,180,253,134,233,
+  248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,
+  139,108,194,4,131,198,4,129,252,253,239,255,137,108,202,4,139,44,194,137,
+  44,202,255,139,108,194,4,139,4,194,137,108,202,4,137,4,202,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,171,255,49,252,237,129,124,253,
+  194,4,239,129,213,239,137,108,202,4,139,6,15,182,204,15,182,232,131,198,4,
+  193,232,16,252,255,36,171,255,129,124,253,194,4,239,15,133,244,251,139,44,
+  194,252,247,221,15,128,244,250,199,68,202,4,237,137,44,202,248,9,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,4,199,68,202,4,
+  0,0,224,65,199,4,202,0,0,0,0,252,233,244,9,248,5,15,135,244,54,255,129,124,
+  253,194,4,239,15,131,244,54,255,252,242,15,16,4,194,184,0,0,0,128,102,15,
+  110,200,102,15,112,201,81,15,87,193,252,242,15,17,4,202,255,221,4,194,217,
+  224,221,28,202,255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,139,
+  128,233,248,1,199,68,202,4,237,137,4,202,255,15,87,192,252,242,15,42,128,
+  233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,6,
+  15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,129,124,253,
+  194,4,239,15,133,244,57,139,12,194,255,139,169,233,131,252,253,0,15,133,244,
+  255,248,3,255,248,58,137,213,232,251,1,20,255,252,242,15,42,192,255,137,4,
+  36,219,4,36,255,137,252,234,15,182,78,252,253,252,233,244,1,255,248,9,252,
+  246,133,233,235,15,133,244,3,252,233,244,57,255,15,182,252,236,15,182,192,
+  255,129,124,253,252,234,4,239,15,133,244,51,129,124,253,199,4,239,15,133,
+  244,51,139,44,252,234,3,44,199,15,128,244,50,255,129,124,253,252,234,4,239,
+  15,133,244,53,129,124,253,199,4,239,15,133,244,53,139,4,199,3,4,252,234,15,
+  128,244,52,255,129,124,253,252,234,4,239,15,133,244,56,129,124,253,194,4,
+  239,15,133,244,56,139,44,252,234,3,44,194,15,128,244,55,255,199,68,202,4,
+  237,255,129,124,253,252,234,4,239,15,131,244,51,255,129,124,253,199,4,239,
+  15,131,244,51,255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221,4,252,
+  234,220,4,199,255,129,124,253,252,234,4,239,15,131,244,53,255,129,124,253,
+  199,4,239,15,131,244,53,255,252,242,15,16,4,199,252,242,15,88,4,252,234,255,
+  221,4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,131,244,56,129,124,
+  253,194,4,239,15,131,244,56,255,252,242,15,16,4,252,234,252,242,15,88,4,194,
+  255,221,4,252,234,220,4,194,255,129,124,253,252,234,4,239,15,133,244,51,129,
+  124,253,199,4,239,15,133,244,51,139,44,252,234,43,44,199,15,128,244,50,255,
+  129,124,253,252,234,4,239,15,133,244,53,129,124,253,199,4,239,15,133,244,
+  53,139,4,199,43,4,252,234,15,128,244,52,255,129,124,253,252,234,4,239,15,
+  133,244,56,129,124,253,194,4,239,15,133,244,56,139,44,252,234,43,44,194,15,
+  128,244,55,255,252,242,15,16,4,252,234,252,242,15,92,4,199,255,221,4,252,
+  234,220,36,199,255,252,242,15,16,4,199,252,242,15,92,4,252,234,255,221,4,
+  199,220,36,252,234,255,252,242,15,16,4,252,234,252,242,15,92,4,194,255,221,
+  4,252,234,220,36,194,255,129,124,253,252,234,4,239,15,133,244,51,129,124,
+  253,199,4,239,15,133,244,51,139,44,252,234,15,175,44,199,15,128,244,50,255,
+  129,124,253,252,234,4,239,15,133,244,53,129,124,253,199,4,239,15,133,244,
+  53,139,4,199,15,175,4,252,234,15,128,244,52,255,129,124,253,252,234,4,239,
+  15,133,244,56,129,124,253,194,4,239,15,133,244,56,139,44,252,234,15,175,44,
+  194,15,128,244,55,255,252,242,15,16,4,252,234,252,242,15,89,4,199,255,221,
+  4,252,234,220,12,199,255,252,242,15,16,4,199,252,242,15,89,4,252,234,255,
+  221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242,15,89,4,194,
+  255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252,242,15,94,4,
+  199,255,221,4,252,234,220,52,199,255,252,242,15,16,4,199,252,242,15,94,4,
+  252,234,255,221,4,199,220,52,252,234,255,252,242,15,16,4,252,234,252,242,
+  15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,
+  242,15,16,12,199,255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,
+  242,15,16,12,252,234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,
+  234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,168,232,244,
+  157,255,252,233,244,168,255,232,244,117,255,15,182,252,236,15,182,192,141,
+  12,194,41,232,137,76,36,4,137,68,36,8,248,36,139,108,36,48,137,44,36,137,
+  149,233,137,116,36,24,232,251,1,29,139,149,233,133,192,15,133,244,45,15,182,
+  110,252,255,15,182,78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,
+  4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
+  171,255,252,247,208,139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,171,255,15,191,192,199,68,202,
+  4,237,137,4,202,255,15,191,192,252,242,15,42,192,252,242,15,17,4,202,255,
+  223,70,252,254,221,28,202,255,252,242,15,16,4,199,252,242,15,17,4,202,255,
+  221,4,199,221,28,202,255,252,247,208,137,68,202,4,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,171,255,141,76,202,12,141,68,194,4,189,
+  237,137,105,252,248,248,1,137,41,131,193,8,57,193,15,134,244,1,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,106,252,248,139,
+  172,253,133,233,139,173,233,139,69,4,139,109,0,137,68,202,4,137,44,202,139,
+  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,106,252,
+  248,139,172,253,141,233,128,189,233,0,139,173,233,139,12,194,139,68,194,4,
+  137,77,0,137,69,4,15,132,244,247,252,246,133,233,235,15,133,244,248,248,1,
+  139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,129,
+  232,239,129,252,248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,135,
+  213,141,139,233,255,232,251,1,30,137,252,234,252,233,244,1,255,252,247,208,
+  139,106,252,248,139,172,253,141,233,139,12,135,139,133,233,137,8,199,64,4,
+  237,252,246,133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,
+  131,198,4,193,232,16,252,255,36,171,248,2,252,246,129,233,235,15,132,244,
+  1,128,189,233,0,15,132,244,1,137,213,137,194,141,139,233,232,251,1,30,137,
+  252,234,252,233,244,1,255,139,106,252,248,255,252,242,15,16,4,199,255,139,
+  172,253,141,233,139,141,233,255,252,242,15,17,1,255,221,25,255,252,247,208,
+  139,106,252,248,139,172,253,141,233,139,141,233,137,65,4,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,171,255,141,180,253,134,233,139,
+  108,36,48,131,189,233,0,15,132,244,247,137,149,233,141,20,202,137,252,233,
+  232,251,1,31,139,149,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,
+  232,16,252,255,36,171,255,252,247,208,139,74,252,248,139,4,135,139,108,36,
+  48,137,76,36,8,137,68,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,
+  32,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,36,48,137,
+  149,233,139,139,233,59,139,233,137,116,36,24,15,131,244,251,248,1,137,193,
+  37,252,255,7,0,0,193,252,233,11,137,76,36,8,61,252,255,7,0,0,15,132,244,249,
+  248,2,137,44,36,137,68,36,4,232,251,1,33,139,149,233,15,182,78,252,253,137,
+  4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
+  255,36,171,248,3,184,1,8,0,0,252,233,244,2,248,5,137,252,233,232,251,1,34,
+  15,183,70,252,254,252,233,244,1,255,252,247,208,139,108,36,48,139,139,233,
+  137,116,36,24,59,139,233,137,149,233,15,131,244,249,248,2,139,20,135,137,
+  252,233,232,251,1,35,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,
+  237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,
+  137,252,233,232,251,1,34,15,183,70,252,254,252,247,208,252,233,244,2,255,
+  252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,169,255,252,
+  247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,170,255,15,182,
+  252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,39,139,44,252,234,
+  255,129,124,253,194,4,239,15,133,244,251,139,4,194,255,129,124,253,194,4,
+  239,15,131,244,251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,
+  200,102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,39,255,
+  59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244,
+  248,139,40,139,64,4,137,44,202,137,68,202,4,248,1,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,249,
+  139,141,233,252,246,129,233,235,15,132,244,39,15,182,78,252,253,248,3,199,
+  68,202,4,237,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244,39,
+  139,4,194,252,233,244,169,255,15,182,252,236,15,182,192,252,247,208,139,4,
+  135,129,124,253,252,234,4,239,15,133,244,37,139,44,252,234,248,169,139,141,
+  233,35,136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133,244,250,
+  57,129,233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182,70,252,
+  253,139,41,139,73,4,137,44,194,137,76,194,4,248,2,255,139,6,15,182,204,15,
+  182,232,131,198,4,193,232,16,252,255,36,171,248,3,15,182,70,252,253,199,68,
+  194,4,237,252,233,244,2,248,4,139,137,233,133,201,15,133,244,1,248,5,139,
+  141,233,133,201,15,132,244,3,252,246,129,233,235,15,133,244,3,252,233,244,
+  37,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,38,
+  139,44,252,234,59,133,233,15,131,244,38,193,224,3,3,133,233,129,120,253,4,
+  239,15,132,244,248,139,40,139,64,4,137,44,202,137,68,202,4,248,1,139,6,15,
+  182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,131,189,233,
+  0,15,132,244,249,139,141,233,252,246,129,233,235,15,132,244,38,255,15,182,
+  78,252,253,248,3,199,68,202,4,237,252,233,244,1,255,15,182,252,236,15,182,
+  192,129,124,253,252,234,4,239,15,133,244,42,139,44,252,234,255,15,133,244,
+  42,255,59,133,233,15,131,244,42,193,224,3,3,133,233,129,120,253,4,239,15,
+  132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,
+  139,12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,171,248,3,131,189,233,0,15,132,244,1,139,141,233,252,246,129,
+  233,235,255,15,132,244,42,15,182,78,252,253,252,233,244,1,248,5,129,124,253,
+  194,4,239,15,133,244,42,139,4,194,252,233,244,170,248,7,128,165,233,235,139,
+  139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,
+  252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,
+  244,40,139,44,252,234,248,170,139,141,233,35,136,233,105,201,239,198,133,
+  233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,
+  251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,
+  244,253,248,3,15,182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,
+  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,4,131,189,
+  233,0,15,132,244,2,137,76,36,16,139,141,233,252,246,129,233,235,15,132,244,
+  40,139,76,36,16,252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,
+  139,141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,40,248,
+  6,137,68,36,16,199,68,36,20,237,137,108,36,12,141,68,36,16,137,108,36,4,139,
+  108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,36,139,
+  149,233,139,108,36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,
+  233,137,171,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,
+  124,253,252,234,4,239,15,133,244,41,139,44,252,234,59,133,233,15,131,244,
+  41,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,
+  233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,
+  6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,131,189,
+  233,0,15,132,244,1,255,139,141,233,252,246,129,233,235,15,132,244,41,15,182,
+  78,252,253,252,233,244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,
+  141,233,15,182,78,252,253,252,233,244,2,255,137,124,36,16,139,60,199,248,
+  1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139,
+  68,36,20,131,232,1,15,132,244,250,1,252,248,59,133,233,15,135,244,251,41,
+  252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,105,4,131,193,8,137,111,
+  4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,16,139,6,15,182,204,15,
+  182,232,131,198,4,193,232,16,252,255,36,171,248,5,137,108,36,4,139,108,36,
+  48,137,149,233,137,68,36,8,137,44,36,137,116,36,24,232,251,1,37,139,149,233,
+  15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235,139,131,233,137,
+  171,233,137,133,233,252,233,244,2,255,3,68,36,20,255,129,124,253,202,4,239,
+  139,44,202,15,133,244,59,141,84,202,8,137,114,252,252,139,181,233,139,14,
+  15,182,252,233,15,182,205,131,198,4,252,255,36,171,255,141,76,202,8,137,215,
+  139,105,252,248,129,121,253,252,252,239,15,133,244,29,248,60,139,114,252,
+  252,252,247,198,237,15,133,244,253,248,1,137,106,252,248,137,68,36,20,131,
+  232,1,15,132,244,249,248,2,139,41,137,47,139,105,4,131,193,8,137,111,4,131,
+  199,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,68,36,20,128,189,233,
+  1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,233,15,182,205,131,198,
+  4,252,255,36,171,248,5,255,252,247,198,237,15,133,244,4,15,182,78,252,253,
+  252,247,209,141,12,202,139,121,252,248,139,191,233,139,191,233,252,233,244,
+  4,248,7,129,252,238,239,252,247,198,237,15,133,244,254,41,252,242,137,215,
+  139,114,252,252,252,233,244,1,248,8,129,198,239,252,233,244,1,255,141,76,
+  202,8,139,105,232,139,65,252,236,137,41,137,65,4,139,105,252,240,139,65,252,
+  244,137,105,8,137,65,12,139,105,224,139,65,228,137,105,252,248,137,65,252,
+  252,129,252,248,239,184,237,15,133,244,29,137,202,137,114,252,252,139,181,
+  233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,255,137,124,
+  36,16,137,92,36,20,139,108,202,252,240,139,68,202,252,248,139,157,233,131,
+  198,4,139,189,233,248,1,57,216,15,131,244,251,129,124,253,199,4,239,15,132,
+  244,250,255,219,68,202,252,248,255,139,108,199,4,137,108,202,12,139,44,199,
+  137,108,202,8,131,192,1,255,137,68,202,252,248,248,2,15,183,70,252,254,141,
+  180,253,134,233,248,3,139,92,36,20,139,124,36,16,139,6,15,182,204,15,182,
+  232,131,198,4,193,232,16,252,255,36,171,248,4,131,192,1,255,137,68,202,252,
+  248,255,252,233,244,1,248,5,41,216,248,6,59,133,233,15,135,244,3,105,252,
+  248,239,3,189,233,129,191,233,239,15,132,244,253,141,92,24,1,139,175,233,
+  139,135,233,137,44,202,137,68,202,4,139,175,233,139,135,233,137,108,202,8,
+  137,68,202,12,137,92,202,252,248,252,233,244,2,248,7,255,131,192,1,252,233,
+  244,6,255,129,124,253,202,252,236,239,15,133,244,251,139,108,202,232,129,
+  124,253,202,252,244,239,15,133,244,251,129,124,253,202,252,252,239,15,133,
+  244,251,128,189,233,235,15,133,244,251,141,180,253,134,233,199,68,202,252,
+  248,0,0,0,0,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
+  36,171,248,5,198,70,252,252,235,141,180,253,134,233,198,6,235,252,233,244,
+  1,255,15,182,252,236,15,182,192,137,124,36,16,141,188,253,194,233,141,12,
+  202,43,122,252,252,133,252,237,15,132,244,251,141,108,252,233,252,248,57,
+  215,15,131,244,248,248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,
+  65,4,131,193,8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,
+  4,237,131,193,8,57,252,233,15,130,244,2,248,3,139,124,36,16,139,6,15,182,
+  204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,199,68,36,20,1,0,
+  0,0,137,208,41,252,248,15,134,244,3,137,197,193,252,237,3,131,197,1,137,108,
+  36,20,139,108,36,48,1,200,59,133,233,15,135,244,253,248,6,255,139,71,252,
+  248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57,215,15,130,244,6,
+  252,233,244,3,248,7,137,149,233,137,141,233,137,116,36,24,41,215,139,84,36,
+  20,131,252,234,1,137,252,233,232,251,1,0,139,149,233,139,141,233,1,215,252,
+  233,244,6,255,193,225,3,255,248,1,139,114,252,252,137,68,36,20,252,247,198,
+  237,15,133,244,253,255,248,13,137,215,131,232,1,15,132,244,249,248,2,139,
+  44,15,137,111,252,248,139,108,15,4,137,111,252,252,131,199,8,131,232,1,15,
+  133,244,2,248,3,139,68,36,20,15,182,110,252,255,248,5,57,197,15,135,244,252,
+  255,139,108,10,4,137,106,252,252,139,44,10,137,106,252,248,255,248,5,56,70,
+  252,255,15,135,244,252,255,15,182,78,252,253,252,247,209,141,20,202,139,122,
+  252,248,139,191,233,139,191,233,139,6,15,182,204,15,182,232,131,198,4,193,
+  232,16,252,255,36,171,248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,
+  252,244,237,255,131,192,1,252,233,244,5,248,7,141,174,233,252,247,197,237,
+  15,133,244,14,41,252,234,255,1,252,233,255,137,252,245,209,252,237,129,229,
+  239,102,129,172,253,43,233,238,15,130,244,149,255,141,12,202,255,129,121,
+  253,4,239,15,133,244,255,255,129,121,253,12,239,15,133,244,61,129,121,253,
+  20,239,15,133,244,61,139,41,131,121,16,0,15,140,244,251,255,129,121,253,12,
+  239,15,133,244,165,129,121,253,20,239,15,133,244,165,255,139,105,16,133,252,
+  237,15,136,244,251,3,41,15,128,244,247,137,41,255,59,105,8,199,65,28,237,
+  137,105,24,255,15,142,244,253,248,1,248,6,141,180,253,134,233,255,141,180,
+  253,134,233,15,183,70,252,254,15,142,245,248,1,248,6,255,15,143,244,253,248,
+  6,141,180,253,134,233,248,1,255,248,7,139,6,15,182,204,15,182,232,131,198,
+  4,193,232,16,252,255,36,171,248,5,255,3,41,15,128,244,1,137,41,255,15,141,
+  244,7,255,141,180,253,134,233,15,183,70,252,254,15,141,245,255,15,140,244,
+  7,255,252,233,244,6,248,9,255,129,121,253,4,239,255,15,131,244,61,129,121,
+  253,12,239,15,131,244,61,255,129,121,253,12,239,15,131,244,165,129,121,253,
+  20,239,15,131,244,165,255,139,105,20,255,129,252,253,239,15,131,244,61,255,
+  252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15,17,
+  1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248,1,252,
+  242,15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133,252,
+  237,15,136,244,247,255,221,81,24,15,140,244,247,255,217,201,248,1,255,15,
+  183,70,252,254,255,15,131,244,7,255,15,131,244,248,141,180,253,134,233,255,
+  141,180,253,134,233,15,183,70,252,254,15,131,245,255,15,130,244,7,255,15,
+  130,244,248,141,180,253,134,233,255,248,3,102,15,46,193,252,233,244,1,255,
+  141,12,202,139,105,4,129,252,253,239,15,132,244,247,255,137,105,252,252,139,
+  41,137,105,252,248,252,233,245,255,141,180,253,134,233,139,1,137,105,252,
+  252,137,65,252,248,255,139,139,233,139,4,129,139,128,233,139,108,36,48,137,
+  147,233,137,171,233,252,255,224,255,141,180,253,134,233,139,6,15,182,204,
+  15,182,232,131,198,4,193,232,16,252,255,36,171,255,137,252,245,209,252,237,
+  129,229,239,102,129,172,253,43,233,238,15,130,244,151,255,139,190,233,139,
+  108,36,48,141,12,202,59,141,233,15,135,244,24,15,182,142,233,57,200,15,134,
+  244,249,248,2,255,15,183,70,252,254,252,233,245,255,248,3,199,68,194,252,
+  252,237,131,192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,197,237,141,
+  4,194,139,122,252,248,137,104,252,252,137,120,252,248,139,108,36,48,141,12,
+  200,59,141,233,15,135,244,23,137,209,137,194,15,182,174,233,133,252,237,15,
+  132,244,248,248,1,131,193,8,57,209,15,131,244,249,139,121,252,248,137,56,
+  139,121,252,252,137,120,4,131,192,8,199,65,252,252,237,131,252,237,1,15,133,
+  244,1,248,2,255,139,190,233,139,6,15,182,204,15,182,232,131,198,4,193,232,
+  16,252,255,36,171,255,248,3,199,64,4,237,131,192,8,131,252,237,1,15,133,244,
+  3,252,233,244,2,255,139,106,252,248,139,189,233,139,108,36,48,141,68,194,
+  252,248,137,149,233,141,136,233,59,141,233,137,133,233,255,137,44,36,255,
+  137,124,36,4,137,44,36,255,15,135,244,22,199,131,233,237,255,252,255,215,
+  255,252,255,147,233,255,199,131,233,237,139,149,233,141,12,194,252,247,217,
+  3,141,233,139,114,252,252,252,233,244,12,255,254,0
 };
 
 enum {
@@ -863,6 +874,7 @@ enum {
   GLOB_vmeta_call,
   GLOB_vm_call_dispatch_f,
   GLOB_vm_cpcall,
+  GLOB_cont_ffi_callback,
   GLOB_vm_call_tail,
   GLOB_cont_cat,
   GLOB_cont_ra,
@@ -996,6 +1008,7 @@ enum {
   GLOB_vm_foldarith,
   GLOB_vm_cpuid,
   GLOB_assert_bad_for_arg_type,
+  GLOB_vm_ffi_callback,
   GLOB_vm_ffi_call,
   GLOB_BC_MODVN_Z,
   GLOB_BC_TGETS_Z,
@@ -1025,6 +1038,7 @@ static const char *const globnames[] = {
   "vmeta_call",
   "vm_call_dispatch_f",
   "vm_cpcall",
+  "cont_ffi_callback",
   "vm_call_tail",
   "cont_cat",
   "cont_ra",
@@ -1158,6 +1172,7 @@ static const char *const globnames[] = {
   "vm_foldarith",
   "vm_cpuid",
   "assert_bad_for_arg_type",
+  "vm_ffi_callback",
   "vm_ffi_call@4",
   "BC_MODVN_Z",
   "BC_TGETS_Z",
@@ -1192,6 +1207,8 @@ static const char *const extnames[] = {
   "lj_dispatch_call@8",
   "lj_trace_exit@8",
   "lj_err_throw@8",
+  "lj_ccallback_enter@8",
+  "lj_ccallback_leave@8",
   "lj_meta_cat",
   "lj_gc_barrieruv@8",
   "lj_func_closeuv@8",
@@ -1232,762 +1249,780 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
   dasm_put(Dst, 353, Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->pc), FRAME_CP, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE);
   dasm_put(Dst, 495, FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
   dasm_put(Dst, 573, Dt1(->top), LJ_TFUNC, Dt7(->pc), Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL);
-  dasm_put(Dst, 753, Dt7(->pc), PC2PROTO(k), LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
-  dasm_put(Dst, 875);
+#if LJ_HASFFI
+#endif
+  dasm_put(Dst, 743);
+#if LJ_HASFFI
+  dasm_put(Dst, 748);
+#endif
+  dasm_put(Dst, 757, Dt7(->pc), PC2PROTO(k));
+#if LJ_HASFFI
+  dasm_put(Dst, 771);
+#endif
+  dasm_put(Dst, 792, LJ_TSTR, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 881, LJ_TISNUM);
+    dasm_put(Dst, 890, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 891);
+    dasm_put(Dst, 900);
   } else {
-    dasm_put(Dst, 904);
+    dasm_put(Dst, 913);
   }
-  dasm_put(Dst, 917, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
-  dasm_put(Dst, 1069, DISPATCH_GL(tmptv), LJ_TTAB);
+  dasm_put(Dst, 926, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 2+1, LJ_TSTR, BC_GSET);
+  dasm_put(Dst, 1078, DISPATCH_GL(tmptv), LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 881, LJ_TISNUM);
+    dasm_put(Dst, 890, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 891);
+    dasm_put(Dst, 900);
   } else {
-    dasm_put(Dst, 904);
+    dasm_put(Dst, 913);
   }
-  dasm_put(Dst, 1092, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 1286, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
-  dasm_put(Dst, 1393);
+  dasm_put(Dst, 1101, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, 3+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1295, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
+  dasm_put(Dst, 1402);
 #if LJ_HASFFI
-  dasm_put(Dst, 1408, Dt1(->base));
+  dasm_put(Dst, 1417, Dt1(->base));
 #endif
-  dasm_put(Dst, 1439);
+  dasm_put(Dst, 1448);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1442);
+  dasm_put(Dst, 1451);
 #endif
-  dasm_put(Dst, 1448);
+  dasm_put(Dst, 1457);
 #if LJ_DUALNUM
-  dasm_put(Dst, 875);
+  dasm_put(Dst, 884);
 #endif
-  dasm_put(Dst, 1460);
+  dasm_put(Dst, 1469);
 #if LJ_DUALNUM
-  dasm_put(Dst, 1442);
+  dasm_put(Dst, 1451);
 #endif
-  dasm_put(Dst, 1488, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 1497, Dt1(->base), Dt1(->base), FRAME_CONT, 2+1, Dt1(->base), Dt1(->base));
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 1598);
+  dasm_put(Dst, 1607);
 #else
-  dasm_put(Dst, 1617);
+  dasm_put(Dst, 1626);
 #endif
-  dasm_put(Dst, 1622, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
-  dasm_put(Dst, 1811, 1+1, ~LJ_TNUMX);
+  dasm_put(Dst, 1631, Dt1(->base), Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base), GG_DISP2STATIC, 1+1, LJ_TISTRUECOND);
+  dasm_put(Dst, 1820, 1+1, ~LJ_TNUMX);
   if (cmov) {
-  dasm_put(Dst, 1869);
+  dasm_put(Dst, 1878);
   } else {
-  dasm_put(Dst, 1873);
+  dasm_put(Dst, 1882);
   }
-  dasm_put(Dst, 1882, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB);
-  dasm_put(Dst, 1965, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL);
-  dasm_put(Dst, 2023, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1);
-  dasm_put(Dst, 2086, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
-  dasm_put(Dst, 2158, 2+1, LJ_TTAB, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 1891, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(gcroot)+4*(GCROOT_MMNAME+MM_metatable), LJ_TTAB);
+  dasm_put(Dst, 1974, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL);
+  dasm_put(Dst, 2032, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1);
+  dasm_put(Dst, 2095, LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+  dasm_put(Dst, 2167, 2+1, LJ_TTAB, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2247);
+    dasm_put(Dst, 2256);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
   if (sse) {
-    dasm_put(Dst, 2269);
+    dasm_put(Dst, 2278);
   } else {
-    dasm_put(Dst, 2279);
+    dasm_put(Dst, 2288);
   }
-  dasm_put(Dst, 2286, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 2352, Dt1(->base));
+  dasm_put(Dst, 2295, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2361, Dt1(->base));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2376);
+    dasm_put(Dst, 2385);
   } else {
-    dasm_put(Dst, 2381);
+    dasm_put(Dst, 2390);
   }
-  dasm_put(Dst, 2386, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
-  dasm_put(Dst, 2495, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2395, Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->top), Dt1(->base), 1+2);
+  dasm_put(Dst, 2504, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2542, Dt6(->metatable));
+  dasm_put(Dst, 2551, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2551, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
+  dasm_put(Dst, 2560, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2537);
+    dasm_put(Dst, 2546);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 2606);
+  dasm_put(Dst, 2615);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2611, LJ_TISNUM);
+    dasm_put(Dst, 2620, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2627);
+    dasm_put(Dst, 2636);
   } else {
-    dasm_put(Dst, 2666);
+    dasm_put(Dst, 2675);
   }
-  dasm_put(Dst, 2684, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
-  dasm_put(Dst, 2522, 1+1, LJ_TTAB);
+  dasm_put(Dst, 2693, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
+  dasm_put(Dst, 2531, 1+1, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 2542, Dt6(->metatable));
+  dasm_put(Dst, 2551, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 2765, Dt8(->upvalue[0]), LJ_TFUNC);
+  dasm_put(Dst, 2774, Dt8(->upvalue[0]), LJ_TFUNC);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2786, LJ_TISNUM);
+    dasm_put(Dst, 2795, LJ_TISNUM);
   } else if (sse) {
-    dasm_put(Dst, 2798);
-  } else {
-    dasm_put(Dst, 2808);
-  }
-  dasm_put(Dst, 2815, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
-  dasm_put(Dst, 2879, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
-  dasm_put(Dst, 2967, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
-  dasm_put(Dst, 3068, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
-  dasm_put(Dst, 3182, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
-  dasm_put(Dst, 3280, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
-  dasm_put(Dst, 3346, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
-  dasm_put(Dst, 3447, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
-  dasm_put(Dst, 3560, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
+    dasm_put(Dst, 2807);
+  } else {
+    dasm_put(Dst, 2817);
+  }
+  dasm_put(Dst, 2824, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC);
+  dasm_put(Dst, 2888, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top));
+  dasm_put(Dst, 2976, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 3077, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE);
+  dasm_put(Dst, 3191, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe));
+  dasm_put(Dst, 3289, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 3355, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack));
+  dasm_put(Dst, 3456, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME);
+  dasm_put(Dst, 3569, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
   if (!LJ_DUALNUM) {
-    dasm_put(Dst, 3586);
+    dasm_put(Dst, 3595);
   }
   if (sse) {
-    dasm_put(Dst, 3589);
+    dasm_put(Dst, 3598);
   }
-  dasm_put(Dst, 3604, 1+1);
+  dasm_put(Dst, 3613, 1+1);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 3615, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 3624, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 3695, LJ_TISNUM);
+    dasm_put(Dst, 3704, LJ_TISNUM);
   }
   if (sse) {
-    dasm_put(Dst, 3705);
+    dasm_put(Dst, 3714);
   } else {
-    dasm_put(Dst, 3741);
+    dasm_put(Dst, 3750);
   }
-  dasm_put(Dst, 3758, 1+1, FRAME_TYPE, LJ_TNIL);
+  dasm_put(Dst, 3767, 1+1, FRAME_TYPE, LJ_TNIL);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3850, LJ_TISNUM);
+  dasm_put(Dst, 3859, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3695, LJ_TISNUM);
+  dasm_put(Dst, 3704, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3872);
-    if (LJ_DUALNUM) {
   dasm_put(Dst, 3881);
+    if (LJ_DUALNUM) {
+  dasm_put(Dst, 3890);
     }
-  dasm_put(Dst, 2274);
+  dasm_put(Dst, 2283);
   } else {
-  dasm_put(Dst, 3915);
+  dasm_put(Dst, 3924);
     if (LJ_DUALNUM) {
-  dasm_put(Dst, 3921);
+  dasm_put(Dst, 3930);
   if (cmov) {
-  dasm_put(Dst, 3944);
+  dasm_put(Dst, 3953);
   } else {
-  dasm_put(Dst, 3950);
+  dasm_put(Dst, 3959);
   }
-  dasm_put(Dst, 3957);
+  dasm_put(Dst, 3966);
     } else {
-  dasm_put(Dst, 2281);
+  dasm_put(Dst, 2290);
     }
   }
-  dasm_put(Dst, 3974);
+  dasm_put(Dst, 3983);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 3850, LJ_TISNUM);
+  dasm_put(Dst, 3859, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 3695, LJ_TISNUM);
+  dasm_put(Dst, 3704, LJ_TISNUM);
   }
   if (sse) {
-  dasm_put(Dst, 3977);
+  dasm_put(Dst, 3986);
     if (LJ_DUALNUM) {
-  dasm_put(Dst, 3881);
+  dasm_put(Dst, 3890);
     }
-  dasm_put(Dst, 2274);
+  dasm_put(Dst, 2283);
   } else {
-  dasm_put(Dst, 3986);
+  dasm_put(Dst, 3995);
     if (LJ_DUALNUM) {
-  dasm_put(Dst, 3921);
+  dasm_put(Dst, 3930);
   if (cmov) {
-  dasm_put(Dst, 3944);
+  dasm_put(Dst, 3953);
   } else {
-  dasm_put(Dst, 3950);
+  dasm_put(Dst, 3959);
   }
-  dasm_put(Dst, 3957);
+  dasm_put(Dst, 3966);
     } else {
-  dasm_put(Dst, 2281);
+  dasm_put(Dst, 2290);
     }
   }
   if (sse) {
-    dasm_put(Dst, 3992, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4001, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4021, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4030, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4050, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4119, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4176, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
-  dasm_put(Dst, 4239, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
-  dasm_put(Dst, 4329);
+  dasm_put(Dst, 4059, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4128, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4185, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
+  dasm_put(Dst, 4248, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4338);
   if (sse) {
-  dasm_put(Dst, 4341, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4350, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4372, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4381, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4397);
+  dasm_put(Dst, 4406);
   if (sse) {
-  dasm_put(Dst, 4411, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4420, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4442, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4451, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4467);
+  dasm_put(Dst, 4476);
   if (sse) {
-  dasm_put(Dst, 4481, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4490, 1+1, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 4512, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4521, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4537);
+  dasm_put(Dst, 4546);
   if (sse) {
-    dasm_put(Dst, 4553, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4562, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   } else {
-    dasm_put(Dst, 4592, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
+    dasm_put(Dst, 4601, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
   }
-  dasm_put(Dst, 4625, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
-  dasm_put(Dst, 4690, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 4634, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 4699, 1+1, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 4789);
+    dasm_put(Dst, 4798);
   } else {
-    dasm_put(Dst, 4795);
+    dasm_put(Dst, 4804);
   }
-  dasm_put(Dst, 4804);
+  dasm_put(Dst, 4813);
   if (sse) {
-    dasm_put(Dst, 4829);
+    dasm_put(Dst, 4838);
   } else {
-    dasm_put(Dst, 4835);
+    dasm_put(Dst, 4844);
   }
-  dasm_put(Dst, 4838, 1+2);
+  dasm_put(Dst, 4847, 1+2);
   if (sse) {
-    dasm_put(Dst, 4847);
+    dasm_put(Dst, 4856);
   } else {
-    dasm_put(Dst, 4855);
+    dasm_put(Dst, 4864);
   }
-  dasm_put(Dst, 4863);
+  dasm_put(Dst, 4872);
   if (sse) {
-    dasm_put(Dst, 4866);
+    dasm_put(Dst, 4875);
   } else {
-    dasm_put(Dst, 4898);
+    dasm_put(Dst, 4907);
   }
-  dasm_put(Dst, 4917);
+  dasm_put(Dst, 4926);
   if (sse) {
-    dasm_put(Dst, 4933, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4942, 1+1, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 4958, 1+1, LJ_TISNUM);
+    dasm_put(Dst, 4967, 1+1, LJ_TISNUM);
   }
-  dasm_put(Dst, 4980);
+  dasm_put(Dst, 4989);
   if (sse) {
-    dasm_put(Dst, 5002);
+    dasm_put(Dst, 5011);
   } else {
-    dasm_put(Dst, 5028);
+    dasm_put(Dst, 5037);
   }
-  dasm_put(Dst, 5045, 1+2);
+  dasm_put(Dst, 5054, 1+2);
   if (sse) {
-    dasm_put(Dst, 5085);
+    dasm_put(Dst, 5094);
   } else {
-    dasm_put(Dst, 5093);
+    dasm_put(Dst, 5102);
   }
-  dasm_put(Dst, 5103, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 5112, 2+1, LJ_TISNUM, LJ_TISNUM);
   if (sse) {
-    dasm_put(Dst, 5155, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 5164, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-    dasm_put(Dst, 5202, 2+1, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 5211, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 5243, LJ_TISNUM);
+  dasm_put(Dst, 5252, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5256, LJ_TISNUM);
+  dasm_put(Dst, 5265, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4789);
+  dasm_put(Dst, 4798);
   } else {
-  dasm_put(Dst, 4795);
+  dasm_put(Dst, 4804);
   }
-  dasm_put(Dst, 5306);
+  dasm_put(Dst, 5315);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 5317, LJ_TISNUM);
+  dasm_put(Dst, 5326, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5338);
+  dasm_put(Dst, 5347);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5359);
+  dasm_put(Dst, 5368);
   } else {
-  dasm_put(Dst, 5384, LJ_TISNUM);
+  dasm_put(Dst, 5393, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5402);
+  dasm_put(Dst, 5411);
   } else {
-  dasm_put(Dst, 5420);
+  dasm_put(Dst, 5429);
   }
-  dasm_put(Dst, 5425);
+  dasm_put(Dst, 5434);
   if (cmov) {
-  dasm_put(Dst, 5435);
+  dasm_put(Dst, 5444);
   } else {
-  dasm_put(Dst, 5443);
+  dasm_put(Dst, 5452);
   }
-  dasm_put(Dst, 5376);
+  dasm_put(Dst, 5385);
   }
-  dasm_put(Dst, 5464, LJ_TISNUM);
+  dasm_put(Dst, 5473, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5477, LJ_TISNUM);
+  dasm_put(Dst, 5486, LJ_TISNUM);
   if (sse) {
-  dasm_put(Dst, 4789);
+  dasm_put(Dst, 4798);
   } else {
-  dasm_put(Dst, 4795);
+  dasm_put(Dst, 4804);
   }
-  dasm_put(Dst, 5306);
+  dasm_put(Dst, 5315);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 5317, LJ_TISNUM);
+  dasm_put(Dst, 5326, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5338);
+  dasm_put(Dst, 5347);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5527);
+  dasm_put(Dst, 5536);
   } else {
-  dasm_put(Dst, 5384, LJ_TISNUM);
+  dasm_put(Dst, 5393, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 5402);
+  dasm_put(Dst, 5411);
   } else {
-  dasm_put(Dst, 5420);
+  dasm_put(Dst, 5429);
   }
-  dasm_put(Dst, 5425);
+  dasm_put(Dst, 5434);
   if (cmov) {
-  dasm_put(Dst, 5552);
+  dasm_put(Dst, 5561);
   } else {
-  dasm_put(Dst, 5560);
+  dasm_put(Dst, 5569);
   }
-  dasm_put(Dst, 5376);
+  dasm_put(Dst, 5385);
   }
   if (!sse) {
-    dasm_put(Dst, 5581);
+    dasm_put(Dst, 5590);
   }
-  dasm_put(Dst, 5590, 1+1, LJ_TSTR);
+  dasm_put(Dst, 5599, 1+1, LJ_TSTR);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5612, Dt5(->len));
+    dasm_put(Dst, 5621, Dt5(->len));
   } else if (sse) {
-    dasm_put(Dst, 5620, Dt5(->len));
+    dasm_put(Dst, 5629, Dt5(->len));
   } else {
-    dasm_put(Dst, 5631, Dt5(->len));
+    dasm_put(Dst, 5640, Dt5(->len));
   }
-  dasm_put(Dst, 5639, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
+  dasm_put(Dst, 5648, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 3969);
+    dasm_put(Dst, 3978);
   } else if (sse) {
-    dasm_put(Dst, 5677);
+    dasm_put(Dst, 5686);
   } else {
-    dasm_put(Dst, 5687);
+    dasm_put(Dst, 5696);
   }
-  dasm_put(Dst, 5700, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
+  dasm_put(Dst, 5709, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5731);
+    dasm_put(Dst, 5740);
   } else if (sse) {
-    dasm_put(Dst, 5754);
+    dasm_put(Dst, 5763);
   } else {
-    dasm_put(Dst, 5780);
+    dasm_put(Dst, 5789);
   }
-  dasm_put(Dst, 5804, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
+  dasm_put(Dst, 5813, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5907);
+    dasm_put(Dst, 5916);
   } else if (sse) {
-    dasm_put(Dst, 5919);
+    dasm_put(Dst, 5928);
   } else {
-    dasm_put(Dst, 5934);
+    dasm_put(Dst, 5943);
   }
-  dasm_put(Dst, 5946, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 5955, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 2537);
+    dasm_put(Dst, 2546);
   } else {
-    dasm_put(Dst, 2264);
+    dasm_put(Dst, 2273);
   }
-  dasm_put(Dst, 5963, Dt5(->len));
+  dasm_put(Dst, 5972, Dt5(->len));
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 5973);
+    dasm_put(Dst, 5982);
   } else if (sse) {
-    dasm_put(Dst, 5977);
+    dasm_put(Dst, 5986);
   } else {
-    dasm_put(Dst, 5984);
+    dasm_put(Dst, 5993);
   }
-  dasm_put(Dst, 5996, sizeof(GCstr)-1);
-  dasm_put(Dst, 6071, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 6130, LJ_TSTR, LJ_TISNUM);
+  dasm_put(Dst, 6005, sizeof(GCstr)-1);
+  dasm_put(Dst, 6080, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 6139, LJ_TSTR, LJ_TISNUM);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6147);
+    dasm_put(Dst, 6156);
   } else if (sse) {
-    dasm_put(Dst, 6155);
+    dasm_put(Dst, 6164);
   } else {
-    dasm_put(Dst, 6166);
+    dasm_put(Dst, 6175);
   }
-  dasm_put(Dst, 6182, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6247, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6310, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
-  dasm_put(Dst, 6381, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
-  dasm_put(Dst, 6466, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
-  dasm_put(Dst, 6536, 1+1, LJ_TTAB);
+  dasm_put(Dst, 6191, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6256, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6319, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
+  dasm_put(Dst, 6390, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1);
+  dasm_put(Dst, 6475, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 6545, 1+1, LJ_TTAB);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6604);
+    dasm_put(Dst, 6613);
   } else if (sse) {
-    dasm_put(Dst, 6611);
+    dasm_put(Dst, 6620);
   } else {
-    dasm_put(Dst, 6621);
+    dasm_put(Dst, 6630);
   }
-  dasm_put(Dst, 6632, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 6641, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6648);
+  dasm_put(Dst, 6657);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 6694);
+  dasm_put(Dst, 6703);
   }
   dasm_put(Dst, 111);
   if (LJ_DUALNUM || sse) {
     if (!sse) {
-      dasm_put(Dst, 6712);
+      dasm_put(Dst, 6721);
     }
-    dasm_put(Dst, 6716);
+    dasm_put(Dst, 6725);
   } else {
-    dasm_put(Dst, 6624);
+    dasm_put(Dst, 6633);
   }
-  dasm_put(Dst, 6721, 1+1);
+  dasm_put(Dst, 6730, 1+1);
   if (sse) {
-  dasm_put(Dst, 6732);
+  dasm_put(Dst, 6741);
   } else {
-  dasm_put(Dst, 6747);
+  dasm_put(Dst, 6756);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6773);
+  dasm_put(Dst, 6782);
   } else {
-  dasm_put(Dst, 6788);
+  dasm_put(Dst, 6797);
   }
-  dasm_put(Dst, 6801, LJ_TISNUM);
+  dasm_put(Dst, 6810, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6826);
+  dasm_put(Dst, 6835);
   } else {
-  dasm_put(Dst, 6846);
+  dasm_put(Dst, 6855);
   }
   if (sse) {
-  dasm_put(Dst, 6851);
+  dasm_put(Dst, 6860);
   } else {
-  dasm_put(Dst, 6868);
+  dasm_put(Dst, 6877);
   }
-  dasm_put(Dst, 6881, 1+1);
+  dasm_put(Dst, 6890, 1+1);
   if (sse) {
-  dasm_put(Dst, 6732);
+  dasm_put(Dst, 6741);
   } else {
-  dasm_put(Dst, 6747);
+  dasm_put(Dst, 6756);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6773);
+  dasm_put(Dst, 6782);
   } else {
-  dasm_put(Dst, 6788);
+  dasm_put(Dst, 6797);
   }
-  dasm_put(Dst, 6801, LJ_TISNUM);
+  dasm_put(Dst, 6810, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6899);
+  dasm_put(Dst, 6908);
   } else {
-  dasm_put(Dst, 6846);
+  dasm_put(Dst, 6855);
   }
   if (sse) {
-  dasm_put(Dst, 6919);
+  dasm_put(Dst, 6928);
   } else {
-  dasm_put(Dst, 6936);
+  dasm_put(Dst, 6945);
   }
-  dasm_put(Dst, 6949, 1+1);
+  dasm_put(Dst, 6958, 1+1);
   if (sse) {
-  dasm_put(Dst, 6732);
+  dasm_put(Dst, 6741);
   } else {
-  dasm_put(Dst, 6747);
+  dasm_put(Dst, 6756);
   }
-  dasm_put(Dst, 2241, LJ_TISNUM);
+  dasm_put(Dst, 2250, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6773);
+  dasm_put(Dst, 6782);
   } else {
-  dasm_put(Dst, 6788);
+  dasm_put(Dst, 6797);
   }
-  dasm_put(Dst, 6801, LJ_TISNUM);
+  dasm_put(Dst, 6810, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6967);
+  dasm_put(Dst, 6976);
   } else {
-  dasm_put(Dst, 6846);
+  dasm_put(Dst, 6855);
   }
   if (sse) {
-  dasm_put(Dst, 6987);
+  dasm_put(Dst, 6996);
   } else {
-  dasm_put(Dst, 7004);
+  dasm_put(Dst, 7013);
   }
-  dasm_put(Dst, 7017, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7026, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7061, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7070, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7085);
+  dasm_put(Dst, 7094);
   if (LJ_DUALNUM) {
-    dasm_put(Dst, 6716);
+    dasm_put(Dst, 6725);
   } else if (sse) {
-    dasm_put(Dst, 7091);
+    dasm_put(Dst, 7100);
   } else {
-    dasm_put(Dst, 7103);
+    dasm_put(Dst, 7112);
   }
-  dasm_put(Dst, 7116);
+  dasm_put(Dst, 7125);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7127, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7136, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7143, LJ_TISNUM);
+  dasm_put(Dst, 7152, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7158, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7167, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7230, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7239, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7294);
+  dasm_put(Dst, 7303);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7301, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7310, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7143, LJ_TISNUM);
+  dasm_put(Dst, 7152, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7317, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7326, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7389, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7398, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7453);
+  dasm_put(Dst, 7462);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7461, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7470, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7143, LJ_TISNUM);
+  dasm_put(Dst, 7152, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7477, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7486, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7549, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7558, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7613);
+  dasm_put(Dst, 7622);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7621, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7630, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7143, LJ_TISNUM);
+  dasm_put(Dst, 7152, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7637, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7646, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7709, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7718, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7773);
+  dasm_put(Dst, 7782);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 7780, 1+1, LJ_TISNUM);
+  dasm_put(Dst, 7789, 1+1, LJ_TISNUM);
   if (LJ_DUALNUM) {
-  dasm_put(Dst, 6756);
+  dasm_put(Dst, 6765);
   } else {
-  dasm_put(Dst, 2264);
+  dasm_put(Dst, 2273);
   }
   if (sse) {
-  dasm_put(Dst, 6665);
+  dasm_put(Dst, 6674);
   } else {
-  dasm_put(Dst, 7040);
+  dasm_put(Dst, 7049);
   }
-  dasm_put(Dst, 7143, LJ_TISNUM);
+  dasm_put(Dst, 7152, LJ_TISNUM);
   } else if (sse) {
-  dasm_put(Dst, 7796, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7805, 2+1, LJ_TISNUM, LJ_TISNUM);
   } else {
-  dasm_put(Dst, 7868, 2+1, LJ_TISNUM, LJ_TISNUM);
+  dasm_put(Dst, 7877, 2+1, LJ_TISNUM, LJ_TISNUM);
   }
-  dasm_put(Dst, 7932, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
-  dasm_put(Dst, 8008, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 8132, Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 7941, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
+  dasm_put(Dst, 8017, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 8141, Dt1(->top), Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 8170, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
+  dasm_put(Dst, 8179, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
 #endif
-  dasm_put(Dst, 8201, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
-  dasm_put(Dst, 8252, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
+  dasm_put(Dst, 8210, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE);
+  dasm_put(Dst, 8261, Dt1(->base), Dt1(->base), GG_DISP2STATIC);
 #if LJ_HASJIT
-  dasm_put(Dst, 8318, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
+  dasm_put(Dst, 8327, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L));
 #endif
-  dasm_put(Dst, 8364);
+  dasm_put(Dst, 8373);
 #if LJ_HASJIT
-  dasm_put(Dst, 8196);
+  dasm_put(Dst, 8205);
 #endif
-  dasm_put(Dst, 8371);
+  dasm_put(Dst, 8380);
 #if LJ_HASJIT
-  dasm_put(Dst, 8374);
+  dasm_put(Dst, 8383);
 #endif
-  dasm_put(Dst, 8384, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 8393, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 8418);
+  dasm_put(Dst, 8427);
 #endif
-  dasm_put(Dst, 8423, Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 8432, Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 8452, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
+  dasm_put(Dst, 8461, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC);
 #endif
-  dasm_put(Dst, 8595);
+  dasm_put(Dst, 8604);
 #if LJ_HASJIT
-  dasm_put(Dst, 8598, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
+  dasm_put(Dst, 8607, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF);
 #endif
-  dasm_put(Dst, 8676);
+  dasm_put(Dst, 8685);
   if (!sse) {
-  dasm_put(Dst, 8679);
+  dasm_put(Dst, 8688);
   }
-  dasm_put(Dst, 8724);
+  dasm_put(Dst, 8733);
   if (!sse) {
-  dasm_put(Dst, 8826);
+  dasm_put(Dst, 8835);
   }
-  dasm_put(Dst, 8871);
+  dasm_put(Dst, 8880);
   if (!sse) {
-  dasm_put(Dst, 8973);
+  dasm_put(Dst, 8982);
   }
-  dasm_put(Dst, 9012);
+  dasm_put(Dst, 9021);
   if (sse) {
-    dasm_put(Dst, 9117);
+    dasm_put(Dst, 9126);
   } else {
-    dasm_put(Dst, 9247);
+    dasm_put(Dst, 9256);
   }
-  dasm_put(Dst, 9294);
+  dasm_put(Dst, 9303);
   if (!sse) {
-  dasm_put(Dst, 9368);
+  dasm_put(Dst, 9377);
   if (cmov) {
-  dasm_put(Dst, 9379);
+  dasm_put(Dst, 9388);
   } else {
-  dasm_put(Dst, 9383);
+  dasm_put(Dst, 9392);
   }
-  dasm_put(Dst, 9390);
-  dasm_put(Dst, 9464);
-  dasm_put(Dst, 9564);
+  dasm_put(Dst, 9399);
+  dasm_put(Dst, 9473);
+  dasm_put(Dst, 9573);
   if (cmov) {
-  dasm_put(Dst, 9567);
+  dasm_put(Dst, 9576);
   } else {
-  dasm_put(Dst, 9571);
+  dasm_put(Dst, 9580);
   }
-  dasm_put(Dst, 9578);
+  dasm_put(Dst, 9587);
   if (cmov) {
-  dasm_put(Dst, 9379);
+  dasm_put(Dst, 9388);
   } else {
-  dasm_put(Dst, 9383);
+  dasm_put(Dst, 9392);
   }
-  dasm_put(Dst, 9596);
+  dasm_put(Dst, 9605);
   } else {
-    dasm_put(Dst, 9675);
+    dasm_put(Dst, 9684);
   }
-  dasm_put(Dst, 9678);
-  dasm_put(Dst, 9763);
-  dasm_put(Dst, 9893);
-  dasm_put(Dst, 10099);
+  dasm_put(Dst, 9687);
+  dasm_put(Dst, 9772);
+  dasm_put(Dst, 9902);
+  dasm_put(Dst, 10108);
 #if LJ_HASJIT
   if (sse) {
-    dasm_put(Dst, 10106);
-    dasm_put(Dst, 10163);
-    dasm_put(Dst, 10254);
+    dasm_put(Dst, 10115);
+    dasm_put(Dst, 10172);
+    dasm_put(Dst, 10263);
   } else {
-    dasm_put(Dst, 10296);
-    dasm_put(Dst, 10388);
+    dasm_put(Dst, 10305);
+    dasm_put(Dst, 10397);
   }
-  dasm_put(Dst, 10434);
+  dasm_put(Dst, 10443);
 #endif
-  dasm_put(Dst, 10438);
+  dasm_put(Dst, 10447);
   if (sse) {
-    dasm_put(Dst, 10441);
-    dasm_put(Dst, 10546);
-    dasm_put(Dst, 10629);
+    dasm_put(Dst, 10450);
+    dasm_put(Dst, 10555);
+    dasm_put(Dst, 10638);
   } else {
-    dasm_put(Dst, 10701);
-    dasm_put(Dst, 10784);
+    dasm_put(Dst, 10710);
+    dasm_put(Dst, 10793);
     if (cmov) {
-    dasm_put(Dst, 10839);
+    dasm_put(Dst, 10848);
     } else {
-    dasm_put(Dst, 10858);
+    dasm_put(Dst, 10867);
     }
-    dasm_put(Dst, 10434);
+    dasm_put(Dst, 10443);
   }
-  dasm_put(Dst, 10899);
+  dasm_put(Dst, 10908);
 #ifdef LUA_USE_ASSERT
-  dasm_put(Dst, 10436);
+  dasm_put(Dst, 10445);
+#endif
+  dasm_put(Dst, 10964);
+#if LJ_HASFFI
+#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
+  dasm_put(Dst, 10968, GG_G2DISP, Dt2(->ctype_state), DtE(->cb.slot), CFRAME_SIZE+16, DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.stack), CFRAME_SIZE+12, CFRAME_SIZE+8, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), Dt7(->pc));
 #endif
-  dasm_put(Dst, 10955);
+  dasm_put(Dst, 11078);
 #if LJ_HASFFI
-#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
-  dasm_put(Dst, 10959, DtE(->spadj));
+  dasm_put(Dst, 11081, DISPATCH_GL(ctype_state), DtE(->L), Dt1(->base), Dt1(->top), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.gpr[2]), DtE(->cb.fpr[0].d), DtE(->cb.fpr[0].f), Dt1(->top));
+#endif
+  dasm_put(Dst, 11170);
+#if LJ_HASFFI
+#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
+  dasm_put(Dst, 11173, DtF(->spadj));
 #if LJ_TARGET_WINDOWS
-  dasm_put(Dst, 10969, DtE(->spadj));
+  dasm_put(Dst, 11183, DtF(->spadj));
 #endif
-  dasm_put(Dst, 10973, DtE(->nsp), offsetof(CCallState, stack), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->func), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->resx87), DtE(->fpr[0].d[0]));
-  dasm_put(Dst, 11043, DtE(->fpr[0].f[0]));
+  dasm_put(Dst, 11187, DtF(->nsp), offsetof(CCallState, stack), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->func), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->resx87), DtF(->fpr[0].d[0]));
+  dasm_put(Dst, 11257, DtF(->fpr[0].f[0]));
 #if LJ_TARGET_WINDOWS
-  dasm_put(Dst, 11049, DtE(->spadj));
+  dasm_put(Dst, 11263, DtF(->spadj));
 #endif
-  dasm_put(Dst, 11053);
+  dasm_put(Dst, 11267);
 #endif
 }
 
@@ -1995,7 +2030,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
 static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 {
   int vk = 0;
-  dasm_put(Dst, 11060, defop);
+  dasm_put(Dst, 11274, defop);
 
   switch (op) {
 
@@ -2006,303 +2041,303 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11062, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11276, LJ_TISNUM, LJ_TISNUM);
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 11092);
+      dasm_put(Dst, 11306);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 11097);
+      dasm_put(Dst, 11311);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 11102);
+      dasm_put(Dst, 11316);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 11107);
+      dasm_put(Dst, 11321);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 11112, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 11326, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 11165);
+       dasm_put(Dst, 11379);
       } else {
-       dasm_put(Dst, 11176);
+       dasm_put(Dst, 11390);
       }
-      dasm_put(Dst, 11187);
+      dasm_put(Dst, 11401);
       if (sse) {
-       dasm_put(Dst, 11194);
+       dasm_put(Dst, 11408);
        switch (op) {
        case BC_ISLT:
-       dasm_put(Dst, 11214);
+       dasm_put(Dst, 11428);
        break;
        case BC_ISGE:
-       dasm_put(Dst, 11219);
+       dasm_put(Dst, 11433);
        break;
        case BC_ISLE:
-       dasm_put(Dst, 11224);
+       dasm_put(Dst, 11438);
        break;
        case BC_ISGT:
-       dasm_put(Dst, 11229);
+       dasm_put(Dst, 11443);
        break;
        default: break;  /* Shut up GCC. */
        }
-       dasm_put(Dst, 11234);
+       dasm_put(Dst, 11448);
       } else {
-       dasm_put(Dst, 11239);
+       dasm_put(Dst, 11453);
       }
     } else {
-      dasm_put(Dst, 11247, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11461, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 11268);
+      dasm_put(Dst, 11482);
     } else {
-      dasm_put(Dst, 11289);
+      dasm_put(Dst, 11503);
       if (cmov) {
-      dasm_put(Dst, 3944);
+      dasm_put(Dst, 3953);
       } else {
-      dasm_put(Dst, 3950);
+      dasm_put(Dst, 3959);
       }
     }
     if (LJ_DUALNUM) {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 11214);
+      dasm_put(Dst, 11428);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 11219);
+      dasm_put(Dst, 11433);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 11224);
+      dasm_put(Dst, 11438);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 11229);
+      dasm_put(Dst, 11443);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 11234);
+      dasm_put(Dst, 11448);
     } else {
       switch (op) {
       case BC_ISLT:
-      dasm_put(Dst, 11305);
+      dasm_put(Dst, 752);
       break;
       case BC_ISGE:
-      dasm_put(Dst, 11310);
+      dasm_put(Dst, 11519);
       break;
       case BC_ISLE:
-      dasm_put(Dst, 11315);
+      dasm_put(Dst, 11524);
       break;
       case BC_ISGT:
-      dasm_put(Dst, 11320);
+      dasm_put(Dst, 11529);
       break;
       default: break;  /* Shut up GCC. */
       }
-      dasm_put(Dst, 11325, -BCBIAS_J*4);
+      dasm_put(Dst, 11534, -BCBIAS_J*4);
     }
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
-    dasm_put(Dst, 11356);
+    dasm_put(Dst, 11565);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11364, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11573, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 11389);
+       dasm_put(Dst, 11598);
       } else {
-       dasm_put(Dst, 11394);
+       dasm_put(Dst, 11603);
       }
-      dasm_put(Dst, 11399, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 11608, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 11450);
+       dasm_put(Dst, 11659);
       } else {
-       dasm_put(Dst, 11457);
+       dasm_put(Dst, 11666);
       }
-      dasm_put(Dst, 11461);
+      dasm_put(Dst, 11670);
       if (sse) {
-       dasm_put(Dst, 11472);
+       dasm_put(Dst, 11681);
       } else {
-       dasm_put(Dst, 11484);
+       dasm_put(Dst, 11693);
       }
-      dasm_put(Dst, 11491);
+      dasm_put(Dst, 11700);
     } else {
-      dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11705, LJ_TISNUM, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 11515);
+      dasm_put(Dst, 11724);
     } else {
-      dasm_put(Dst, 11533);
+      dasm_put(Dst, 11742);
       if (cmov) {
-      dasm_put(Dst, 3944);
+      dasm_put(Dst, 3953);
       } else {
-      dasm_put(Dst, 3950);
+      dasm_put(Dst, 3959);
       }
     }
   iseqne_fp:
     if (vk) {
-      dasm_put(Dst, 11546);
+      dasm_put(Dst, 11755);
     } else {
-      dasm_put(Dst, 11555);
+      dasm_put(Dst, 11764);
     }
   iseqne_end:
     if (vk) {
-      dasm_put(Dst, 11564, -BCBIAS_J*4);
+      dasm_put(Dst, 11773, -BCBIAS_J*4);
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4844);
+       dasm_put(Dst, 4853);
       }
     } else {
       if (!LJ_HASFFI) {
-       dasm_put(Dst, 4844);
+       dasm_put(Dst, 4853);
       }
-      dasm_put(Dst, 11579, -BCBIAS_J*4);
+      dasm_put(Dst, 11788, -BCBIAS_J*4);
     }
     if (LJ_DUALNUM && (op == BC_ISEQV || op == BC_ISNEV ||
                       op == BC_ISEQN || op == BC_ISNEN)) {
-      dasm_put(Dst, 11594);
+      dasm_put(Dst, 11803);
     } else {
-      dasm_put(Dst, 11337);
+      dasm_put(Dst, 11546);
     }
     if (op == BC_ISEQV || op == BC_ISNEV) {
-      dasm_put(Dst, 11599);
+      dasm_put(Dst, 11808);
       if (LJ_HASFFI) {
-       dasm_put(Dst, 11602, LJ_TCDATA, LJ_TCDATA);
+       dasm_put(Dst, 11811, LJ_TCDATA, LJ_TCDATA);
       }
-      dasm_put(Dst, 11621, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
+      dasm_put(Dst, 11830, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 11677);
+       dasm_put(Dst, 11886);
       } else {
-       dasm_put(Dst, 11681);
+       dasm_put(Dst, 11890);
       }
-      dasm_put(Dst, 11687);
+      dasm_put(Dst, 11896);
     } else if (LJ_HASFFI) {
-      dasm_put(Dst, 11692, LJ_TCDATA);
+      dasm_put(Dst, 11901, LJ_TCDATA);
       if (LJ_DUALNUM && vk) {
-       dasm_put(Dst, 11699);
+       dasm_put(Dst, 11908);
       } else {
-       dasm_put(Dst, 11672);
+       dasm_put(Dst, 11881);
       }
-      dasm_put(Dst, 11704);
+      dasm_put(Dst, 11913);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 11709, LJ_TSTR);
+    dasm_put(Dst, 11918, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 11550);
+      dasm_put(Dst, 11759);
     } else {
-      dasm_put(Dst, 748);
+      dasm_put(Dst, 2971);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 11734);
+    dasm_put(Dst, 11943);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11742, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 11951, LJ_TISNUM, LJ_TISNUM);
       if (vk) {
-       dasm_put(Dst, 11389);
+       dasm_put(Dst, 11598);
       } else {
-       dasm_put(Dst, 11394);
+       dasm_put(Dst, 11603);
       }
-      dasm_put(Dst, 11767, -BCBIAS_J*4, LJ_TISNUM);
+      dasm_put(Dst, 11976, -BCBIAS_J*4, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 11814);
+       dasm_put(Dst, 12023);
       } else {
-       dasm_put(Dst, 11821);
+       dasm_put(Dst, 12030);
       }
-      dasm_put(Dst, 11825);
+      dasm_put(Dst, 12034);
       if (sse) {
-       dasm_put(Dst, 11832);
+       dasm_put(Dst, 12041);
       } else {
-       dasm_put(Dst, 11844);
+       dasm_put(Dst, 12053);
       }
-      dasm_put(Dst, 11491);
+      dasm_put(Dst, 11700);
     } else {
-      dasm_put(Dst, 11851, LJ_TISNUM);
+      dasm_put(Dst, 12060, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 11860);
+      dasm_put(Dst, 12069);
     } else {
-      dasm_put(Dst, 11878);
+      dasm_put(Dst, 12087);
       if (cmov) {
-      dasm_put(Dst, 3944);
+      dasm_put(Dst, 3953);
       } else {
-      dasm_put(Dst, 3950);
+      dasm_put(Dst, 3959);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 11891);
+    dasm_put(Dst, 12100);
     if (!LJ_HASFFI) goto iseqne_test;
     if (vk) {
-      dasm_put(Dst, 11904, -BCBIAS_J*4, LJ_TCDATA);
+      dasm_put(Dst, 12113, -BCBIAS_J*4, LJ_TCDATA);
     } else {
-      dasm_put(Dst, 11953, LJ_TCDATA, -BCBIAS_J*4);
+      dasm_put(Dst, 12162, LJ_TCDATA, -BCBIAS_J*4);
     }
     break;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 11996, LJ_TISTRUECOND);
+    dasm_put(Dst, 12205, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 11320);
+      dasm_put(Dst, 11529);
     } else {
-      dasm_put(Dst, 11315);
+      dasm_put(Dst, 11524);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 12008);
+      dasm_put(Dst, 12217);
     }
-    dasm_put(Dst, 11325, -BCBIAS_J*4);
+    dasm_put(Dst, 11534, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 12019);
+    dasm_put(Dst, 12228);
     break;
   case BC_NOT:
-    dasm_put(Dst, 12052, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 12261, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12087, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 12296, LJ_TISNUM, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 12163, LJ_TISNUM);
+      dasm_put(Dst, 12372, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 12174);
+      dasm_put(Dst, 12383);
     } else {
-      dasm_put(Dst, 12204);
+      dasm_put(Dst, 12413);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11594);
+      dasm_put(Dst, 11803);
     } else {
-      dasm_put(Dst, 11337);
+      dasm_put(Dst, 11546);
     }
     break;
   case BC_LEN:
-    dasm_put(Dst, 12213, LJ_TSTR);
+    dasm_put(Dst, 12422, LJ_TSTR);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12227, Dt5(->len), LJ_TISNUM);
+      dasm_put(Dst, 12436, Dt5(->len), LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 12241, Dt5(->len));
+      dasm_put(Dst, 12450, Dt5(->len));
     } else {
-      dasm_put(Dst, 12259, Dt5(->len));
+      dasm_put(Dst, 12468, Dt5(->len));
     }
-    dasm_put(Dst, 12268, LJ_TTAB);
+    dasm_put(Dst, 12477, LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 12302, Dt6(->metatable));
+    dasm_put(Dst, 12511, Dt6(->metatable));
 #endif
-    dasm_put(Dst, 12316);
+    dasm_put(Dst, 12525);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 12325);
+      dasm_put(Dst, 12534);
     } else {
-      dasm_put(Dst, 12331);
+      dasm_put(Dst, 12540);
     }
-    dasm_put(Dst, 12338);
+    dasm_put(Dst, 12547);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-    dasm_put(Dst, 12351, Dt6(->nomm), 1<<MM_len);
+    dasm_put(Dst, 12560, Dt6(->nomm), 1<<MM_len);
 #endif
     break;
 
@@ -2311,620 +2346,620 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12375, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12584, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 12408, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12617, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 12441, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12650, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 12474, LJ_TISNUM);
+    dasm_put(Dst, 12683, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 12237);
+    dasm_put(Dst, 12446);
     } else {
-    dasm_put(Dst, 12015);
+    dasm_put(Dst, 12224);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     } else {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12503);
+    dasm_put(Dst, 12712);
     } else {
-    dasm_put(Dst, 12517);
+    dasm_put(Dst, 12726);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12548);
+    dasm_put(Dst, 12757);
     } else {
-    dasm_put(Dst, 12562);
+    dasm_put(Dst, 12771);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12592);
+    dasm_put(Dst, 12801);
     } else {
-    dasm_put(Dst, 12606);
+    dasm_put(Dst, 12815);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     }
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12614, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12823, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 12647, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12856, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 12680, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12889, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 12474, LJ_TISNUM);
+    dasm_put(Dst, 12683, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 12237);
+    dasm_put(Dst, 12446);
     } else {
-    dasm_put(Dst, 12015);
+    dasm_put(Dst, 12224);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     } else {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12713);
+    dasm_put(Dst, 12922);
     } else {
-    dasm_put(Dst, 12727);
+    dasm_put(Dst, 12936);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12735);
+    dasm_put(Dst, 12944);
     } else {
-    dasm_put(Dst, 12749);
+    dasm_put(Dst, 12958);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12757);
+    dasm_put(Dst, 12966);
     } else {
-    dasm_put(Dst, 12771);
+    dasm_put(Dst, 12980);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     }
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12988, LJ_TISNUM, LJ_TISNUM);
       break;
     case 1:
-    dasm_put(Dst, 12813, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 13022, LJ_TISNUM, LJ_TISNUM);
       break;
     default:
-    dasm_put(Dst, 12847, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 13056, LJ_TISNUM, LJ_TISNUM);
       break;
     }
-    dasm_put(Dst, 12474, LJ_TISNUM);
+    dasm_put(Dst, 12683, LJ_TISNUM);
     if (vk == 1) {
-    dasm_put(Dst, 12237);
+    dasm_put(Dst, 12446);
     } else {
-    dasm_put(Dst, 12015);
+    dasm_put(Dst, 12224);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     } else {
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12881);
+    dasm_put(Dst, 13090);
     } else {
-    dasm_put(Dst, 12895);
+    dasm_put(Dst, 13104);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12903);
+    dasm_put(Dst, 13112);
     } else {
-    dasm_put(Dst, 12917);
+    dasm_put(Dst, 13126);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12925);
+    dasm_put(Dst, 13134);
     } else {
-    dasm_put(Dst, 12939);
+    dasm_put(Dst, 13148);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     }
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12947);
+    dasm_put(Dst, 13156);
     } else {
-    dasm_put(Dst, 12961);
+    dasm_put(Dst, 13170);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 12969);
+    dasm_put(Dst, 13178);
     } else {
-    dasm_put(Dst, 12983);
+    dasm_put(Dst, 13192);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 12991);
+    dasm_put(Dst, 13200);
     } else {
-    dasm_put(Dst, 13005);
+    dasm_put(Dst, 13214);
     }
       break;
     }
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
   case BC_MODVN:
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13013);
+    dasm_put(Dst, 13222);
     } else {
-    dasm_put(Dst, 13027);
+    dasm_put(Dst, 13236);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13035);
+    dasm_put(Dst, 13244);
     } else {
-    dasm_put(Dst, 13049);
+    dasm_put(Dst, 13258);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 13057);
+    dasm_put(Dst, 13266);
     } else {
-    dasm_put(Dst, 13071);
+    dasm_put(Dst, 13280);
     }
       break;
     }
-    dasm_put(Dst, 13079);
+    dasm_put(Dst, 13288);
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
   case BC_MODNV: case BC_MODVV:
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13013);
+    dasm_put(Dst, 13222);
     } else {
-    dasm_put(Dst, 13027);
+    dasm_put(Dst, 13236);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13035);
+    dasm_put(Dst, 13244);
     } else {
-    dasm_put(Dst, 13049);
+    dasm_put(Dst, 13258);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 13057);
+    dasm_put(Dst, 13266);
     } else {
-    dasm_put(Dst, 13071);
+    dasm_put(Dst, 13280);
     }
       break;
     }
-    dasm_put(Dst, 13085);
+    dasm_put(Dst, 13294);
     break;
   case BC_POW:
-    dasm_put(Dst, 12367);
+    dasm_put(Dst, 12576);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 12480, LJ_TISNUM);
+    dasm_put(Dst, 12689, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12492, LJ_TISNUM);
+    dasm_put(Dst, 12701, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13013);
+    dasm_put(Dst, 13222);
     } else {
-    dasm_put(Dst, 13027);
+    dasm_put(Dst, 13236);
     }
       break;
     case 1:
-    dasm_put(Dst, 12525, LJ_TISNUM);
+    dasm_put(Dst, 12734, LJ_TISNUM);
     if (LJ_DUALNUM) {
-    dasm_put(Dst, 12537, LJ_TISNUM);
+    dasm_put(Dst, 12746, LJ_TISNUM);
     }
     if (sse) {
-    dasm_put(Dst, 13035);
+    dasm_put(Dst, 13244);
     } else {
-    dasm_put(Dst, 13049);
+    dasm_put(Dst, 13258);
     }
       break;
     default:
-    dasm_put(Dst, 12570, LJ_TISNUM, LJ_TISNUM);
+    dasm_put(Dst, 12779, LJ_TISNUM, LJ_TISNUM);
     if (sse) {
-    dasm_put(Dst, 13057);
+    dasm_put(Dst, 13266);
     } else {
-    dasm_put(Dst, 13071);
+    dasm_put(Dst, 13280);
     }
       break;
     }
-    dasm_put(Dst, 13090);
+    dasm_put(Dst, 13299);
     if (sse) {
-    dasm_put(Dst, 12197);
+    dasm_put(Dst, 12406);
     } else {
-    dasm_put(Dst, 12209);
+    dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
 
   case BC_CAT:
-    dasm_put(Dst, 13094, Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 13303, Dt1(->base), Dt1(->base));
     break;
 
   /* -- Constant ops ------------------------------------------------------ */
 
   case BC_KSTR:
-    dasm_put(Dst, 13188, LJ_TSTR);
+    dasm_put(Dst, 13397, LJ_TSTR);
     break;
   case BC_KCDATA:
 #if LJ_HASFFI
-    dasm_put(Dst, 13188, LJ_TCDATA);
+    dasm_put(Dst, 13397, LJ_TCDATA);
 #endif
     break;
   case BC_KSHORT:
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 13221, LJ_TISNUM);
+      dasm_put(Dst, 13430, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 13233);
+      dasm_put(Dst, 13442);
     } else {
-      dasm_put(Dst, 13248);
+      dasm_put(Dst, 13457);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 13256);
+      dasm_put(Dst, 13465);
     } else {
-      dasm_put(Dst, 13269);
+      dasm_put(Dst, 13478);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
   case BC_KPRI:
-    dasm_put(Dst, 13276);
+    dasm_put(Dst, 13485);
     break;
   case BC_KNIL:
-    dasm_put(Dst, 13302, LJ_TNIL);
+    dasm_put(Dst, 13511, LJ_TNIL);
     break;
 
   /* -- Upvalue and function ops ------------------------------------------ */
 
   case BC_UGET:
-    dasm_put(Dst, 13348, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 13557, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETV:
 #define TV2MARKOFS \
  ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv))
-    dasm_put(Dst, 13392, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
-    dasm_put(Dst, 13482);
+    dasm_put(Dst, 13601, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
+    dasm_put(Dst, 13691);
     break;
 #undef TV2MARKOFS
   case BC_USETS:
-    dasm_put(Dst, 13494, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
+    dasm_put(Dst, 13703, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
     break;
   case BC_USETN:
-    dasm_put(Dst, 13585);
+    dasm_put(Dst, 13794);
     if (sse) {
-      dasm_put(Dst, 13590);
+      dasm_put(Dst, 13799);
     } else {
-      dasm_put(Dst, 11847);
+      dasm_put(Dst, 12056);
     }
-    dasm_put(Dst, 13597, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 13806, offsetof(GCfuncL, uvptr), DtA(->v));
     if (sse) {
-      dasm_put(Dst, 13606);
+      dasm_put(Dst, 13815);
     } else {
-      dasm_put(Dst, 13612);
+      dasm_put(Dst, 13821);
     }
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
   case BC_USETP:
-    dasm_put(Dst, 13615, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 13824, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_UCLO:
-    dasm_put(Dst, 13652, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 13861, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
     break;
 
   case BC_FNEW:
-    dasm_put(Dst, 13706, Dt1(->base), Dt1(->base), LJ_TFUNC);
+    dasm_put(Dst, 13915, Dt1(->base), Dt1(->base), LJ_TFUNC);
     break;
 
   /* -- Table ops --------------------------------------------------------- */
 
   case BC_TNEW:
-    dasm_put(Dst, 13777, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 13986, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB);
     break;
   case BC_TDUP:
-    dasm_put(Dst, 13903, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
+    dasm_put(Dst, 14112, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
     break;
 
   case BC_GGET:
-    dasm_put(Dst, 13995, Dt7(->env));
+    dasm_put(Dst, 14204, Dt7(->env));
     break;
   case BC_GSET:
-    dasm_put(Dst, 14013, Dt7(->env));
+    dasm_put(Dst, 14222, Dt7(->env));
     break;
 
   case BC_TGETV:
-    dasm_put(Dst, 14031, LJ_TTAB);
+    dasm_put(Dst, 14240, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 14054, LJ_TISNUM);
+      dasm_put(Dst, 14263, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 14068, LJ_TISNUM);
+      dasm_put(Dst, 14277, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 14079);
+       dasm_put(Dst, 14288);
       } else {
-       dasm_put(Dst, 14100);
+       dasm_put(Dst, 14309);
        if (cmov) {
-       dasm_put(Dst, 3944);
+       dasm_put(Dst, 3953);
        } else {
-       dasm_put(Dst, 3950);
+       dasm_put(Dst, 3959);
        }
-       dasm_put(Dst, 2680);
+       dasm_put(Dst, 2689);
       }
-      dasm_put(Dst, 14110);
+      dasm_put(Dst, 14319);
     }
-    dasm_put(Dst, 14115, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
-    dasm_put(Dst, 14210, LJ_TSTR);
+    dasm_put(Dst, 14324, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TNIL);
+    dasm_put(Dst, 14419, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 14228, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 14316, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 14437, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 14525, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 14386, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 14485, LJ_TNIL);
+    dasm_put(Dst, 14595, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 14694, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 14502, LJ_TTAB);
+    dasm_put(Dst, 14711, LJ_TTAB);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 14054, LJ_TISNUM);
+      dasm_put(Dst, 14263, LJ_TISNUM);
     } else {
-      dasm_put(Dst, 14068, LJ_TISNUM);
+      dasm_put(Dst, 14277, LJ_TISNUM);
       if (sse) {
-       dasm_put(Dst, 14079);
+       dasm_put(Dst, 14288);
       } else {
-       dasm_put(Dst, 14100);
+       dasm_put(Dst, 14309);
        if (cmov) {
-       dasm_put(Dst, 3944);
+       dasm_put(Dst, 3953);
        } else {
-       dasm_put(Dst, 3950);
+       dasm_put(Dst, 3959);
        }
-       dasm_put(Dst, 2680);
+       dasm_put(Dst, 2689);
       }
-      dasm_put(Dst, 14525);
+      dasm_put(Dst, 14734);
     }
-    dasm_put(Dst, 14530, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
-    dasm_put(Dst, 14614, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 14739, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 14823, LJ_TSTR, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETS:
-    dasm_put(Dst, 14671, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
-    dasm_put(Dst, 14746, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 14838, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 14880, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
+    dasm_put(Dst, 14955, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 15047, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
   case BC_TSETB:
-    dasm_put(Dst, 14934, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
-    dasm_put(Dst, 15032, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 15143, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
+    dasm_put(Dst, 15241, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   case BC_TSETM:
-    dasm_put(Dst, 15078, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
-    dasm_put(Dst, 15227, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
+    dasm_put(Dst, 15287, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 15436, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
     break;
 
   /* -- Calls and vararg handling ----------------------------------------- */
 
   case BC_CALL: case BC_CALLM:
-    dasm_put(Dst, 12371);
+    dasm_put(Dst, 12580);
     if (op == BC_CALLM) {
-      dasm_put(Dst, 15245);
+      dasm_put(Dst, 15454);
     }
-    dasm_put(Dst, 15250, LJ_TFUNC, Dt7(->pc));
+    dasm_put(Dst, 15459, LJ_TFUNC, Dt7(->pc));
     break;
 
   case BC_CALLMT:
-    dasm_put(Dst, 15245);
+    dasm_put(Dst, 15454);
     break;
   case BC_CALLT:
-    dasm_put(Dst, 15291, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
-    dasm_put(Dst, 15409, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
+    dasm_put(Dst, 15500, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc));
+    dasm_put(Dst, 15618, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG);
     break;
 
   case BC_ITERC:
-    dasm_put(Dst, 15479, LJ_TFUNC, 2+1, Dt7(->pc));
+    dasm_put(Dst, 15688, LJ_TFUNC, 2+1, Dt7(->pc));
     break;
 
   case BC_ITERN:
 #if LJ_HASJIT
 #endif
-    dasm_put(Dst, 15559, Dt6(->asize), Dt6(->array), LJ_TNIL);
+    dasm_put(Dst, 15768, Dt6(->asize), Dt6(->array), LJ_TNIL);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 12232, LJ_TISNUM);
+      dasm_put(Dst, 12441, LJ_TISNUM);
     } else if (sse) {
-      dasm_put(Dst, 12325);
+      dasm_put(Dst, 12534);
     } else {
-      dasm_put(Dst, 15605);
+      dasm_put(Dst, 15814);
     }
-    dasm_put(Dst, 15611);
+    dasm_put(Dst, 15820);
     if (LJ_DUALNUM) {
     } else if (sse) {
-      dasm_put(Dst, 12197);
+      dasm_put(Dst, 12406);
     } else {
-      dasm_put(Dst, 12209);
+      dasm_put(Dst, 12418);
     }
-    dasm_put(Dst, 15630, -BCBIAS_J*4);
+    dasm_put(Dst, 15839, -BCBIAS_J*4);
     if (!LJ_DUALNUM && !sse) {
-      dasm_put(Dst, 15681);
+      dasm_put(Dst, 15890);
     }
-    dasm_put(Dst, 15687, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key.gcr), DtB(->key.it), DtB(->val.gcr), DtB(->val.it));
-    dasm_put(Dst, 15762);
+    dasm_put(Dst, 15896, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key.gcr), DtB(->key.it), DtB(->val.gcr), DtB(->val.it));
+    dasm_put(Dst, 15971);
     break;
 
   case BC_ISNEXT:
-    dasm_put(Dst, 15770, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
+    dasm_put(Dst, 15979, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC);
     break;
 
   case BC_VARG:
-    dasm_put(Dst, 15869, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
-    dasm_put(Dst, 16033, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 16078, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack));
+    dasm_put(Dst, 16242, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
     break;
 
   /* -- Returns ----------------------------------------------------------- */
 
   case BC_RETM:
-    dasm_put(Dst, 15245);
+    dasm_put(Dst, 15454);
     break;
 
   case BC_RET: case BC_RET0: case BC_RET1:
     if (op != BC_RET0) {
-      dasm_put(Dst, 16104);
+      dasm_put(Dst, 16313);
     }
-    dasm_put(Dst, 16108, FRAME_TYPE);
+    dasm_put(Dst, 16317, FRAME_TYPE);
     switch (op) {
     case BC_RET:
-      dasm_put(Dst, 16127);
+      dasm_put(Dst, 16336);
       break;
     case BC_RET1:
-      dasm_put(Dst, 16185);
+      dasm_put(Dst, 16394);
       /* fallthrough */
     case BC_RET0:
-      dasm_put(Dst, 16201);
+      dasm_put(Dst, 16410);
     default:
       break;
     }
-    dasm_put(Dst, 16212, Dt7(->pc), PC2PROTO(k));
+    dasm_put(Dst, 16421, Dt7(->pc), PC2PROTO(k));
     if (op == BC_RET) {
-      dasm_put(Dst, 16254, LJ_TNIL);
+      dasm_put(Dst, 16463, LJ_TNIL);
     } else {
-      dasm_put(Dst, 16263, LJ_TNIL);
+      dasm_put(Dst, 16472, LJ_TNIL);
     }
-    dasm_put(Dst, 16270, -FRAME_VARG, FRAME_TYPEP);
+    dasm_put(Dst, 16479, -FRAME_VARG, FRAME_TYPEP);
     if (op != BC_RET0) {
-      dasm_put(Dst, 16294);
+      dasm_put(Dst, 16503);
     }
-    dasm_put(Dst, 4928);
+    dasm_put(Dst, 4937);
     break;
 
   /* -- Loops and branches ------------------------------------------------ */
@@ -2932,7 +2967,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FORL:
 #if LJ_HASJIT
-    dasm_put(Dst, 16298, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 16507, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -2944,111 +2979,111 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
   case BC_FORI:
   case BC_IFORL:
     vk = (op == BC_IFORL || op == BC_JFORL);
-    dasm_put(Dst, 16319);
+    dasm_put(Dst, 16528);
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 16323, LJ_TISNUM);
+      dasm_put(Dst, 16532, LJ_TISNUM);
       if (!vk) {
-       dasm_put(Dst, 16333, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 16542, LJ_TISNUM, LJ_TISNUM);
       } else {
 #ifdef LUA_USE_ASSERT
-       dasm_put(Dst, 16362, LJ_TISNUM, LJ_TISNUM);
+       dasm_put(Dst, 16571, LJ_TISNUM, LJ_TISNUM);
 #endif
-       dasm_put(Dst, 16381);
+       dasm_put(Dst, 16590);
       }
-      dasm_put(Dst, 16400, LJ_TISNUM);
+      dasm_put(Dst, 16609, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 16411, -BCBIAS_J*4);
+       dasm_put(Dst, 16620, -BCBIAS_J*4);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 16425, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 16634, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 16443, -BCBIAS_J*4);
+       dasm_put(Dst, 16652, -BCBIAS_J*4);
       } else {
-       dasm_put(Dst, 16435, BC_JLOOP);
+       dasm_put(Dst, 16644, BC_JLOOP);
       }
-      dasm_put(Dst, 16457);
+      dasm_put(Dst, 16666);
       if (vk) {
-       dasm_put(Dst, 16480);
+       dasm_put(Dst, 16689);
       }
-      dasm_put(Dst, 16400, LJ_TISNUM);
+      dasm_put(Dst, 16609, LJ_TISNUM);
       if (op == BC_FORI) {
-       dasm_put(Dst, 16489);
+       dasm_put(Dst, 16698);
       } else if (op == BC_JFORI) {
-       dasm_put(Dst, 16494, -BCBIAS_J*4, BC_JLOOP);
+       dasm_put(Dst, 16703, -BCBIAS_J*4, BC_JLOOP);
       } else if (op == BC_IFORL) {
-       dasm_put(Dst, 16508);
+       dasm_put(Dst, 16717);
       } else {
-       dasm_put(Dst, 16504, BC_JLOOP);
+       dasm_put(Dst, 16713, BC_JLOOP);
       }
-      dasm_put(Dst, 16513);
+      dasm_put(Dst, 16722);
     } else if (!vk) {
-      dasm_put(Dst, 16520, LJ_TISNUM);
+      dasm_put(Dst, 16729, LJ_TISNUM);
     }
     if (!vk) {
-      dasm_put(Dst, 16526, LJ_TISNUM);
+      dasm_put(Dst, 16735, LJ_TISNUM);
     } else {
 #ifdef LUA_USE_ASSERT
-      dasm_put(Dst, 16540, LJ_TISNUM, LJ_TISNUM);
+      dasm_put(Dst, 16749, LJ_TISNUM, LJ_TISNUM);
 #endif
     }
-    dasm_put(Dst, 16559);
+    dasm_put(Dst, 16768);
     if (!vk) {
-      dasm_put(Dst, 16563, LJ_TISNUM);
+      dasm_put(Dst, 16772, LJ_TISNUM);
     }
     if (sse) {
-      dasm_put(Dst, 16572);
+      dasm_put(Dst, 16781);
       if (vk) {
-       dasm_put(Dst, 16584);
+       dasm_put(Dst, 16793);
       } else {
-       dasm_put(Dst, 16603);
+       dasm_put(Dst, 16812);
       }
-      dasm_put(Dst, 16608);
+      dasm_put(Dst, 16817);
     } else {
-      dasm_put(Dst, 16621);
+      dasm_put(Dst, 16830);
       if (vk) {
-       dasm_put(Dst, 16627);
+       dasm_put(Dst, 16836);
       } else {
-       dasm_put(Dst, 16643);
+       dasm_put(Dst, 16852);
       }
-      dasm_put(Dst, 16651);
+      dasm_put(Dst, 16860);
       if (cmov) {
-      dasm_put(Dst, 3944);
+      dasm_put(Dst, 3953);
       } else {
-      dasm_put(Dst, 3950);
+      dasm_put(Dst, 3959);
       }
       if (!cmov) {
-       dasm_put(Dst, 16656);
+       dasm_put(Dst, 16865);
       }
     }
     if (op == BC_FORI) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 16662);
+       dasm_put(Dst, 16871);
       } else {
-       dasm_put(Dst, 16667, -BCBIAS_J*4);
+       dasm_put(Dst, 16876, -BCBIAS_J*4);
       }
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 16677, -BCBIAS_J*4, BC_JLOOP);
+      dasm_put(Dst, 16886, -BCBIAS_J*4, BC_JLOOP);
     } else if (op == BC_IFORL) {
       if (LJ_DUALNUM) {
-       dasm_put(Dst, 16691);
+       dasm_put(Dst, 16900);
       } else {
-       dasm_put(Dst, 16696, -BCBIAS_J*4);
+       dasm_put(Dst, 16905, -BCBIAS_J*4);
       }
     } else {
-      dasm_put(Dst, 16687, BC_JLOOP);
+      dasm_put(Dst, 16896, BC_JLOOP);
     }
     if (LJ_DUALNUM) {
-      dasm_put(Dst, 11234);
+      dasm_put(Dst, 11448);
     } else {
-      dasm_put(Dst, 11975);
+      dasm_put(Dst, 12184);
     }
     if (sse) {
-      dasm_put(Dst, 16706);
+      dasm_put(Dst, 16915);
     }
     break;
 
   case BC_ITERL:
 #if LJ_HASJIT
-    dasm_put(Dst, 16298, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 16507, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
@@ -3057,33 +3092,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IITERL:
-    dasm_put(Dst, 16717, LJ_TNIL);
+    dasm_put(Dst, 16926, LJ_TNIL);
     if (op == BC_JITERL) {
-      dasm_put(Dst, 16732, BC_JLOOP);
+      dasm_put(Dst, 16941, BC_JLOOP);
     } else {
-      dasm_put(Dst, 16746, -BCBIAS_J*4);
+      dasm_put(Dst, 16955, -BCBIAS_J*4);
     }
-    dasm_put(Dst, 11335);
+    dasm_put(Dst, 11544);
     break;
 
   case BC_LOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 16298, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
+    dasm_put(Dst, 16507, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP);
 #endif
     break;
 
   case BC_ILOOP:
-    dasm_put(Dst, 11337);
+    dasm_put(Dst, 11546);
     break;
 
   case BC_JLOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 16762, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
+    dasm_put(Dst, 16971, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
 #endif
     break;
 
   case BC_JMP:
-    dasm_put(Dst, 16785, -BCBIAS_J*4);
+    dasm_put(Dst, 16994, -BCBIAS_J*4);
     break;
 
   /* -- Function headers -------------------------------------------------- */
@@ -3097,7 +3132,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
 
   case BC_FUNCF:
 #if LJ_HASJIT
-    dasm_put(Dst, 16809, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
+    dasm_put(Dst, 17018, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL);
 #endif
   case BC_FUNCV:  /* NYI: compiled vararg functions. */
     break;
@@ -3107,47 +3142,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
     break;
 #endif
   case BC_IFUNCF:
-    dasm_put(Dst, 16830, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
+    dasm_put(Dst, 17039, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams));
     if (op == BC_JFUNCF) {
-      dasm_put(Dst, 16860, BC_JLOOP);
+      dasm_put(Dst, 17069, BC_JLOOP);
     } else {
-      dasm_put(Dst, 11337);
+      dasm_put(Dst, 11546);
     }
-    dasm_put(Dst, 16869, LJ_TNIL);
+    dasm_put(Dst, 17078, LJ_TNIL);
     break;
 
   case BC_JFUNCV:
 #if !LJ_HASJIT
     break;
 #endif
-    dasm_put(Dst, 10436);
+    dasm_put(Dst, 10445);
     break;  /* NYI: compiled vararg functions. */
 
   case BC_IFUNCV:
-    dasm_put(Dst, 16891, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
+    dasm_put(Dst, 17100, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL);
     if (op == BC_JFUNCV) {
-      dasm_put(Dst, 16860, BC_JLOOP);
+      dasm_put(Dst, 17069, BC_JLOOP);
     } else {
-      dasm_put(Dst, 16982, -4+PC2PROTO(k));
+      dasm_put(Dst, 17191, -4+PC2PROTO(k));
     }
-    dasm_put(Dst, 17004, LJ_TNIL);
+    dasm_put(Dst, 17213, LJ_TNIL);
     break;
 
   case BC_FUNCC:
   case BC_FUNCCW:
-    dasm_put(Dst, 17026, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
+    dasm_put(Dst, 17235, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 17055);
+      dasm_put(Dst, 17264);
     } else {
-      dasm_put(Dst, 17059);
+      dasm_put(Dst, 17268);
     }
-    dasm_put(Dst, 17067, DISPATCH_GL(vmstate), ~LJ_VMST_C);
+    dasm_put(Dst, 17276, DISPATCH_GL(vmstate), ~LJ_VMST_C);
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 17076);
+      dasm_put(Dst, 17285);
     } else {
-      dasm_put(Dst, 17080, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 17289, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 17085, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 17294, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
     break;
 
   /* ---------------------------------------------------------------------- */
@@ -3175,7 +3210,7 @@ static int build_backend(BuildCtx *ctx)
 
   build_subroutines(ctx, cmov, sse);
 
-  dasm_put(Dst, 17110);
+  dasm_put(Dst, 17319);
   for (op = 0; op < BC__MAX; op++)
     build_ins(ctx, (BCOp)op, op, cmov, sse);
 
index af5001188c978c6c5c23b57897413e670a478abc..850805e6e657fb56ce99b35faa2cc1a6f8a2d329 100644 (file)
@@ -27,6 +27,7 @@
 #include "lj_cconv.h"
 #include "lj_carith.h"
 #include "lj_ccall.h"
+#include "lj_ccallback.h"
 #include "lj_clib.h"
 #include "lj_ff.h"
 #include "lj_lib.h"
@@ -384,6 +385,50 @@ LJLIB_CF(ffi_clib___gc)
 
 #include "lj_libdef.h"
 
+/* -- Callback function metamethods --------------------------------------- */
+
+#define LJLIB_MODULE_ffi_callback
+
+static int ffi_callback_set(lua_State *L, GCfunc *fn)
+{
+  GCcdata *cd = ffi_checkcdata(L, 1);
+  CTState *cts = ctype_cts(L);
+  CType *ct = ctype_raw(cts, cd->typeid);
+  if (ctype_isptr(ct->info) && (LJ_32 || ct->size == 8)) {
+    MSize slot = lj_ccallback_ptr2slot(cts, *(void **)cdataptr(cd));
+    if (slot < cts->cb.sizeid && cts->cb.cbid[slot] != 0) {
+      GCtab *t = cts->miscmap;
+      TValue *tv = lj_tab_setint(L, t, (int32_t)slot);
+      if (fn) {
+       setfuncV(L, tv, fn);
+       lj_gc_anybarriert(L, t);
+      } else {
+       setnilV(tv);
+       cts->cb.cbid[slot] = 0;
+       cts->cb.topid = slot < cts->cb.topid ? slot : cts->cb.topid;
+      }
+      return 0;
+    }
+  }
+  lj_err_caller(L, LJ_ERR_FFI_BADCBACK);
+  return 0;
+}
+
+LJLIB_CF(ffi_callback_free)
+{
+  return ffi_callback_set(L, NULL);
+}
+
+LJLIB_CF(ffi_callback_set)
+{
+  GCfunc *fn = lj_lib_checkfunc(L, 2);
+  return ffi_callback_set(L, fn);
+}
+
+LJLIB_PUSH(top-1) LJLIB_SET(__index)
+
+#include "lj_libdef.h"
+
 /* -- FFI library functions ----------------------------------------------- */
 
 #define LJLIB_MODULE_ffi
@@ -428,7 +473,7 @@ LJLIB_CF(ffi_new)   LJLIB_REC(.)
                   o, (MSize)(L->top - o));  /* Initialize cdata. */
   if (ctype_isstruct(ct->info)) {
     /* Handle ctype __gc metamethod. Use the fast lookup here. */
-    cTValue *tv = lj_tab_getint(cts->metatype, (int32_t)id);
+    cTValue *tv = lj_tab_getinth(cts->miscmap, -(int32_t)id);
     if (tv && tvistab(tv) && (tv = lj_meta_fast(L, tabV(tv), MM_gc))) {
       GCtab *t = cts->finalizer;
       if (gcref(t->metatable)) {
@@ -650,21 +695,21 @@ LJLIB_CF(ffi_abi) LJLIB_REC(.)
 
 #undef H_
 
-LJLIB_PUSH(top-8) LJLIB_SET(!)  /* Store reference to metatype table. */
+LJLIB_PUSH(top-8) LJLIB_SET(!)  /* Store reference to miscmap table. */
 
 LJLIB_CF(ffi_metatype)
 {
   CTState *cts = ctype_cts(L);
   CTypeID id = ffi_checkctype(L, cts);
   GCtab *mt = lj_lib_checktab(L, 2);
-  GCtab *t = cts->metatype;
+  GCtab *t = cts->miscmap;
   CType *ct = ctype_get(cts, id);  /* Only allow raw types. */
   TValue *tv;
   GCcdata *cd;
   if (!(ctype_isstruct(ct->info) || ctype_iscomplex(ct->info) ||
        ctype_isvector(ct->info)))
     lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE);
-  tv = lj_tab_setint(L, t, (int32_t)id);
+  tv = lj_tab_setinth(L, t, -(int32_t)id);
   if (!tvisnil(tv))
     lj_err_caller(L, LJ_ERR_PROTMT);
   settabV(L, tv, mt);
@@ -745,12 +790,16 @@ static void ffi_register_module(lua_State *L)
 LUALIB_API int luaopen_ffi(lua_State *L)
 {
   CTState *cts = lj_ctype_init(L);
-  settabV(L, L->top++, (cts->metatype = lj_tab_new(L, 0, 0)));
+  settabV(L, L->top++, (cts->miscmap = lj_tab_new(L, 0, 1)));
   cts->finalizer = ffi_finalizer(L);
   LJ_LIB_REG(L, NULL, ffi_meta);
   /* NOBARRIER: basemt is a GC root. */
   setgcref(basemt_it(G(L), LJ_TCDATA), obj2gco(tabV(L->top-1)));
   LJ_LIB_REG(L, NULL, ffi_clib);
+  LJ_LIB_REG(L, NULL, ffi_callback);
+  /* NOBARRIER: the key is new and lj_tab_newkey() handles the barrier. */
+  settabV(L, lj_tab_setstr(L, cts->miscmap, &cts->g->strempty), tabV(L->top-1));
+  L->top--;
   lj_clib_default(L, tabV(L->top-1));  /* Create ffi.C default namespace. */
   lua_pushliteral(L, LJ_OS_NAME);
   lua_pushliteral(L, LJ_ARCH_NAME);
index c1c04b6ff51c732f477512d225cd3784e099ad5f..5ed1bf5b2f88f9f9a77fc6bd50275e149d849dce 100644 (file)
@@ -10,6 +10,7 @@
 #include "lj_gc.h"
 #include "lj_err.h"
 #include "lj_str.h"
+#include "lj_tab.h"
 #include "lj_ctype.h"
 #include "lj_cconv.h"
 #include "lj_cdata.h"
   }
 
 #else
-#error "missing calling convention definitions for this architecture"
+#error "Missing calling convention definitions for this architecture"
 #endif
 
 #ifndef CCALL_HANDLE_STRUCTRET2
@@ -649,7 +650,13 @@ int lj_ccall_func(lua_State *L, GCcdata *cd)
     int gcsteps, ret;
     cc.func = (void (*)(void))cdata_getptr(cdataptr(cd), sz);
     gcsteps = ccall_set_args(L, cts, ct, &cc);
+    cts->cb.slot = ~0u;
     lj_vm_ffi_call(&cc);
+    if (cts->cb.slot != ~0u) {  /* Blacklist function that called a callback. */
+      TValue tv;
+      setlightudV(&tv, (void *)cc.func);
+      setboolV(lj_tab_set(L, cts->miscmap, &tv), 1);
+    }
     gcsteps += ccall_get_results(L, cts, ct, &cc, &ret);
 #if LJ_TARGET_X86 && LJ_ABI_WIN
     /* Automatically detect __stdcall and fix up C function declaration. */
index 14f61924a316a1b688f6163eb50d0f19442a408f..0641625f3395ea0ec235a56ae22d030af150edf1 100644 (file)
@@ -81,7 +81,7 @@ typedef double FPRArg;
 typedef intptr_t GPRArg;
 
 #else
-#error "missing calling convention definitions for this architecture"
+#error "Missing calling convention definitions for this architecture"
 #endif
 
 #ifndef CCALL_SPS_EXTRA
@@ -99,6 +99,10 @@ typedef intptr_t GPRArg;
 #define CCALL_NUM_FPR \
   (CCALL_NARG_FPR > CCALL_NRET_FPR ? CCALL_NARG_FPR : CCALL_NRET_FPR)
 
+/* Check against constants in lj_ctype.h. */
+LJ_STATIC_ASSERT(CCALL_NUM_GPR <= CCALL_MAX_GPR);
+LJ_STATIC_ASSERT(CCALL_NUM_FPR <= CCALL_MAX_FPR);
+
 #define CCALL_MAXSTACK         32
 
 /* -- C call state -------------------------------------------------------- */
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
new file mode 100644 (file)
index 0000000..8aab7f3
--- /dev/null
@@ -0,0 +1,461 @@
+/*
+** FFI C callback handling.
+** Copyright (C) 2005-2011 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#include "lj_obj.h"
+
+#if LJ_HASFFI
+
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_tab.h"
+#include "lj_state.h"
+#include "lj_frame.h"
+#include "lj_ctype.h"
+#include "lj_cconv.h"
+#include "lj_ccall.h"
+#include "lj_ccallback.h"
+#include "lj_target.h"
+#include "lj_vm.h"
+
+/* -- Target-specific handling of callback slots -------------------------- */
+
+#define CALLBACK_MCODE_SIZE    (LJ_PAGESIZE * LJ_NUM_CBPAGE)
+
+#if LJ_TARGET_X86ORX64
+
+#define CALLBACK_MCODE_HEAD    (LJ_64 ? 8 : 0)
+#define CALLBACK_MCODE_GROUP   (-2+1+2+5+(LJ_64 ? 6 : 5))
+
+#define CALLBACK_SLOT2OFS(slot) \
+  (CALLBACK_MCODE_HEAD + CALLBACK_MCODE_GROUP*((slot)/32) + 4*(slot))
+
+static MSize CALLBACK_OFS2SLOT(MSize ofs)
+{
+  MSize group;
+  ofs -= CALLBACK_MCODE_HEAD;
+  group = ofs / (32*4 + CALLBACK_MCODE_GROUP);
+  return (ofs % (32*4 + CALLBACK_MCODE_GROUP))/4 + group*32;
+}
+
+#define CALLBACK_MAX_SLOT \
+  (((CALLBACK_MCODE_SIZE-CALLBACK_MCODE_HEAD)/(CALLBACK_MCODE_GROUP+4*32))*32)
+
+#else
+
+/* Missing support for this architecture. */
+#define CALLBACK_SLOT2OFS(slot)        (0*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (0*(ofs))
+#define CALLBACK_MAX_SLOT      0
+
+#endif
+
+/* Convert callback slot number to callback function pointer. */
+static void *callback_slot2ptr(CTState *cts, MSize slot)
+{
+  return (uint8_t *)cts->cb.mcode + CALLBACK_SLOT2OFS(slot);
+}
+
+/* Convert callback function pointer to slot number. */
+MSize lj_ccallback_ptr2slot(CTState *cts, void *p)
+{
+  uintptr_t ofs = (uintptr_t)((uint8_t *)p -(uint8_t *)cts->cb.mcode);
+  if (ofs < CALLBACK_MCODE_SIZE) {
+    MSize slot = CALLBACK_OFS2SLOT((MSize)ofs);
+    if (CALLBACK_SLOT2OFS(slot) == (MSize)ofs)
+      return slot;
+  }
+  return ~0u;  /* Not a known callback function pointer. */
+}
+
+#if LJ_TARGET_X86ORX64
+/* Initialize machine code for callback function pointers. */
+static void callback_mcode_init(global_State *g, uint8_t *page)
+{
+  uint8_t *p = page;
+  uint8_t *target = (uint8_t *)(void *)lj_vm_ffi_callback;
+  MSize slot;
+#if LJ_64
+  *(void **)p = target; p += 8;
+#endif
+  for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) {
+    /* mov al, slot; jmp group */
+    *p++ = XI_MOVrib | RID_EAX; *p++ = (uint8_t)slot;
+    if ((slot & 31) == 31 || slot == CALLBACK_MAX_SLOT-1) {
+      /* push ebp/rbp; mov ah, slot>>8; mov ebp, &g. */
+      *p++ = XI_PUSH + RID_EBP;
+      *p++ = XI_MOVrib | (RID_EAX+4); *p++ = (uint8_t)(slot >> 8);
+      *p++ = XI_MOVri | RID_EBP;
+      *(int32_t *)p = i32ptr(g); p += 4;
+#if LJ_64
+      /* jmp [rip-pageofs] where lj_vm_ffi_callback is stored. */
+      *p++ = XI_GROUP5; *p++ = XM_OFS0 + (XOg_JMP<<3) + RID_EBP;
+      *(int32_t *)p = (int32_t)(page-(p+4)); p += 4;
+#else
+      /* jmp lj_vm_ffi_callback. */
+      *p++ = XI_JMP; *(int32_t *)p = target-(p+4); p += 4;
+#endif
+    } else {
+      *p++ = XI_JMPs; *p++ = (uint8_t)((2+2)*(31-(slot&31)) - 2);
+    }
+  }
+  lua_assert(p - page <= CALLBACK_MCODE_SIZE);
+}
+#else
+/* Missing support for this architecture. */
+#define callback_mcode_init(g, p)      UNUSED(p)
+#endif
+
+/* -- Machine code management --------------------------------------------- */
+
+#if LJ_TARGET_WINDOWS
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#elif LJ_TARGET_POSIX
+
+#include <sys/mman.h>
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS   MAP_ANON
+#endif
+
+#endif
+
+/* Allocate and initialize area for callback function pointers. */
+static void callback_mcode_new(CTState *cts)
+{
+  size_t sz = (size_t)CALLBACK_MCODE_SIZE;
+  void *p;
+  if (CALLBACK_MAX_SLOT == 0)
+    lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
+#if LJ_TARGET_WINDOWS
+  p = VirtualAlloc(NULL, sz, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+  if (!p)
+    lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
+#elif LJ_TARGET_POSIX
+  p = mmap(NULL, sz, (PROT_READ|PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS,
+          -1, 0);
+  if (p == MAP_FAILED)
+    lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
+#else
+  /* Fallback allocator. Fails if memory is not executable by default. */
+  p = lj_mem_new(cts->L, sz);
+#endif
+  cts->cb.mcode = p;
+  callback_mcode_init(cts->g, p);
+#if LJ_TARGET_WINDOWS
+  {
+    DWORD oprot;
+    VirtualProtect(p, sz, PAGE_EXECUTE_READ, &oprot);
+  }
+#elif LJ_TARGET_POSIX
+  mprotect(p, sz, (PROT_READ|PROT_EXEC));
+#endif
+}
+
+/* Free area for callback function pointers. */
+void lj_ccallback_mcode_free(CTState *cts)
+{
+  size_t sz = (size_t)CALLBACK_MCODE_SIZE;
+  void *p = cts->cb.mcode;
+  if (p == NULL) return;
+#if LJ_TARGET_WINDOWS
+  VirtualFree(p, 0, MEM_RELEASE);
+  UNUSED(sz);
+#elif LJ_TARGET_POSIX
+  munmap(p, sz);
+#else
+  lj_mem_free(cts->g, p, sz);
+#endif
+}
+
+/* -- C callback entry ---------------------------------------------------- */
+
+/* Target-specific handling of register arguments. Similar to lj_ccall.c. */
+#if LJ_TARGET_X86
+
+#define CALLBACK_HANDLE_REGARG \
+  if (!isfp) {  /* Only non-FP values may be passed in registers. */ \
+    if (n > 1) {  /* Anything > 32 bit is passed on the stack. */ \
+      if (!LJ_ABI_WIN) ngpr = maxgpr;  /* Prevent reordering. */ \
+    } else if (ngpr + 1 <= maxgpr) { \
+      sp = &cts->cb.gpr[ngpr]; \
+      ngpr += n; \
+      goto done; \
+    } \
+  }
+
+#elif LJ_TARGET_X64 && LJ_ABI_WIN
+
+/* Windows/x64 argument registers are strictly positional (use ngpr). */
+#define CALLBACK_HANDLE_REGARG \
+  if (isfp) { \
+    if (ngpr < 4) { sp = &cts->cb.fpr[ngpr++]; nfpr = ngpr; goto done; } \
+  } else { \
+    if (ngpr < 4) { sp = &cts->cb.gpr[ngpr++]; goto done; } \
+  }
+
+#elif LJ_TARGET_X64
+
+#define CALLBACK_HANDLE_REGARG \
+  if (isfp) { \
+    if (nfpr + n <= CCALL_NARG_FPR) { \
+      sp = &cts->cb.fpr[nfpr]; \
+      nfpr += n; \
+      goto done; \
+    } \
+  } else { \
+    if (ngpr + n <= maxgpr) { \
+      sp = &cts->cb.gpr[ngpr]; \
+      ngpr += n; \
+      goto done; \
+    } \
+  }
+
+#elif LJ_TARGET_ARM
+
+#define CALLBACK_HANDLE_REGARG \
+  UNUSED(ngpr); UNUSED(maxgpr); goto done;  /* NYI */
+
+#elif LJ_TARGET_PPC
+
+#define CALLBACK_HANDLE_REGARG \
+  UNUSED(ngpr); UNUSED(nfpr); UNUSED(maxgpr); goto done;  /* NYI */
+#define CALLBACK_HANDLE_RET            /* NYI */
+
+#else
+#error "Missing calling convention definitions for this architecture"
+#endif
+
+/* Convert and push callback arguments to Lua stack. */
+static void callback_conv_args(CTState *cts, lua_State *L)
+{
+  TValue *o = L->top;
+  intptr_t *stack = cts->cb.stack;
+  MSize slot = cts->cb.slot;
+  CTypeID id = 0, rid, fid;
+  CType *ct;
+  GCfunc *fn;
+  MSize ngpr = 0, nsp = 0, maxgpr = CCALL_NARG_GPR;
+#if CCALL_NARG_FPR
+  MSize nfpr = 0;
+#endif
+
+  if (slot < cts->cb.sizeid && (id = cts->cb.cbid[slot]) != 0) {
+    ct = ctype_get(cts, id);
+    rid = ctype_cid(ct->info);
+    fn = funcV(lj_tab_getint(cts->miscmap, (int32_t)slot));
+  } else {  /* Must set up frame first, before throwing the error. */
+    ct = NULL;
+    rid = 0;
+    fn = (GCfunc *)L;
+  }
+  o->u32.lo = LJ_CONT_FFI_CALLBACK;  /* Continuation returns from callback. */
+  o->u32.hi = rid;  /* Return type. x86: +(spadj<<16). */
+  o++;
+  setframe_gc(o, obj2gco(fn));
+  setframe_ftsz(o, (int)((char *)(o+1) - (char *)L->base) + FRAME_CONT);
+  L->top = L->base = ++o;
+  if (!ct)
+    lj_err_caller(cts->L, LJ_ERR_FFI_BADCBACK);
+  if (isluafunc(fn))
+    setcframe_pc(L->cframe, proto_bc(funcproto(fn))+1);
+  lj_state_checkstack(L, LUA_MINSTACK);  /* May throw. */
+  o = L->base;  /* Might have been reallocated. */
+
+#if LJ_TARGET_X86
+  /* x86 has several different calling conventions. */
+  switch (ctype_cconv(ct->info)) {
+  case CTCC_FASTCALL: maxgpr = 2; break;
+  case CTCC_THISCALL: maxgpr = 1; break;
+  default: maxgpr = 0; break;
+  }
+#endif
+
+  fid = ct->sib;
+  while (fid) {
+    CType *ctf = ctype_get(cts, fid);
+    if (!ctype_isattrib(ctf->info)) {
+      CType *cta;
+      void *sp;
+      CTSize sz;
+      int isfp;
+      MSize n;
+      lua_assert(ctype_isfield(ctf->info));
+      cta = ctype_rawchild(cts, ctf);
+      if (ctype_isenum(cta->info)) cta = ctype_child(cts, cta);
+      isfp = ctype_isfp(cta->info);
+      sz = (cta->size + CTSIZE_PTR-1) & ~(CTSIZE_PTR-1);
+      n = sz / CTSIZE_PTR;  /* Number of GPRs or stack slots needed. */
+
+      CALLBACK_HANDLE_REGARG  /* Handle register arguments. */
+
+      /* Otherwise pass argument on stack. */
+      if (CCALL_ALIGN_STACKARG && LJ_32 && sz == 8)
+       nsp = (nsp + 1) & ~1u;  /* Align 64 bit argument on stack. */
+      sp = &stack[nsp];
+      nsp += n;
+
+    done:
+      if (LJ_BE && cta->size < CTSIZE_PTR)
+       sp = (void *)((uint8_t *)sp + CTSIZE_PTR-cta->size);
+      lj_cconv_tv_ct(cts, cta, 0, o++, sp);
+    }
+    fid = ctf->sib;
+  }
+  L->top = o;
+#if LJ_TARGET_X86
+  /* Store stack adjustment for returns from fastcall/stdcall callbacks. */
+  switch (ctype_cconv(ct->info)) {
+  case CTCC_FASTCALL: case CTCC_STDCALL:
+    (L->base-2)->u32.hi |= (nsp << (16+2));
+    break;
+  }
+#endif
+}
+
+/* Convert Lua object to callback result. */
+static void callback_conv_result(CTState *cts, lua_State *L, TValue *o)
+{
+  CType *ctr = ctype_raw(cts, (uint16_t)(L->base-2)->u32.hi);
+#if LJ_TARGET_X86
+  cts->cb.gpr[2] = 0;
+#endif
+  if (!ctype_isvoid(ctr->info)) {
+    uint8_t *dp = (uint8_t *)&cts->cb.gpr[0];
+#ifdef CALLBACK_HANDLE_RET
+    CALLBACK_HANDLE_RET
+#endif
+#if CCALL_NUM_FPR
+    if (ctype_isfp(ctr->info))
+      dp = (uint8_t *)&cts->cb.fpr[0];
+#endif
+    lj_cconv_ct_tv(cts, ctr, dp, o, 0);
+    /* Extend returned integers to (at least) 32 bits. */
+    if (ctype_isinteger_or_bool(ctr->info) && ctr->size < 4) {
+      if (ctr->info & CTF_UNSIGNED)
+       *(uint32_t *)dp = ctr->size == 1 ? (uint32_t)*(uint8_t *)dp :
+                                          (uint32_t)*(uint16_t *)dp;
+      else
+       *(int32_t *)dp = ctr->size == 1 ? (int32_t)*(int8_t *)dp :
+                                         (int32_t)*(int16_t *)dp;
+    }
+#if LJ_TARGET_X86
+    if (ctype_isfp(ctr->info))
+      cts->cb.gpr[2] = ctr->size == sizeof(float) ? 1 : 2;
+#endif
+  }
+}
+
+/* Enter callback. */
+lua_State * LJ_FASTCALL lj_ccallback_enter(CTState *cts, void *cf)
+{
+  lua_State *L = cts->L;
+  lua_assert(L != NULL);
+  if (gcref(cts->g->jit_L))
+    lj_err_caller(gco2th(gcref(cts->g->jit_L)), LJ_ERR_FFI_BADCBACK);
+  /* Setup C frame. */
+  cframe_prev(cf) = L->cframe;
+  setcframe_L(cf, L);
+  cframe_errfunc(cf) = -1;
+  cframe_nres(cf) = 0;
+  L->cframe = cf;
+  callback_conv_args(cts, L);
+  return L;  /* Now call the function on this stack. */
+}
+
+/* Leave callback. */
+void LJ_FASTCALL lj_ccallback_leave(CTState *cts, TValue *o)
+{
+  lua_State *L = cts->L;
+  GCfunc *fn;
+  TValue *obase = L->base;
+  L->base = L->top;  /* Keep continuation frame for throwing errors. */
+  /* PC of RET* is lost. Point to last line for result conv. errors. */
+  fn = curr_func(L);
+  if (isluafunc(fn)) {
+    GCproto *pt = funcproto(fn);
+    setcframe_pc(L->cframe, proto_bc(pt)+pt->sizebc);
+  }
+  callback_conv_result(cts, L, o);
+  /* Finally drop C frame and continuation frame. */
+  L->cframe = cframe_prev(L->cframe);
+  L->top -= 2;
+  L->base = obase;
+}
+
+/* -- C callback management ----------------------------------------------- */
+
+/* Get an unused slot in the callback slot table. */
+static MSize callback_slot_new(CTState *cts, CType *ct)
+{
+  CTypeID id = ctype_typeid(cts, ct);
+  CTypeID1 *cbid = cts->cb.cbid;
+  MSize top;
+  for (top = cts->cb.topid; top < cts->cb.sizeid; top++)
+    if (LJ_LIKELY(cbid[top] == 0))
+      goto found;
+#if CALLBACK_MAX_SLOT
+  if (top >= CALLBACK_MAX_SLOT)
+#endif
+    lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
+  if (!cts->cb.mcode)
+    callback_mcode_new(cts);
+  lj_mem_growvec(cts->L, cbid, cts->cb.sizeid, CALLBACK_MAX_SLOT, CTypeID1);
+  cts->cb.cbid = cbid;
+  memset(cbid+top, 0, (cts->cb.sizeid-top)*sizeof(CTypeID1));
+found:
+  cbid[top] = id;
+  cts->cb.topid = top+1;
+  return top;
+}
+
+/* Check for function pointer and supported argument/result types. */
+static CType *callback_checkfunc(CTState *cts, CType *ct)
+{
+  int narg = 0;
+  if (!ctype_isptr(ct->info) || (LJ_64 && ct->size != CTSIZE_PTR))
+    return NULL;
+  ct = ctype_rawchild(cts, ct);
+  if (ctype_isfunc(ct->info)) {
+    CType *ctr = ctype_rawchild(cts, ct);
+    CTypeID fid = ct->sib;
+    if (!(ctype_isvoid(ctr->info) || ctype_isenum(ctr->info) ||
+         ctype_isptr(ctr->info) || (ctype_isnum(ctr->info) && ctr->size <= 8)))
+      return NULL;
+    if ((ct->info & CTF_VARARG))
+      return NULL;
+    while (fid) {
+      CType *ctf = ctype_get(cts, fid);
+      if (!ctype_isattrib(ctf->info)) {
+       CType *cta;
+       lua_assert(ctype_isfield(ctf->info));
+       cta = ctype_rawchild(cts, ctf);
+       if (!(ctype_isenum(cta->info) || ctype_isptr(cta->info) ||
+             (ctype_isnum(cta->info) && cta->size <= 8)) ||
+           ++narg >= LUA_MINSTACK-3)
+         return NULL;
+      }
+      fid = ctf->sib;
+    }
+    return ct;
+  }
+  return NULL;
+}
+
+/* Create a new callback and return the callback function pointer. */
+void *lj_ccallback_new(CTState *cts, CType *ct, GCfunc *fn)
+{
+  ct = callback_checkfunc(cts, ct);
+  if (ct) {
+    MSize slot = callback_slot_new(cts, ct);
+    GCtab *t = cts->miscmap;
+    setfuncV(cts->L, lj_tab_setint(cts->L, t, (int32_t)slot), fn);
+    return callback_slot2ptr(cts, slot);
+  }
+  return NULL;  /* Bad conversion. */
+}
+
+#endif
diff --git a/src/lj_ccallback.h b/src/lj_ccallback.h
new file mode 100644 (file)
index 0000000..cbdc1e8
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+** FFI C callback handling.
+** Copyright (C) 2005-2011 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_CCALLBACK_H
+#define _LJ_CCALLBACK_H
+
+#include "lj_obj.h"
+#include "lj_ctype.h"
+
+#if LJ_HASFFI
+
+/* Really belongs to lj_vm.h. */
+LJ_ASMF void lj_vm_ffi_callback(void);
+
+LJ_FUNC MSize lj_ccallback_ptr2slot(CTState *cts, void *p);
+LJ_FUNCA lua_State * LJ_FASTCALL lj_ccallback_enter(CTState *cts, void *cf);
+LJ_FUNCA void LJ_FASTCALL lj_ccallback_leave(CTState *cts, TValue *o);
+LJ_FUNC void *lj_ccallback_new(CTState *cts, CType *ct, GCfunc *fn);
+LJ_FUNC void lj_ccallback_mcode_free(CTState *cts);
+
+#endif
+
+#endif
index 884edef1a6429f2146d7892c2ca7d06f7c3dea04..d73984f473d2c0e3dd867e066f92530131d58229 100644 (file)
@@ -12,6 +12,7 @@
 #include "lj_ctype.h"
 #include "lj_cdata.h"
 #include "lj_cconv.h"
+#include "lj_ccallback.h"
 
 /* -- Conversion errors --------------------------------------------------- */
 
@@ -603,6 +604,13 @@ void lj_cconv_ct_tv(CTState *cts, CType *d,
     tmpptr = uddata(udataV(o));
   } else if (tvislightud(o)) {
     tmpptr = lightudV(o);
+  } else if (tvisfunc(o)) {
+    void *p = lj_ccallback_new(cts, d, funcV(o));
+    if (p) {
+      *(void **)dp = p;
+      return;
+    }
+    goto err_conv;
   } else {
   err_conv:
     cconv_err_convtv(cts, d, o, flags);
index 2c63e8a64cbea1dd202b0c0bb56450c36c0f9ba4..9457b5192c64f07f658c5b733c2078fd32fe78e1 100644 (file)
@@ -15,6 +15,7 @@
 #include "lj_tab.h"
 #include "lj_frame.h"
 #include "lj_ctype.h"
+#include "lj_cdata.h"
 #include "lj_cparse.h"
 #include "lj_cconv.h"
 #include "lj_clib.h"
@@ -785,7 +786,7 @@ static TRef crec_call_args(jit_State *J, RecordFFData *rd,
       did = ctype_cid(ctf->info);
     } else {
       if (!(ct->info & CTF_VARARG))
-        lj_trace_err(J, LJ_TRERR_NYICALL);  /* Too many arguments. */
+       lj_trace_err(J, LJ_TRERR_NYICALL);  /* Too many arguments. */
       did = lj_ccall_ctid_vararg(cts, o);  /* Infer vararg type. */
     }
     d = ctype_raw(cts, did);
@@ -853,6 +854,12 @@ static int crec_call(jit_State *J, RecordFFData *rd, GCcdata *cd)
     CType *ctr = ctype_rawchild(cts, ct);
     IRType t = crec_ct2irt(ctr);
     TRef tr;
+    TValue tv;
+    /* Check for blacklisted C functions that might call a callback. */
+    setlightudV(&tv,
+               cdata_getptr(cdataptr(cd), (LJ_64 && tp == IRT_P64) ? 8 : 4));
+    if (tvistrue(lj_tab_get(J->L, cts->miscmap, &tv)))
+      lj_trace_err(J, LJ_TRERR_BLACKL);
     if (ctype_isvoid(ctr->info)) {
       t = IRT_NIL;
       rd->nres = 0;
index 85e9a0ba33f5fc3409754dd13ccc321ff4a9807b..7187d6ff6dac3796990cda835ce81cbd28e38e98 100644 (file)
@@ -12,6 +12,7 @@
 #include "lj_str.h"
 #include "lj_tab.h"
 #include "lj_ctype.h"
+#include "lj_ccallback.h"
 
 /* -- C type definitions -------------------------------------------------- */
 
@@ -315,7 +316,11 @@ cTValue *lj_ctype_meta(CTState *cts, CTypeID id, MMS mm)
     id = ctype_cid(ct->info);
     ct = ctype_get(cts, id);
   }
-  tv = lj_tab_getint(cts->metatype, (int32_t)id);
+  if (ctype_isptr(ct->info) &&
+      ctype_isfunc(ctype_get(cts, ctype_cid(ct->info))->info))
+    tv = lj_tab_getstr(cts->miscmap, &cts->g->strempty);
+  else
+    tv = lj_tab_getinth(cts->miscmap, -(int32_t)id);
   if (tv && tvistab(tv) &&
       (tv = lj_tab_getstr(tabV(tv), mmname_str(cts->g, mm))) && !tvisnil(tv))
     return tv;
@@ -592,7 +597,9 @@ void lj_ctype_freestate(global_State *g)
 {
   CTState *cts = ctype_ctsG(g);
   if (cts) {
+    lj_ccallback_mcode_free(cts);
     lj_mem_freevec(g, cts->tab, cts->sizetab, CType);
+    lj_mem_freevec(g, cts->cb.cbid, cts->cb.sizeid, CTypeID1);
     lj_mem_freet(g, cts);
   }
 }
index 49f28108d60b85ebe03c891e10a758b041541afe..da3138513c0b73ab21f75a367e5c24f02e42a61f 100644 (file)
@@ -151,6 +151,25 @@ typedef struct CType {
 #define CTHASH_SIZE    128     /* Number of hash anchors. */
 #define CTHASH_MASK    (CTHASH_SIZE-1)
 
+/* Simplify target-specific configuration. Checked in lj_ccall.h. */
+#define CCALL_MAX_GPR          8
+#define CCALL_MAX_FPR          8
+
+typedef LJ_ALIGN(8) union FPRCBArg { double d; float f; } FPRCBArg;
+
+/* C callback state. Defined here, to avoid dragging in lj_ccall.h. */
+
+typedef LJ_ALIGN(8) struct CCallback {
+  FPRCBArg fpr[CCALL_MAX_FPR]; /* Arguments/results in FPRs. */
+  intptr_t gpr[CCALL_MAX_GPR]; /* Arguments/results in GPRs. */
+  intptr_t *stack;             /* Pointer to arguments on stack. */
+  void *mcode;                 /* Machine code for callback func. pointers. */
+  CTypeID1 *cbid;              /* Callback type table. */
+  MSize sizeid;                        /* Size of callback type table. */
+  MSize topid;                 /* Highest unused callback type table slot. */
+  MSize slot;                  /* Current callback slot. */
+} CCallback;
+
 /* C type state. */
 typedef struct CTState {
   CType *tab;          /* C type table. */
@@ -159,7 +178,8 @@ typedef struct CTState {
   lua_State *L;                /* Lua state (needed for errors and allocations). */
   global_State *g;     /* Global state. */
   GCtab *finalizer;    /* Map of cdata to finalizer. */
-  GCtab *metatype;     /* Map of CTypeID to metatable. */
+  GCtab *miscmap;      /* Map of -CTypeID to metatable and cb slot to func. */
+  CCallback cb;                /* Temporary callback state. */
   CTypeID1 hash[CTHASH_SIZE];  /* Hash anchors for C type table. */
 } CTState;
 
index 699fca28c286096e48981abd18db80338e7e0c54..4038e2098a22565bb8223594b17dfffc109c79f1 100644 (file)
@@ -107,6 +107,7 @@ BCLine LJ_FASTCALL lj_debug_line(GCproto *pt, BCPos pc)
   const void *lineinfo = proto_lineinfo(pt);
   if (pc < pt->sizebc && lineinfo) {
     BCLine first = pt->firstline;
+    if (pc == pt->sizebc-1) return first + pt->numline;
     if (pc-- == 0) return first;
     if (pt->numline < 256)
       return first + (BCLine)((const uint8_t *)lineinfo)[pc];
@@ -124,7 +125,7 @@ static BCLine debug_frameline(lua_State *L, GCfunc *fn, cTValue *nextframe)
   BCPos pc = debug_framepc(L, fn, nextframe);
   if (pc != NO_BCPOS) {
     GCproto *pt = funcproto(fn);
-    lua_assert(pc < pt->sizebc);
+    lua_assert(pc <= pt->sizebc);
     return lj_debug_line(pt, pc);
   }
   return -1;
index dadb8c0a6ca26a60e07915a2613af97cd2602c22..5d21d584b862570c209336c6a3e466f67957b821 100644 (file)
@@ -67,6 +67,8 @@ typedef unsigned int uintptr_t;
 #define LJ_MAX_IDXCHAIN        100             /* __index/__newindex chain limit. */
 #define LJ_STACK_EXTRA 5               /* Extra stack space (metamethods). */
 
+#define LJ_NUM_CBPAGE  1               /* Number of FFI callback pages. */
+
 /* Minimum table/buffer sizes. */
 #define LJ_MIN_GLOBAL  6               /* Min. global table size (hbits). */
 #define LJ_MIN_REGISTRY        2               /* Min. registry size (hbits). */
index 406c833dcb2e551b91ca56d7a4cbdfc4425c148c..b0f3e5c7e4c3cdd92bdacbf9863ca7e3deeb45d5 100644 (file)
@@ -113,6 +113,9 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode)
       frame = frame_prevl(frame);
       break;
     case FRAME_C:  /* C frame. */
+#if LJ_HASFFI
+    unwind_c:
+#endif
 #if LJ_UNWIND_EXT
       if (errcode) {
        L->cframe = cframe_prev(cf);
@@ -145,6 +148,10 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode)
       }
       return cf;
     case FRAME_CONT:  /* Continuation frame. */
+#if LJ_HASFFI
+      if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK)
+       goto unwind_c;
+#endif
     case FRAME_VARG:  /* Vararg frame. */
       frame = frame_prevd(frame);
       break;
@@ -464,6 +471,10 @@ static ptrdiff_t finderrfunc(lua_State *L)
       cf = cframe_prev(cf);
       /* fallthrough */
     case FRAME_CONT:
+#if LJ_HASFFI
+      if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK)
+       cf = cframe_prev(cf);
+#endif
     case FRAME_VARG:
       frame = frame_prevd(frame);
       break;
@@ -591,15 +602,23 @@ LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg)
   if (frame_islua(frame)) {
     pframe = frame_prevl(frame);
   } else if (frame_iscont(frame)) {
-    pframe = frame_prevd(frame);
 #if LJ_HASFFI
-    /* Remove frame for FFI metamethods. */
-    if (frame_func(frame)->c.ffid >= FF_ffi_meta___index &&
-       frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) {
-      L->base = pframe+1;
-      L->top = frame;
-    }
+    if ((frame-1)->u32.lo == LJ_CONT_FFI_CALLBACK) {
+      pframe = frame;
+      frame = NULL;
+    } else
+#endif
+    {
+      pframe = frame_prevd(frame);
+#if LJ_HASFFI
+      /* Remove frame for FFI metamethods. */
+      if (frame_func(frame)->c.ffid >= FF_ffi_meta___index &&
+         frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) {
+       L->base = pframe+1;
+       L->top = frame;
+      }
 #endif
+    }
   }
   lj_debug_addloc(L, msg, pframe, frame);
   lj_err_run(L);
index dc015ef2c024b18dfe882db1a897faca6ff39bc3..e9ad045141605d29bf536609b0b2c78461580c58 100644 (file)
@@ -160,6 +160,12 @@ ERRDEF(FFI_BADMEMBER,      LUA_QS " has no member named " LUA_QS)
 ERRDEF(FFI_BADIDX,     LUA_QS " cannot be indexed")
 ERRDEF(FFI_WRCONST,    "attempt to write to constant location")
 ERRDEF(FFI_NODECL,     "missing declaration for symbol " LUA_QS)
+ERRDEF(FFI_BADCBACK,   "bad callback")
+#if LJ_TARGET_X86ORX64
+ERRDEF(FFI_CBACKOV,    "too many callbacks")
+#else
+ERRDEF(FFI_CBACKOV,    "no support for callbacks (yet)")
+#endif
 ERRDEF(FFI_NYIPACKBIT, "NYI: packed bit fields")
 ERRDEF(FFI_NYICALL,    "NYI: cannot call this C function (yet)")
 #endif
index 89484565df67ae62111bf7386e292f9131e38db0..3497671b5f8ba8da40ff188fe84ddcd2c3baad3f 100644 (file)
@@ -138,6 +138,8 @@ enum {
   (&gcref(*(GCRef *)(((char *)(cf))+CFRAME_OFS_L))->th)
 #define cframe_pc(cf) \
   (mref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), const BCIns))
+#define setcframe_L(cf, L) \
+  (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_L), (L)))
 #define setcframe_pc(cf, pc) \
   (setmref(*(MRef *)(((char *)(cf))+CFRAME_OFS_PC), (pc)))
 #define cframe_canyield(cf)    ((intptr_t)(cf) & CFRAME_RESUME)
index 278d2d34b94e6eed512c2fc83b44fc9b71e1503a..f258e3e1c0d2e59522e38787d2c1075e90db0515 100644 (file)
@@ -77,7 +77,7 @@ int lj_meta_tailcall(lua_State *L, cTValue *tv)
   TValue *top = L->top;
   const BCIns *pc = frame_pc(base-1);  /* Preserve old PC from frame. */
   copyTV(L, base-1, tv);  /* Replace frame with new object. */
-  top->u64 = 0;
+  top->u32.lo = LJ_CONT_TAILCALL;
   setframe_pc(top, pc);
   setframe_gc(top+1, obj2gco(L));  /* Dummy frame object. */
   setframe_ftsz(top+1, (int)((char *)(top+2) - (char *)base) + FRAME_CONT);
index 233b77e52d948150e8a58538fb1b2968f8eb25a3..593e7b009601ea001d183fda47e5b4251d6020f7 100644 (file)
@@ -192,6 +192,7 @@ typedef enum {
   XI_CALL =    0xe8,
   XI_JMP =     0xe9,
   XI_JMPs =    0xeb,
+  XI_PUSH =    0x50, /* Really 50+r. */
   XI_JCCs =    0x70, /* Really 7x. */
   XI_JCCn =    0x80, /* Really 0f8x. */
   XI_LEA =     0x8d,
@@ -203,6 +204,7 @@ typedef enum {
   XI_PUSHi8 =  0x6a,
   XI_TEST =    0x85,
   XI_MOVmi =   0xc7,
+  XI_GROUP5 =  0xff,
 
   /* Note: little-endian byte-order! */
   XI_FLDZ =    0xeed9,
index 5a82dab025f62a9724622fd8a6eaad21de59a231..9ce14accacb75146fbaaa76a3052228f209cee49 100644 (file)
@@ -88,6 +88,8 @@ LJ_ASMF void lj_cont_condt(void);  /* Branch if result is true. */
 LJ_ASMF void lj_cont_condf(void);  /* Branch if result is false. */
 LJ_ASMF void lj_cont_hook(void);  /* Continue from hook yield. */
 
+enum { LJ_CONT_TAILCALL, LJ_CONT_FFI_CALLBACK };  /* Special continuations. */
+
 /* Start of the ASM code. */
 LJ_ASMF char lj_vm_asm_begin[];
 
index cc32bf301e7e7931126b439f50e7e361870d2989..17c4b65e2c911990b65480e1c15e45f0e73cec16 100644 (file)
@@ -52,6 +52,7 @@
 #include "lj_cdata.c"
 #include "lj_cconv.c"
 #include "lj_ccall.c"
+#include "lj_ccallback.c"
 #include "lj_carith.c"
 #include "lj_clib.c"
 #include "lj_cparse.c"