Binary release v10.0.0
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..a1492fd7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+limine
+limine.exe
diff --git a/BOOTAA64.EFI b/BOOTAA64.EFI
new file mode 100644
index 00000000..258f900b
Binary files /dev/null and b/BOOTAA64.EFI differ
diff --git a/BOOTIA32.EFI b/BOOTIA32.EFI
new file mode 100644
index 00000000..416f3db1
Binary files /dev/null and b/BOOTIA32.EFI differ
diff --git a/BOOTLOONGARCH64.EFI b/BOOTLOONGARCH64.EFI
new file mode 100644
index 00000000..dad0c369
Binary files /dev/null and b/BOOTLOONGARCH64.EFI differ
diff --git a/BOOTRISCV64.EFI b/BOOTRISCV64.EFI
new file mode 100644
index 00000000..f10aa0d1
Binary files /dev/null and b/BOOTRISCV64.EFI differ
diff --git a/BOOTX64.EFI b/BOOTX64.EFI
new file mode 100644
index 00000000..d0ef14f7
Binary files /dev/null and b/BOOTX64.EFI differ
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..3f9ab862
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (C) 2019-2025 Mintsuki and contributors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..d4fc483d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,46 @@
+.POSIX:
+
+SHELL=/bin/sh
+
+CC=cc
+CFLAGS=-g -O2 -pipe
+CPPFLAGS=
+LDFLAGS=
+LIBS=
+
+STRIP=strip
+INSTALL=./install-sh
+
+PREFIX=/usr/local
+
+.PHONY: all
+all: limine
+
+.PHONY: install
+install: all
+ $(INSTALL) -d '$(DESTDIR)$(PREFIX)/share'
+ $(INSTALL) -d '$(DESTDIR)$(PREFIX)/share/limine'
+ $(INSTALL) -m 644 limine-bios.sys '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 limine-bios-cd.bin '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 limine-uefi-cd.bin '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 limine-bios-pxe.bin '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 BOOTX64.EFI '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 BOOTIA32.EFI '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 BOOTAA64.EFI '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 BOOTRISCV64.EFI '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -m 644 BOOTLOONGARCH64.EFI '$(DESTDIR)$(PREFIX)/share/limine/'
+ $(INSTALL) -d '$(DESTDIR)$(PREFIX)/include'
+ $(INSTALL) -m 644 limine.h '$(DESTDIR)$(PREFIX)/include/'
+ $(INSTALL) -d '$(DESTDIR)$(PREFIX)/bin'
+ $(INSTALL) limine '$(DESTDIR)$(PREFIX)/bin/'
+
+.PHONY: install-strip
+install-strip: install
+ $(STRIP) '$(DESTDIR)$(PREFIX)/bin/limine'
+
+.PHONY: clean
+clean:
+ rm -f limine limine.exe
+
+limine: limine.c
+ $(CC) $(CFLAGS) -std=c99 $(CPPFLAGS) $(LDFLAGS) $< $(LIBS) -o $@
diff --git a/install-sh b/install-sh
new file mode 100755
index 00000000..7c56c9c0
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,541 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2023-11-23.18; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
+ -s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Report bugs to <bug-automake@gnu.org>.
+GNU Automake home page: <https://www.gnu.org/software/automake/>.
+General help using GNU software: <https://www.gnu.org/gethelp/>."
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -p) cpprog="$cpprog -p";;
+
+ -s) stripcmd=$stripprog;;
+
+ -S) backupsuffix="$2"
+ shift;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/limine-bios-cd.bin b/limine-bios-cd.bin
new file mode 100644
index 00000000..3788e746
Binary files /dev/null and b/limine-bios-cd.bin differ
diff --git a/limine-bios-hdd.h b/limine-bios-hdd.h
new file mode 100644
index 00000000..d2ef998f
--- /dev/null
+++ b/limine-bios-hdd.h
@@ -0,0 +1,1206 @@
+const uint8_t binary_limine_hdd_bin_data[] = {
+ 0xeb, 0x3c, 0x90, 0x4c, 0x49, 0x4d, 0x49, 0x4e, 0x45, 0x20, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x4d, 0x49, 0x4e,
+ 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xfc,
+ 0xea, 0x45, 0x7c, 0x00, 0x00, 0x31, 0xf6, 0x8e, 0xde, 0x8e, 0xc6, 0x8e, 0xd6, 0xbc, 0x00, 0x7c,
+ 0xfb, 0x80, 0xfa, 0x80, 0x0f, 0x82, 0x10, 0x01, 0x80, 0xfa, 0x8f, 0x0f, 0x87, 0x08, 0x01, 0xb4,
+ 0x41, 0xbb, 0xaa, 0x55, 0xcd, 0x13, 0x0f, 0x82, 0xfc, 0x00, 0x81, 0xfb, 0x55, 0xaa, 0x0f, 0x85,
+ 0xf3, 0x00, 0x68, 0x00, 0x70, 0x07, 0xbf, 0xa8, 0x7d, 0x66, 0x8b, 0x05, 0x66, 0x8b, 0x6d, 0x04,
+ 0x31, 0xdb, 0x66, 0x31, 0xc9, 0x8b, 0x4d, 0xfc, 0xe8, 0x55, 0x00, 0x0f, 0x82, 0xd5, 0x00, 0x66,
+ 0x8b, 0x45, 0x08, 0x66, 0x8b, 0x6d, 0x0c, 0x01, 0xcb, 0x8b, 0x4d, 0xfe, 0xe8, 0x41, 0x00, 0x0f,
+ 0x82, 0xc0, 0x00, 0x0f, 0x01, 0x16, 0x4d, 0x7d, 0xfa, 0x0f, 0x20, 0xc0, 0x0f, 0xba, 0xe8, 0x00,
+ 0x0f, 0x22, 0xc0, 0xea, 0x79, 0x7d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xbe, 0x00, 0x80, 0xc7, 0x04, 0x10, 0x00, 0xc7, 0x44, 0x02, 0x01, 0x00, 0x89, 0x5c, 0x04,
+ 0x8c, 0x44, 0x06, 0x52, 0x56, 0x66, 0x50, 0x66, 0x55, 0xb4, 0x48, 0xbe, 0x10, 0x80, 0xc7, 0x04,
+ 0x1e, 0x00, 0xcd, 0x13, 0x72, 0x45, 0x8b, 0x6c, 0x18, 0x89, 0xc8, 0x66, 0xc1, 0xe9, 0x10, 0x89,
+ 0xca, 0x31, 0xc9, 0xf7, 0xf5, 0x85, 0xd2, 0x0f, 0x95, 0xc1, 0x01, 0xc1, 0x66, 0x5a, 0x66, 0x58,
+ 0x5e, 0x66, 0xf7, 0xf5, 0x66, 0x89, 0x44, 0x08, 0x66, 0xc7, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x5a, 0xb4, 0x42, 0xf8, 0xcd, 0x13, 0x72, 0x13, 0x01, 0x6c, 0x04, 0x66, 0x31, 0xdb, 0x66, 0xff,
+ 0x44, 0x08, 0x0f, 0x90, 0xc3, 0x66, 0x01, 0x5c, 0x0c, 0xe2, 0xe6, 0x61, 0xc3, 0x17, 0x00, 0x4b,
+ 0x7d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x9b, 0xcf, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x93, 0xcf, 0x00, 0x46, 0x46, 0x46, 0x46, 0x46, 0x81, 0xc6, 0x30, 0x4f, 0x68, 0x00, 0xb8, 0x07,
+ 0x26, 0x89, 0x36, 0x00, 0x00, 0xfb, 0xf4, 0xeb, 0xfd, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x8e, 0xd8,
+ 0x8e, 0xc0, 0x8e, 0xe0, 0x8e, 0xe8, 0x8e, 0xd0, 0x81, 0xe2, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x00,
+ 0x52, 0x68, 0x36, 0x3e, 0x00, 0x00, 0x68, 0x00, 0x0b, 0x07, 0x00, 0xe8, 0x60, 0x82, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa,
+ 0xfc, 0x30, 0xc0, 0xbf, 0xff, 0x0a, 0x07, 0x00, 0xb9, 0xff, 0x0a, 0x07, 0x00, 0x81, 0xe9, 0xff,
+ 0x0a, 0x07, 0x00, 0xf3, 0xaa, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x57, 0x56, 0x0f, 0xb6, 0x74, 0x24,
+ 0x14, 0x8b, 0x7c, 0x24, 0x18, 0xff, 0x74, 0x24, 0x10, 0xff, 0x74, 0x24, 0x10, 0x68, 0x00, 0xf0,
+ 0x00, 0x00, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0xbc, 0x00, 0xf0, 0x00, 0x00, 0x31,
+ 0xed, 0x57, 0x56, 0x6a, 0x00, 0x68, 0x00, 0xf0, 0x00, 0x00, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x8b,
+ 0x54, 0x24, 0x1c, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0x83, 0xfa, 0x12, 0x0f, 0x82, 0xa2, 0x00, 0x00,
+ 0x00, 0x8b, 0x4c, 0x24, 0x18, 0x80, 0x39, 0x1f, 0x0f, 0x85, 0x95, 0x00, 0x00, 0x00, 0x80, 0x79,
+ 0x01, 0x8b, 0x0f, 0x85, 0x8b, 0x00, 0x00, 0x00, 0x80, 0x79, 0x02, 0x08, 0x0f, 0x85, 0x81, 0x00,
+ 0x00, 0x00, 0x0f, 0xb6, 0x59, 0x03, 0x83, 0xfb, 0x1f, 0x77, 0x78, 0x8d, 0x71, 0x0a, 0xf6, 0xc3,
+ 0x04, 0x74, 0x0e, 0x0f, 0xb7, 0x3e, 0x8d, 0x6a, 0xf4, 0x39, 0xfd, 0x72, 0x66, 0x8d, 0x74, 0x3e,
+ 0x02, 0xf6, 0xc3, 0x08, 0x75, 0x04, 0x89, 0xf7, 0xeb, 0x13, 0x89, 0xf5, 0x29, 0xcd, 0x39, 0xd5,
+ 0x73, 0x51, 0x8d, 0x7e, 0x01, 0x45, 0x80, 0x3e, 0x00, 0x89, 0xfe, 0x75, 0xf1, 0x80, 0xfb, 0x10,
+ 0x73, 0x04, 0x89, 0xfd, 0xeb, 0x13, 0x89, 0xfe, 0x29, 0xce, 0x39, 0xd6, 0x73, 0x35, 0x8d, 0x6f,
+ 0x01, 0x46, 0x80, 0x3f, 0x00, 0x89, 0xef, 0x75, 0xf1, 0x83, 0xe3, 0x02, 0x01, 0xeb, 0x01, 0xd1,
+ 0x29, 0xd9, 0x83, 0xf9, 0x08, 0x7c, 0x1c, 0x83, 0xc1, 0xf8, 0x51, 0x53, 0xff, 0x74, 0x24, 0x1c,
+ 0xe8, 0x13, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x31, 0xc9, 0x85, 0xc0, 0x0f, 0x94, 0xc1, 0x8d,
+ 0x44, 0x49, 0xfd, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x81, 0xec, 0x38, 0x06,
+ 0x00, 0x00, 0x8b, 0x84, 0x24, 0x4c, 0x06, 0x00, 0x00, 0x8b, 0x8c, 0x24, 0x50, 0x06, 0x00, 0x00,
+ 0x8d, 0x54, 0x24, 0x30, 0x89, 0x4a, 0xe4, 0x03, 0x8c, 0x24, 0x54, 0x06, 0x00, 0x00, 0x89, 0x4a,
+ 0xe8, 0x31, 0xc9, 0x89, 0x4a, 0xec, 0x89, 0x4a, 0xf0, 0x89, 0x4a, 0xf4, 0x89, 0x42, 0xfc, 0x89,
+ 0x42, 0xf8, 0x8b, 0x54, 0x24, 0x20, 0x85, 0xd2, 0x7e, 0x0a, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0x44,
+ 0x24, 0x04, 0xeb, 0x4a, 0x8b, 0x74, 0x24, 0x14, 0x8b, 0x44, 0x24, 0x18, 0x8b, 0x4c, 0x24, 0x1c,
+ 0x89, 0x4c, 0x24, 0x04, 0x89, 0xd1, 0x39, 0xc6, 0x74, 0x1e, 0x8d, 0x56, 0x01, 0x89, 0x54, 0x24,
+ 0x14, 0x0f, 0xb6, 0x36, 0xd3, 0xe6, 0x8b, 0x7c, 0x24, 0x04, 0x09, 0xf7, 0x89, 0x7c, 0x24, 0x04,
+ 0x89, 0x7c, 0x24, 0x1c, 0x89, 0xd6, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00,
+ 0x8d, 0x51, 0x08, 0x89, 0x54, 0x24, 0x20, 0x83, 0xf9, 0xf9, 0x89, 0xd1, 0x7c, 0xc8, 0x8b, 0x6c,
+ 0x24, 0x04, 0xd1, 0xed, 0x89, 0x6c, 0x24, 0x1c, 0x8d, 0x4a, 0xff, 0x89, 0x4c, 0x24, 0x20, 0x83,
+ 0xf9, 0x01, 0x77, 0x41, 0x8b, 0x44, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc2, 0xf7, 0x8d,
+ 0x4a, 0x08, 0x39, 0xf0, 0x74, 0x16, 0x8d, 0x78, 0x01, 0x89, 0x7c, 0x24, 0x14, 0x0f, 0xb6, 0x18,
+ 0xd3, 0xe3, 0x09, 0xdd, 0x89, 0x6c, 0x24, 0x1c, 0x89, 0xf8, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24,
+ 0x01, 0x00, 0x00, 0x00, 0x83, 0xc2, 0x10, 0x89, 0x54, 0x24, 0x20, 0x83, 0xf9, 0xfa, 0x89, 0xca,
+ 0x7c, 0xcd, 0x83, 0xc1, 0x08, 0x89, 0xee, 0x83, 0xe6, 0x03, 0xc1, 0xed, 0x02, 0x89, 0x6c, 0x24,
+ 0x1c, 0x8d, 0x51, 0xfe, 0x89, 0x54, 0x24, 0x20, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x24, 0xb5,
+ 0x28, 0x0a, 0x07, 0x00, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x18, 0x29, 0xca, 0x83, 0xfa,
+ 0x04, 0x0f, 0x8c, 0x48, 0x05, 0x00, 0x00, 0x0f, 0xb7, 0x19, 0x0f, 0xb7, 0x51, 0x02, 0x66, 0x31,
+ 0xda, 0x66, 0x83, 0xfa, 0xff, 0x0f, 0x85, 0x34, 0x05, 0x00, 0x00, 0x83, 0xc1, 0x04, 0x89, 0x4c,
+ 0x24, 0x14, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x2c, 0x8d, 0x71,
+ 0x01, 0x8d, 0x7a, 0x01, 0x4b, 0x89, 0x74, 0x24, 0x14, 0x8a, 0x09, 0x89, 0x7c, 0x24, 0x2c, 0x88,
+ 0x0a, 0x75, 0xe3, 0x31, 0xc0, 0x89, 0x44, 0x24, 0x1c, 0x89, 0x44, 0x24, 0x20, 0xe9, 0xd8, 0x00,
+ 0x00, 0x00, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66, 0xc7, 0x44, 0x04, 0x50, 0x00, 0x00, 0x83, 0xc0,
+ 0x02, 0x75, 0xf4, 0xc7, 0x44, 0x24, 0x3e, 0x18, 0x00, 0x98, 0x00, 0x66, 0xc7, 0x44, 0x24, 0x42,
+ 0x70, 0x00, 0xb8, 0xe8, 0xff, 0xff, 0xff, 0x8d, 0x88, 0x18, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c,
+ 0x44, 0x80, 0x00, 0x00, 0x00, 0x40, 0x75, 0xef, 0x31, 0xc0, 0x66, 0x89, 0x84, 0x44, 0x80, 0x00,
+ 0x00, 0x00, 0x40, 0x3d, 0x90, 0x00, 0x00, 0x00, 0x75, 0xf0, 0xb8, 0xf8, 0xff, 0xff, 0xff, 0x8d,
+ 0x88, 0x20, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c, 0x44, 0xb0, 0x01, 0x00, 0x00, 0x40, 0x75, 0xef,
+ 0xb8, 0x90, 0xff, 0xff, 0xff, 0x8d, 0x88, 0x00, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c, 0x44, 0x90,
+ 0x02, 0x00, 0x00, 0x40, 0x75, 0xef, 0xc7, 0x84, 0x24, 0x90, 0x02, 0x00, 0x00, 0x1d, 0x01, 0x00,
+ 0x00, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66, 0xc7, 0x84, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0xc0, 0x02, 0x75, 0xf1, 0x66, 0xc7, 0x84, 0x24, 0x9e, 0x02, 0x00, 0x00, 0x20, 0x00, 0x31,
+ 0xc0, 0x66, 0x89, 0x84, 0x44, 0xb4, 0x02, 0x00, 0x00, 0x40, 0x83, 0xf8, 0x20, 0x75, 0xf2, 0xc7,
+ 0x84, 0x24, 0xf4, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x4c, 0x24, 0x14, 0x8d, 0x54,
+ 0x24, 0x30, 0x8d, 0x84, 0x24, 0x94, 0x02, 0x00, 0x00, 0x50, 0xe8, 0x92, 0x04, 0x00, 0x00, 0x83,
+ 0xc4, 0x04, 0x85, 0xc0, 0x0f, 0x85, 0x25, 0x04, 0x00, 0x00, 0xf6, 0x44, 0x24, 0x04, 0x01, 0x0f,
+ 0x84, 0xed, 0xfd, 0xff, 0xff, 0xe9, 0xfd, 0x03, 0x00, 0x00, 0x83, 0xfa, 0x04, 0x77, 0x45, 0x89,
+ 0xc8, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc0, 0xf6, 0x8d, 0x50, 0x08, 0x39,
+ 0xf1, 0x74, 0x18, 0x8d, 0x79, 0x01, 0x89, 0x7c, 0x24, 0x14, 0x0f, 0xb6, 0x19, 0x89, 0xd1, 0xd3,
+ 0xe3, 0x09, 0xdd, 0x89, 0x6c, 0x24, 0x1c, 0x89, 0xf9, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01,
+ 0x00, 0x00, 0x00, 0x83, 0xc0, 0x10, 0x89, 0x44, 0x24, 0x20, 0x83, 0xfa, 0xfd, 0x89, 0xd0, 0x7c,
+ 0xcb, 0x83, 0xc2, 0x08, 0x89, 0xee, 0xc1, 0xee, 0x05, 0x89, 0x74, 0x24, 0x1c, 0x8d, 0x5a, 0xfb,
+ 0x89, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x04, 0x77, 0x47, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x44, 0x24,
+ 0x18, 0x89, 0x04, 0x24, 0x83, 0xc2, 0xf3, 0x8d, 0x5a, 0x08, 0x3b, 0x0c, 0x24, 0x74, 0x18, 0x8d,
+ 0x41, 0x01, 0x89, 0x44, 0x24, 0x14, 0x0f, 0xb6, 0x39, 0x89, 0xd9, 0xd3, 0xe7, 0x09, 0xfe, 0x89,
+ 0x74, 0x24, 0x1c, 0x89, 0xc1, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x83,
+ 0xc2, 0x10, 0x89, 0x54, 0x24, 0x20, 0x83, 0xfb, 0xfd, 0x89, 0xda, 0x7c, 0xca, 0x83, 0xc3, 0x08,
+ 0x89, 0xf0, 0xc1, 0xe8, 0x05, 0x89, 0x04, 0x24, 0x89, 0x44, 0x24, 0x1c, 0x8d, 0x43, 0xfb, 0x89,
+ 0x44, 0x24, 0x20, 0x83, 0xf8, 0x03, 0x77, 0x51, 0x89, 0x74, 0x24, 0x08, 0x8b, 0x7c, 0x24, 0x14,
+ 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc3, 0xf3, 0x8d, 0x43, 0x08, 0x39, 0xf7, 0x74, 0x1e, 0x8d, 0x57,
+ 0x01, 0x89, 0x54, 0x24, 0x14, 0x0f, 0xb6, 0x3f, 0x89, 0xc1, 0xd3, 0xe7, 0x8b, 0x0c, 0x24, 0x09,
+ 0xf9, 0x89, 0x0c, 0x24, 0x89, 0x4c, 0x24, 0x1c, 0x89, 0xd7, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24,
+ 0x01, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x10, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf8, 0xfc, 0x89, 0xc3,
+ 0x7c, 0xc5, 0x83, 0xc0, 0x08, 0x8b, 0x74, 0x24, 0x08, 0x83, 0xe5, 0x1f, 0x8b, 0x14, 0x24, 0xc1,
+ 0xea, 0x04, 0x89, 0x54, 0x24, 0x1c, 0x83, 0xc0, 0xfc, 0x89, 0x44, 0x24, 0x20, 0x83, 0xfd, 0x1d,
+ 0xc7, 0x44, 0x24, 0x10, 0xfd, 0xff, 0xff, 0xff, 0x0f, 0x87, 0xdd, 0x02, 0x00, 0x00, 0x83, 0xe6,
+ 0x1f, 0x83, 0xfe, 0x1d, 0x0f, 0x87, 0xd1, 0x02, 0x00, 0x00, 0x81, 0xc5, 0x01, 0x01, 0x00, 0x00,
+ 0x89, 0x6c, 0x24, 0x0c, 0x46, 0x89, 0x74, 0x24, 0x08, 0x83, 0x24, 0x24, 0x0f, 0xb9, 0xed, 0xff,
+ 0xff, 0xff, 0xc6, 0x84, 0x0c, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x41, 0x75, 0xf5, 0x83, 0x04, 0x24,
+ 0x03, 0x8b, 0x5c, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x31, 0xed, 0x83, 0xf8, 0x02, 0x7f, 0x36,
+ 0x89, 0xdf, 0x39, 0xf7, 0x74, 0x18, 0x8d, 0x5f, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x3f,
+ 0x89, 0xc1, 0xd3, 0xe7, 0x09, 0xfa, 0x89, 0x54, 0x24, 0x1c, 0x89, 0xdf, 0xeb, 0x08, 0xc7, 0x44,
+ 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x48, 0x08, 0x89, 0x4c, 0x24, 0x20, 0x83, 0xf8, 0xfb,
+ 0x89, 0xc8, 0x7c, 0xce, 0xeb, 0x02, 0x89, 0xc1, 0x89, 0xd0, 0xc1, 0xe8, 0x03, 0x89, 0x44, 0x24,
+ 0x1c, 0x83, 0xc1, 0xfd, 0x89, 0x4c, 0x24, 0x20, 0x80, 0xe2, 0x07, 0x0f, 0xb6, 0xbd, 0xec, 0x0a,
+ 0x07, 0x00, 0x88, 0x94, 0x3c, 0xf8, 0x04, 0x00, 0x00, 0x3b, 0x2c, 0x24, 0x8d, 0x6d, 0x01, 0x89,
+ 0xc2, 0x89, 0xc8, 0x75, 0x96, 0x8d, 0x4c, 0x24, 0x30, 0x8d, 0x94, 0x24, 0xf8, 0x04, 0x00, 0x00,
+ 0x6a, 0x13, 0xe8, 0x08, 0x04, 0x00, 0x00, 0x83, 0xc4, 0x04, 0x85, 0xc0, 0x0f, 0x85, 0x15, 0x02,
+ 0x00, 0x00, 0x83, 0xbc, 0x24, 0x90, 0x02, 0x00, 0x00, 0xff, 0x0f, 0x84, 0x0b, 0x02, 0x00, 0x00,
+ 0x8b, 0x5c, 0x24, 0x0c, 0x8b, 0x44, 0x24, 0x08, 0x8d, 0x34, 0x18, 0x31, 0xff, 0x8d, 0x4c, 0x24,
+ 0x14, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0x82, 0x03, 0x00, 0x00, 0x3b, 0x84, 0x24, 0x90, 0x02, 0x00,
+ 0x00, 0x0f, 0x8f, 0xe4, 0x01, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x12, 0x0f, 0x84, 0xb4, 0x00, 0x00,
+ 0x00, 0x83, 0xf8, 0x11, 0x74, 0x61, 0x83, 0xf8, 0x10, 0x0f, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x85,
+ 0xff, 0x0f, 0x84, 0xc4, 0x01, 0x00, 0x00, 0x8b, 0x6c, 0x24, 0x20, 0x83, 0xfd, 0x02, 0x0f, 0x8d,
+ 0x1a, 0x01, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x14, 0x8b, 0x44, 0x24, 0x18, 0x8b, 0x54, 0x24, 0x1c,
+ 0x89, 0xe9, 0x39, 0xc3, 0x74, 0x16, 0x8d, 0x6b, 0x01, 0x89, 0x6c, 0x24, 0x14, 0x0f, 0xb6, 0x1b,
+ 0xd3, 0xe3, 0x09, 0xda, 0x89, 0x54, 0x24, 0x1c, 0x89, 0xeb, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24,
+ 0x01, 0x00, 0x00, 0x00, 0x8d, 0x69, 0x08, 0x89, 0x6c, 0x24, 0x20, 0x83, 0xf9, 0xfa, 0x89, 0xe9,
+ 0x7c, 0xd0, 0xe9, 0xdb, 0x00, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x03, 0x0f, 0x8d,
+ 0x90, 0x00, 0x00, 0x00, 0x8b, 0x6c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x18, 0x8b, 0x44, 0x24, 0x1c,
+ 0x89, 0xd9, 0x39, 0xd5, 0x74, 0x17, 0x8d, 0x5d, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x6d,
+ 0x00, 0xd3, 0xe5, 0x09, 0xe8, 0x89, 0x44, 0x24, 0x1c, 0x89, 0xdd, 0xeb, 0x08, 0xc7, 0x44, 0x24,
+ 0x24, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x59, 0x08, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf9, 0xfb, 0x89,
+ 0xd9, 0x7c, 0xcf, 0xeb, 0x53, 0x8b, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x07, 0x7d, 0x62, 0x8b, 0x6c,
+ 0x24, 0x14, 0x8b, 0x54, 0x24, 0x18, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0xd9, 0x39, 0xd5, 0x74, 0x17,
+ 0x8d, 0x5d, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x6d, 0x00, 0xd3, 0xe5, 0x09, 0xe8, 0x89,
+ 0x44, 0x24, 0x1c, 0x89, 0xdd, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x8d,
+ 0x59, 0x08, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf9, 0xff, 0x89, 0xd9, 0x7c, 0xcf, 0xeb, 0x25, 0x31,
+ 0xc9, 0x41, 0xeb, 0x63, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0xc1, 0x83, 0xe1, 0x07, 0xc1, 0xe8, 0x03,
+ 0x89, 0x44, 0x24, 0x1c, 0x83, 0xc3, 0xfd, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xc1, 0x03, 0xeb, 0x1a,
+ 0x8b, 0x44, 0x24, 0x1c, 0x89, 0xc1, 0x83, 0xe1, 0x7f, 0xc1, 0xe8, 0x07, 0x89, 0x44, 0x24, 0x1c,
+ 0x83, 0xc3, 0xf9, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xc1, 0x0b, 0x31, 0xc0, 0xeb, 0x25, 0x8b, 0x54,
+ 0x24, 0x1c, 0x8d, 0x84, 0x24, 0xf8, 0x04, 0x00, 0x00, 0x8a, 0x44, 0x07, 0xff, 0x89, 0xd1, 0x83,
+ 0xe1, 0x03, 0xc1, 0xea, 0x02, 0x89, 0x54, 0x24, 0x1c, 0x83, 0xc5, 0xfe, 0x89, 0x6c, 0x24, 0x20,
+ 0x83, 0xc1, 0x03, 0x8b, 0x5c, 0x24, 0x0c, 0x89, 0xf2, 0x29, 0xfa, 0x39, 0xd1, 0x77, 0x6c, 0x88,
+ 0x84, 0x3c, 0xf8, 0x04, 0x00, 0x00, 0x47, 0x49, 0x75, 0xf5, 0x39, 0xf7, 0x0f, 0x82, 0x5b, 0xfe,
+ 0xff, 0xff, 0x80, 0xbc, 0x24, 0xf8, 0x05, 0x00, 0x00, 0x00, 0x74, 0x4f, 0x8d, 0x4c, 0x24, 0x30,
+ 0x8d, 0x94, 0x24, 0xf8, 0x04, 0x00, 0x00, 0x53, 0xe8, 0x22, 0x02, 0x00, 0x00, 0x83, 0xc4, 0x04,
+ 0x85, 0xc0, 0x75, 0x33, 0x8d, 0x94, 0x1c, 0xf8, 0x04, 0x00, 0x00, 0x8d, 0x8c, 0x24, 0x94, 0x02,
+ 0x00, 0x00, 0xff, 0x74, 0x24, 0x08, 0xe8, 0x04, 0x02, 0x00, 0x00, 0x83, 0xc4, 0x04, 0x85, 0xc0,
+ 0x75, 0x1d, 0xe9, 0xd3, 0xfb, 0xff, 0xff, 0x31, 0xc0, 0x83, 0x7c, 0x24, 0x24, 0x00, 0x0f, 0x94,
+ 0xc0, 0x8d, 0x44, 0x40, 0xfd, 0xeb, 0x08, 0x89, 0x44, 0x24, 0x10, 0x8b, 0x44, 0x24, 0x10, 0x81,
+ 0xc4, 0x38, 0x06, 0x00, 0x00, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x89, 0xce,
+ 0x8b, 0x59, 0x0c, 0x39, 0xd3, 0x7d, 0x2d, 0x8b, 0x0e, 0x8b, 0x46, 0x04, 0x39, 0xc1, 0x74, 0x13,
+ 0x8d, 0x79, 0x01, 0x89, 0x3e, 0x0f, 0xb6, 0x29, 0x89, 0xd9, 0xd3, 0xe5, 0x09, 0x6e, 0x08, 0x89,
+ 0xf9, 0xeb, 0x07, 0xc7, 0x46, 0x10, 0x01, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x08, 0x89, 0x5e, 0x0c,
+ 0x39, 0xd3, 0x7c, 0xd8, 0x8b, 0x7e, 0x08, 0x31, 0xc0, 0x48, 0x89, 0xd1, 0xd3, 0xe0, 0xf7, 0xd0,
+ 0x21, 0xf8, 0xd3, 0xef, 0x89, 0x7e, 0x08, 0x29, 0xd3, 0x89, 0x5e, 0x0c, 0x5e, 0x5f, 0x5b, 0x5d,
+ 0xc3, 0x55, 0x53, 0x57, 0x56, 0x83, 0xec, 0x08, 0x89, 0xd5, 0x89, 0xcf, 0xe8, 0x1b, 0x01, 0x00,
+ 0x00, 0x83, 0x7f, 0x10, 0x00, 0x74, 0x0d, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0x83, 0xc4, 0x08, 0x5e,
+ 0x5f, 0x5b, 0x5d, 0xc3, 0x89, 0x2c, 0x24, 0x3d, 0xff, 0x00, 0x00, 0x00, 0x77, 0x10, 0x8b, 0x4f,
+ 0x18, 0x8d, 0x51, 0x01, 0x89, 0x57, 0x18, 0x88, 0x01, 0xe9, 0xcf, 0x00, 0x00, 0x00, 0x3d, 0x00,
+ 0x01, 0x00, 0x00, 0x0f, 0x84, 0xdc, 0x00, 0x00, 0x00, 0x3b, 0x85, 0x60, 0x02, 0x00, 0x00, 0x7f,
+ 0xc6, 0x3d, 0x1d, 0x01, 0x00, 0x00, 0x77, 0xbf, 0x8b, 0x4c, 0x24, 0x1c, 0x83, 0xb9, 0x60, 0x02,
+ 0x00, 0x00, 0xff, 0x74, 0xb2, 0x0f, 0xb7, 0x8c, 0x00, 0x54, 0x08, 0x07, 0x00, 0x89, 0x4c, 0x24,
+ 0x04, 0x05, 0xff, 0xfe, 0xff, 0xff, 0x31, 0xf6, 0xb9, 0xff, 0x00, 0x00, 0x10, 0x0f, 0xa3, 0xc1,
+ 0x72, 0x10, 0x0f, 0xb6, 0x90, 0x38, 0x0a, 0x07, 0x00, 0x89, 0xf9, 0xe8, 0x1a, 0xff, 0xff, 0xff,
+ 0x89, 0xc6, 0x89, 0xf9, 0x8b, 0x5c, 0x24, 0x1c, 0x89, 0xda, 0xe8, 0x8d, 0x00, 0x00, 0x00, 0x3b,
+ 0x83, 0x60, 0x02, 0x00, 0x00, 0x0f, 0x8f, 0x6c, 0xff, 0xff, 0xff, 0x89, 0xc1, 0x83, 0xf8, 0x1d,
+ 0x0f, 0x87, 0x61, 0xff, 0xff, 0xff, 0x0f, 0xb7, 0xac, 0x09, 0xb0, 0x0a, 0x07, 0x00, 0x31, 0xc0,
+ 0x83, 0xf9, 0x04, 0x72, 0x0e, 0x0f, 0xb6, 0x91, 0x92, 0x0a, 0x07, 0x00, 0x89, 0xf9, 0xe8, 0xd7,
+ 0xfe, 0xff, 0xff, 0x01, 0xe8, 0x8b, 0x4f, 0x18, 0x89, 0xca, 0x2b, 0x57, 0x14, 0x39, 0xd0, 0x0f,
+ 0x8f, 0x32, 0xff, 0xff, 0xff, 0x03, 0x74, 0x24, 0x04, 0x85, 0xf6, 0x7e, 0x18, 0xf7, 0xd8, 0x31,
+ 0xc9, 0x8b, 0x57, 0x18, 0x8d, 0x2c, 0x0a, 0x8a, 0x1c, 0x28, 0x88, 0x1c, 0x0a, 0x41, 0x39, 0xce,
+ 0x75, 0xef, 0x8b, 0x4f, 0x18, 0x01, 0xf1, 0x89, 0x4f, 0x18, 0x8b, 0x2c, 0x24, 0x89, 0xf9, 0x89,
+ 0xea, 0xe8, 0x16, 0x00, 0x00, 0x00, 0x83, 0x7f, 0x10, 0x00, 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff,
+ 0xe9, 0xf2, 0xfe, 0xff, 0xff, 0x31, 0xc0, 0xe9, 0xf0, 0xfe, 0xff, 0xff, 0x55, 0x53, 0x57, 0x56,
+ 0x50, 0x89, 0xd5, 0x89, 0xcb, 0x31, 0xd2, 0x42, 0xe8, 0x6d, 0xfe, 0xff, 0xff, 0x89, 0xc7, 0x0f,
+ 0xb7, 0x45, 0x02, 0x31, 0xf6, 0x39, 0xc7, 0x89, 0x2c, 0x24, 0x72, 0x21, 0x83, 0xc5, 0x04, 0x31,
+ 0xf6, 0x01, 0xc6, 0x29, 0xc7, 0x89, 0xd9, 0x31, 0xd2, 0x42, 0xe8, 0x4b, 0xfe, 0xff, 0xff, 0x8d,
+ 0x3c, 0x78, 0x0f, 0xb7, 0x45, 0x00, 0x83, 0xc5, 0x02, 0x39, 0xc7, 0x7d, 0xe4, 0x01, 0xfe, 0x8b,
+ 0x04, 0x24, 0x0f, 0xb7, 0x44, 0x70, 0x20, 0x83, 0xc4, 0x04, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55,
+ 0x53, 0x57, 0x56, 0x83, 0xec, 0x24, 0x8b, 0x7c, 0x24, 0x38, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66,
+ 0xc7, 0x44, 0x01, 0x20, 0x00, 0x00, 0x83, 0xc0, 0x02, 0x75, 0xf4, 0xc7, 0x81, 0x60, 0x02, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0x85, 0xff, 0x74, 0x1b, 0x31, 0xc0, 0x80, 0x3c, 0x02, 0x00, 0x74,
+ 0x0e, 0x89, 0x81, 0x60, 0x02, 0x00, 0x00, 0x0f, 0xb6, 0x34, 0x02, 0x66, 0xff, 0x04, 0x71, 0x40,
+ 0x39, 0xc7, 0x75, 0xe7, 0x31, 0xff, 0x31, 0xdb, 0x43, 0xbd, 0xe0, 0xff, 0xff, 0xff, 0xb8, 0xfd,
+ 0xff, 0xff, 0xff, 0x0f, 0xb7, 0x74, 0x29, 0x20, 0x29, 0xf3, 0x72, 0x72, 0x01, 0xdb, 0x66, 0x89,
+ 0x7c, 0x2c, 0x24, 0x01, 0xf7, 0x83, 0xc5, 0x02, 0x75, 0xe9, 0x83, 0xff, 0x02, 0x0f, 0x93, 0x44,
+ 0x24, 0x03, 0x85, 0xdb, 0x0f, 0x95, 0xc3, 0x84, 0x5c, 0x24, 0x03, 0x75, 0x51, 0x83, 0xff, 0x01,
+ 0x75, 0x07, 0x66, 0x83, 0x79, 0x02, 0x01, 0x75, 0x45, 0x8b, 0x5c, 0x24, 0x38, 0x85, 0xdb, 0x74,
+ 0x25, 0x31, 0xc0, 0x0f, 0xb6, 0x34, 0x02, 0x85, 0xf6, 0x74, 0x16, 0x0f, 0xb7, 0x5c, 0x74, 0x04,
+ 0x8d, 0x6b, 0x01, 0x66, 0x89, 0x6c, 0x74, 0x04, 0x66, 0x89, 0x44, 0x59, 0x20, 0x8b, 0x5c, 0x24,
+ 0x38, 0x40, 0x39, 0xc3, 0x75, 0xdd, 0x31, 0xc0, 0x83, 0xff, 0x01, 0x75, 0x11, 0x66, 0xc7, 0x41,
+ 0x02, 0x02, 0x00, 0x8b, 0x91, 0x60, 0x02, 0x00, 0x00, 0x42, 0x66, 0x89, 0x51, 0x22, 0x83, 0xc4,
+ 0x24, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x00, 0x00, 0x14, 0x02, 0x07, 0x00, 0x72, 0x02, 0x07, 0x00,
+ 0x5a, 0x03, 0x07, 0x00, 0x6f, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x05, 0x00, 0x7f, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00,
+ 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x11, 0x00, 0x13, 0x00,
+ 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x43, 0x00,
+ 0x53, 0x00, 0x63, 0x00, 0x73, 0x00, 0x83, 0x00, 0xa3, 0x00, 0xc3, 0x00, 0xe3, 0x00, 0x02, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05,
+ 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0c, 0x0d, 0x0d,
+ 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x07, 0x00, 0x09, 0x00, 0x0d, 0x00,
+ 0x11, 0x00, 0x19, 0x00, 0x21, 0x00, 0x31, 0x00, 0x41, 0x00, 0x61, 0x00, 0x81, 0x00, 0xc1, 0x00,
+ 0x01, 0x01, 0x81, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x06, 0x01, 0x08, 0x01, 0x0c,
+ 0x01, 0x10, 0x01, 0x18, 0x01, 0x20, 0x01, 0x30, 0x01, 0x40, 0x01, 0x60, 0x10, 0x11, 0x12, 0x00,
+ 0x08, 0x07, 0x09, 0x06, 0x0a, 0x05, 0x0b, 0x04, 0x0c, 0x03, 0x0d, 0x02, 0x0e, 0x01, 0x0f, 0x90,
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x85, 0x7c, 0x0d, 0x5c, 0x13, 0x57,
+ 0xb6, 0xf8, 0x0c, 0x04, 0x0d, 0x18, 0x9d, 0xa8, 0x68, 0x41, 0x51, 0x63, 0xc5, 0xae, 0x6c, 0xad,
+ 0x92, 0x6a, 0x5b, 0x53, 0xb5, 0xe5, 0x2b, 0x80, 0xd6, 0x68, 0x20, 0x12, 0xda, 0xb5, 0x94, 0x52,
+ 0x21, 0x0d, 0x54, 0x85, 0xc2, 0x8c, 0x1f, 0x55, 0x2c, 0x38, 0xe4, 0x95, 0xcb, 0x74, 0xfa, 0xba,
+ 0xfd, 0x78, 0xaf, 0xfb, 0xd1, 0xdd, 0x76, 0xdb, 0xee, 0xeb, 0x6e, 0xb7, 0x4f, 0xbb, 0xfb, 0x54,
+ 0x6c, 0xfd, 0x48, 0xc0, 0x0d, 0xa0, 0xae, 0x82, 0xfa, 0x14, 0x3f, 0x9e, 0xd2, 0x96, 0xb5, 0x83,
+ 0xe1, 0x6d, 0x83, 0xb8, 0x80, 0x68, 0xc9, 0xff, 0x9c, 0x3b, 0x09, 0x42, 0xbb, 0xfb, 0xfe, 0xfe,
+ 0x4c, 0x32, 0xf7, 0xde, 0x73, 0xcf, 0x3d, 0xf7, 0xdc, 0xf3, 0x79, 0xef, 0x1d, 0xee, 0x24, 0xba,
+ 0x8f, 0x7c, 0xfc, 0x80, 0x86, 0x39, 0xe0, 0x24, 0x1a, 0xa6, 0xba, 0x0b, 0x1f, 0x7b, 0x7f, 0xcf,
+ 0xb1, 0x53, 0x3e, 0xf1, 0x33, 0xcc, 0xf5, 0x39, 0xf0, 0x15, 0xc3, 0xd4, 0x1b, 0x18, 0x86, 0x79,
+ 0xad, 0xfd, 0x35, 0xf7, 0x6b, 0x1d, 0xaf, 0x29, 0xaf, 0xb5, 0x76, 0xad, 0xd2, 0x33, 0xcc, 0x89,
+ 0xd0, 0xbf, 0x1c, 0xf2, 0x57, 0xbb, 0xd8, 0x3d, 0x86, 0x9c, 0x73, 0x34, 0x99, 0xfb, 0x02, 0xe1,
+ 0x4d, 0xe6, 0x01, 0x00, 0x66, 0x64, 0x73, 0x1f, 0x39, 0x36, 0x78, 0xe7, 0x20, 0xb3, 0x83, 0x61,
+ 0x8e, 0xe0, 0xd7, 0x01, 0x26, 0x8c, 0x61, 0x7a, 0x3f, 0xe4, 0xd8, 0x98, 0x12, 0xad, 0x73, 0x1b,
+ 0xa0, 0x3d, 0x5e, 0xaf, 0x1f, 0x81, 0x93, 0x33, 0xb8, 0xe3, 0x87, 0xb8, 0x7b, 0xdd, 0x8e, 0xfa,
+ 0x77, 0xa0, 0xad, 0x84, 0xb1, 0x1e, 0x37, 0xba, 0xef, 0xb6, 0xde, 0x2e, 0x61, 0x9c, 0xcc, 0x8e,
+ 0xe3, 0x8f, 0x30, 0x8a, 0x85, 0x45, 0xec, 0x4c, 0x80, 0xb1, 0xd6, 0x6a, 0x54, 0x1a, 0x38, 0x76,
+ 0xc6, 0x20, 0x92, 0x7a, 0x12, 0xbe, 0xb4, 0xcc, 0xf7, 0x91, 0x72, 0x9f, 0xfb, 0x19, 0x40, 0x7b,
+ 0xfd, 0x3a, 0xb4, 0x8e, 0xc2, 0x78, 0xd3, 0xf7, 0x5d, 0x20, 0x1c, 0x51, 0xd5, 0xa5, 0xc5, 0x6b,
+ 0x7e, 0x23, 0xf6, 0x30, 0x8c, 0x94, 0x16, 0xaf, 0xfd, 0xe0, 0xa6, 0xfa, 0xa0, 0xfb, 0x60, 0x00,
+ 0x1e, 0x38, 0x36, 0xe2, 0x0e, 0xfd, 0x19, 0xaf, 0xb9, 0x81, 0x3f, 0x33, 0x74, 0xf0, 0x63, 0xb3,
+ 0xe7, 0xe6, 0x5c, 0x5f, 0xda, 0xf3, 0x8f, 0x06, 0xa3, 0x33, 0xb8, 0x9e, 0xd3, 0x43, 0x87, 0x6a,
+ 0x7d, 0xd8, 0x41, 0xee, 0xf3, 0xf7, 0x3c, 0xec, 0x90, 0xee, 0x1b, 0xe8, 0xe1, 0x7e, 0xc7, 0xbd,
+ 0x3f, 0x76, 0x96, 0xe3, 0x5d, 0x47, 0x9e, 0x23, 0xdf, 0xf1, 0x8c, 0xe3, 0x27, 0x8e, 0xa7, 0x1c,
+ 0xeb, 0x1c, 0x4f, 0x62, 0x9b, 0xbf, 0xe7, 0xf6, 0x5f, 0x98, 0xc1, 0xbb, 0xb0, 0x37, 0x7b, 0x1c,
+ 0xcf, 0xcb, 0x85, 0xf1, 0xf3, 0x1c, 0x56, 0x87, 0xcd, 0x91, 0xe5, 0xc8, 0x76, 0xd8, 0x1d, 0xb9,
+ 0x8e, 0x1c, 0xc7, 0x2f, 0x67, 0x8e, 0xe1, 0xde, 0xe3, 0x3e, 0x56, 0x7b, 0x3c, 0xec, 0xe0, 0xd8,
+ 0xa9, 0x77, 0xe8, 0xcf, 0x4c, 0xcd, 0x0d, 0x18, 0x58, 0xc7, 0xe2, 0xc0, 0x27, 0x7b, 0x62, 0x18,
+ 0x07, 0xac, 0xd5, 0x5d, 0x9a, 0xf2, 0xf2, 0x9f, 0x59, 0xd7, 0xf8, 0xfa, 0xe8, 0x7f, 0xcc, 0xff,
+ 0xf1, 0x4f, 0xe5, 0x48, 0xe8, 0xdf, 0x2f, 0x17, 0x38, 0x02, 0x63, 0x26, 0xdd, 0x78, 0x77, 0x41,
+ 0x60, 0xc1, 0xd4, 0x1b, 0xd2, 0x14, 0x14, 0x02, 0x32, 0x65, 0x2a, 0xb0, 0xa0, 0x29, 0x02, 0x9f,
+ 0xa7, 0xc1, 0x93, 0xb4, 0x36, 0x5e, 0xd3, 0x14, 0x31, 0xe9, 0x86, 0xda, 0x01, 0xf8, 0xb5, 0xa4,
+ 0x97, 0xf2, 0x2b, 0x89, 0xfe, 0xcc, 0xc8, 0xec, 0x0d, 0xf2, 0xeb, 0x85, 0x1b, 0xff, 0x9c, 0x5f,
+ 0xae, 0x1b, 0xdf, 0x5b, 0x1a, 0xef, 0x98, 0xd5, 0xbd, 0x8c, 0x77, 0x4c, 0x36, 0x7e, 0xd9, 0x7b,
+ 0x19, 0x87, 0x69, 0xea, 0xa4, 0x1b, 0xfc, 0x02, 0x64, 0xc6, 0x7f, 0xb1, 0x89, 0xee, 0xbf, 0x4c,
+ 0x45, 0xf6, 0xf1, 0x5d, 0x46, 0x78, 0xfa, 0x4d, 0x76, 0x6f, 0xed, 0x7d, 0xf6, 0xde, 0x7a, 0x26,
+ 0xec, 0x2f, 0x53, 0x3f, 0xd6, 0xf0, 0x51, 0xd8, 0x53, 0x53, 0x05, 0x3d, 0x9f, 0x1d, 0xa4, 0x3c,
+ 0x5a, 0xd2, 0x4b, 0x79, 0x94, 0xd4, 0xcb, 0x19, 0x1a, 0xab, 0x8e, 0x03, 0x93, 0x1a, 0xaf, 0xf7,
+ 0xde, 0x00, 0x26, 0x7d, 0x01, 0x4c, 0xba, 0xf4, 0x5a, 0xe3, 0x6b, 0x5f, 0xbf, 0xe6, 0x7b, 0xed,
+ 0x0c, 0x32, 0x49, 0xa2, 0xf3, 0x22, 0x74, 0x8e, 0x55, 0xcb, 0x61, 0x50, 0x86, 0xe1, 0xa7, 0x07,
+ 0x1e, 0x02, 0x3a, 0x98, 0xc0, 0x43, 0xd9, 0xf4, 0x1b, 0x2b, 0x95, 0x23, 0x0a, 0xc3, 0x88, 0x47,
+ 0x75, 0x8d, 0x46, 0x77, 0xe3, 0xff, 0xcd, 0x3b, 0xfc, 0xa7, 0xea, 0x07, 0x48, 0x93, 0xe6, 0x03,
+ 0xe6, 0x26, 0xc3, 0x34, 0x02, 0x7b, 0x34, 0x37, 0x29, 0x7b, 0x74, 0xf4, 0x67, 0x46, 0xf4, 0x4d,
+ 0x95, 0x3d, 0xf2, 0x86, 0xf8, 0xe8, 0xeb, 0xaf, 0xf5, 0xfe, 0x73, 0x16, 0x7d, 0xdc, 0xab, 0x8a,
+ 0x54, 0xa8, 0xe9, 0x76, 0x60, 0xb3, 0x26, 0xb0, 0x59, 0x1b, 0xd8, 0xcc, 0x04, 0x66, 0x32, 0x37,
+ 0xc5, 0xa3, 0x63, 0x06, 0x17, 0xe0, 0x74, 0x35, 0x37, 0xf1, 0x67, 0xa6, 0xee, 0xe6, 0xdd, 0xe9,
+ 0x7e, 0xd5, 0xfb, 0xfd, 0xe9, 0xce, 0x0d, 0x04, 0x18, 0x66, 0x84, 0x60, 0xfc, 0x73, 0x39, 0x00,
+ 0xcd, 0xb6, 0xe5, 0x82, 0x6e, 0xeb, 0x24, 0x73, 0xb4, 0x54, 0xa9, 0x97, 0x72, 0x74, 0x52, 0x9e,
+ 0x56, 0x12, 0x62, 0x5c, 0xa7, 0xf9, 0x1f, 0xbb, 0x02, 0x7c, 0x92, 0xcb, 0xcd, 0xbf, 0xc0, 0x1d,
+ 0x72, 0x8b, 0xfe, 0x59, 0xdc, 0xa1, 0x63, 0x62, 0xcf, 0xac, 0x84, 0x66, 0x71, 0xc0, 0xc0, 0xed,
+ 0xfa, 0x3d, 0x74, 0x75, 0xf5, 0xf1, 0x31, 0x64, 0x26, 0xb1, 0x6b, 0x7c, 0x13, 0x01, 0x6a, 0x1b,
+ 0x14, 0x23, 0xc9, 0xcc, 0xa6, 0x74, 0x0d, 0xa2, 0x35, 0x5e, 0x32, 0x9e, 0xee, 0x6a, 0x03, 0x3d,
+ 0x76, 0xb9, 0xb9, 0x9a, 0x7a, 0x04, 0xbe, 0xc4, 0xd5, 0x5c, 0x45, 0x9b, 0x91, 0x19, 0x70, 0x35,
+ 0x73, 0xae, 0x9b, 0x6a, 0xff, 0xb1, 0xb3, 0xdb, 0x00, 0xc3, 0x6a, 0x0d, 0x77, 0xb0, 0xf9, 0xcc,
+ 0x75, 0x72, 0xc6, 0x77, 0x4c, 0x5e, 0x13, 0x70, 0x9d, 0xe2, 0x5c, 0x92, 0xda, 0x3c, 0x6e, 0xf6,
+ 0x05, 0x32, 0x21, 0x88, 0x51, 0x0c, 0xb0, 0x5c, 0xcd, 0xcb, 0x80, 0x91, 0x3b, 0x78, 0x8a, 0xb4,
+ 0x9e, 0x51, 0xb8, 0x4f, 0xcf, 0x90, 0x86, 0xae, 0x4d, 0x50, 0x41, 0xda, 0x8d, 0xa7, 0xfb, 0xfb,
+ 0x49, 0x9b, 0xf1, 0xb4, 0xab, 0x8f, 0x34, 0x72, 0x35, 0x3f, 0xc1, 0xba, 0x50, 0xb7, 0xae, 0x55,
+ 0x58, 0xf2, 0x26, 0x35, 0x99, 0xbb, 0x29, 0x96, 0x01, 0x03, 0xbf, 0x9a, 0x98, 0xfd, 0x7b, 0x67,
+ 0x11, 0xff, 0xbc, 0x3f, 0x93, 0xf6, 0xda, 0xae, 0x33, 0x1d, 0xc4, 0xac, 0x90, 0x73, 0xe4, 0xbc,
+ 0x64, 0xf6, 0xd7, 0x7a, 0xce, 0x7c, 0x0b, 0x35, 0xd7, 0x88, 0xe7, 0x8c, 0x2f, 0xf2, 0x4a, 0xd7,
+ 0x6f, 0xb1, 0xbf, 0x0e, 0x87, 0x3c, 0xd4, 0x34, 0x92, 0x01, 0xee, 0xd9, 0x77, 0xb1, 0x09, 0x45,
+ 0xe4, 0x5c, 0x93, 0xd9, 0x8f, 0x32, 0x65, 0x0c, 0xf8, 0x5e, 0x22, 0x1e, 0xd2, 0x0a, 0xd4, 0xf4,
+ 0x90, 0x46, 0x57, 0x1f, 0x57, 0x33, 0x30, 0x14, 0x08, 0x00, 0x7f, 0x9a, 0xc6, 0x50, 0x4a, 0xae,
+ 0x43, 0x89, 0x3b, 0xd4, 0x0c, 0x38, 0xb8, 0x43, 0x0d, 0x80, 0x2f, 0xc1, 0x23, 0xde, 0x9a, 0xc5,
+ 0x89, 0x7b, 0xa1, 0x5a, 0x4e, 0x66, 0xfb, 0xda, 0xc8, 0x15, 0x18, 0x59, 0x50, 0xc8, 0x79, 0x18,
+ 0xfe, 0x5b, 0xa0, 0x11, 0x66, 0x18, 0x1c, 0xc7, 0x37, 0x03, 0x8a, 0xc4, 0xc3, 0x89, 0x04, 0x0a,
+ 0x7d, 0x17, 0x46, 0x01, 0x22, 0x1f, 0xae, 0x48, 0x79, 0x8a, 0xb1, 0x45, 0xca, 0xf1, 0x4b, 0xe6,
+ 0x6e, 0x92, 0xe3, 0xe7, 0x3e, 0xec, 0x67, 0xb9, 0x0f, 0xaf, 0xc0, 0xa7, 0x91, 0x25, 0x79, 0xdd,
+ 0xac, 0x3b, 0xb2, 0x99, 0x0c, 0xf6, 0x9f, 0x26, 0x3d, 0xfd, 0x6d, 0x52, 0x9e, 0x9e, 0xbd, 0x20,
+ 0x59, 0xa2, 0x27, 0x1e, 0x23, 0x6d, 0x9e, 0xae, 0x59, 0x9e, 0xc1, 0x59, 0xe4, 0xcc, 0x9c, 0xbc,
+ 0xe8, 0x39, 0x39, 0xfa, 0x84, 0x73, 0xd0, 0x3f, 0xf6, 0xaa, 0x94, 0xd7, 0xbd, 0x52, 0xf8, 0x02,
+ 0x7b, 0xb2, 0x6e, 0x29, 0x07, 0xc5, 0x20, 0x82, 0x3c, 0x48, 0x5e, 0xd2, 0x88, 0x1d, 0x43, 0x91,
+ 0x1e, 0x72, 0x91, 0x1c, 0x27, 0xed, 0xa0, 0x1b, 0xcf, 0xe4, 0xaf, 0xcb, 0x6b, 0x24, 0x5e, 0x20,
+ 0xa5, 0x1d, 0xf9, 0xd7, 0x4d, 0x80, 0xba, 0x2a, 0x4f, 0x07, 0xd2, 0xe2, 0x81, 0x85, 0x3c, 0xd7,
+ 0xe5, 0x87, 0x49, 0x05, 0x45, 0xab, 0x73, 0x40, 0xec, 0x8e, 0x91, 0xcc, 0x3a, 0x18, 0x95, 0x9c,
+ 0xf4, 0xfc, 0x6d, 0x16, 0x39, 0x06, 0xa3, 0x1a, 0xdb, 0x16, 0xe5, 0xe8, 0xd9, 0x1b, 0x62, 0x1b,
+ 0xac, 0x0d, 0xd6, 0xf5, 0x13, 0x3e, 0x5e, 0x03, 0x8f, 0x43, 0xb3, 0x8c, 0x7e, 0x10, 0x40, 0x63,
+ 0x2f, 0x7b, 0x5b, 0x6c, 0x65, 0xe4, 0x1d, 0xf1, 0xda, 0xdc, 0xac, 0x6c, 0xab, 0x4d, 0xc9, 0xf9,
+ 0x2e, 0x10, 0x10, 0x8f, 0x46, 0xcb, 0x60, 0xbe, 0x25, 0xab, 0xc6, 0x78, 0x63, 0x51, 0x62, 0x38,
+ 0x74, 0x10, 0x4f, 0x33, 0xc4, 0x2f, 0x17, 0xdd, 0xa4, 0xe4, 0xdc, 0x95, 0x64, 0x21, 0x9a, 0x3b,
+ 0x64, 0xd6, 0x1f, 0x78, 0x1c, 0xad, 0x55, 0x9a, 0x07, 0x38, 0x2d, 0xba, 0x0d, 0xdc, 0xa1, 0x73,
+ 0xe2, 0x8d, 0x59, 0xb0, 0x28, 0x69, 0xad, 0xa4, 0x55, 0xca, 0xd1, 0x92, 0x33, 0xdc, 0xa1, 0xd3,
+ 0x5c, 0x5a, 0x1b, 0x54, 0x8a, 0x0d, 0x06, 0x49, 0xd0, 0x71, 0x87, 0x4e, 0xc2, 0xca, 0x20, 0xc0,
+ 0x31, 0xd2, 0x40, 0x2c, 0xdd, 0x09, 0xc7, 0x8c, 0x2d, 0xe2, 0xe0, 0xe3, 0x47, 0xa8, 0xcd, 0x7b,
+ 0xe5, 0xd7, 0xf0, 0x2d, 0x8c, 0x25, 0x17, 0xba, 0xde, 0x42, 0x03, 0xd9, 0x36, 0xe4, 0x21, 0x57,
+ 0xb9, 0x4f, 0xfb, 0x81, 0xd7, 0xe4, 0xc6, 0x99, 0xeb, 0x7d, 0x1e, 0x03, 0x67, 0x1e, 0x3c, 0x40,
+ 0x21, 0xcd, 0x6d, 0x9f, 0x3d, 0xfe, 0x63, 0x8b, 0x9f, 0xfb, 0xe8, 0xca, 0x99, 0xaf, 0xa1, 0x9e,
+ 0x5c, 0xe0, 0xcc, 0xbd, 0x20, 0x1f, 0xd8, 0xf6, 0x85, 0x0a, 0x70, 0xbc, 0xbf, 0x35, 0x1c, 0x38,
+ 0x66, 0x56, 0x8c, 0x97, 0xb8, 0x0f, 0x07, 0x59, 0x75, 0xb1, 0x4e, 0xb2, 0xe3, 0x04, 0x3f, 0xdb,
+ 0x12, 0x79, 0x01, 0x46, 0x26, 0x6d, 0xfd, 0x6d, 0xe4, 0x76, 0xff, 0x19, 0xc9, 0xac, 0x67, 0x1b,
+ 0x41, 0x2d, 0x27, 0x7a, 0xc8, 0x71, 0x8f, 0x6f, 0x96, 0xe7, 0xd6, 0x2c, 0xd2, 0x3c, 0xc7, 0x1c,
+ 0x3d, 0xc7, 0xa2, 0x4f, 0x38, 0x25, 0x59, 0xba, 0x63, 0x1b, 0x02, 0x66, 0x45, 0x38, 0x88, 0x7d,
+ 0x65, 0xdd, 0x13, 0xc0, 0x41, 0x58, 0xe4, 0xd0, 0xd2, 0x84, 0x78, 0x01, 0xfa, 0x0c, 0xbc, 0xb0,
+ 0xe8, 0xeb, 0x55, 0x5e, 0xa0, 0xec, 0x89, 0x40, 0xec, 0xa1, 0x8b, 0x62, 0xef, 0x2c, 0x17, 0x4c,
+ 0xff, 0x02, 0x34, 0x6a, 0x87, 0xeb, 0x29, 0x17, 0x86, 0xc4, 0x7e, 0xca, 0x85, 0x5b, 0xe4, 0x42,
+ 0xc2, 0x2d, 0xf1, 0xd6, 0xe3, 0x9b, 0xa3, 0x24, 0xb3, 0x96, 0xdc, 0xe8, 0xfa, 0x0f, 0x94, 0x70,
+ 0x37, 0x54, 0x7c, 0x4e, 0xa7, 0x51, 0xf3, 0xef, 0xc8, 0x88, 0x3c, 0x3f, 0x39, 0x0e, 0xbc, 0xa8,
+ 0x54, 0xa4, 0x4a, 0x2d, 0x19, 0xe0, 0x3e, 0xbd, 0xcb, 0x8e, 0x86, 0xbb, 0xec, 0x98, 0x77, 0x81,
+ 0xfb, 0x68, 0xe8, 0xcc, 0x37, 0x50, 0x2d, 0x01, 0x63, 0xcc, 0xfd, 0x4d, 0xe6, 0xce, 0x11, 0xec,
+ 0xb8, 0x4d, 0x2a, 0xbb, 0xfb, 0xdb, 0xc2, 0x2d, 0xc0, 0x0e, 0x02, 0xcd, 0x1f, 0x36, 0x00, 0x37,
+ 0xfc, 0x2c, 0xcc, 0x4f, 0x65, 0x4a, 0xe7, 0x48, 0xa6, 0x34, 0x02, 0x53, 0x2a, 0xf5, 0xec, 0x6d,
+ 0xa9, 0x32, 0x7a, 0xe2, 0xad, 0x61, 0xa6, 0x9c, 0x9a, 0x53, 0x49, 0x99, 0xd2, 0x0c, 0xe8, 0x63,
+ 0x07, 0x93, 0x85, 0x7a, 0xf1, 0xa8, 0x7e, 0x14, 0x17, 0x96, 0x48, 0x95, 0x20, 0x80, 0x5a, 0x29,
+ 0x29, 0x9a, 0xdb, 0xdd, 0xb4, 0x9c, 0xad, 0x82, 0x61, 0x45, 0x24, 0x0f, 0x98, 0x23, 0x09, 0xfa,
+ 0xf7, 0x31, 0x1a, 0x72, 0xb9, 0x85, 0xa9, 0x4e, 0x06, 0x5a, 0xc8, 0x19, 0xa5, 0xc4, 0x08, 0x3f,
+ 0x17, 0xc5, 0xa3, 0x9a, 0x0f, 0xb0, 0x45, 0xce, 0xeb, 0x74, 0x34, 0x85, 0xeb, 0x19, 0x07, 0xd9,
+ 0x1e, 0x46, 0x3c, 0x9e, 0x2e, 0x8d, 0x83, 0x3c, 0x31, 0x46, 0xec, 0xe0, 0x1c, 0x24, 0x55, 0x43,
+ 0x2a, 0xb4, 0xc4, 0xa6, 0x93, 0x2b, 0x0f, 0x96, 0xc4, 0x97, 0x30, 0xb9, 0xca, 0x27, 0x69, 0xd4,
+ 0x71, 0x34, 0x65, 0xc4, 0x33, 0x29, 0x80, 0x1d, 0x46, 0x64, 0x48, 0x46, 0x0c, 0x28, 0x4c, 0x87,
+ 0x8e, 0x64, 0x44, 0x7b, 0x7c, 0xd0, 0x35, 0x7f, 0x4c, 0x6e, 0x6e, 0xc9, 0x64, 0x65, 0x43, 0x3f,
+ 0x8a, 0xb3, 0xee, 0x70, 0x18, 0xea, 0x73, 0x86, 0x96, 0x15, 0xe6, 0x80, 0x82, 0x18, 0xfb, 0xc0,
+ 0x8c, 0x4e, 0x93, 0x2c, 0x31, 0x20, 0x9e, 0xdc, 0xee, 0x95, 0xd1, 0x59, 0x81, 0x87, 0x90, 0x00,
+ 0xab, 0xf2, 0x98, 0x8a, 0x97, 0xf8, 0xc5, 0xa3, 0x4b, 0xe8, 0xc4, 0x9c, 0xe3, 0x33, 0x58, 0x88,
+ 0x9f, 0x94, 0xcd, 0x33, 0x42, 0x06, 0xbc, 0xba, 0x9b, 0x01, 0x3b, 0x55, 0x2f, 0x80, 0xcd, 0xab,
+ 0x63, 0x64, 0x79, 0x66, 0x00, 0x0c, 0xcf, 0x31, 0xcf, 0x75, 0x0d, 0x79, 0x7b, 0x2b, 0x3c, 0x8a,
+ 0x5f, 0x4e, 0x20, 0x32, 0x0f, 0x0f, 0xb2, 0xa5, 0x99, 0x1c, 0x13, 0xbf, 0xd2, 0x91, 0x9c, 0x2a,
+ 0x98, 0x09, 0x91, 0x77, 0x60, 0x9d, 0xbc, 0x8c, 0x42, 0xd3, 0x6a, 0x37, 0x56, 0x5b, 0x8e, 0x72,
+ 0xfb, 0xdc, 0xc4, 0xfc, 0x96, 0xd1, 0x9d, 0xf4, 0x45, 0x15, 0x2e, 0x73, 0x93, 0xb1, 0x05, 0x97,
+ 0x00, 0xec, 0x64, 0x65, 0x27, 0x4e, 0x55, 0x3e, 0xd4, 0x07, 0xfa, 0x9d, 0xab, 0x7c, 0x9e, 0xaa,
+ 0x4e, 0xd8, 0x35, 0x0d, 0x30, 0x30, 0x99, 0x00, 0xf9, 0xee, 0x04, 0x78, 0x92, 0x5c, 0x38, 0xa8,
+ 0x83, 0xb8, 0xee, 0x0c, 0x61, 0x01, 0x07, 0x26, 0xae, 0x28, 0xac, 0x6a, 0x72, 0x21, 0x65, 0x33,
+ 0x19, 0xca, 0x84, 0xe7, 0xfb, 0x28, 0x13, 0xfa, 0x5c, 0x43, 0x00, 0xc6, 0x72, 0xae, 0x01, 0xe0,
+ 0x06, 0xb7, 0x5f, 0x36, 0x50, 0x82, 0x35, 0xa4, 0xd9, 0xa3, 0x84, 0x11, 0x73, 0x87, 0x43, 0x3c,
+ 0x44, 0xfb, 0x94, 0xe7, 0x71, 0xfb, 0x5d, 0x8f, 0xc2, 0x13, 0xb7, 0xff, 0xed, 0x25, 0x88, 0xd1,
+ 0xeb, 0x88, 0x3c, 0xc7, 0x67, 0x72, 0xfb, 0x4f, 0x13, 0xef, 0xec, 0x73, 0xd5, 0x43, 0xe8, 0xf1,
+ 0x78, 0x93, 0xc3, 0xd5, 0xc2, 0xbd, 0x6d, 0xf6, 0x7b, 0x3a, 0x34, 0xdc, 0x3e, 0x5e, 0x1f, 0xee,
+ 0xb9, 0xa6, 0xad, 0x1e, 0x62, 0xde, 0x03, 0xbc, 0x6f, 0x99, 0x2f, 0x4b, 0x96, 0x0e, 0x6e, 0x5f,
+ 0xcb, 0x61, 0x96, 0x8a, 0xdd, 0x49, 0x62, 0xe9, 0xa8, 0xb3, 0x5c, 0x8e, 0x02, 0x91, 0xab, 0xf9,
+ 0x79, 0x18, 0x1a, 0xef, 0x92, 0x32, 0x85, 0x7f, 0x04, 0xe7, 0x03, 0x76, 0x88, 0xe4, 0x5d, 0x26,
+ 0x31, 0x64, 0xab, 0x9e, 0x6c, 0x5d, 0x4c, 0xb6, 0x26, 0x4a, 0xae, 0x05, 0x38, 0x2b, 0xf9, 0x41,
+ 0x1c, 0x36, 0x7d, 0x09, 0x59, 0xbd, 0xac, 0x29, 0x3d, 0x0e, 0x9e, 0x03, 0xc6, 0x4b, 0xd2, 0x72,
+ 0x2a, 0x3d, 0x01, 0x21, 0x9a, 0x4a, 0x8f, 0xb2, 0x60, 0xa1, 0x8a, 0xa1, 0x89, 0xca, 0x4e, 0x93,
+ 0xb9, 0x59, 0x0f, 0xeb, 0x42, 0x06, 0x3c, 0x0a, 0xac, 0x3d, 0x8c, 0x39, 0x40, 0x05, 0xc7, 0x7c,
+ 0x82, 0xe4, 0x9d, 0x25, 0x79, 0xad, 0x25, 0xf1, 0x36, 0x39, 0xef, 0x1d, 0x9b, 0x52, 0x91, 0xa2,
+ 0xb2, 0xd1, 0x7c, 0x10, 0xe5, 0x86, 0x08, 0x7e, 0x69, 0x0c, 0x31, 0xef, 0x91, 0xcc, 0x55, 0xc4,
+ 0xfc, 0x07, 0xc9, 0xb5, 0x83, 0xf2, 0xd2, 0xfc, 0xab, 0x92, 0x79, 0x36, 0xd9, 0x85, 0x4b, 0x65,
+ 0x55, 0x1e, 0x50, 0x3b, 0x48, 0xe6, 0xb3, 0xc4, 0x55, 0x86, 0xa4, 0x99, 0x5b, 0x89, 0x6b, 0x03,
+ 0x7d, 0x00, 0x25, 0x38, 0x41, 0x64, 0x27, 0x65, 0x79, 0x21, 0x7c, 0x53, 0xb2, 0x8c, 0x6e, 0x6b,
+ 0xae, 0x32, 0x5e, 0xed, 0x64, 0xb3, 0x01, 0xeb, 0xbb, 0x6f, 0xaa, 0xac, 0x37, 0xbf, 0x07, 0x7c,
+ 0xaf, 0x64, 0x31, 0x7c, 0x07, 0x30, 0x89, 0xca, 0x5b, 0xd5, 0x8e, 0xc7, 0x02, 0x8c, 0x10, 0xb1,
+ 0x46, 0xe8, 0x03, 0x9e, 0xcc, 0x0b, 0x0e, 0x49, 0xe9, 0xdc, 0x97, 0xac, 0x0e, 0x4b, 0x11, 0x4b,
+ 0xea, 0x20, 0xe6, 0x66, 0x62, 0x39, 0x21, 0xd1, 0xc1, 0x89, 0xb9, 0x55, 0xa2, 0xe4, 0x10, 0xf3,
+ 0x59, 0x3a, 0xac, 0x13, 0x96, 0x84, 0xb1, 0x2b, 0x6f, 0x25, 0xdf, 0x1d, 0xb8, 0x62, 0xe4, 0xc0,
+ 0x1a, 0x16, 0x53, 0x06, 0x00, 0xa4, 0x2a, 0x28, 0xe5, 0x5d, 0x06, 0x0f, 0x54, 0xb5, 0x43, 0x1b,
+ 0x08, 0x08, 0x11, 0x2b, 0x60, 0xf4, 0x16, 0xd3, 0x29, 0x2e, 0xe3, 0x14, 0x59, 0x19, 0x0d, 0x6b,
+ 0x5a, 0x73, 0x09, 0x50, 0x95, 0xb0, 0xc6, 0x96, 0xac, 0x2c, 0x6b, 0x36, 0x39, 0xa7, 0xcc, 0xbe,
+ 0x43, 0xfd, 0x81, 0xcb, 0x2d, 0x55, 0x76, 0x72, 0x2e, 0x0f, 0x34, 0x56, 0xef, 0x8c, 0x56, 0x35,
+ 0xfb, 0x95, 0xf0, 0xd0, 0x4c, 0x20, 0x1c, 0xe8, 0x0f, 0x2d, 0xcc, 0xdb, 0x0f, 0x8c, 0x5a, 0x18,
+ 0x3a, 0xab, 0x11, 0x6b, 0xe3, 0x4a, 0x41, 0xba, 0xd5, 0xe5, 0x71, 0x25, 0xe1, 0xd2, 0xba, 0x89,
+ 0x2b, 0x93, 0x72, 0x31, 0x0d, 0xbe, 0x4b, 0xe2, 0xad, 0xb2, 0xf9, 0x1d, 0xab, 0xd2, 0x92, 0x44,
+ 0xa7, 0xe2, 0xea, 0x83, 0xb5, 0x62, 0x41, 0xf8, 0xc1, 0xe2, 0x48, 0x2c, 0x5d, 0x2b, 0x37, 0xae,
+ 0x95, 0xf9, 0x28, 0x2e, 0x14, 0x3f, 0x3e, 0xf0, 0x62, 0xb4, 0x3d, 0x57, 0x79, 0x45, 0x05, 0xc6,
+ 0x8e, 0x56, 0x98, 0xfa, 0xd6, 0xde, 0xe1, 0xa9, 0x0b, 0x16, 0xf0, 0xd6, 0x95, 0x9d, 0x92, 0xd0,
+ 0x0d, 0x33, 0xf6, 0xd9, 0x70, 0xe6, 0x50, 0x32, 0x2b, 0x60, 0xf5, 0x52, 0xab, 0x6f, 0xa3, 0xb3,
+ 0x80, 0x10, 0x08, 0x66, 0xd8, 0xb5, 0x87, 0xaa, 0x44, 0x9a, 0x3e, 0xea, 0x33, 0x16, 0xe4, 0xf5,
+ 0x63, 0x83, 0xea, 0x8d, 0x5c, 0x59, 0xe0, 0x0d, 0xdd, 0x0a, 0x08, 0x49, 0x47, 0x57, 0x3a, 0x3c,
+ 0x02, 0x92, 0xea, 0x97, 0xa2, 0x21, 0xb0, 0x04, 0x31, 0xf7, 0xa8, 0x78, 0x6b, 0x57, 0x82, 0x74,
+ 0x74, 0x10, 0x4b, 0xbb, 0xb6, 0xf9, 0x63, 0x56, 0x98, 0x25, 0x99, 0xdf, 0x32, 0x79, 0x85, 0xe8,
+ 0x92, 0xb2, 0x6c, 0xe2, 0x55, 0xbe, 0x59, 0x84, 0xc6, 0x49, 0x11, 0x8f, 0x6a, 0x49, 0x8f, 0xef,
+ 0x5f, 0xd3, 0x09, 0x50, 0x61, 0x69, 0xaf, 0x69, 0x91, 0x20, 0xa2, 0x00, 0xf3, 0xdc, 0x44, 0x52,
+ 0xb4, 0x22, 0x95, 0x6a, 0x46, 0x88, 0x51, 0x79, 0xf7, 0xd4, 0x7c, 0x9c, 0x69, 0x3b, 0x0c, 0x13,
+ 0x32, 0x8a, 0xdc, 0x3e, 0x4f, 0x55, 0x0f, 0x0b, 0xda, 0xc4, 0x9e, 0x84, 0x40, 0x84, 0x6d, 0x02,
+ 0xbb, 0x60, 0x84, 0x05, 0x4b, 0x36, 0xba, 0x33, 0x81, 0x28, 0x62, 0x6e, 0x97, 0x96, 0xed, 0xad,
+ 0x4a, 0x62, 0x19, 0x29, 0x85, 0x9a, 0x5c, 0xc4, 0xc2, 0xbd, 0x82, 0x16, 0x8a, 0x08, 0xb5, 0xc4,
+ 0x52, 0xe3, 0x08, 0xf1, 0xdf, 0x41, 0x0e, 0x3d, 0x06, 0x0f, 0x74, 0xfd, 0x83, 0xc6, 0x55, 0xc6,
+ 0x95, 0x18, 0xb1, 0x0e, 0x7d, 0x64, 0x2f, 0x5d, 0x87, 0xbd, 0xb8, 0x0e, 0x9c, 0x91, 0x98, 0x5f,
+ 0xed, 0xbf, 0x48, 0x72, 0x5e, 0xa7, 0x66, 0x08, 0x85, 0xf2, 0xe1, 0xc7, 0x47, 0x2a, 0x0f, 0x04,
+ 0x71, 0x60, 0x74, 0xbf, 0xb7, 0x20, 0x54, 0xf2, 0x6e, 0xf5, 0xdc, 0x65, 0xff, 0x93, 0xec, 0x21,
+ 0xc4, 0x26, 0xbe, 0x8d, 0x98, 0x19, 0x76, 0x48, 0x1c, 0x4a, 0x2a, 0xff, 0x4f, 0xce, 0x28, 0x09,
+ 0xaf, 0xf6, 0x43, 0x28, 0xf5, 0xba, 0x78, 0x89, 0x61, 0xbd, 0x13, 0xcf, 0x80, 0xbd, 0x30, 0x9d,
+ 0x24, 0x30, 0xed, 0xf6, 0xd8, 0x56, 0x2e, 0xe5, 0x0c, 0xc9, 0x69, 0xe7, 0x52, 0xd0, 0x6c, 0x48,
+ 0x96, 0x1a, 0x2e, 0xe5, 0x94, 0x24, 0xd4, 0xa6, 0x8b, 0x43, 0x91, 0xaa, 0xd4, 0x72, 0xae, 0x71,
+ 0x80, 0xc9, 0x37, 0x9b, 0xdb, 0x67, 0x3e, 0x24, 0x09, 0xfe, 0xc0, 0xc3, 0x56, 0xe7, 0xbe, 0x64,
+ 0x96, 0x51, 0x0e, 0xcd, 0x81, 0x29, 0xdf, 0x80, 0x61, 0x0f, 0x68, 0xd1, 0xdf, 0x80, 0x55, 0x59,
+ 0xa9, 0x21, 0xad, 0xa2, 0x3b, 0x2d, 0xdb, 0x0a, 0x42, 0xbc, 0x71, 0x1a, 0x92, 0xae, 0xad, 0x71,
+ 0xf3, 0x1a, 0x6f, 0x7a, 0x12, 0xfb, 0xfe, 0xd6, 0x05, 0xe0, 0x6e, 0x74, 0x2e, 0x8c, 0x5b, 0x3d,
+ 0x1d, 0x61, 0x59, 0xd6, 0xc0, 0x43, 0x3c, 0xd4, 0x28, 0x55, 0x0f, 0xd2, 0x19, 0x7e, 0x80, 0x05,
+ 0x69, 0x3c, 0x05, 0xca, 0x62, 0xc9, 0x14, 0x7c, 0x20, 0x8b, 0x6b, 0xc1, 0x6c, 0x1d, 0x7a, 0x30,
+ 0x28, 0xdb, 0x25, 0x8c, 0xdd, 0xaa, 0xfc, 0x7b, 0x9c, 0x2a, 0x76, 0x99, 0xe1, 0xe2, 0xad, 0x30,
+ 0x6e, 0xd7, 0x6f, 0xbe, 0x43, 0x26, 0xa6, 0x8b, 0x03, 0x01, 0x7e, 0xd9, 0x3f, 0x1b, 0x61, 0xe6,
+ 0xff, 0x31, 0xc2, 0xb2, 0x5a, 0xe0, 0x69, 0x20, 0x29, 0x0e, 0xc6, 0xc9, 0x09, 0x8d, 0x63, 0x0f,
+ 0x08, 0x7e, 0xab, 0xb2, 0x40, 0x1d, 0x88, 0x78, 0x44, 0x4f, 0x78, 0xba, 0x78, 0x8b, 0xdd, 0xf2,
+ 0x8b, 0xae, 0x87, 0x60, 0xb0, 0xea, 0xa3, 0xb8, 0xd0, 0xa3, 0xfc, 0xd4, 0xc9, 0xa9, 0x77, 0x13,
+ 0x0d, 0xad, 0x72, 0x7c, 0x29, 0xc3, 0xd4, 0x40, 0x5a, 0xb0, 0x07, 0x65, 0xd9, 0x48, 0x72, 0xba,
+ 0x89, 0xd7, 0xe8, 0xe6, 0x7e, 0x13, 0x8c, 0x92, 0xc4, 0x81, 0x29, 0x34, 0xc2, 0x28, 0x2f, 0x0c,
+ 0x56, 0xd4, 0x4f, 0xc1, 0xc8, 0xa3, 0x85, 0xfb, 0x0d, 0x69, 0x82, 0x64, 0xe2, 0x2d, 0x37, 0x64,
+ 0x12, 0x6f, 0x35, 0x68, 0x1b, 0xc0, 0x28, 0xbc, 0xe5, 0xd6, 0xb6, 0x52, 0x58, 0x61, 0x09, 0xb7,
+ 0xfb, 0x78, 0x10, 0xdc, 0x74, 0x6a, 0xcb, 0x8f, 0x49, 0x33, 0xcd, 0x08, 0x3c, 0x9f, 0x27, 0xa5,
+ 0x70, 0x10, 0x21, 0xf6, 0x7f, 0x55, 0x2c, 0x74, 0xe3, 0x23, 0x7b, 0xae, 0x84, 0xc9, 0x02, 0x16,
+ 0xb5, 0xfd, 0x1d, 0x65, 0x41, 0x8f, 0x41, 0x75, 0x4e, 0xb7, 0xa2, 0x00, 0x3d, 0xca, 0x67, 0x0b,
+ 0xe0, 0x4b, 0x5e, 0x06, 0x5f, 0x9f, 0x0c, 0xa0, 0x1d, 0xd5, 0xfd, 0x0e, 0xa6, 0x12, 0x10, 0x62,
+ 0x61, 0x45, 0xb5, 0x56, 0xe5, 0xd8, 0x6c, 0x3a, 0x73, 0x5f, 0xac, 0xb3, 0x1c, 0x96, 0xb5, 0xeb,
+ 0x33, 0x4a, 0x27, 0x2b, 0x4c, 0x54, 0x9e, 0x7f, 0x18, 0x7a, 0xac, 0x81, 0xaf, 0x0f, 0x0e, 0x82,
+ 0x08, 0xfb, 0x22, 0xde, 0x3f, 0xa8, 0x06, 0x13, 0x51, 0xce, 0x84, 0x54, 0x00, 0xac, 0xc5, 0x54,
+ 0x73, 0xeb, 0x78, 0x06, 0x32, 0x23, 0x8f, 0xb2, 0x0b, 0x23, 0xf9, 0xa5, 0xc4, 0x2b, 0x25, 0xc5,
+ 0x00, 0x44, 0xbf, 0xb8, 0x33, 0x2e, 0xb0, 0x63, 0xbe, 0x31, 0xb0, 0x06, 0xe2, 0xc0, 0x7d, 0xe9,
+ 0x3a, 0x1b, 0xe4, 0x7a, 0x56, 0x65, 0xf6, 0x6c, 0xd5, 0xc0, 0xb8, 0x79, 0xe0, 0xab, 0x62, 0x65,
+ 0x90, 0x53, 0xc2, 0xd8, 0x8c, 0xd4, 0xa5, 0x3b, 0xe3, 0x76, 0x5e, 0xa8, 0x5a, 0xee, 0xa6, 0x6a,
+ 0x39, 0xde, 0x59, 0x9c, 0x06, 0xc2, 0xf5, 0xac, 0x4a, 0x54, 0xd5, 0xf2, 0x7a, 0xac, 0xe5, 0xa7,
+ 0x29, 0x7d, 0xbf, 0x04, 0x8d, 0x33, 0x77, 0x7f, 0xb0, 0x01, 0x97, 0xd1, 0xec, 0xff, 0xc0, 0x89,
+ 0x6b, 0xdb, 0x03, 0x81, 0x9b, 0xb3, 0x36, 0x85, 0xae, 0x43, 0xfa, 0x94, 0xd0, 0x3a, 0x90, 0x53,
+ 0x75, 0x33, 0x3c, 0xd0, 0xcd, 0x1b, 0x81, 0xdf, 0xac, 0x73, 0xb2, 0x99, 0x65, 0xb2, 0x94, 0x13,
+ 0x51, 0x54, 0x20, 0x81, 0xba, 0x47, 0x9d, 0x3c, 0xd4, 0x80, 0x87, 0x1f, 0xae, 0x99, 0xe7, 0x7c,
+ 0x2f, 0x05, 0x6b, 0x3e, 0x1e, 0xae, 0x99, 0xea, 0xbc, 0x42, 0x61, 0xfe, 0x2d, 0x54, 0xc3, 0xd5,
+ 0xfc, 0x0b, 0x46, 0x0b, 0xde, 0xda, 0x20, 0x6a, 0xa4, 0x96, 0x95, 0x92, 0xe2, 0xa4, 0xd5, 0x86,
+ 0xcf, 0x3f, 0x5c, 0x1e, 0xce, 0x18, 0x1b, 0x22, 0x8f, 0x09, 0x19, 0xf2, 0x14, 0xc3, 0x33, 0x0c,
+ 0x93, 0xd0, 0x2a, 0x5e, 0x60, 0x8e, 0x18, 0x56, 0xc3, 0xb0, 0xd6, 0x12, 0x26, 0x3b, 0xd7, 0xae,
+ 0xe8, 0xc7, 0x21, 0x9a, 0x18, 0xbb, 0xd2, 0x40, 0xf1, 0x69, 0x4a, 0xa2, 0x9d, 0xcb, 0xc2, 0x35,
+ 0x8c, 0xf3, 0xad, 0x4c, 0x98, 0xeb, 0xab, 0x4b, 0x43, 0x7c, 0x99, 0xee, 0xbc, 0x0d, 0xa3, 0xfa,
+ 0x22, 0x9c, 0xfb, 0x80, 0x1c, 0xe5, 0x69, 0x03, 0x85, 0x35, 0xba, 0xa9, 0xbc, 0x79, 0x23, 0x90,
+ 0x15, 0xec, 0x1e, 0xd6, 0xe7, 0x57, 0x69, 0xf0, 0x5d, 0x83, 0xe9, 0x8a, 0xdd, 0x8b, 0x21, 0xa2,
+ 0x92, 0x2d, 0x27, 0x14, 0x3d, 0x92, 0xe7, 0x31, 0xba, 0x5d, 0x2d, 0x42, 0x38, 0x38, 0x4f, 0xf1,
+ 0xe8, 0xe2, 0x50, 0x90, 0x58, 0xdd, 0x9d, 0x09, 0xa6, 0x96, 0x9c, 0x24, 0x13, 0x8d, 0x6e, 0x59,
+ 0xfe, 0x03, 0xac, 0xbd, 0xd5, 0x89, 0x9b, 0x59, 0x56, 0x6b, 0x56, 0xb6, 0xf2, 0x55, 0x34, 0xa5,
+ 0x4c, 0x76, 0x7d, 0x05, 0xf5, 0x25, 0xe1, 0xce, 0x69, 0xc0, 0x7d, 0xab, 0xf2, 0xa1, 0x3e, 0x44,
+ 0xd2, 0x32, 0xd9, 0x35, 0x34, 0xb2, 0xa5, 0x6e, 0xb8, 0xe5, 0x5e, 0xd9, 0xb5, 0x1b, 0x5b, 0x22,
+ 0x9c, 0xbb, 0x52, 0xb0, 0xa5, 0x6c, 0xb8, 0x45, 0x6b, 0x0c, 0x64, 0x74, 0x6d, 0x07, 0x45, 0xa9,
+ 0x7b, 0xf7, 0x00, 0x40, 0x70, 0xfb, 0x8e, 0xd7, 0x0f, 0xa0, 0xb9, 0x0b, 0x64, 0x3c, 0xfa, 0xce,
+ 0x2a, 0xd0, 0x1a, 0x5e, 0x9b, 0x24, 0xfc, 0xbd, 0x8b, 0xa6, 0xb2, 0x10, 0xa2, 0xec, 0x97, 0xf7,
+ 0x23, 0xd0, 0xfe, 0x36, 0x0a, 0xe4, 0x58, 0x5a, 0x9b, 0x86, 0x20, 0xe3, 0x44, 0x77, 0x18, 0x57,
+ 0xf3, 0x30, 0xc0, 0xf8, 0xba, 0x21, 0x38, 0x3a, 0xf4, 0x1d, 0xba, 0xde, 0x76, 0x4f, 0x47, 0x84,
+ 0x9c, 0x16, 0x86, 0x4e, 0x98, 0x9c, 0xff, 0x19, 0xa9, 0x6c, 0xed, 0x87, 0xc7, 0xcb, 0xd0, 0x7c,
+ 0x04, 0x9a, 0x61, 0xd5, 0xc6, 0x48, 0xae, 0x13, 0x14, 0xd7, 0xa1, 0xcf, 0xe9, 0xcf, 0x79, 0x50,
+ 0x01, 0x28, 0x34, 0x60, 0x6b, 0x40, 0x7a, 0xbb, 0x15, 0x91, 0x54, 0x76, 0x92, 0x9c, 0x0e, 0x2e,
+ 0x6d, 0xb0, 0xee, 0xd0, 0x41, 0x4a, 0x1b, 0xc0, 0x28, 0xdc, 0xee, 0xc1, 0xf0, 0x4a, 0xf0, 0x57,
+ 0x97, 0xd9, 0xc1, 0x04, 0x4c, 0x71, 0x05, 0xff, 0xf2, 0x9b, 0x1c, 0xc3, 0x6c, 0x89, 0x84, 0x44,
+ 0x5b, 0x87, 0x92, 0x3d, 0x61, 0xf9, 0x4d, 0xf0, 0xf7, 0x5b, 0xf4, 0x50, 0x46, 0x3e, 0x07, 0xd5,
+ 0xd1, 0x37, 0x09, 0xca, 0x98, 0x1d, 0xef, 0x01, 0x3f, 0xe9, 0x47, 0x9f, 0x64, 0xee, 0x94, 0x20,
+ 0x5f, 0xc8, 0xe9, 0x76, 0x90, 0xd5, 0xba, 0xda, 0x67, 0x26, 0x38, 0x88, 0x5d, 0x5f, 0xbb, 0x73,
+ 0x92, 0xe4, 0x6a, 0xc6, 0x91, 0xd3, 0xa3, 0xa5, 0xbc, 0x4e, 0xf2, 0x4c, 0x8c, 0x24, 0xb7, 0x63,
+ 0x71, 0x75, 0x3c, 0xb1, 0xc7, 0x49, 0xe6, 0x76, 0x07, 0x49, 0x9f, 0xc7, 0xed, 0xbe, 0xcd, 0x9e,
+ 0x27, 0x3b, 0xe7, 0x43, 0xd0, 0x65, 0x3e, 0x8b, 0x04, 0xb4, 0x56, 0x55, 0xfa, 0x19, 0x92, 0x9e,
+ 0xc8, 0xeb, 0xe5, 0xbc, 0x3f, 0x40, 0x54, 0x3e, 0xcd, 0xd3, 0xa5, 0x87, 0x9f, 0x68, 0x5f, 0x18,
+ 0x38, 0xa4, 0x9d, 0x06, 0x63, 0x40, 0x86, 0x40, 0xab, 0x87, 0x5c, 0xcc, 0xb5, 0x2a, 0xa7, 0xd9,
+ 0xa0, 0x88, 0xd6, 0x53, 0x73, 0x01, 0x8b, 0x7f, 0x82, 0xa4, 0x43, 0xc6, 0x52, 0x7d, 0x14, 0x97,
+ 0x7d, 0x44, 0xb2, 0x50, 0xdd, 0x5d, 0xc3, 0x62, 0x62, 0x00, 0xe2, 0xf2, 0x8e, 0xf2, 0x25, 0x9a,
+ 0xce, 0x4b, 0x20, 0xd7, 0x2e, 0x17, 0x56, 0x5a, 0x74, 0xa0, 0xac, 0x55, 0x3b, 0x4c, 0xec, 0x42,
+ 0xf9, 0x65, 0x96, 0xef, 0x93, 0xcc, 0xbf, 0x34, 0x9e, 0x86, 0x39, 0xe1, 0x26, 0x40, 0xb4, 0x64,
+ 0x3e, 0x28, 0xbf, 0xad, 0x46, 0xbd, 0x29, 0xd3, 0x3c, 0x0a, 0xd0, 0x91, 0x12, 0x2d, 0x6b, 0x4c,
+ 0xc6, 0xbe, 0x2f, 0x6e, 0x63, 0xd6, 0xbf, 0xef, 0xd5, 0x98, 0x08, 0x24, 0xe1, 0xd6, 0x42, 0x3e,
+ 0xca, 0xd5, 0xc2, 0xe7, 0xaf, 0x4e, 0x15, 0x7c, 0xbe, 0xad, 0x90, 0x90, 0x5f, 0xc8, 0xb2, 0xca,
+ 0xae, 0x0a, 0x00, 0xb1, 0xa2, 0x25, 0xca, 0x59, 0x42, 0xc5, 0xc3, 0x5b, 0x33, 0x03, 0x51, 0x31,
+ 0x40, 0x03, 0xf0, 0x29, 0xd8, 0x2e, 0xe7, 0x9d, 0xb0, 0x29, 0x51, 0xa1, 0x79, 0x08, 0x39, 0x09,
+ 0xfd, 0x19, 0x25, 0x06, 0x9b, 0xbc, 0x17, 0x21, 0xed, 0xca, 0x74, 0xb5, 0x27, 0xb9, 0x01, 0x54,
+ 0xfa, 0xfe, 0xa5, 0xff, 0x8a, 0x7d, 0x18, 0xed, 0x39, 0x25, 0xf0, 0x48, 0xd0, 0x09, 0x8d, 0xc0,
+ 0x1b, 0x42, 0x6a, 0x3e, 0x61, 0x55, 0xf6, 0x32, 0x41, 0xa4, 0xfc, 0x58, 0xe3, 0xa5, 0xae, 0x9f,
+ 0x63, 0xa0, 0x95, 0xa8, 0x14, 0xcf, 0x57, 0x6d, 0x7d, 0x63, 0x49, 0xa6, 0x92, 0xa7, 0x3e, 0x8b,
+ 0x95, 0x7e, 0x83, 0x2c, 0xbc, 0x73, 0x60, 0x3c, 0x4d, 0x09, 0x7a, 0x3f, 0xe2, 0xf6, 0xe7, 0x5c,
+ 0x23, 0xd6, 0xc5, 0xc2, 0x64, 0x6e, 0xbf, 0xa5, 0xc3, 0xf3, 0xa5, 0x3e, 0xf2, 0x18, 0xe6, 0xc3,
+ 0xd6, 0xc5, 0xa4, 0xc9, 0x17, 0x41, 0x9a, 0xe0, 0x59, 0xb2, 0x28, 0x10, 0xfc, 0x70, 0xfb, 0xcb,
+ 0x74, 0x72, 0x9a, 0x31, 0x00, 0x4b, 0xd6, 0x47, 0x32, 0x96, 0x91, 0x35, 0x4b, 0x20, 0xce, 0x72,
+ 0xa7, 0xd1, 0xc9, 0x81, 0x17, 0x79, 0x37, 0x5c, 0x1d, 0x28, 0x23, 0x89, 0x6c, 0xd7, 0x37, 0xa5,
+ 0x46, 0x5f, 0x87, 0x39, 0x36, 0xa5, 0xc6, 0x70, 0xe3, 0xc0, 0x96, 0x65, 0x2c, 0x21, 0xa9, 0x71,
+ 0x4d, 0xa9, 0x28, 0x3e, 0x98, 0x4e, 0x61, 0xc6, 0xd5, 0x5e, 0x7d, 0xb4, 0x86, 0xfd, 0xde, 0x92,
+ 0x25, 0xa2, 0x96, 0x9c, 0x23, 0xc7, 0xb9, 0x7d, 0xc9, 0x13, 0xb8, 0xfd, 0xdb, 0x74, 0xdc, 0xee,
+ 0x01, 0xd9, 0x75, 0x14, 0xe6, 0xe7, 0x44, 0xa6, 0x97, 0x80, 0xde, 0x4d, 0x7c, 0x24, 0x18, 0xb7,
+ 0x41, 0xb2, 0xc9, 0x97, 0x70, 0xfb, 0xed, 0xd3, 0xc4, 0xed, 0x1a, 0x83, 0x10, 0xc9, 0xed, 0x4f,
+ 0x8f, 0xf6, 0x74, 0xe8, 0x23, 0x1b, 0x64, 0x10, 0xcc, 0x0b, 0x56, 0x45, 0xaf, 0x12, 0x83, 0xa6,
+ 0xec, 0x6d, 0xb4, 0x07, 0x4d, 0x92, 0xd0, 0x41, 0x84, 0x4e, 0x6e, 0xb7, 0xd0, 0x6d, 0x57, 0xec,
+ 0xf7, 0xab, 0x94, 0x5e, 0x20, 0x83, 0xc6, 0x4b, 0x36, 0xbb, 0xcd, 0x06, 0x8b, 0x6f, 0x55, 0x2e,
+ 0xd2, 0x2e, 0x20, 0x00, 0x9d, 0xb2, 0xc6, 0x85, 0x84, 0x42, 0xa8, 0xed, 0xfa, 0x31, 0xe5, 0xa8,
+ 0x2f, 0x9d, 0xdb, 0x9f, 0x3a, 0x8f, 0xea, 0xe3, 0xd8, 0x00, 0xf5, 0x48, 0x54, 0xfc, 0x89, 0x97,
+ 0xdb, 0xdd, 0x6f, 0x57, 0xc6, 0xaa, 0xe8, 0xb8, 0xfd, 0x36, 0x20, 0xd8, 0x36, 0x9f, 0xdb, 0xff,
+ 0xc4, 0x3c, 0xcf, 0x97, 0x11, 0xc6, 0x40, 0x6e, 0x56, 0x6e, 0x36, 0x62, 0x0e, 0x2c, 0x52, 0x8a,
+ 0xa9, 0xb9, 0x88, 0x11, 0x87, 0x0c, 0x15, 0x13, 0x8c, 0x7d, 0xab, 0xa5, 0x3c, 0x88, 0xd4, 0xfc,
+ 0x5d, 0x3e, 0x2a, 0x8c, 0x7e, 0x70, 0xd1, 0x72, 0xf2, 0x04, 0xd0, 0x6d, 0x63, 0x1f, 0x34, 0x40,
+ 0x74, 0x42, 0x84, 0xb3, 0x9e, 0x6b, 0x11, 0x75, 0x1a, 0x23, 0x3a, 0xd7, 0x46, 0x00, 0x62, 0x4f,
+ 0x8a, 0x95, 0x3a, 0xa6, 0x6e, 0xf5, 0x38, 0x30, 0xcc, 0x50, 0xac, 0xba, 0xc5, 0x71, 0x2e, 0x8c,
+ 0xa3, 0x3f, 0x4e, 0xe2, 0x63, 0x54, 0xd6, 0x18, 0x54, 0x3e, 0x59, 0x15, 0xff, 0x43, 0x94, 0x41,
+ 0x75, 0x63, 0xe2, 0x67, 0x71, 0xfb, 0x9a, 0xe5, 0xe8, 0x15, 0x72, 0xda, 0x4f, 0x7b, 0x97, 0x87,
+ 0xe3, 0xde, 0xd7, 0x2b, 0x60, 0x6e, 0x19, 0x39, 0xfa, 0xa7, 0x90, 0xfe, 0xc9, 0xaf, 0x46, 0x20,
+ 0xb8, 0xfc, 0xd6, 0x14, 0xfc, 0xf9, 0xe2, 0x36, 0xa6, 0x01, 0x95, 0xed, 0x75, 0x69, 0xf9, 0x51,
+ 0xb5, 0x69, 0xd3, 0x06, 0x52, 0x85, 0xbf, 0x1b, 0x4f, 0x4b, 0x95, 0x97, 0xeb, 0x34, 0xb9, 0xb5,
+ 0x69, 0x13, 0x23, 0x52, 0xc4, 0xc1, 0x31, 0x42, 0x2f, 0x81, 0x72, 0x7a, 0x1c, 0x48, 0x42, 0x6d,
+ 0xcd, 0xf8, 0x53, 0xd0, 0xa9, 0x2e, 0x7d, 0x26, 0x3c, 0xb5, 0xc2, 0x93, 0xab, 0x05, 0xc8, 0xe6,
+ 0x5c, 0xdf, 0xa0, 0x8b, 0xc7, 0x81, 0xaa, 0x0e, 0x52, 0xe4, 0x06, 0x41, 0x2b, 0xba, 0x03, 0xe5,
+ 0x3d, 0x10, 0x4a, 0xca, 0x32, 0x56, 0x78, 0xd3, 0xb4, 0x2c, 0x53, 0xb5, 0x1c, 0xcd, 0x39, 0x53,
+ 0xbf, 0x72, 0x32, 0xcb, 0x7c, 0x5e, 0x05, 0x5f, 0x9c, 0xb9, 0x21, 0x20, 0xe8, 0xb2, 0x02, 0xad,
+ 0x41, 0xcf, 0x93, 0x8a, 0xa6, 0x74, 0xf5, 0xb8, 0x3e, 0x8f, 0x96, 0x73, 0xe1, 0x1e, 0x4d, 0x3d,
+ 0xb8, 0x78, 0xe8, 0x1a, 0x71, 0xd6, 0x90, 0x24, 0x0c, 0x80, 0x3b, 0xaf, 0x03, 0x47, 0xca, 0x3f,
+ 0xd3, 0x64, 0x56, 0x82, 0xbb, 0x93, 0x81, 0x8c, 0x65, 0x0b, 0x78, 0xa3, 0x78, 0x5b, 0xcb, 0xbd,
+ 0xe1, 0x11, 0x6f, 0x8f, 0xe3, 0x9f, 0x8d, 0xb2, 0x28, 0x7d, 0x1e, 0x96, 0x7f, 0x92, 0x3b, 0xec,
+ 0xb6, 0x2a, 0xad, 0x91, 0x74, 0x6d, 0x6a, 0xd3, 0x66, 0xb4, 0xa4, 0x62, 0x67, 0xcd, 0x92, 0x0c,
+ 0xf0, 0xc3, 0x7f, 0xf1, 0xcd, 0xe8, 0x33, 0x2b, 0x2c, 0xf0, 0x5e, 0x78, 0x4e, 0xad, 0xfd, 0x02,
+ 0xc3, 0x3a, 0x8c, 0xcd, 0x15, 0x68, 0xfe, 0xb4, 0x64, 0x9c, 0x6c, 0x6e, 0xb1, 0xda, 0x95, 0xba,
+ 0xa8, 0xa0, 0x95, 0x57, 0x77, 0x49, 0x82, 0x46, 0x8f, 0x2e, 0x9e, 0x4f, 0x5b, 0x75, 0x4b, 0x0b,
+ 0xbf, 0xfc, 0x0a, 0x49, 0x38, 0x9b, 0x0e, 0x42, 0xc3, 0xed, 0x6e, 0xf4, 0x28, 0x11, 0x10, 0x63,
+ 0x8a, 0x0d, 0x06, 0xd1, 0x7c, 0xd9, 0x60, 0xf2, 0x72, 0xbb, 0x12, 0x61, 0xd6, 0xbe, 0x08, 0xe8,
+ 0xe0, 0xbb, 0x08, 0xab, 0xce, 0xed, 0xce, 0xeb, 0xb0, 0x65, 0x29, 0xc6, 0x79, 0xaa, 0x4c, 0x85,
+ 0x43, 0x15, 0xf1, 0x57, 0x1f, 0x4d, 0x0c, 0x69, 0x41, 0x89, 0x4e, 0x39, 0x38, 0x2f, 0x14, 0x00,
+ 0x8e, 0x83, 0xe8, 0x86, 0x5b, 0x4c, 0x87, 0xaf, 0x1f, 0x87, 0xc1, 0xc7, 0x8e, 0xb1, 0xc8, 0x51,
+ 0x2f, 0x08, 0x20, 0x93, 0x29, 0xf4, 0xa0, 0x12, 0x2d, 0x31, 0xf6, 0x75, 0xed, 0x45, 0xa7, 0x64,
+ 0x80, 0x30, 0x4e, 0xab, 0x7c, 0xb9, 0x88, 0x42, 0x43, 0xe5, 0xbb, 0xb8, 0xc7, 0xe6, 0x35, 0x04,
+ 0xeb, 0x5b, 0xd4, 0x7a, 0x5f, 0xdb, 0xf0, 0x5e, 0x12, 0xb1, 0x74, 0x4b, 0xdb, 0xc0, 0xd5, 0x8a,
+ 0x01, 0xdd, 0x81, 0x6f, 0x39, 0x4c, 0xa2, 0x9b, 0xc5, 0x80, 0xfe, 0xf0, 0xb7, 0x01, 0x7c, 0xf4,
+ 0x47, 0x9e, 0x14, 0x03, 0x86, 0x2f, 0xbe, 0x05, 0x63, 0xc7, 0x99, 0xaf, 0x88, 0x83, 0x61, 0xe5,
+ 0x1b, 0x4d, 0x17, 0xb7, 0x14, 0xcb, 0x10, 0x62, 0xe9, 0x21, 0x35, 0x08, 0x80, 0x07, 0x81, 0xec,
+ 0x46, 0x46, 0x8d, 0xf9, 0x98, 0x1a, 0x31, 0x0d, 0x68, 0x7f, 0x86, 0xe8, 0xd5, 0x20, 0xa8, 0xc6,
+ 0x74, 0x71, 0xf3, 0x97, 0x76, 0xe5, 0xef, 0x3f, 0x52, 0xa7, 0xe1, 0x81, 0xec, 0x04, 0x34, 0xc0,
+ 0x15, 0x90, 0xf3, 0xfc, 0xfc, 0x2c, 0xc8, 0x00, 0x2c, 0x9d, 0x00, 0x4c, 0xa2, 0x3f, 0x03, 0x0c,
+ 0x36, 0xa5, 0x98, 0x8a, 0x7f, 0x27, 0x00, 0xa6, 0x9b, 0xfa, 0x85, 0x6b, 0x74, 0x4a, 0xa4, 0x79,
+ 0xc4, 0x9e, 0x0f, 0x6e, 0xbc, 0x64, 0xea, 0xa5, 0xac, 0xa4, 0x80, 0x10, 0x17, 0x10, 0x62, 0x20,
+ 0x37, 0x0f, 0x08, 0x7a, 0x10, 0x16, 0x65, 0x21, 0x35, 0x74, 0xd1, 0x14, 0xc8, 0x8e, 0x50, 0x65,
+ 0x7a, 0x29, 0x3d, 0x0d, 0x02, 0x61, 0x6b, 0x60, 0x73, 0x92, 0xd2, 0x7a, 0x1f, 0x65, 0x70, 0x49,
+ 0xa6, 0x5d, 0xf9, 0xb3, 0xfa, 0xf8, 0xcc, 0xdd, 0x2d, 0x24, 0x03, 0xc9, 0x39, 0x0b, 0x8e, 0x58,
+ 0x32, 0x47, 0x8f, 0x33, 0xc7, 0x70, 0x35, 0xff, 0xc3, 0x50, 0x15, 0xe4, 0xf6, 0x27, 0xeb, 0xb8,
+ 0x7d, 0x2b, 0x26, 0x70, 0xbb, 0x21, 0x0b, 0x6e, 0x37, 0xb6, 0x80, 0x3f, 0xc8, 0xb9, 0x0c, 0xd4,
+ 0x86, 0x5b, 0x74, 0x20, 0x12, 0x93, 0x73, 0xf4, 0x60, 0xd4, 0x21, 0xf7, 0x96, 0x84, 0x76, 0x7b,
+ 0x76, 0x96, 0xb2, 0xce, 0x17, 0x8c, 0x3a, 0x3b, 0xc8, 0x19, 0xa9, 0x32, 0xfa, 0x7e, 0x48, 0xd4,
+ 0x2c, 0x31, 0xd3, 0x2d, 0x97, 0xb9, 0xdd, 0x57, 0x40, 0x44, 0xfa, 0xaf, 0xb1, 0x17, 0xa5, 0x3c,
+ 0x25, 0xa1, 0x91, 0xe4, 0x29, 0x10, 0xc4, 0xc5, 0xb6, 0x12, 0x73, 0x77, 0xc2, 0x15, 0xba, 0x49,
+ 0x16, 0xdb, 0x68, 0xea, 0x27, 0xcd, 0xb1, 0x90, 0x7e, 0x5c, 0xe0, 0x52, 0xfa, 0xc1, 0xfb, 0x41,
+ 0x66, 0x22, 0xe9, 0x6a, 0x45, 0xcf, 0x10, 0xa6, 0x1e, 0xfb, 0x52, 0x60, 0x7c, 0x8f, 0xb1, 0x25,
+ 0x3c, 0xc5, 0x00, 0xb2, 0xcc, 0xed, 0xcf, 0x06, 0x73, 0x72, 0xac, 0xff, 0x2b, 0xb6, 0x2d, 0xdc,
+ 0xac, 0x4c, 0x86, 0x25, 0xcb, 0xd1, 0x42, 0x4a, 0xc8, 0x0e, 0xda, 0xec, 0x90, 0x39, 0x63, 0x28,
+ 0x9f, 0x08, 0x63, 0x2b, 0x9c, 0x0e, 0xbd, 0xdc, 0x65, 0xca, 0xc7, 0x18, 0xb6, 0x47, 0x12, 0x62,
+ 0x26, 0x5e, 0x34, 0xdd, 0x22, 0xad, 0xb1, 0x7e, 0x6e, 0x17, 0xee, 0xae, 0x88, 0x47, 0x0d, 0x23,
+ 0x4c, 0xac, 0x55, 0xaa, 0xd4, 0x4a, 0xc9, 0x1a, 0xdc, 0x3c, 0xbf, 0x4f, 0x1c, 0xd0, 0x0b, 0x69,
+ 0x90, 0x1d, 0x8f, 0xe5, 0xf6, 0xbf, 0x08, 0x23, 0xbd, 0x18, 0x27, 0x47, 0xdb, 0xad, 0x25, 0x61,
+ 0xd6, 0xec, 0xdc, 0x80, 0x51, 0xa9, 0xa7, 0x31, 0x5c, 0x9c, 0xef, 0x45, 0xca, 0x99, 0xdd, 0xc9,
+ 0x71, 0xb2, 0xe6, 0x75, 0xe3, 0xe9, 0xec, 0x12, 0x4d, 0xb6, 0x15, 0x9b, 0x7f, 0xa6, 0x86, 0x78,
+ 0x55, 0xcf, 0x87, 0x73, 0xbe, 0x27, 0x10, 0x87, 0x2c, 0xdc, 0x70, 0xe0, 0xee, 0x78, 0x08, 0x17,
+ 0x39, 0x4f, 0xce, 0xb4, 0xf9, 0xd8, 0x33, 0x6c, 0x2f, 0xa2, 0xb4, 0x41, 0xb3, 0x1d, 0xba, 0x3d,
+ 0xa7, 0x76, 0xe3, 0xf6, 0x8f, 0xa1, 0x39, 0xe2, 0xdc, 0x00, 0x08, 0x1f, 0x19, 0xec, 0x6b, 0x60,
+ 0x39, 0xb3, 0x47, 0xb2, 0x68, 0x09, 0x0b, 0xb2, 0x10, 0xa2, 0x36, 0xaf, 0x2b, 0xaa, 0x8f, 0x6e,
+ 0x3d, 0x1b, 0xdd, 0x21, 0xea, 0xa5, 0x3c, 0x9d, 0x4d, 0xf9, 0xf5, 0xd8, 0xe0, 0xd6, 0x8e, 0xe8,
+ 0x0d, 0xb3, 0x2b, 0xd2, 0xdc, 0xa0, 0xc2, 0x54, 0x2d, 0x5d, 0xc8, 0x8f, 0xf1, 0x8e, 0x5d, 0x48,
+ 0x06, 0x92, 0x6c, 0x56, 0xe5, 0x4e, 0x04, 0x5d, 0x77, 0x29, 0x4f, 0x5b, 0xb5, 0x7d, 0x3c, 0x84,
+ 0xf7, 0xb9, 0xce, 0x9f, 0x42, 0xb8, 0x6f, 0x53, 0xd2, 0xef, 0x57, 0x75, 0xe1, 0xde, 0x5c, 0x9b,
+ 0xf2, 0x40, 0x58, 0xc8, 0x05, 0x4f, 0x80, 0x92, 0x97, 0x6e, 0xe4, 0xa1, 0xef, 0x1c, 0x47, 0xb6,
+ 0x6a, 0x49, 0x99, 0xba, 0xfd, 0x6a, 0x74, 0xfb, 0xfa, 0xa9, 0x8c, 0x09, 0xda, 0xaa, 0xc7, 0x58,
+ 0x61, 0x6a, 0xd5, 0x4e, 0x96, 0x11, 0xee, 0x09, 0x6c, 0x8e, 0x0b, 0x6c, 0xd6, 0x2b, 0xce, 0x78,
+ 0x55, 0x91, 0xc7, 0xda, 0x03, 0xf6, 0x18, 0x20, 0x22, 0xb0, 0x59, 0x07, 0xa1, 0xbf, 0x92, 0xa5,
+ 0x56, 0x97, 0x24, 0xda, 0x95, 0xf4, 0xf8, 0x11, 0xe2, 0x07, 0x72, 0x5a, 0xb5, 0x84, 0x15, 0xee,
+ 0x91, 0x2c, 0xfa, 0xf0, 0x4c, 0x10, 0xe3, 0x98, 0x2c, 0x14, 0xe5, 0xfb, 0x13, 0x29, 0x45, 0x79,
+ 0x8d, 0x79, 0x81, 0x67, 0xa3, 0xe9, 0x6c, 0xad, 0x56, 0xa8, 0x47, 0xc5, 0x8d, 0xa0, 0x52, 0xae,
+ 0x1f, 0xb9, 0x21, 0x6e, 0xd6, 0xc1, 0x02, 0x8a, 0x95, 0xd1, 0x0c, 0xf7, 0x76, 0xe3, 0xbd, 0x79,
+ 0xfa, 0xaa, 0xc7, 0x59, 0x21, 0x57, 0xda, 0xa2, 0xaf, 0x7a, 0x99, 0x65, 0x79, 0xa3, 0xb1, 0xe5,
+ 0x73, 0x64, 0x68, 0x78, 0x6e, 0x9c, 0xf4, 0xb2, 0x61, 0xe2, 0xa9, 0xea, 0xaf, 0x18, 0x7f, 0x20,
+ 0x90, 0x95, 0x55, 0xc2, 0x66, 0x59, 0x73, 0xb3, 0xb3, 0xec, 0xca, 0xca, 0x19, 0x88, 0x2f, 0x1e,
+ 0xe8, 0xf0, 0x26, 0xb1, 0x2c, 0xe8, 0x4c, 0xcd, 0x25, 0xae, 0x66, 0x06, 0xba, 0xdc, 0x87, 0x9a,
+ 0x71, 0x2b, 0x25, 0xe2, 0xc4, 0x03, 0xf4, 0xa4, 0x85, 0xe9, 0xa2, 0xee, 0x62, 0xdf, 0xf1, 0x2c,
+ 0x27, 0x03, 0x7e, 0xcb, 0x1a, 0xd8, 0x12, 0xa7, 0xac, 0xa5, 0x33, 0xd1, 0x13, 0x6f, 0xcd, 0x25,
+ 0x7e, 0xba, 0xf4, 0x98, 0x94, 0xae, 0xf9, 0x00, 0xa1, 0xc9, 0xf2, 0x66, 0x35, 0x4d, 0x7a, 0xf0,
+ 0x30, 0x3e, 0xf8, 0xc2, 0x48, 0xbf, 0xd1, 0x0d, 0x5c, 0x0f, 0x54, 0x18, 0x02, 0x15, 0x71, 0x56,
+ 0x6b, 0xae, 0x2d, 0x60, 0x8b, 0x86, 0x15, 0x87, 0x1f, 0xe4, 0x10, 0x04, 0x06, 0x8e, 0xa6, 0x70,
+ 0x96, 0xa5, 0x7b, 0xd0, 0x4e, 0x06, 0xb0, 0x2b, 0xc7, 0xe6, 0xa8, 0x0b, 0x08, 0x21, 0x25, 0xc8,
+ 0xf7, 0x4f, 0xe2, 0xa4, 0x14, 0x03, 0xb9, 0x10, 0xe9, 0xe1, 0x2b, 0x82, 0x16, 0x9e, 0x1e, 0x9c,
+ 0xe8, 0x19, 0x63, 0x5f, 0x42, 0x2f, 0x44, 0x9b, 0xb1, 0x03, 0x07, 0xb0, 0x64, 0x3a, 0xce, 0xa5,
+ 0x5e, 0x00, 0xab, 0x6c, 0xbe, 0x90, 0x0b, 0x8c, 0x81, 0x1c, 0x16, 0xf4, 0x41, 0x1b, 0xb0, 0xe2,
+ 0x48, 0xe1, 0x74, 0x2e, 0x64, 0x60, 0x32, 0x9d, 0x8d, 0x0d, 0xf3, 0x5b, 0x7b, 0x20, 0x07, 0x5a,
+ 0xf4, 0x68, 0x27, 0x9e, 0x8c, 0x93, 0x92, 0x0c, 0x10, 0x8a, 0x99, 0x2e, 0xc6, 0x36, 0x91, 0x73,
+ 0x14, 0x97, 0xbc, 0x2c, 0x8a, 0x60, 0x38, 0xac, 0x2d, 0x7f, 0x97, 0x52, 0x04, 0x3d, 0x94, 0xd7,
+ 0xee, 0xa5, 0xeb, 0x46, 0xe7, 0x84, 0x9b, 0xb5, 0xba, 0x51, 0x51, 0x4a, 0x5c, 0x24, 0xee, 0x00,
+ 0x40, 0xdc, 0x2f, 0x0b, 0x17, 0x73, 0x4b, 0x22, 0x72, 0x9d, 0xb8, 0x5d, 0x65, 0xb7, 0x29, 0x35,
+ 0x5a, 0x2a, 0xdd, 0xde, 0xf4, 0x08, 0xc6, 0xf9, 0x61, 0x12, 0xcb, 0xd8, 0x95, 0x77, 0xc2, 0x43,
+ 0x09, 0x95, 0xeb, 0x4d, 0x90, 0x36, 0x30, 0xf0, 0x97, 0xee, 0x0d, 0x4d, 0x97, 0xb4, 0x4b, 0x33,
+ 0x5a, 0x91, 0x79, 0x97, 0xf8, 0xf1, 0xa6, 0xf0, 0xa0, 0x83, 0x59, 0xa7, 0xf3, 0x7d, 0x5b, 0xa2,
+ 0x57, 0xf6, 0x06, 0xa1, 0x1a, 0xd1, 0x26, 0x86, 0x1f, 0xa6, 0x3b, 0x7f, 0x81, 0x5c, 0x27, 0x6e,
+ 0x0c, 0xe5, 0xda, 0x65, 0xf9, 0x12, 0x28, 0x46, 0x96, 0x55, 0x89, 0x56, 0xc7, 0xe3, 0xf6, 0xb9,
+ 0xb0, 0x02, 0xd2, 0x58, 0x7e, 0xea, 0xf2, 0x00, 0xdd, 0xd2, 0x2f, 0x83, 0xc1, 0xaa, 0xbd, 0x08,
+ 0x0e, 0x08, 0x7c, 0x5e, 0xc9, 0x55, 0x0d, 0xd2, 0x4d, 0x52, 0x21, 0x2d, 0x5d, 0x17, 0xc4, 0x9c,
+ 0xaa, 0x91, 0xe4, 0x6d, 0x50, 0xe9, 0xf9, 0x72, 0x1c, 0xa8, 0x75, 0xa0, 0x42, 0x9b, 0x9d, 0x65,
+ 0x45, 0x99, 0x73, 0x53, 0xed, 0x8a, 0x79, 0x1f, 0x29, 0x23, 0xa9, 0x3a, 0x42, 0x49, 0x94, 0x2a,
+ 0x41, 0xf2, 0xfc, 0x24, 0x66, 0x0d, 0xc8, 0x19, 0x0d, 0x99, 0xfb, 0x25, 0x08, 0xe0, 0xcc, 0xdd,
+ 0xd2, 0x3a, 0x2d, 0x26, 0x03, 0x8a, 0xec, 0xba, 0x04, 0x8e, 0x2e, 0x83, 0xdb, 0xb7, 0x06, 0x62,
+ 0x01, 0x3e, 0x0a, 0x83, 0xe3, 0x88, 0x5a, 0x6d, 0x92, 0xef, 0x7f, 0xbd, 0x78, 0xb2, 0xd0, 0x89,
+ 0x27, 0x86, 0x34, 0xee, 0x06, 0xc7, 0x09, 0x21, 0xd8, 0xbe, 0xc9, 0xae, 0xd3, 0x5c, 0xcd, 0x47,
+ 0x18, 0x7b, 0x0a, 0x1d, 0xdc, 0xbe, 0x54, 0x03, 0xf1, 0x88, 0x5f, 0xb2, 0x09, 0x0d, 0xf2, 0xda,
+ 0x28, 0x70, 0x37, 0x9a, 0x1d, 0x0f, 0xca, 0x15, 0xb3, 0x59, 0xaf, 0xd8, 0xc3, 0xb2, 0x3d, 0x55,
+ 0xdb, 0xc2, 0x59, 0x7e, 0x4c, 0xd5, 0xb6, 0xb0, 0x30, 0x21, 0xae, 0xca, 0xb4, 0x5a, 0x88, 0xaa,
+ 0xda, 0xc6, 0x5a, 0xb8, 0x9a, 0x9f, 0xe2, 0x24, 0xf7, 0xbd, 0x18, 0x96, 0x70, 0x83, 0xed, 0x11,
+ 0x07, 0xc3, 0x5f, 0x06, 0x83, 0x0d, 0x7a, 0x7b, 0x1f, 0xb7, 0x6f, 0xed, 0xb8, 0xd9, 0xe2, 0xe0,
+ 0x02, 0x7e, 0xac, 0x38, 0xb8, 0x94, 0xbf, 0xc7, 0x37, 0xb6, 0x6a, 0xc7, 0xb8, 0x7b, 0x97, 0xf2,
+ 0x13, 0x6a, 0xdf, 0x1a, 0x8f, 0x0c, 0x4a, 0x36, 0x35, 0x0b, 0x97, 0x89, 0xc7, 0x5b, 0x43, 0x4b,
+ 0x8c, 0x4a, 0xf4, 0x30, 0x33, 0xe7, 0x84, 0x0d, 0xe7, 0xbe, 0xaf, 0x52, 0xf4, 0xe1, 0x10, 0x31,
+ 0x26, 0x78, 0x7d, 0xb1, 0xd5, 0x43, 0x2c, 0xee, 0xc7, 0xed, 0xc2, 0x23, 0x64, 0x70, 0xd7, 0xd7,
+ 0x18, 0x48, 0xdc, 0xe6, 0x06, 0x80, 0x4d, 0x2c, 0x9e, 0x0c, 0xba, 0x1e, 0x00, 0x1b, 0x4b, 0xc5,
+ 0x19, 0x09, 0x12, 0xbd, 0xb7, 0xb9, 0x9a, 0x52, 0xa8, 0xa9, 0x1e, 0xc2, 0xad, 0x13, 0x4e, 0xc4,
+ 0xa3, 0x69, 0xd1, 0x13, 0x61, 0xcf, 0x92, 0xe9, 0x1a, 0x59, 0x95, 0x65, 0xf3, 0x83, 0x89, 0xc1,
+ 0x43, 0x94, 0x88, 0x60, 0x34, 0xa4, 0xd2, 0xc2, 0xb9, 0x36, 0x05, 0x46, 0x50, 0xb4, 0x0e, 0x30,
+ 0x74, 0x15, 0x63, 0x64, 0x56, 0x11, 0x26, 0xad, 0x8b, 0xaa, 0x7a, 0x39, 0xc0, 0xf0, 0x79, 0x18,
+ 0xb6, 0x08, 0x13, 0x02, 0x42, 0x67, 0x40, 0xe8, 0x56, 0xbe, 0x99, 0x45, 0x69, 0xb6, 0x29, 0x2e,
+ 0x35, 0x79, 0xf6, 0x5c, 0x1b, 0x67, 0x6c, 0xc9, 0xb2, 0x05, 0x35, 0x27, 0xcb, 0x0e, 0x4b, 0x44,
+ 0x17, 0xd5, 0x47, 0xad, 0x61, 0x4c, 0xd7, 0x5a, 0x18, 0xa4, 0x44, 0x87, 0x02, 0xfe, 0xa9, 0xda,
+ 0x13, 0xbc, 0x39, 0x64, 0x4e, 0x28, 0xcf, 0x54, 0xc0, 0x71, 0x91, 0xcb, 0x34, 0xe4, 0x49, 0x2d,
+ 0xf1, 0x42, 0xe2, 0x90, 0x68, 0x08, 0x9a, 0x56, 0x52, 0xa6, 0x6f, 0x4a, 0x8a, 0xfe, 0x74, 0x12,
+ 0x84, 0xf3, 0x49, 0x31, 0x57, 0xe0, 0x47, 0x82, 0x8c, 0x2b, 0x23, 0xae, 0x29, 0x63, 0x38, 0x9c,
+ 0xcf, 0xd0, 0xf8, 0xf6, 0x39, 0xf7, 0xa6, 0xd3, 0xad, 0x89, 0x4f, 0x60, 0x3e, 0x4e, 0x1e, 0x9e,
+ 0x7d, 0x37, 0xd0, 0xe8, 0x59, 0xa2, 0x51, 0xef, 0xac, 0x7a, 0x29, 0x4c, 0xca, 0xd6, 0x78, 0xbe,
+ 0x1a, 0x17, 0x9e, 0xa3, 0x17, 0xdb, 0x18, 0xd5, 0xa1, 0x67, 0x65, 0xa3, 0xa5, 0x4b, 0x54, 0x9e,
+ 0x50, 0xe9, 0x0b, 0x59, 0x49, 0x20, 0xb1, 0x4c, 0xaf, 0x44, 0xa9, 0x24, 0x86, 0x2a, 0x45, 0x77,
+ 0x87, 0x38, 0x90, 0xcf, 0xbd, 0xa1, 0x3a, 0x03, 0x70, 0x16, 0x72, 0xd6, 0xaf, 0xe5, 0xe4, 0x0e,
+ 0x71, 0x70, 0x1a, 0x97, 0xea, 0x09, 0xd5, 0x91, 0xe6, 0xfe, 0x76, 0x2e, 0x53, 0x2d, 0xda, 0x20,
+ 0x81, 0x82, 0x7e, 0x75, 0xb1, 0xc6, 0xd3, 0x60, 0xb3, 0xa2, 0x6a, 0xe3, 0xf4, 0x75, 0x4f, 0x4f,
+ 0x64, 0x53, 0x7c, 0x37, 0xbc, 0x90, 0xd5, 0xae, 0x0b, 0x86, 0x0e, 0x00, 0x92, 0xa3, 0xad, 0x0b,
+ 0xab, 0x9b, 0xbd, 0xa4, 0x43, 0x98, 0x64, 0xec, 0x4b, 0x87, 0xd0, 0x32, 0xa6, 0x4e, 0xf3, 0x60,
+ 0x5d, 0xbc, 0x31, 0x7d, 0x49, 0x07, 0xdf, 0x63, 0x6c, 0x59, 0xd2, 0xc1, 0xbd, 0xeb, 0x91, 0xd3,
+ 0x22, 0x03, 0xbe, 0x30, 0xa3, 0x7b, 0x38, 0x8c, 0x50, 0x51, 0x73, 0x87, 0x19, 0x79, 0xeb, 0x11,
+ 0x70, 0x44, 0x27, 0x0d, 0x62, 0x60, 0x1a, 0x77, 0x78, 0x22, 0x97, 0xea, 0x27, 0xe7, 0xc5, 0x53,
+ 0x06, 0x79, 0xe5, 0x11, 0xf1, 0x16, 0xd0, 0x35, 0x68, 0x1a, 0x12, 0x1e, 0x56, 0xb1, 0x2e, 0xa3,
+ 0xf0, 0x9a, 0x44, 0xe8, 0xc9, 0x1d, 0x8e, 0x36, 0xca, 0x99, 0x47, 0x48, 0x13, 0x40, 0x52, 0xb0,
+ 0x01, 0x80, 0x27, 0x67, 0xc4, 0xe3, 0x6a, 0xe9, 0x62, 0xba, 0xe9, 0x2a, 0xff, 0x17, 0x18, 0xb9,
+ 0x75, 0xe4, 0xc8, 0x77, 0xed, 0x0f, 0xb8, 0x0f, 0x50, 0x32, 0x03, 0x9e, 0xef, 0x0b, 0xda, 0x15,
+ 0x90, 0x8d, 0xb9, 0xeb, 0xe2, 0x1e, 0x7b, 0x34, 0xee, 0x51, 0x61, 0x22, 0x4c, 0xf3, 0x1e, 0xd3,
+ 0x2d, 0xd0, 0x4f, 0xe1, 0x7f, 0x7d, 0x13, 0xc0, 0x73, 0x45, 0x71, 0xef, 0xba, 0xb9, 0x7d, 0x6e,
+ 0x39, 0x8d, 0x09, 0x8c, 0x0a, 0x01, 0x04, 0xbd, 0xab, 0x8f, 0x4f, 0x5b, 0x6d, 0x0c, 0x50, 0x9a,
+ 0x74, 0x4b, 0xc0, 0xab, 0x00, 0x4d, 0x4b, 0xe4, 0xe4, 0x23, 0xe4, 0x38, 0x52, 0x31, 0x00, 0x54,
+ 0x5c, 0x90, 0x53, 0x8e, 0xa0, 0x91, 0x6a, 0x15, 0x9b, 0x0d, 0x90, 0x2e, 0x42, 0x4d, 0x83, 0xa9,
+ 0x51, 0x98, 0x6c, 0x74, 0xd7, 0xb4, 0xf0, 0x31, 0xa6, 0x21, 0x1c, 0xc4, 0xe3, 0xe3, 0x60, 0x90,
+ 0x71, 0x46, 0xf7, 0x92, 0x36, 0x18, 0x08, 0x47, 0x19, 0xe1, 0xbd, 0x21, 0xe8, 0x87, 0xf5, 0xa8,
+ 0xda, 0xc1, 0xb2, 0x8c, 0x9c, 0xc4, 0x0a, 0x7d, 0x77, 0x9d, 0x98, 0x16, 0xc8, 0x3e, 0x72, 0x07,
+ 0xb7, 0xe2, 0xa3, 0x30, 0x88, 0xb4, 0x2b, 0x1f, 0x31, 0xea, 0x61, 0x84, 0xc5, 0x6f, 0x3a, 0xc9,
+ 0x3f, 0x5e, 0x65, 0x62, 0xb8, 0xb7, 0x1a, 0x45, 0xd0, 0x86, 0xb7, 0x9b, 0x6a, 0xae, 0x0a, 0x0b,
+ 0x0f, 0xa3, 0x45, 0x33, 0x79, 0x0f, 0xd3, 0xf0, 0xe9, 0x5c, 0xf9, 0xac, 0xe4, 0xda, 0xb4, 0xe5,
+ 0xfe, 0x0c, 0x72, 0x52, 0x70, 0xcb, 0xe6, 0xee, 0x12, 0x0d, 0xfa, 0x4a, 0xe5, 0x9b, 0x79, 0x6a,
+ 0xe4, 0xeb, 0x86, 0x98, 0xda, 0x9d, 0x89, 0x0e, 0x37, 0x48, 0x45, 0x1d, 0x8a, 0x84, 0x5b, 0xd1,
+ 0x00, 0x17, 0x58, 0xb7, 0xac, 0x49, 0xea, 0x6f, 0x67, 0x9a, 0x43, 0x0d, 0xdc, 0x61, 0x0f, 0x39,
+ 0x56, 0xd5, 0xf0, 0xeb, 0xaa, 0xc1, 0x88, 0x2d, 0x11, 0xa2, 0xfb, 0x77, 0xbe, 0x99, 0x58, 0x3c,
+ 0x12, 0x2c, 0xb6, 0xf8, 0xb8, 0x2a, 0x4f, 0xab, 0xe8, 0x6e, 0x35, 0x9e, 0x5e, 0x59, 0x75, 0x2b,
+ 0x0a, 0xa6, 0x3f, 0x62, 0x06, 0x90, 0xa7, 0x99, 0xf5, 0x20, 0x38, 0x9e, 0x81, 0x59, 0xc0, 0x23,
+ 0x63, 0x0b, 0x77, 0x78, 0x1a, 0x69, 0xd7, 0xfc, 0x7a, 0x19, 0xf6, 0x6c, 0xfc, 0x9d, 0x2f, 0x06,
+ 0x0a, 0x47, 0xd4, 0x42, 0x8b, 0x6f, 0x1c, 0x14, 0x5a, 0x97, 0x45, 0x6e, 0x59, 0x20, 0x36, 0xb6,
+ 0x8a, 0xb7, 0x03, 0xfc, 0x7d, 0x04, 0xb7, 0x2a, 0xa5, 0x4a, 0x7d, 0xff, 0x37, 0xdc, 0xee, 0x53,
+ 0x6c, 0x1b, 0x64, 0xa4, 0x7e, 0xb6, 0x87, 0x5c, 0xf4, 0x0c, 0xce, 0x62, 0xdb, 0x27, 0xb6, 0x81,
+ 0x6f, 0x4a, 0x21, 0x5e, 0xdf, 0xa7, 0xb0, 0x26, 0x60, 0xd2, 0xc2, 0x88, 0x1e, 0xc0, 0x8f, 0x8d,
+ 0x98, 0x11, 0x0a, 0x40, 0x25, 0xae, 0x3c, 0xb7, 0x8f, 0x43, 0x3b, 0x3b, 0x15, 0x28, 0x71, 0xb5,
+ 0x08, 0xf7, 0x00, 0x1f, 0xb5, 0xf4, 0x64, 0x5d, 0xdb, 0x35, 0x17, 0xec, 0x86, 0x77, 0xcc, 0x42,
+ 0xf9, 0x19, 0xd6, 0x67, 0x84, 0xea, 0x1e, 0x7a, 0xc0, 0xa2, 0xb5, 0x2b, 0x8e, 0x21, 0x7c, 0x00,
+ 0xa7, 0xc2, 0xf6, 0xfa, 0x62, 0x33, 0xea, 0xc6, 0x2e, 0x5b, 0xc8, 0x4f, 0x84, 0x14, 0x11, 0xcf,
+ 0x64, 0x3a, 0x80, 0xb9, 0xb5, 0xe1, 0x19, 0xa9, 0xbe, 0xae, 0x8c, 0x3d, 0x0b, 0xab, 0x1e, 0x5f,
+ 0xc8, 0x7f, 0x5d, 0x12, 0xe6, 0x5c, 0x9b, 0x81, 0x7b, 0x82, 0xaf, 0x50, 0xac, 0x34, 0x05, 0xc2,
+ 0x1d, 0xda, 0x92, 0x70, 0xe7, 0x3a, 0x5a, 0x5f, 0x7a, 0xb7, 0xfe, 0x37, 0x6a, 0x7d, 0x2e, 0xad,
+ 0xcf, 0x0d, 0xd5, 0xf3, 0xdb, 0x4b, 0x34, 0xce, 0x7c, 0x5a, 0x97, 0x3a, 0x5c, 0xf7, 0x3c, 0xc0,
+ 0xbd, 0x4a, 0xf7, 0x1a, 0x17, 0x0e, 0xd7, 0x2d, 0x86, 0xb1, 0x66, 0xa6, 0x61, 0xdd, 0xf4, 0xbb,
+ 0x38, 0x9f, 0x46, 0x4b, 0x98, 0x1a, 0x30, 0xf9, 0xb9, 0x9a, 0x6c, 0x78, 0xac, 0x5a, 0xb2, 0x90,
+ 0xab, 0x59, 0x81, 0x89, 0x60, 0xf8, 0xc2, 0xae, 0x1c, 0xf8, 0x4d, 0xad, 0xda, 0x1e, 0x58, 0x28,
+ 0xaf, 0x0b, 0x08, 0x10, 0x6f, 0x98, 0x7a, 0xb9, 0xb7, 0xdc, 0x5e, 0x4d, 0x38, 0x58, 0x64, 0xb1,
+ 0x29, 0xac, 0xeb, 0xde, 0x7f, 0xd4, 0xcc, 0x36, 0xaa, 0xd8, 0xd2, 0x1a, 0xb1, 0x85, 0x33, 0x37,
+ 0x7a, 0x47, 0x6c, 0x3d, 0xa0, 0x4e, 0xe8, 0xea, 0xf2, 0xb4, 0xb2, 0x19, 0x62, 0xfa, 0x9b, 0xde,
+ 0x88, 0x17, 0x17, 0x80, 0x0d, 0x7b, 0x0f, 0x77, 0x20, 0xa5, 0xf1, 0xef, 0x3d, 0x06, 0x2e, 0xba,
+ 0x85, 0x7b, 0xab, 0xc1, 0xd0, 0x50, 0x35, 0xc8, 0x0a, 0x7a, 0xe5, 0x27, 0xaf, 0xb0, 0x23, 0xdb,
+ 0xc4, 0x5b, 0xe1, 0x07, 0xce, 0xa7, 0x40, 0x2e, 0x9b, 0x09, 0x89, 0x2b, 0x97, 0x76, 0xec, 0x63,
+ 0x16, 0xbe, 0xb2, 0x14, 0x99, 0x46, 0xba, 0x9a, 0x80, 0x70, 0xd3, 0xae, 0xfc, 0x9c, 0x3e, 0x6b,
+ 0x9d, 0xb3, 0x71, 0xaf, 0x97, 0x57, 0x1b, 0xc0, 0x50, 0xfe, 0x78, 0x12, 0x7d, 0x02, 0xad, 0x5d,
+ 0x16, 0xda, 0xf9, 0x5d, 0x54, 0x3f, 0x19, 0x60, 0x0e, 0x5c, 0x4d, 0xc2, 0x3c, 0x79, 0xfe, 0x0c,
+ 0x0d, 0x4d, 0xcd, 0xb2, 0x9c, 0x36, 0x40, 0xad, 0x2c, 0x55, 0xb1, 0x28, 0x3f, 0x69, 0x60, 0x18,
+ 0xa5, 0xe8, 0x5f, 0xd4, 0xed, 0xf8, 0xd2, 0x30, 0xc6, 0x19, 0x0f, 0xfc, 0x54, 0x66, 0xa8, 0x68,
+ 0x95, 0x5f, 0xb6, 0x0f, 0x5f, 0xd7, 0xe8, 0x4e, 0x0c, 0x86, 0xbf, 0x5c, 0x8d, 0x87, 0x66, 0x5a,
+ 0x31, 0x7b, 0xd8, 0x71, 0x96, 0x38, 0xae, 0xe6, 0x13, 0x5a, 0xd2, 0x4b, 0x15, 0xd1, 0xdc, 0xee,
+ 0x0a, 0x0d, 0xee, 0xe7, 0x10, 0xc1, 0x0f, 0x72, 0x36, 0xc4, 0x9e, 0x84, 0xe4, 0x6e, 0x72, 0x4e,
+ 0x74, 0x09, 0x63, 0x25, 0x39, 0xed, 0xd9, 0x44, 0x38, 0x6b, 0x57, 0x4a, 0xaf, 0xa8, 0xb9, 0x8e,
+ 0x87, 0x9c, 0x13, 0xb7, 0x1b, 0x58, 0x08, 0x95, 0x84, 0xa9, 0x52, 0xea, 0x3c, 0x63, 0x33, 0x39,
+ 0x26, 0x3d, 0x31, 0xdf, 0xd8, 0x13, 0xe9, 0x21, 0x6d, 0x5c, 0xcd, 0x97, 0xe8, 0x1c, 0x2d, 0x9d,
+ 0xc1, 0x1d, 0x1e, 0x71, 0x7b, 0x3c, 0x23, 0xa5, 0x46, 0x83, 0x7b, 0x17, 0x26, 0x73, 0xbb, 0x53,
+ 0x35, 0x56, 0xa5, 0x33, 0x36, 0x18, 0x76, 0xc4, 0x43, 0xbd, 0x64, 0x4b, 0x24, 0x39, 0x27, 0xa4,
+ 0x27, 0x16, 0x13, 0x4b, 0xb3, 0xbc, 0x27, 0xa0, 0xde, 0x2d, 0x5a, 0xe1, 0xf7, 0x0c, 0x45, 0x92,
+ 0x7e, 0x4f, 0x60, 0x56, 0xae, 0x3d, 0x2b, 0x5b, 0x19, 0xf8, 0x9f, 0xd0, 0xb0, 0x39, 0x97, 0xfb,
+ 0xaf, 0x11, 0x73, 0x2b, 0xe8, 0xc9, 0x65, 0xf6, 0x1c, 0x9e, 0x68, 0xef, 0xbe, 0xc5, 0x0e, 0x49,
+ 0x96, 0x13, 0xf7, 0x5b, 0x5a, 0x25, 0x73, 0x73, 0xac, 0xdf, 0xd8, 0x17, 0xd9, 0xcc, 0xb9, 0xfe,
+ 0x1b, 0x3d, 0xd1, 0x76, 0x8d, 0xf4, 0x84, 0x46, 0xca, 0xeb, 0xe0, 0x76, 0x5f, 0x80, 0x84, 0xbc,
+ 0xff, 0x4b, 0xcc, 0xc3, 0xb4, 0xe1, 0xe6, 0xa3, 0x93, 0x73, 0x2e, 0xe7, 0x66, 0x5b, 0x03, 0x15,
+ 0xf1, 0x36, 0xe5, 0x8f, 0x57, 0x83, 0xc7, 0x8d, 0xfc, 0x74, 0x08, 0x98, 0xb8, 0x9a, 0x77, 0x91,
+ 0xdc, 0xa6, 0x80, 0x78, 0x0e, 0x3c, 0x61, 0x24, 0x08, 0x9b, 0x8c, 0x3b, 0x9d, 0x07, 0x60, 0x1e,
+ 0x2c, 0x4d, 0x0c, 0x3b, 0xc9, 0x13, 0xf3, 0x70, 0xe7, 0xa8, 0x62, 0xbe, 0x04, 0x31, 0xa2, 0x39,
+ 0x86, 0x1c, 0x23, 0x9e, 0x84, 0x5b, 0x52, 0x65, 0xdc, 0xf4, 0x4a, 0x85, 0xb4, 0x4a, 0x79, 0xfe,
+ 0xfe, 0xaf, 0xb9, 0xdd, 0xbd, 0xec, 0x39, 0x29, 0xe7, 0x6c, 0x42, 0x83, 0x64, 0x6e, 0x8f, 0xf5,
+ 0x27, 0x9c, 0x51, 0x4d, 0x95, 0xd7, 0x74, 0x81, 0x0c, 0x40, 0x12, 0x06, 0x69, 0x5e, 0x65, 0x37,
+ 0xe4, 0x7b, 0xa0, 0xd0, 0xec, 0x00, 0x98, 0xc4, 0xf0, 0xac, 0x78, 0x5b, 0xb6, 0x55, 0x59, 0x1c,
+ 0x8f, 0x69, 0x9b, 0x02, 0xd2, 0xce, 0x5e, 0x05, 0x22, 0x27, 0xde, 0x90, 0x04, 0xff, 0xd2, 0xca,
+ 0x18, 0xd2, 0x3a, 0xdd, 0x1c, 0x07, 0x6b, 0xc3, 0xed, 0xda, 0x00, 0xda, 0xba, 0x87, 0x45, 0xdb,
+ 0x2f, 0x1e, 0x4d, 0x54, 0xcf, 0x60, 0x7e, 0x9f, 0x44, 0x17, 0x7d, 0xe5, 0x77, 0x77, 0x97, 0xf8,
+ 0x69, 0xb9, 0xf2, 0x9d, 0x92, 0xa7, 0xf1, 0xca, 0xc2, 0xc0, 0x1c, 0xd5, 0x06, 0xb6, 0xfc, 0x89,
+ 0x05, 0x8f, 0x23, 0x69, 0x64, 0xdc, 0x7b, 0x86, 0x2c, 0xeb, 0xd6, 0xac, 0x12, 0xa6, 0xe4, 0x69,
+ 0xc8, 0x00, 0xd0, 0x50, 0x7e, 0x45, 0x15, 0x0c, 0xef, 0x74, 0x9e, 0x4f, 0x46, 0x85, 0xfb, 0xfd,
+ 0xad, 0x90, 0x12, 0xea, 0x8d, 0xee, 0xbe, 0x46, 0x96, 0x26, 0xa9, 0xa4, 0x87, 0xbf, 0xdf, 0x77,
+ 0xb8, 0xba, 0xf2, 0x3d, 0x08, 0x71, 0x18, 0x61, 0xa6, 0x64, 0xbe, 0x8c, 0xb7, 0x6c, 0x52, 0xc0,
+ 0xe3, 0xb5, 0x93, 0x14, 0xad, 0x64, 0x6e, 0x95, 0x2c, 0x67, 0xf1, 0xf4, 0x2b, 0x2c, 0x44, 0xde,
+ 0xd3, 0xa3, 0xee, 0x68, 0xa4, 0x81, 0x71, 0x92, 0x2b, 0x21, 0x1b, 0x1c, 0x8b, 0xdb, 0x33, 0xb6,
+ 0x12, 0xd6, 0xe6, 0xc4, 0x93, 0xfa, 0x5c, 0xbb, 0x52, 0xa8, 0x8e, 0xce, 0xed, 0x1b, 0xfb, 0xf1,
+ 0xcb, 0x9c, 0x8b, 0x87, 0x4a, 0xda, 0x7a, 0x52, 0x6d, 0x4d, 0x0f, 0xb5, 0x9a, 0x6f, 0x60, 0x73,
+ 0x0e, 0x3b, 0xdc, 0xfd, 0x8a, 0x0a, 0x30, 0x77, 0x34, 0xc0, 0xe2, 0x50, 0xff, 0xbf, 0xa9, 0xcd,
+ 0x63, 0x46, 0x37, 0x4f, 0xa1, 0xfd, 0xe9, 0x69, 0x1d, 0xf1, 0xcb, 0xc2, 0x1f, 0x6d, 0x59, 0xb6,
+ 0x12, 0x8d, 0xdd, 0xaa, 0x5c, 0xa5, 0xe6, 0x30, 0xa6, 0x1e, 0x1b, 0xac, 0xce, 0x93, 0xc9, 0x18,
+ 0xa6, 0x0f, 0xdc, 0x3b, 0xbc, 0xcd, 0x73, 0x05, 0x77, 0x9c, 0x30, 0x0b, 0xb2, 0x59, 0x6d, 0x25,
+ 0xe1, 0x74, 0xff, 0xe4, 0xd3, 0x60, 0x0f, 0x0d, 0xed, 0x31, 0x27, 0x0d, 0x7b, 0x78, 0xef, 0xf6,
+ 0xf8, 0x03, 0xdd, 0x86, 0xaa, 0x0f, 0x0f, 0xf6, 0x79, 0x98, 0xf6, 0xd9, 0x16, 0xec, 0x13, 0x4e,
+ 0xfb, 0x4c, 0xa3, 0x7d, 0xde, 0x08, 0xf5, 0xe1, 0x77, 0xd8, 0xd4, 0x06, 0x5b, 0x49, 0x36, 0x85,
+ 0x7e, 0xe2, 0x1f, 0x40, 0x17, 0x0e, 0x43, 0xaf, 0x06, 0xec, 0x11, 0xa3, 0x28, 0x9a, 0x1e, 0x84,
+ 0x8f, 0xa0, 0xf0, 0x78, 0x20, 0x61, 0x57, 0x16, 0x0f, 0xc3, 0xcf, 0xb4, 0x95, 0x84, 0xd9, 0x9c,
+ 0x4b, 0x80, 0xdc, 0x5c, 0x04, 0xfe, 0xdb, 0x6d, 0x0a, 0xec, 0xa8, 0xae, 0xbc, 0x61, 0xfb, 0x16,
+ 0xd2, 0x46, 0xbc, 0xf6, 0x95, 0x16, 0x5a, 0x31, 0x75, 0x47, 0xc0, 0xd8, 0x97, 0xab, 0x2c, 0x57,
+ 0xbd, 0x03, 0x84, 0x2a, 0xd3, 0x8c, 0x6e, 0x59, 0xb8, 0x69, 0x05, 0xdf, 0xea, 0xac, 0x07, 0x26,
+ 0xda, 0x73, 0x95, 0x4f, 0x54, 0x14, 0xd2, 0xc3, 0x98, 0x0b, 0x81, 0x8b, 0xbf, 0x9b, 0x0a, 0x45,
+ 0xe3, 0x8e, 0xa2, 0xab, 0x03, 0xe3, 0xca, 0xa7, 0x71, 0x7b, 0xb6, 0x7c, 0x76, 0xd0, 0x13, 0xff,
+ 0x89, 0x95, 0x96, 0xb9, 0xa8, 0x08, 0x0e, 0x79, 0x86, 0xa8, 0x08, 0xda, 0x73, 0x55, 0x40, 0xea,
+ 0xb1, 0x9f, 0xba, 0x3d, 0x52, 0x10, 0x83, 0x0d, 0xca, 0xf4, 0xfe, 0x90, 0x38, 0x4e, 0x09, 0x09,
+ 0x63, 0x3d, 0xbd, 0xe4, 0x51, 0x53, 0x8a, 0x47, 0x23, 0x9f, 0x56, 0x1f, 0x52, 0xe8, 0xed, 0x10,
+ 0x30, 0xb4, 0xae, 0x3c, 0xcc, 0x5b, 0x6f, 0xe3, 0x51, 0x08, 0x84, 0x31, 0xfa, 0xa5, 0xae, 0x44,
+ 0x3c, 0x54, 0x16, 0x2f, 0xc2, 0xac, 0x3f, 0xaf, 0xa2, 0x57, 0xf8, 0xd4, 0xdb, 0x30, 0xd9, 0xb9,
+ 0x59, 0xca, 0xff, 0x18, 0x82, 0xb7, 0x1d, 0xe6, 0x21, 0xcc, 0x6e, 0x3f, 0x01, 0x8d, 0x03, 0xf7,
+ 0xcb, 0xde, 0x90, 0xe4, 0xf9, 0xb4, 0xe6, 0x14, 0xb9, 0xe2, 0xb9, 0x36, 0x96, 0xf5, 0x4e, 0x6c,
+ 0x83, 0xec, 0xbb, 0x1e, 0xbb, 0x5b, 0xb3, 0xec, 0xc1, 0xfb, 0x12, 0xe0, 0x19, 0xec, 0xca, 0xef,
+ 0x07, 0x29, 0xb9, 0xb2, 0xf9, 0xa0, 0xb1, 0x85, 0x64, 0xea, 0x48, 0xa6, 0x96, 0x64, 0x6a, 0x88,
+ 0x56, 0x96, 0x57, 0x61, 0x1c, 0xa3, 0xb7, 0x66, 0x29, 0x7b, 0x0d, 0xc3, 0x02, 0x11, 0x01, 0x34,
+ 0x48, 0x63, 0xe8, 0x76, 0x06, 0xa4, 0xc9, 0x24, 0x59, 0x83, 0xe1, 0x72, 0xb2, 0xb6, 0x2e, 0x5d,
+ 0x57, 0x9b, 0xac, 0x4b, 0x25, 0x4f, 0xe9, 0xa5, 0xf4, 0x68, 0x92, 0x1c, 0x2d, 0xc9, 0xd4, 0xc7,
+ 0xfd, 0x9a, 0xda, 0xbf, 0x00, 0xb7, 0xe2, 0x2a, 0xb9, 0xea, 0x09, 0x44, 0x7a, 0x6e, 0xcf, 0x22,
+ 0x27, 0xc1, 0xa4, 0x40, 0x24, 0x8b, 0x04, 0xee, 0x7d, 0x16, 0x4f, 0xcc, 0x85, 0x6e, 0x6e, 0x77,
+ 0x3f, 0x1a, 0x19, 0x50, 0xc3, 0x44, 0x52, 0xbe, 0x98, 0x9c, 0x53, 0x6f, 0x6e, 0x24, 0x34, 0xab,
+ 0x77, 0x37, 0xa6, 0x5b, 0xba, 0x45, 0x37, 0x0b, 0x61, 0x35, 0x4c, 0x85, 0xdb, 0xdd, 0x0e, 0x3d,
+ 0x2f, 0xb2, 0xc7, 0xf0, 0x7e, 0x8b, 0x1d, 0xc2, 0x4e, 0x1d, 0x49, 0x07, 0xc2, 0x2f, 0x83, 0xe8,
+ 0xef, 0xf9, 0x1b, 0x8d, 0x04, 0x70, 0x53, 0xf9, 0xc5, 0x70, 0x7a, 0x73, 0x80, 0xa4, 0x5b, 0xc1,
+ 0x50, 0x92, 0xf4, 0x55, 0x12, 0xbd, 0x54, 0x43, 0x56, 0x67, 0x92, 0xf4, 0xb4, 0x3d, 0x6c, 0xd7,
+ 0x5a, 0x68, 0x3e, 0x32, 0x84, 0xac, 0xc5, 0xd9, 0xdf, 0x7b, 0x27, 0x28, 0x1a, 0x5c, 0xcd, 0x4b,
+ 0xd8, 0xaf, 0x52, 0x2f, 0x06, 0x34, 0xdc, 0xab, 0xcf, 0x42, 0xc6, 0x24, 0xe7, 0xdf, 0xc9, 0x20,
+ 0x95, 0x67, 0x69, 0x7c, 0x9e, 0x46, 0xcc, 0xed, 0x90, 0x50, 0xe4, 0xb5, 0x92, 0x01, 0x4f, 0x87,
+ 0x26, 0x02, 0x95, 0x1e, 0xb2, 0x91, 0x12, 0x7d, 0x96, 0x15, 0x86, 0x87, 0x40, 0xa4, 0xe8, 0x56,
+ 0x48, 0x41, 0x21, 0x92, 0xe7, 0xf8, 0x48, 0x71, 0x20, 0x82, 0x73, 0xfd, 0x1d, 0x97, 0xd1, 0x7c,
+ 0x02, 0xdc, 0x8a, 0x9c, 0xcb, 0xd2, 0x33, 0x9d, 0x03, 0xb1, 0x78, 0xb9, 0xf4, 0x10, 0x1e, 0xe8,
+ 0xf7, 0x7e, 0x22, 0x8d, 0x21, 0x74, 0x19, 0x90, 0x91, 0xf4, 0x16, 0x01, 0xf2, 0x92, 0x5e, 0xe4,
+ 0x40, 0x76, 0xd2, 0x7b, 0x1d, 0x30, 0xe4, 0xdb, 0xab, 0x68, 0x4b, 0x34, 0x71, 0x59, 0x91, 0x5d,
+ 0x87, 0xd4, 0x9b, 0x34, 0x9d, 0xa1, 0x9b, 0x34, 0x0a, 0xa1, 0x37, 0x97, 0x5c, 0x97, 0xc8, 0xa1,
+ 0xad, 0xf4, 0x02, 0xc2, 0x5a, 0xf8, 0xe6, 0xf3, 0xe8, 0x66, 0xe6, 0x00, 0xf7, 0xa1, 0x3f, 0x92,
+ 0xf4, 0x78, 0xbe, 0x8c, 0xac, 0x6e, 0x39, 0x49, 0xcf, 0x18, 0x70, 0x39, 0x83, 0x02, 0x19, 0xba,
+ 0xa5, 0x83, 0x07, 0xc9, 0x6a, 0xa2, 0xdd, 0x89, 0x5a, 0x02, 0xc4, 0x47, 0x00, 0xf1, 0x82, 0x56,
+ 0xda, 0x8b, 0xf2, 0x68, 0x0c, 0xdc, 0x9d, 0x0e, 0x84, 0xbb, 0xcc, 0x13, 0xc2, 0xef, 0xc0, 0x2e,
+ 0xf6, 0x8d, 0x42, 0x7d, 0xf8, 0x9f, 0xa1, 0xb6, 0xaa, 0xa8, 0xab, 0x0e, 0x21, 0x66, 0xa6, 0x3e,
+ 0x40, 0x2f, 0xdd, 0xe0, 0xc5, 0x49, 0xae, 0xe6, 0x24, 0x7a, 0x20, 0x0a, 0x46, 0xc2, 0x25, 0x3a,
+ 0x79, 0xcc, 0xda, 0xe9, 0xe4, 0x21, 0x95, 0xaf, 0xa3, 0x93, 0xaf, 0x4d, 0xa5, 0x77, 0x87, 0x52,
+ 0xf5, 0x92, 0x3a, 0xf5, 0xd4, 0xe8, 0xf0, 0xbd, 0x38, 0xe9, 0xc9, 0x94, 0x07, 0xe1, 0x94, 0x3e,
+ 0xf1, 0x3c, 0x43, 0x2a, 0x12, 0xc9, 0xf6, 0xc5, 0x92, 0xab, 0x1b, 0xaf, 0xb1, 0xa6, 0x2e, 0x69,
+ 0x4a, 0x5d, 0x46, 0x33, 0x37, 0xd7, 0x5a, 0xda, 0x27, 0xc6, 0x06, 0x82, 0x6d, 0x55, 0x7e, 0xda,
+ 0x1d, 0x14, 0x0f, 0x7e, 0x26, 0xde, 0x3e, 0xca, 0x69, 0xa7, 0x36, 0xff, 0x28, 0xb5, 0xf9, 0x07,
+ 0x25, 0x8b, 0x7b, 0x84, 0xcd, 0xaf, 0x4d, 0x4d, 0xb2, 0x29, 0x4f, 0x52, 0x78, 0x0d, 0x68, 0xeb,
+ 0x3d, 0xc1, 0x23, 0x42, 0x92, 0xba, 0x01, 0xda, 0x27, 0x41, 0x09, 0xd5, 0xd2, 0xa7, 0x0f, 0x56,
+ 0x23, 0xbc, 0xd3, 0x9b, 0xba, 0x96, 0x01, 0x69, 0x92, 0xf2, 0x5a, 0xa9, 0x27, 0x3d, 0x81, 0xec,
+ 0xaa, 0xf9, 0x6f, 0x7a, 0xfc, 0xce, 0x71, 0x35, 0x27, 0xe0, 0x21, 0x03, 0xa5, 0x8a, 0x1e, 0x6e,
+ 0x52, 0xad, 0xee, 0x9a, 0x80, 0xa2, 0x71, 0x57, 0x94, 0x2e, 0x91, 0x1e, 0x59, 0xb8, 0x6c, 0x2b,
+ 0xd1, 0xdb, 0xac, 0xf6, 0x2c, 0x25, 0xa6, 0x5f, 0xe5, 0xdb, 0x4e, 0x0d, 0x58, 0x87, 0x37, 0xa9,
+ 0xaf, 0xd6, 0x49, 0x2c, 0xb8, 0x1e, 0x32, 0x46, 0x4a, 0xd6, 0x90, 0x74, 0x8d, 0x94, 0xac, 0x25,
+ 0xe9, 0xda, 0xba, 0x64, 0x5d, 0x6d, 0xba, 0x2e, 0x83, 0xec, 0xd4, 0x4b, 0xc9, 0xd1, 0x78, 0x26,
+ 0x09, 0x52, 0xf1, 0xcc, 0x62, 0x92, 0x9e, 0x88, 0x52, 0xf1, 0xcc, 0x32, 0x7a, 0x07, 0x2c, 0x46,
+ 0x5d, 0x0b, 0x50, 0x90, 0x7f, 0xf5, 0x85, 0x38, 0x70, 0x9f, 0xa4, 0xde, 0x19, 0x02, 0xfd, 0x50,
+ 0x19, 0x0e, 0x2a, 0xa2, 0x0a, 0xa2, 0x4c, 0x17, 0x82, 0x2a, 0xca, 0x9f, 0xd8, 0xda, 0x67, 0x92,
+ 0xec, 0x8a, 0x95, 0xf6, 0x82, 0x38, 0x0a, 0x38, 0x31, 0x91, 0xa4, 0x23, 0x0b, 0x74, 0x52, 0xa5,
+ 0xdf, 0x97, 0x65, 0x0c, 0xac, 0xf1, 0xad, 0x82, 0xc9, 0xa7, 0x3b, 0xbd, 0xe9, 0x6b, 0x19, 0x5f,
+ 0x32, 0x3e, 0x02, 0xbc, 0x61, 0x04, 0xfc, 0x58, 0x15, 0x3e, 0x2c, 0x04, 0xc5, 0xca, 0xaa, 0x2c,
+ 0x87, 0x49, 0xc0, 0xec, 0xf4, 0x27, 0xc9, 0xea, 0xa7, 0xa5, 0x14, 0x98, 0xc7, 0xb3, 0x52, 0x0a,
+ 0xa8, 0x71, 0x21, 0x26, 0xeb, 0xd1, 0xa1, 0xd3, 0x02, 0x71, 0x39, 0xde, 0xea, 0x60, 0xf8, 0x02,
+ 0x6a, 0xc6, 0xa9, 0x15, 0x97, 0xc6, 0xd3, 0x7b, 0x1f, 0x9a, 0xcf, 0xaa, 0xb6, 0x42, 0xce, 0x15,
+ 0x07, 0x2a, 0x59, 0xa2, 0xcf, 0xb5, 0x2a, 0xb1, 0x71, 0x41, 0xdb, 0x34, 0xdc, 0xce, 0x3f, 0x58,
+ 0xb5, 0x75, 0x2d, 0x2b, 0xc4, 0x8a, 0xee, 0x27, 0x29, 0x44, 0xff, 0xf4, 0x51, 0x10, 0xbc, 0x3e,
+ 0x7d, 0xe9, 0x43, 0x88, 0xbd, 0xfc, 0x4f, 0x90, 0x53, 0x8d, 0x31, 0xba, 0x1b, 0xa1, 0x0f, 0x9a,
+ 0x7d, 0x7a, 0xed, 0x04, 0xc8, 0x5e, 0xfe, 0x83, 0x31, 0xa3, 0x3f, 0xab, 0x7a, 0xc9, 0xc9, 0x0a,
+ 0xd3, 0x73, 0x03, 0xe5, 0x1b, 0x94, 0xf7, 0xfd, 0xc1, 0xbd, 0xd4, 0x20, 0xba, 0x89, 0xb4, 0x5f,
+ 0xba, 0xc9, 0x5b, 0x7e, 0x7e, 0x34, 0x3e, 0xf5, 0x8a, 0x0a, 0xa4, 0xb3, 0x8b, 0x82, 0xa9, 0x4d,
+ 0x8e, 0x5e, 0x8d, 0xc4, 0xa5, 0xe5, 0x14, 0xeb, 0x58, 0x53, 0x99, 0x56, 0x88, 0x5a, 0xf2, 0xa4,
+ 0x4e, 0x88, 0x30, 0x59, 0xf5, 0xbc, 0x56, 0x6c, 0xd2, 0xac, 0x10, 0xba, 0x82, 0xe9, 0x30, 0xa2,
+ 0x09, 0xf5, 0x9f, 0x49, 0xb3, 0xf9, 0x1c, 0xad, 0x44, 0xaf, 0xc1, 0x48, 0x63, 0x4c, 0x08, 0xec,
+ 0x05, 0xe0, 0x9b, 0x34, 0x6b, 0x07, 0x50, 0x00, 0x00, 0x5b, 0xa7, 0x95, 0x71, 0x43, 0xff, 0x4e,
+ 0x96, 0x35, 0xb8, 0xb9, 0xaa, 0x1b, 0x79, 0xb7, 0x94, 0xde, 0x98, 0x97, 0x05, 0xbf, 0x7a, 0xcb,
+ 0x1b, 0xd4, 0xba, 0x31, 0x8c, 0xdb, 0x97, 0x3a, 0x84, 0x36, 0xfd, 0x3a, 0xee, 0x0e, 0x0d, 0xcc,
+ 0xe5, 0xe3, 0xaa, 0x03, 0x43, 0x78, 0x56, 0x1e, 0x55, 0xfb, 0xca, 0x0e, 0x18, 0x08, 0x6c, 0x9f,
+ 0xdf, 0x4b, 0x9f, 0x98, 0x54, 0xdf, 0x19, 0x00, 0x06, 0x53, 0xf0, 0xdc, 0xcb, 0x4b, 0xc4, 0x81,
+ 0xec, 0x9d, 0xb9, 0xe2, 0x80, 0x8d, 0xab, 0x79, 0x1c, 0x4f, 0x48, 0x06, 0x72, 0xb8, 0x9a, 0x7b,
+ 0xe8, 0xc3, 0x93, 0x9c, 0xab, 0x1a, 0xa5, 0xba, 0x5f, 0x2e, 0xd7, 0x42, 0xf8, 0x38, 0x89, 0xdc,
+ 0x0a, 0x94, 0x69, 0x94, 0xb9, 0x40, 0x4b, 0x57, 0x24, 0x7a, 0xd2, 0xcc, 0xd7, 0xc5, 0x5b, 0xda,
+ 0x2d, 0x29, 0x81, 0x78, 0xb9, 0x10, 0x5d, 0xe7, 0x79, 0x69, 0x12, 0xcc, 0x98, 0xf4, 0x40, 0xd0,
+ 0xc7, 0x22, 0xcc, 0x47, 0x14, 0xc9, 0x1c, 0x7e, 0x95, 0x38, 0x90, 0xc6, 0xb9, 0x1e, 0xf9, 0x21,
+ 0xa6, 0xa7, 0xc0, 0x3c, 0x77, 0x1d, 0xa1, 0x4a, 0xb5, 0x9e, 0xab, 0xa9, 0xa2, 0xe0, 0x85, 0x9c,
+ 0x6b, 0x3c, 0x42, 0x06, 0x91, 0xb5, 0x62, 0xd2, 0xda, 0x63, 0x55, 0x16, 0x20, 0xe8, 0x5a, 0xcc,
+ 0x04, 0xc2, 0xc4, 0x06, 0x0d, 0xde, 0xdd, 0x31, 0x2b, 0x56, 0x25, 0xc5, 0xaf, 0xe6, 0x88, 0x1e,
+ 0xd1, 0x83, 0xf3, 0x7e, 0xcd, 0x8e, 0x3d, 0x8f, 0xc9, 0x65, 0x81, 0x15, 0x78, 0x74, 0x63, 0x51,
+ 0x20, 0xa1, 0x0f, 0xcc, 0xc1, 0xb0, 0xd8, 0x2f, 0x74, 0xb8, 0xfa, 0xf8, 0x07, 0xeb, 0x71, 0xc3,
+ 0xb9, 0x3a, 0x80, 0xdf, 0x92, 0xa0, 0xf0, 0x33, 0x48, 0x5b, 0xdd, 0x54, 0x39, 0x83, 0xad, 0xfd,
+ 0x77, 0xe4, 0x89, 0xd8, 0xc5, 0x96, 0x8f, 0x4b, 0x57, 0x39, 0x46, 0x9a, 0x84, 0xbf, 0xe2, 0x7e,
+ 0x42, 0x13, 0xf0, 0x37, 0xc8, 0x31, 0x48, 0x75, 0xbb, 0xea, 0x7e, 0x38, 0x87, 0x0d, 0xc1, 0x63,
+ 0xe4, 0x1b, 0x64, 0xa8, 0xeb, 0x05, 0xa4, 0x2f, 0x4a, 0x4e, 0xd1, 0x62, 0x92, 0x8a, 0xaf, 0xad,
+ 0x48, 0xd9, 0x1a, 0xdc, 0x3c, 0x5c, 0x49, 0xbd, 0x46, 0xe7, 0xe1, 0xbb, 0xa3, 0xf3, 0x71, 0x2b,
+ 0xeb, 0x58, 0x79, 0x0b, 0xab, 0xae, 0x8b, 0x78, 0x1d, 0x46, 0x4e, 0x0e, 0x8e, 0xdc, 0x0f, 0x23,
+ 0x43, 0x7e, 0xd3, 0x0f, 0x23, 0x83, 0xfa, 0x53, 0xb3, 0xa2, 0xb6, 0x70, 0xaf, 0x74, 0x01, 0x4a,
+ 0x95, 0x9a, 0xc7, 0x33, 0xba, 0x2e, 0x30, 0x41, 0x66, 0xe0, 0x82, 0xe3, 0x1b, 0x03, 0x75, 0xda,
+ 0x1a, 0x18, 0xf6, 0xcf, 0xf0, 0x94, 0xa4, 0x0e, 0xa2, 0xde, 0x74, 0xaa, 0xfd, 0x57, 0xba, 0xf4,
+ 0x75, 0xda, 0xa4, 0x9a, 0x16, 0xe1, 0x5a, 0x17, 0x66, 0xbf, 0x23, 0x57, 0xea, 0x0f, 0x78, 0xdc,
+ 0x3c, 0x08, 0x33, 0xe8, 0xfa, 0x94, 0x09, 0x8d, 0xb4, 0x45, 0x57, 0x17, 0x76, 0x57, 0x62, 0x60,
+ 0x08, 0x5f, 0x39, 0x30, 0xb3, 0x8e, 0x05, 0x4b, 0x53, 0x9e, 0x8c, 0x74, 0xe5, 0x74, 0x07, 0xa7,
+ 0x91, 0x1d, 0x04, 0xab, 0x63, 0x93, 0x6b, 0xdc, 0xc2, 0x75, 0x5f, 0xc6, 0x1f, 0xe7, 0x1d, 0x18,
+ 0xc4, 0x0d, 0x45, 0xb5, 0x79, 0x95, 0xca, 0xd9, 0x8c, 0xba, 0x9f, 0xc6, 0x82, 0x80, 0x24, 0x0b,
+ 0x8a, 0xef, 0xf1, 0xcf, 0xe6, 0xd5, 0x8f, 0x00, 0x98, 0x14, 0xa2, 0xae, 0x16, 0x01, 0x92, 0x00,
+ 0x20, 0xe2, 0x08, 0x3d, 0x65, 0x19, 0x16, 0x54, 0x5f, 0xac, 0x3a, 0xa0, 0xef, 0xdb, 0xef, 0x35,
+ 0x90, 0x06, 0xb0, 0x5a, 0x5d, 0x63, 0xc1, 0xf6, 0x56, 0x2d, 0xa7, 0x19, 0xb0, 0xb0, 0x48, 0xcd,
+ 0x4b, 0x59, 0x61, 0x91, 0xb8, 0xfc, 0x97, 0x8f, 0xa1, 0xb1, 0x99, 0x6d, 0xec, 0x7b, 0xff, 0x1d,
+ 0x78, 0xca, 0x75, 0x62, 0x97, 0xc0, 0xe2, 0x3d, 0xca, 0xf1, 0x49, 0x61, 0xa8, 0x47, 0x60, 0x30,
+ 0x10, 0xa2, 0xfc, 0x4b, 0x57, 0x40, 0x78, 0xa1, 0xab, 0x85, 0xa1, 0x31, 0x4d, 0x0d, 0x5e, 0xe7,
+ 0x34, 0xf6, 0xc9, 0x79, 0x07, 0x4b, 0xe6, 0x95, 0x30, 0x36, 0x65, 0xed, 0x3d, 0x54, 0xe7, 0xb8,
+ 0xc3, 0xff, 0x42, 0x17, 0x69, 0x20, 0x4a, 0xf8, 0x51, 0x93, 0xb9, 0x63, 0xfc, 0x04, 0x88, 0x6d,
+ 0xc1, 0xae, 0x2b, 0x86, 0x63, 0x34, 0xfc, 0xc3, 0x0b, 0x81, 0x36, 0x65, 0x9e, 0x0a, 0x5b, 0x1f,
+ 0x05, 0xad, 0xbe, 0x88, 0xf1, 0xcc, 0x04, 0x5c, 0xf1, 0x0e, 0x0a, 0x37, 0xd0, 0x42, 0xe1, 0xf0,
+ 0xd0, 0xf0, 0x3f, 0x8c, 0x7d, 0x21, 0x1a, 0x6d, 0x21, 0xaa, 0x57, 0x56, 0x2d, 0x2f, 0x5f, 0x80,
+ 0x35, 0xc9, 0xdc, 0xbe, 0xe0, 0x40, 0xd3, 0xf9, 0x04, 0x1c, 0x6d, 0x42, 0xc9, 0x78, 0xc5, 0xb7,
+ 0x91, 0x8a, 0xd7, 0x9e, 0x28, 0xdf, 0x54, 0x7a, 0x40, 0xfc, 0x2b, 0x5f, 0x28, 0xee, 0x9d, 0x54,
+ 0x47, 0xa1, 0xb9, 0x7d, 0x50, 0xfb, 0x67, 0x15, 0x0a, 0x87, 0xf8, 0x75, 0xe8, 0xae, 0x76, 0xc8,
+ 0x50, 0xc4, 0x81, 0x97, 0x31, 0xba, 0xf1, 0x0e, 0x35, 0x38, 0x13, 0x3c, 0x11, 0xbe, 0x0c, 0x81,
+ 0x0f, 0x69, 0x8d, 0xf4, 0xf3, 0x4f, 0x91, 0xf3, 0xc4, 0x02, 0x99, 0x34, 0xaa, 0xd8, 0x0d, 0x63,
+ 0x83, 0xb1, 0x29, 0xa1, 0x29, 0xb6, 0xe1, 0x8b, 0x49, 0x28, 0x20, 0x39, 0xdd, 0xe0, 0xfe, 0xa3,
+ 0xb2, 0x73, 0x95, 0x59, 0xa7, 0x82, 0x89, 0x2d, 0xeb, 0x91, 0x17, 0x13, 0x72, 0x2b, 0xa1, 0xa7,
+ 0xaa, 0x25, 0xb1, 0x76, 0xd5, 0x8c, 0xf6, 0x27, 0x0e, 0x44, 0xe2, 0x4e, 0xd7, 0x2d, 0x7a, 0xdd,
+ 0x1e, 0x22, 0x3a, 0xd2, 0x54, 0xde, 0x22, 0x56, 0x6a, 0x99, 0xad, 0xd3, 0x52, 0x7d, 0x71, 0x12,
+ 0xbb, 0x9c, 0xca, 0x51, 0xaa, 0x6c, 0x65, 0xc9, 0x44, 0x6f, 0x15, 0x12, 0x9a, 0xe8, 0x5b, 0xe4,
+ 0x4d, 0x9b, 0xd1, 0xfe, 0x80, 0x64, 0xf1, 0xd7, 0xc1, 0x2f, 0xcc, 0x60, 0x8e, 0x9c, 0xd3, 0x2e,
+ 0xef, 0x98, 0xcc, 0x4a, 0x13, 0xab, 0x07, 0x55, 0x69, 0x90, 0xcb, 0x59, 0x62, 0xac, 0xdd, 0x85,
+ 0xe0, 0x75, 0x63, 0xf1, 0xe4, 0xbb, 0x53, 0x62, 0xd5, 0xde, 0x78, 0xba, 0x37, 0x6a, 0x5a, 0x06,
+ 0x82, 0x01, 0x26, 0x4e, 0x6c, 0xc4, 0xac, 0xcc, 0x67, 0xbd, 0x66, 0x05, 0x12, 0xa8, 0xc8, 0x56,
+ 0xfe, 0x69, 0x98, 0x9a, 0x5c, 0xd9, 0x15, 0x9a, 0x89, 0x5d, 0xc9, 0x39, 0x79, 0x77, 0x26, 0x3a,
+ 0x42, 0x7a, 0x13, 0x8e, 0x57, 0x1d, 0x4f, 0xac, 0xcd, 0x1f, 0x5a, 0xa3, 0x4e, 0xa4, 0x87, 0xe6,
+ 0xc1, 0xd3, 0x85, 0x6e, 0xe2, 0x2d, 0x3f, 0x46, 0xaf, 0xd7, 0x2e, 0xa7, 0x34, 0x25, 0xd0, 0x29,
+ 0xd4, 0xbe, 0x43, 0x69, 0x9a, 0x95, 0x51, 0x73, 0x49, 0xf8, 0xab, 0x6f, 0x4a, 0x68, 0x7e, 0x13,
+ 0x46, 0xce, 0x6f, 0x04, 0xa9, 0x86, 0xd1, 0x2b, 0x80, 0x7c, 0xee, 0xfe, 0x01, 0xb5, 0x94, 0xd4,
+ 0x01, 0x20, 0x75, 0xbd, 0x6c, 0xee, 0x22, 0xe7, 0xc8, 0x6d, 0xf1, 0x6b, 0xae, 0x4e, 0x7a, 0x2b,
+ 0x9d, 0x65, 0x6a, 0x2d, 0xbd, 0xb5, 0x99, 0x43, 0xa4, 0x8d, 0xfb, 0x70, 0x30, 0xce, 0xf3, 0x37,
+ 0x4d, 0xe6, 0x17, 0x1c, 0x52, 0x78, 0x9b, 0x5e, 0xc2, 0x8d, 0x3d, 0x05, 0xd8, 0x6e, 0x94, 0xb7,
+ 0xed, 0x4f, 0xfc, 0x9c, 0x46, 0xbc, 0x95, 0xdd, 0x75, 0x79, 0xbd, 0xd2, 0x23, 0xd5, 0x43, 0x94,
+ 0xda, 0x5c, 0x79, 0x35, 0x4b, 0xb8, 0xda, 0xc3, 0x94, 0xda, 0xcf, 0x71, 0x23, 0x26, 0x45, 0xf8,
+ 0x4a, 0xba, 0xc7, 0x97, 0xf6, 0xc7, 0xc4, 0xfa, 0xef, 0x54, 0x70, 0x09, 0x48, 0x09, 0x81, 0x67,
+ 0xcb, 0x3b, 0x59, 0x62, 0x82, 0xca, 0xda, 0x7f, 0xa3, 0x3d, 0x5e, 0xff, 0x69, 0x2a, 0x6a, 0xe1,
+ 0x55, 0x69, 0xec, 0xf7, 0xb8, 0x4e, 0x4f, 0xea, 0xbc, 0x74, 0x61, 0x98, 0x9a, 0x4b, 0xfc, 0x55,
+ 0xe9, 0x9e, 0xe0, 0x92, 0xfd, 0xb7, 0xbc, 0x12, 0x07, 0xfc, 0x39, 0xed, 0x1e, 0x93, 0xe4, 0xfb,
+ 0x8a, 0x9a, 0x58, 0x9f, 0x7b, 0x78, 0xf3, 0x56, 0xeb, 0xea, 0x13, 0xc2, 0xc8, 0xdf, 0x9c, 0x88,
+ 0x59, 0xb9, 0x8f, 0xc6, 0xd4, 0x9a, 0x23, 0xd6, 0x70, 0xf0, 0x7a, 0xe9, 0x18, 0x8b, 0x3d, 0x2f,
+ 0x3d, 0x1c, 0xdc, 0x4d, 0x3a, 0xf0, 0x71, 0x26, 0xde, 0xae, 0x38, 0x25, 0x4d, 0x34, 0x35, 0x54,
+ 0x3c, 0x06, 0x26, 0x10, 0x42, 0xa8, 0x73, 0xe4, 0x2a, 0xda, 0xa9, 0xdb, 0x55, 0xcb, 0x62, 0x19,
+ 0x79, 0x1d, 0x2b, 0xf4, 0x4b, 0xd1, 0xb1, 0xa6, 0x86, 0xf2, 0x6f, 0xd8, 0x5b, 0xa4, 0x21, 0xe1,
+ 0x46, 0x76, 0x96, 0xd5, 0xf9, 0x11, 0xb0, 0x4b, 0x39, 0x45, 0xa3, 0x52, 0xf0, 0xc5, 0x7e, 0x8a,
+ 0xd9, 0x37, 0xc1, 0xea, 0xfc, 0x15, 0x0e, 0xb7, 0x7f, 0x40, 0x75, 0xec, 0x7d, 0xc2, 0x1b, 0xce,
+ 0x59, 0x08, 0xf8, 0x5b, 0xb5, 0x62, 0xc4, 0xea, 0x54, 0x2d, 0x6f, 0xb7, 0xb0, 0x0c, 0xab, 0xc6,
+ 0x76, 0xe0, 0x4f, 0xab, 0x1b, 0xa9, 0x91, 0xfe, 0x1a, 0xcf, 0x22, 0xdf, 0xef, 0x84, 0x26, 0xe9,
+ 0xa1, 0x0e, 0xf8, 0x26, 0x3d, 0xec, 0x05, 0xd2, 0x20, 0x9e, 0x66, 0x8e, 0xd0, 0xf3, 0xbc, 0x53,
+ 0x54, 0xea, 0x63, 0xdb, 0xca, 0x9f, 0xc3, 0x8b, 0xe1, 0x59, 0x25, 0x2c, 0x3d, 0x79, 0xcc, 0x82,
+ 0x50, 0xcf, 0xe9, 0x06, 0xb3, 0xe2, 0x6c, 0x85, 0x2f, 0xe5, 0x5d, 0x7a, 0x97, 0x63, 0xbe, 0x8a,
+ 0xa0, 0xc6, 0x4d, 0xae, 0x0a, 0x49, 0x14, 0x63, 0xb5, 0x17, 0x81, 0xc5, 0x56, 0x44, 0x7a, 0x8b,
+ 0x22, 0x25, 0xb7, 0x47, 0xa3, 0x25, 0xb4, 0xcb, 0x07, 0x08, 0x5c, 0xf1, 0x2b, 0xe7, 0x02, 0xf5,
+ 0xa0, 0x22, 0xac, 0x1b, 0x2f, 0x85, 0xe5, 0xda, 0xec, 0xca, 0x41, 0xba, 0x13, 0xa7, 0x63, 0x97,
+ 0x23, 0x94, 0x38, 0x05, 0xc1, 0x18, 0xdb, 0x88, 0x81, 0x2d, 0x4c, 0xf0, 0xb5, 0x0d, 0x75, 0x1f,
+ 0xe6, 0x75, 0xbc, 0xb6, 0x78, 0x18, 0x77, 0x91, 0xcd, 0x86, 0x3a, 0x4b, 0x3c, 0xb7, 0x2f, 0x67,
+ 0x1e, 0xb7, 0xaf, 0x05, 0xec, 0x06, 0x3d, 0x43, 0x1b, 0x75, 0x53, 0x01, 0x12, 0xf0, 0x11, 0x78,
+ 0x2e, 0xd3, 0x03, 0xbb, 0xf9, 0x77, 0x05, 0xf9, 0x49, 0xfa, 0x36, 0x95, 0x56, 0xc2, 0xe8, 0xd6,
+ 0xec, 0x47, 0xbf, 0x43, 0x93, 0xaa, 0x64, 0x30, 0x2d, 0x27, 0x64, 0x08, 0x60, 0xcd, 0xcd, 0x60,
+ 0x3d, 0x35, 0x9b, 0xc5, 0x1d, 0x1e, 0x3d, 0xcb, 0xb9, 0xca, 0x31, 0x44, 0x58, 0xe6, 0x91, 0x2c,
+ 0xcd, 0xc4, 0x8f, 0xd7, 0x28, 0x84, 0x56, 0x52, 0x79, 0x54, 0x54, 0x58, 0x6e, 0xd7, 0x59, 0x6a,
+ 0x62, 0xea, 0x89, 0xf9, 0xbf, 0xa4, 0x7b, 0xa4, 0x2d, 0x1a, 0x02, 0x6a, 0x9e, 0xa1, 0x65, 0x5b,
+ 0xf1, 0xfa, 0x76, 0x86, 0x8e, 0x9c, 0x9f, 0xe8, 0x07, 0x45, 0x96, 0x92, 0x07, 0xa4, 0x89, 0x6c,
+ 0x03, 0x6e, 0x3e, 0x3f, 0x75, 0x47, 0xca, 0xd2, 0x4c, 0xbc, 0x48, 0x72, 0x14, 0xd3, 0x00, 0xb9,
+ 0x38, 0x3d, 0xa7, 0x93, 0x7b, 0xd3, 0xfc, 0x35, 0x81, 0x20, 0x5f, 0x68, 0x37, 0xf9, 0x49, 0x9e,
+ 0x9b, 0x5c, 0x94, 0xf2, 0xce, 0xc6, 0x5e, 0xe4, 0xde, 0x68, 0xb8, 0x37, 0xe7, 0xeb, 0xaa, 0x41,
+ 0x96, 0x54, 0x5e, 0x16, 0x66, 0x99, 0x40, 0xd2, 0x2b, 0x95, 0xe9, 0x95, 0x9d, 0x52, 0xe5, 0xe5,
+ 0xf2, 0x89, 0x26, 0x01, 0x4b, 0xb1, 0x57, 0xa1, 0xc0, 0xed, 0x62, 0xc1, 0x65, 0x63, 0x33, 0x98,
+ 0xc4, 0x26, 0x00, 0xe0, 0xde, 0xf4, 0xd6, 0x9c, 0xe6, 0xcc, 0x79, 0x6e, 0xce, 0x2c, 0x1c, 0x04,
+ 0x40, 0xd2, 0x14, 0x7b, 0x15, 0x70, 0xd5, 0x9c, 0x83, 0xf0, 0x3f, 0xe7, 0x32, 0x12, 0x80, 0x4a,
+ 0xab, 0x48, 0x95, 0x47, 0xb1, 0x47, 0x86, 0x06, 0x9c, 0x11, 0xb9, 0x27, 0xe1, 0x5c, 0x6c, 0x23,
+ 0xd9, 0xa2, 0x25, 0xf9, 0x3a, 0xe3, 0x25, 0x49, 0x68, 0x95, 0x60, 0x2a, 0x39, 0xf5, 0xa2, 0x27,
+ 0x66, 0x25, 0xe7, 0x8a, 0x45, 0x3d, 0xcb, 0xd0, 0x4a, 0x6b, 0x74, 0xa4, 0x21, 0xf2, 0x18, 0x6f,
+ 0xad, 0xaa, 0xd4, 0x33, 0x7c, 0xd1, 0x72, 0x5c, 0x74, 0x72, 0x4c, 0xbc, 0xc8, 0x94, 0x3f, 0x26,
+ 0x3d, 0x02, 0x39, 0x72, 0xb5, 0x97, 0x86, 0x21, 0xb9, 0x10, 0xcc, 0x28, 0x20, 0x03, 0x5f, 0xa0,
+ 0xc4, 0xcd, 0xbe, 0x12, 0x6e, 0xee, 0x9e, 0x4c, 0x5f, 0x49, 0x7a, 0x24, 0xc1, 0x0f, 0x78, 0x49,
+ 0xae, 0x06, 0xc4, 0x61, 0x8d, 0xee, 0x00, 0x6d, 0x6d, 0x26, 0x19, 0x5a, 0xdf, 0x74, 0xe0, 0xa5,
+ 0xac, 0xc9, 0x96, 0x2c, 0x27, 0xe4, 0xc5, 0x9e, 0x03, 0x18, 0xfb, 0xf5, 0x7e, 0x04, 0x90, 0x2b,
+ 0x49, 0x8e, 0x7f, 0x35, 0x2c, 0x4e, 0xfa, 0x52, 0xc1, 0xcf, 0xed, 0xda, 0x8c, 0x89, 0x54, 0xa5,
+ 0x1f, 0x42, 0x80, 0xc3, 0x34, 0xa3, 0xa9, 0x1b, 0x7f, 0x14, 0x56, 0xb4, 0xd6, 0xd2, 0x2d, 0xeb,
+ 0x92, 0xc0, 0x10, 0x89, 0x3b, 0x8e, 0xe9, 0x59, 0xe1, 0x39, 0x79, 0xd9, 0xb1, 0x3e, 0x73, 0x37,
+ 0x2b, 0xac, 0x92, 0x38, 0x29, 0x5f, 0x43, 0x75, 0xdc, 0x74, 0x8c, 0x5e, 0x6c, 0x8e, 0xbd, 0x58,
+ 0xfe, 0x88, 0x94, 0xab, 0x95, 0xb6, 0xe8, 0x80, 0x3a, 0xf6, 0xd8, 0xc4, 0xde, 0xea, 0x41, 0x16,
+ 0x85, 0xf6, 0x12, 0x53, 0x6e, 0xac, 0x6e, 0x41, 0x62, 0xc2, 0x2d, 0x0a, 0xee, 0x42, 0xae, 0xd1,
+ 0x92, 0x2d, 0xba, 0xa6, 0x0c, 0x7a, 0x10, 0xdf, 0x34, 0x16, 0xe7, 0x28, 0xad, 0xd1, 0x8e, 0x5b,
+ 0xa3, 0xe3, 0xa3, 0xf0, 0xd2, 0xd1, 0xbd, 0xf8, 0x35, 0x0b, 0xbe, 0x56, 0x98, 0x9a, 0x2b, 0xa2,
+ 0xc9, 0x71, 0x59, 0xb7, 0x02, 0xaf, 0x38, 0x2e, 0x3e, 0x16, 0xa4, 0x9b, 0x5c, 0xc8, 0x34, 0x5e,
+ 0x4a, 0x02, 0x4b, 0x6d, 0x6a, 0xe6, 0x76, 0x15, 0xd0, 0xec, 0xd7, 0x8f, 0x07, 0x31, 0xc2, 0x14,
+ 0xa3, 0x3b, 0x09, 0x44, 0xac, 0x0b, 0x44, 0x9f, 0x19, 0x4e, 0xcb, 0x32, 0x89, 0xe5, 0x2c, 0xc8,
+ 0x88, 0xac, 0x59, 0x27, 0x6b, 0x3c, 0x04, 0xf7, 0xf9, 0xfc, 0xa6, 0x33, 0x24, 0xaf, 0x93, 0x5c,
+ 0xa8, 0x58, 0x86, 0x3b, 0x02, 0x89, 0xd2, 0x56, 0x0d, 0x48, 0x02, 0xc6, 0x7b, 0xcd, 0x78, 0x23,
+ 0x10, 0x0c, 0xdd, 0x38, 0x62, 0x51, 0x24, 0x9b, 0xc6, 0xd4, 0x43, 0xda, 0x62, 0x6f, 0xe1, 0xbb,
+ 0x5d, 0x29, 0x83, 0x78, 0x75, 0x25, 0x45, 0x50, 0xb8, 0x94, 0xe6, 0x24, 0xb1, 0x31, 0xc6, 0xd4,
+ 0x20, 0x9c, 0x97, 0x35, 0x94, 0xaa, 0xb8, 0x06, 0x4a, 0x95, 0x6c, 0xfe, 0x25, 0x69, 0x22, 0x57,
+ 0x7a, 0x3f, 0xa2, 0x25, 0xdc, 0x7c, 0xb9, 0x3c, 0xa2, 0x44, 0xbc, 0x40, 0x75, 0x9b, 0x94, 0xd7,
+ 0x99, 0x2a, 0x9a, 0xcf, 0xc6, 0x48, 0xe6, 0x76, 0x53, 0x23, 0xe7, 0x2a, 0xc1, 0x9d, 0x91, 0xac,
+ 0x44, 0x60, 0x15, 0x2a, 0x06, 0x12, 0x28, 0xad, 0xf5, 0xe8, 0xab, 0x07, 0x91, 0x1d, 0x90, 0x7b,
+ 0x0f, 0xb2, 0xc2, 0x8b, 0xb2, 0xce, 0x63, 0xca, 0x9a, 0x27, 0x14, 0x48, 0x59, 0x5a, 0xe9, 0x45,
+ 0x9d, 0x64, 0x02, 0xb1, 0x62, 0xcf, 0xa3, 0x58, 0xdf, 0x58, 0xb4, 0x2d, 0x66, 0x51, 0x56, 0x5c,
+ 0xe4, 0xa0, 0x60, 0x06, 0xc1, 0x0a, 0xcf, 0x32, 0x4c, 0x7e, 0x31, 0x9e, 0x64, 0x69, 0xc9, 0x8b,
+ 0x3a, 0xf9, 0x89, 0x30, 0x9c, 0x61, 0x5b, 0xc5, 0x1c, 0xd2, 0x96, 0x70, 0x81, 0x5e, 0xba, 0x51,
+ 0x64, 0x4d, 0x83, 0xbc, 0x55, 0x21, 0x2a, 0xff, 0x54, 0x5a, 0x44, 0x77, 0xcc, 0x0a, 0xe1, 0xfa,
+ 0x13, 0xa8, 0x97, 0xe6, 0x76, 0xdf, 0x38, 0x7c, 0x11, 0xc1, 0xa2, 0xf5, 0x85, 0xc3, 0x6f, 0x2a,
+ 0x70, 0x30, 0x13, 0xe8, 0xdb, 0xe5, 0xa4, 0x9c, 0xc5, 0x23, 0x2b, 0xa2, 0x15, 0x8f, 0x3e, 0xa9,
+ 0x9a, 0x85, 0x6f, 0xd5, 0xab, 0xd9, 0x9f, 0x7c, 0x43, 0xb7, 0x67, 0xf1, 0xca, 0x08, 0x98, 0xb1,
+ 0xbb, 0xca, 0xaf, 0xa5, 0xbb, 0x28, 0xba, 0xf7, 0xb1, 0x86, 0x8c, 0xf1, 0x46, 0x50, 0x33, 0x59,
+ 0x8f, 0x4d, 0x23, 0x6e, 0x27, 0xe9, 0xc4, 0xe5, 0x69, 0x65, 0xb8, 0xed, 0x5f, 0xf3, 0x06, 0xdd,
+ 0x3e, 0xa9, 0xcf, 0x84, 0x92, 0x34, 0x83, 0xf6, 0xb1, 0x28, 0xd5, 0xb7, 0xf1, 0x26, 0x33, 0x57,
+ 0x83, 0x1b, 0x15, 0xb2, 0xee, 0x7f, 0xe8, 0x9b, 0xfb, 0x6f, 0xad, 0x40, 0x14, 0x2a, 0xf9, 0xe7,
+ 0x71, 0x02, 0xd2, 0x4b, 0x1a, 0x29, 0x4a, 0x2a, 0xd7, 0xe2, 0x0b, 0x1d, 0x7e, 0xa9, 0x5c, 0x37,
+ 0x71, 0x48, 0x7c, 0x09, 0xad, 0x07, 0x1e, 0x0b, 0x7d, 0x3e, 0x01, 0x70, 0x3b, 0xa4, 0x49, 0xdc,
+ 0x91, 0xd3, 0xdc, 0xfe, 0x8b, 0x9e, 0xaf, 0x35, 0xc0, 0xd2, 0xf7, 0x02, 0x81, 0xcf, 0xf1, 0x5d,
+ 0x66, 0xce, 0x72, 0xd1, 0x74, 0x41, 0xbc, 0xca, 0x94, 0xe7, 0xab, 0xe3, 0xc9, 0xd1, 0x74, 0x00,
+ 0xe9, 0xd5, 0x6c, 0x1c, 0xe0, 0x08, 0x86, 0x97, 0xa6, 0x53, 0xd4, 0x63, 0x4e, 0x3f, 0x98, 0x7d,
+ 0x16, 0x63, 0xbd, 0x87, 0xab, 0x2b, 0xfd, 0x2c, 0x2c, 0x09, 0xe9, 0x87, 0x6e, 0x60, 0x0d, 0xb8,
+ 0x5d, 0xc7, 0x29, 0x45, 0xb4, 0x03, 0x08, 0x35, 0x48, 0x35, 0xbb, 0x52, 0x2b, 0x66, 0xeb, 0x02,
+ 0x4d, 0x29, 0xaa, 0x3c, 0x87, 0xa1, 0x55, 0x3e, 0xa0, 0x12, 0x11, 0xc9, 0x1d, 0x69, 0xe3, 0xf6,
+ 0x1f, 0xf3, 0x7c, 0x39, 0x9a, 0x08, 0x54, 0x17, 0x3d, 0x60, 0xf3, 0x9b, 0x06, 0x55, 0xc5, 0xb9,
+ 0x51, 0xee, 0x0c, 0x06, 0x45, 0xb1, 0x3d, 0x15, 0x79, 0x77, 0x3b, 0xb7, 0x70, 0xfb, 0xdb, 0x3c,
+ 0x5f, 0x69, 0xaa, 0x6f, 0x61, 0xe7, 0x03, 0x6a, 0xe7, 0xb6, 0x20, 0xe9, 0x2a, 0x6f, 0x50, 0x5e,
+ 0x0f, 0xae, 0x68, 0x87, 0x8a, 0xfb, 0x2b, 0xfd, 0xe8, 0xa5, 0x5f, 0x5d, 0x71, 0x19, 0x0a, 0xb1,
+ 0x3d, 0x20, 0x28, 0x60, 0x72, 0x0e, 0x66, 0x63, 0x13, 0xbe, 0xb8, 0xfa, 0x6a, 0x36, 0xd6, 0xfb,
+ 0xc6, 0xa8, 0xbd, 0x53, 0x09, 0xfd, 0x81, 0x09, 0x65, 0x80, 0x28, 0x2c, 0xa5, 0x0b, 0x42, 0x6e,
+ 0x71, 0xbb, 0xb6, 0xe3, 0x5e, 0x4f, 0xdf, 0x11, 0x6c, 0xfb, 0x02, 0x67, 0x68, 0xcf, 0xb5, 0x29,
+ 0x8b, 0xe8, 0xc6, 0xa0, 0x6a, 0x4d, 0xea, 0x9f, 0xff, 0x99, 0x86, 0x99, 0xdd, 0xcc, 0x36, 0x1f,
+ 0x40, 0x31, 0xb5, 0xdb, 0x4b, 0x58, 0x7b, 0x96, 0xdd, 0x6a, 0xcf, 0x02, 0xb0, 0xaf, 0xe9, 0xe5,
+ 0x82, 0xf9, 0xd8, 0x83, 0x55, 0x7b, 0xa8, 0xeb, 0xcf, 0x84, 0xae, 0x96, 0x38, 0x3b, 0xd5, 0xbd,
+ 0xfd, 0x4d, 0x7f, 0xa5, 0xc2, 0x83, 0x47, 0xe6, 0xe3, 0xe9, 0xb8, 0x5a, 0x2a, 0x01, 0x54, 0x40,
+ 0x82, 0x9e, 0x95, 0x37, 0x82, 0xe4, 0x45, 0xa0, 0x69, 0x99, 0x8b, 0xa3, 0xe2, 0xbb, 0x3a, 0xa7,
+ 0xb3, 0xb2, 0xb3, 0xb3, 0xb3, 0xb2, 0xad, 0xd9, 0xa3, 0xdd, 0xcd, 0xc6, 0xb0, 0xa0, 0xbb, 0xa1,
+ 0x1e, 0x0b, 0xb0, 0xeb, 0xff, 0x1a, 0x3a, 0x39, 0x90, 0xf2, 0xf4, 0xea, 0x5d, 0x22, 0xd7, 0x25,
+ 0x7e, 0x71, 0x3d, 0xd2, 0x5b, 0xc2, 0x58, 0xad, 0x36, 0x65, 0x23, 0x13, 0xbc, 0xe6, 0xe3, 0x0a,
+ 0xf0, 0xf3, 0xa5, 0x4a, 0x9d, 0xe9, 0x36, 0x97, 0x7a, 0xd5, 0x06, 0x68, 0xed, 0xca, 0xae, 0x71,
+ 0xb8, 0x1d, 0x83, 0xd7, 0x8f, 0x8e, 0xea, 0x20, 0x87, 0xef, 0x03, 0x88, 0x28, 0x6b, 0xae, 0xb2,
+ 0x9e, 0xde, 0x31, 0xd3, 0x06, 0x7d, 0x23, 0x60, 0x1f, 0xc6, 0x86, 0x9b, 0xcf, 0x33, 0x46, 0x5c,
+ 0x61, 0x2a, 0x61, 0x86, 0x7d, 0xe2, 0x0f, 0xaf, 0x36, 0xc5, 0xe0, 0x81, 0x14, 0xa4, 0xe7, 0x69,
+ 0x5a, 0xdc, 0xff, 0xc2, 0x17, 0xaf, 0x87, 0x03, 0x89, 0x21, 0x94, 0xc2, 0xf1, 0x54, 0x05, 0x9a,
+ 0x33, 0xb7, 0xbe, 0x94, 0x80, 0xd6, 0x7a, 0x85, 0xbc, 0xf8, 0xcf, 0xcd, 0xb8, 0x7a, 0x8f, 0xb1,
+ 0xc2, 0xb3, 0x52, 0xba, 0x5f, 0xb2, 0xdf, 0x94, 0x76, 0x0e, 0x80, 0x09, 0x63, 0x9b, 0xa4, 0x67,
+ 0xee, 0x4c, 0x3c, 0x53, 0x55, 0x19, 0xcd, 0x08, 0x9c, 0xeb, 0xd2, 0xce, 0x71, 0xc6, 0x80, 0xeb,
+ 0xf4, 0x17, 0xb8, 0x89, 0xfc, 0xf2, 0x12, 0x92, 0x87, 0xaf, 0x3d, 0x82, 0x2c, 0x80, 0xd5, 0xa5,
+ 0xc4, 0xd8, 0x72, 0x89, 0xa5, 0x03, 0xaf, 0x6b, 0x4f, 0x6f, 0x04, 0x7d, 0xb6, 0x74, 0x00, 0x45,
+ 0x10, 0xb1, 0x9f, 0x91, 0x72, 0x3a, 0x97, 0x56, 0x5e, 0x26, 0xed, 0xd3, 0xcd, 0xe8, 0xd2, 0x2a,
+ 0xa3, 0x57, 0x88, 0x5e, 0xc5, 0xd5, 0xf2, 0xf2, 0x9b, 0xce, 0xdf, 0xa6, 0x52, 0x36, 0xb6, 0x7c,
+ 0x1d, 0x08, 0x24, 0x0c, 0xc6, 0xb6, 0xe3, 0xdb, 0x2e, 0xc0, 0x7e, 0xab, 0x35, 0x0b, 0x6f, 0x72,
+ 0xd9, 0xb3, 0x6d, 0xb9, 0x23, 0x98, 0xef, 0xa7, 0x33, 0x9c, 0x8f, 0x84, 0xf0, 0x93, 0xc9, 0x72,
+ 0x24, 0x96, 0xcc, 0x38, 0x81, 0x9a, 0x84, 0x8f, 0xbe, 0x09, 0x01, 0xc1, 0x8f, 0xc7, 0x36, 0xc9,
+ 0xea, 0x0d, 0xd3, 0x12, 0x66, 0x44, 0xd7, 0x2b, 0xea, 0x36, 0x38, 0x19, 0x10, 0x8f, 0xc6, 0x8c,
+ 0x88, 0x38, 0x5c, 0x77, 0x4f, 0xd0, 0x41, 0x3c, 0x2c, 0x3a, 0xe3, 0x69, 0x62, 0xd5, 0x10, 0xbc,
+ 0x0c, 0xb0, 0x5d, 0xca, 0xd1, 0x8b, 0x0d, 0xa1, 0xed, 0xb6, 0xd0, 0x2b, 0xed, 0x8f, 0xb2, 0x82,
+ 0x55, 0x4a, 0xf1, 0x4b, 0x2f, 0xdd, 0x3c, 0x4c, 0x95, 0x37, 0x78, 0x86, 0x3e, 0x24, 0xfd, 0x64,
+ 0xa0, 0x7c, 0x21, 0xb9, 0xc2, 0x7a, 0x27, 0xbf, 0x74, 0xa7, 0x7a, 0x08, 0x15, 0x18, 0xb5, 0xfe,
+ 0x5e, 0x08, 0xf6, 0x12, 0xbc, 0xe3, 0x51, 0x69, 0x21, 0x9e, 0x42, 0xad, 0x16, 0xfc, 0xe1, 0x79,
+ 0xdd, 0x6c, 0x23, 0xc9, 0xeb, 0xf6, 0x69, 0x59, 0xf8, 0x0a, 0x67, 0xf3, 0x20, 0x75, 0x05, 0xdb,
+ 0xf8, 0x11, 0x1d, 0xdf, 0x4f, 0x32, 0xa9, 0xe7, 0xd6, 0x07, 0xe3, 0xbf, 0x06, 0xcd, 0xf0, 0x9b,
+ 0x41, 0xd1, 0x52, 0x1e, 0x24, 0x49, 0x31, 0x75, 0x1b, 0x13, 0xeb, 0x2c, 0xf3, 0xa5, 0x1c, 0x08,
+ 0x9c, 0x22, 0xdb, 0xb9, 0xb7, 0xdc, 0x86, 0x2e, 0xad, 0x47, 0x7a, 0x94, 0x54, 0x76, 0xd0, 0x37,
+ 0x08, 0x38, 0x97, 0x1b, 0xc8, 0x09, 0x17, 0xf4, 0xf8, 0x02, 0x7c, 0xfb, 0x64, 0x73, 0x34, 0x31,
+ 0x77, 0x83, 0x4c, 0x39, 0xa4, 0x1c, 0xbc, 0xa1, 0x26, 0x97, 0xe9, 0x5d, 0xa7, 0x79, 0x8d, 0x69,
+ 0xaa, 0xb0, 0x46, 0x5a, 0xed, 0x97, 0x9e, 0xb9, 0x09, 0x6e, 0x49, 0x4a, 0x1f, 0x60, 0x9b, 0x25,
+ 0xfb, 0x9d, 0x89, 0x10, 0x9e, 0xe8, 0x4d, 0xc7, 0xa5, 0xbc, 0x68, 0x72, 0x61, 0xba, 0xa5, 0x93,
+ 0x7b, 0xc3, 0x63, 0x32, 0xeb, 0x61, 0xd9, 0xf2, 0xe2, 0xb8, 0x37, 0xff, 0xbc, 0xd4, 0xac, 0x4c,
+ 0xcf, 0xe9, 0xe6, 0xde, 0x70, 0x6b, 0x15, 0x6d, 0x73, 0x55, 0xe5, 0x7c, 0x46, 0xd0, 0x7c, 0xcc,
+ 0xf2, 0x33, 0x3e, 0x66, 0x81, 0x1a, 0x40, 0xcd, 0xaf, 0x16, 0xbd, 0x31, 0x6b, 0x84, 0x0f, 0xea,
+ 0xcc, 0xf3, 0x16, 0xb3, 0x5a, 0x85, 0x5f, 0x59, 0xf3, 0xbf, 0xfc, 0x62, 0xb9, 0xb2, 0x03, 0x77,
+ 0x0e, 0x7b, 0xc8, 0x60, 0x40, 0x30, 0xd8, 0x86, 0xe3, 0x37, 0xe5, 0x61, 0xf5, 0x9a, 0x69, 0x09,
+ 0x1e, 0x2f, 0xad, 0x50, 0xdf, 0x71, 0x95, 0xc6, 0x02, 0xe7, 0x09, 0xeb, 0x1b, 0x1b, 0x64, 0x36,
+ 0x78, 0x05, 0x80, 0x50, 0x57, 0x69, 0x5e, 0x1a, 0x15, 0x8f, 0xdf, 0x7f, 0x39, 0xe2, 0x08, 0x16,
+ 0x33, 0x15, 0xf0, 0xab, 0x7a, 0xd2, 0x16, 0x0e, 0xfe, 0x04, 0x28, 0xbe, 0x32, 0x19, 0xa2, 0xa0,
+ 0xb1, 0x34, 0xda, 0x23, 0x95, 0xcd, 0x5c, 0xcd, 0xc7, 0xf4, 0x5d, 0xba, 0x6e, 0x62, 0xe9, 0x04,
+ 0x57, 0x97, 0xd7, 0x81, 0xae, 0xce, 0x72, 0x19, 0x9c, 0x9b, 0x34, 0x51, 0x7a, 0x4a, 0x23, 0xbd,
+ 0xa8, 0x25, 0xc2, 0x09, 0x3c, 0xf6, 0x6c, 0x97, 0xb6, 0xe9, 0x20, 0xda, 0x9b, 0x78, 0x15, 0xaf,
+ 0xdb, 0xe4, 0xb4, 0x9a, 0x1a, 0xc8, 0x05, 0x60, 0x6c, 0x6c, 0x1b, 0x4c, 0x9e, 0x08, 0x67, 0x4d,
+ 0x10, 0xf0, 0xe5, 0x74, 0xc7, 0x0e, 0x42, 0x94, 0xa5, 0x3d, 0xc6, 0x83, 0xeb, 0xe9, 0x5c, 0x2a,
+ 0x9c, 0xc5, 0x37, 0xcb, 0x6f, 0x41, 0x64, 0xe7, 0x93, 0x2c, 0xad, 0x26, 0x0f, 0xc6, 0x79, 0x3a,
+ 0x88, 0xcc, 0x00, 0x04, 0x9c, 0xf7, 0x15, 0xc8, 0xcb, 0x80, 0x59, 0xda, 0xff, 0x8e, 0xda, 0xe8,
+ 0x13, 0x56, 0x82, 0xc0, 0x43, 0xc0, 0x93, 0x70, 0x0e, 0x6f, 0xab, 0x36, 0x86, 0x0b, 0x27, 0x26,
+ 0xe7, 0x1d, 0x95, 0x2c, 0xed, 0x64, 0x22, 0x49, 0xd6, 0x10, 0xa0, 0xe0, 0x29, 0x5d, 0xd7, 0x19,
+ 0xfa, 0x92, 0xb5, 0x7f, 0xa5, 0x94, 0xd7, 0x61, 0x3a, 0x53, 0x31, 0x99, 0x86, 0x4b, 0x97, 0x43,
+ 0xe1, 0x92, 0x54, 0xd9, 0xde, 0xfb, 0xd1, 0x13, 0x5d, 0x7b, 0xa9, 0x07, 0x95, 0xcc, 0x67, 0x4d,
+ 0xe6, 0x4e, 0x75, 0x6c, 0x58, 0x18, 0x6f, 0xad, 0x1f, 0xe9, 0x1c, 0xe4, 0xde, 0x04, 0xca, 0xb4,
+ 0xad, 0xfc, 0x4b, 0x60, 0x42, 0x2c, 0x67, 0x4d, 0x96, 0x61, 0x08, 0xa9, 0xb2, 0xd5, 0xd4, 0xaf,
+ 0x12, 0xf7, 0x46, 0x83, 0xe1, 0x18, 0x9e, 0xb1, 0x17, 0xe3, 0x81, 0x40, 0x4f, 0xc2, 0x2d, 0xb0,
+ 0x50, 0xb1, 0xf8, 0xd2, 0x1e, 0x59, 0xa9, 0x1e, 0x3f, 0xfa, 0x97, 0xa3, 0xfb, 0x03, 0x12, 0x2a,
+ 0x4a, 0x64, 0x4d, 0x92, 0xb4, 0x52, 0x8f, 0xd1, 0xe4, 0xaa, 0x06, 0x7d, 0x00, 0x3c, 0x34, 0x70,
+ 0x90, 0x6f, 0xd0, 0x60, 0xa4, 0xa2, 0x6b, 0x90, 0x2a, 0xcf, 0x26, 0x9c, 0x22, 0x3b, 0x1a, 0x40,
+ 0x48, 0x4f, 0xc4, 0xf6, 0x00, 0x84, 0x0e, 0x5f, 0xce, 0x8c, 0x25, 0x3d, 0xf4, 0xc8, 0x78, 0x14,
+ 0xce, 0x1c, 0x3f, 0xa0, 0x4b, 0x25, 0x18, 0xf7, 0x70, 0xbb, 0x2a, 0xf1, 0x25, 0x67, 0x8b, 0xbf,
+ 0xfa, 0x56, 0x80, 0xbe, 0x39, 0xa2, 0x87, 0xe5, 0xda, 0x3c, 0x21, 0x64, 0x99, 0xcf, 0x5e, 0x45,
+ 0x5b, 0x8b, 0x47, 0xc0, 0xa7, 0x30, 0xe8, 0x12, 0x2e, 0x93, 0xb4, 0x93, 0x68, 0x43, 0xe1, 0x47,
+ 0x83, 0x6b, 0xa2, 0x39, 0x49, 0x9e, 0x3e, 0xa9, 0x23, 0x6b, 0x4f, 0x6a, 0x33, 0x24, 0x73, 0x33,
+ 0x59, 0x12, 0x3a, 0xb5, 0x45, 0xc3, 0x57, 0xa6, 0x74, 0x52, 0xab, 0xaf, 0xf1, 0x26, 0x8d, 0x67,
+ 0xd5, 0x9b, 0x47, 0x62, 0xf7, 0x3c, 0x59, 0x38, 0x8b, 0x5b, 0x1d, 0x76, 0x65, 0xf9, 0x18, 0xf5,
+ 0xc5, 0xc7, 0xf4, 0x78, 0xab, 0x9d, 0x3a, 0x8e, 0x69, 0xca, 0x94, 0x03, 0x54, 0xda, 0x1c, 0xd5,
+ 0x3b, 0xe3, 0x57, 0xdb, 0x85, 0x72, 0x6e, 0x3f, 0xbe, 0x0d, 0xa4, 0xe1, 0xf6, 0x0b, 0x37, 0x59,
+ 0x6f, 0xc9, 0x18, 0xe7, 0x20, 0xbd, 0x5d, 0x98, 0x3c, 0x26, 0xb8, 0x6b, 0x2b, 0x3c, 0x09, 0x80,
+ 0x63, 0x98, 0xb0, 0xcd, 0xb9, 0x52, 0xfa, 0x3c, 0x6e, 0xbf, 0xdf, 0xa3, 0xe8, 0xc4, 0x0e, 0x3f,
+ 0x40, 0x6a, 0x9c, 0xa9, 0xf4, 0x30, 0xf1, 0x9e, 0x61, 0xc8, 0x65, 0x78, 0x71, 0xf5, 0x9e, 0x2f,
+ 0x28, 0x35, 0x55, 0xcb, 0xcb, 0xe8, 0x3e, 0xc9, 0x78, 0xe7, 0x10, 0xbe, 0xe2, 0x78, 0xf1, 0x3a,
+ 0xad, 0x15, 0x8f, 0xce, 0x83, 0x80, 0xc4, 0xd9, 0x01, 0x55, 0xbe, 0xc9, 0xce, 0xe3, 0x60, 0xf2,
+ 0x7c, 0x3a, 0xe7, 0x92, 0x64, 0xfa, 0xa6, 0xd6, 0x25, 0x35, 0x73, 0x6a, 0xbe, 0x12, 0x92, 0xf0,
+ 0xea, 0xee, 0x1d, 0xc8, 0x2b, 0x41, 0xe7, 0xea, 0xe3, 0x1f, 0xb0, 0x2b, 0xe1, 0x97, 0x43, 0x47,
+ 0x02, 0x06, 0xd9, 0x85, 0xb7, 0x8f, 0xad, 0x76, 0x45, 0x73, 0x39, 0xb8, 0x19, 0xcc, 0xb9, 0x96,
+ 0xe2, 0xe9, 0xd1, 0x21, 0xac, 0xf7, 0x39, 0x8d, 0x6e, 0x79, 0x2f, 0x7d, 0xfb, 0x7b, 0x0c, 0xbe,
+ 0xbf, 0x93, 0xae, 0x71, 0x34, 0xa5, 0x87, 0x85, 0x33, 0x04, 0x68, 0xd7, 0x90, 0x1e, 0xf1, 0x4b,
+ 0xdd, 0x11, 0x3c, 0xe8, 0x9b, 0x3d, 0x90, 0x65, 0x2d, 0x79, 0x51, 0x79, 0xf1, 0x73, 0x55, 0xf7,
+ 0x36, 0x8f, 0x21, 0xc1, 0xb9, 0xcd, 0x1e, 0x62, 0xbd, 0x55, 0xcb, 0x93, 0x30, 0x54, 0x12, 0xa6,
+ 0x39, 0xe7, 0xe1, 0x31, 0xa5, 0x33, 0xa6, 0x14, 0x53, 0x2c, 0x8d, 0x7a, 0xbf, 0x2e, 0x02, 0xdb,
+ 0x58, 0x69, 0x67, 0xb4, 0xbc, 0x77, 0x0c, 0x9e, 0xd1, 0x3d, 0x88, 0x8c, 0x3e, 0xab, 0x09, 0xe6,
+ 0x71, 0x30, 0x88, 0x78, 0x6d, 0x02, 0xb7, 0xdf, 0x6d, 0xb7, 0x96, 0xe8, 0x94, 0x49, 0x2a, 0x7a,
+ 0x7c, 0x6b, 0x9f, 0x73, 0xed, 0xa4, 0x2f, 0xea, 0xba, 0x74, 0xea, 0x41, 0x8c, 0x4a, 0xa3, 0xf3,
+ 0x35, 0xbc, 0xe1, 0x02, 0x08, 0xde, 0x0c, 0x22, 0xd8, 0x19, 0x26, 0xd3, 0xf7, 0x8c, 0xc1, 0x48,
+ 0x58, 0x95, 0xd7, 0x2f, 0x04, 0x3d, 0x20, 0xc5, 0xca, 0xa9, 0x58, 0xe7, 0x2a, 0x07, 0x0f, 0x8c,
+ 0xc0, 0x3a, 0x0f, 0x5d, 0xb1, 0xd9, 0xdf, 0x5a, 0x92, 0xa8, 0x5c, 0x18, 0x08, 0x5e, 0xc3, 0x91,
+ 0xcc, 0x0d, 0xc6, 0x3e, 0x52, 0x61, 0x20, 0xa9, 0x71, 0x7b, 0xd8, 0xda, 0xf0, 0xda, 0xd4, 0x78,
+ 0xb2, 0x7d, 0x9e, 0xa3, 0x29, 0x75, 0xbe, 0x19, 0xac, 0x0a, 0xe0, 0xdd, 0x77, 0x51, 0x05, 0xc4,
+ 0x97, 0xf5, 0xbb, 0xe5, 0xad, 0x61, 0xb9, 0xca, 0xaf, 0x82, 0x5d, 0x53, 0xb5, 0x5e, 0x66, 0xa1,
+ 0x94, 0xaa, 0x4d, 0x0a, 0x08, 0x0a, 0x25, 0xe1, 0x5a, 0xb8, 0x4a, 0xd7, 0x76, 0x5d, 0x7d, 0x1d,
+ 0x3d, 0x3d, 0xdb, 0x8a, 0x67, 0x4c, 0xf6, 0x5c, 0xe5, 0xab, 0xf0, 0xe0, 0xfb, 0xe5, 0xdd, 0x24,
+ 0x23, 0xcc, 0xd1, 0xf4, 0x0a, 0xb6, 0x32, 0x66, 0x50, 0x25, 0x07, 0x79, 0x05, 0xaf, 0x39, 0xca,
+ 0xae, 0x5d, 0x43, 0xc1, 0x69, 0xb4, 0xb4, 0xab, 0xd3, 0xc0, 0xd7, 0xa8, 0xc5, 0x6f, 0x90, 0x39,
+ 0xb9, 0xd6, 0x12, 0x83, 0xf2, 0xf7, 0xfa, 0xd0, 0x99, 0xec, 0x5c, 0x60, 0x0b, 0xc5, 0xeb, 0xfc,
+ 0x4f, 0xbc, 0x71, 0xf2, 0x89, 0x42, 0xe1, 0x4b, 0x12, 0x6d, 0x4a, 0xbe, 0x7a, 0x77, 0xba, 0x2b,
+ 0x85, 0xa5, 0xbc, 0xd3, 0x50, 0xde, 0x29, 0x56, 0xe5, 0xfa, 0xb7, 0xc1, 0x19, 0x74, 0x07, 0x2a,
+ 0xe2, 0x94, 0x8e, 0xfe, 0x20, 0xf5, 0x7a, 0x29, 0x35, 0x6e, 0x5c, 0xaa, 0x41, 0xfd, 0x33, 0x32,
+ 0x60, 0x07, 0x48, 0xb3, 0xd8, 0xc1, 0xe1, 0xfb, 0xe7, 0xcd, 0xb8, 0xf8, 0x90, 0xf9, 0x9a, 0xaf,
+ 0xd0, 0xeb, 0xe1, 0x62, 0xc7, 0x84, 0xa0, 0x95, 0x05, 0x62, 0xf0, 0x0a, 0xc8, 0x7e, 0x48, 0x52,
+ 0xce, 0xe2, 0x11, 0x63, 0x7b, 0x93, 0x19, 0x0f, 0xea, 0x19, 0x47, 0x93, 0xf9, 0x2b, 0xb4, 0xc1,
+ 0xcd, 0x0e, 0x7c, 0x2f, 0xc3, 0x7c, 0x02, 0x7e, 0xae, 0x05, 0x84, 0xd6, 0x00, 0x68, 0xd6, 0xbd,
+ 0xca, 0xd2, 0x10, 0xe5, 0x9c, 0x6b, 0x1f, 0x0e, 0x94, 0xaa, 0x27, 0x43, 0xec, 0x00, 0xb7, 0xdf,
+ 0xf2, 0x15, 0xb8, 0xeb, 0x6e, 0xab, 0xf2, 0x59, 0x98, 0xba, 0x1b, 0xb9, 0x3f, 0xe7, 0x2b, 0xf6,
+ 0x9c, 0x63, 0x69, 0x8e, 0xc2, 0xbd, 0xe9, 0x89, 0xb2, 0xf8, 0x81, 0xb8, 0x3e, 0x0f, 0x2b, 0x3d,
+ 0x61, 0xe0, 0x35, 0xa4, 0xdf, 0x97, 0x18, 0x3a, 0xda, 0xea, 0x37, 0x79, 0xd5, 0x2b, 0xfc, 0xe0,
+ 0x77, 0xda, 0x2b, 0x62, 0xb3, 0x9d, 0x33, 0xf0, 0xad, 0xc5, 0xdf, 0x7e, 0x43, 0x67, 0x0e, 0x7d,
+ 0xa0, 0xc3, 0x1f, 0x59, 0x34, 0x24, 0x4d, 0xf4, 0x14, 0x33, 0x16, 0xf2, 0xaf, 0x5c, 0xcc, 0x62,
+ 0xcc, 0x57, 0x1c, 0x4d, 0xf4, 0x65, 0x45, 0x75, 0x42, 0xdc, 0xfe, 0x16, 0x6b, 0x56, 0xc9, 0x6c,
+ 0xe5, 0x57, 0xfb, 0x83, 0xc4, 0x09, 0x0f, 0xd3, 0x45, 0xec, 0x56, 0xa6, 0xf5, 0xa9, 0xfc, 0xbf,
+ 0x82, 0xef, 0x84, 0xec, 0x18, 0x7e, 0xf1, 0xf6, 0xa6, 0xaa, 0x72, 0x39, 0x97, 0x02, 0x01, 0xbb,
+ 0x13, 0xf7, 0x74, 0x4b, 0x58, 0x25, 0x13, 0x0a, 0xce, 0x32, 0xd4, 0xcc, 0xbf, 0xa2, 0x2d, 0xa9,
+ 0x1f, 0xaa, 0xc4, 0x98, 0x58, 0x0b, 0x03, 0x2d, 0x9e, 0xe4, 0x90, 0xf4, 0x50, 0xd6, 0x43, 0x39,
+ 0x71, 0x0f, 0xeb, 0x30, 0xdd, 0x10, 0x66, 0x06, 0x9b, 0xf5, 0xfd, 0xa7, 0x1d, 0x44, 0xef, 0x90,
+ 0x98, 0xcf, 0xd5, 0xe6, 0x49, 0x0e, 0x53, 0x2b, 0xf7, 0xb6, 0xfb, 0x73, 0xda, 0x4a, 0xa2, 0x82,
+ 0x49, 0x08, 0x1a, 0xa6, 0x3f, 0xb1, 0xca, 0x47, 0x40, 0x7a, 0x0d, 0x30, 0x0e, 0xaf, 0xc3, 0xc8,
+ 0x42, 0xab, 0x6a, 0xa7, 0xde, 0x66, 0x43, 0x76, 0x8a, 0x8d, 0xa7, 0x76, 0x6a, 0x8a, 0xb2, 0xf1,
+ 0xbf, 0xe8, 0x34, 0x14, 0x81, 0xc2, 0x0b, 0x05, 0x9d, 0x85, 0x1f, 0x87, 0x09, 0x83, 0x7b, 0x3e,
+ 0xbd, 0x56, 0x18, 0x7c, 0x6a, 0xa5, 0x4f, 0x2c, 0x3f, 0xd8, 0xf9, 0x2c, 0xf1, 0x04, 0xeb, 0xda,
+ 0x42, 0xad, 0x55, 0x2d, 0x61, 0xa4, 0xf9, 0xda, 0xb3, 0xc1, 0xea, 0xff, 0x0c, 0x55, 0x2b, 0x3f,
+ 0x52, 0xb1, 0x4d, 0xee, 0x7c, 0x03, 0x8a, 0x63, 0xe2, 0xef, 0xe8, 0xc2, 0xae, 0xbd, 0xa1, 0x4c,
+ 0x42, 0xa9, 0xa2, 0xb7, 0x17, 0xe6, 0x3d, 0x33, 0x62, 0x2f, 0x30, 0x49, 0x36, 0x9f, 0x40, 0xf2,
+ 0xac, 0x4a, 0x1f, 0x13, 0x7c, 0xff, 0xe5, 0x08, 0x03, 0xa2, 0x29, 0xe7, 0xfd, 0x17, 0xfe, 0x35,
+ 0x1f, 0x05, 0xe3, 0x21, 0x25, 0x86, 0x86, 0x45, 0x9d, 0xd6, 0x64, 0x8b, 0x8d, 0xe4, 0x5d, 0xc6,
+ 0x77, 0xe5, 0xac, 0x40, 0xfc, 0x9e, 0x3f, 0x05, 0x5f, 0x24, 0x3f, 0xcb, 0x0a, 0x0f, 0x12, 0x3f,
+ 0x19, 0x94, 0x8f, 0x64, 0xd6, 0x86, 0x72, 0x29, 0xc8, 0x50, 0xc5, 0xca, 0x6e, 0x86, 0x9f, 0x4a,
+ 0xbc, 0xe9, 0x10, 0xf5, 0x90, 0xf3, 0xc2, 0x1e, 0xe7, 0xba, 0x64, 0x35, 0xfe, 0xbb, 0x80, 0x7f,
+ 0xb4, 0x22, 0x9d, 0x3c, 0x84, 0x11, 0xba, 0x78, 0x34, 0x69, 0xc4, 0xeb, 0x2a, 0x34, 0xbc, 0x8d,
+ 0x0e, 0x2c, 0x76, 0xd5, 0xc2, 0x4a, 0x39, 0x59, 0x15, 0xfe, 0x67, 0x00, 0x5f, 0x5f, 0x85, 0x29,
+ 0x63, 0x6d, 0x4d, 0x26, 0x0b, 0xcc, 0x7e, 0x95, 0xb1, 0x12, 0x0d, 0xd3, 0x54, 0xc3, 0x64, 0xc3,
+ 0x0f, 0xd0, 0xf6, 0x1a, 0x7d, 0xdf, 0xf1, 0x55, 0xc6, 0x0e, 0x45, 0xd1, 0xad, 0x11, 0xce, 0x03,
+ 0x32, 0x8e, 0x9d, 0xb1, 0x17, 0x24, 0x2f, 0xaf, 0xf1, 0xc4, 0xa8, 0x7f, 0xf6, 0x5c, 0xfc, 0x7b,
+ 0x67, 0xa4, 0x49, 0xe2, 0xe3, 0xf5, 0xd2, 0xaa, 0xf8, 0xe8, 0xde, 0x0f, 0xf3, 0x9f, 0x69, 0xcc,
+ 0x95, 0xd6, 0xc6, 0x6b, 0xc9, 0x79, 0x6c, 0x81, 0x3a, 0x7d, 0xef, 0xef, 0x49, 0x6b, 0x7e, 0xe3,
+ 0xf7, 0x21, 0x4d, 0xfd, 0x5b, 0x34, 0xbd, 0x1f, 0xfa, 0x74, 0xf2, 0x0e, 0x2e, 0x20, 0xf3, 0x13,
+ 0x02, 0xdf, 0xf5, 0x7e, 0x78, 0x07, 0xfa, 0x02, 0xd8, 0x0e, 0xe8, 0x16, 0x42, 0xf7, 0x5b, 0x7e,
+ 0x5c, 0x5d, 0x46, 0xe0, 0xc7, 0xe9, 0x01, 0xee, 0xb0, 0x1b, 0x8f, 0x25, 0x01, 0x62, 0xd4, 0xf8,
+ 0x77, 0x8c, 0xb8, 0x13, 0x69, 0x85, 0x59, 0xe1, 0x7b, 0xf2, 0xaf, 0xbf, 0x1e, 0x2a, 0xb3, 0x0a,
+ 0xbe, 0x1e, 0x79, 0xb7, 0x1c, 0xa6, 0xf8, 0x46, 0x95, 0xc3, 0x95, 0x4b, 0xa3, 0xca, 0x1a, 0xe5,
+ 0xf8, 0xa8, 0x72, 0x84, 0xf2, 0xc5, 0xa8, 0xf2, 0x18, 0xe5, 0x93, 0x51, 0xe5, 0xb1, 0xca, 0x2f,
+ 0xd4, 0xf2, 0x93, 0xb4, 0xa8, 0x55, 0x5e, 0xa5, 0xc5, 0xe1, 0xf6, 0x48, 0x65, 0xfb, 0xc8, 0xf6,
+ 0x28, 0x65, 0x43, 0xb0, 0x5d, 0x2d, 0x8f, 0x53, 0x9e, 0x1e, 0x55, 0xd6, 0x29, 0xab, 0x46, 0x95,
+ 0xc7, 0x2b, 0xcb, 0x46, 0x95, 0x27, 0x28, 0xf3, 0x47, 0xe3, 0xe7, 0x94, 0xe9, 0xa3, 0xe8, 0xd1,
+ 0x2b, 0xe3, 0x46, 0x8e, 0x37, 0x51, 0xb9, 0xf3, 0xdd, 0x28, 0xf8, 0x49, 0x8a, 0xef, 0xbb, 0x91,
+ 0xf0, 0x93, 0x95, 0x4b, 0xa3, 0xca, 0xd1, 0xca, 0xf1, 0x51, 0xe5, 0x29, 0xca, 0x17, 0xa3, 0xca,
+ 0x53, 0x95, 0x4f, 0x46, 0x95, 0xef, 0x51, 0x7e, 0x31, 0xaa, 0x1c, 0xa3, 0x48, 0xa3, 0xca, 0xb1,
+ 0xca, 0xf6, 0x51, 0xe5, 0x69, 0xca, 0x0b, 0xa3, 0xca, 0xd3, 0x95, 0x75, 0xa3, 0xca, 0x71, 0xca,
+ 0x13, 0xa3, 0xca, 0x33, 0x94, 0xa5, 0xdf, 0x8d, 0x98, 0xcf, 0x4c, 0x65, 0xfe, 0xe8, 0xf9, 0xcc,
+ 0xa2, 0x97, 0x33, 0xf1, 0xea, 0x0d, 0x83, 0x41, 0x18, 0x83, 0xf9, 0x3c, 0x5e, 0xa1, 0xc2, 0x17,
+ 0x84, 0x51, 0xbb, 0xf0, 0xde, 0x5f, 0x22, 0x9e, 0x94, 0xc1, 0x27, 0x35, 0x2d, 0x31, 0xd1, 0xc8,
+ 0x24, 0xf3, 0x7c, 0xd1, 0xc6, 0x32, 0xbe, 0xa8, 0xd0, 0xb0, 0xb9, 0x74, 0x83, 0xb0, 0xb1, 0x28,
+ 0xbf, 0xbc, 0xa8, 0xa0, 0x70, 0x5e, 0x82, 0xa1, 0x74, 0x93, 0xa1, 0x6c, 0x6b, 0x11, 0xb3, 0xda,
+ 0xb2, 0x82, 0xb1, 0x15, 0xad, 0x17, 0xca, 0x8b, 0xf9, 0x6d, 0xcc, 0x9a, 0xcd, 0x45, 0xe5, 0x8e,
+ 0x0d, 0xa5, 0x5b, 0x98, 0x8d, 0x45, 0x9b, 0x04, 0xc6, 0x52, 0xb4, 0xb1, 0xb4, 0x7c, 0x9b, 0x61,
+ 0x63, 0x41, 0x99, 0xa1, 0x68, 0xab, 0xb3, 0x40, 0xa8, 0x00, 0x24, 0x0b, 0x18, 0xeb, 0x93, 0xe6,
+ 0xd5, 0xf6, 0xfb, 0x99, 0xb9, 0x15, 0x50, 0xb9, 0xbe, 0xa8, 0x8c, 0x2f, 0x06, 0x44, 0x05, 0xbc,
+ 0x61, 0xee, 0xd6, 0x05, 0x06, 0x73, 0x79, 0x79, 0x69, 0xb9, 0x61, 0x7d, 0x69, 0x61, 0xd1, 0xa3,
+ 0x50, 0x06, 0xb4, 0xcf, 0x03, 0x1e, 0xde, 0xb0, 0xa9, 0x94, 0x37, 0x94, 0x95, 0x17, 0x55, 0xc0,
+ 0x33, 0x03, 0x43, 0x1a, 0x60, 0x90, 0x0a, 0xec, 0xc5, 0x97, 0x96, 0x1a, 0x4a, 0x37, 0x14, 0x32,
+ 0x2b, 0x36, 0x6d, 0x2e, 0xd8, 0x50, 0x5c, 0x68, 0x28, 0x2d, 0xc3, 0xae, 0xcc, 0x5a, 0xa8, 0xde,
+ 0x58, 0xb0, 0x69, 0x9b, 0xc1, 0xbc, 0xe4, 0xc1, 0x44, 0x03, 0x74, 0x2a, 0x2f, 0x2e, 0xaa, 0x98,
+ 0xcd, 0xa4, 0x96, 0x0a, 0x1b, 0x0a, 0x29, 0xae, 0xa2, 0x4d, 0x05, 0xcf, 0x6d, 0x28, 0x32, 0x24,
+ 0x43, 0xeb, 0x86, 0xe2, 0x4d, 0x45, 0x8c, 0x6d, 0x85, 0x25, 0x8d, 0x61, 0x52, 0x60, 0x5e, 0x2f,
+ 0x94, 0x95, 0x16, 0xc3, 0x20, 0x19, 0x45, 0x9b, 0x8a, 0xca, 0x0b, 0x36, 0xc0, 0xa0, 0xa5, 0x7c,
+ 0xd1, 0x7a, 0x4a, 0xa1, 0xa3, 0x40, 0xd8, 0xc0, 0x33, 0x69, 0xc5, 0x15, 0x2f, 0x18, 0x8a, 0x28,
+ 0x95, 0x48, 0x6f, 0x5a, 0x79, 0xf1, 0xe6, 0x22, 0xa4, 0x34, 0xdf, 0x9c, 0x9a, 0x99, 0x9f, 0x6e,
+ 0xcb, 0x67, 0xcc, 0xe9, 0x2b, 0x0c, 0xd6, 0xe4, 0xec, 0xb5, 0x38, 0x4b, 0x43, 0xf1, 0xa6, 0x0a,
+ 0xbe, 0x60, 0xc3, 0x86, 0x02, 0x8a, 0x60, 0xbd, 0xb3, 0x68, 0xfd, 0x0b, 0x80, 0xa6, 0x78, 0x43,
+ 0x51, 0x21, 0xce, 0xe2, 0x51, 0x83, 0x4d, 0x58, 0xbf, 0xbe, 0xa8, 0xa2, 0xc2, 0x21, 0x6c, 0xd8,
+ 0xb0, 0x0d, 0x60, 0x8b, 0xf9, 0x62, 0x98, 0xc5, 0x4b, 0x45, 0x85, 0x51, 0x0c, 0xef, 0xe0, 0xcb,
+ 0xa0, 0xbd, 0xa8, 0x1c, 0x66, 0x6a, 0x28, 0xae, 0x30, 0xc0, 0xcc, 0x0b, 0x8b, 0x37, 0x3d, 0x6f,
+ 0xe0, 0x9d, 0x45, 0x06, 0x07, 0x20, 0x00, 0x68, 0x43, 0xc5, 0x46, 0x40, 0x0d, 0xcd, 0x65, 0x05,
+ 0xeb, 0x5f, 0x28, 0xe2, 0x2b, 0x0c, 0xf3, 0x8a, 0x79, 0x84, 0x03, 0x46, 0x16, 0x1a, 0x9e, 0xdb,
+ 0xc6, 0x17, 0x55, 0x24, 0xcc, 0x37, 0x14, 0x96, 0x6e, 0xd9, 0xb4, 0xa1, 0xb4, 0xa0, 0xd0, 0xb0,
+ 0xb1, 0xf8, 0x79, 0x27, 0x6f, 0xe0, 0x0b, 0x5e, 0x28, 0x32, 0x6c, 0x28, 0xdd, 0xf4, 0x7c, 0x51,
+ 0xf9, 0x82, 0x28, 0x26, 0x3d, 0x79, 0xed, 0xa2, 0x07, 0x99, 0x74, 0x4a, 0x10, 0xb0, 0xd2, 0x40,
+ 0x01, 0x81, 0xe0, 0xe7, 0x8b, 0x0c, 0x8b, 0x16, 0x30, 0x0b, 0x9f, 0x2b, 0x2d, 0xe5, 0x17, 0x6e,
+ 0x28, 0xde, 0x08, 0x0c, 0x7a, 0xe0, 0xb9, 0xe2, 0xd2, 0x8a, 0x05, 0x15, 0xdb, 0x2a, 0x98, 0xef,
+ 0x95, 0x0d, 0x15, 0x40, 0x2f, 0x10, 0xb3, 0xbe, 0xb4, 0xbc, 0x1c, 0xf8, 0x04, 0x48, 0xa7, 0xaf,
+ 0x5b, 0x64, 0xdc, 0x68, 0x4d, 0x5e, 0xbd, 0x22, 0x15, 0x9e, 0x1e, 0x59, 0x6a, 0xdc, 0x38, 0x7d,
+ 0x5d, 0xe2, 0xc6, 0x47, 0x0d, 0x4c, 0x32, 0x30, 0x7e, 0xd3, 0x03, 0x42, 0x05, 0x65, 0xfc, 0xc6,
+ 0x11, 0x72, 0x01, 0xab, 0xb3, 0x0d, 0xa7, 0x08, 0xbc, 0x2a, 0x2e, 0x2c, 0x32, 0x14, 0x18, 0x82,
+ 0x30, 0x15, 0x2a, 0xdf, 0x17, 0x8c, 0x58, 0xb6, 0xc2, 0x22, 0xbe, 0xa8, 0x1c, 0xc7, 0x37, 0x20,
+ 0x6d, 0x86, 0x42, 0x64, 0x3e, 0x43, 0xc7, 0x82, 0x01, 0x12, 0xb7, 0x32, 0x56, 0x10, 0x91, 0x0a,
+ 0xc0, 0xf0, 0x42, 0xd1, 0x36, 0x9c, 0x4f, 0x79, 0x11, 0x2f, 0x94, 0xa3, 0x90, 0x18, 0xe6, 0x56,
+ 0x2c, 0x08, 0xb2, 0x34, 0x75, 0x43, 0x69, 0x45, 0x11, 0x5d, 0x04, 0xa1, 0xbc, 0x08, 0x56, 0x73,
+ 0x73, 0x31, 0x0a, 0x12, 0x74, 0x4e, 0x64, 0x6c, 0x3c, 0x30, 0x92, 0x2f, 0x2f, 0x58, 0x5f, 0xf4,
+ 0x68, 0x14, 0x63, 0x30, 0xac, 0x9b, 0x5b, 0x96, 0x17, 0xc5, 0x64, 0x02, 0xdf, 0x42, 0xe4, 0x02,
+ 0xbb, 0x4b, 0xd7, 0x17, 0xf0, 0xa5, 0xe5, 0x8f, 0x1a, 0xd6, 0x08, 0xbc, 0xa1, 0xd4, 0x11, 0x6c,
+ 0x50, 0x05, 0x1a, 0x38, 0x57, 0x2e, 0xac, 0x87, 0x11, 0x81, 0xf4, 0xe2, 0xe7, 0x37, 0x15, 0xd0,
+ 0x27, 0xe4, 0x8b, 0x80, 0xaa, 0xc3, 0xa4, 0x94, 0x0a, 0x9b, 0x0a, 0x0d, 0xe5, 0x05, 0xc0, 0x7b,
+ 0x2a, 0xf6, 0x45, 0x85, 0x50, 0x69, 0x45, 0x5e, 0xab, 0x82, 0xf5, 0xf8, 0xe3, 0x8f, 0x33, 0x45,
+ 0x85, 0xc5, 0x80, 0x1d, 0xd7, 0x85, 0x59, 0xb0, 0x90, 0x89, 0x62, 0x56, 0xaf, 0x4d, 0xb7, 0x85,
+ 0x74, 0x28, 0x38, 0xb8, 0x2a, 0x89, 0x94, 0xfa, 0x05, 0xcc, 0x6c, 0x18, 0x98, 0x49, 0x2b, 0xda,
+ 0x5c, 0xbc, 0xbe, 0x88, 0xf2, 0xa7, 0x60, 0x33, 0xb4, 0x20, 0xf3, 0x86, 0x15, 0x62, 0xad, 0xcd,
+ 0xc6, 0x44, 0xcd, 0x9e, 0x6d, 0xb0, 0xa9, 0xab, 0xaa, 0xca, 0x0e, 0x82, 0x3a, 0x90, 0x9c, 0xd9,
+ 0xd8, 0x94, 0x59, 0x00, 0x12, 0xbc, 0xad, 0x54, 0x00, 0x5a, 0xcb, 0x8a, 0x41, 0x10, 0xbe, 0xbf,
+ 0xc2, 0xc0, 0x3e, 0x94, 0xba, 0x72, 0xe0, 0xf8, 0x7c, 0x03, 0x15, 0x0a, 0xf8, 0x51, 0x81, 0xe6,
+ 0x1b, 0x40, 0x0d, 0x46, 0xca, 0x09, 0xe2, 0x2b, 0x2c, 0x46, 0x49, 0x28, 0x45, 0x95, 0x43, 0x16,
+ 0x95, 0xc2, 0x6a, 0xc1, 0x0f, 0xa2, 0x28, 0x2b, 0x28, 0xe7, 0x8b, 0x71, 0x06, 0x15, 0x68, 0x3a,
+ 0xb0, 0x46, 0x5d, 0x46, 0x3a, 0x81, 0xc7, 0xa3, 0xa2, 0x98, 0x1f, 0x48, 0x9b, 0xba, 0xa0, 0xa9,
+ 0x6b, 0xb3, 0x57, 0xdd, 0x9f, 0xbc, 0x6a, 0xed, 0xfd, 0x69, 0xe6, 0x55, 0xea, 0xba, 0x62, 0xbf,
+ 0x05, 0xea, 0x82, 0x3d, 0x50, 0x11, 0xb4, 0x11, 0x2a, 0x1b, 0x93, 0x37, 0x00, 0xef, 0x69, 0x99,
+ 0xaa, 0x1b, 0x63, 0x29, 0x58, 0xef, 0x44, 0x81, 0x51, 0x4b, 0xc1, 0x01, 0x7e, 0x30, 0xce, 0x02,
+ 0x60, 0xf7, 0x0f, 0xf8, 0x5c, 0x01, 0x53, 0xa9, 0xc0, 0xe2, 0x16, 0x58, 0x29, 0x55, 0x7a, 0xee,
+ 0xea, 0x4a, 0x69, 0x59, 0xd1, 0x26, 0x95, 0x9b, 0x73, 0xb7, 0x22, 0x17, 0x9e, 0x03, 0xd5, 0x51,
+ 0x15, 0x91, 0xaa, 0xc4, 0x28, 0xed, 0xf9, 0xff, 0x2a, 0xd1, 0x73, 0x42, 0x31, 0x48, 0xf8, 0x8a,
+ 0x34, 0xd0, 0x52, 0x50, 0x6a, 0x7e, 0xbd, 0x13, 0xf4, 0xc8, 0x0c, 0xd2, 0x82, 0x7c, 0x43, 0x79,
+ 0x5c, 0x60, 0x00, 0x25, 0xd8, 0xb4, 0x19, 0x66, 0x05, 0x64, 0x81, 0x55, 0xda, 0xf8, 0x0f, 0x45,
+ 0x02, 0xa8, 0x4c, 0x2b, 0x15, 0x50, 0x75, 0x54, 0x56, 0x6c, 0x5d, 0xf2, 0x08, 0x63, 0x2f, 0x2e,
+ 0xe7, 0x05, 0x90, 0x84, 0x0a, 0x0a, 0xc6, 0x14, 0x57, 0x94, 0x9a, 0x1e, 0x7e, 0x38, 0x11, 0x26,
+ 0x02, 0xe0, 0x9b, 0x0a, 0x36, 0x16, 0xa9, 0xfa, 0x3b, 0x2c, 0x8f, 0x89, 0xc6, 0x07, 0x17, 0x2d,
+ 0x7e, 0xe8, 0xe1, 0x47, 0x96, 0x98, 0x0a, 0x9e, 0x5b, 0x5f, 0x58, 0xe4, 0x08, 0xaa, 0x81, 0x61,
+ 0xd9, 0xdc, 0x8a, 0xfb, 0xe7, 0x96, 0x3d, 0x16, 0xc5, 0xac, 0xb0, 0xad, 0x51, 0x11, 0x6c, 0x2a,
+ 0x05, 0xdb, 0x58, 0xbc, 0xb1, 0x00, 0xc8, 0x50, 0x9d, 0x02, 0x2c, 0x63, 0xc5, 0xfa, 0xf2, 0xe2,
+ 0x32, 0x14, 0xe0, 0xd9, 0x68, 0xa3, 0xff, 0x91, 0x12, 0xa8, 0x5c, 0xcc, 0x06, 0xf7, 0x71, 0x57,
+ 0x05, 0x8b, 0x9e, 0x13, 0x9e, 0x67, 0x9e, 0x4c, 0x37, 0x67, 0x33, 0xf3, 0x36, 0x81, 0x21, 0x4c,
+ 0x08, 0x02, 0x85, 0x24, 0x78, 0x85, 0x75, 0xf3, 0x62, 0x43, 0x41, 0x61, 0x21, 0x4a, 0xc2, 0xa3,
+ 0x86, 0x7b, 0xe7, 0x56, 0xdc, 0xcb, 0x50, 0xc7, 0xa5, 0x01, 0xa7, 0xa5, 0x67, 0xc3, 0x34, 0x5a,
+ 0xbd, 0x21, 0xa9, 0x8a, 0x3a, 0x32, 0x70, 0x60, 0x0b, 0xe0, 0x3f, 0x7e, 0x16, 0x32, 0x74, 0x49,
+ 0x99, 0xee, 0x39, 0x2c, 0x93, 0x3e, 0x57, 0xfd, 0xe4, 0x07, 0x7f, 0xff, 0x6d, 0xee, 0xdd, 0x3a,
+ 0x6c, 0xc7, 0xd7, 0xd4, 0xc7, 0x42, 0x8c, 0xd7, 0x02, 0x99, 0xf8, 0x1b, 0x10, 0xe6, 0x9d, 0x83,
+ 0xdf, 0x6f, 0xa1, 0x6e, 0x15, 0x3c, 0x67, 0x42, 0xce, 0xbd, 0x36, 0x1d, 0xdf, 0x06, 0x60, 0x99,
+ 0x3c, 0xf8, 0xc4, 0x43, 0x5d, 0x0a, 0xa4, 0x4c, 0xef, 0xc2, 0xaf, 0x26, 0x4d, 0xad, 0x2f, 0x80,
+ 0x76, 0x3b, 0xd4, 0x39, 0xe0, 0xf3, 0x2a, 0xd4, 0x17, 0x05, 0xe1, 0xff, 0x7f, 0x9f, 0xbf, 0xe0,
+ 0xab, 0x01, 0x8f, 0xb1, 0xcc, 0xeb, 0xf0, 0x79, 0x0f, 0x3e, 0x7b, 0xe0, 0xe3, 0x86, 0x4f, 0x2b,
+ 0x7c, 0x3a, 0xe0, 0xe3, 0x87, 0x0f, 0xf3, 0x38, 0xcb, 0xe8, 0xe1, 0x63, 0x80, 0x4f, 0x22, 0x7c,
+ 0x92, 0xe0, 0x63, 0x85, 0xcf, 0xb3, 0xf0, 0x29, 0x83, 0x4f, 0x15, 0x7c, 0x5e, 0x87, 0xcf, 0x7b,
+ 0xf0, 0xd9, 0x03, 0x1f, 0x37, 0x7c, 0x5a, 0xe1, 0xd3, 0x01, 0x1f, 0x3f, 0xde, 0x58, 0x82, 0x31,
+ 0xf4, 0xf0, 0x31, 0xc0, 0x27, 0x11, 0x3e, 0x49, 0xf0, 0xb1, 0xc2, 0xe7, 0x59, 0xf8, 0x94, 0xc1,
+ 0x07, 0x7d, 0x7f, 0x34, 0xee, 0xdd, 0xe1, 0xa5, 0xbd, 0xd5, 0x39, 0x8c, 0x52, 0xfe, 0xdd, 0x8c,
+ 0xae, 0x9b, 0x8f, 0xa5, 0x5d, 0xcf, 0xf9, 0xf3, 0x81, 0x09, 0xeb, 0xea, 0xa4, 0xd3, 0xcf, 0x4c,
+ 0x3a, 0x9c, 0x04, 0xb1, 0x6b, 0x45, 0x59, 0xf1, 0x26, 0xa1, 0x8c, 0x99, 0x76, 0x93, 0x61, 0xf2,
+ 0xf3, 0x85, 0xc2, 0xe2, 0xcd, 0x1b, 0x4b, 0x0b, 0x0b, 0x8b, 0x17, 0x33, 0x42, 0x1f, 0x56, 0xd0,
+ 0xc2, 0x22, 0xa6, 0xb3, 0x2f, 0xd4, 0x8a, 0x25, 0x7f, 0x3f, 0x2d, 0x05, 0xdb, 0xfa, 0x06, 0x18,
+ 0x06, 0xb4, 0xe9, 0x05, 0x1a, 0x3a, 0xe4, 0x57, 0x50, 0x03, 0x51, 0xc1, 0x5c, 0xba, 0x15, 0xac,
+ 0x5d, 0x0f, 0xd5, 0x7c, 0x51, 0x7e, 0xf1, 0xa6, 0xc2, 0xa2, 0xad, 0x8c, 0x08, 0xa1, 0x09, 0xf5,
+ 0x0a, 0xcc, 0xb8, 0x30, 0x96, 0xa1, 0xfe, 0x68, 0x51, 0x3e, 0x7a, 0x47, 0x66, 0x10, 0xca, 0x8e,
+ 0x02, 0x7e, 0xd1, 0x83, 0xf9, 0xcf, 0x17, 0xf1, 0xf9, 0x60, 0xe9, 0x8a, 0x36, 0x30, 0xd3, 0xc3,
+ 0x43, 0x75, 0x08, 0x92, 0xbf, 0xbe, 0x74, 0x13, 0x5f, 0xb4, 0x95, 0x67, 0xe6, 0x44, 0x84, 0xaa,
+ 0x51, 0x53, 0x99, 0x73, 0x63, 0x46, 0x16, 0x01, 0x94, 0x59, 0x16, 0xc5, 0x32, 0xeb, 0xc1, 0x38,
+ 0x14, 0xe5, 0xaf, 0xdf, 0x80, 0x71, 0x49, 0x79, 0xfe, 0x7a, 0x67, 0x01, 0xd4, 0xe3, 0xdf, 0xba,
+ 0x50, 0x21, 0x91, 0x54, 0x06, 0xff, 0xe6, 0x85, 0x5a, 0x5c, 0x8f, 0x9e, 0x83, 0x31, 0x41, 0x99,
+ 0xce, 0x61, 0x74, 0x2f, 0x93, 0xee, 0x7b, 0xd5, 0x8e, 0xf2, 0xd2, 0x8d, 0xf9, 0xe0, 0xdf, 0x98,
+ 0x6f, 0xa0, 0xc5, 0x51, 0x31, 0x82, 0x60, 0xff, 0xdd, 0x8a, 0xe7, 0x85, 0xe2, 0x42, 0xa6, 0x1f,
+ 0xcb, 0x94, 0xc8, 0x8a, 0xf1, 0xf0, 0xa4, 0x0e, 0x53, 0x8f, 0x8f, 0x94, 0x80, 0x2b, 0xa1, 0x27,
+ 0xd0, 0x76, 0xe6, 0xef, 0x23, 0x0a, 0xc8, 0xf6, 0x22, 0x66, 0x07, 0xc7, 0x86, 0xb4, 0x5a, 0x9d,
+ 0x29, 0xbe, 0xdc, 0x17, 0xaa, 0x50, 0x11, 0x8c, 0xa8, 0x50, 0x91, 0xf7, 0xd2, 0x1a, 0x50, 0x5f,
+ 0x08, 0x74, 0x34, 0x93, 0x59, 0x86, 0x2f, 0x15, 0xca, 0xca, 0x8a, 0xca, 0x99, 0x18, 0x78, 0x2e,
+ 0x78, 0xae, 0x82, 0xf9, 0xd1, 0x64, 0x64, 0x7b, 0xf9, 0xfa, 0xb2, 0x6d, 0xcc, 0xca, 0xe0, 0xe3,
+ 0xc6, 0x32, 0xa6, 0x2a, 0xf8, 0x58, 0x00, 0xab, 0x07, 0xc5, 0x3b, 0x6a, 0x71, 0x13, 0x3e, 0x2f,
+ 0x8b, 0x0e, 0x3e, 0x07, 0xdb, 0x3e, 0x52, 0xcb, 0x60, 0x62, 0x98, 0xcf, 0xe1, 0x11, 0x6c, 0x1d,
+ 0x9f, 0x0f, 0x86, 0x61, 0x13, 0x73, 0xff, 0x14, 0x96, 0x01, 0xc3, 0x92, 0xcf, 0x97, 0xe6, 0xe3,
+ 0xe0, 0x69, 0x50, 0x2c, 0x2c, 0x7e, 0x1e, 0x96, 0x2d, 0x58, 0xb1, 0x63, 0x0a, 0xed, 0x08, 0x04,
+ 0x15, 0x33, 0xdf, 0xc1, 0x33, 0x32, 0x09, 0x28, 0x02, 0x03, 0x03, 0xd2, 0x51, 0x56, 0xc0, 0x3b,
+ 0x99, 0xac, 0x7b, 0x40, 0x72, 0x0b, 0x36, 0x15, 0xaf, 0x67, 0xe2, 0x63, 0x58, 0x66, 0x44, 0x3c,
+ 0xca, 0x8c, 0x9d, 0x06, 0xf0, 0x65, 0xfc, 0x5d, 0xc6, 0xfe, 0x7c, 0x1a, 0x4e, 0x33, 0x9f, 0x9a,
+ 0x91, 0xfc, 0x8d, 0xcf, 0x95, 0x33, 0xab, 0xe2, 0x58, 0x06, 0x7e, 0x29, 0x04, 0xb4, 0xbf, 0x12,
+ 0x87, 0xa8, 0xca, 0x69, 0x0f, 0x26, 0xea, 0xde, 0x61, 0x6c, 0xd8, 0xfc, 0xdc, 0x36, 0x15, 0xc7,
+ 0xce, 0x1f, 0x54, 0x3b, 0x2a, 0xd4, 0x65, 0x3c, 0xf9, 0x83, 0x96, 0xf5, 0xa5, 0xa5, 0xe5, 0x85,
+ 0xcc, 0x84, 0x39, 0xdf, 0xaf, 0x47, 0x33, 0x9f, 0xaf, 0xc6, 0x2a, 0x26, 0x68, 0x54, 0xf9, 0x9e,
+ 0x8d, 0x60, 0xea, 0xe3, 0xf6, 0x1f, 0x61, 0x25, 0x08, 0x25, 0x93, 0x3d, 0x4f, 0x7d, 0xc2, 0xd9,
+ 0x07, 0x1f, 0xb7, 0x32, 0xb7, 0x12, 0x82, 0x7d, 0xf2, 0x2b, 0x86, 0x03, 0x14, 0xe6, 0x17, 0x3f,
+ 0x06, 0xe9, 0x05, 0x97, 0x90, 0x0f, 0xae, 0x20, 0x9f, 0xfa, 0x01, 0xa6, 0xee, 0x7e, 0x98, 0x5d,
+ 0xd1, 0x46, 0x90, 0x39, 0xb5, 0x22, 0x9f, 0xc6, 0x1a, 0x8c, 0x17, 0xaa, 0xcb, 0x36, 0x6e, 0xcc,
+ 0xaf, 0x28, 0xc0, 0xf8, 0xb2, 0xa2, 0x28, 0x3f, 0x18, 0x0e, 0x33, 0xbf, 0x5d, 0xa8, 0xf2, 0x57,
+ 0xed, 0xc3, 0x9c, 0x5f, 0x88, 0x0b, 0x55, 0x3c, 0x5c, 0xfe, 0xda, 0xa8, 0x36, 0x97, 0x17, 0x6c,
+ 0x09, 0x55, 0x0d, 0x18, 0x55, 0x54, 0x20, 0x81, 0x45, 0x4c, 0xf2, 0x83, 0x6a, 0x01, 0x78, 0x4f,
+ 0x87, 0xff, 0x35, 0x94, 0x41, 0xf1, 0x46, 0x10, 0x54, 0xff, 0xfd, 0x9a, 0x7c, 0x7e, 0x5b, 0x59,
+ 0x11, 0x3c, 0x82, 0x63, 0x00, 0x5f, 0xd0, 0xfa, 0x7f, 0x36, 0xab, 0xd2, 0x7d, 0x67, 0x11, 0xcc,
+ 0x09, 0x67, 0x44, 0x97, 0x6c, 0x93, 0xa3, 0x94, 0x79, 0x77, 0xf1, 0x3f, 0x9a, 0x25, 0x2a, 0xf4,
+ 0x7f, 0x3c, 0xa4, 0x12, 0xb4, 0xa9, 0x68, 0x4b, 0xbe, 0x6a, 0x3e, 0x3e, 0x7b, 0x84, 0xc5, 0x38,
+ 0x1b, 0x16, 0x60, 0x53, 0x61, 0xbe, 0xba, 0x26, 0xcc, 0xd1, 0x60, 0x1d, 0xb5, 0x27, 0x64, 0x09,
+ 0x4b, 0xbd, 0x8d, 0xaa, 0x39, 0xfa, 0x65, 0x20, 0xfe, 0x0f, 0x82, 0x92, 0xd0, 0x50, 0xe1, 0xe9,
+ 0x60, 0x49, 0x4d, 0x15, 0x98, 0xc8, 0xe5, 0x41, 0xf6, 0x14, 0x41, 0x4a, 0xc1, 0xfc, 0x6c, 0x39,
+ 0xd2, 0x8e, 0xb9, 0x0b, 0x53, 0x1f, 0x6a, 0x28, 0x2e, 0xe4, 0x19, 0xdc, 0x48, 0x64, 0x43, 0x7f,
+ 0xcc, 0x59, 0xff, 0xbd, 0xbf, 0xed, 0x8c, 0xaf, 0x3f, 0xfe, 0x22, 0xf8, 0xfb, 0x66, 0xa8, 0x7c,
+ 0x2a, 0x58, 0x3e, 0xa5, 0x02, 0xfd, 0xc2, 0xa0, 0xfe, 0xbe, 0xc9, 0x30, 0xff, 0x0f, 0xf6, 0xe2,
+ 0x78, 0x75, 0x20, 0x5e, 0x00, 0x00,
+};
diff --git a/limine-bios-pxe.bin b/limine-bios-pxe.bin
new file mode 100644
index 00000000..a3f55c98
Binary files /dev/null and b/limine-bios-pxe.bin differ
diff --git a/limine-bios.sys b/limine-bios.sys
new file mode 100644
index 00000000..24d09b03
Binary files /dev/null and b/limine-bios.sys differ
diff --git a/limine-uefi-cd.bin b/limine-uefi-cd.bin
new file mode 100644
index 00000000..e5f8c958
Binary files /dev/null and b/limine-uefi-cd.bin differ
diff --git a/limine.c b/limine.c
new file mode 100644
index 00000000..1d7a474c
--- /dev/null
+++ b/limine.c
@@ -0,0 +1,1331 @@
+#undef IS_WINDOWS
+#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
+#define IS_WINDOWS 1
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <time.h>
+
+#ifndef LIMINE_NO_BIOS
+#include "limine-bios-hdd.h"
+#endif
+
+static char *program_name = NULL;
+
+static void perror_wrap(const char *fmt, ...) {
+ int old_errno = errno;
+
+ fprintf(stderr, "%s: ", program_name);
+
+ va_list args;
+ va_start(args, fmt);
+
+ vfprintf(stderr, fmt, args);
+
+ va_end(args);
+
+ fprintf(stderr, ": %s\n", strerror(old_errno));
+}
+
+static void remove_arg(int *argc, char *argv[], int index) {
+ for (int i = index; i < *argc - 1; i++) {
+ argv[i] = argv[i + 1];
+ }
+
+ (*argc)--;
+
+ argv[*argc] = NULL;
+}
+
+#ifndef LIMINE_NO_BIOS
+
+static bool quiet = false;
+
+static int set_pos(FILE *stream, uint64_t pos) {
+ if (sizeof(long) >= 8) {
+ return fseek(stream, (long)pos, SEEK_SET);
+ }
+
+ long jump_size = (LONG_MAX / 2) + 1;
+ long last_jump = pos % jump_size;
+ uint64_t jumps = pos / jump_size;
+
+ rewind(stream);
+
+ for (uint64_t i = 0; i < jumps; i++) {
+ if (fseek(stream, jump_size, SEEK_CUR) != 0) {
+ return -1;
+ }
+ }
+ if (fseek(stream, last_jump, SEEK_CUR) != 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+#define SIZEOF_ARRAY(array) (sizeof(array) / sizeof(array[0]))
+#define DIV_ROUNDUP(a, b) (((a) + ((b) - 1)) / (b))
+
+struct gpt_table_header {
+ // the head
+ char signature[8];
+ uint32_t revision;
+ uint32_t header_size;
+ uint32_t crc32;
+ uint32_t _reserved0;
+
+ // the partitioning info
+ uint64_t my_lba;
+ uint64_t alternate_lba;
+ uint64_t first_usable_lba;
+ uint64_t last_usable_lba;
+
+ // the guid
+ uint64_t disk_guid[2];
+
+ // entries related
+ uint64_t partition_entry_lba;
+ uint32_t number_of_partition_entries;
+ uint32_t size_of_partition_entry;
+ uint32_t partition_entry_array_crc32;
+};
+
+struct gpt_entry {
+ uint64_t partition_type_guid[2];
+
+ uint64_t unique_partition_guid[2];
+
+ uint64_t starting_lba;
+ uint64_t ending_lba;
+
+ uint64_t attributes;
+
+ uint16_t partition_name[36];
+};
+
+struct gpt2mbr_type_conv {
+ uint64_t gpt_type1;
+ uint64_t gpt_type2;
+ uint8_t mbr_type;
+};
+
+// This table is very incomplete, but it should be enough for covering
+// all that matters for ISOHYBRIDs.
+// Of course, though, expansion is welcome.
+static struct gpt2mbr_type_conv gpt2mbr_type_conv_table[] = {
+ { 0x11d2f81fc12a7328, 0x3bc93ec9a0004bba, 0xef }, // EFI system partition
+ { 0x4433b9e5ebd0a0a2, 0xc79926b7b668c087, 0x07 }, // Microsoft basic data
+ { 0x11aa000048465300, 0xacec4365300011aa, 0xaf }, // HFS/HFS+
+};
+
+static int gpt2mbr_type(uint64_t gpt_type1, uint64_t gpt_type2) {
+ for (size_t i = 0; i < SIZEOF_ARRAY(gpt2mbr_type_conv_table); i++) {
+ if (gpt2mbr_type_conv_table[i].gpt_type1 == gpt_type1
+ && gpt2mbr_type_conv_table[i].gpt_type2 == gpt_type2) {
+ return gpt2mbr_type_conv_table[i].mbr_type;
+ }
+ }
+ return -1;
+}
+
+static void lba2chs(uint8_t *chs, uint64_t lba) {
+ // If LBA is too big to express, use a standard value for CHS.
+ if (lba > 63 * 255 * 1024) {
+ goto lba_too_big;
+ }
+
+ uint64_t cylinder = lba / (255 * 63);
+ if (cylinder >= 1024) {
+lba_too_big:
+ chs[0] = 0xfe;
+ chs[1] = 0xff;
+ chs[2] = 0xff;
+ return;
+ }
+ uint64_t head = (lba / 63) % 255;
+ uint64_t sector = (lba % 63) + 1;
+
+ chs[0] = head;
+ chs[1] = (cylinder >> 2) & 0xc0; // high 2 bits
+ chs[1] |= sector & 0x3f;
+ chs[2] = cylinder; // low 8 bits
+}
+
+static uint16_t endswap16(uint16_t value) {
+ uint16_t ret = 0;
+ ret |= (value >> 8) & 0x00ff;
+ ret |= (value << 8) & 0xff00;
+ return ret;
+}
+
+static uint32_t endswap32(uint32_t value) {
+ uint32_t ret = 0;
+ ret |= (value >> 24) & 0x000000ff;
+ ret |= (value >> 8) & 0x0000ff00;
+ ret |= (value << 8) & 0x00ff0000;
+ ret |= (value << 24) & 0xff000000;
+ return ret;
+}
+
+static uint64_t endswap64(uint64_t value) {
+ uint64_t ret = 0;
+ ret |= (value >> 56) & 0x00000000000000ff;
+ ret |= (value >> 40) & 0x000000000000ff00;
+ ret |= (value >> 24) & 0x0000000000ff0000;
+ ret |= (value >> 8) & 0x00000000ff000000;
+ ret |= (value << 8) & 0x000000ff00000000;
+ ret |= (value << 24) & 0x0000ff0000000000;
+ ret |= (value << 40) & 0x00ff000000000000;
+ ret |= (value << 56) & 0xff00000000000000;
+ return ret;
+}
+
+#ifdef __BYTE_ORDER__
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define bigendian true
+#else
+#define bigendian false
+#endif
+
+#else /* !__BYTE_ORDER__ */
+
+static bool bigendian = false;
+
+#endif /* !__BYTE_ORDER__ */
+
+#define ENDSWAP(VALUE) (bigendian ? ( \
+ sizeof(VALUE) == 1 ? (VALUE) : \
+ sizeof(VALUE) == 2 ? endswap16(VALUE) : \
+ sizeof(VALUE) == 4 ? endswap32(VALUE) : \
+ sizeof(VALUE) == 8 ? endswap64(VALUE) : (abort(), 1) \
+) : (VALUE))
+
+static enum {
+ CACHE_CLEAN,
+ CACHE_DIRTY
+} cache_state;
+static uint64_t cached_block;
+static uint8_t *cache = NULL;
+static FILE *device = NULL;
+static size_t block_size;
+
+static bool device_init(void) {
+ size_t guesses[] = { 512, 2048, 4096 };
+
+ for (size_t i = 0; i < sizeof(guesses) / sizeof(size_t); i++) {
+ void *tmp = realloc(cache, guesses[i]);
+ if (tmp == NULL) {
+ perror_wrap("error: device_init(): realloc()");
+ return false;
+ }
+ cache = tmp;
+
+ rewind(device);
+
+ size_t ret = fread(cache, guesses[i], 1, device);
+ if (ret != 1) {
+ continue;
+ }
+
+ block_size = guesses[i];
+
+ if (!quiet) {
+ fprintf(stderr, "Physical block size of %zu bytes.\n", block_size);
+ }
+
+ cache_state = CACHE_CLEAN;
+ cached_block = 0;
+ return true;
+ }
+
+ fprintf(stderr, "%s: error: device_init(): Couldn't determine block size of device.\n", program_name);
+ return false;
+}
+
+static bool device_flush_cache(void) {
+ if (cache_state == CACHE_CLEAN)
+ return true;
+
+ if (set_pos(device, cached_block * block_size) != 0) {
+ perror_wrap("error: device_flush_cache(): set_pos()");
+ return false;
+ }
+
+ size_t ret = fwrite(cache, block_size, 1, device);
+ if (ret != 1) {
+ if (ferror(device)) {
+ perror_wrap("error: device_flush_cache(): fwrite()");
+ }
+ return false;
+ }
+
+ cache_state = CACHE_CLEAN;
+ return true;
+}
+
+static bool device_cache_block(uint64_t block) {
+ if (cached_block == block)
+ return true;
+
+ if (cache_state == CACHE_DIRTY) {
+ if (!device_flush_cache())
+ return false;
+ }
+
+ if (set_pos(device, block * block_size) != 0) {
+ perror_wrap("error: device_cache_block(): set_pos()");
+ return false;
+ }
+
+ size_t ret = fread(cache, block_size, 1, device);
+ if (ret != 1) {
+ if (ferror(device)) {
+ perror_wrap("error: device_cache_block(): fread()");
+ }
+ return false;
+ }
+
+ cached_block = block;
+
+ return true;
+}
+
+struct uninstall_data {
+ void *data;
+ uint64_t loc;
+ uint64_t count;
+};
+
+#define UNINSTALL_DATA_MAX 256
+
+static bool uninstalling = false;
+static struct uninstall_data uninstall_data[UNINSTALL_DATA_MAX];
+static struct uninstall_data uninstall_data_rev[UNINSTALL_DATA_MAX];
+static uint64_t uninstall_data_i = 0;
+static const char *uninstall_file = NULL;
+
+static void reverse_uninstall_data(void) {
+ for (size_t i = 0, j = uninstall_data_i - 1; i < uninstall_data_i; i++, j--) {
+ uninstall_data_rev[j] = uninstall_data[i];
+ }
+
+ memcpy(uninstall_data, uninstall_data_rev, uninstall_data_i * sizeof(struct uninstall_data));
+}
+
+static void free_uninstall_data(void) {
+ for (size_t i = 0; i < uninstall_data_i; i++) {
+ free(uninstall_data[i].data);
+ }
+}
+
+static bool store_uninstall_data(const char *filename) {
+ if (!quiet) {
+ fprintf(stderr, "Storing uninstall data to file: `%s`...\n", filename);
+ }
+
+ FILE *udfile = fopen(filename, "wb");
+ if (udfile == NULL) {
+ perror_wrap("error: `%s`", filename);
+ goto error;
+ }
+
+ if (fwrite(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fwrite_error;
+ }
+
+ for (size_t i = 0; i < uninstall_data_i; i++) {
+ if (fwrite(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fwrite_error;
+ }
+ if (fwrite(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fwrite_error;
+ }
+ if (fwrite(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) {
+ goto fwrite_error;
+ }
+ }
+
+ fclose(udfile);
+ return true;
+
+fwrite_error:
+ perror_wrap("error: store_uninstall_data(): fwrite()");
+
+error:
+ if (udfile != NULL) {
+ fclose(udfile);
+ }
+ return false;
+}
+
+static bool load_uninstall_data(const char *filename) {
+ if (!quiet) {
+ fprintf(stderr, "Loading uninstall data from file: `%s`...\n", filename);
+ }
+
+ FILE *udfile = fopen(filename, "rb");
+ if (udfile == NULL) {
+ perror_wrap("error: `%s`", filename);
+ goto error;
+ }
+
+ if (fread(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fread_error;
+ }
+
+ for (size_t i = 0; i < uninstall_data_i; i++) {
+ if (fread(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fread_error;
+ }
+ if (fread(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) {
+ goto fread_error;
+ }
+ uninstall_data[i].data = malloc(uninstall_data[i].count);
+ if (uninstall_data[i].data == NULL) {
+ perror_wrap("error: load_uninstall_data(): malloc()");
+ goto error;
+ }
+ if (fread(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) {
+ goto fread_error;
+ }
+ }
+
+ fclose(udfile);
+ return true;
+
+fread_error:
+ perror_wrap("error: load_uninstall_data(): fread()");
+
+error:
+ if (udfile != NULL) {
+ fclose(udfile);
+ }
+ return false;
+}
+
+static bool _device_read(void *_buffer, uint64_t loc, size_t count) {
+ uint8_t *buffer = _buffer;
+ uint64_t progress = 0;
+ while (progress < count) {
+ uint64_t block = (loc + progress) / block_size;
+
+ if (!device_cache_block(block)) {
+ return false;
+ }
+
+ uint64_t chunk = count - progress;
+ uint64_t offset = (loc + progress) % block_size;
+ if (chunk > block_size - offset)
+ chunk = block_size - offset;
+
+ memcpy(buffer + progress, &cache[offset], chunk);
+ progress += chunk;
+ }
+
+ return true;
+}
+
+static bool _device_write(const void *_buffer, uint64_t loc, size_t count) {
+ if (uninstalling) {
+ goto skip_save;
+ }
+
+ if (uninstall_data_i >= UNINSTALL_DATA_MAX) {
+ fprintf(stderr, "%s: error: Too many uninstall data entries! Please report this bug upstream.\n", program_name);
+ return false;
+ }
+
+ struct uninstall_data *ud = &uninstall_data[uninstall_data_i];
+
+ ud->data = malloc(count);
+ if (ud->data == NULL) {
+ perror_wrap("error: _device_write(): malloc()");
+ return false;
+ }
+
+ if (!_device_read(ud->data, loc, count)) {
+ return false;
+ }
+
+ ud->loc = loc;
+ ud->count = count;
+
+skip_save:;
+ const uint8_t *buffer = _buffer;
+ uint64_t progress = 0;
+ while (progress < count) {
+ uint64_t block = (loc + progress) / block_size;
+
+ if (!device_cache_block(block)) {
+ return false;
+ }
+
+ uint64_t chunk = count - progress;
+ uint64_t offset = (loc + progress) % block_size;
+ if (chunk > block_size - offset)
+ chunk = block_size - offset;
+
+ memcpy(&cache[offset], buffer + progress, chunk);
+ cache_state = CACHE_DIRTY;
+ progress += chunk;
+ }
+
+ if (!uninstalling) {
+ uninstall_data_i++;
+ }
+ return true;
+}
+
+static bool uninstall(bool quiet_arg) {
+ bool print_cache_flush_fail = false;
+ bool print_write_fail = false;
+ bool ret = true;
+
+ uninstalling = true;
+
+ cache_state = CACHE_CLEAN;
+ cached_block = (uint64_t)-1;
+
+ for (size_t i = 0; i < uninstall_data_i; i++) {
+ struct uninstall_data *ud = &uninstall_data[i];
+ bool retry = false;
+ while (!_device_write(ud->data, ud->loc, ud->count)) {
+ if (retry) {
+ fprintf(stderr, "%s: warning: Retry failed.\n", program_name);
+ print_write_fail = true;
+ break;
+ }
+ if (!quiet) {
+ fprintf(stderr, "%s: warning: Uninstall data index %zu failed to write, retrying...\n", program_name, i);
+ }
+ if (!device_flush_cache()) {
+ print_cache_flush_fail = true;
+ }
+ cache_state = CACHE_CLEAN;
+ cached_block = (uint64_t)-1;
+ retry = true;
+ }
+ }
+
+ if (!device_flush_cache()) {
+ print_cache_flush_fail = true;
+ }
+
+ if (print_write_fail) {
+ fprintf(stderr, "%s: error: Some data failed to be uninstalled correctly.\n", program_name);
+ ret = false;
+ }
+
+ if (print_cache_flush_fail) {
+ fprintf(stderr, "%s: error: Device cache flush failure. Uninstall may be incomplete.\n", program_name);
+ ret = false;
+ }
+
+ if (ret == true && !quiet && !quiet_arg) {
+ fprintf(stderr, "Uninstall data restored successfully.\n");
+ }
+
+ return ret;
+}
+
+#define device_read(BUFFER, LOC, COUNT) \
+ do { \
+ if (!_device_read(BUFFER, LOC, COUNT)) \
+ goto cleanup; \
+ } while (0)
+
+#define device_write(BUFFER, LOC, COUNT) \
+ do { \
+ if (!_device_write(BUFFER, LOC, COUNT)) \
+ goto cleanup; \
+ } while (0)
+
+static void bios_install_usage(void) {
+ printf("usage: %s bios-install <device> [GPT partition index]\n", program_name);
+ printf("\n");
+ printf(" --force-mbr Force MBR detection to work even if the\n");
+ printf(" safety checks fail (DANGEROUS!)\n");
+ printf("\n");
+ printf(" --uninstall Reverse the entire install procedure\n");
+ printf("\n");
+ printf(" --uninstall-data-file=<filename>\n");
+ printf(" Set the input (for --uninstall) or output file\n");
+ printf(" name of the file which contains uninstall data\n");
+ printf("\n");
+ printf(" --no-gpt-to-mbr-isohybrid-conversion\n");
+ printf(" Do not automatically convert a GUID partition table (GPT)\n");
+ printf(" found on an ISOHYBRID image into an MBR partition table\n");
+ printf(" (which is done for better hardware compatibility)\n");
+ printf("\n");
+ printf(" --quiet Do not print verbose diagnostic messages\n");
+ printf("\n");
+ printf(" --help | -h Display this help message\n");
+ printf("\n");
+}
+
+static int bios_install(int argc, char *argv[]) {
+ int ok = EXIT_FAILURE;
+ int force_mbr = 0;
+ bool gpt2mbr_allowed = true;
+ bool uninstall_mode = false;
+ const uint8_t *bootloader_img = binary_limine_hdd_bin_data;
+ size_t bootloader_file_size = sizeof(binary_limine_hdd_bin_data);
+ uint8_t orig_mbr[70], timestamp[6];
+ const char *part_ndx = NULL;
+
+#ifndef __BYTE_ORDER__
+ uint32_t endcheck = 0x12345678;
+ uint8_t endbyte = *((uint8_t *)&endcheck);
+ bigendian = endbyte == 0x12;
+#endif
+
+ if (argc < 2) {
+ bios_install_usage();
+#ifdef IS_WINDOWS
+ system("pause");
+#endif
+ return EXIT_FAILURE;
+ }
+
+ for (int i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
+ bios_install_usage();
+ return EXIT_SUCCESS;
+ } else if (strcmp(argv[i], "--quiet") == 0) {
+ quiet = true;
+ } else if (strcmp(argv[i], "--force-mbr") == 0) {
+ if (force_mbr && !quiet) {
+ fprintf(stderr, "%s: warning: --force-mbr already set.\n", program_name);
+ }
+ force_mbr = 1;
+ } else if (strcmp(argv[i], "--no-gpt-to-mbr-isohybrid-conversion") == 0) {
+ gpt2mbr_allowed = false;
+ } else if (strcmp(argv[i], "--uninstall") == 0) {
+ if (uninstall_mode && !quiet) {
+ fprintf(stderr, "%s: warning: --uninstall already set.\n", program_name);
+ }
+ uninstall_mode = true;
+ } else if (memcmp(argv[i], "--uninstall-data-file=", 21) == 0) {
+ if (uninstall_file != NULL && !quiet) {
+ fprintf(stderr, "%s: warning: --uninstall-data-file already set. Overriding...\n", program_name);
+ }
+ uninstall_file = argv[i] + 21;
+ if (strlen(uninstall_file) == 0) {
+ fprintf(stderr, "%s: error: Uninstall data file has a zero-length name!\n", program_name);
+ return EXIT_FAILURE;
+ }
+ } else {
+ if (device != NULL) { // [GPT partition index]
+ part_ndx = argv[i]; // TODO: Make this non-positional?
+ } else if ((device = fopen(argv[i], "r+b")) == NULL) { // <device>
+ perror_wrap("error: `%s`", argv[i]);
+ return EXIT_FAILURE;
+ }
+ }
+ }
+
+ if (device == NULL) {
+ fprintf(stderr, "%s: error: No device specified\n", program_name);
+ bios_install_usage();
+ return EXIT_FAILURE;
+ }
+
+ if (!device_init()) {
+ goto uninstall_mode_cleanup;
+ }
+
+ if (uninstall_mode) {
+ if (uninstall_file == NULL) {
+ fprintf(stderr, "%s: error: Uninstall mode set but no --uninstall-data-file=... passed.\n", program_name);
+ goto uninstall_mode_cleanup;
+ }
+
+ if (!load_uninstall_data(uninstall_file)) {
+ goto uninstall_mode_cleanup;
+ }
+
+ if (uninstall(false) == false) {
+ ok = EXIT_FAILURE;
+ } else {
+ ok = EXIT_SUCCESS;
+ }
+ goto uninstall_mode_cleanup;
+ }
+
+ // Probe for GPT and logical block size
+ int gpt = 0;
+ struct gpt_table_header gpt_header;
+ uint64_t lb_guesses[] = { 512, 4096 };
+ uint64_t lb_size = 0;
+ for (size_t i = 0; i < sizeof(lb_guesses) / sizeof(uint64_t); i++) {
+ device_read(&gpt_header, lb_guesses[i], sizeof(struct gpt_table_header));
+ if (!strncmp(gpt_header.signature, "EFI PART", 8)) {
+ lb_size = lb_guesses[i];
+ if (!force_mbr) {
+ gpt = 1;
+ if (!quiet) {
+ fprintf(stderr, "Installing to GPT. Logical block size of %" PRIu64 " bytes.\n",
+ lb_guesses[i]);
+ }
+ } else {
+ fprintf(stderr, "%s: error: Device has a valid GPT, refusing to force MBR.\n", program_name);
+ goto cleanup;
+ }
+ break;
+ }
+ }
+
+ struct gpt_table_header secondary_gpt_header;
+ if (gpt) {
+ if (!quiet) {
+ fprintf(stderr, "Secondary header at LBA 0x%" PRIx64 ".\n",
+ ENDSWAP(gpt_header.alternate_lba));
+ }
+ device_read(&secondary_gpt_header, lb_size * ENDSWAP(gpt_header.alternate_lba),
+ sizeof(struct gpt_table_header));
+ if (!strncmp(secondary_gpt_header.signature, "EFI PART", 8)) {
+ if (!quiet) {
+ fprintf(stderr, "Secondary header valid.\n");
+ }
+ } else {
+ fprintf(stderr, "%s: error: Secondary header not valid, aborting.\n", program_name);
+ goto cleanup;
+ }
+ }
+
+ // Check if this is an ISO w/ a GPT, in which case try converting it
+ // to MBR for improved compatibility with a whole range of hardware that
+ // does not like booting off of GPT in BIOS or CSM mode, and other
+ // broken hardware.
+ if (gpt && gpt2mbr_allowed == true) {
+ char iso_signature[5];
+ device_read(iso_signature, 32769, 5);
+
+ if (strncmp(iso_signature, "CD001", 5) != 0) {
+ goto no_mbr_conv;
+ }
+
+ if (!quiet) {
+ fprintf(stderr, "Detected ISOHYBRID with a GUID partition table (GPT).\n");
+ fprintf(stderr, "Converting to MBR for improved compatibility...\n");
+ }
+
+ // Gather the (up to 4) GPT partition to convert.
+ struct {
+ uint64_t lba_start;
+ uint64_t lba_end;
+ uint8_t chs_start[3];
+ uint8_t chs_end[3];
+ uint8_t type;
+ } part_to_conv[4];
+ size_t part_to_conv_i = 0;
+
+ for (int64_t i = 0; i < (int64_t)ENDSWAP(gpt_header.number_of_partition_entries); i++) {
+ struct gpt_entry gpt_entry;
+ device_read(&gpt_entry,
+ (ENDSWAP(gpt_header.partition_entry_lba) * lb_size)
+ + (i * ENDSWAP(gpt_header.size_of_partition_entry)),
+ sizeof(struct gpt_entry));
+
+ if (gpt_entry.unique_partition_guid[0] == 0 &&
+ gpt_entry.unique_partition_guid[1] == 0) {
+ continue;
+ }
+
+ if (ENDSWAP(gpt_entry.starting_lba) > UINT32_MAX) {
+ if (!quiet) {
+ fprintf(stderr, "Starting LBA of partition %" PRIi64 " is greater than UINT32_MAX, will not convert GPT.\n", i + 1);
+ }
+ goto no_mbr_conv;
+ }
+ part_to_conv[part_to_conv_i].lba_start = ENDSWAP(gpt_entry.starting_lba);
+ lba2chs(part_to_conv[part_to_conv_i].chs_start, part_to_conv[part_to_conv_i].lba_start);
+
+ if (ENDSWAP(gpt_entry.ending_lba) > UINT32_MAX) {
+ if (!quiet) {
+ fprintf(stderr, "Ending LBA of partition %" PRIi64 " is greater than UINT32_MAX, will not convert GPT.\n", i + 1);
+ }
+ goto no_mbr_conv;
+ }
+ part_to_conv[part_to_conv_i].lba_end = ENDSWAP(gpt_entry.ending_lba);
+ lba2chs(part_to_conv[part_to_conv_i].chs_end, part_to_conv[part_to_conv_i].lba_end);
+
+ int type = gpt2mbr_type(ENDSWAP(gpt_entry.partition_type_guid[0]),
+ ENDSWAP(gpt_entry.partition_type_guid[1]));
+ if (type == -1) {
+ if (!quiet) {
+ fprintf(stderr, "Cannot convert partition type for partition %" PRIi64 ", will not convert GPT.\n", i + 1);
+ }
+ goto no_mbr_conv;
+ }
+
+ if (part_to_conv_i == 4) {
+ if (!quiet) {
+ fprintf(stderr, "GPT contains more than 4 partitions, will not convert.\n");
+ }
+ goto no_mbr_conv;
+ }
+
+ part_to_conv[part_to_conv_i].type = type;
+
+ part_to_conv_i++;
+ }
+
+ // Nuke the GPTs.
+ void *empty_lba = calloc(1, lb_size);
+ if (empty_lba == NULL) {
+ perror_wrap("error: bios_install(): malloc()");
+ goto cleanup;
+ }
+
+ // ... nuke primary GPT + protective MBR.
+ for (size_t i = 0; i < 34; i++) {
+ device_write(empty_lba, i * lb_size, lb_size);
+ }
+
+ // ... nuke secondary GPT.
+ for (size_t i = 0; i < 33; i++) {
+ device_write(empty_lba, ((ENDSWAP(gpt_header.alternate_lba) - 32) + i) * lb_size, lb_size);
+ }
+
+ free(empty_lba);
+
+ // We're no longer GPT.
+ gpt = 0;
+
+ // Generate pseudorandom MBR disk ID.
+ srand(time(NULL));
+ for (size_t i = 0; i < 4; i++) {
+ uint8_t r = rand();
+ device_write(&r, 0x1b8 + i, 1);
+ }
+
+ // Write out the partition entries.
+ for (size_t i = 0; i < part_to_conv_i; i++) {
+ device_write(&part_to_conv[i].type, 0x1be + i * 16 + 0x04, 1);
+ uint32_t lba_start = ENDSWAP(part_to_conv[i].lba_start);
+ device_write(&lba_start, 0x1be + i * 16 + 0x08, 4);
+ uint32_t sect_count = ENDSWAP((part_to_conv[i].lba_end - part_to_conv[i].lba_start) + 1);
+ device_write(§_count, 0x1be + i * 16 + 0x0c, 4);
+
+ device_write(part_to_conv[i].chs_start, 0x1be + i * 16 + 1, 3);
+ device_write(part_to_conv[i].chs_end, 0x1be + i * 16 + 5, 3);
+ }
+
+ if (!quiet) {
+ fprintf(stderr, "Conversion successful.\n");
+ }
+ }
+
+no_mbr_conv:;
+
+ int mbr = 0;
+ if (gpt == 0) {
+ // Do all sanity checks on MBR
+ mbr = 1;
+
+ uint8_t hint8 = 0;
+ uint16_t hint16 = 0;
+ uint32_t hint32 = 0;
+
+ bool any_active = false;
+
+ device_read(&hint8, 446, sizeof(uint8_t));
+ if (hint8 != 0x00 && hint8 != 0x80) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ hint8 &= 0x80;
+ device_write(&hint8, 446, sizeof(uint8_t));
+ }
+ }
+ any_active = any_active || (hint8 & 0x80) != 0;
+ device_read(&hint8, 446 + 4, sizeof(uint8_t));
+ if (hint8 != 0x00) {
+ device_read(&hint32, 446 + 8, sizeof(uint32_t));
+ hint32 = ENDSWAP(hint32);
+ if (hint32 < 63) {
+ goto part_too_low;
+ }
+ }
+ device_read(&hint8, 462, sizeof(uint8_t));
+ if (hint8 != 0x00 && hint8 != 0x80) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ hint8 &= 0x80;
+ device_write(&hint8, 462, sizeof(uint8_t));
+ }
+ }
+ any_active = any_active || (hint8 & 0x80) != 0;
+ device_read(&hint8, 462 + 4, sizeof(uint8_t));
+ if (hint8 != 0x00) {
+ device_read(&hint32, 462 + 8, sizeof(uint32_t));
+ hint32 = ENDSWAP(hint32);
+ if (hint32 < 63) {
+ goto part_too_low;
+ }
+ }
+ device_read(&hint8, 478, sizeof(uint8_t));
+ if (hint8 != 0x00 && hint8 != 0x80) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ hint8 &= 0x80;
+ device_write(&hint8, 478, sizeof(uint8_t));
+ }
+ }
+ any_active = any_active || (hint8 & 0x80) != 0;
+ device_read(&hint8, 478 + 4, sizeof(uint8_t));
+ if (hint8 != 0x00) {
+ device_read(&hint32, 478 + 8, sizeof(uint32_t));
+ hint32 = ENDSWAP(hint32);
+ if (hint32 < 63) {
+ goto part_too_low;
+ }
+ }
+ device_read(&hint8, 494, sizeof(uint8_t));
+ if (hint8 != 0x00 && hint8 != 0x80) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ hint8 &= 0x80;
+ device_write(&hint8, 494, sizeof(uint8_t));
+ }
+ }
+ any_active = any_active || (hint8 & 0x80) != 0;
+ device_read(&hint8, 494 + 4, sizeof(uint8_t));
+ if (hint8 != 0x00) {
+ device_read(&hint32, 494 + 8, sizeof(uint32_t));
+ hint32 = ENDSWAP(hint32);
+ if (hint32 < 63) {
+ goto part_too_low;
+ }
+ }
+
+ if (0) {
+part_too_low:
+ fprintf(stderr, "%s: error: A partition's start sector is less than 63, aborting.\n", program_name);
+ goto cleanup;
+ }
+
+ char hintc[64];
+ device_read(hintc, 4, 8);
+ if (memcmp(hintc, "_ECH_FS_", 8) == 0) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ memset(hintc, 0, 8);
+ device_write(hintc, 4, 8);
+ }
+ }
+ device_read(hintc, 3, 4);
+ if (memcmp(hintc, "NTFS", 4) == 0) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ memset(hintc, 0, 4);
+ device_write(hintc, 3, 4);
+ }
+ }
+ device_read(hintc, 54, 3);
+ if (memcmp(hintc, "FAT", 3) == 0) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ memset(hintc, 0, 5);
+ device_write(hintc, 54, 5);
+ }
+ }
+ device_read(hintc, 82, 3);
+ if (memcmp(hintc, "FAT", 3) == 0) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ memset(hintc, 0, 5);
+ device_write(hintc, 82, 5);
+ }
+ }
+ device_read(hintc, 3, 5);
+ if (memcmp(hintc, "FAT32", 5) == 0) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ memset(hintc, 0, 5);
+ device_write(hintc, 3, 5);
+ }
+ }
+ device_read(&hint16, 1080, sizeof(uint16_t));
+ hint16 = ENDSWAP(hint16);
+ if (hint16 == 0xef53) {
+ if (!force_mbr) {
+ mbr = 0;
+ } else {
+ hint16 = 0;
+ hint16 = ENDSWAP(hint16);
+ device_write(&hint16, 1080, sizeof(uint16_t));
+ }
+ }
+
+ if (mbr && !any_active) {
+ if (!quiet) {
+ fprintf(stderr, "No active partition found, some systems may not boot.\n");
+ fprintf(stderr, "Setting partition 1 as active to work around the issue...\n");
+ }
+ hint8 = 0x80;
+ device_write(&hint8, 446, sizeof(uint8_t));
+ }
+ }
+
+ if (gpt == 0 && mbr == 0) {
+ fprintf(stderr, "error: Could not determine if the device has a valid partition table.\n");
+ fprintf(stderr, " Please ensure the device has a valid MBR or GPT.\n");
+ fprintf(stderr, " Alternatively, pass `--force-mbr` to override these checks.\n");
+ fprintf(stderr, " **ONLY DO THIS AT YOUR OWN RISK, DATA LOSS MAY OCCUR!**\n");
+ goto cleanup;
+ }
+
+ size_t stage2_size = bootloader_file_size - 512;
+
+ size_t stage2_sects = DIV_ROUNDUP(stage2_size, 512);
+
+ uint16_t stage2_size_a = (stage2_sects / 2) * 512 + (stage2_sects % 2 ? 512 : 0);
+ uint16_t stage2_size_b = (stage2_sects / 2) * 512;
+
+ // Default split of stage2 for MBR (consecutive in post MBR gap)
+ uint64_t stage2_loc_a = 512;
+ uint64_t stage2_loc_b = stage2_loc_a + stage2_size_a;
+
+ if (gpt) {
+ if (part_ndx != NULL) {
+ uint32_t partition_num;
+ sscanf(part_ndx, "%" SCNu32, &partition_num);
+ partition_num--;
+ if (partition_num > ENDSWAP(gpt_header.number_of_partition_entries)) {
+ fprintf(stderr, "%s: error: Partition number is too large.\n", program_name);
+ goto cleanup;
+ }
+
+ struct gpt_entry gpt_entry;
+ device_read(&gpt_entry,
+ (ENDSWAP(gpt_header.partition_entry_lba) * lb_size)
+ + (partition_num * ENDSWAP(gpt_header.size_of_partition_entry)),
+ sizeof(struct gpt_entry));
+
+ if (gpt_entry.unique_partition_guid[0] == 0 &&
+ gpt_entry.unique_partition_guid[1] == 0) {
+ fprintf(stderr, "%s: error: No such partition: `%s`.\n", program_name, part_ndx);
+ goto cleanup;
+ }
+
+ if (((ENDSWAP(gpt_entry.ending_lba) - ENDSWAP(gpt_entry.starting_lba)) + 1) * lb_size < 32768) {
+ fprintf(stderr, "%s: error: Partition with index `%s` is smaller than 32KiB.\n", program_name, part_ndx);
+ goto cleanup;
+ }
+
+ if (!quiet) {
+ fprintf(stderr, "Installing BIOS boot code to partition %s.\n", part_ndx);
+ }
+
+ stage2_loc_a = ENDSWAP(gpt_entry.starting_lba) * lb_size;
+ stage2_loc_b = stage2_loc_a + stage2_size_a;
+ if (stage2_loc_b & (lb_size - 1))
+ stage2_loc_b = (stage2_loc_b + lb_size) & ~(lb_size - 1);
+ } else {
+ fprintf(stderr, "%s: error: Installing to a GPT device, but no BIOS boot partition specified.\n", program_name);
+ goto cleanup;
+ }
+ } else {
+ if (!quiet) {
+ fprintf(stderr, "Installing to MBR.\n");
+ }
+ }
+
+ if (!quiet) {
+ fprintf(stderr, "Stage 2 to be located at 0x%" PRIx64 " and 0x%" PRIx64 ".\n",
+ stage2_loc_a, stage2_loc_b);
+ }
+
+ // Save original timestamp
+ device_read(timestamp, 218, 6);
+
+ // Save the original partition table of the device
+ device_read(orig_mbr, 440, 70);
+
+ // Write the bootsector from the bootloader to the device
+ device_write(&bootloader_img[0], 0, 512);
+
+ // Write the rest of stage 2 to the device
+ device_write(&bootloader_img[512], stage2_loc_a, stage2_size_a);
+ device_write(&bootloader_img[512 + stage2_size_a],
+ stage2_loc_b, stage2_size - stage2_size_a);
+
+ // Hardcode in the bootsector the location of stage 2 halves
+ stage2_size_a = ENDSWAP(stage2_size_a);
+ device_write(&stage2_size_a, 0x1a4 + 0, sizeof(uint16_t));
+ stage2_size_b = ENDSWAP(stage2_size_b);
+ device_write(&stage2_size_b, 0x1a4 + 2, sizeof(uint16_t));
+ stage2_loc_a = ENDSWAP(stage2_loc_a);
+ device_write(&stage2_loc_a, 0x1a4 + 4, sizeof(uint64_t));
+ stage2_loc_b = ENDSWAP(stage2_loc_b);
+ device_write(&stage2_loc_b, 0x1a4 + 12, sizeof(uint64_t));
+
+ // Write back timestamp
+ device_write(timestamp, 218, 6);
+
+ // Write back the saved partition table to the device
+ device_write(orig_mbr, 440, 70);
+
+ if (!device_flush_cache())
+ goto cleanup;
+
+ if (!quiet) {
+ fprintf(stderr, "Reminder: Remember to copy the limine-bios.sys file in either\n"
+ " the root, /boot, /limine, or /boot/limine directories of\n"
+ " one of the partitions on the device, or boot will fail!\n");
+
+ fprintf(stderr, "Limine BIOS stages installed successfully!\n");
+ }
+
+ ok = EXIT_SUCCESS;
+
+cleanup:
+ reverse_uninstall_data();
+ if (ok != EXIT_SUCCESS) {
+ // If we failed, attempt to reverse install process
+ fprintf(stderr, "%s: Install failed, undoing work...\n", program_name);
+ uninstall(true);
+ } else if (uninstall_file != NULL) {
+ store_uninstall_data(uninstall_file);
+ }
+uninstall_mode_cleanup:
+ free_uninstall_data();
+ if (cache)
+ free(cache);
+ if (device != NULL)
+ fclose(device);
+
+ return ok;
+}
+#endif
+
+#define CONFIG_B2SUM_SIGNATURE "++CONFIG_B2SUM_SIGNATURE++"
+
+static void enroll_config_usage(void) {
+ printf("usage: %s enroll-config <Limine executable> <BLAKE2B of config file>\n", program_name);
+ printf("\n");
+ printf(" --reset Remove enrolled BLAKE2B, will not check config integrity\n");
+ printf("\n");
+ printf(" --quiet Do not print verbose diagnostic messages\n");
+ printf("\n");
+ printf(" --help | -h Display this help message\n");
+ printf("\n");
+}
+
+static int enroll_config(int argc, char *argv[]) {
+ int ret = EXIT_FAILURE;
+
+ char *bootloader = NULL;
+ FILE *bootloader_file = NULL;
+ bool quiet = false;
+ bool reset = false;
+
+ for (int i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
+ enroll_config_usage();
+ return EXIT_SUCCESS;
+ } else if (strcmp(argv[i], "--quiet") == 0) {
+ remove_arg(&argc, argv, i);
+ quiet = true;
+ } else if (strcmp(argv[i], "--reset") == 0) {
+ remove_arg(&argc, argv, i);
+ reset = true;
+ }
+ }
+
+ if (argc <= (reset ? 1 : 2)) {
+ enroll_config_usage();
+#ifdef IS_WINDOWS
+ system("pause");
+#endif
+ return EXIT_FAILURE;
+ }
+
+ if (!reset && strlen(argv[2]) != 128) {
+ fprintf(stderr, "%s: error: BLAKE2B specified is not 128 characters long.\n", program_name);
+ goto cleanup;
+ }
+
+ bootloader_file = fopen(argv[1], "r+b");
+ if (bootloader_file == NULL) {
+ perror_wrap("error: `%s`", argv[1]);
+ goto cleanup;
+ }
+
+ if (fseek(bootloader_file, 0, SEEK_END) != 0) {
+ perror_wrap("error: enroll_config(): fseek()");
+ goto cleanup;
+ }
+ size_t bootloader_size = ftell(bootloader_file);
+ rewind(bootloader_file);
+
+ bootloader = malloc(bootloader_size);
+ if (bootloader == NULL) {
+ perror_wrap("error: enroll_config(): malloc()");
+ goto cleanup;
+ }
+
+ if (fread(bootloader, bootloader_size, 1, bootloader_file) != 1) {
+ perror_wrap("error: enroll_config(): fread()");
+ goto cleanup;
+ }
+
+ char *checksum_loc = NULL;
+ size_t checked_count = 0;
+ const char *config_b2sum_sign = CONFIG_B2SUM_SIGNATURE;
+ for (size_t i = 0; i < bootloader_size - ((sizeof(CONFIG_B2SUM_SIGNATURE) - 1) + 128) + 1; i++) {
+ if (bootloader[i] != config_b2sum_sign[checked_count]) {
+ checked_count = 0;
+ continue;
+ }
+
+ checked_count++;
+
+ if (checked_count == sizeof(CONFIG_B2SUM_SIGNATURE) - 1) {
+ checksum_loc = &bootloader[i + 1];
+ break;
+ }
+ }
+
+ if (checksum_loc == NULL) {
+ fprintf(stderr, "%s: error: Checksum location not found in provided executable.\n", program_name);
+ goto cleanup;
+ }
+
+ if (!reset) {
+ memcpy(checksum_loc, argv[2], 128);
+ } else {
+ memset(checksum_loc, '0', 128);
+ }
+
+ if (fseek(bootloader_file, 0, SEEK_SET) != 0) {
+ perror_wrap("error: enroll_config(): fseek()");
+ goto cleanup;
+ }
+ if (fwrite(bootloader, bootloader_size, 1, bootloader_file) != 1) {
+ perror_wrap("error: enroll_config(): fwrite()");
+ goto cleanup;
+ }
+
+ if (!quiet) {
+ fprintf(stderr, "Config file BLAKE2B successfully %s!\n", reset ? "reset" : "enrolled");
+ }
+ ret = EXIT_SUCCESS;
+
+cleanup:
+ if (bootloader != NULL) {
+ free(bootloader);
+ }
+ if (bootloader_file != NULL) {
+ fclose(bootloader_file);
+ }
+ return ret;
+}
+
+#define LIMINE_VERSION "10.0.0"
+#define LIMINE_COPYRIGHT "Copyright (C) 2019-2025 Mintsuki and contributors."
+
+static void version_usage(void) {
+ printf("usage: %s version [options...]\n", program_name);
+ printf("\n");
+ printf(" --version-only Only print the version number without licensing info\n");
+ printf(" and other distractions\n");
+ printf("\n");
+ printf(" --help | -h Display this help message\n");
+ printf("\n");
+}
+
+static int version(int argc, char *argv[]) {
+ if (argc >= 2) {
+ if (strcmp(argv[1], "--help") == 0) {
+ version_usage();
+ return EXIT_SUCCESS;
+ } else if (strcmp(argv[1], "--version-only") == 0) {
+ puts(LIMINE_VERSION);
+ return EXIT_SUCCESS;
+ }
+ }
+
+ puts("Limine " LIMINE_VERSION);
+ puts(LIMINE_COPYRIGHT);
+ puts("Limine is distributed under the terms of the BSD-2-Clause license.");
+ puts("There is ABSOLUTELY NO WARRANTY, to the extent permitted by law.");
+ return EXIT_SUCCESS;
+}
+
+static void general_usage(void) {
+ printf("usage: %s <command> <args...>\n", program_name);
+ printf("\n");
+ printf(" --print-datadir Print the directory containing the bootloader files\n");
+ printf("\n");
+ printf(" --version Print the Limine version (like the `version` command)\n");
+ printf("\n");
+ printf(" --help | -h Display this help message\n");
+ printf("\n");
+ printf("Commands: `help`, `version`, `bios-install`, `enroll-config`\n");
+ printf("Use `--help` after specifying the command for command-specific help.\n");
+}
+
+static int print_datadir(void) {
+#ifdef LIMINE_DATADIR
+ puts(LIMINE_DATADIR);
+ return EXIT_SUCCESS;
+#else
+ fprintf(stderr, "%s: error: Cannot print datadir for `limine` built out-of-tree.\n", program_name);
+ return EXIT_FAILURE;
+#endif
+}
+
+int main(int argc, char *argv[]) {
+ program_name = argv[0];
+
+ if (argc <= 1) {
+ general_usage();
+ return EXIT_FAILURE;
+ }
+
+ if (strcmp(argv[1], "help") == 0
+ || strcmp(argv[1], "--help") == 0
+ || strcmp(argv[1], "-h") == 0) {
+ general_usage();
+ return EXIT_SUCCESS;
+ } else if (strcmp(argv[1], "bios-install") == 0) {
+#ifndef LIMINE_NO_BIOS
+ return bios_install(argc - 1, &argv[1]);
+#else
+ fprintf(stderr, "%s: error: Limine has been compiled without BIOS support.\n", program_name);
+ return EXIT_FAILURE;
+#endif
+ } else if (strcmp(argv[1], "enroll-config") == 0) {
+ return enroll_config(argc - 1, &argv[1]);
+ } else if (strcmp(argv[1], "--print-datadir") == 0) {
+ return print_datadir();
+ } else if (strcmp(argv[1], "version") == 0
+ || strcmp(argv[1], "--version") == 0) {
+ return version(argc - 1, &argv[1]);
+ }
+
+ general_usage();
+ return EXIT_FAILURE;
+}
diff --git a/limine.exe b/limine.exe
new file mode 100755
index 00000000..f9b4ae13
Binary files /dev/null and b/limine.exe differ
diff --git a/limine.h b/limine.h
new file mode 100644
index 00000000..e27d1b18
--- /dev/null
+++ b/limine.h
@@ -0,0 +1,771 @@
+/* BSD Zero Clause License */
+
+/* Copyright (C) 2022-2025 Mintsuki and contributors.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef LIMINE_H
+#define LIMINE_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+/* Misc */
+
+#ifdef LIMINE_NO_POINTERS
+# define LIMINE_PTR(TYPE) uint64_t
+#else
+# define LIMINE_PTR(TYPE) TYPE
+#endif
+
+#ifndef LIMINE_API_REVISION
+# define LIMINE_API_REVISION 0
+#endif
+
+#if LIMINE_API_REVISION > 3
+# error "limine.h API revision unsupported"
+#endif
+
+#ifdef __GNUC__
+# define LIMINE_DEPRECATED __attribute__((__deprecated__))
+# define LIMINE_DEPRECATED_IGNORE_START \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+# define LIMINE_DEPRECATED_IGNORE_END \
+ _Pragma("GCC diagnostic pop")
+#else
+# define LIMINE_DEPRECATED
+# define LIMINE_DEPRECATED_IGNORE_START
+# define LIMINE_DEPRECATED_IGNORE_END
+#endif
+
+#define LIMINE_REQUESTS_START_MARKER \
+ uint64_t limine_requests_start_marker[4] = { 0xf6b8f4b39de7d1ae, 0xfab91a6940fcb9cf, \
+ 0x785c6ed015d3e316, 0x181e920a7852b9d9 };
+#define LIMINE_REQUESTS_END_MARKER \
+ uint64_t limine_requests_end_marker[2] = { 0xadc0e0531bb10d03, 0x9572709f31764c62 };
+
+#define LIMINE_REQUESTS_DELIMITER LIMINE_REQUESTS_END_MARKER
+
+#define LIMINE_BASE_REVISION(N) \
+ uint64_t limine_base_revision[3] = { 0xf9562b2d5c95a6c8, 0x6a7b384944536bdc, (N) };
+
+#define LIMINE_BASE_REVISION_SUPPORTED (limine_base_revision[2] == 0)
+
+#define LIMINE_LOADED_BASE_REV_VALID (limine_base_revision[1] != 0x6a7b384944536bdc)
+#define LIMINE_LOADED_BASE_REVISION (limine_base_revision[1])
+
+#define LIMINE_COMMON_MAGIC 0xc7b1dd30df4c8b88, 0x0a82e883a194f07b
+
+struct limine_uuid {
+ uint32_t a;
+ uint16_t b;
+ uint16_t c;
+ uint8_t d[8];
+};
+
+#define LIMINE_MEDIA_TYPE_GENERIC 0
+#define LIMINE_MEDIA_TYPE_OPTICAL 1
+#define LIMINE_MEDIA_TYPE_TFTP 2
+
+struct limine_file {
+ uint64_t revision;
+ LIMINE_PTR(void *) address;
+ uint64_t size;
+ LIMINE_PTR(char *) path;
+#if LIMINE_API_REVISION >= 3
+ LIMINE_PTR(char *) string;
+#else
+ LIMINE_PTR(char *) cmdline;
+#endif
+ uint32_t media_type;
+ uint32_t unused;
+ uint32_t tftp_ip;
+ uint32_t tftp_port;
+ uint32_t partition_index;
+ uint32_t mbr_disk_id;
+ struct limine_uuid gpt_disk_uuid;
+ struct limine_uuid gpt_part_uuid;
+ struct limine_uuid part_uuid;
+};
+
+/* Boot info */
+
+#define LIMINE_BOOTLOADER_INFO_REQUEST { LIMINE_COMMON_MAGIC, 0xf55038d8e2a1202f, 0x279426fcf5f59740 }
+
+struct limine_bootloader_info_response {
+ uint64_t revision;
+ LIMINE_PTR(char *) name;
+ LIMINE_PTR(char *) version;
+};
+
+struct limine_bootloader_info_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_bootloader_info_response *) response;
+};
+
+/* Executable command line */
+
+#define LIMINE_EXECUTABLE_CMDLINE_REQUEST { LIMINE_COMMON_MAGIC, 0x4b161536e598651e, 0xb390ad4a2f1f303a }
+
+struct limine_executable_cmdline_response {
+ uint64_t revision;
+ LIMINE_PTR(char *) cmdline;
+};
+
+struct limine_executable_cmdline_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_executable_cmdline_response *) response;
+};
+
+/* Firmware type */
+
+#define LIMINE_FIRMWARE_TYPE_REQUEST { LIMINE_COMMON_MAGIC, 0x8c2f75d90bef28a8, 0x7045a4688eac00c3 }
+
+#define LIMINE_FIRMWARE_TYPE_X86BIOS 0
+#define LIMINE_FIRMWARE_TYPE_UEFI32 1
+#define LIMINE_FIRMWARE_TYPE_UEFI64 2
+#define LIMINE_FIRMWARE_TYPE_SBI 3
+
+struct limine_firmware_type_response {
+ uint64_t revision;
+ uint64_t firmware_type;
+};
+
+struct limine_firmware_type_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_firmware_type_response *) response;
+};
+
+/* Stack size */
+
+#define LIMINE_STACK_SIZE_REQUEST { LIMINE_COMMON_MAGIC, 0x224ef0460a8e8926, 0xe1cb0fc25f46ea3d }
+
+struct limine_stack_size_response {
+ uint64_t revision;
+};
+
+struct limine_stack_size_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_stack_size_response *) response;
+ uint64_t stack_size;
+};
+
+/* HHDM */
+
+#define LIMINE_HHDM_REQUEST { LIMINE_COMMON_MAGIC, 0x48dcf1cb8ad2b852, 0x63984e959a98244b }
+
+struct limine_hhdm_response {
+ uint64_t revision;
+ uint64_t offset;
+};
+
+struct limine_hhdm_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_hhdm_response *) response;
+};
+
+/* Framebuffer */
+
+#define LIMINE_FRAMEBUFFER_REQUEST { LIMINE_COMMON_MAGIC, 0x9d5827dcd881dd75, 0xa3148604f6fab11b }
+
+#define LIMINE_FRAMEBUFFER_RGB 1
+
+struct limine_video_mode {
+ uint64_t pitch;
+ uint64_t width;
+ uint64_t height;
+ uint16_t bpp;
+ uint8_t memory_model;
+ uint8_t red_mask_size;
+ uint8_t red_mask_shift;
+ uint8_t green_mask_size;
+ uint8_t green_mask_shift;
+ uint8_t blue_mask_size;
+ uint8_t blue_mask_shift;
+};
+
+struct limine_framebuffer {
+ LIMINE_PTR(void *) address;
+ uint64_t width;
+ uint64_t height;
+ uint64_t pitch;
+ uint16_t bpp;
+ uint8_t memory_model;
+ uint8_t red_mask_size;
+ uint8_t red_mask_shift;
+ uint8_t green_mask_size;
+ uint8_t green_mask_shift;
+ uint8_t blue_mask_size;
+ uint8_t blue_mask_shift;
+ uint8_t unused[7];
+ uint64_t edid_size;
+ LIMINE_PTR(void *) edid;
+ /* Response revision 1 */
+ uint64_t mode_count;
+ LIMINE_PTR(struct limine_video_mode **) modes;
+};
+
+struct limine_framebuffer_response {
+ uint64_t revision;
+ uint64_t framebuffer_count;
+ LIMINE_PTR(struct limine_framebuffer **) framebuffers;
+};
+
+struct limine_framebuffer_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_framebuffer_response *) response;
+};
+
+/* Terminal */
+
+#define LIMINE_TERMINAL_REQUEST { LIMINE_COMMON_MAGIC, 0xc8ac59310c2b0844, 0xa68d0c7265d38878 }
+
+#define LIMINE_TERMINAL_CB_DEC 10
+#define LIMINE_TERMINAL_CB_BELL 20
+#define LIMINE_TERMINAL_CB_PRIVATE_ID 30
+#define LIMINE_TERMINAL_CB_STATUS_REPORT 40
+#define LIMINE_TERMINAL_CB_POS_REPORT 50
+#define LIMINE_TERMINAL_CB_KBD_LEDS 60
+#define LIMINE_TERMINAL_CB_MODE 70
+#define LIMINE_TERMINAL_CB_LINUX 80
+
+#define LIMINE_TERMINAL_CTX_SIZE ((uint64_t)(-1))
+#define LIMINE_TERMINAL_CTX_SAVE ((uint64_t)(-2))
+#define LIMINE_TERMINAL_CTX_RESTORE ((uint64_t)(-3))
+#define LIMINE_TERMINAL_FULL_REFRESH ((uint64_t)(-4))
+
+/* Response revision 1 */
+#define LIMINE_TERMINAL_OOB_OUTPUT_GET ((uint64_t)(-10))
+#define LIMINE_TERMINAL_OOB_OUTPUT_SET ((uint64_t)(-11))
+
+#define LIMINE_TERMINAL_OOB_OUTPUT_OCRNL (1 << 0)
+#define LIMINE_TERMINAL_OOB_OUTPUT_OFDEL (1 << 1)
+#define LIMINE_TERMINAL_OOB_OUTPUT_OFILL (1 << 2)
+#define LIMINE_TERMINAL_OOB_OUTPUT_OLCUC (1 << 3)
+#define LIMINE_TERMINAL_OOB_OUTPUT_ONLCR (1 << 4)
+#define LIMINE_TERMINAL_OOB_OUTPUT_ONLRET (1 << 5)
+#define LIMINE_TERMINAL_OOB_OUTPUT_ONOCR (1 << 6)
+#define LIMINE_TERMINAL_OOB_OUTPUT_OPOST (1 << 7)
+
+LIMINE_DEPRECATED_IGNORE_START
+
+struct LIMINE_DEPRECATED limine_terminal;
+
+typedef void (*limine_terminal_write)(struct limine_terminal *, const char *, uint64_t);
+typedef void (*limine_terminal_callback)(struct limine_terminal *, uint64_t, uint64_t, uint64_t, uint64_t);
+
+struct LIMINE_DEPRECATED limine_terminal {
+ uint64_t columns;
+ uint64_t rows;
+ LIMINE_PTR(struct limine_framebuffer *) framebuffer;
+};
+
+struct LIMINE_DEPRECATED limine_terminal_response {
+ uint64_t revision;
+ uint64_t terminal_count;
+ LIMINE_PTR(struct limine_terminal **) terminals;
+ LIMINE_PTR(limine_terminal_write) write;
+};
+
+struct LIMINE_DEPRECATED limine_terminal_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_terminal_response *) response;
+ LIMINE_PTR(limine_terminal_callback) callback;
+};
+
+LIMINE_DEPRECATED_IGNORE_END
+
+/* Paging mode */
+
+#define LIMINE_PAGING_MODE_REQUEST { LIMINE_COMMON_MAGIC, 0x95c1a0edab0944cb, 0xa4e5cb3842f7488a }
+
+#if defined (__x86_64__) || defined (__i386__)
+#define LIMINE_PAGING_MODE_X86_64_4LVL 0
+#define LIMINE_PAGING_MODE_X86_64_5LVL 1
+#define LIMINE_PAGING_MODE_MIN LIMINE_PAGING_MODE_X86_64_4LVL
+#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_X86_64_4LVL
+#elif defined (__aarch64__)
+#define LIMINE_PAGING_MODE_AARCH64_4LVL 0
+#define LIMINE_PAGING_MODE_AARCH64_5LVL 1
+#define LIMINE_PAGING_MODE_MIN LIMINE_PAGING_MODE_AARCH64_4LVL
+#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_AARCH64_4LVL
+#elif defined (__riscv) && (__riscv_xlen == 64)
+#define LIMINE_PAGING_MODE_RISCV_SV39 0
+#define LIMINE_PAGING_MODE_RISCV_SV48 1
+#define LIMINE_PAGING_MODE_RISCV_SV57 2
+#define LIMINE_PAGING_MODE_MIN LIMINE_PAGING_MODE_RISCV_SV39
+#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_RISCV_SV48
+#elif defined (__loongarch__) && (__loongarch_grlen == 64)
+#define LIMINE_PAGING_MODE_LOONGARCH64_4LVL 0
+#define LIMINE_PAGING_MODE_MIN LIMINE_PAGING_MODE_LOONGARCH64_4LVL
+#define LIMINE_PAGING_MODE_DEFAULT LIMINE_PAGING_MODE_LOONGARCH64_4LVL
+#else
+#error Unknown architecture
+#endif
+
+struct limine_paging_mode_response {
+ uint64_t revision;
+ uint64_t mode;
+};
+
+struct limine_paging_mode_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_paging_mode_response *) response;
+ uint64_t mode;
+ uint64_t max_mode;
+ uint64_t min_mode;
+};
+
+/* 5-level paging */
+
+#define LIMINE_5_LEVEL_PAGING_REQUEST { LIMINE_COMMON_MAGIC, 0x94469551da9b3192, 0xebe5e86db7382888 }
+
+LIMINE_DEPRECATED_IGNORE_START
+
+struct LIMINE_DEPRECATED limine_5_level_paging_response {
+ uint64_t revision;
+};
+
+struct LIMINE_DEPRECATED limine_5_level_paging_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_5_level_paging_response *) response;
+};
+
+LIMINE_DEPRECATED_IGNORE_END
+
+/* MP */
+
+#if LIMINE_API_REVISION >= 1
+# define LIMINE_MP_REQUEST { LIMINE_COMMON_MAGIC, 0x95a67b819a1b857e, 0xa0b61b723b6a73e0 }
+# define LIMINE_MP(TEXT) limine_mp_##TEXT
+#else
+# define LIMINE_SMP_REQUEST { LIMINE_COMMON_MAGIC, 0x95a67b819a1b857e, 0xa0b61b723b6a73e0 }
+# define LIMINE_MP(TEXT) limine_smp_##TEXT
+#endif
+
+struct LIMINE_MP(info);
+
+typedef void (*limine_goto_address)(struct LIMINE_MP(info) *);
+
+#if defined (__x86_64__) || defined (__i386__)
+
+#if LIMINE_API_REVISION >= 1
+# define LIMINE_MP_X2APIC (1 << 0)
+#else
+# define LIMINE_SMP_X2APIC (1 << 0)
+#endif
+
+struct LIMINE_MP(info) {
+ uint32_t processor_id;
+ uint32_t lapic_id;
+ uint64_t reserved;
+ LIMINE_PTR(limine_goto_address) goto_address;
+ uint64_t extra_argument;
+};
+
+struct LIMINE_MP(response) {
+ uint64_t revision;
+ uint32_t flags;
+ uint32_t bsp_lapic_id;
+ uint64_t cpu_count;
+ LIMINE_PTR(struct LIMINE_MP(info) **) cpus;
+};
+
+#elif defined (__aarch64__)
+
+struct LIMINE_MP(info) {
+ uint32_t processor_id;
+ uint32_t reserved1;
+ uint64_t mpidr;
+ uint64_t reserved;
+ LIMINE_PTR(limine_goto_address) goto_address;
+ uint64_t extra_argument;
+};
+
+struct LIMINE_MP(response) {
+ uint64_t revision;
+ uint64_t flags;
+ uint64_t bsp_mpidr;
+ uint64_t cpu_count;
+ LIMINE_PTR(struct LIMINE_MP(info) **) cpus;
+};
+
+#elif defined (__riscv) && (__riscv_xlen == 64)
+
+struct LIMINE_MP(info) {
+ uint64_t processor_id;
+ uint64_t hartid;
+ uint64_t reserved;
+ LIMINE_PTR(limine_goto_address) goto_address;
+ uint64_t extra_argument;
+};
+
+struct LIMINE_MP(response) {
+ uint64_t revision;
+ uint64_t flags;
+ uint64_t bsp_hartid;
+ uint64_t cpu_count;
+ LIMINE_PTR(struct LIMINE_MP(info) **) cpus;
+};
+
+#elif defined (__loongarch__) && (__loongarch_grlen == 64)
+
+struct LIMINE_MP(info) {
+ uint64_t reserved;
+};
+
+struct LIMINE_MP(response) {
+ uint64_t cpu_count;
+ LIMINE_PTR(struct LIMINE_MP(info) **) cpus;
+};
+
+#else
+#error Unknown architecture
+#endif
+
+struct LIMINE_MP(request) {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct LIMINE_MP(response) *) response;
+ uint64_t flags;
+};
+
+/* Memory map */
+
+#define LIMINE_MEMMAP_REQUEST { LIMINE_COMMON_MAGIC, 0x67cf3d9d378a806f, 0xe304acdfc50c3c62 }
+
+#define LIMINE_MEMMAP_USABLE 0
+#define LIMINE_MEMMAP_RESERVED 1
+#define LIMINE_MEMMAP_ACPI_RECLAIMABLE 2
+#define LIMINE_MEMMAP_ACPI_NVS 3
+#define LIMINE_MEMMAP_BAD_MEMORY 4
+#define LIMINE_MEMMAP_BOOTLOADER_RECLAIMABLE 5
+#if LIMINE_API_REVISION >= 2
+# define LIMINE_MEMMAP_EXECUTABLE_AND_MODULES 6
+#else
+# define LIMINE_MEMMAP_KERNEL_AND_MODULES 6
+#endif
+#define LIMINE_MEMMAP_FRAMEBUFFER 7
+
+struct limine_memmap_entry {
+ uint64_t base;
+ uint64_t length;
+ uint64_t type;
+};
+
+struct limine_memmap_response {
+ uint64_t revision;
+ uint64_t entry_count;
+ LIMINE_PTR(struct limine_memmap_entry **) entries;
+};
+
+struct limine_memmap_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_memmap_response *) response;
+};
+
+/* Entry point */
+
+#define LIMINE_ENTRY_POINT_REQUEST { LIMINE_COMMON_MAGIC, 0x13d86c035a1cd3e1, 0x2b0caa89d8f3026a }
+
+typedef void (*limine_entry_point)(void);
+
+struct limine_entry_point_response {
+ uint64_t revision;
+};
+
+struct limine_entry_point_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_entry_point_response *) response;
+ LIMINE_PTR(limine_entry_point) entry;
+};
+
+/* Executable File */
+
+#if LIMINE_API_REVISION >= 2
+# define LIMINE_EXECUTABLE_FILE_REQUEST { LIMINE_COMMON_MAGIC, 0xad97e90e83f1ed67, 0x31eb5d1c5ff23b69 }
+#else
+# define LIMINE_KERNEL_FILE_REQUEST { LIMINE_COMMON_MAGIC, 0xad97e90e83f1ed67, 0x31eb5d1c5ff23b69 }
+#endif
+
+#if LIMINE_API_REVISION >= 2
+struct limine_executable_file_response {
+#else
+struct limine_kernel_file_response {
+#endif
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 2
+ LIMINE_PTR(struct limine_file *) executable_file;
+#else
+ LIMINE_PTR(struct limine_file *) kernel_file;
+#endif
+};
+
+#if LIMINE_API_REVISION >= 2
+struct limine_executable_file_request {
+#else
+struct limine_kernel_file_request {
+#endif
+ uint64_t id[4];
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 2
+ LIMINE_PTR(struct limine_executable_file_response *) response;
+#else
+ LIMINE_PTR(struct limine_kernel_file_response *) response;
+#endif
+};
+
+/* Module */
+
+#define LIMINE_MODULE_REQUEST { LIMINE_COMMON_MAGIC, 0x3e7e279702be32af, 0xca1c4f3bd1280cee }
+
+#define LIMINE_INTERNAL_MODULE_REQUIRED (1 << 0)
+#define LIMINE_INTERNAL_MODULE_COMPRESSED (1 << 1)
+
+struct limine_internal_module {
+ LIMINE_PTR(const char *) path;
+#if LIMINE_API_REVISION >= 3
+ LIMINE_PTR(const char *) string;
+#else
+ LIMINE_PTR(const char *) cmdline;
+#endif
+ uint64_t flags;
+};
+
+struct limine_module_response {
+ uint64_t revision;
+ uint64_t module_count;
+ LIMINE_PTR(struct limine_file **) modules;
+};
+
+struct limine_module_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_module_response *) response;
+
+ /* Request revision 1 */
+ uint64_t internal_module_count;
+ LIMINE_PTR(struct limine_internal_module **) internal_modules;
+};
+
+/* RSDP */
+
+#define LIMINE_RSDP_REQUEST { LIMINE_COMMON_MAGIC, 0xc5e77b6b397e7b43, 0x27637845accdcf3c }
+
+struct limine_rsdp_response {
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 1
+ uint64_t address;
+#else
+ LIMINE_PTR(void *) address;
+#endif
+};
+
+struct limine_rsdp_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_rsdp_response *) response;
+};
+
+/* SMBIOS */
+
+#define LIMINE_SMBIOS_REQUEST { LIMINE_COMMON_MAGIC, 0x9e9046f11e095391, 0xaa4a520fefbde5ee }
+
+struct limine_smbios_response {
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 1
+ uint64_t entry_32;
+ uint64_t entry_64;
+#else
+ LIMINE_PTR(void *) entry_32;
+ LIMINE_PTR(void *) entry_64;
+#endif
+};
+
+struct limine_smbios_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_smbios_response *) response;
+};
+
+/* EFI system table */
+
+#define LIMINE_EFI_SYSTEM_TABLE_REQUEST { LIMINE_COMMON_MAGIC, 0x5ceba5163eaaf6d6, 0x0a6981610cf65fcc }
+
+struct limine_efi_system_table_response {
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 1
+ uint64_t address;
+#else
+ LIMINE_PTR(void *) address;
+#endif
+};
+
+struct limine_efi_system_table_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_efi_system_table_response *) response;
+};
+
+/* EFI memory map */
+
+#define LIMINE_EFI_MEMMAP_REQUEST { LIMINE_COMMON_MAGIC, 0x7df62a431d6872d5, 0xa4fcdfb3e57306c8 }
+
+struct limine_efi_memmap_response {
+ uint64_t revision;
+ LIMINE_PTR(void *) memmap;
+ uint64_t memmap_size;
+ uint64_t desc_size;
+ uint64_t desc_version;
+};
+
+struct limine_efi_memmap_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_efi_memmap_response *) response;
+};
+
+/* Date at boot */
+
+#if LIMINE_API_REVISION >= 3
+# define LIMINE_DATE_AT_BOOT_REQUEST { LIMINE_COMMON_MAGIC, 0x502746e184c088aa, 0xfbc5ec83e6327893 }
+#else
+# define LIMINE_BOOT_TIME_REQUEST { LIMINE_COMMON_MAGIC, 0x502746e184c088aa, 0xfbc5ec83e6327893 }
+#endif
+
+#if LIMINE_API_REVISION >= 3
+struct limine_date_at_boot_response {
+#else
+struct limine_boot_time_response {
+#endif
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 3
+ int64_t timestamp;
+#else
+ int64_t boot_time;
+#endif
+};
+
+#if LIMINE_API_REVISION >= 3
+struct limine_date_at_boot_request {
+#else
+struct limine_boot_time_request {
+#endif
+ uint64_t id[4];
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 3
+ LIMINE_PTR(struct limine_date_at_boot_response *) response;
+#else
+ LIMINE_PTR(struct limine_boot_time_response *) response;
+#endif
+};
+
+/* Executable address */
+
+#if LIMINE_API_REVISION >= 2
+# define LIMINE_EXECUTABLE_ADDRESS_REQUEST { LIMINE_COMMON_MAGIC, 0x71ba76863cc55f63, 0xb2644a48c516a487 }
+#else
+# define LIMINE_KERNEL_ADDRESS_REQUEST { LIMINE_COMMON_MAGIC, 0x71ba76863cc55f63, 0xb2644a48c516a487 }
+#endif
+
+#if LIMINE_API_REVISION >= 2
+struct limine_executable_address_response {
+#else
+struct limine_kernel_address_response {
+#endif
+ uint64_t revision;
+ uint64_t physical_base;
+ uint64_t virtual_base;
+};
+
+#if LIMINE_API_REVISION >= 2
+struct limine_executable_address_request {
+#else
+struct limine_kernel_address_request {
+#endif
+ uint64_t id[4];
+ uint64_t revision;
+#if LIMINE_API_REVISION >= 2
+ LIMINE_PTR(struct limine_executable_address_response *) response;
+#else
+ LIMINE_PTR(struct limine_kernel_address_response *) response;
+#endif
+};
+
+/* Device Tree Blob */
+
+#define LIMINE_DTB_REQUEST { LIMINE_COMMON_MAGIC, 0xb40ddb48fb54bac7, 0x545081493f81ffb7 }
+
+struct limine_dtb_response {
+ uint64_t revision;
+ LIMINE_PTR(void *) dtb_ptr;
+};
+
+struct limine_dtb_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_dtb_response *) response;
+};
+
+/* RISC-V Boot Hart ID */
+
+#define LIMINE_RISCV_BSP_HARTID_REQUEST { LIMINE_COMMON_MAGIC, 0x1369359f025525f9, 0x2ff2a56178391bb6 }
+
+struct limine_riscv_bsp_hartid_response {
+ uint64_t revision;
+ uint64_t bsp_hartid;
+};
+
+struct limine_riscv_bsp_hartid_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_riscv_bsp_hartid_response *) response;
+};
+
+/* Bootloader Performance */
+
+#define LIMINE_BOOTLOADER_PERFORMANCE_REQUEST { LIMINE_COMMON_MAGIC, 0x6b50ad9bf36d13ad, 0xdc4c7e88fc759e17 }
+
+struct limine_bootloader_performance_response {
+ uint64_t revision;
+ uint64_t reset_usec;
+ uint64_t init_usec;
+ uint64_t exec_usec;
+};
+
+struct limine_bootloader_performance_request {
+ uint64_t id[4];
+ uint64_t revision;
+ LIMINE_PTR(struct limine_bootloader_performance_response *) response;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
