Merge pull request #242 from ThakeeNathees/moduel-string-source

Adding string source to module implemented
This commit is contained in:
Thakee Nathees 2022-05-28 17:00:19 +05:30 committed by GitHub
commit 176a0dc0c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 631 additions and 49 deletions

View File

@ -34,7 +34,11 @@ ALLOW_LONG_LINES = ('http://', 'https://', '<script ', '<link ', '<svg ')
IGNORE_FILES = ( IGNORE_FILES = (
"cli/modules/pknative.gen.c", ## FIXME: set gen path. "cli/modules/pknative.gen.c", ## FIXME: set gen path.
"cli/argparse.h", ## FIXME: collect all thirdparty files. "cli/argparse.h", ## FIXME: collect all thirdparty files.
## Contain longer lines. I shoule add something like static-check-off,
## static-check-on like clang or just use clang.
"src/libs/ext_term.c", "src/libs/ext_term.c",
## Contain extendedted ascii characters that raise UnicodeDecodeError.
"src/libs/ext_term.pk",
) )
## A list of directory, contains C source files to perform static checks. ## A list of directory, contains C source files to perform static checks.

View File

@ -576,7 +576,8 @@ static void compilerInit(Compiler* compiler, PKVM* vm, const char* source,
const char* source_path = "@??"; const char* source_path = "@??";
if (module->path != NULL) { if (module->path != NULL) {
source_path = module->path->data; source_path = module->path->data;
} else if (options->repl_mode) {
} else if (options && options->repl_mode) {
source_path = "@REPL"; source_path = "@REPL";
} }

View File

@ -290,6 +290,13 @@ void pkClassAddMethod(PKVM* vm, PkHandle* cls,
vmPopTempRef(vm); // method. vmPopTempRef(vm); // method.
} }
void pkModuleAddSource(PKVM* vm, PkHandle* module, const char* source) {
CHECK_HANDLE_TYPE(module, OBJ_MODULE);
CHECK_ARG_NULL(source);
// TODO: compiler options, maybe set to the vm and reuse it here.
compile(vm, (Module*) AS_OBJ(module->value), source, NULL);
}
void pkReleaseHandle(PKVM* vm, PkHandle* handle) { void pkReleaseHandle(PKVM* vm, PkHandle* handle) {
ASSERT(handle != NULL, "Given handle was NULL."); ASSERT(handle != NULL, "Given handle was NULL.");

View File

@ -1513,8 +1513,11 @@ static void _toStringInternal(PKVM* vm, const Var v, pkByteBuffer* buff,
case '\t': pkByteBufferAddString(buff, vm, "\\t", 2); break; case '\t': pkByteBufferAddString(buff, vm, "\\t", 2); break;
default: { default: {
if (isprint(c)) pkByteBufferWrite(buff, vm, c); // if c isn't in range 0x00 to 0xff, isprintc()
else { // fail an assertion.
if ((0x00 <= c && c <= 0xff) && isprint(c)) {
pkByteBufferWrite(buff, vm, c);
} else {
pkByteBufferAddString(buff, vm, "\\x", 2); pkByteBufferAddString(buff, vm, "\\x", 2);
uint8_t byte = (uint8_t) c; uint8_t byte = (uint8_t) c;
pkByteBufferWrite(buff, vm, utilHexDigit(((byte >> 4) & 0xf), pkByteBufferWrite(buff, vm, utilHexDigit(((byte >> 4) & 0xf),

View File

@ -259,6 +259,11 @@ PK_PUBLIC void pkClassAddMethod(PKVM* vm, PkHandle* cls,
const char* name, const char* name,
pkNativeFn fptr, int arity); pkNativeFn fptr, int arity);
// It'll compile the pocket [source] for the module which result all the
// functions and classes in that [source] to register on the module.
PK_PUBLIC void pkModuleAddSource(PKVM* vm, PkHandle* module,
const char* source);
// Run the source string. The [source] is expected to be valid till this // Run the source string. The [source] is expected to be valid till this
// function returns. // function returns.
PK_PUBLIC PkResult pkRunString(PKVM* vm, const char* source); PK_PUBLIC PkResult pkRunString(PKVM* vm, const char* source);

View File

@ -6,6 +6,7 @@
#ifndef PK_AMALGAMATED #ifndef PK_AMALGAMATED
#include "libs.h" #include "libs.h"
#include "gen/ext_term.pk.h" //<< AMALG_INLINE >>
#endif #endif
#define TERM_IMPLEMENT #define TERM_IMPLEMENT
@ -249,6 +250,8 @@ void registerModuleTerm(PKVM* vm) {
_cls_term_event = pkNewClass(vm, "Event", NULL, term, _termEventNew, _termEventDelete); _cls_term_event = pkNewClass(vm, "Event", NULL, term, _termEventNew, _termEventDelete);
pkClassAddMethod(vm, _cls_term_event, "@getter", _termEventGetter, 1); pkClassAddMethod(vm, _cls_term_event, "@getter", _termEventGetter, 1);
pkModuleAddSource(vm, term, ext_term_pk);
pkRegisterModule(vm, term); pkRegisterModule(vm, term);
pkReleaseHandle(vm, term); pkReleaseHandle(vm, term);
} }

View File

@ -1,12 +1,8 @@
import term, io import io
from time import clock, sleep from time import clock, sleep
from types import ByteBuffer from types import ByteBuffer
def write(msg)
io.write(io.stdout, msg)
end
## The configuration that should be used to create tui context ## The configuration that should be used to create tui context
## and run. ## and run.
class Config class Config
@ -33,6 +29,7 @@ class _Context
## Called to reset all the internal for reusing the context. ## Called to reset all the internal for reusing the context.
def clear() def clear()
self.config = null
self.buff.clear() self.buff.clear()
self.done = false ## If true the main loop ends. self.done = false ## If true the main loop ends.
end end
@ -47,7 +44,7 @@ _ctx = _Context()
## Flush all the buffered bytes in the context's buffer. ## Flush all the buffered bytes in the context's buffer.
def flush() def flush()
write(_ctx.buff.string()) io.write(io.stdout, _ctx.buff.string())
io.flush() io.flush()
_ctx.buff.clear() _ctx.buff.clear()
end end
@ -58,27 +55,23 @@ def stop()
end end
def set_title(title) def set_title(title)
write("\x1b]0;$title\x07") io.write(io.stdout, "\x1b]0;$title\x07")
end end
def hide_cursor() def hide_cursor()
write("\x1b[?25l") io.write(io.stdout, "\x1b[?25l")
end end
def show_cursor() def show_cursor()
write("\x1b[?25h") io.write(io.stdout, "\x1b[?25h")
end end
## It'll write escape sequence to move the cursor but not actually move. ## It'll write escape sequence to move the cursor but not actually move.
## for this to make effect, one should flush the buffer. ## for this to make effect, one should flush the buffer.
def set_position(x, y) def setposition(x, y)
_ctx.buff.write("\x1b[${y + 1};${x + 1}H") _ctx.buff.write("\x1b[${y + 1};${x + 1}H")
end end
def get_size()
return term.getsize()
end
## ##
## Hex ASCII DEC-Line-Drawing ## Hex ASCII DEC-Line-Drawing
## ------------------------------ ## ------------------------------
@ -94,18 +87,16 @@ end
## 0x77 w ┬ ## 0x77 w ┬
## 0x78 x │ ## 0x78 x │
## ##
def box_char(c) def start_boxchar()
_ctx.buff.write("\x1b(0$c\x1b(B") _ctx.buff.write("\x1b(0")
end end
## FIXME: Implement str * int multiplicatin to support def end_boxchar()
## _ctx.buff.write("\x1b(B")
## "\x1b(0${ c * n }\x1b(B" end
##
## and define box_char_len() or refactor the above to take argument n.
## Write a string to the context buffer. ## Write a string to the context buffer.
def string(s) def write(s)
_ctx.buff.write(str(s)) _ctx.buff.write(str(s))
end end
@ -188,6 +179,14 @@ def end_underline()
_ctx.buff.write("\x1b[24m") _ctx.buff.write("\x1b[24m")
end end
def start_inverse()
_ctx.buff.write("\x1b[7m")
end
def end_inverse()
_ctx.buff.write("\x1b[27m")
end
def start_hidden() def start_hidden()
_ctx.buff.write("\x1b[8m") _ctx.buff.write("\x1b[8m")
end end
@ -281,21 +280,33 @@ end
## TUI MAIN LOOP ## TUI MAIN LOOP
## ------------------------------------------------------------------------- ## -------------------------------------------------------------------------
def run(config) ## Internal event dispatcher
term.init(config.capture_events) def _dispatch(event)
## Windows show cursor every time the window resize.
if event.type == EVENT_RESIZE
if _ctx.config.hide_cursor
hide_cursor()
end
end
end
if config.new_buffer then term.new_screen_buffer() end def run(config)
_ctx.config = config
init(config.capture_events)
if config.new_buffer then new_screen_buffer() end
if config.hide_cursor then hide_cursor() end if config.hide_cursor then hide_cursor() end
if config.init_fn then config.init_fn() end if config.init_fn then config.init_fn() end
event = term.Event() event = Event()
## The main loop. ## The main loop.
while not _ctx.done while not _ctx.done
start = clock() start = clock()
## Dispatch events. ## Dispatch events.
while term.read_event(event) while read_event(event)
_dispatch(event)
if config.event_fn then config.event_fn(event) end if config.event_fn then config.event_fn(event) end
if _ctx.done then break end if _ctx.done then break end
end end
@ -314,8 +325,8 @@ def run(config)
## Cleanup. ## Cleanup.
if config.cleanup_fn then config.cleanup_fn() end if config.cleanup_fn then config.cleanup_fn() end
if config.hide_cursor then show_cursor() end if config.hide_cursor then show_cursor() end
if config.new_buffer then term.restore_screen_buffer() end if config.new_buffer then restore_screen_buffer() end
term.cleanup() cleanup()
_ctx.clear() _ctx.clear()
end end

548
src/libs/gen/ext_term.pk.h Normal file
View File

@ -0,0 +1,548 @@
unsigned char ext_term_pk[] = {
0x0d, 0x0a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x6f, 0x0d,
0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69,
0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x2c,
0x20, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x0d, 0x0a, 0x66, 0x72, 0x6f, 0x6d,
0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72,
0x74, 0x20, 0x42, 0x79, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72,
0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64,
0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x75, 0x69, 0x20, 0x63,
0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x61,
0x6e, 0x64, 0x20, 0x72, 0x75, 0x6e, 0x2e, 0x0d, 0x0a, 0x63, 0x6c, 0x61,
0x73, 0x73, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x0d, 0x0a, 0x20,
0x20, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x74,
0x69, 0x74, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x66, 0x70,
0x73, 0x20, 0x3d, 0x20, 0x36, 0x30, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x73, 0x65, 0x6c, 0x66, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x75,
0x72, 0x73, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63,
0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74,
0x73, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x6e, 0x65, 0x77, 0x5f,
0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c,
0x73, 0x65, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65,
0x6c, 0x66, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x6e, 0x20, 0x3d,
0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
0x65, 0x6c, 0x66, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6e,
0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f,
0x66, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6c, 0x65, 0x61,
0x6e, 0x75, 0x70, 0x5f, 0x66, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x75, 0x6c,
0x6c, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20,
0x49, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x78, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
0x73, 0x20, 0x64, 0x72, 0x61, 0x77, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65,
0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
0x64, 0x61, 0x74, 0x61, 0x2e, 0x0d, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73,
0x20, 0x5f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x0d, 0x0a, 0x20,
0x20, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x62,
0x75, 0x66, 0x66, 0x20, 0x3d, 0x20, 0x42, 0x79, 0x74, 0x65, 0x42, 0x75,
0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x0d,
0x0a, 0x20, 0x20, 0x23, 0x23, 0x20, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64,
0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6c,
0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x75, 0x73, 0x69,
0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65,
0x78, 0x74, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x64, 0x65, 0x66, 0x20, 0x63,
0x6c, 0x65, 0x61, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20,
0x3d, 0x20, 0x6e, 0x75, 0x6c, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x73, 0x65, 0x6c, 0x66, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x63, 0x6c,
0x65, 0x61, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73,
0x65, 0x6c, 0x66, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x66,
0x61, 0x6c, 0x73, 0x65, 0x20, 0x23, 0x23, 0x20, 0x49, 0x66, 0x20, 0x74,
0x72, 0x75, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e,
0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x65, 0x6e, 0x64, 0x73, 0x2e, 0x0d,
0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d,
0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x20, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x0d, 0x0a, 0x5f, 0x63, 0x74, 0x78,
0x20, 0x3d, 0x20, 0x5f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x28,
0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0d, 0x0a, 0x23,
0x23, 0x20, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20,
0x46, 0x6c, 0x75, 0x73, 0x68, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x68,
0x65, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x20, 0x62,
0x79, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x27, 0x73, 0x20, 0x62, 0x75,
0x66, 0x66, 0x65, 0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x66,
0x6c, 0x75, 0x73, 0x68, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x6f,
0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x69, 0x6f, 0x2e, 0x73, 0x74,
0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62,
0x75, 0x66, 0x66, 0x2e, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x66, 0x6c, 0x75, 0x73,
0x68, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e,
0x62, 0x75, 0x66, 0x66, 0x2e, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x28, 0x29,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20,
0x53, 0x74, 0x6f, 0x70, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61,
0x69, 0x6e, 0x20, 0x6c, 0x6f, 0x6f, 0x70, 0x20, 0x61, 0x6e, 0x64, 0x20,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
0x72, 0x75, 0x6e, 0x28, 0x29, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20,
0x73, 0x74, 0x6f, 0x70, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63,
0x74, 0x78, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72,
0x75, 0x65, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x74, 0x6c, 0x65,
0x28, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x69,
0x6f, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x69, 0x6f, 0x2e, 0x73,
0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x5c, 0x78, 0x31, 0x62,
0x5d, 0x30, 0x3b, 0x24, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x5c, 0x78, 0x30,
0x37, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a,
0x64, 0x65, 0x66, 0x20, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x75, 0x72,
0x73, 0x6f, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x6f, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x69, 0x6f, 0x2e, 0x73, 0x74, 0x64,
0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x3f,
0x32, 0x35, 0x6c, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x5f, 0x63,
0x75, 0x72, 0x73, 0x6f, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x69,
0x6f, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x69, 0x6f, 0x2e, 0x73,
0x74, 0x64, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x22, 0x5c, 0x78, 0x31, 0x62,
0x5b, 0x3f, 0x32, 0x35, 0x68, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64,
0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x49, 0x74, 0x27, 0x6c, 0x6c,
0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70,
0x65, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x74,
0x6f, 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
0x75, 0x72, 0x73, 0x6f, 0x72, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f,
0x74, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x6d,
0x6f, 0x76, 0x65, 0x2e, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x66, 0x6f, 0x72,
0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x61, 0x6b,
0x65, 0x20, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x2c, 0x20, 0x6f, 0x6e,
0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x66, 0x6c, 0x75,
0x73, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65,
0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x65, 0x74, 0x70,
0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x78, 0x2c, 0x20, 0x79,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75,
0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78,
0x31, 0x62, 0x5b, 0x24, 0x7b, 0x79, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x3b,
0x24, 0x7b, 0x78, 0x20, 0x2b, 0x20, 0x31, 0x7d, 0x48, 0x22, 0x29, 0x0d,
0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x48, 0x65, 0x78, 0x20, 0x20, 0x20, 0x20, 0x41,
0x53, 0x43, 0x49, 0x49, 0x20, 0x20, 0x44, 0x45, 0x43, 0x2d, 0x4c, 0x69,
0x6e, 0x65, 0x2d, 0x44, 0x72, 0x61, 0x77, 0x69, 0x6e, 0x67, 0x0d, 0x0a,
0x23, 0x23, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0d, 0x0a, 0x23,
0x23, 0x20, 0x20, 0x30, 0x78, 0x36, 0x61, 0x20, 0x20, 0x20, 0x20, 0x6a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe2, 0x94, 0x98, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x36, 0x62, 0x20, 0x20, 0x20,
0x20, 0x6b, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe2, 0x94,
0x90, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x36, 0x63, 0x20,
0x20, 0x20, 0x20, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xe2, 0x94, 0x8c, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x36,
0x64, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xe2, 0x94, 0x94, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30,
0x78, 0x36, 0x65, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0xe2, 0x94, 0xbc, 0x0d, 0x0a, 0x23, 0x23, 0x20,
0x20, 0x30, 0x78, 0x37, 0x31, 0x20, 0x20, 0x20, 0x20, 0x71, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe2, 0x94, 0x80, 0x0d, 0x0a, 0x23,
0x23, 0x20, 0x20, 0x30, 0x78, 0x37, 0x34, 0x20, 0x20, 0x20, 0x20, 0x74,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe2, 0x94, 0x9c, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x37, 0x35, 0x20, 0x20, 0x20,
0x20, 0x75, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xe2, 0x94,
0xa4, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x37, 0x36, 0x20,
0x20, 0x20, 0x20, 0x76, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0xe2, 0x94, 0xb4, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30, 0x78, 0x37,
0x37, 0x20, 0x20, 0x20, 0x20, 0x77, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0xe2, 0x94, 0xac, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x20, 0x30,
0x78, 0x37, 0x38, 0x20, 0x20, 0x20, 0x20, 0x78, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0xe2, 0x94, 0x82, 0x0d, 0x0a, 0x23, 0x23, 0x0d,
0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62,
0x6f, 0x78, 0x63, 0x68, 0x61, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20,
0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72,
0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x28, 0x30, 0x22,
0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6f, 0x78, 0x63, 0x68, 0x61,
0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e,
0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22,
0x5c, 0x78, 0x31, 0x62, 0x28, 0x42, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x57, 0x72, 0x69, 0x74,
0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74,
0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x73, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66,
0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x73, 0x74, 0x72, 0x28, 0x73,
0x29, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23,
0x23, 0x20, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d,
0x6f, 0x76, 0x65, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x20, 0x74,
0x6f, 0x20, 0x28, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x2e, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x48, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x4a, 0x22, 0x29, 0x0d, 0x0a, 0x65,
0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x43, 0x6c, 0x65,
0x61, 0x72, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e,
0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72,
0x20, 0x74, 0x6f, 0x20, 0x45, 0x4f, 0x4c, 0x2e, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x5f, 0x65, 0x6f, 0x6c, 0x28,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75,
0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78,
0x31, 0x62, 0x5b, 0x4b, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d,
0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x43, 0x6c, 0x65, 0x61, 0x72, 0x20,
0x65, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x66, 0x72,
0x6f, 0x6d, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x20, 0x74, 0x6f,
0x20, 0x45, 0x4f, 0x46, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x63,
0x6c, 0x65, 0x61, 0x72, 0x5f, 0x65, 0x6f, 0x66, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x4a, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a,
0x23, 0x23, 0x20, 0x52, 0x65, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6c, 0x6c,
0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x69, 0x6e, 0x67,
0x73, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x72, 0x65, 0x73, 0x65,
0x74, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e,
0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22,
0x5c, 0x78, 0x31, 0x62, 0x5b, 0x30, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65,
0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x69,
0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f,
0x72, 0x28, 0x72, 0x2c, 0x20, 0x67, 0x2c, 0x20, 0x62, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x20, 0x69,
0x73, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64,
0x20, 0x67, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72,
0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x75,
0x6d, 0x62, 0x65, 0x72, 0x0d, 0x0a, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x20, 0x72, 0x2e, 0x69, 0x73, 0x62, 0x79, 0x74, 0x65, 0x28,
0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x67, 0x2e, 0x69, 0x73, 0x62, 0x79,
0x74, 0x65, 0x28, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x2e, 0x69,
0x73, 0x62, 0x79, 0x74, 0x65, 0x28, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64,
0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x53, 0x65, 0x74, 0x20, 0x74,
0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64,
0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66,
0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x28, 0x72, 0x2c, 0x20, 0x67, 0x2c, 0x20, 0x62, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x5f, 0x69, 0x73, 0x5f,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28,
0x72, 0x2c, 0x20, 0x67, 0x2c, 0x20, 0x62, 0x29, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33,
0x38, 0x3b, 0x32, 0x3b, 0x24, 0x72, 0x3b, 0x24, 0x67, 0x3b, 0x24, 0x7b,
0x62, 0x7d, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x23, 0x23, 0x20, 0x45, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65,
0x20, 0x66, 0x6f, 0x72, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x63,
0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65,
0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x33, 0x39, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x23, 0x23, 0x20, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x74,
0x68, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e,
0x64, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x67, 0x28, 0x72,
0x2c, 0x20, 0x67, 0x2c, 0x20, 0x62, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x61,
0x73, 0x73, 0x65, 0x72, 0x74, 0x28, 0x5f, 0x69, 0x73, 0x5f, 0x76, 0x61,
0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x72, 0x2c,
0x20, 0x67, 0x2c, 0x20, 0x62, 0x29, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x38, 0x3b,
0x32, 0x3b, 0x24, 0x72, 0x3b, 0x24, 0x67, 0x3b, 0x24, 0x7b, 0x62, 0x7d,
0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a,
0x23, 0x23, 0x20, 0x45, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x62,
0x61, 0x63, 0x6b, 0x67, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x2e, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e,
0x64, 0x5f, 0x62, 0x67, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63,
0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74,
0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x39, 0x6d, 0x22,
0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6f, 0x6c, 0x64,
0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62,
0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c,
0x78, 0x31, 0x62, 0x5b, 0x31, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64,
0x5f, 0x62, 0x6f, 0x6c, 0x64, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x32, 0x32, 0x6d,
0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x69, 0x6d,
0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62,
0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c,
0x78, 0x31, 0x62, 0x5b, 0x32, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64,
0x5f, 0x64, 0x69, 0x6d, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63,
0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74,
0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x32, 0x32, 0x6d, 0x22,
0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x69, 0x74, 0x61, 0x6c,
0x69, 0x63, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78,
0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28,
0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33, 0x6d, 0x22, 0x29, 0x0d, 0x0a,
0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65,
0x6e, 0x64, 0x5f, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x28, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66,
0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62,
0x5b, 0x32, 0x33, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d,
0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74,
0x5f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66,
0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31,
0x62, 0x5b, 0x34, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d,
0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x75,
0x6e, 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x32, 0x34, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x65, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x37,
0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a,
0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x65,
0x72, 0x73, 0x65, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74,
0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65,
0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x32, 0x37, 0x6d, 0x22, 0x29,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66,
0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65,
0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e,
0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22,
0x5c, 0x78, 0x31, 0x62, 0x5b, 0x38, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65,
0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e,
0x64, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x32, 0x38, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67,
0x68, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e,
0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22,
0x5c, 0x78, 0x31, 0x62, 0x5b, 0x39, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65,
0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e,
0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f,
0x75, 0x67, 0x68, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74,
0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65,
0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x32, 0x39, 0x6d, 0x22, 0x29,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66,
0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x5f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20,
0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72,
0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33, 0x30,
0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a,
0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f,
0x72, 0x5f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34,
0x30, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d,
0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63,
0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x64, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x33, 0x31, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x64, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34,
0x31, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d,
0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63,
0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66,
0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31,
0x62, 0x5b, 0x33, 0x32, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64,
0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f,
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x28,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75,
0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78,
0x31, 0x62, 0x5b, 0x34, 0x32, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61,
0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x79, 0x65, 0x6c,
0x6c, 0x6f, 0x77, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74,
0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65,
0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33, 0x33, 0x6d, 0x22, 0x29,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66,
0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x79,
0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x33, 0x6d,
0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33,
0x34, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d,
0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x5f, 0x62, 0x6c, 0x75, 0x65, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77,
0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34,
0x34, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d,
0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63,
0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x6d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x61,
0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62,
0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c,
0x78, 0x31, 0x62, 0x5b, 0x33, 0x35, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65,
0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e,
0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x6d, 0x61, 0x67, 0x65,
0x6e, 0x74, 0x61, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74,
0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65,
0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x35, 0x6d, 0x22, 0x29,
0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66,
0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x5f, 0x63, 0x79, 0x61, 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33, 0x36, 0x6d,
0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x5f, 0x63, 0x79, 0x61, 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x36, 0x6d,
0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64,
0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x28, 0x29, 0x0d, 0x0a,
0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e,
0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b,
0x33, 0x37, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x5f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x28, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66,
0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62,
0x5b, 0x34, 0x37, 0x6d, 0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d,
0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74,
0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78,
0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x28,
0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x33, 0x39, 0x6d, 0x22, 0x29, 0x0d,
0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20,
0x65, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x64, 0x65,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f,
0x63, 0x74, 0x78, 0x2e, 0x62, 0x75, 0x66, 0x66, 0x2e, 0x77, 0x72, 0x69,
0x74, 0x65, 0x28, 0x22, 0x5c, 0x78, 0x31, 0x62, 0x5b, 0x34, 0x39, 0x6d,
0x22, 0x29, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0d, 0x0a, 0x23, 0x23, 0x20, 0x54, 0x55,
0x49, 0x20, 0x4d, 0x41, 0x49, 0x4e, 0x20, 0x4c, 0x4f, 0x4f, 0x50, 0x0d,
0x0a, 0x23, 0x23, 0x20, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x23, 0x20,
0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x65, 0x76, 0x65,
0x6e, 0x74, 0x20, 0x64, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x65,
0x72, 0x0d, 0x0a, 0x64, 0x65, 0x66, 0x20, 0x5f, 0x64, 0x69, 0x73, 0x70,
0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x23, 0x23, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77,
0x73, 0x20, 0x73, 0x68, 0x6f, 0x77, 0x20, 0x63, 0x75, 0x72, 0x73, 0x6f,
0x72, 0x20, 0x65, 0x76, 0x65, 0x72, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65,
0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x20,
0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x69,
0x66, 0x20, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65,
0x20, 0x3d, 0x3d, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45,
0x53, 0x49, 0x5a, 0x45, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x2e, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x69, 0x64, 0x65,
0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x0d, 0x0a, 0x64, 0x65,
0x66, 0x20, 0x72, 0x75, 0x6e, 0x28, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x28, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65,
0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x29, 0x0d, 0x0a, 0x20, 0x20,
0x0d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x2e, 0x6e, 0x65, 0x77, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72,
0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x63,
0x72, 0x65, 0x65, 0x6e, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x28,
0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x5f,
0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
0x68, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x28,
0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x5f,
0x66, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x6e, 0x28, 0x29,
0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x3d, 0x20, 0x45, 0x76, 0x65, 0x6e,
0x74, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x23,
0x23, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6c,
0x6f, 0x6f, 0x70, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x77, 0x68, 0x69, 0x6c,
0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x64,
0x6f, 0x6e, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x74, 0x61,
0x72, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x23, 0x23, 0x20, 0x44, 0x69, 0x73, 0x70, 0x61, 0x74, 0x63, 0x68, 0x20,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x61, 0x64, 0x5f,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x64, 0x69, 0x73,
0x70, 0x61, 0x74, 0x63, 0x68, 0x28, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x29,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f,
0x66, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x6e, 0x28,
0x65, 0x76, 0x65, 0x6e, 0x74, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x5f, 0x63, 0x74,
0x78, 0x2e, 0x64, 0x6f, 0x6e, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20,
0x62, 0x72, 0x65, 0x61, 0x6b, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x52, 0x75, 0x6e,
0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20,
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65,
0x5f, 0x66, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x2e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6e,
0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x53, 0x6c, 0x65,
0x65, 0x70, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x46,
0x50, 0x53, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x74, 0x20,
0x3d, 0x20, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x28, 0x29, 0x20, 0x2d, 0x20,
0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x23, 0x23, 0x20, 0x45, 0x6c, 0x61,
0x70, 0x73, 0x65, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x74, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x2f,
0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x66, 0x70, 0x73, 0x20,
0x20, 0x23, 0x23, 0x20, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x69,
0x6d, 0x65, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x23, 0x23, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20,
0x73, 0x65, 0x74, 0x20, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x20, 0x74, 0x6f,
0x20, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x66, 0x70, 0x73, 0x20, 0x69,
0x66, 0x20, 0x73, 0x61, 0x69, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69,
0x66, 0x20, 0x66, 0x74, 0x20, 0x3e, 0x20, 0x65, 0x74, 0x20, 0x74, 0x68,
0x65, 0x6e, 0x20, 0x73, 0x6c, 0x65, 0x65, 0x70, 0x28, 0x28, 0x66, 0x74,
0x20, 0x2d, 0x20, 0x65, 0x74, 0x29, 0x20, 0x2a, 0x20, 0x31, 0x30, 0x30,
0x30, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x23, 0x23, 0x20,
0x43, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x2e, 0x0d, 0x0a, 0x20, 0x20,
0x69, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c,
0x65, 0x61, 0x6e, 0x75, 0x70, 0x5f, 0x66, 0x6e, 0x20, 0x74, 0x68, 0x65,
0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x63, 0x6c, 0x65,
0x61, 0x6e, 0x75, 0x70, 0x5f, 0x66, 0x6e, 0x28, 0x29, 0x20, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x73,
0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x68, 0x6f, 0x77,
0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x28, 0x29, 0x20, 0x65, 0x6e,
0x64, 0x0d, 0x0a, 0x20, 0x20, 0x69, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x2e, 0x6e, 0x65, 0x77, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65,
0x72, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x74, 0x6f,
0x72, 0x65, 0x5f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x5f, 0x62, 0x75,
0x66, 0x66, 0x65, 0x72, 0x28, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0d, 0x0a,
0x20, 0x20, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x28, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x63, 0x6c, 0x65, 0x61,
0x72, 0x28, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x0d, 0x0a, 0x65, 0x6e, 0x64,
0x0d, 0x0a
};
unsigned int ext_term_pk_len = 6530;

View File

@ -1,5 +1,5 @@
import tui, term, math import term, math
from types import Vector from types import Vector
## This is a pocketlang implementation of: ## This is a pocketlang implementation of:
@ -25,7 +25,7 @@ tail = 15
score = 0 score = 0
def init() def init()
size = tui.get_size() size = term.getsize()
tx = size.x tx = size.x
ty = size.y ty = size.y
@ -40,24 +40,24 @@ def frame()
if py < 0 then py = ty - 1 end if py < 0 then py = ty - 1 end
if py > ty - 1 then py = 0 end if py > ty - 1 then py = 0 end
tui.clear() term.clear()
tui.string('press Q to quit | score = $score') term.write('press Q to quit | score = $score')
for i in trail for i in trail
tui.set_position(i.x, i.y) term.setposition(i.x, i.y)
tui.start_bg(0, 0xff, 0) term.start_bg(0, 0xff, 0)
tui.string(' ') term.write(' ')
tui.end_bg() term.end_bg()
if i.x == px and i.y == py if i.x == px and i.y == py
tail = 5 tail = 5
end end
end end
tui.set_position(ax, ay) term.setposition(ax, ay)
tui.start_bg(0xff, 0, 0) term.start_bg(0xff, 0, 0)
tui.string(' ') term.write(' ')
tui.end_bg() term.end_bg()
trail.append(Vector(px, py)) trail.append(Vector(px, py))
while trail.length > tail while trail.length > tail
@ -70,13 +70,13 @@ def frame()
ax = math.rand() % tx ax = math.rand() % tx
ay = math.rand() % ty ay = math.rand() % ty
end end
tui.flush() term.flush()
end end
def handle(event) def handle(event)
if event.type == term.EVENT_KEY_DOWN if event.type == term.EVENT_KEY_DOWN
if event.keycode == term.KEY_Q if event.keycode == term.KEY_Q
tui.stop() term.stop()
end end
## The "Switch Statement" alternative. ## The "Switch Statement" alternative.
@ -108,7 +108,7 @@ end
def main() def main()
config = tui.Config() config = term.Config()
config.capture_events = true config.capture_events = true
config.hide_cursor = true config.hide_cursor = true
config.new_buffer = true config.new_buffer = true
@ -116,7 +116,7 @@ def main()
config.init_fn = init config.init_fn = init
config.event_fn = handle config.event_fn = handle
config.frame_fn = frame config.frame_fn = frame
tui.run(config) term.run(config)
end end