fix compiler handling of top-/module-level constants

The JIT and bytecode compiler disagreed on the definition of
"constant". Now there are two levels: "constant" means constant across
all instantiations, and "fixed" means constant for a given instantation.
The JIT uses this distinction to generate direct-primitive calls
or not. (Without the distinction, a direct jump to `reverse' could
be wrong, because `racket/base' might get instantiated with the
JIT disabled or not.)

Also, fixed a bug in the JIT's `vector-set!' code in the case that
the target vector is a top-/module-level reference that is ready,
fixed, or constant.
This commit is contained in:
Matthew Flatt 2011-08-19 03:34:56 -06:00
parent e01e72a7ed
commit 7eb2042bd9
16 changed files with 513 additions and 560 deletions

View File

@ -186,7 +186,7 @@
[(struct def-values (ids rhs)) [(struct def-values (ids rhs))
`(define-values ,(map (lambda (tl) `(define-values ,(map (lambda (tl)
(match tl (match tl
[(struct toplevel (depth pos const? mutated?)) [(struct toplevel (depth pos const? set-const?))
(list-ref/protect (glob-desc-vars globs) pos 'def-vals)])) (list-ref/protect (glob-desc-vars globs) pos 'def-vals)]))
ids) ids)
,(decompile-expr rhs globs stack closed))] ,(decompile-expr rhs globs stack closed))]
@ -250,10 +250,14 @@
(match expr (match expr
[(struct toplevel (depth pos const? ready?)) [(struct toplevel (depth pos const? ready?))
(let ([id (list-ref/protect (glob-desc-vars globs) pos 'toplevel)]) (let ([id (list-ref/protect (glob-desc-vars globs) pos 'toplevel)])
(if (or no-check? const? ready?) (cond
id [no-check? id]
`(#%checked ,id)))])) [(and (not const?) (not ready?))
`(#%checked ,id)]
#;[(and const? ready?) `(#%const ,id)]
#;[const? `(#%iconst ,id)]
[else id]))]))
(define (decompile-expr expr globs stack closed) (define (decompile-expr expr globs stack closed)
(match expr (match expr
[(struct toplevel (depth pos const? ready?)) [(struct toplevel (depth pos const? ready?))

View File

@ -554,8 +554,8 @@
(if (or const? ready?) (if (or const? ready?)
(cons pos (cons pos
(bitwise-ior (bitwise-ior
(if const? #x1 0) (if const? #x2 0)
(if ready? #x2 0))) (if ready? #x1 0)))
pos)) pos))
out)] out)]
[(struct topsyntax (depth pos midpt)) [(struct topsyntax (depth pos midpt))

View File

@ -33,10 +33,13 @@
;; Bytecode unmarshalers for various forms ;; Bytecode unmarshalers for various forms
(define (read-toplevel v) (define (read-toplevel v)
(define SCHEME_TOPLEVEL_CONST #x01) (define SCHEME_TOPLEVEL_CONST #x02)
(define SCHEME_TOPLEVEL_READY #x02) (define SCHEME_TOPLEVEL_READY #x01)
(match v (match v
[(cons depth (cons pos flags)) [(cons depth (cons pos flags))
;; In the VM, the two flag bits are actually interpreted
;; as a number when the toplevel is a reference, but we
;; interpret the bits as flags here for backward compatibility.
(make-toplevel depth pos (make-toplevel depth pos
(positive? (bitwise-and flags SCHEME_TOPLEVEL_CONST)) (positive? (bitwise-and flags SCHEME_TOPLEVEL_CONST))
(positive? (bitwise-and flags SCHEME_TOPLEVEL_READY)))] (positive? (bitwise-and flags SCHEME_TOPLEVEL_READY)))]

View File

@ -375,12 +375,21 @@ structures that are produced by @racket[zo-parse] and consumed by
of stack slots to skip to reach the prefix array, and @racket[pos] is of stack slots to skip to reach the prefix array, and @racket[pos] is
the offset into the array. the offset into the array.
If @racket[const?] is @racket[#t], then the variable definitely will When the @racket[toplevel] is an expression, if both @racket[const?]
be defined, and its value stays constant. If @racket[ready?] is and @racket[ready?] are @racket[#t], then the variable definitely
@racket[#t], then the variable definitely will be defined (but its will be defined, its value stays constant, and the constant is
value might change in the future). If @racket[const?] and effectively the same for every module instantiation. If only
@racket[ready?] are both @racket[#f], then a check is needed to @racket[const?] is @racket[#t], then the value is constant, but it
determine whether the variable is defined.} may vary across instantiations. If only @racket[ready?] is
@racket[#t], then the variable definitely will be defined, but its
value may change. If @racket[const?] and @racket[ready?] are both
@racket[#f], then a check is needed to determine whether the
variable is defined.
When the @racket[toplevel] is the right-hand side for
@racket[def-values], then @racket[const?] is @racket[#f]. If
@racket[ready?] is @racket[#t], the variable is marked as immutable
after it is defined.}
@defstruct+[(topsyntax expr) @defstruct+[(topsyntax expr)
([depth exact-nonnegative-integer?] ([depth exact-nonnegative-integer?]

View File

@ -624,10 +624,11 @@ Scheme_Object *scheme_register_toplevel_in_prefix(Scheme_Object *var, Scheme_Com
o = scheme_make_toplevel(0, cp->num_toplevels, 0, o = scheme_make_toplevel(0, cp->num_toplevels, 0,
(imported (imported
? (SCHEME_TOPLEVEL_READY ? ((SCHEME_MODVAR_FLAGS(var) & SCHEME_MODVAR_CONST)
| ((SCHEME_MODVAR_FLAGS(var) & 0x1) ? SCHEME_TOPLEVEL_CONST
? SCHEME_TOPLEVEL_CONST : ((SCHEME_MODVAR_FLAGS(var) & SCHEME_MODVAR_FIXED)
: 0)) ? SCHEME_TOPLEVEL_FIXED
: SCHEME_TOPLEVEL_READY))
: 0)); : 0));
cp->num_toplevels++; cp->num_toplevels++;
@ -884,6 +885,7 @@ static Scheme_Local *get_frame_loc(Scheme_Comp_Env *frame,
Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modidx, Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modidx,
Scheme_Object *stxsym, Scheme_Object *insp, Scheme_Object *stxsym, Scheme_Object *insp,
int pos, intptr_t mod_phase, int is_constant) int pos, intptr_t mod_phase, int is_constant)
/* is_constant == 2 => constant over all instantiations and phases */
{ {
Scheme_Object *val; Scheme_Object *val;
Scheme_Hash_Table *ht; Scheme_Hash_Table *ht;
@ -919,8 +921,10 @@ Scheme_Object *scheme_hash_module_variable(Scheme_Env *env, Scheme_Object *modid
mv->pos = pos; mv->pos = pos;
mv->mod_phase = (int)mod_phase; mv->mod_phase = (int)mod_phase;
if (is_constant) if (is_constant > 1)
SCHEME_MODVAR_FLAGS(mv) |= 0x1; SCHEME_MODVAR_FLAGS(mv) |= SCHEME_MODVAR_CONST;
else if (is_constant)
SCHEME_MODVAR_FLAGS(mv) |= SCHEME_MODVAR_FIXED;
val = (Scheme_Object *)mv; val = (Scheme_Object *)mv;
@ -1636,7 +1640,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
Scheme_Object **_lexical_binding_id) Scheme_Object **_lexical_binding_id)
{ {
Scheme_Comp_Env *frame; Scheme_Comp_Env *frame;
int j = 0, p = 0, modpos, skip_stops = 0, module_self_reference = 0; int j = 0, p = 0, modpos, skip_stops = 0, module_self_reference = 0, is_constant;
Scheme_Bucket *b; Scheme_Bucket *b;
Scheme_Object *val, *modidx, *modname, *src_find_id, *find_global_id, *mod_defn_phase; Scheme_Object *val, *modidx, *modname, *src_find_id, *find_global_id, *mod_defn_phase;
Scheme_Object *find_id_sym = NULL, *rename_insp = NULL, *mod_constant = NULL; Scheme_Object *find_id_sym = NULL, *rename_insp = NULL, *mod_constant = NULL;
@ -1932,10 +1936,18 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
check_taint(src_find_id); check_taint(src_find_id);
if ((flags & SCHEME_ELIM_CONST) if (mod_constant) {
&& mod_constant if (SAME_OBJ(mod_constant, scheme_constant_key))
&& !SAME_OBJ(mod_constant, scheme_void_proc)) is_constant = 2;
return mod_constant; else if (SAME_OBJ(mod_constant, scheme_fixed_key))
is_constant = 1;
else {
if (flags & SCHEME_ELIM_CONST)
return mod_constant;
is_constant = 2;
}
} else
is_constant = 0;
/* Used to have `&& !SAME_OBJ(modidx, modname)' below, but that was a bad /* Used to have `&& !SAME_OBJ(modidx, modname)' below, but that was a bad
idea, because it causes module instances to be preserved. */ idea, because it causes module instances to be preserved. */
@ -1949,7 +1961,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
return scheme_hash_module_variable(env->genv, modidx, find_id, return scheme_hash_module_variable(env->genv, modidx, find_id,
(rename_insp ? rename_insp : genv->module->insp), (rename_insp ? rename_insp : genv->module->insp),
modpos, SCHEME_INT_VAL(mod_defn_phase), modpos, SCHEME_INT_VAL(mod_defn_phase),
!!mod_constant); is_constant);
} }
if (!modname if (!modname
@ -1960,7 +1972,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags,
return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id, return scheme_hash_module_variable(env->genv, genv->module->self_modidx, find_global_id,
genv->module->insp, genv->module->insp,
modpos, genv->mod_phase, modpos, genv->mod_phase,
!!mod_constant); is_constant);
} }
b = scheme_bucket_from_table(genv->toplevel, (char *)find_global_id); b = scheme_bucket_from_table(genv->toplevel, (char *)find_global_id);

View File

@ -1,5 +1,5 @@
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,13,0,22, 0,0,0,0,0,0,0,0,0,51,0,0,0,1,0,0,10,0,13,0,22,
0,26,0,31,0,38,0,51,0,58,0,63,0,68,0,72,0,79,0,82,0, 0,26,0,31,0,38,0,51,0,58,0,63,0,68,0,72,0,79,0,82,0,
85,0,91,0,105,0,119,0,122,0,128,0,132,0,134,0,145,0,147,0,161, 85,0,91,0,105,0,119,0,122,0,128,0,132,0,134,0,145,0,147,0,161,
@ -15,13 +15,13 @@
116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116, 116,120,61,115,70,108,101,116,45,118,97,108,117,101,115,61,120,73,108,101,116,
114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97, 114,101,99,45,118,97,108,117,101,115,66,108,97,109,98,100,97,1,20,112,97,
114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73, 114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,61,118,73,
100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,124,75,0, 100,101,102,105,110,101,45,118,97,108,117,101,115,97,36,11,8,240,72,76,0,
0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4, 0,95,159,2,17,36,36,159,2,16,36,36,159,2,16,36,36,16,20,2,4,
2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2, 2,2,2,6,2,2,2,7,2,2,2,8,2,2,2,9,2,2,2,10,2,
2,2,11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8, 2,2,11,2,2,2,5,2,2,2,12,2,2,2,13,2,2,97,37,11,8,
240,124,75,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3, 240,72,76,0,0,93,159,2,16,36,37,16,2,2,3,161,2,2,37,2,3,
2,2,2,3,96,38,11,8,240,124,75,0,0,16,0,96,11,11,8,240,124, 2,2,2,3,96,38,11,8,240,72,76,0,0,16,0,96,11,11,8,240,72,
75,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11, 76,0,0,16,0,18,98,64,104,101,114,101,13,16,5,36,2,14,2,2,11,
11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158, 11,8,32,8,31,8,30,8,29,27,248,22,155,4,195,249,22,148,4,80,158,
39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201, 39,36,251,22,83,2,18,248,22,98,199,12,249,22,73,2,19,248,22,100,201,
27,248,22,155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22, 27,248,22,155,4,195,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,
@ -30,14 +30,14 @@
74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22, 74,193,249,22,148,4,80,158,39,36,251,22,83,2,18,248,22,74,199,249,22,
73,2,11,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11, 73,2,11,248,22,75,201,11,18,100,10,13,16,5,36,2,14,2,2,11,11,
8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49, 8,32,8,31,8,30,8,29,16,4,11,11,2,20,3,1,8,101,110,118,49,
52,53,53,50,16,4,11,11,2,21,3,1,8,101,110,118,49,52,53,53,51, 52,55,51,57,16,4,11,11,2,21,3,1,8,101,110,118,49,52,55,52,48,
27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28, 27,248,22,75,248,22,155,4,196,28,248,22,81,193,20,14,159,37,36,37,28,
248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22, 248,22,81,248,22,75,194,248,22,74,193,249,22,148,4,80,158,39,36,250,22,
83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83, 83,2,22,248,22,83,249,22,83,248,22,83,2,23,248,22,74,201,251,22,83,
2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5, 2,18,2,23,2,23,249,22,73,2,13,248,22,75,204,18,100,11,13,16,5,
36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20, 36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,20,
3,1,8,101,110,118,49,52,53,53,53,16,4,11,11,2,21,3,1,8,101, 3,1,8,101,110,118,49,52,55,52,50,16,4,11,11,2,21,3,1,8,101,
110,118,49,52,53,53,54,248,22,155,4,193,27,248,22,155,4,194,249,22,73, 110,118,49,52,55,52,51,248,22,155,4,193,27,248,22,155,4,194,249,22,73,
248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197, 248,22,83,248,22,74,196,248,22,75,195,27,248,22,75,248,22,155,4,23,197,
1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23, 1,249,22,148,4,80,158,39,36,28,248,22,58,248,22,149,4,248,22,74,23,
198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22, 198,2,27,249,22,2,32,0,88,163,8,36,37,43,11,9,222,33,40,248,22,
@ -67,8 +67,8 @@
140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250, 140,9,248,22,149,4,248,22,74,200,64,101,108,115,101,10,248,22,74,197,250,
22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16, 22,84,2,22,9,248,22,75,200,249,22,73,2,5,248,22,75,202,99,13,16,
5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2, 5,36,2,14,2,2,11,11,8,32,8,31,8,30,8,29,16,4,11,11,2,
20,3,1,8,101,110,118,49,52,53,55,56,16,4,11,11,2,21,3,1,8, 20,3,1,8,101,110,118,49,52,55,54,53,16,4,11,11,2,21,3,1,8,
101,110,118,49,52,53,55,57,18,158,94,10,64,118,111,105,100,8,48,27,248, 101,110,118,49,52,55,54,54,18,158,94,10,64,118,111,105,100,8,48,27,248,
22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22, 22,75,248,22,155,4,196,249,22,148,4,80,158,39,36,28,248,22,58,248,22,
149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98, 149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,199,248,22,98,
198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74, 198,27,248,22,149,4,248,22,74,197,250,22,83,2,28,248,22,83,248,22,74,
@ -98,16 +98,16 @@
EVAL_ONE_SIZED_STR((char *)expr, 2004); EVAL_ONE_SIZED_STR((char *)expr, 2004);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,82,0,0,0,1,0,0,8,0,21,0,26, 0,0,0,0,0,0,0,0,0,82,0,0,0,1,0,0,8,0,21,0,26,
0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200,0, 0,43,0,58,0,76,0,92,0,106,0,128,0,146,0,166,0,182,0,200,0,
231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1,143, 231,0,4,1,26,1,40,1,46,1,60,1,65,1,75,1,83,1,111,1,143,
1,188,1,194,1,201,1,207,1,252,1,20,2,59,2,73,2,76,2,79,2, 1,188,1,194,1,201,1,207,1,252,1,20,2,59,2,73,2,76,2,79,2,
89,2,100,2,113,2,115,2,117,2,27,3,117,4,231,4,89,5,130,5,203, 89,2,100,2,113,2,115,2,117,2,27,3,117,4,231,4,89,5,130,5,203,
6,33,7,119,7,219,7,47,8,61,8,194,8,168,9,252,9,10,10,31,11, 6,33,7,119,7,219,7,47,8,61,8,194,8,168,9,252,9,10,10,31,11,
235,11,249,11,141,16,156,17,45,18,30,19,12,20,19,20,98,20,179,20,6, 235,11,249,11,141,16,156,17,45,18,30,19,12,20,19,20,98,20,179,20,122,
21,21,21,31,21,164,25,161,30,184,30,201,30,149,32,252,32,10,33,170,33, 21,136,21,146,21,187,22,33,23,56,23,73,23,21,25,124,25,138,25,42,26,
107,35,116,35,125,35,151,35,23,36,0,0,131,39,0,0,67,35,37,117,116, 235,27,244,27,253,27,23,28,151,28,0,0,2,32,0,0,67,35,37,117,116,
105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115, 105,108,115,72,112,97,116,104,45,115,116,114,105,110,103,63,64,98,115,98,115,
76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104, 76,110,111,114,109,97,108,45,99,97,115,101,45,112,97,116,104,74,45,99,104,
101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111, 101,99,107,45,114,101,108,112,97,116,104,77,45,99,104,101,99,107,45,99,111,
@ -138,14 +138,14 @@
11,11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97, 11,11,80,76,84,67,79,76,76,69,67,84,83,6,0,0,6,0,0,69,97,
100,100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,72,99, 100,100,111,110,45,100,105,114,6,8,8,99,111,108,108,101,99,116,115,72,99,
111,108,108,101,99,116,115,45,100,105,114,5,0,5,0,27,20,13,159,80,159, 111,108,108,101,99,116,115,45,100,105,114,5,0,5,0,27,20,13,159,80,159,
37,52,38,250,80,159,40,53,38,249,22,27,11,80,159,42,52,38,22,186,13, 37,52,37,250,80,159,40,53,37,249,22,27,11,80,159,42,52,37,22,186,13,
10,248,22,190,5,23,196,2,28,248,22,189,6,23,194,2,12,86,94,248,22, 10,248,22,190,5,23,196,2,28,248,22,189,6,23,194,2,12,86,94,248,22,
148,9,23,194,1,27,20,13,159,80,159,38,52,38,250,80,159,41,53,38,249, 148,9,23,194,1,27,20,13,159,80,159,38,52,37,250,80,159,41,53,37,249,
22,27,11,80,159,43,52,38,22,186,13,10,248,22,190,5,23,197,2,28,248, 22,27,11,80,159,43,52,37,22,186,13,10,248,22,190,5,23,197,2,28,248,
22,189,6,23,194,2,12,86,94,248,22,148,9,23,194,1,27,20,13,159,80, 22,189,6,23,194,2,12,86,94,248,22,148,9,23,194,1,27,20,13,159,80,
159,39,52,38,250,80,159,42,53,38,249,22,27,11,80,159,44,52,38,22,186, 159,39,52,37,250,80,159,42,53,37,249,22,27,11,80,159,44,52,37,22,186,
13,10,248,22,190,5,23,198,2,28,248,22,189,6,23,194,2,12,86,94,248, 13,10,248,22,190,5,23,198,2,28,248,22,189,6,23,194,2,12,86,94,248,
22,148,9,23,194,1,248,80,159,40,57,37,197,28,248,22,81,23,195,2,9, 22,148,9,23,194,1,248,80,159,40,57,39,197,28,248,22,81,23,195,2,9,
27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248, 27,248,22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,
22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188, 22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188,
14,2,21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28, 14,2,21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28,
@ -154,25 +154,25 @@
2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2, 2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,
249,22,173,14,23,196,1,250,80,158,48,50,248,22,188,14,2,21,11,10,250, 249,22,173,14,23,196,1,250,80,158,48,50,248,22,188,14,2,21,11,10,250,
80,158,46,50,248,22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73, 80,158,46,50,248,22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73,
248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,46,56,37, 248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,46,56,39,
248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,56,37,248,22,75,23, 248,22,75,23,199,1,86,94,23,193,1,248,80,159,44,56,39,248,22,75,23,
197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2, 197,1,86,94,23,193,1,27,248,22,75,23,198,1,28,248,22,81,23,194,2,
9,27,248,22,74,23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28, 9,27,248,22,74,23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,
248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,46,50,248,22, 248,22,171,14,23,195,2,249,22,173,14,23,196,1,250,80,158,46,50,248,22,
188,14,2,21,11,10,250,80,158,44,50,248,22,188,14,2,21,23,197,1,10, 188,14,2,21,11,10,250,80,158,44,50,248,22,188,14,2,21,23,197,1,10,
28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189, 28,23,193,2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,
14,248,80,159,44,56,37,248,22,75,23,199,1,248,80,159,42,56,37,248,22, 14,248,80,159,44,56,39,248,22,75,23,199,1,248,80,159,42,56,39,248,22,
75,196,28,248,22,81,23,195,2,9,27,248,22,74,23,196,2,27,28,248,22, 75,196,28,248,22,81,23,195,2,9,27,248,22,74,23,196,2,27,28,248,22,
172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,249,22,173,14,23, 172,14,23,195,2,23,194,1,28,248,22,171,14,23,195,2,249,22,173,14,23,
196,1,250,80,158,43,50,248,22,188,14,2,21,11,10,250,80,158,41,50,248, 196,1,250,80,158,43,50,248,22,188,14,2,21,11,10,250,80,158,41,50,248,
22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249, 22,188,14,2,21,23,197,1,10,28,23,193,2,249,22,73,248,22,175,14,249,
22,173,14,23,198,1,247,22,189,14,248,80,159,41,55,37,248,22,75,23,200, 22,173,14,23,198,1,247,22,189,14,248,80,159,41,55,39,248,22,75,23,200,
1,248,80,159,39,55,37,248,22,75,197,28,248,22,81,23,195,2,9,27,248, 1,248,80,159,39,55,39,248,22,75,197,28,248,22,81,23,195,2,9,27,248,
22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171, 22,74,23,196,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,
14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188,14,2, 14,23,195,2,249,22,173,14,23,196,1,250,80,158,43,50,248,22,188,14,2,
21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28,23,193, 21,11,10,250,80,158,41,50,248,22,188,14,2,21,23,197,1,10,28,23,193,
2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80, 2,249,22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,
159,41,54,37,248,22,75,23,200,1,248,80,159,39,54,37,248,22,75,197,27, 159,41,54,39,248,22,75,23,200,1,248,80,159,39,54,39,248,22,75,197,27,
248,22,148,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,130, 248,22,148,14,23,195,2,28,23,193,2,192,86,94,23,193,1,28,248,22,130,
7,23,195,2,27,248,22,170,14,195,28,192,192,248,22,171,14,195,11,86,94, 7,23,195,2,27,248,22,170,14,195,28,192,192,248,22,171,14,195,11,86,94,
28,28,248,22,149,14,23,195,2,10,28,248,22,148,14,23,195,2,10,28,248, 28,28,248,22,149,14,23,195,2,10,28,248,22,148,14,23,195,2,10,28,248,
@ -355,245 +355,153 @@
195,194,192,249,247,22,158,5,194,11,27,247,22,128,15,249,80,158,39,49,28, 195,194,192,249,247,22,158,5,194,11,27,247,22,128,15,249,80,158,39,49,28,
23,195,2,27,248,22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196, 23,195,2,27,248,22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196,
1,250,22,166,14,248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80, 1,250,22,166,14,248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,
159,42,54,37,250,22,87,9,248,22,83,248,22,188,14,2,37,9,28,193,249, 159,42,54,39,250,22,87,9,248,22,83,248,22,188,14,2,37,9,28,193,249,
22,73,195,194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248, 22,73,195,194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248,
22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14, 22,150,8,2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14,
248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,55,37,250, 248,22,188,14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,55,39,250,
22,87,23,203,1,248,22,83,248,22,188,14,2,37,9,28,193,249,22,73,195, 22,87,23,203,1,248,22,83,248,22,188,14,2,37,9,28,193,249,22,73,195,
194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248,22,150,8, 194,192,27,247,22,128,15,249,80,158,39,49,28,23,195,2,27,248,22,150,8,
2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14,248,22,188, 2,32,28,192,192,2,33,2,34,27,28,23,196,1,250,22,166,14,248,22,188,
14,2,35,247,22,148,8,2,36,11,27,248,80,159,42,56,37,250,22,87,23, 14,2,35,247,22,148,8,2,36,11,27,27,250,22,87,23,203,1,248,22,83,
203,1,248,22,83,248,22,188,14,2,37,23,204,1,28,193,249,22,73,195,194, 248,22,188,14,2,37,23,204,1,28,248,22,81,23,194,2,9,27,248,22,74,
192,32,67,88,163,8,36,39,8,45,11,2,20,222,33,69,0,8,35,114,120, 23,195,2,27,28,248,22,172,14,23,195,2,23,194,1,28,248,22,171,14,23,
35,34,92,34,34,27,249,22,135,15,23,197,2,23,198,2,28,23,193,2,86, 195,2,249,22,173,14,23,196,1,250,80,158,49,50,248,22,188,14,2,21,11,
94,23,196,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, 10,250,80,158,47,50,248,22,188,14,2,21,23,197,1,10,28,23,193,2,249,
22,135,15,23,201,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22, 22,73,248,22,175,14,249,22,173,14,23,198,1,247,22,189,14,248,80,159,47,
98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,205,2,23, 56,39,248,22,75,23,199,1,86,94,23,193,1,248,80,159,45,56,39,248,22,
196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248, 75,23,197,1,28,193,249,22,73,195,194,192,32,67,88,163,8,36,39,57,11,
22,107,23,197,1,27,249,22,135,15,23,209,2,23,196,2,28,23,193,2,86, 2,20,222,33,69,0,8,35,114,120,35,34,92,34,34,27,249,22,135,15,23,
94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, 197,2,23,198,2,28,23,193,2,86,94,23,196,1,27,248,22,98,23,195,2,
22,135,15,23,213,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22, 27,27,248,22,107,23,197,1,27,249,22,135,15,23,201,2,23,196,2,28,23,
98,23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,217,2,23, 193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,250,2,67,23,203,2,
196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248, 23,204,1,248,22,107,23,199,1,28,249,22,191,7,23,196,2,2,38,249,22,
22,107,23,197,1,27,249,22,135,15,23,221,2,23,196,2,28,23,193,2,86, 87,23,202,2,194,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,
94,23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249, 2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,194,86,95,23,199,
22,135,15,23,224,33,0,0,0,2,23,196,2,28,23,193,2,86,94,23,194, 1,23,193,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,200,2,9,
1,27,248,22,98,23,195,2,27,250,2,67,23,224,35,0,0,0,2,23,224,
36,0,0,0,1,248,22,107,23,199,1,28,249,22,191,7,23,196,2,2,38,
249,22,87,23,224,34,0,0,0,2,194,249,22,73,248,22,157,14,28,249,22,
140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,
1,194,86,95,23,223,1,23,193,1,28,249,22,191,7,23,196,2,2,38,249,
22,87,23,224,32,0,0,0,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,222,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,220,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,218,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,216,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,214,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,212,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,210,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,208,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,206,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,204,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,23,202,2,194,249,22,73,
248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,
23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,
2,2,38,249,22,87,23,200,2,9,249,22,73,248,22,157,14,28,249,22,140,
9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,
9,28,249,22,191,7,23,196,2,2,38,249,22,87,197,194,86,94,23,196,1,
249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147, 249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,
15,2,68,23,200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191, 15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,191,7,23,196,2,2,
7,23,198,2,2,38,249,22,87,195,9,86,94,23,194,1,249,22,73,248,22, 38,249,22,87,197,194,86,94,23,196,1,249,22,73,248,22,157,14,28,249,22,
157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,202, 140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,
1,2,39,23,199,1,9,86,95,28,28,248,22,183,7,23,195,2,10,248,22, 1,194,86,94,23,193,1,28,249,22,191,7,23,198,2,2,38,249,22,87,195,
130,7,23,195,2,12,250,22,176,9,2,15,6,21,21,98,121,116,101,32,115, 9,86,94,23,194,1,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,
116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,23,197,2,28,28,248, 8,2,22,250,22,147,15,2,68,23,202,1,2,39,23,199,1,9,86,95,28,
22,82,23,196,2,249,22,4,22,148,14,23,197,2,11,12,250,22,176,9,2, 28,248,22,183,7,194,10,248,22,130,7,194,12,250,22,176,9,2,15,6,21,
15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,23,198,2,27, 21,98,121,116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110,
28,248,22,130,7,23,196,2,248,22,144,8,23,196,1,23,195,1,27,249,22, 103,196,28,28,248,22,82,195,249,22,4,22,148,14,196,11,12,250,22,176,9,
135,15,23,197,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 2,15,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,197,250,2,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,201,2,23,196, 67,197,195,28,248,22,130,7,197,248,22,144,8,197,196,32,71,88,163,8,36,
2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, 39,53,11,70,102,111,117,110,100,45,101,120,101,99,222,33,74,32,72,88,163,
107,23,197,1,27,249,22,135,15,23,205,2,23,196,2,28,23,193,2,86,94, 8,36,40,58,11,64,110,101,120,116,222,33,73,27,248,22,174,14,23,196,2,
23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22, 28,249,22,142,9,23,195,2,23,197,1,11,28,248,22,170,14,23,194,2,27,
135,15,23,209,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 249,22,166,14,23,197,1,23,196,1,28,23,197,2,90,159,39,11,89,161,39,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,213,2,23,196, 36,11,248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,28,23,202,
2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2,27,27,248,22, 2,27,248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,200,2,11,
107,23,197,1,27,249,22,135,15,23,217,2,23,196,2,28,23,193,2,86,94, 28,248,22,170,14,23,194,2,250,2,71,23,205,2,23,206,2,249,22,166,14,
23,194,1,27,248,22,98,23,195,2,27,27,248,22,107,23,197,1,27,249,22, 23,200,2,23,198,1,250,2,71,23,205,2,23,206,2,23,196,1,11,28,23,
135,15,23,221,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98, 193,2,192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,249,22,166,
23,195,2,27,27,248,22,107,23,197,1,27,249,22,135,15,23,224,33,0,0, 14,23,198,2,23,205,2,28,28,248,22,161,14,193,10,248,22,160,14,193,192,
0,2,23,196,2,28,23,193,2,86,94,23,194,1,27,248,22,98,23,195,2, 11,11,28,23,193,2,192,86,94,23,193,1,28,23,203,2,11,27,248,22,174,
27,250,2,67,23,224,38,0,0,0,2,23,224,36,0,0,0,1,248,22,107, 14,23,200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,22,170,14,
23,199,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,224,37,0,0, 23,194,2,250,2,71,23,206,1,23,207,1,249,22,166,14,23,201,1,23,198,
0,2,194,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22, 1,250,2,71,205,206,195,192,86,94,23,194,1,28,23,196,2,90,159,39,11,
250,22,147,15,2,68,23,200,1,2,39,23,197,1,194,86,95,23,223,1,23, 89,161,39,36,11,248,22,169,14,23,197,2,86,95,23,195,1,23,194,1,27,
193,1,28,249,22,191,7,23,196,2,2,38,249,22,87,23,224,35,0,0,0, 28,23,201,2,27,248,22,174,14,23,199,2,28,249,22,142,9,23,195,2,23,
2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152,8,2,22,250, 200,2,11,28,248,22,170,14,23,194,2,250,2,71,23,204,2,23,205,2,249,
22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22,191,7,23,196, 22,166,14,23,200,2,23,198,1,250,2,71,23,204,2,23,205,2,23,196,1,
2,2,38,249,22,87,23,224,33,0,0,0,2,194,249,22,73,248,22,157,14, 11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,148,14,23,196,2,27,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 249,22,166,14,23,198,2,23,204,2,28,28,248,22,161,14,193,10,248,22,160,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 14,193,192,11,11,28,23,193,2,192,86,94,23,193,1,28,23,202,2,11,27,
22,87,23,223,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 248,22,174,14,23,200,2,28,249,22,142,9,23,195,2,23,201,1,11,28,248,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 22,170,14,23,194,2,250,2,71,23,205,1,23,206,1,249,22,166,14,23,201,
191,7,23,196,2,2,38,249,22,87,23,221,2,194,249,22,73,248,22,157,14, 1,23,198,1,250,2,71,204,205,195,192,28,23,193,2,90,159,39,11,89,161,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 39,36,11,248,22,169,14,23,199,2,86,95,23,195,1,23,194,1,27,28,23,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 198,2,251,2,72,23,198,2,23,203,2,23,201,2,23,202,2,11,28,23,193,
22,87,23,219,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 2,192,86,94,23,193,1,27,28,248,22,148,14,195,27,249,22,166,14,197,200,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 28,28,248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,192,192,28,198,
191,7,23,196,2,2,38,249,22,87,23,217,2,194,249,22,73,248,22,157,14, 11,251,2,72,198,203,201,202,194,32,75,88,163,8,36,40,58,11,2,20,222,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 33,76,28,248,22,81,23,197,2,11,27,248,22,173,14,248,22,74,23,199,2,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 27,249,22,166,14,23,196,1,23,197,2,28,248,22,160,14,23,194,2,250,2,
22,87,23,215,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 71,198,199,195,86,94,23,193,1,27,248,22,75,23,200,1,28,248,22,81,23,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,
191,7,23,196,2,2,38,249,22,87,23,213,2,194,249,22,73,248,22,157,14, 1,23,200,2,28,248,22,160,14,23,194,2,250,2,71,201,202,195,86,94,23,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 14,248,22,74,195,27,249,22,166,14,23,196,1,202,28,248,22,160,14,193,250,
22,87,23,211,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 2,71,204,205,195,251,2,75,204,205,206,248,22,75,199,86,95,28,28,248,22,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 148,14,23,195,2,10,28,248,22,130,7,23,195,2,28,248,22,170,14,23,195,
191,7,23,196,2,2,38,249,22,87,23,209,2,194,249,22,73,248,22,157,14, 2,10,248,22,171,14,23,195,2,11,12,250,22,176,9,2,16,6,25,25,112,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 97,116,104,32,111,114,32,115,116,114,105,110,103,32,40,115,97,110,115,32,110,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 117,108,41,23,197,2,28,28,23,195,2,28,28,248,22,148,14,23,196,2,10,
22,87,23,207,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 28,248,22,130,7,23,196,2,28,248,22,170,14,23,196,2,10,248,22,171,14,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 23,196,2,11,248,22,170,14,23,196,2,11,10,12,250,22,176,9,2,16,6,
191,7,23,196,2,2,38,249,22,87,23,205,2,194,249,22,73,248,22,157,14, 29,29,35,102,32,111,114,32,114,101,108,97,116,105,118,101,32,112,97,116,104,
28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2, 32,111,114,32,115,116,114,105,110,103,23,198,2,28,28,248,22,170,14,23,195,
39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2,2,38,249, 2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,198,2,249,22,140,9,
22,87,23,203,2,9,249,22,73,248,22,157,14,28,249,22,140,9,247,22,152, 194,68,114,101,108,97,116,105,118,101,11,27,248,22,150,8,6,4,4,80,65,
8,2,22,250,22,147,15,2,68,23,200,1,2,39,23,197,1,9,28,249,22, 84,72,27,28,23,194,2,27,249,80,159,41,49,38,23,197,1,9,28,249,22,
191,7,23,196,2,2,38,249,22,87,200,194,86,94,23,199,1,249,22,73,248, 140,9,247,22,152,8,2,22,249,22,73,248,22,157,14,5,1,46,194,192,86,
22,157,14,28,249,22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23, 94,23,194,1,9,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,
200,1,2,39,23,197,1,194,86,94,23,193,1,28,249,22,191,7,23,196,2, 23,196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,194,
2,38,249,22,87,198,9,86,94,23,197,1,249,22,73,248,22,157,14,28,249, 2,250,2,71,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,
22,140,9,247,22,152,8,2,22,250,22,147,15,2,68,23,200,1,2,39,23, 22,81,23,194,2,11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,
197,1,9,32,71,88,163,8,36,39,53,11,70,102,111,117,110,100,45,101,120, 14,23,196,1,23,203,2,28,248,22,160,14,23,194,2,250,2,71,204,205,195,
101,99,222,33,74,32,72,88,163,8,36,40,58,11,64,110,101,120,116,222,33, 86,94,23,193,1,27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,
73,27,248,22,174,14,23,196,2,28,249,22,142,9,23,195,2,23,197,1,11, 248,22,173,14,248,22,74,195,27,249,22,166,14,23,196,1,205,28,248,22,160,
28,248,22,170,14,23,194,2,27,249,22,166,14,23,197,1,23,196,1,28,23, 14,193,250,2,71,23,15,23,16,195,251,2,75,23,15,23,16,23,17,248,22,
197,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2,86,95,23, 75,199,27,248,22,173,14,23,196,1,28,248,22,160,14,193,250,2,71,198,199,
195,1,23,194,1,27,28,23,202,2,27,248,22,174,14,23,199,2,28,249,22, 195,11,250,80,159,39,50,39,196,197,11,250,80,159,39,50,39,196,11,11,86,
142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250,2,71,23, 94,249,22,183,6,247,22,154,5,195,248,22,145,6,249,22,128,4,36,249,22,
205,2,23,206,2,249,22,166,14,23,200,2,23,198,1,250,2,71,23,205,2, 176,3,197,198,27,28,23,197,2,86,95,23,196,1,23,195,1,23,197,1,86,
23,206,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22, 94,23,197,1,27,248,22,188,14,2,21,27,250,80,159,42,50,39,23,197,1,
148,14,23,196,2,27,249,22,166,14,23,198,2,23,205,2,28,28,248,22,161, 11,11,27,248,22,131,4,23,199,1,27,28,23,194,2,23,194,1,86,94,23,
14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94,23,193,1, 194,1,36,27,248,22,131,4,23,202,1,27,28,23,194,2,23,194,1,86,94,
28,23,203,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9,23,195,2, 23,194,1,36,249,22,185,5,23,199,1,20,20,95,88,163,8,36,36,48,11,
23,201,1,11,28,248,22,170,14,23,194,2,250,2,71,23,206,1,23,207,1, 9,224,4,2,33,80,23,195,1,23,197,1,27,248,22,170,5,23,195,1,248,
249,22,166,14,23,201,1,23,198,1,250,2,71,205,206,195,192,86,94,23,194, 80,159,39,57,39,193,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,
1,28,23,196,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,197,2, 1,2,1,29,11,11,11,11,11,10,43,80,158,36,36,20,112,159,40,16,18,
86,95,23,195,1,23,194,1,27,28,23,201,2,27,248,22,174,14,23,199,2, 2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,
28,249,22,142,9,23,195,2,23,200,2,11,28,248,22,170,14,23,194,2,250, 12,2,13,2,14,2,15,2,16,2,17,30,2,19,1,20,112,97,114,97,109,
2,71,23,204,2,23,205,2,249,22,166,14,23,200,2,23,198,1,250,2,71, 101,116,101,114,105,122,97,116,105,111,110,45,107,101,121,5,30,2,19,1,23,
23,204,2,23,205,2,23,196,1,11,28,23,193,2,192,86,94,23,193,1,27, 101,120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,
28,248,22,148,14,23,196,2,27,249,22,166,14,23,198,2,23,204,2,28,28, 111,110,3,16,0,16,0,36,16,0,36,16,4,2,6,2,5,2,3,2,10,
248,22,161,14,193,10,248,22,160,14,193,192,11,11,28,23,193,2,192,86,94, 40,11,11,39,36,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,
23,193,1,28,23,202,2,11,27,248,22,174,14,23,200,2,28,249,22,142,9, 2,13,2,4,2,12,2,15,2,11,2,2,16,12,11,11,11,11,11,11,11,
23,195,2,23,201,1,11,28,248,22,170,14,23,194,2,250,2,71,23,205,1, 11,11,11,11,11,16,12,2,9,2,7,2,17,2,8,2,16,2,14,2,13,
23,206,1,249,22,166,14,23,201,1,23,198,1,250,2,71,204,205,195,192,28, 2,4,2,12,2,15,2,11,2,2,48,48,37,11,11,16,0,16,0,16,0,
23,193,2,90,159,39,11,89,161,39,36,11,248,22,169,14,23,199,2,86,95, 36,36,11,11,11,16,0,16,0,16,0,36,36,16,0,16,20,20,15,16,2,
23,195,1,23,194,1,27,28,23,198,2,251,2,72,23,198,2,23,203,2,23, 88,163,8,36,37,51,8,240,0,0,35,0,2,20,223,0,33,40,80,159,36,
201,2,23,202,2,11,28,23,193,2,192,86,94,23,193,1,27,28,248,22,148, 57,39,20,15,16,2,88,163,8,36,37,56,8,240,0,64,16,0,2,20,223,
14,195,27,249,22,166,14,197,200,28,28,248,22,161,14,193,10,248,22,160,14, 0,33,41,80,159,36,56,39,20,15,16,2,88,163,8,36,37,51,8,240,0,
193,192,11,11,28,192,192,28,198,11,251,2,72,198,203,201,202,194,32,75,88, 64,8,0,2,20,223,0,33,42,80,159,36,55,39,20,15,16,2,88,163,8,
163,8,36,40,58,11,2,20,222,33,76,28,248,22,81,23,197,2,11,27,248, 36,37,51,8,240,0,64,4,0,2,20,223,0,33,43,80,159,36,54,39,20,
22,173,14,248,22,74,23,199,2,27,249,22,166,14,23,196,1,23,197,2,28, 15,16,2,32,0,88,163,36,37,45,11,2,2,222,33,44,80,159,36,36,37,
248,22,160,14,23,194,2,250,2,71,198,199,195,86,94,23,193,1,27,248,22, 20,15,16,2,249,22,132,7,7,92,7,92,80,159,36,37,37,20,15,16,2,
75,23,200,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,23, 88,163,36,37,54,38,2,4,223,0,33,45,80,159,36,38,37,20,15,16,2,
196,2,27,249,22,166,14,23,196,1,23,200,2,28,248,22,160,14,23,194,2, 32,0,88,163,8,36,38,50,11,2,5,222,33,46,80,159,36,39,37,20,15,
250,2,71,201,202,195,86,94,23,193,1,27,248,22,75,23,197,1,28,248,22, 16,2,32,0,88,163,8,36,39,51,11,2,6,222,33,48,80,159,36,40,37,
81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,22,166,14,23,196, 20,15,16,2,32,0,88,163,8,45,38,54,11,2,7,222,33,52,80,159,36,
1,202,28,248,22,160,14,193,250,2,71,204,205,195,251,2,75,204,205,206,248, 41,37,20,15,16,2,32,0,88,163,45,39,53,11,2,9,222,33,56,80,159,
22,75,199,86,95,28,28,248,22,148,14,23,195,2,10,28,248,22,130,7,23, 36,43,37,20,15,16,2,32,0,88,163,36,41,59,11,2,8,222,33,59,80,
195,2,28,248,22,170,14,23,195,2,10,248,22,171,14,23,195,2,11,12,250, 159,36,42,37,20,15,16,2,32,0,88,163,36,39,50,11,2,10,222,33,60,
22,176,9,2,16,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110, 80,159,36,44,37,20,15,16,2,32,0,88,163,36,38,53,11,2,11,222,33,
103,32,40,115,97,110,115,32,110,117,108,41,23,197,2,28,28,23,195,2,28, 61,80,159,36,45,37,20,15,16,2,32,0,88,163,36,38,54,11,2,12,222,
28,248,22,148,14,23,196,2,10,28,248,22,130,7,23,196,2,28,248,22,170, 33,62,80,159,36,46,37,20,15,16,2,32,0,88,163,36,37,44,11,2,13,
14,23,196,2,10,248,22,171,14,23,196,2,11,248,22,170,14,23,196,2,11, 222,33,63,80,159,36,47,37,20,15,16,2,20,25,96,2,14,88,163,36,36,
10,12,250,22,176,9,2,16,6,29,29,35,102,32,111,114,32,114,101,108,97, 53,8,240,0,32,4,0,9,223,0,33,64,88,163,36,37,54,8,240,0,32,
116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,23,198, 8,0,9,223,0,33,65,88,163,36,38,58,8,240,0,96,16,0,9,223,0,
2,28,28,248,22,170,14,23,195,2,90,159,39,11,89,161,39,36,11,248,22, 33,66,80,159,36,48,37,20,15,16,2,27,248,22,131,15,248,22,144,8,27,
169,14,23,198,2,249,22,140,9,194,68,114,101,108,97,116,105,118,101,11,27, 28,249,22,140,9,247,22,152,8,2,22,6,1,1,59,6,1,1,58,250,22,
248,22,150,8,6,4,4,80,65,84,72,27,28,23,194,2,27,249,80,159,41, 178,7,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,23,196,
49,38,23,197,1,9,28,249,22,140,9,247,22,152,8,2,22,249,22,73,248, 2,23,196,1,88,163,8,36,38,48,11,2,15,223,0,33,70,80,159,36,49,
22,157,14,5,1,46,194,192,86,94,23,194,1,9,28,248,22,81,23,194,2, 37,20,15,16,2,20,25,96,2,16,88,163,8,36,39,8,24,8,128,128,9,
11,27,248,22,173,14,248,22,74,23,196,2,27,249,22,166,14,23,196,1,23, 223,0,33,77,88,163,8,36,38,47,8,240,0,64,0,0,9,223,0,33,78,
200,2,28,248,22,160,14,23,194,2,250,2,71,201,202,195,86,94,23,193,1, 88,163,8,36,37,46,8,240,0,64,0,0,9,223,0,33,79,80,159,36,50,
27,248,22,75,23,197,1,28,248,22,81,23,194,2,11,27,248,22,173,14,248, 37,20,15,16,2,88,163,8,36,39,54,8,240,0,64,32,0,2,17,223,0,
22,74,23,196,2,27,249,22,166,14,23,196,1,23,203,2,28,248,22,160,14, 33,81,80,159,36,51,37,94,29,94,2,18,68,35,37,107,101,114,110,101,108,
23,194,2,250,2,71,204,205,195,86,94,23,193,1,27,248,22,75,23,197,1, 11,29,94,2,18,69,35,37,109,105,110,45,115,116,120,11,9,9,9,36,0};
28,248,22,81,23,194,2,11,27,248,22,173,14,248,22,74,195,27,249,22,166, EVAL_ONE_SIZED_STR((char *)expr, 8399);
14,23,196,1,205,28,248,22,160,14,193,250,2,71,23,15,23,16,195,251,2,
75,23,15,23,16,23,17,248,22,75,199,27,248,22,173,14,23,196,1,28,248,
22,160,14,193,250,2,71,198,199,195,11,250,80,159,39,50,37,196,197,11,250,
80,159,39,50,37,196,11,11,86,94,249,22,183,6,247,22,154,5,195,248,22,
145,6,249,22,128,4,36,249,22,176,3,197,198,27,28,23,197,2,86,95,23,
196,1,23,195,1,23,197,1,86,94,23,197,1,27,248,22,188,14,2,21,27,
250,80,159,42,50,37,23,197,1,11,11,27,248,22,131,4,23,199,1,27,28,
23,194,2,23,194,1,86,94,23,194,1,36,27,248,22,131,4,23,202,1,27,
28,23,194,2,23,194,1,86,94,23,194,1,36,249,22,185,5,23,199,1,20,
20,95,88,163,8,36,36,48,11,9,224,4,2,33,80,23,195,1,23,197,1,
27,248,22,170,5,23,195,1,248,80,159,39,57,37,193,159,36,20,112,159,36,
16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,11,11,11,10,43,80,
158,36,36,20,112,159,40,16,18,2,2,2,3,2,4,2,5,2,6,2,7,
2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,30,
2,19,1,20,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,45,
107,101,121,5,30,2,19,1,23,101,120,116,101,110,100,45,112,97,114,97,109,
101,116,101,114,105,122,97,116,105,111,110,3,16,0,16,0,36,16,0,36,16,
4,2,6,2,5,2,3,2,10,40,11,11,39,36,11,11,16,12,2,9,2,
7,2,17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2,2,
16,12,11,11,11,11,11,11,11,11,11,11,11,11,16,12,2,9,2,7,2,
17,2,8,2,16,2,14,2,13,2,4,2,12,2,15,2,11,2,2,48,48,
37,11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,0,36,
36,16,0,16,20,20,15,16,2,88,163,8,36,37,51,8,240,0,0,35,0,
2,20,223,0,33,40,80,159,36,57,37,20,15,16,2,88,163,8,36,37,56,
8,240,0,64,16,0,2,20,223,0,33,41,80,159,36,56,37,20,15,16,2,
88,163,8,36,37,51,8,240,0,64,8,0,2,20,223,0,33,42,80,159,36,
55,37,20,15,16,2,88,163,8,36,37,51,8,240,0,64,4,0,2,20,223,
0,33,43,80,159,36,54,37,20,15,16,2,32,0,88,163,36,37,45,11,2,
2,222,33,44,80,159,36,36,37,20,15,16,2,249,22,132,7,7,92,7,92,
80,159,36,37,37,20,15,16,2,88,163,36,37,54,38,2,4,223,0,33,45,
80,159,36,38,37,20,15,16,2,32,0,88,163,8,36,38,50,11,2,5,222,
33,46,80,159,36,39,37,20,15,16,2,32,0,88,163,8,36,39,51,11,2,
6,222,33,48,80,159,36,40,37,20,15,16,2,32,0,88,163,8,45,38,54,
11,2,7,222,33,52,80,159,36,41,37,20,15,16,2,32,0,88,163,45,39,
53,11,2,9,222,33,56,80,159,36,43,37,20,15,16,2,32,0,88,163,36,
41,59,11,2,8,222,33,59,80,159,36,42,37,20,15,16,2,32,0,88,163,
36,39,50,11,2,10,222,33,60,80,159,36,44,37,20,15,16,2,32,0,88,
163,36,38,53,11,2,11,222,33,61,80,159,36,45,37,20,15,16,2,32,0,
88,163,36,38,54,11,2,12,222,33,62,80,159,36,46,37,20,15,16,2,32,
0,88,163,36,37,44,11,2,13,222,33,63,80,159,36,47,37,20,15,16,2,
20,25,96,2,14,88,163,36,36,53,8,240,0,32,4,0,9,223,0,33,64,
88,163,36,37,54,8,240,0,32,8,0,9,223,0,33,65,88,163,36,38,55,
8,240,0,32,16,0,9,223,0,33,66,80,159,36,48,37,20,15,16,2,27,
248,22,131,15,248,22,144,8,27,28,249,22,140,9,247,22,152,8,2,22,6,
1,1,59,6,1,1,58,250,22,178,7,6,14,14,40,91,94,126,97,93,42,
41,126,97,40,46,42,41,23,196,2,23,196,1,88,163,8,36,38,8,46,11,
2,15,223,0,33,70,80,159,36,49,37,20,15,16,2,20,25,96,2,16,88,
163,8,36,39,8,24,8,128,128,9,223,0,33,77,88,163,8,36,38,47,8,
240,0,64,0,0,9,223,0,33,78,88,163,8,36,37,46,8,240,0,64,0,
0,9,223,0,33,79,80,159,36,50,37,20,15,16,2,88,163,8,36,39,54,
8,240,0,64,32,0,2,17,223,0,33,81,80,159,36,51,37,94,29,94,2,
18,68,35,37,107,101,114,110,101,108,11,29,94,2,18,69,35,37,109,105,110,
45,115,116,120,11,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 10320);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,57, 0,0,0,0,0,0,0,0,0,12,0,0,0,1,0,0,15,0,40,0,57,
0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,178,1, 0,75,0,97,0,120,0,140,0,162,0,169,0,176,0,183,0,0,0,178,1,
0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116, 0,0,74,35,37,112,108,97,99,101,45,115,116,114,117,99,116,1,23,115,116,
@ -620,15 +528,15 @@
EVAL_ONE_SIZED_STR((char *)expr, 499); EVAL_ONE_SIZED_STR((char *)expr, 499);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,65,0,0,0,1,0,0,7,0,18,0,45, 0,0,0,0,0,0,0,0,0,65,0,0,0,1,0,0,7,0,18,0,45,
0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0,185,0, 0,51,0,64,0,73,0,80,0,102,0,124,0,150,0,158,0,170,0,185,0,
201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89,1,94, 201,0,219,0,239,0,251,0,11,1,34,1,46,1,77,1,84,1,89,1,94,
1,99,1,104,1,109,1,118,1,123,1,127,1,135,1,144,1,152,1,213,1, 1,99,1,104,1,109,1,118,1,123,1,127,1,135,1,144,1,152,1,213,1,
60,2,81,2,102,2,132,2,162,2,220,2,22,3,71,3,120,3,54,9,105, 60,2,81,2,102,2,132,2,162,2,220,2,22,3,71,3,120,3,54,9,105,
9,168,9,187,9,201,9,103,10,117,10,47,12,141,14,8,15,14,15,28,15, 9,168,9,187,9,201,9,103,10,116,10,250,10,36,12,159,12,165,12,179,12,
55,15,75,15,135,15,222,15,224,15,37,16,121,22,174,22,198,22,0,0,34, 206,12,226,12,30,13,117,13,119,13,188,13,16,20,69,20,93,20,0,0,185,
26,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120, 23,0,0,66,35,37,98,111,111,116,70,100,108,108,45,115,117,102,102,105,120,
1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111, 1,25,100,101,102,97,117,108,116,45,108,111,97,100,47,117,115,101,45,99,111,
109,112,105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116, 109,112,105,108,101,100,65,113,117,111,116,101,29,94,2,4,67,35,37,117,116,
105,108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1, 105,108,115,11,68,35,37,112,97,114,97,109,122,29,94,2,4,2,6,11,1,
@ -647,30 +555,30 @@
29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109, 29,94,2,4,2,6,11,64,98,111,111,116,64,115,101,97,108,64,115,97,109,
101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64, 101,5,3,46,122,111,5,3,46,122,111,6,6,6,110,97,116,105,118,101,64,
108,111,111,112,63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80, 108,111,111,112,63,108,105,98,67,105,103,110,111,114,101,100,249,22,14,195,80,
159,38,49,38,249,80,159,38,52,37,195,10,90,159,39,11,89,161,39,36,11, 159,38,49,38,249,80,159,38,52,39,195,10,90,159,39,11,89,161,39,36,11,
248,22,169,14,197,86,95,23,195,1,23,193,1,28,249,22,135,15,0,11,35, 248,22,169,14,197,86,95,23,195,1,23,193,1,28,249,22,135,15,0,11,35,
114,120,34,91,46,93,115,115,36,34,248,22,153,14,23,197,1,249,80,159,41, 114,120,34,91,46,93,115,115,36,34,248,22,153,14,23,197,1,249,80,159,41,
56,38,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,140,9,23, 56,39,198,5,4,46,114,107,116,196,27,28,23,195,2,28,249,22,140,9,23,
197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27,248,22,137,5,23, 197,2,80,158,39,50,86,94,23,195,1,80,158,37,51,27,248,22,137,5,23,
197,2,28,248,22,148,14,23,194,2,90,159,39,11,89,161,39,36,11,248,22, 197,2,28,248,22,148,14,23,194,2,90,159,39,11,89,161,39,36,11,248,22,
169,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198,20,18,159,11,80, 169,14,23,197,1,86,95,20,18,159,11,80,158,41,50,198,20,18,159,11,80,
158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,159, 158,41,51,192,192,11,11,28,23,193,2,192,86,94,23,193,1,27,247,22,159,
5,28,192,192,247,22,189,14,250,22,166,14,23,197,1,23,199,1,249,80,159, 5,28,192,192,247,22,189,14,250,22,166,14,23,197,1,23,199,1,249,80,159,
43,39,38,23,198,1,2,26,250,22,166,14,23,197,1,23,199,1,249,80,159, 43,39,39,23,198,1,2,26,250,22,166,14,23,197,1,23,199,1,249,80,159,
43,39,38,23,198,1,2,27,252,22,166,14,23,199,1,23,201,1,2,28,247, 43,39,39,23,198,1,2,27,252,22,166,14,23,199,1,23,201,1,2,28,247,
22,153,8,249,80,159,45,39,38,23,200,1,80,159,45,36,38,252,22,166,14, 22,153,8,249,80,159,45,39,39,23,200,1,80,159,45,36,38,252,22,166,14,
23,199,1,23,201,1,2,28,247,22,153,8,249,80,159,45,39,38,23,200,1, 23,199,1,23,201,1,2,28,247,22,153,8,249,80,159,45,39,39,23,200,1,
80,159,45,36,38,27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153, 80,159,45,36,38,27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153,
8,249,80,159,46,39,38,23,201,1,80,159,46,36,38,27,250,22,183,14,196, 8,249,80,159,46,39,39,23,201,1,80,159,46,36,38,27,250,22,183,14,196,
11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11, 11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,
27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153,8,249,80,159,46, 27,252,22,166,14,23,200,1,23,202,1,2,28,247,22,153,8,249,80,159,46,
39,38,23,201,1,80,159,46,36,38,27,250,22,183,14,196,11,32,0,88,163, 39,39,23,201,1,80,159,46,36,38,27,250,22,183,14,196,11,32,0,88,163,
8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,166,14, 8,36,36,41,11,9,222,11,28,192,249,22,73,195,194,11,27,250,22,166,14,
23,198,1,23,200,1,249,80,159,44,39,38,23,199,1,2,26,27,250,22,183, 23,198,1,23,200,1,249,80,159,44,39,39,23,199,1,2,26,27,250,22,183,
14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195, 14,196,11,32,0,88,163,8,36,36,41,11,9,222,11,28,192,249,22,73,195,
194,11,27,250,22,166,14,23,198,1,23,200,1,249,80,159,44,39,38,23,199, 194,11,27,250,22,166,14,23,198,1,23,200,1,249,80,159,44,39,39,23,199,
1,2,27,27,250,22,183,14,196,11,32,0,88,163,8,36,36,41,11,9,222, 1,2,27,27,250,22,183,14,196,11,32,0,88,163,8,36,36,41,11,9,222,
11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,38,23,195,2, 11,28,192,249,22,73,195,194,11,86,94,28,248,80,159,37,38,39,23,195,2,
12,250,22,176,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108, 12,250,22,176,9,77,108,111,97,100,47,117,115,101,45,99,111,109,112,105,108,
101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97, 101,100,6,25,25,112,97,116,104,32,111,114,32,118,97,108,105,100,45,112,97,
116,104,32,115,116,114,105,110,103,23,197,2,90,159,46,11,89,161,37,36,11, 116,104,32,115,116,114,105,110,103,23,197,2,90,159,46,11,89,161,37,36,11,
@ -702,18 +610,18 @@
75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23, 75,196,248,22,75,23,205,2,193,11,11,11,11,86,94,23,197,1,11,28,23,
193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201, 193,2,86,105,23,213,1,23,211,1,23,210,1,23,209,1,23,208,1,23,201,
1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13, 1,23,200,1,23,199,1,23,198,1,23,196,1,23,195,1,23,194,1,20,13,
159,80,159,57,40,38,250,80,159,8,24,41,38,249,22,27,11,80,159,8,26, 159,80,159,57,40,37,250,80,159,8,24,41,37,249,22,27,11,80,159,8,26,
40,38,22,180,4,11,20,13,159,80,159,57,40,38,250,80,159,8,24,41,38, 40,37,22,180,4,11,20,13,159,80,159,57,40,37,250,80,159,8,24,41,37,
249,22,27,11,80,159,8,26,40,38,22,159,5,28,248,22,148,14,23,216,2, 249,22,27,11,80,159,8,26,40,37,22,159,5,28,248,22,148,14,23,216,2,
23,215,1,86,94,23,215,1,247,22,189,14,249,247,22,130,15,248,22,74,195, 23,215,1,86,94,23,215,1,247,22,189,14,249,247,22,130,15,248,22,74,195,
23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88, 23,25,86,94,23,193,1,27,28,23,195,2,28,23,197,1,27,249,22,5,88,
163,8,36,37,53,45,9,225,25,23,20,33,41,23,217,2,27,28,23,204,2, 163,8,36,37,53,45,9,225,25,23,20,33,41,23,217,2,27,28,23,204,2,
11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22,75, 11,193,28,192,192,28,193,28,203,28,249,22,188,3,248,22,75,196,248,22,75,
206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1, 206,193,11,11,11,11,86,94,23,197,1,11,28,23,193,2,86,102,23,214,1,
23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1, 23,211,1,23,210,1,23,209,1,23,201,1,23,200,1,23,199,1,23,196,1,
23,195,1,20,13,159,80,159,58,40,38,250,80,159,8,25,41,38,249,22,27, 23,195,1,20,13,159,80,159,58,40,37,250,80,159,8,25,41,37,249,22,27,
11,80,159,8,27,40,38,22,180,4,23,215,1,20,13,159,80,159,58,40,38, 11,80,159,8,27,40,37,22,180,4,23,215,1,20,13,159,80,159,58,40,37,
250,80,159,8,25,41,38,249,22,27,11,80,159,8,27,40,38,22,159,5,28, 250,80,159,8,25,41,37,249,22,27,11,80,159,8,27,40,37,22,159,5,28,
248,22,148,14,23,217,2,23,216,1,86,94,23,216,1,247,22,189,14,249,247, 248,22,148,14,23,217,2,23,216,1,86,94,23,216,1,247,22,189,14,249,247,
22,130,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23, 22,130,15,248,22,74,195,23,26,86,94,23,193,1,27,28,23,197,2,28,23,
201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20, 201,1,27,249,22,5,20,20,94,88,163,8,36,37,51,44,9,225,26,24,20,
@ -721,24 +629,24 @@
23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11, 23,204,2,28,249,22,188,3,248,22,75,196,248,22,75,23,207,2,193,11,11,
11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215, 11,86,94,23,210,1,11,86,94,23,201,1,11,28,23,193,2,86,101,23,215,
1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196, 1,23,213,1,23,212,1,23,211,1,23,202,1,23,200,1,23,197,1,23,196,
1,20,13,159,80,159,59,40,38,250,80,159,8,26,41,38,249,22,27,11,80, 1,20,13,159,80,159,59,40,37,250,80,159,8,26,41,37,249,22,27,11,80,
159,8,28,40,38,22,180,4,11,20,13,159,80,159,59,40,38,250,80,159,8, 159,8,28,40,37,22,180,4,11,20,13,159,80,159,59,40,37,250,80,159,8,
26,41,38,249,22,27,11,80,159,8,28,40,38,22,159,5,28,248,22,148,14, 26,41,37,249,22,27,11,80,159,8,28,40,37,22,159,5,28,248,22,148,14,
23,218,2,23,217,1,86,94,23,217,1,247,22,189,14,249,247,22,157,5,248, 23,218,2,23,217,1,86,94,23,217,1,247,22,189,14,249,247,22,157,5,248,
22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249, 22,74,195,23,27,86,94,23,193,1,27,28,23,197,1,28,23,201,1,27,249,
22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,43,23,215, 22,5,20,20,94,88,163,8,36,37,51,44,9,225,27,25,22,33,43,23,215,
1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22, 1,23,219,1,27,28,23,205,2,11,193,28,192,192,28,193,28,204,28,249,22,
188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1,23, 188,3,248,22,75,196,248,22,75,23,15,193,11,11,11,86,95,23,216,1,23,
212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1, 212,1,11,86,94,23,201,1,11,28,23,193,2,86,95,23,213,1,23,198,1,
20,13,159,80,159,8,24,40,38,250,80,159,8,27,41,38,249,22,27,11,80, 20,13,159,80,159,8,24,40,37,250,80,159,8,27,41,37,249,22,27,11,80,
159,8,29,40,38,22,180,4,23,217,1,20,13,159,80,159,8,24,40,38,250, 159,8,29,40,37,22,180,4,23,217,1,20,13,159,80,159,8,24,40,37,250,
80,159,8,27,41,38,249,22,27,11,80,159,8,29,40,38,22,159,5,28,248, 80,159,8,27,41,37,249,22,27,11,80,159,8,29,40,37,22,159,5,28,248,
22,148,14,23,219,2,23,218,1,86,94,23,218,1,247,22,189,14,249,247,22, 22,148,14,23,219,2,23,218,1,86,94,23,218,1,247,22,189,14,249,247,22,
157,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94,23, 157,5,248,22,74,195,23,28,86,94,23,193,1,27,28,23,199,2,86,94,23,
215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25,40, 215,1,23,214,1,86,94,23,214,1,23,215,1,20,13,159,80,159,8,25,40,
38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22,180,4, 37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,180,4,
28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8, 28,23,30,28,23,202,1,11,195,86,94,23,202,1,11,20,13,159,80,159,8,
25,40,38,250,80,159,8,28,41,38,249,22,27,11,80,159,8,30,40,38,22, 25,40,37,250,80,159,8,28,41,37,249,22,27,11,80,159,8,30,40,37,22,
159,5,28,248,22,148,14,23,220,2,23,219,1,86,94,23,219,1,247,22,189, 159,5,28,248,22,148,14,23,220,2,23,219,1,86,94,23,219,1,247,22,189,
14,249,247,22,157,5,194,23,29,27,249,22,160,8,80,159,39,45,38,249,22, 14,249,247,22,157,5,194,23,29,27,249,22,160,8,80,159,39,45,38,249,22,
183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169,2, 183,3,248,22,179,3,248,22,166,2,200,8,128,8,27,28,193,248,22,169,2,
@ -755,202 +663,173 @@
196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23, 196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,
193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,48,248,22, 193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,248,2,48,248,22,
107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194,32, 107,23,197,1,248,22,83,194,248,22,83,194,248,22,83,194,248,22,83,194,32,
50,88,163,36,37,8,40,11,2,29,222,33,51,28,248,22,81,248,22,75,23, 50,88,163,36,37,55,11,2,29,222,33,51,28,248,22,81,248,22,75,23,195,
195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161, 2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,27,248,22,
38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197, 75,196,28,248,22,81,248,22,75,23,195,2,249,22,7,9,248,22,74,195,90,
90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22,75, 159,38,11,89,161,38,36,11,27,248,22,75,196,28,248,22,81,248,22,75,23,
23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89, 195,2,249,22,7,9,248,22,74,195,90,159,38,11,89,161,38,36,11,248,2,
161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74, 50,248,22,75,196,249,22,7,249,22,73,248,22,74,199,196,195,249,22,7,249,
197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248,22, 22,73,248,22,74,199,196,195,249,22,7,249,22,73,248,22,74,199,196,195,27,
75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11, 27,249,22,135,15,2,47,23,197,2,28,23,193,2,86,94,23,195,1,249,22,
89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22, 73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,
74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81,248, 23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,
27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,193,2,
86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,
27,249,22,135,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,
73,248,22,98,23,196,2,248,2,48,248,22,107,23,197,1,248,22,83,194,248,
22,83,194,248,22,83,194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,
22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38, 22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,
11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248, 11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,
22,74,197,90,159,38,11,89,161,38,36,11,27,248,22,75,198,28,248,22,81, 22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,
248,22,75,23,195,2,249,22,7,9,248,22,74,195,27,248,22,75,194,90,159, 248,22,75,23,197,2,249,22,7,9,248,22,74,197,90,159,38,11,89,161,38,
38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9, 36,11,248,2,50,248,22,75,198,249,22,7,249,22,73,248,22,74,201,196,195,
248,22,74,197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249, 249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,
22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,200, 200,196,195,86,95,28,248,22,135,5,195,12,250,22,176,9,2,21,6,20,20,
196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249,22,73,248, 114,101,115,111,108,118,101,100,45,109,111,100,117,108,101,45,112,97,116,104,197,
22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249,22,7,249, 28,24,193,2,248,24,194,1,195,86,94,23,193,1,12,27,250,22,153,2,80,
22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201,196,195,249, 159,41,43,38,248,22,160,15,247,22,190,12,11,27,28,23,194,2,193,86,94,
22,7,249,22,73,248,22,74,200,196,195,249,22,7,249,22,73,248,22,74,201, 23,194,1,27,247,22,133,2,86,94,250,22,151,2,80,159,43,43,38,248,22,
196,195,249,22,7,249,22,73,248,22,74,200,196,195,27,27,249,22,135,15,2, 160,15,247,22,190,12,195,192,250,22,151,2,195,199,66,97,116,116,97,99,104,
47,23,197,2,28,23,193,2,86,94,23,195,1,249,22,73,248,22,98,23,196, 251,211,197,198,199,10,28,192,250,22,175,9,11,196,195,248,22,173,9,194,28,
2,27,248,22,107,23,197,1,27,249,22,135,15,2,47,23,196,2,28,23,193, 249,22,136,7,194,6,1,1,46,2,25,28,249,22,136,7,194,6,2,2,46,
2,86,94,23,194,1,249,22,73,248,22,98,23,196,2,27,248,22,107,23,197, 46,62,117,112,192,32,57,88,163,8,36,37,50,11,67,115,115,45,62,114,107,
1,27,249,22,135,15,2,47,23,196,2,28,23,193,2,86,94,23,194,1,249, 116,222,33,58,27,248,22,133,7,194,28,249,22,188,3,194,39,28,249,22,136,
22,73,248,22,98,23,196,2,27,248,22,107,23,197,1,27,249,22,135,15,2, 7,6,3,3,46,115,115,249,22,152,7,197,249,22,176,3,198,39,249,22,153,
47,23,196,2,28,23,193,2,86,94,23,194,1,249,22,73,248,22,98,23,196, 7,250,22,152,7,198,36,249,22,176,3,199,39,6,4,4,46,114,107,116,193,
2,248,2,48,248,22,107,23,197,1,248,22,83,194,248,22,83,194,248,22,83, 193,28,249,22,142,9,248,22,75,23,200,2,23,197,1,28,249,22,140,9,248,
194,248,22,83,195,28,23,195,1,192,28,248,22,81,248,22,75,23,195,2,249, 22,74,23,200,2,23,196,1,251,22,173,9,2,21,6,28,28,99,121,99,108,
22,7,9,248,22,74,195,27,248,22,75,194,90,159,38,11,89,161,38,36,11, 101,32,105,110,32,108,111,97,100,105,110,103,32,97,116,32,126,46,115,58,32,
28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248,22, 126,46,115,23,200,1,249,22,2,22,75,248,22,88,249,22,73,23,206,1,23,
75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197,2, 202,1,12,12,247,192,20,13,159,80,159,40,48,38,249,22,73,248,22,160,15,
249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38,36, 247,22,190,12,23,197,1,20,13,159,80,159,40,40,37,250,80,159,43,41,37,
11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27,248, 249,22,27,11,80,159,45,40,37,22,179,4,23,196,1,249,247,22,158,5,23,
22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23,197, 198,1,248,22,61,248,22,152,14,23,198,1,86,94,28,28,248,22,148,14,23,
2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161,38, 196,2,10,248,22,143,5,23,196,2,12,28,23,197,2,250,22,175,9,11,6,
36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197,27, 15,15,98,97,100,32,109,111,100,117,108,101,32,112,97,116,104,23,200,2,250,
248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75,23, 22,176,9,2,21,6,19,19,109,111,100,117,108,101,45,112,97,116,104,32,111,
197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89,161, 114,32,112,97,116,104,23,198,2,28,28,248,22,71,23,196,2,249,22,140,9,
38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74,197, 248,22,74,23,198,2,2,4,11,248,22,136,5,248,22,98,196,28,28,248,22,
27,248,22,75,196,90,159,38,11,89,161,38,36,11,28,248,22,81,248,22,75, 71,23,196,2,249,22,140,9,248,22,74,23,198,2,66,112,108,97,110,101,116,
23,197,2,249,22,7,9,248,22,74,197,27,248,22,75,196,90,159,38,11,89, 11,86,94,28,207,12,20,13,159,80,159,37,55,37,80,158,37,53,89,161,37,
161,38,36,11,28,248,22,81,248,22,75,23,197,2,249,22,7,9,248,22,74, 36,10,249,22,181,4,21,94,2,30,6,19,19,112,108,97,110,101,116,47,114,
197,90,159,38,11,89,161,38,36,11,248,2,50,248,22,75,198,249,22,7,249, 101,115,111,108,118,101,114,46,114,107,116,1,27,112,108,97,110,101,116,45,109,
22,73,248,22,74,201,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249, 111,100,117,108,101,45,110,97,109,101,45,114,101,115,111,108,118,101,114,12,252,
22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202, 212,199,200,201,202,80,158,42,53,86,94,23,193,1,27,88,163,8,36,37,46,
196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249,22,73,248, 11,79,115,104,111,119,45,99,111,108,108,101,99,116,105,111,110,45,101,114,114,
22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249,22,7,249, 223,5,33,55,27,28,248,22,58,23,198,2,27,248,80,159,41,46,39,249,22,
22,73,248,22,74,202,196,195,249,22,7,249,22,73,248,22,74,202,196,195,249, 73,23,201,2,247,22,190,14,28,23,193,2,192,86,94,23,193,1,90,159,38,
22,7,249,22,73,248,22,74,200,196,195,86,95,28,248,22,135,5,195,12,250, 11,89,161,38,36,11,249,80,159,44,52,39,248,22,64,23,203,2,11,27,28,
22,176,9,2,21,6,20,20,114,101,115,111,108,118,101,100,45,109,111,100,117, 248,22,81,23,195,2,6,8,8,109,97,105,110,46,114,107,116,249,22,153,7,
108,101,45,112,97,116,104,197,28,24,193,2,248,24,194,1,195,86,94,23,193, 23,197,2,6,4,4,46,114,107,116,27,252,80,159,49,57,39,2,21,23,204,
1,12,27,250,22,153,2,80,159,41,43,38,248,22,160,15,247,22,190,12,11, 1,28,248,22,81,23,201,2,23,201,1,86,94,23,201,1,248,22,74,23,201,
27,28,23,194,2,193,86,94,23,194,1,27,247,22,133,2,86,94,250,22,151, 2,28,248,22,81,23,201,2,86,94,23,200,1,9,248,22,75,23,201,1,23,
2,80,159,43,43,38,248,22,160,15,247,22,190,12,195,192,250,22,151,2,195, 199,2,249,22,166,14,23,195,1,23,196,1,28,248,22,130,7,23,198,2,86,
199,66,97,116,116,97,99,104,251,211,197,198,199,10,28,192,250,22,175,9,11, 94,23,194,1,27,248,80,159,41,8,26,39,23,200,2,27,248,80,159,42,46,
196,195,248,22,173,9,194,28,249,22,136,7,194,6,1,1,46,2,25,28,249, 39,249,22,73,23,202,2,23,197,2,28,23,193,2,192,86,94,23,193,1,90,
22,136,7,194,6,2,2,46,46,62,117,112,192,32,57,88,163,8,36,37,50, 159,38,11,89,161,38,36,11,249,80,159,45,52,39,23,203,2,11,250,22,1,
11,67,115,115,45,62,114,107,116,222,33,58,27,248,22,133,7,194,28,249,22, 22,166,14,23,199,1,249,22,87,249,22,2,32,0,88,163,8,36,37,44,11,
188,3,194,39,28,249,22,136,7,6,3,3,46,115,115,249,22,152,7,197,249, 9,222,33,56,23,200,1,248,22,83,248,2,57,23,201,1,28,248,22,148,14,
22,176,3,198,39,249,22,153,7,250,22,152,7,198,36,249,22,176,3,199,39, 23,198,2,86,94,23,194,1,28,248,22,171,14,23,198,2,248,80,159,40,8,
6,4,4,46,114,107,116,193,193,28,249,22,142,9,248,22,75,23,200,2,23, 27,39,248,22,175,14,23,199,2,248,22,83,6,26,26,32,40,97,32,112,97,
197,1,28,249,22,140,9,248,22,74,23,200,2,23,196,1,251,22,173,9,2, 116,104,32,109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,
21,6,28,28,99,121,99,108,101,32,105,110,32,108,111,97,100,105,110,103,32, 249,22,140,9,248,22,74,23,200,2,2,30,27,248,80,159,41,46,39,249,22,
97,116,32,126,46,115,58,32,126,46,115,23,200,1,249,22,2,22,75,248,22, 73,23,201,2,247,22,190,14,28,23,193,2,192,86,94,23,193,1,90,159,39,
88,249,22,73,23,206,1,23,202,1,12,12,247,192,20,13,159,80,159,40,48, 11,89,161,38,36,11,249,80,159,45,52,39,248,22,98,23,204,2,11,89,161,
38,249,22,73,248,22,160,15,247,22,190,12,23,197,1,20,13,159,80,159,40, 37,38,11,28,248,22,81,248,22,100,23,203,2,28,248,22,81,23,194,2,249,
40,38,250,80,159,43,41,38,249,22,27,11,80,159,45,40,38,22,179,4,23, 22,139,15,0,8,35,114,120,34,91,46,93,34,23,196,2,11,10,27,28,23,
196,1,249,247,22,158,5,23,198,1,248,22,61,248,22,152,14,23,198,1,86, 196,2,248,2,57,23,196,2,28,248,22,81,23,195,2,6,8,8,109,97,105,
94,28,28,248,22,148,14,23,196,2,10,248,22,143,5,23,196,2,12,28,23, 110,46,114,107,116,28,249,22,139,15,0,8,35,114,120,34,91,46,93,34,23,
197,2,250,22,175,9,11,6,15,15,98,97,100,32,109,111,100,117,108,101,32, 197,2,248,2,57,23,196,2,249,22,153,7,23,197,2,6,4,4,46,114,107,
112,97,116,104,23,200,2,250,22,176,9,2,21,6,19,19,109,111,100,117,108, 116,27,28,23,197,1,86,94,23,196,1,249,22,87,28,248,22,81,248,22,100,
101,45,112,97,116,104,32,111,114,32,112,97,116,104,23,198,2,28,28,248,22, 23,207,2,21,93,6,5,5,109,122,108,105,98,249,22,1,22,87,249,22,2,
71,23,196,2,249,22,140,9,248,22,74,23,198,2,2,4,11,248,22,136,5, 80,159,51,8,28,39,248,22,100,23,210,2,23,197,1,28,248,22,81,23,196,
248,22,98,196,28,28,248,22,71,23,196,2,249,22,140,9,248,22,74,23,198, 2,86,94,23,195,1,248,22,83,23,197,1,86,94,23,196,1,23,195,1,27,
2,66,112,108,97,110,101,116,11,86,94,28,207,12,20,13,159,80,159,37,55, 252,80,159,51,57,39,2,21,23,206,1,248,22,74,23,200,2,248,22,75,23,
38,80,158,37,53,89,161,37,36,10,249,22,181,4,21,94,2,30,6,19,19, 200,1,23,200,2,249,22,166,14,23,195,1,23,197,1,28,249,22,140,9,248,
112,108,97,110,101,116,47,114,101,115,111,108,118,101,114,46,114,107,116,1,27, 22,74,23,200,2,64,102,105,108,101,248,80,159,40,8,27,39,248,22,175,14,
112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101, 249,22,173,14,248,22,177,14,248,22,98,23,203,2,248,80,159,44,8,26,39,
115,111,108,118,101,114,12,252,212,199,200,201,202,80,158,42,53,86,94,23,193, 23,203,2,12,86,94,28,28,248,22,148,14,23,194,2,10,248,22,155,8,23,
1,27,88,163,8,36,37,46,11,79,115,104,111,119,45,99,111,108,108,101,99, 194,2,86,94,23,199,1,12,28,23,199,2,250,22,175,9,67,114,101,113,117,
116,105,111,110,45,101,114,114,223,5,33,55,27,28,248,22,58,23,198,2,27, 105,114,101,249,22,178,7,6,17,17,98,97,100,32,109,111,100,117,108,101,32,
248,80,159,41,46,37,249,22,73,23,201,2,247,22,190,14,28,23,193,2,192, 112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,6,0,0,23,202,
86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,44,52,37,248, 1,86,94,23,199,1,250,22,176,9,2,21,249,22,178,7,6,13,13,109,111,
22,64,23,203,2,11,27,28,248,22,81,23,195,2,6,8,8,109,97,105,110, 100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74,23,199,2,
46,114,107,116,249,22,153,7,23,197,2,6,4,4,46,114,107,116,27,252,80, 6,0,0,23,200,2,27,28,248,22,155,8,23,195,2,249,22,160,8,23,196,
159,49,57,38,2,21,23,204,1,28,248,22,81,23,201,2,23,201,1,86,94, 2,36,249,22,175,14,248,22,176,14,23,197,2,11,27,28,248,22,155,8,23,
23,201,1,248,22,74,23,201,2,28,248,22,81,23,201,2,86,94,23,200,1, 196,2,249,22,160,8,23,197,2,37,248,80,159,42,58,39,23,195,2,90,159,
9,248,22,75,23,201,1,23,199,2,249,22,166,14,23,195,1,23,196,1,28, 39,11,89,161,39,36,11,28,248,22,155,8,23,199,2,250,22,7,2,31,249,
248,22,130,7,23,198,2,86,94,23,194,1,27,248,80,159,41,8,26,37,23, 22,160,8,23,203,2,38,2,31,248,22,169,14,23,198,2,86,95,23,195,1,
200,2,27,248,80,159,42,46,37,249,22,73,23,202,2,23,197,2,28,23,193, 23,193,1,27,28,248,22,155,8,23,200,2,249,22,160,8,23,201,2,39,249,
2,192,86,94,23,193,1,90,159,38,11,89,161,38,36,11,249,80,159,45,52, 80,159,47,56,39,23,197,2,5,0,27,28,248,22,155,8,23,201,2,249,22,
37,23,203,2,11,250,22,1,22,166,14,23,199,1,249,22,87,249,22,2,32, 160,8,23,202,2,40,248,22,136,5,23,200,2,27,27,250,22,153,2,80,159,
0,88,163,8,36,37,44,11,9,222,33,56,23,200,1,248,22,83,248,2,57, 51,43,38,248,22,160,15,247,22,190,12,11,28,23,193,2,192,86,94,23,193,
23,201,1,28,248,22,148,14,23,198,2,86,94,23,194,1,28,248,22,171,14, 1,27,247,22,133,2,86,94,250,22,151,2,80,159,52,43,38,248,22,160,15,
23,198,2,248,80,159,40,8,27,37,248,22,175,14,23,199,2,248,22,83,6, 247,22,190,12,195,192,86,95,28,23,208,1,27,250,22,153,2,23,197,2,197,
26,26,32,40,97,32,112,97,116,104,32,109,117,115,116,32,98,101,32,97,98, 11,28,23,193,1,12,86,95,27,27,28,248,22,17,80,159,51,49,38,80,159,
115,111,108,117,116,101,41,28,249,22,140,9,248,22,74,23,200,2,2,30,27, 50,49,38,247,22,19,250,22,25,248,22,23,23,197,2,80,159,53,48,38,23,
248,80,159,41,46,37,249,22,73,23,201,2,247,22,190,14,28,23,193,2,192, 196,1,27,248,22,160,15,247,22,190,12,249,22,3,20,20,94,88,163,8,36,
86,94,23,193,1,90,159,39,11,89,161,38,36,11,249,80,159,45,52,37,248, 37,55,11,9,226,12,11,2,3,33,59,23,195,1,23,196,1,248,28,248,22,
22,98,23,204,2,11,89,161,37,38,11,28,248,22,81,248,22,100,23,203,2, 17,80,159,50,49,38,32,0,88,163,36,37,42,11,9,222,33,60,80,159,49,
28,248,22,81,23,194,2,249,22,139,15,0,8,35,114,120,34,91,46,93,34, 8,29,39,88,163,36,36,51,8,176,64,9,227,13,9,8,4,3,33,61,250,
23,196,2,11,10,27,28,23,196,2,248,2,57,23,196,2,28,248,22,81,23, 22,151,2,23,197,1,197,10,12,28,28,248,22,155,8,23,202,1,11,28,248,
195,2,6,8,8,109,97,105,110,46,114,107,116,28,249,22,139,15,0,8,35, 22,130,7,23,206,2,10,28,248,22,58,23,206,2,10,28,248,22,71,23,206,
114,120,34,91,46,93,34,23,197,2,248,2,57,23,196,2,249,22,153,7,23, 2,249,22,140,9,248,22,74,23,208,2,2,30,11,27,28,248,22,130,7,23,
197,2,6,4,4,46,114,107,116,27,28,23,197,1,86,94,23,196,1,249,22, 207,2,249,22,73,23,208,1,248,80,159,51,8,26,39,23,210,1,86,94,23,
87,28,248,22,81,248,22,100,23,207,2,21,93,6,5,5,109,122,108,105,98, 207,1,249,22,73,23,208,1,247,22,190,14,27,249,22,183,3,248,22,179,3,
249,22,1,22,87,249,22,2,80,159,51,8,28,37,248,22,100,23,210,2,23, 248,22,166,2,23,198,2,8,128,8,27,249,22,160,8,80,159,52,45,38,23,
197,1,28,248,22,81,23,196,2,86,94,23,195,1,248,22,83,23,197,1,86, 196,2,27,28,23,194,2,248,22,169,2,23,195,1,86,94,23,194,1,11,250,
94,23,196,1,23,195,1,27,252,80,159,51,57,38,2,21,23,206,1,248,22, 22,161,8,80,159,54,45,38,23,198,1,248,22,168,2,249,22,73,249,22,73,
74,23,200,2,248,22,75,23,200,1,23,200,2,249,22,166,14,23,195,1,23, 23,204,1,252,22,157,8,23,217,1,23,216,1,23,214,1,23,212,1,23,18,
197,1,28,249,22,140,9,248,22,74,23,200,2,64,102,105,108,101,248,80,159, 28,23,199,2,23,199,1,86,94,23,199,1,9,12,193,86,96,20,18,159,11,
40,8,27,37,248,22,175,14,249,22,173,14,248,22,177,14,248,22,98,23,203, 80,158,36,53,248,80,159,37,8,25,37,249,22,27,11,80,159,39,55,37,248,
2,248,80,159,44,8,26,37,23,203,2,12,86,94,28,28,248,22,148,14,23, 22,178,4,80,159,37,54,38,248,22,158,5,80,159,37,37,39,248,22,181,13,
194,2,10,248,22,155,8,23,194,2,86,94,23,199,1,12,28,23,199,2,250, 80,159,37,42,39,20,18,159,11,80,158,36,53,248,80,159,37,8,25,37,249,
22,175,9,67,114,101,113,117,105,114,101,249,22,178,7,6,17,17,98,97,100, 22,27,11,80,159,39,55,37,159,36,20,112,159,36,16,1,11,16,0,20,26,
32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23,198,2,248,22,74, 142,2,1,2,1,29,11,11,11,11,11,10,38,80,158,36,36,20,112,159,40,
23,199,2,6,0,0,23,202,1,86,94,23,199,1,250,22,176,9,2,21,249, 16,26,2,2,2,3,30,2,5,72,112,97,116,104,45,115,116,114,105,110,103,
22,178,7,6,13,13,109,111,100,117,108,101,32,112,97,116,104,126,97,28,23, 63,11,30,2,5,75,112,97,116,104,45,97,100,100,45,115,117,102,102,105,120,
198,2,248,22,74,23,199,2,6,0,0,23,200,2,27,28,248,22,155,8,23, 8,30,2,7,2,8,5,30,2,7,1,23,101,120,116,101,110,100,45,112,97,
195,2,249,22,160,8,23,196,2,36,249,22,175,14,248,22,176,14,23,197,2, 114,97,109,101,116,101,114,105,122,97,116,105,111,110,3,2,9,2,10,2,11,
11,27,28,248,22,155,8,23,196,2,249,22,160,8,23,197,2,37,248,80,159, 2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,30,
42,58,38,23,195,2,90,159,39,11,89,161,39,36,11,28,248,22,155,8,23, 2,22,2,8,5,30,2,5,79,112,97,116,104,45,114,101,112,108,97,99,101,
199,2,250,22,7,2,31,249,22,160,8,23,203,2,38,2,31,248,22,169,14, 45,115,117,102,102,105,120,10,30,2,5,73,102,105,110,100,45,99,111,108,45,
23,198,2,86,95,23,195,1,23,193,1,27,28,248,22,155,8,23,200,2,249, 102,105,108,101,3,30,2,5,76,110,111,114,109,97,108,45,99,97,115,101,45,
22,160,8,23,201,2,39,249,80,159,47,56,38,23,197,2,5,0,27,28,248, 112,97,116,104,7,2,23,2,24,30,2,22,74,114,101,112,97,114,97,109,101,
22,155,8,23,201,2,249,22,160,8,23,202,2,40,248,22,136,5,23,200,2, 116,101,114,105,122,101,6,16,0,16,0,36,16,0,36,16,14,2,15,2,16,
27,27,250,22,153,2,80,159,51,43,38,248,22,160,15,247,22,190,12,11,28, 2,10,2,12,2,17,2,18,2,11,2,3,2,9,2,2,2,13,2,14,2,
23,193,2,192,86,94,23,193,1,27,247,22,133,2,86,94,250,22,151,2,80, 19,2,21,50,11,11,39,36,11,11,16,3,2,23,2,20,2,24,16,3,11,
159,52,43,38,248,22,160,15,247,22,190,12,195,192,86,95,28,23,208,1,27, 11,11,16,3,2,23,2,20,2,24,39,39,37,11,11,16,0,16,0,16,0,
250,22,153,2,23,197,2,197,11,28,23,193,1,12,86,95,27,27,28,248,22, 36,36,11,11,11,16,0,16,0,16,0,36,36,16,0,16,21,20,15,16,2,
17,80,159,51,49,38,80,159,50,49,38,247,22,19,250,22,25,248,22,23,23, 88,163,36,37,45,8,128,128,9,223,0,33,32,80,159,36,8,29,39,20,15,
197,2,80,159,53,48,38,23,196,1,27,248,22,160,15,247,22,190,12,249,22, 16,2,88,163,8,36,37,45,8,240,0,0,1,0,9,223,0,33,33,80,159,
3,20,20,94,88,163,8,36,37,55,11,9,226,12,11,2,3,33,59,23,195, 36,8,28,39,20,15,16,2,88,163,36,37,49,8,240,0,0,16,0,72,112,
1,23,196,1,248,28,248,22,17,80,159,50,49,38,32,0,88,163,36,37,42, 97,116,104,45,115,115,45,62,114,107,116,223,0,33,34,80,159,36,8,27,39,
11,9,222,33,60,80,159,49,8,29,37,88,163,36,36,51,8,176,64,9,227, 20,15,16,2,88,163,36,37,49,8,240,0,192,0,0,67,103,101,116,45,100,
13,9,8,4,3,33,61,250,22,151,2,23,197,1,197,10,12,28,28,248,22, 105,114,223,0,33,35,80,159,36,8,26,39,20,15,16,2,248,22,152,8,69,
155,8,23,202,1,11,28,248,22,130,7,23,206,2,10,28,248,22,58,23,206, 115,111,45,115,117,102,102,105,120,80,159,36,36,37,20,15,16,2,88,163,36,
2,10,28,248,22,71,23,206,2,249,22,140,9,248,22,74,23,208,2,2,30, 38,8,38,8,61,2,3,223,0,33,44,80,159,36,37,37,20,15,16,2,32,
11,27,28,248,22,130,7,23,207,2,249,22,73,23,208,1,248,80,159,51,8, 0,88,163,8,36,37,42,11,2,9,222,192,80,159,36,42,37,20,15,16,2,
26,37,23,210,1,86,94,23,207,1,249,22,73,23,208,1,247,22,190,14,27, 247,22,136,2,80,159,36,43,37,20,15,16,2,8,128,8,80,159,36,44,37,
249,22,183,3,248,22,179,3,248,22,166,2,23,198,2,8,128,8,27,249,22, 20,15,16,2,249,22,156,8,8,128,8,11,80,159,36,45,37,20,15,16,2,
160,8,80,159,52,45,38,23,196,2,27,28,23,194,2,248,22,169,2,23,195, 88,163,8,36,37,50,8,128,8,2,13,223,0,33,45,80,159,36,46,37,20,
1,86,94,23,194,1,11,250,22,161,8,80,159,54,45,38,23,198,1,248,22, 15,16,2,88,163,8,36,38,55,8,128,8,2,14,223,0,33,46,80,159,36,
168,2,249,22,73,249,22,73,23,204,1,252,22,157,8,23,217,1,23,216,1, 47,37,20,15,16,2,247,22,69,80,159,36,48,37,20,15,16,2,248,22,18,
23,214,1,23,212,1,23,18,28,23,199,2,23,199,1,86,94,23,199,1,9, 74,109,111,100,117,108,101,45,108,111,97,100,105,110,103,80,159,36,49,37,20,
12,193,86,96,20,18,159,11,80,158,36,53,248,80,159,37,8,25,38,249,22, 15,16,2,11,80,158,36,50,20,15,16,2,11,80,158,36,51,20,15,16,2,
27,11,80,159,39,55,38,248,22,178,4,80,159,37,54,38,248,22,158,5,80, 32,0,88,163,36,38,8,25,11,2,19,222,33,52,80,159,36,52,37,20,15,
159,37,37,37,248,22,181,13,80,159,37,42,37,20,18,159,11,80,158,36,53, 16,2,11,80,158,36,53,20,15,16,2,27,11,20,19,158,36,90,159,37,10,
248,80,159,37,8,25,38,249,22,27,11,80,159,39,55,38,159,36,20,112,159, 89,161,37,36,10,20,25,96,2,21,88,163,8,36,37,51,8,128,2,9,224,
36,16,1,11,16,0,20,26,142,2,1,2,1,29,11,11,11,11,11,10,38, 2,1,33,53,88,163,36,39,49,11,9,223,0,33,54,88,163,36,40,8,38,
80,158,36,36,20,112,159,40,16,26,2,2,2,3,30,2,5,72,112,97,116, 16,2,8,176,218,8,187,241,9,224,2,1,33,62,207,80,159,36,54,37,20,
104,45,115,116,114,105,110,103,63,11,30,2,5,75,112,97,116,104,45,97,100, 15,16,2,88,163,36,36,45,8,240,66,0,14,2,2,23,223,0,33,63,80,
100,45,115,117,102,102,105,120,8,30,2,7,2,8,5,30,2,7,1,23,101, 159,36,59,37,20,15,16,2,88,163,8,36,36,45,8,240,0,0,10,2,2,
120,116,101,110,100,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111, 24,223,0,33,64,80,159,36,8,24,37,96,29,94,2,4,68,35,37,107,101,
110,3,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2, 114,110,101,108,11,29,94,2,4,69,35,37,109,105,110,45,115,116,120,11,2,
18,2,19,2,20,2,21,30,2,22,2,8,5,30,2,5,79,112,97,116,104, 5,2,22,9,9,9,36,0};
45,114,101,112,108,97,99,101,45,115,117,102,102,105,120,10,30,2,5,73,102, EVAL_ONE_SIZED_STR((char *)expr, 6244);
105,110,100,45,99,111,108,45,102,105,108,101,3,30,2,5,76,110,111,114,109,
97,108,45,99,97,115,101,45,112,97,116,104,7,2,23,2,24,30,2,22,74,
114,101,112,97,114,97,109,101,116,101,114,105,122,101,6,16,0,16,0,36,16,
0,36,16,14,2,15,2,16,2,10,2,12,2,17,2,18,2,11,2,3,2,
9,2,2,2,13,2,14,2,19,2,21,50,11,11,39,36,11,11,16,3,2,
23,2,20,2,24,16,3,11,11,11,16,3,2,23,2,20,2,24,39,39,37,
11,11,16,0,16,0,16,0,36,36,11,11,11,16,0,16,0,16,0,36,36,
16,0,16,21,20,15,16,2,88,163,36,37,45,8,128,128,9,223,0,33,32,
80,159,36,8,29,37,20,15,16,2,88,163,8,36,37,45,8,240,0,0,1,
0,9,223,0,33,33,80,159,36,8,28,37,20,15,16,2,88,163,36,37,49,
8,240,0,0,16,0,72,112,97,116,104,45,115,115,45,62,114,107,116,223,0,
33,34,80,159,36,8,27,37,20,15,16,2,88,163,36,37,49,8,240,0,192,
0,0,67,103,101,116,45,100,105,114,223,0,33,35,80,159,36,8,26,37,20,
15,16,2,248,22,152,8,69,115,111,45,115,117,102,102,105,120,80,159,36,36,
37,20,15,16,2,88,163,36,38,8,38,8,61,2,3,223,0,33,44,80,159,
36,37,37,20,15,16,2,32,0,88,163,8,36,37,42,11,2,9,222,192,80,
159,36,42,37,20,15,16,2,247,22,136,2,80,159,36,43,37,20,15,16,2,
8,128,8,80,159,36,44,37,20,15,16,2,249,22,156,8,8,128,8,11,80,
159,36,45,37,20,15,16,2,88,163,8,36,37,50,8,128,8,2,13,223,0,
33,45,80,159,36,46,37,20,15,16,2,88,163,8,36,38,55,8,128,8,2,
14,223,0,33,46,80,159,36,47,37,20,15,16,2,247,22,69,80,159,36,48,
37,20,15,16,2,248,22,18,74,109,111,100,117,108,101,45,108,111,97,100,105,
110,103,80,159,36,49,37,20,15,16,2,11,80,158,36,50,20,15,16,2,11,
80,158,36,51,20,15,16,2,32,0,88,163,36,38,8,42,11,2,19,222,33,
52,80,159,36,52,37,20,15,16,2,11,80,158,36,53,20,15,16,2,27,11,
20,19,158,36,90,159,37,10,89,161,37,36,10,20,25,96,2,21,88,163,8,
36,37,51,8,128,2,9,224,2,1,33,53,88,163,36,39,49,11,9,223,0,
33,54,88,163,36,40,8,38,16,2,8,176,218,8,187,241,9,224,2,1,33,
62,207,80,159,36,54,37,20,15,16,2,88,163,36,36,45,8,240,66,0,14,
2,2,23,223,0,33,63,80,159,36,59,37,20,15,16,2,88,163,8,36,36,
45,8,240,0,0,10,2,2,24,223,0,33,64,80,159,36,8,24,37,96,29,
94,2,4,68,35,37,107,101,114,110,101,108,11,29,94,2,4,69,35,37,109,
105,110,45,115,116,120,11,2,5,2,22,9,9,9,36,0};
EVAL_ONE_SIZED_STR((char *)expr, 6861);
} }
{ {
SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,50,46,52,0,0,0,0,0,0,0,0,0,0,0, SHARED_OK static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,7,53,46,49,46,51,46,50,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,29, 0,0,0,0,0,0,0,0,0,11,0,0,0,1,0,0,10,0,16,0,29,
0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,97,1,0,0, 0,44,0,58,0,78,0,90,0,104,0,118,0,170,0,0,0,97,1,0,0,
69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67, 69,35,37,98,117,105,108,116,105,110,65,113,117,111,116,101,29,94,2,2,67,
@ -958,7 +837,7 @@
107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74, 107,11,29,94,2,2,68,35,37,112,97,114,97,109,122,11,29,94,2,2,74,
35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35, 35,37,112,108,97,99,101,45,115,116,114,117,99,116,11,29,94,2,2,66,35,
37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29, 37,98,111,111,116,11,29,94,2,2,68,35,37,101,120,112,111,98,115,11,29,
94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,0,77,0, 94,2,2,68,35,37,107,101,114,110,101,108,11,97,36,11,8,240,204,77,0,
0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36, 0,100,159,2,3,36,36,159,2,4,36,36,159,2,5,36,36,159,2,6,36,
36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36, 36,159,2,7,36,36,159,2,8,36,36,159,2,9,36,36,159,2,9,36,36,
16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29, 16,0,159,36,20,112,159,36,16,1,11,16,0,20,26,142,2,1,2,1,29,

View File

@ -1708,7 +1708,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro,
scheme_set_global_bucket("define-values", b, values[i], 1); scheme_set_global_bucket("define-values", b, values[i], 1);
scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1); scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1);
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_CONST) { if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_SEAL) {
((Scheme_Bucket_With_Flags *)b)->flags |= GLOB_IS_IMMUTATED; ((Scheme_Bucket_With_Flags *)b)->flags |= GLOB_IS_IMMUTATED;
} }
} }
@ -1740,7 +1740,7 @@ define_execute_with_dynamic_state(Scheme_Object *vec, int delta, int defmacro,
scheme_set_global_bucket("define-values", b, vals, 1); scheme_set_global_bucket("define-values", b, vals, 1);
scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1); scheme_shadow(scheme_get_bucket_home(b), (Scheme_Object *)b->key, 1);
if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_CONST) { if (SCHEME_TOPLEVEL_FLAGS(var) & SCHEME_TOPLEVEL_SEAL) {
int flags = GLOB_IS_IMMUTATED; int flags = GLOB_IS_IMMUTATED;
if (SCHEME_PROCP(vals_expr) if (SCHEME_PROCP(vals_expr)
|| SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_unclosed_procedure_type) || SAME_TYPE(SCHEME_TYPE(vals_expr), scheme_unclosed_procedure_type)

View File

@ -504,7 +504,7 @@ int scheme_is_noncm(Scheme_Object *a, mz_jit_state *jitter, int depth, int stack
if (depth if (depth
&& jitter->nc && jitter->nc
&& SAME_TYPE(SCHEME_TYPE(a), scheme_toplevel_type) && SAME_TYPE(SCHEME_TYPE(a), scheme_toplevel_type)
&& (SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_CONST)) { && ((SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST)) {
Scheme_Object *p; Scheme_Object *p;
p = scheme_extract_global(a, jitter->nc); p = scheme_extract_global(a, jitter->nc);
p = ((Scheme_Bucket *)p)->val; p = ((Scheme_Bucket *)p)->val;
@ -722,7 +722,7 @@ static int is_a_procedure(Scheme_Object *v, mz_jit_state *jitter)
int flags; int flags;
return scheme_mz_is_closure(jitter, SCHEME_LOCAL_POS(v), -1, &flags); return scheme_mz_is_closure(jitter, SCHEME_LOCAL_POS(v), -1, &flags);
} else if (t == scheme_toplevel_type) { } else if (t == scheme_toplevel_type) {
if (SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_CONST) { if ((SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST) {
if (jitter->nc) { if (jitter->nc) {
Scheme_Object *p; Scheme_Object *p;
@ -755,18 +755,26 @@ int scheme_ok_to_delay_local(Scheme_Object *obj)
return 0; return 0;
} }
int scheme_can_delay_and_avoids_r1_r2(Scheme_Object *obj)
{
Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_delay_local(obj)) {
return 1;
} else
return (t >= _scheme_compiled_values_types_);
}
int scheme_can_delay_and_avoids_r1(Scheme_Object *obj) int scheme_can_delay_and_avoids_r1(Scheme_Object *obj)
{ {
Scheme_Type t = SCHEME_TYPE(obj); Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_toplevel_type)) { if (SAME_TYPE(t, scheme_toplevel_type)) {
return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST) return (((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED)
? 1 ? 1
: 0); : 0);
} else if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_delay_local(obj)) {
return 1;
} else } else
return (t >= _scheme_compiled_values_types_); return scheme_can_delay_and_avoids_r1_r2(obj);
} }
int scheme_is_constant_and_avoids_r1(Scheme_Object *obj) int scheme_is_constant_and_avoids_r1(Scheme_Object *obj)
@ -774,7 +782,7 @@ int scheme_is_constant_and_avoids_r1(Scheme_Object *obj)
Scheme_Type t = SCHEME_TYPE(obj); Scheme_Type t = SCHEME_TYPE(obj);
if (SAME_TYPE(t, scheme_toplevel_type)) { if (SAME_TYPE(t, scheme_toplevel_type)) {
return ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_CONST) return (((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED)
? 1 ? 1
: 0); : 0);
} else if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_move_local(obj)) { } else if (SAME_TYPE(t, scheme_local_type) && scheme_ok_to_move_local(obj)) {
@ -1813,8 +1821,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
{ {
int can_fail; int can_fail;
/* Other parts of the JIT rely on this code not modifying R1 */ /* Other parts of the JIT rely on this code not modifying R1 */
can_fail = !(SCHEME_TOPLEVEL_FLAGS(obj) can_fail = ((SCHEME_TOPLEVEL_FLAGS(obj) & SCHEME_TOPLEVEL_FLAGS_MASK) < SCHEME_TOPLEVEL_READY);
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY));
if (!can_fail && result_ignored) { if (!can_fail && result_ignored) {
/* skip */ /* skip */
} else { } else {

View File

@ -1243,6 +1243,7 @@ void scheme_add_branch_false_movi(Branch_Info *for_branch, jit_insn *ref);
int scheme_ok_to_move_local(Scheme_Object *obj); int scheme_ok_to_move_local(Scheme_Object *obj);
int scheme_ok_to_delay_local(Scheme_Object *obj); int scheme_ok_to_delay_local(Scheme_Object *obj);
int scheme_can_delay_and_avoids_r1(Scheme_Object *obj); int scheme_can_delay_and_avoids_r1(Scheme_Object *obj);
int scheme_can_delay_and_avoids_r1_r2(Scheme_Object *obj);
int scheme_is_constant_and_avoids_r1(Scheme_Object *obj); int scheme_is_constant_and_avoids_r1(Scheme_Object *obj);
int scheme_is_relatively_constant_and_avoids_r1_maybe_fp(Scheme_Object *obj, Scheme_Object *wrt, int scheme_is_relatively_constant_and_avoids_r1_maybe_fp(Scheme_Object *obj, Scheme_Object *wrt,
int fp_ok); int fp_ok);

View File

@ -1399,11 +1399,12 @@ int scheme_generate_app(Scheme_App_Rec *app, Scheme_Object **alt_rands, int num_
} }
} }
} else if (t == scheme_toplevel_type) { } else if (t == scheme_toplevel_type) {
if (SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_CONST) { if (0 && (SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_FIXED) {
/* We can re-order evaluation of the rator. */ /* We can re-order evaluation of the rator. */
reorder_ok = 1; reorder_ok = 1;
if (jitter->nc) { if (jitter->nc && 0
&& ((SCHEME_TOPLEVEL_FLAGS(rator) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_CONST)) {
Scheme_Object *p; Scheme_Object *p;
p = scheme_extract_global(rator, jitter->nc); p = scheme_extract_global(rator, jitter->nc);

View File

@ -2891,7 +2891,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
LOG_IT(("inlined vector-set!\n")); LOG_IT(("inlined vector-set!\n"));
if (scheme_can_delay_and_avoids_r1(app->args[1])) if (scheme_can_delay_and_avoids_r1_r2(app->args[1]))
can_delay_vec = 1; can_delay_vec = 1;
else else
can_delay_vec = 0; can_delay_vec = 0;

View File

@ -3430,6 +3430,19 @@ static Scheme_Module *module_load(Scheme_Object *name, Scheme_Env *env, const ch
return m; return m;
} }
static int is_procedure_expression(Scheme_Object *e)
{
Scheme_Type t;
if (SCHEME_PROCP(e))
return 1;
t = SCHEME_TYPE(e);
return ((t == scheme_unclosed_procedure_type)
|| (t == scheme_case_lambda_sequence_type));
}
static void setup_accessible_table(Scheme_Module *m) static void setup_accessible_table(Scheme_Module *m)
{ {
if (!m->accessible) { if (!m->accessible) {
@ -3484,7 +3497,7 @@ static void setup_accessible_table(Scheme_Module *m)
if (SAME_TYPE(SCHEME_TYPE(form), scheme_define_values_type)) { if (SAME_TYPE(SCHEME_TYPE(form), scheme_define_values_type)) {
for (k = SCHEME_VEC_SIZE(form); k-- > 1; ) { for (k = SCHEME_VEC_SIZE(form); k-- > 1; ) {
tl = SCHEME_VEC_ELS(form)[k]; tl = SCHEME_VEC_ELS(form)[k];
if (SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_CONST) { if (SCHEME_TOPLEVEL_FLAGS(tl) & SCHEME_TOPLEVEL_SEAL) {
int pos = SCHEME_TOPLEVEL_POS(tl); int pos = SCHEME_TOPLEVEL_POS(tl);
if (pos < m->prefix->num_toplevels) { if (pos < m->prefix->num_toplevels) {
tl = m->prefix->toplevels[pos]; tl = m->prefix->toplevels[pos];
@ -3496,9 +3509,12 @@ static void setup_accessible_table(Scheme_Module *m)
&& scheme_compiled_duplicate_ok(SCHEME_VEC_ELS(form)[0], 1)) { && scheme_compiled_duplicate_ok(SCHEME_VEC_ELS(form)[0], 1)) {
/* record simple constant from cross-module propagation: */ /* record simple constant from cross-module propagation: */
v = scheme_make_pair(v, SCHEME_VEC_ELS(form)[0]); v = scheme_make_pair(v, SCHEME_VEC_ELS(form)[0]);
} else if (is_procedure_expression(SCHEME_VEC_ELS(form)[0])) {
/* record that it's constant across all instantiations: */
v = scheme_make_pair(v, scheme_constant_key);
} else { } else {
/* record simply that it's constant: */ /* record that it's fixed for any given instantiations: */
v = scheme_box(v); v = scheme_make_pair(v, scheme_fixed_key);
} }
scheme_hash_set(ht, tl, v); scheme_hash_set(ht, tl, v);
} else } else
@ -3715,10 +3731,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object
pos = NULL; pos = NULL;
if (pos) { if (pos) {
if (SCHEME_BOXP(pos)) { if (SCHEME_PAIRP(pos)) {
if (_is_constant) *_is_constant = scheme_void_proc; /* a hack to indicated "unknown constant" */
pos = SCHEME_BOX_VAL(pos);
} else if (SCHEME_PAIRP(pos)) {
if (_is_constant) *_is_constant = SCHEME_CDR(pos); if (_is_constant) *_is_constant = SCHEME_CDR(pos);
pos = SCHEME_CAR(pos); pos = SCHEME_CAR(pos);
} }

View File

@ -231,8 +231,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
if (vtype == scheme_toplevel_type) { if (vtype == scheme_toplevel_type) {
note_match(1, vals, warn_info); note_match(1, vals, warn_info);
if (resolved && ((vals == 1) || (vals < 0))) { if (resolved && ((vals == 1) || (vals < 0))) {
if (SCHEME_TOPLEVEL_FLAGS(o) if (SCHEME_TOPLEVEL_FLAGS(o) & SCHEME_TOPLEVEL_FLAGS_MASK)
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY))
return 1; return 1;
else else
return 0; return 0;
@ -242,8 +241,7 @@ int scheme_omittable_expr(Scheme_Object *o, int vals, int fuel, int resolved,
if (vtype == scheme_compiled_toplevel_type) { if (vtype == scheme_compiled_toplevel_type) {
note_match(1, vals, warn_info); note_match(1, vals, warn_info);
if ((vals == 1) || (vals < 0)) { if ((vals == 1) || (vals < 0)) {
if (SCHEME_TOPLEVEL_FLAGS(o) if ((SCHEME_TOPLEVEL_FLAGS(o) & SCHEME_TOPLEVEL_FLAGS_MASK) >= SCHEME_TOPLEVEL_READY)
& (SCHEME_TOPLEVEL_CONST | SCHEME_TOPLEVEL_READY))
return 1; return 1;
else else
return 0; return 0;
@ -3158,7 +3156,7 @@ int scheme_compiled_propagate_ok(Scheme_Object *value, Optimize_Info *info)
if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_toplevel_type)) { if (SAME_TYPE(SCHEME_TYPE(value), scheme_compiled_toplevel_type)) {
if (SCHEME_TOPLEVEL_FLAGS(value) & SCHEME_TOPLEVEL_CONST) if (SCHEME_TOPLEVEL_FLAGS(value) >= SCHEME_TOPLEVEL_FIXED)
return 1; return 1;
if (info->top_level_consts) { if (info->top_level_consts) {
int pos; int pos;
@ -4513,7 +4511,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
Scheme_Object *e, *vars, *old_context; Scheme_Object *e, *vars, *old_context;
int start_simltaneous = 0, i_m, cnt; int start_simltaneous = 0, i_m, cnt;
Scheme_Object *cl_first = NULL, *cl_last = NULL; Scheme_Object *cl_first = NULL, *cl_last = NULL;
Scheme_Hash_Table *consts = NULL, *ready_table = NULL, *re_consts = NULL; Scheme_Hash_Table *consts = NULL, *fixed_table = NULL, *re_consts = NULL;
int cont, next_pos_ready = -1, inline_fuel, is_proc_def; int cont, next_pos_ready = -1, inline_fuel, is_proc_def;
old_context = info->context; old_context = info->context;
@ -4650,14 +4648,15 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
scheme_hash_set(re_consts, scheme_make_integer(i_m), scheme_hash_set(re_consts, scheme_make_integer(i_m),
scheme_make_integer(pos)); scheme_make_integer(pos));
} else { } else {
/* At least mark it as ready */ /* At least mark it as fixed */
if (!ready_table) {
ready_table = scheme_make_hash_table(SCHEME_hash_ptr); if (!fixed_table) {
fixed_table = scheme_make_hash_table(SCHEME_hash_ptr);
if (!consts) if (!consts)
consts = scheme_make_hash_table(SCHEME_hash_ptr); consts = scheme_make_hash_table(SCHEME_hash_ptr);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)ready_table); scheme_hash_set(consts, scheme_false, (Scheme_Object *)fixed_table);
} }
scheme_hash_set(ready_table, scheme_make_integer(tl->position), scheme_true); scheme_hash_set(fixed_table, scheme_make_integer(tl->position), scheme_true);
} }
} }
} else { } else {
@ -4670,7 +4669,7 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) {
a = SCHEME_CAR(l); a = SCHEME_CAR(l);
/* Test for ISCONST to indicate no set!: */ /* Test for set!: */
if (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED)) { if (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED)) {
pos = SCHEME_TOPLEVEL_POS(a); pos = SCHEME_TOPLEVEL_POS(a);
@ -4794,13 +4793,13 @@ module_optimize(Scheme_Object *data, Optimize_Info *info, int context)
} }
if (next_pos_ready > -1) { if (next_pos_ready > -1) {
if (!ready_table) { if (!fixed_table) {
ready_table = scheme_make_hash_table(SCHEME_hash_ptr); fixed_table = scheme_make_hash_table(SCHEME_hash_ptr);
if (!consts) if (!consts)
consts = scheme_make_hash_table(SCHEME_hash_ptr); consts = scheme_make_hash_table(SCHEME_hash_ptr);
scheme_hash_set(consts, scheme_false, (Scheme_Object *)ready_table); scheme_hash_set(consts, scheme_false, (Scheme_Object *)fixed_table);
} }
scheme_hash_set(ready_table, scheme_make_integer(next_pos_ready), scheme_true); scheme_hash_set(fixed_table, scheme_make_integer(next_pos_ready), scheme_true);
next_pos_ready = -1; next_pos_ready = -1;
} }
} }
@ -4979,9 +4978,9 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in
c = scheme_hash_get((Scheme_Hash_Table *)c, scheme_make_integer(pos)); c = scheme_hash_get((Scheme_Hash_Table *)c, scheme_make_integer(pos));
if (c) { if (c) {
/* We can't inline, but mark the top level as ready, /* We can't inline, but mark the top level as ready and fixed,
so we can avoid null checks in JITed code: */ so we can avoid null checks in JITed code, etc: */
expr = scheme_toplevel_to_flagged_toplevel(expr, SCHEME_TOPLEVEL_READY); expr = scheme_toplevel_to_flagged_toplevel(expr, SCHEME_TOPLEVEL_FIXED);
} }
} }
if (!c) if (!c)

View File

@ -578,14 +578,14 @@ define_values_resolve(Scheme_Object *data, Resolve_Info *rslv)
/* If this is a module-level definition: for each variable, if the /* If this is a module-level definition: for each variable, if the
defined variable doesn't have SCHEME_TOPLEVEL_MUTATED, then defined variable doesn't have SCHEME_TOPLEVEL_MUTATED, then
resolve to a top-level reference with SCHEME_TOPLEVEL_CONST, so resolve to a top-level reference with SCHEME_TOPLEVEL_SEAL, so
that we know to set GLOS_IS_IMMUTATED at run time. */ that we know to set GLOS_IS_IMMUTATED at run time. */
for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { for (l = vars; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) {
a = SCHEME_CAR(l); a = SCHEME_CAR(l);
if (rslv->in_module if (rslv->in_module
&& rslv->enforce_const && rslv->enforce_const
&& (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED))) { && (!(SCHEME_TOPLEVEL_FLAGS(a) & SCHEME_TOPLEVEL_MUTATED))) {
a = scheme_toplevel_to_flagged_toplevel(a, SCHEME_TOPLEVEL_CONST); a = scheme_toplevel_to_flagged_toplevel(a, SCHEME_TOPLEVEL_SEAL);
} }
a = resolve_toplevel(rslv, a, 0); a = resolve_toplevel(rslv, a, 0);
SCHEME_CAR(l) = a; SCHEME_CAR(l) = a;
@ -795,7 +795,8 @@ static int is_lifted_reference(Scheme_Object *v)
return 1; return 1;
return (SAME_TYPE(SCHEME_TYPE(v), scheme_toplevel_type) return (SAME_TYPE(SCHEME_TYPE(v), scheme_toplevel_type)
&& (SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_CONST)); && ((SCHEME_TOPLEVEL_FLAGS(v) & SCHEME_TOPLEVEL_FLAGS_MASK)
>= SCHEME_TOPLEVEL_CONST));
} }
static int is_closed_reference(Scheme_Object *v) static int is_closed_reference(Scheme_Object *v)
@ -2877,7 +2878,7 @@ static int resolve_quote_syntax_pos(Resolve_Info *info)
return info->prefix->num_toplevels; return info->prefix->num_toplevels;
} }
static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr, int keep_ready) static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr, int as_reference)
{ {
int skip, pos; int skip, pos;
@ -2890,10 +2891,7 @@ static Scheme_Object *resolve_toplevel(Resolve_Info *info, Scheme_Object *expr,
return scheme_make_toplevel(skip + SCHEME_TOPLEVEL_DEPTH(expr), /* depth is 0 (normal) or 1 (exp-time) */ return scheme_make_toplevel(skip + SCHEME_TOPLEVEL_DEPTH(expr), /* depth is 0 (normal) or 1 (exp-time) */
pos, pos,
1, 1,
SCHEME_TOPLEVEL_FLAGS(expr) & (SCHEME_TOPLEVEL_CONST SCHEME_TOPLEVEL_FLAGS(expr) & SCHEME_TOPLEVEL_FLAGS_MASK);
| (keep_ready
? SCHEME_TOPLEVEL_READY
: 0)));
} }
static Scheme_Object *shift_toplevel(Scheme_Object *expr, int delta) static Scheme_Object *shift_toplevel(Scheme_Object *expr, int delta)

View File

@ -420,6 +420,10 @@ extern Scheme_Object *scheme_no_arity_property;
extern Scheme_Object *scheme_reduced_procedure_struct; extern Scheme_Object *scheme_reduced_procedure_struct;
/* recycle some constants that can't appear in code: */
#define scheme_constant_key scheme_stack_dump_key
#define scheme_fixed_key scheme_default_prompt_tag
/*========================================================================*/ /*========================================================================*/
/* thread state and maintenance */ /* thread state and maintenance */
/*========================================================================*/ /*========================================================================*/
@ -1222,8 +1226,28 @@ typedef struct Scheme_Toplevel {
#define SCHEME_TOPLEVEL_POS(obj) (((Scheme_Toplevel *)(obj))->position) #define SCHEME_TOPLEVEL_POS(obj) (((Scheme_Toplevel *)(obj))->position)
#define SCHEME_TOPLEVEL_FLAGS(obj) MZ_OPT_HASH_KEY(&((Scheme_Toplevel *)(obj))->iso) #define SCHEME_TOPLEVEL_FLAGS(obj) MZ_OPT_HASH_KEY(&((Scheme_Toplevel *)(obj))->iso)
#define SCHEME_TOPLEVEL_CONST 0x1 /* The MASK pull out one of the levels for reference (CONST,
#define SCHEME_TOPLEVEL_READY 0x2 FIXED, READY, or UNKNOWN) or one of the two levels for a
reference (SEAL or not) */
#define SCHEME_TOPLEVEL_FLAGS_MASK 0x3
/* CONST means that a toplevel is READY and always has the same value,
even for different instantiations or phases. */
#define SCHEME_TOPLEVEL_CONST 3
/* FIXED is READY plus a promise of no mutation, but the value is
not necessarily constant across different instantations or phases. */
#define SCHEME_TOPLEVEL_FIXED 2
/* READY means that the toplevel will have a value (i.e., the variable
is defined), though it might be mutated later */
#define SCHEME_TOPLEVEL_READY 1
/* UNKNOWN means that the variable might not even be defined by the time the
toplevel reference is executed */
#define SCHEME_TOPLEVEL_UNKNOWN 0
#define SCHEME_TOPLEVEL_SEAL 0x1
/* MUTATED is used on the toplevel for a definition, and only until
after resolving; it records whether a toplevel is `set!'ed */
#define SCHEME_TOPLEVEL_MUTATED 0x4 #define SCHEME_TOPLEVEL_MUTATED 0x4
typedef struct Scheme_Quote_Syntax { typedef struct Scheme_Quote_Syntax {
@ -2374,7 +2398,6 @@ Scheme_Object *scheme_make_toplevel(mzshort depth, int position, int resolved, i
#define MAX_CONST_TOPLEVEL_DEPTH 16 #define MAX_CONST_TOPLEVEL_DEPTH 16
#define MAX_CONST_TOPLEVEL_POS 16 #define MAX_CONST_TOPLEVEL_POS 16
#define SCHEME_TOPLEVEL_FLAGS_MASK 0x3
#define ASSERT_IS_VARIABLE_BUCKET(b) /* if (((Scheme_Object *)b)->type != scheme_variable_type) abort() */ #define ASSERT_IS_VARIABLE_BUCKET(b) /* if (((Scheme_Object *)b)->type != scheme_variable_type) abort() */
@ -3046,13 +3069,17 @@ typedef struct Scheme_Modidx {
} Scheme_Modidx; } Scheme_Modidx;
typedef struct Module_Variable { typedef struct Module_Variable {
Scheme_Inclhash_Object iso; /* 0x1 flag => constant */ Scheme_Inclhash_Object iso; /* see SCHEME_MODVAR_... flags */
Scheme_Object *modidx; Scheme_Object *modidx;
Scheme_Object *sym; Scheme_Object *sym;
Scheme_Object *insp; /* for checking protected/unexported access */ Scheme_Object *insp; /* for checking protected/unexported access */
int pos, mod_phase; int pos, mod_phase;
} Module_Variable; } Module_Variable;
/* See SCHEME_TOPLEVEL_...: */
#define SCHEME_MODVAR_CONST 0x1
#define SCHEME_MODVAR_FIXED 0x2
#define SCHEME_MODVAR_FLAGS(pr) MZ_OPT_HASH_KEY(&((Module_Variable *)pr)->iso) #define SCHEME_MODVAR_FLAGS(pr) MZ_OPT_HASH_KEY(&((Module_Variable *)pr)->iso)
#define SCHEME_VARREF_FLAGS(pr) MZ_OPT_HASH_KEY(&((Scheme_Simple_Object *)pr)->iso) #define SCHEME_VARREF_FLAGS(pr) MZ_OPT_HASH_KEY(&((Scheme_Simple_Object *)pr)->iso)

View File

@ -13,12 +13,12 @@
consistently.) consistently.)
*/ */
#define MZSCHEME_VERSION "5.1.3.1" #define MZSCHEME_VERSION "5.1.3.2"
#define MZSCHEME_VERSION_X 5 #define MZSCHEME_VERSION_X 5
#define MZSCHEME_VERSION_Y 1 #define MZSCHEME_VERSION_Y 1
#define MZSCHEME_VERSION_Z 3 #define MZSCHEME_VERSION_Z 3
#define MZSCHEME_VERSION_W 1 #define MZSCHEME_VERSION_W 2
#define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y)
#define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W)