diff --git a/collects/compiler/private/xform.ss b/collects/compiler/private/xform.ss index 7c47102cff..efe7fbb284 100644 --- a/collects/compiler/private/xform.ss +++ b/collects/compiler/private/xform.ss @@ -672,6 +672,7 @@ (printf "#define NULL_OUT_ARRAY(a) memset(a, 0, sizeof(a))~n") ;; Annotation that normally disappears: (printf "#define GC_CAN_IGNORE /**/~n") + (printf "#define __xform_nongcing__ /**/~n") ;; Another annotation to protect against GC conversion: (printf "#define HIDE_FROM_XFORM(x) x~n") (printf "#define HIDE_NOTHING_FROM_XFORM() /**/~n") @@ -830,21 +831,24 @@ non-functions) ht)) - (define non-gcing-functions + (define non-gcing-builtin-functions ;; The following don't need wrappers, but we need to check for ;; nested function calls because it takes more than one argument: (append '(memcpy memmove strcmp strcoll strcpy _mzstrcpy strcat memset printf sprintf vsprintf vprintf - strncmp scheme_strncmp - read write - bigdig_length) + strncmp + read write) (map string->symbol '("XTextExtents" "XTextExtents16" "XDrawImageString16" "XDrawImageString" "XDrawString16" "XDrawString")))) + (define non-gcing-functions (make-hash-table)) + (for-each (lambda (name) + (hash-table-put! non-gcing-functions name #t)) + non-gcing-builtin-functions) (define non-returning-functions ;; The following functions never return, so the wrappers @@ -991,7 +995,9 @@ (set! pointer-types (list-ref l 4)) (set! non-pointer-types (list-ref l 5)) - (set! struct-defs (list-ref l 6)))) + (set! struct-defs (list-ref l 6)) + + (set! non-gcing-functions (hash-table-copy (list-ref l 7))))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Pretty-printing output @@ -1335,7 +1341,9 @@ e))] [(proc-prototype? e) (let ([name (register-proto-information e)]) - (when show-info? + (when (eq? (tok-n (car e)) '__xform_nongcing__) + (hash-table-put! non-gcing-functions name #t)) + (when show-info? (printf "/* PROTO ~a */~n" name)) (if (or precompiling-header? (> (hash-table-get used-symbols name) 1) @@ -1367,6 +1375,8 @@ e))))] [(function? e) (let ([name (register-proto-information e)]) + (when (eq? (tok-n (car e)) '__xform_nongcing__) + (hash-table-put! non-gcing-functions name #t)) (when show-info? (printf "/* FUNCTION ~a */~n" name)) (if (or (positive? suspend-xform) (not pgc?) @@ -1587,7 +1597,9 @@ (let ([name (tok-n (car e))] [type (let loop ([t (reverse type)]) (if (pair? t) - (if (memq (tok-n (car t)) '(extern static inline virtual __stdcall __cdecl _inline __inline __inline__)) + (if (memq (tok-n (car t)) '(extern static virtual __stdcall __cdecl + inline _inline __inline __inline__ + __xform_nongcing__)) (loop (cdr t)) (cons (car t) (loop (cdr t)))) t))] @@ -2088,6 +2100,7 @@ ;; Temporary state used during a conversion: (define used-self? #f) (define important-conversion? #f) + (define saw-gcing-call #f) (define (new-vars->decls vars) (apply @@ -2186,6 +2199,7 @@ (seq-close body-v) (let-values ([(orig-body-e) (begin (set! important-conversion? #f) + (set! saw-gcing-call #f) body-e)] [(body-e live-vars) ;; convert-body does most of the conversion work, and also @@ -2247,14 +2261,26 @@ e (lambda (name class-name type args static?) type)))]) + (if (hash-table-get non-gcing-functions name (lambda () #f)) + (when saw-gcing-call + (log-error "[GCING] ~a in ~a: Function ~a declared __xform_nongcing__, but includes a function call." + (tok-line saw-gcing-call) (tok-file saw-gcing-call) + name)) + (unless saw-gcing-call + ' + (fprintf (current-error-port) + "[SUGGEST] Consider declaring ~a as __xform_nongcing__.\n" + name))) (if (and (not important-conversion?) (not (and function-name (eq? class-name function-name))) - (null? (live-var-info-new-vars live-vars)) - (zero? (live-var-info-maxpush live-vars)) - (or (<= (live-var-info-num-calls live-vars) 1) - (= (live-var-info-num-calls live-vars) - (live-var-info-num-noreturn-calls live-vars)))) + (or (not saw-gcing-call) + (and + (null? (live-var-info-new-vars live-vars)) + (zero? (live-var-info-maxpush live-vars)) + (or (<= (live-var-info-num-calls live-vars) 1) + (= (live-var-info-num-calls live-vars) + (live-var-info-num-noreturn-calls live-vars)))))) ;; No conversion necessary. (Lack of `call' records means no GC-setup ;; work when printing out the function.) (list->seq @@ -3154,7 +3180,7 @@ [(sub-memcpy?) ;; memcpy, etc. call? (and (pair? (cdr e-)) - (memq (tok-n (cadr e-)) non-gcing-functions))] + (hash-table-get non-gcing-functions (tok-n (cadr e-)) (lambda () #f)))] [(args live-vars) (convert-paren-interior args vars &-vars c++-class @@ -3229,20 +3255,22 @@ (live-var-info-nonempty-calls? live-vars)))]) (loop rest- (let ([call (if (and (null? (cdr func)) - (memq (tok-n (car func)) non-gcing-functions)) + (hash-table-get non-gcing-functions (tok-n (car func)) (lambda () #f))) ;; Call without pointer pushes (make-parens "(" #f #f ")" (list->seq (append func (list args)))) ;; Call with pointer pushes - (make-call - "func call" - #f #f - func - args - pushed-vars - (live-var-info-tag orig-live-vars) - this-nonempty?))]) + (begin + (set! saw-gcing-call (car e-)) + (make-call + "func call" + #f #f + func + args + pushed-vars + (live-var-info-tag orig-live-vars) + this-nonempty?)))]) (cons (if (null? setups) call (make-callstage-parens @@ -3723,7 +3751,8 @@ (marshall pointer-types) (marshall non-pointer-types) - (marshall struct-defs))]) + (marshall struct-defs) + non-gcing-functions)]) (with-output-to-file (change-suffix file-out #".zo") (lambda () (write (compile e))) diff --git a/collects/help/servlets/release/license.ss b/collects/help/servlets/release/license.ss index d4836fe01a..fd7c3b2e2d 100644 --- a/collects/help/servlets/release/license.ss +++ b/collects/help/servlets/release/license.ss @@ -96,4 +96,4 @@ ("GNU lightning" "Copyright (c) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.") ("GNU Classpath" - "Gnu Public Licence with special exception"))))))) + "GNU Public License with special exception"))))))) diff --git a/collects/honu-module/dynamic.ss b/collects/honu-module/dynamic.ss index fc672c27ac..f94638f362 100644 --- a/collects/honu-module/dynamic.ss +++ b/collects/honu-module/dynamic.ss @@ -3,23 +3,15 @@ (require-for-syntax (lib "stx.ss" "syntax") "private/ops.ss" "private/util.ss" - (lib "kerncase.ss" "syntax")) + (lib "kerncase.ss" "syntax") + "private/contexts.ss") (begin-for-syntax (define kernel-forms (kernel-form-identifier-list #'here)) - - (define (top-block-context? ctx) (memq ctx '(top-block))) - (define (return-block-context? ctx) (memq ctx '(return-block))) - (define (block-context? ctx) (memq ctx '(top-block block return-block))) - (define (expression-context? ctx) (memq ctx '(expression))) - (define (type-context? ctx) (memq ctx '(type))) - - (define block-context 'block) - (define return-block-context 'return-block) - (define top-block-context 'top-block) - (define expression-context 'expression) - (define type-context 'type) + (define expand-stop-forms (list* #'honu-typed + #'honu-unparsed-block + kernel-forms)) ;; -------------------------------------------------------- ;; Transformer procedure property and basic struct @@ -62,6 +54,11 @@ (let ([str (symbol->string (syntax-e stx))]) (and (positive? (string-length str)) (memq (string-ref str 0) sym-chars))))))) + + (define (honu-identifier? stx) + (and (identifier? stx) + (not (ormap (lambda (i) (module-identifier=? stx i)) (list #'\; #'\,))) + (not (operator? stx)))) (define (get-transformer stx) (or (and (stx-pair? stx) @@ -104,21 +101,30 @@ [((#%braces . block) . rest) (cons #'block #'rest)] [_else #f]) => (lambda (b+r) - (k #`(honu-unparsed-block #f void-type #f #,(return-block-context? ctx) + (k #`(honu-unparsed-block #f obj #f #,(and (stx-null? (cdr b+r)) + (return-block-context? ctx)) #,@(car b+r)) (cdr b+r)))] - [else (let-values ([(expr-stxs after-expr) (extract-until body (list #'\;))]) + [else (let-values ([(expr-stxs after-expr terminator) (extract-until body (list #'\;))]) (unless expr-stxs (raise-syntax-error #f "expected a semicolon to terminate form" (stx-car body))) + (when (null? expr-stxs) + (raise-syntax-error + #f + "missing expression before terminator" + terminator)) (let ([code ((if (return-block-context? ctx) parse-a-tail-expr parse-an-expr) expr-stxs)]) (k ((if (top-block-context? ctx) - (lambda (x) `(printf "~s\n" ,x)) + (lambda (x) + `(let ([v ,x]) + (unless (void? v) + (printf "~s\n" v)))) values) code) (stx-cdr after-expr))))])) @@ -136,12 +142,13 @@ ;; Parsing expressions (define parse-expr + ;; The given syntax sequence must not be empty (let () (define (parse-expr-seq stx) (define (start-expr stx) (let ([trans (get-transformer stx)]) (if trans - (let-values ([(expr rest) (trans stx expression-context)]) + (let-values ([(expr rest) (trans stx the-expression-context)]) (if (stx-null? rest) (list expr) (cons expr (start-operator rest)))) @@ -169,7 +176,7 @@ #f "missing expression inside braces" (stx-car stx)) - (list #'(honu-unparsed-block #f void-type #f #f . pexpr)))] + (list #'(honu-unparsed-block #f obj #f #f . pexpr)))] [(op . more) (and (identifier? #'op) (ormap (lambda (uop) @@ -235,19 +242,19 @@ [(prefix? op) (group (append (reverse (cdr before)) (list (quasisyntax/loc (op-id op) - (#,(op-id op) #,(car before)))) + (honu-app #,(op-id op) #,(car before)))) (reverse since)))] [(postfix? op) (let ([after (reverse since)]) (group (append (reverse before) (list (quasisyntax/loc (op-id op) - (#,(op-id op) #,(car after)))) + (honu-app #,(op-id op) #,(car after)))) (cdr after))))] [(infix? op) (let ([after (reverse since)]) (group (append (reverse (cdr before)) (list (quasisyntax/loc (op-id op) - (#,(op-id op) #,(car before) #,(car after)))) + (honu-app #,(op-id op) #,(car before) #,(car after)))) (cdr after))))] [else (error "not an op!: " op)])] [(not (op? (stx-car seq))) @@ -265,7 +272,7 @@ (define (parse-arg-list stxs) (if (stx-null? stxs) stxs - (let-values ([(val-stxs after-expr) (extract-until stxs (list #'\,))]) + (let-values ([(val-stxs after-expr terminator) (extract-until stxs (list #'\,))]) (when (and val-stxs (stx-null? (stx-cdr after-expr))) (raise-syntax-error @@ -321,30 +328,30 @@ [where-stx orig-args-stx]) (let-values ([(type rest-stx) (if (syntax-case args-stx (\,) [(id \, . rest) - (identifier? #'id) + (honu-identifier? #'id) #t] [(id) - (identifier? #'id) + (honu-identifier? #'id) #t] [_else #f]) - (values (make-h-type #'val #'(begin) #'(lambda (x) (values #t x))) + (values (make-h-type #'obj #'(begin) #'(lambda (x) (values #t x))) args-stx) (let ([trans (get-transformer args-stx)]) (if trans - (trans args-stx type-context) + (trans args-stx the-type-context) (values #f #f))))]) (unless (honu-type? type) (raise-syntax-error '|procedure declaration| - (format "expected a type ~a" where) + (format "expected an identifier or type ~a, found something else" where) where-stx)) (syntax-case rest-stx () [(id) - (identifier? #'id) + (honu-identifier? #'id) (parse-one-argument proc-id type #'id (lambda () null))] [(id comma . rest) - (and (identifier? #'id) + (and (honu-identifier? #'id) (identifier? #'comma) (module-identifier=? #'comma #'\,)) (parse-one-argument proc-id type #'id @@ -353,18 +360,18 @@ "after comma" #'comma)))] [(id something . rest) - (identifier? #'id) + (honu-identifier? #'id) (raise-syntax-error 'procedure\ declaration - "expected a comma after identifier name" + "expected a comma after argument identifier, found something else" #'something)] [_else (raise-syntax-error 'procedure\ declaration - "expected an argument identifier" + "expected an argument identifier, found something else" (car rest-stx))]))))) - (define (make-honu-type pred-id mk-pred-def only-mode) + (define (make-honu-type pred-id mk-pred-def) (make-honu-trans (lambda (orig-stx ctx) (let* ([pred-id (or pred-id @@ -373,17 +380,17 @@ (mk-pred-def pred-id orig-stx) #'(begin))]) (cond - [(block-context? ctx) + [(or (block-context? ctx) + (definition-context? ctx)) (with-syntax ([pred-id pred-id] [type-name (stx-car orig-stx)]) (let loop ([stx (stx-cdr orig-stx)] [after (stx-car orig-stx)] - [after-what "type name"] - [parens-ok? #t]) + [after-what "type name"]) (syntax-case stx () [(id . rest) (begin - (unless (identifier? #'id) + (unless (honu-identifier? #'id) (raise-syntax-error 'declaration (format "expected a identifier after ~a" after-what) (stx-car orig-stx) @@ -391,13 +398,13 @@ (if (and (identifier? (stx-car #'rest)) (module-identifier=? #'set! (stx-car #'rest))) ;; -- Non-procedure declaration - (if (eq? 'function only-mode) + (if (function-definition-context? ctx) (raise-syntax-error 'declaration "expected parentheses after name for function definition" (stx-car #'rest)) - (let-values ([(val-stxs after-expr) (extract-until (stx-cdr #'rest) - (list #'\; #'\,))]) + (let-values ([(val-stxs after-expr terminator) (extract-until (stx-cdr #'rest) + (list #'\; #'\,))]) (unless val-stxs (raise-syntax-error 'declaration @@ -408,22 +415,23 @@ 'declaration "missing expression initializing assignment" (stx-car #'rest))) - (let ([def #`(define-typed id #f type-name pred-id - (check-expr #f 'id type-name pred-id - (honu-unparsed-expr #,@val-stxs)))]) + (let ([def #`(define-typed id + #,(constant-definition-context? ctx) + #f type-name pred-id + (check-expr-type #f 'id type-name pred-id + (honu-unparsed-expr #,@val-stxs)))]) (if (module-identifier=? #'\; (stx-car after-expr)) (values #`(begin #,pred-def #,def) (stx-cdr after-expr)) (let-values ([(defs remainder kind) (loop (stx-cdr after-expr) (stx-car after-expr) "comma" #f)]) (values #`(begin #,pred-def #,def #,defs) remainder)))))) ;; -- Procedure declaration - (if (eq? 'var only-mode) + (if (value-definition-context? ctx) (raise-syntax-error 'declaration - "expected = after name for variable" + (format "expected = after name in ~a context" (context->name ctx)) (stx-car #'rest)) (syntax-case #'rest (#%parens \;) [((#%parens . prest) (#%braces . body) . rest) - parens-ok? (let ([args (parse-arguments #'prest #'id)]) (with-syntax ([((arg arg-type arg-pred-def arg-pred-id) ...) args] [(temp-id ...) (generate-temporaries (map car args))]) @@ -431,14 +439,14 @@ #,pred-def arg-pred-def ... (define-typed-procedure id + type-name ((arg arg-type arg-pred-id) ...) (lambda (temp-id ...) - (define-typed arg id arg-type arg-pred-id temp-id) ... + (define-typed arg #f id arg-type arg-pred-id temp-id) ... (honu-unparsed-block id type-name pred-id #t . body)))) #'rest)))] ;; --- Error handling --- [((#%parens . prest) . bad-rest) - parens-ok? (begin (parse-arguments #'prest #'id) (raise-syntax-error @@ -446,30 +454,26 @@ "braces for function body after parenthesized arguments" (stx-car #'rest) #'id))] - [_else + [(id . _) (raise-syntax-error '|declaration| - (if parens-ok? - "expected either = (for variable intialization) or parens (for function arguments)" - "expected = (for variable initialization)") + (cond + [(constant-definition-context? ctx) "expected = (for constant initialization)"] + [(variable-definition-context? ctx) "expected = (for variable initialization)"] + [(function-definition-context? ctx) "expected parens (for function arguments)"] + [else + "expected either = (for variable intialization) or parens (for function arguments)"]) #'id)]))))] [_else (raise-syntax-error #f (format "expected a identifier after ~a" after-what) after #'id)])))] - [only-mode - (raise-syntax-error #f - (format "illegal in an ~a context" - (if (type-context? ctx) - "type" - "expression")) - (stx-car orig-stx))] [(type-context? ctx) (values (make-h-type (stx-car orig-stx) pred-def pred-id) (stx-cdr orig-stx))] - [(expression-context? ctx) + [else (raise-syntax-error #f - "illegal in an expression context" + (format "illegal in ~a context" (context->name ctx)) (stx-car orig-stx))]))))) (define (make-proc-predicate name form) @@ -494,7 +498,7 @@ (raise-type-error '-> "non-type within a procedure-type construction" (stx-car args-stx))) - (let-values ([(type rest-stx) (trans args-stx type-context)]) + (let-values ([(type rest-stx) (trans args-stx the-type-context)]) (cons type (loop rest-stx))))))] [result-type (let ([trans (get-transformer result-stx)]) @@ -502,7 +506,7 @@ (raise-type-error '-> "non-type in result position for procedure-type construction" (stx-car result-stx))) - (let-values ([(type rest-stx) (trans result-stx type-context)]) + (let-values ([(type rest-stx) (trans result-stx the-type-context)]) (unless (stx-null? rest-stx) (raise-type-error '-> "extra tokens following result for procedure-type construction" @@ -523,72 +527,110 @@ (if (and (procedure? v) (procedure-arity-includes? v n)) (values #t (lambda (arg ...) - (check-expr + (check-expr-type #f #t result-type result-pred-id - (v (check-expr #f #f arg-type arg-pred-id arg) ...)))) + (v (check-expr-type #f #f arg-type arg-pred-id arg) ...)))) (values #f #f)))))))) - (define (compatible-type? val-expr val-type target-type) + (define (check-compatible-type val-expr val-type target-type fail-k) (and (identifier? target-type) - (identifier? val-type) - (or (module-identifier=? val-type target-type) - (module-identifier=? #'val target-type) - (and (number? (syntax-e val-expr)) - (module-identifier=? #'num target-type)) - (and (integer? (syntax-e val-expr)) - (exact? (syntax-e val-expr)) - (module-identifier=? #'int target-type)) - (and (real? (syntax-e val-expr)) - (module-identifier=? #'real target-type)) - (and (string? (syntax-e val-expr)) - (module-identifier=? #'string-type target-type)))))) - - (define (check proc who type-name pred val) - (let-values ([(tst new-val) (pred val)]) - (unless tst - (raise - (make-exn:fail:contract - (string->immutable-string - (format "~a: expected ~a value for ~a, got something else: ~e" - (or proc (if (eq? who #t) #f who) "procedure") - type-name - (cond - [(eq? who #t) "result"] - [else (if proc - (format "~a argument" who) - (if who - "initialization" - "argument"))]) - val)) - (current-continuation-marks)))) - new-val)) + (or (module-identifier=? #'obj target-type) + (and (identifier? val-type) + (module-identifier=? val-type target-type)) + (let ([val-type + (if (not val-type) + (cond + [(and (integer? (syntax-e val-expr)) + (exact? (syntax-e val-expr))) #'int] + [(real? (syntax-e val-expr)) #'real] + [(number? (syntax-e val-expr)) #'num] + [(string? (syntax-e val-expr)) #'string-type] + [(boolean? (syntax-e val-expr)) #'bool] + [(identifier? val-expr) + (cond + [(module-identifier=? #'false val-expr) #'bool] + [(module-identifier=? #'true val-expr) #'bool] + [else #'obj])] + [else #'obj]) + val-type)]) + (or (module-identifier=? val-type target-type) + (and (module-identifier=? #'num target-type) + (or (module-identifier=? val-type #'int) + (module-identifier=? val-type #'real))) + (and (module-identifier=? #'real target-type) + (or (module-identifier=? val-type #'int))) + (if (module-identifier=? val-type #'obj) + #f + (fail-k val-expr val-type target-type))))))) - (define-syntax (check-expr stx) + (define (type-mismatch val-expr val-type target-type) + (raise-syntax-error + '|type mismatch| + (format "actual type ~a does not match expected type ~a" + (syntax-object->datum val-type) + (syntax-object->datum target-type)) + val-expr))) + + (define (check proc who type-name pred val) + (let-values ([(tst new-val) (pred val)]) + (unless tst + (raise + (make-exn:fail:contract + (string->immutable-string + (format "~a: expected ~a value for ~a, got something else: ~e" + (or proc (if (eq? who #t) #f who) "procedure") + type-name + (cond + [(eq? who #t) "result"] + [else (if proc + (format "~a argument" who) + (if who + "initialization" + "argument"))]) + val)) + (current-continuation-marks)))) + new-val)) + + (define-syntax (check-expr-type stx) (syntax-case stx () [(_ proc who type-name pred val) ;; Avoid the check if the static types are consistent (let ([v (local-expand #'val 'expression - (cons #'honu-typed - kernel-forms))]) - (syntax-case v (honu-typed) + expand-stop-forms)]) + (syntax-case v (honu-typed if let-values) [(honu-typed val val-type) - (compatible-type? #'val #'val-type #'type-name) + (check-compatible-type #'val #'val-type #'type-name type-mismatch) ;; No run-time check: #'val] + [(if t then else) + ;; propagate check to body: + #'(if t + (check-expr-type proc who type-name pred then) + (check-expr-type proc who type-name pred else))] + [(let-values bindings body) + #'(let-values bindings + (check-expr-type proc who type-name pred body))] + [(honu-unparsed-block #f _ #f return-context? . body) + #'(honu-unparsed-block who type-name pred return-context? . body)] [_else ;; Even without a type for v, we might see a literal, ;; or maybe the declaration is simply val - (if (compatible-type? v #'val #'type-name) + (if (check-compatible-type v #f #'type-name type-mismatch) ;; No run-time check: - #'val + v ;; Run-time check: - #'(check proc who 'type-name pred val))]))])) + (with-syntax ([val v]) + #'(check proc who 'type-name pred val)))]))])) + + (define-syntax honu-app + (syntax-rules () + [(_ a b ...) (a b ...)])) (define-syntax (define-typed stx) (syntax-case stx () - [(_ id proc-name type-name pred-id val) + [(_ id const? proc-name type-name pred-id val) (with-syntax ([gen-id (car (generate-temporaries (list #'id)))]) #'(begin (define gen-id val) @@ -597,47 +639,58 @@ (lambda (stx) (syntax-case stx (set!) [(set! id rhs) - #'(set! gen-id (check-expr set! id type-name pred-id rhs))] + (if const? + (raise-syntax-error #f "cannot assign to constant" #'id) + #'(set! gen-id (check-expr-type 'set! id type-name pred-id rhs)))] [(id arg (... ...)) - #'(#%app (honu-typed gen-id type-name) arg (... ...))] + #'(honu-app (honu-typed gen-id type-name) arg (... ...))] [id #'(honu-typed gen-id type-name)]))))))])) + (define-for-syntax (make-typed-procedure gen-id result-spec arg-spec) + (with-syntax ([((arg arg-type pred-id) ...) arg-spec] + [result-spec result-spec] + [gen-id gen-id]) + (make-set!-transformer + (lambda (stx) + (syntax-case stx (set!) + [(set! id rhs) + (raise-syntax-error #f + "cannot assign to procedure name" + stx + #'id)] + [(id actual-arg ...) + (let ([actual-args (syntax->list #'(actual-arg ...))] + [formal-args (syntax->list #'(arg ...))]) + (unless (= (length actual-args) + (length formal-args)) + (raise-syntax-error + 'id + (format "expects ~a arguments, provided ~a" + (length formal-args) + (length actual-args)) + stx)) + #'(honu-typed (#%app (honu-typed gen-id type-name) + (check-expr-type 'id 'arg arg-type pred-id actual-arg) + ...) + result-spec))] + [id + #'(honu-need-type gen-id + (let ([id (lambda (arg ...) + (id arg ...))]) + id) + type-name)]))))) + + (provide honu-typed check-expr-type) ; <-------- FIXME. These shouldn't be exported. + (define-syntax (define-typed-procedure stx) (syntax-case stx () - [(_ id arg-spec val) + [(_ id result-spec arg-spec val) (with-syntax ([gen-id (car (generate-temporaries (list #'id)))]) #'(begin (define gen-id val) (define-syntax id - (with-syntax ([((arg arg-type pred-id) (... ...)) (quote-syntax arg-spec)]) - (make-set!-transformer - (lambda (stx) - (syntax-case stx (set!) - [(set! id rhs) - (raise-syntax-error #f - "cannot assign to procedure name" - stx - #'id)] - [(id actual-arg (... ...)) - (let ([actual-args (syntax->list #'(actual-arg (... ...)))] - [formal-args (syntax->list #'(arg (... ...)))]) - (unless (= (length actual-args) - (length formal-args)) - (raise-syntax-error - 'id - (format "expects ~a arguments, provided ~a" - (length formal-args) - (length actual-args)) - stx)) - #'(#%app (honu-typed gen-id type-name) - (check-expr 'id 'arg arg-type pred-id actual-arg) - (... ...)))] - [id - #'(honu-typed (let ([id (lambda (arg (... ...)) - (id arg (... ...)))]) - id) - type-name)])))))))])) + (make-typed-procedure (quote-syntax gen-id) (quote-syntax result-spec) (quote-syntax arg-spec)))))])) (define-syntax honu-typed (syntax-rules () @@ -659,7 +712,7 @@ (let ([expr (local-expand expr (generate-expand-context) - kernel-forms)]) + expand-stop-forms)]) (syntax-case expr (begin) [(begin . rest) (loop (syntax->list #'rest))] @@ -675,15 +728,15 @@ proc-id (syntax-e proc-id)) (reverse (cons - #`(check-expr '#,proc-id #t - #,result-type-name - #,result-pred-id - #,(car prev-exprs)) + #`(check-expr-type '#,proc-id #t + #,result-type-name + #,result-pred-id + #,(car prev-exprs)) (cdr prev-exprs))) (begin (unless (or (not proc-id) (not (syntax-e proc-id)) - (module-identifier=? #'type-name #'void-type)) + (module-identifier=? #'type-name #'obj)) (error "no expression for type check; should have been " "caught earlier")) (reverse prev-exprs))) @@ -710,8 +763,8 @@ #`(honu-block proc-id result-type-name result-pred-id #,@(parse-block #'body (if (syntax-e #'return-context?) - return-block-context - block-context)))])) + the-return-block-context + the-block-context)))])) (define-syntax (honu-unparsed-expr stx) (syntax-case stx () @@ -723,7 +776,7 @@ (define-syntax (#%parens stx) (syntax-case stx () - [(_ rator (rand ...)) (syntax/loc #'rator (rator rand ...))])) + [(_ rator (rand ...)) (syntax/loc #'rator (honu-app rator rand ...))])) ;; -------------------------------------------------------- ;; Defining a new transformer or new type @@ -744,13 +797,13 @@ (define pred-id (let ([pred pred-expr]) (lambda (v) (values (pred v) v)))) - (define-syntax id (make-honu-type #'pred-id #f #f))))])) + (define-syntax id (make-honu-type #'pred-id #f))))])) (define-syntax (define-type-constructor stx) (syntax-case stx () [(_ id generator-expr) (identifier? #'id) - #'(define-syntax id (make-honu-type #f generator-expr #f))])) + #'(define-syntax id (make-honu-type #f generator-expr))])) ;; ---------------------------------------- ;; Pre-defined types and forms @@ -759,13 +812,44 @@ (and (integer? v) (exact? v))) (define-type int exact-integer?) + (define-type bool boolean?) (define-type real real?) (define-type num number?) (define-type obj (lambda (x) #t)) (define-type string-type string?) - (define-syntax function (make-honu-type #'(lambda (x) (values #t x)) #f 'function)) - (define-syntax var (make-honu-type #'(lambda (x) (values #t x)) #f 'var)) + (define-for-syntax (make-definition-form what this-context this-context?) + (make-honu-transformer + (lambda (orig-stx ctx) + (when (this-context? ctx) + (raise-syntax-error #f + (format "redundant in ~a context" (context->name ctx)) + (stx-car orig-stx))) + (unless (block-context? ctx) + (raise-syntax-error #f + (format "illegal in ~a context" (context->name ctx)) + (stx-car orig-stx))) + (let ([body (stx-cdr orig-stx)]) + (cond + [(stx-null? body) + (raise-syntax-error #f + (format "expected a ~a definition after keyword" what) + (stx-car orig-stx))] + [(get-transformer body) + => (lambda (transformer) + (transformer body this-context))] + [else + (let ([id (stx-car orig-stx)]) + (unless (honu-identifier? id) + (raise-syntax-error #f + (format "expected an identifier for a ~a definition" what) + (stx-car orig-stx) + id)) + ((make-honu-type #'(lambda (x) (values #t x)) #f) orig-stx this-context))]))))) + + (define-syntax function (make-definition-form 'function the-function-definition-context function-definition-context?)) + (define-syntax var (make-definition-form 'variable the-variable-definition-context variable-definition-context?)) + (define-syntax const (make-definition-form 'variable the-constant-definition-context constant-definition-context?)) (define-type-constructor -> make-proc-predicate) @@ -781,7 +865,6 @@ [(other rest) (loop #'rest null (stx-car body))]) (values (combine one other) rest))] [(\; . rest) - (identifier? #'id) (values (parse-one (reverse accum) prev-comma (stx-car body)) #'rest)] [(x . rest) (loop #'rest (cons #'x accum) #f)]))]))) @@ -796,7 +879,7 @@ (lambda (stxes prev-comma-stx term-stx) (syntax-case stxes () [(id) - (identifier? #'id) + (honu-identifier? #'id) #`(provide id)] [else (raise-syntax-error @@ -890,7 +973,7 @@ (car stxes) (stx-car body))] [(fn) - (identifier? #'fn) + (honu-identifier? #'fn) #'fn] [else (raise-syntax-error @@ -902,13 +985,13 @@ (syntax-case stxes (rename #%parens \,) [(rename (#%parens spec0 spec ... \, local-id \, remote-id) . rest) (begin - (unless (identifier? #'local-id) + (unless (honu-identifier? #'local-id) (raise-syntax-error #f "expected an identifier" (stx-car stxes) #'local-id)) - (unless (identifier? #'remote-id) + (unless (honu-identifier? #'remote-id) (raise-syntax-error #f "expected an identifier" @@ -935,8 +1018,8 @@ (lambda (stx ctx) (unless (return-block-context? ctx) (raise-syntax-error #f "allowed only in a tail position" (stx-car stx))) - (let-values ([(val-stxs after-expr) (extract-until (stx-cdr stx) - (list #'\;))]) + (let-values ([(val-stxs after-expr terminator) (extract-until (stx-cdr stx) + (list #'\;))]) (unless val-stxs (raise-syntax-error #f @@ -962,12 +1045,10 @@ (lambda (stx ctx) (define (get-block-or-statement kw rest) (syntax-case rest (#%braces) - [((#%braces then ...) . rest) - (values #`(honu-unparsed-block #f void-type #f #,(return-block-context? ctx) then ...) - #'rest)] + [((#%braces then ...) . rrest) + (values (stx-cdr (stx-car rest)) #'rrest)] [else - (let-values ([(val-stxs rest) (extract-until rest - (list #'\;))]) + (let-values ([(val-stxs rest terminator) (extract-until rest (list #'\;) #t)]) (unless val-stxs (raise-syntax-error #f @@ -979,34 +1060,82 @@ "expected an expression before semicolon" kw (stx-car rest))) - (if (return-block-context? ctx) - (values (parse-tail-expr val-stxs) (stx-cdr rest)) - (values (parse-expr val-stxs) (stx-cdr rest))))])) + (values val-stxs (stx-cdr rest)))])) + + (define (wrap-block exprs rest) + #`(honu-unparsed-block #f obj #f #,(and (return-block-context? ctx) + (stx-null? rest)) + . #,exprs)) (syntax-case stx (#%parens) [(_ (#%parens test ...) . rest) - (let ([test-expr (parse-expr (syntax->list #'(test ...)))]) - (let-values ([(then-expr rest) (get-block-or-statement (stx-car stx) #'rest)]) - (syntax-case rest (else) - [(else . rest2) - (let-values ([(else-expr rest) (get-block-or-statement (stx-car rest) #'rest2)]) - (values #`(if #,test-expr #,then-expr #,else-expr) - rest))] - [_else - (values #`(if #,test-expr #,then-expr) rest)])))] + (let* ([tests #'(test ...)]) + (when (stx-null? tests) + (raise-syntax-error + #f + "missing test expression" + (stx-car stx) + (stx-car (stx-cdr stx)))) + (let ([test-expr (parse-expr (syntax->list tests))]) + (let-values ([(then-exprs rest) (get-block-or-statement (stx-car stx) #'rest)]) + (syntax-case rest (else) + [(else . rest2) + (let-values ([(else-exprs rest) (get-block-or-statement (stx-car rest) #'rest2)]) + (values #`(if #,test-expr + #,(wrap-block then-exprs rest) + #,(wrap-block else-exprs rest)) + rest))] + [_else + (values #`(if #,test-expr #,(wrap-block then-exprs rest) (void)) rest)]))))] [_else (raise-syntax-error #f "expected a parenthesized test after `if' keyword" (stx-car stx))]))) + ;; ---------------------------------------- + ;; Class form + + (define-honu-syntax honu-class + (lambda (stx ctx) + (syntax-case stx (#%braces) + [(form id . rest) + (not (honu-identifier? #'id)) + (raise-syntax-error + #f + "expected an identifier for the class" + #'form + #'id)] + [(form id (#%braces content ...) . rest) + (let ([id #'id]) + + + 10)] + [(form) + (raise-syntax-error + #f + "missing name for the class" + #'form)] + [(form id next . _) + (raise-syntax-error + #f + "expected braces after class name, found something else" + #'form + #'next)] + [(form id) + (raise-syntax-error + #f + "missing braces after class name" + #'form + #'id)]))) + ;; ---------------------------------------- ;; Main compiler loop (define-syntax (honu-unparsed-begin stx) (syntax-case stx () [(_) #'(begin)] - [(_ . body) (let-values ([(code rest) (parse-block-one top-block-context + [(_ . body) (let-values ([(code rest) (parse-block-one the-top-block-context #'body values (lambda () @@ -1024,13 +1153,14 @@ (define true #t) (define false #f) - (provide int real obj - function var + (provide int real bool obj + function var const (rename string-type string) -> \; (rename set! =) (rename honu-return return) (rename honu-if if) + (rename honu-class class) + - * / (rename modulo %) (rename string->number stringToNumber) (rename number->string numberToString) diff --git a/collects/honu-module/private/contexts.ss b/collects/honu-module/private/contexts.ss new file mode 100644 index 0000000000..884aa3ba88 --- /dev/null +++ b/collects/honu-module/private/contexts.ss @@ -0,0 +1,60 @@ +(module contexts mzscheme + + (define-struct block-context ()) + (define-struct (top-block-context block-context) ()) + (define-struct (return-block-context block-context) ()) + + (define-struct definition-context ()) + (define-struct (function-definition-context definition-context) ()) + (define-struct (value-definition-context definition-context) ()) + (define-struct (constant-definition-context value-definition-context) ()) + (define-struct (variable-definition-context value-definition-context) ()) + + (define-struct expression-context ()) + (define-struct type-context ()) + + (define the-block-context (make-block-context)) + (define the-top-block-context (make-top-block-context)) + (define the-return-block-context (make-return-block-context)) + + (define the-function-definition-context (make-function-definition-context)) + (define the-variable-definition-context (make-variable-definition-context)) + (define the-constant-definition-context (make-constant-definition-context)) + + (define the-expression-context (make-expression-context)) + (define the-type-context (make-type-context)) + + (define (context->name ctx) + (cond + [(type-context? ctx) "a type"] + [(block-context? ctx) "a block"] + [(variable-definition-context? ctx) "a variable-definition"] + [(constant-definition-context? ctx) "a constant-definition"] + [(function-definition-context? ctx) "a function-definition"] + [else "an expression"])) + + (provide block-context? + top-block-context? + return-block-context? + + definition-context? + function-definition-context? + value-definition-context? + variable-definition-context? + constant-definition-context? + + expression-context? + type-context? + + the-block-context + the-top-block-context + the-return-block-context + + the-function-definition-context + the-variable-definition-context + the-constant-definition-context + + the-expression-context + the-type-context + + context->name)) diff --git a/collects/honu-module/private/util.ss b/collects/honu-module/private/util.ss index 7bf4d00520..21402e3cba 100644 --- a/collects/honu-module/private/util.ss +++ b/collects/honu-module/private/util.ss @@ -4,16 +4,24 @@ (require (lib "stx.ss" "syntax")) - (define (extract-until r ids) - (let loop ([r r][val-stxs null]) - (cond - [(stx-null? r) - (values #f #f)] - [(and (identifier? (stx-car r)) - (ormap (lambda (id) - (module-identifier=? id (stx-car r))) - ids)) - (values (reverse val-stxs) r)] - [else - (loop (stx-cdr r) (cons (stx-car r) val-stxs))])))) + (define extract-until + (case-lambda + [(r ids keep?) + (let loop ([r r][val-stxs null]) + (cond + [(stx-null? r) + (values #f #f #f)] + [(and (identifier? (stx-car r)) + (ormap (lambda (id) + (module-identifier=? id (stx-car r))) + ids)) + (values (reverse (if keep? + (cons (stx-car r) val-stxs) + val-stxs)) + r + (stx-car r))] + [else + (loop (stx-cdr r) (cons (stx-car r) val-stxs))]))] + [(r ids) (extract-until r ids #f)]))) + diff --git a/collects/planet/resolver.ss b/collects/planet/resolver.ss index a974a1e858..37a75c09f6 100644 --- a/collects/planet/resolver.ss +++ b/collects/planet/resolver.ss @@ -169,14 +169,16 @@ an appropriate subdirectory. (define install? (make-parameter #t)) ;; if #f, will not install packages and instead give an error - (define (resolver spec module-path stx) - ;; ensure these directories exist - (make-directory* (PLANET-DIR)) - (make-directory* (CACHE-DIR)) - (establish-diamond-property-monitor) - (cond - [(or spec stx) (planet-resolve spec module-path stx)] - [else module-path])) + (define resolver + (case-lambda + [(name) (void)] + [(spec module-path stx load?) + ;; ensure these directories exist + (make-directory* (PLANET-DIR)) + (make-directory* (CACHE-DIR)) + (establish-diamond-property-monitor) + (planet-resolve spec module-path stx load?)] + [(spec module-path stx) (resolver spec module-path stx #t)])) ; ========================================================================================== ; DIAMOND PROPERTY STUFF @@ -270,10 +272,10 @@ attempted to load version ~a.~a while version ~a.~a was already loaded" ; planet-resolve : PLANET-REQUEST symbol syntax[PLANET-REQUEST] -> symbol ; resolves the given request. Returns a name corresponding to the module in the correct ; environment - (define (planet-resolve spec module-path stx) + (define (planet-resolve spec module-path stx load?) (let-values ([(path pkg) (get-planet-module-path/pkg spec module-path stx)]) (add-pkg-to-diamond-registry! pkg) - (do-require path (pkg-path pkg) module-path stx))) + (do-require path (pkg-path pkg) module-path stx load?))) ;; get-planet-module-path/pkg :PLANET-REQUEST symbol syntax[PLANET-REQUEST] -> path PKG ;; returns the matching package and the file path to the specific request @@ -559,12 +561,13 @@ attempted to load version ~a.~a while version ~a.~a was already loaded" ; do-require : path path symbol syntax -> symbol ; requires the given filename, which must be a module, in the given path. - (define (do-require file-path package-path module-path stx) + (define (do-require file-path package-path module-path stx load?) (parameterize ((current-load-relative-directory package-path)) ((current-module-name-resolver) file-path module-path - stx))) + stx + load?))) ; ============================================================ ; UTILITY diff --git a/collects/tests/mred/item.ss b/collects/tests/mred/item.ss index c398f10c83..c841d804a8 100644 --- a/collects/tests/mred/item.ss +++ b/collects/tests/mred/item.ss @@ -1269,7 +1269,7 @@ (define rb1 (make-object radio-box% "&Left" rb1-l hp callback)) (define rb2-l (list "First" "Last")) (define rb2 (make-object radio-box% "&Center" rb2-l hp callback)) - (define rb3-l (list "Top" "Middle" "Bottom")) + (define rb3-l (list "&Top" "&Middle" "&Bottom")) (define rb3 (make-object radio-box% "&Right" rb3-l hp callback)) (define rbs (list rb1 rb2 rb3)) @@ -1285,8 +1285,8 @@ (with-handlers ([exn? void]) (f rb p) (error "no exn raisd"))))) - (define type-err (mk-err exn:application:type?)) - (define mismatch-err (mk-err exn:application:mismatch?)) + (define type-err (mk-err exn:fail:contract?)) + (define mismatch-err (mk-err exn:fail:contract?)) (define do-sel (lambda (sel n) (for-each (lambda (rb) (sel rb (n rb))) rbs))) (define sel-minus (lambda (sel) (do-sel (type-err sel) (lambda (rb) -1)))) @@ -1472,7 +1472,7 @@ (make-object button% (string-append "Select Bad -1" mname) p2 (lambda (b e) - (with-handlers ([exn:application:type? void]) + (with-handlers ([exn:fail:contract? void]) (method -1) (error "expected a type exception"))))) (make-object button% @@ -1490,7 +1490,7 @@ (make-object button% (string-append "Select Bad X" mname) p2 (lambda (b e) - (with-handlers ([exn:application:mismatch? void]) + (with-handlers ([exn:fail:contract? void]) (method (if numerical? (send c get-number) #f)) @@ -1537,8 +1537,8 @@ (with-handlers ([exn? void]) (send c get-string i) (error "out-of-bounds: no exn")))]) - (bad exn:application:type? -1) - (bad exn:application:mismatch? (send c get-number))) + (bad exn:fail:contract? -1) + (bad exn:fail:contract? (send c get-number))) (unless (not (send c find-string "nada")) (error "find-string of nada wasn't #f")) (for-each diff --git a/collects/tests/mzscheme/number.ss b/collects/tests/mzscheme/number.ss index 8f87c76dcc..7a3d727742 100644 --- a/collects/tests/mzscheme/number.ss +++ b/collects/tests/mzscheme/number.ss @@ -684,6 +684,8 @@ (test 0.25-0.0i / 1 4+0.0i) (test 0.25+0.0i / 1+0.0i 4+0.0i) (test 0 / 0 4+3i) +(test 0.25+0.0i / 1e300+1e300i (* 4 1e300+1e300i)) +(test 0.25+0.0i / 1e-300+1e-300i (* 4 1e-300+1e-300i)) (test 3 / 1 1/3) (test -3 / 1 -1/3) @@ -1333,6 +1335,10 @@ (test 3/4 magnitude -3/4) (test 10.0 magnitude 10.0+0.0i) (test 10.0 magnitude -10.0+0.0i) +(test 10.0 magnitude 0+10.0i) +(test 10 magnitude 0+10i) +(test 141421.0 round (* 1e-295 (magnitude 1e300+1e300i))) +(test 141421.0 round (* 1e+305 (magnitude 1e-300+1e-300i))) (test 0 angle 1) (test 0 angle 1.0) @@ -1622,7 +1628,7 @@ ; Should at least be close... (test 4.0 round (log (exp 4.0))) (test 125.0 round (* 1000 (asin (sin 0.125)))) -(test 125.0d0 round (* 1000 (asin (sin 0.125+0.0d0i)))) +(test 125.0d0 round (* 1000 (magnitude (asin (sin 0.125+0.0d0i))))) (test 125.0 round (* 1000 (asin (sin 1/8)))) (test 125.0 round (* 1000 (acos (cos 0.125)))) (test 125.0d0 round (* 1000 (acos (cos 0.125+0.0d0i)))) diff --git a/collects/tests/mzscheme/stx.ss b/collects/tests/mzscheme/stx.ss index de3ef3bb74..97089f7cb0 100644 --- a/collects/tests/mzscheme/stx.ss +++ b/collects/tests/mzscheme/stx.ss @@ -1069,6 +1069,57 @@ (require @!$m) (test '(10 20 #t) '@!$get @!$get) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Test lazy unmarshaling of renamings and module-name resolution +(let ([load-ok? #t]) + (parameterize ([current-namespace (make-namespace)] + [current-module-name-resolver + (case-lambda + [(a) (void)] + [(name _ __) 'huh?] + [(name _ __ load?) + (unless load-ok? + (test #f 'load-ok load?)) + 'a])]) + (let ([a-code '(module a mzscheme + (provide x y) + (define x 1) + (define y #'x))]) + (eval a-code) + (let ([b-code (let ([p (open-output-bytes)]) + (write (compile + '(module b mzscheme + (require "a") + (provide f) + (define (f) #'x))) + p) + (lambda () + (parameterize ([read-accept-compiled #t]) + (read (open-input-bytes (get-output-bytes p))))))] + [x-id (parameterize ([current-namespace (make-namespace)]) + (eval a-code) + (eval '(require a)) + (eval '#'x))]) + (eval (b-code)) + (eval '(require b)) + (set! load-ok? #f) + (test #f eval '(module-identifier=? (f) #'x)) + (test #t eval `(module-identifier=? (f) (quote-syntax ,x-id))) + (eval '(require a)) + (test #t eval '(module-identifier=? (f) #'x)) + (test #t eval `(module-identifier=? (f) (quote-syntax ,x-id))) + (parameterize ([current-namespace (make-namespace)]) + (eval '(module a mzscheme + (provide y) + (define y 3))) + (set! load-ok? #t) + (eval (b-code)) + (eval '(require b)) + (set! load-ok? #f) + (test #t eval '(module-identifier=? (f) #'x)) + (test #f eval `(module-identifier=? (f) (quote-syntax ,x-id)))))))) + +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/collects/tests/mzscheme/syntax.ss b/collects/tests/mzscheme/syntax.ss index bddcc0270d..0340e9cfd6 100644 --- a/collects/tests/mzscheme/syntax.ss +++ b/collects/tests/mzscheme/syntax.ss @@ -229,6 +229,9 @@ (syntax-test #'(set! x . 1)) (syntax-test #'(set! x 1 . 2)) +(define (set!-not-ever-defined) (set! not-ever-defined (add1 not-ever-defined))) +(err/rt-test (set!-not-ever-defined) exn:fail:contract:variable?) + (set!-values (x) 9) (test 9 'set!-values x) (test (void) 'set!-values (set!-values () (values))) diff --git a/collects/tests/mzscheme/thread.ss b/collects/tests/mzscheme/thread.ss index 2ede9befd1..c7857559bf 100644 --- a/collects/tests/mzscheme/thread.ss +++ b/collects/tests/mzscheme/thread.ss @@ -1184,6 +1184,41 @@ (current-preserved-thread-cell-values post) (test 3 thread-cell-ref c3))))))) + +;; ---------------------------------------- +;; Check that nested continuations sharing saved runstacks +;; work properly: + +(test '(5050 5050) + 'shared-saved-runstacks + (parameterize ([current-thread-initial-stack-size 3]) + (let ([ch (make-channel)] + [r-ch (make-channel)]) + (let ([t (thread + (lambda () + (define (mk-list put) + (let loop ([n 100]) + (if (zero? n) + (let/cc k + (put k) + null) + (cons n (loop (sub1 n)))))) + (define (sum l) + (let loop ([l l]) + (if (null? l) + 0 + (+ (car l) (loop (cdr l)))))) + (let ([c1 #f]) + (let ([l (mk-list (lambda (k) + (sum (mk-list (lambda (k) (channel-put ch k))))))]) + (channel-put r-ch (sum l))))))]) + (let ([k (channel-get ch)]) + (list + (sync r-ch) + (begin + (thread (lambda () (k null))) + (sync r-ch)))))))) + ; -------------------- (report-errs) diff --git a/doc/release-notes/mzscheme/HISTORY b/doc/release-notes/mzscheme/HISTORY index 835dde069a..869c7cee42 100644 --- a/doc/release-notes/mzscheme/HISTORY +++ b/doc/release-notes/mzscheme/HISTORY @@ -1,3 +1,16 @@ +Version 350.2 +Changed the module name resolver protocol so that the resolver is + required to accept 1, 3, and 4 arguments; the new 4-argument mode + supports resolving a module path without loading the module +Changed namespace-attach-module and namespace-unprotect-module + to accept quoted module paths, instead of only symbolic names +Fixed avoidable overflow and undeflow in magnitude and / for + inexact complex numbers + +Version 350.1 +Added define-member-name, member-name-key, and generate-member-key + to class.ss + Version 350, June 2006 JIT compiler: Added just-in-time native-code compiler with a new eval-jit-enabled diff --git a/src/mzscheme/include/mzscheme.exp b/src/mzscheme/include/mzscheme.exp index 453521c697..7ffdac3582 100644 --- a/src/mzscheme/include/mzscheme.exp +++ b/src/mzscheme/include/mzscheme.exp @@ -254,7 +254,7 @@ scheme_utf8_decode_all scheme_utf8_decode_prefix scheme_utf8_decode_to_buffer scheme_utf8_decode_to_buffer_len -scheme_utf8_decode_count +MZ_EXTERN scheme_utf8_encode scheme_utf8_encode_all scheme_utf8_encode_to_buffer @@ -426,7 +426,6 @@ scheme_primitive_module scheme_finish_primitive_module scheme_protect_primitive_provide scheme_make_modidx -scheme_declare_module scheme_apply_for_syntax_in_env scheme_dynamic_require scheme_intern_symbol diff --git a/src/mzscheme/include/mzscheme3m.exp b/src/mzscheme/include/mzscheme3m.exp index 179a477452..150c83d086 100644 --- a/src/mzscheme/include/mzscheme3m.exp +++ b/src/mzscheme/include/mzscheme3m.exp @@ -261,7 +261,7 @@ scheme_utf8_decode_all scheme_utf8_decode_prefix scheme_utf8_decode_to_buffer scheme_utf8_decode_to_buffer_len -scheme_utf8_decode_count +MZ_EXTERN scheme_utf8_encode scheme_utf8_encode_all scheme_utf8_encode_to_buffer @@ -433,7 +433,6 @@ scheme_primitive_module scheme_finish_primitive_module scheme_protect_primitive_provide scheme_make_modidx -scheme_declare_module scheme_apply_for_syntax_in_env scheme_dynamic_require scheme_intern_symbol diff --git a/src/mzscheme/include/mzwin.def b/src/mzscheme/include/mzwin.def index 544663f113..f52892237b 100644 --- a/src/mzscheme/include/mzwin.def +++ b/src/mzscheme/include/mzwin.def @@ -246,7 +246,6 @@ EXPORTS scheme_utf8_decode_prefix scheme_utf8_decode_to_buffer scheme_utf8_decode_to_buffer_len - scheme_utf8_decode_count scheme_utf8_encode scheme_utf8_encode_all scheme_utf8_encode_to_buffer @@ -418,7 +417,6 @@ EXPORTS scheme_finish_primitive_module scheme_protect_primitive_provide scheme_make_modidx - scheme_declare_module scheme_apply_for_syntax_in_env scheme_dynamic_require scheme_intern_symbol diff --git a/src/mzscheme/include/scheme.h b/src/mzscheme/include/scheme.h index 9bff3d5d6d..e6b9fae929 100644 --- a/src/mzscheme/include/scheme.h +++ b/src/mzscheme/include/scheme.h @@ -110,6 +110,12 @@ typedef long FILE; # define MZ_SIGSET(s, f) sigset(s, f) #endif +#ifdef MZ_XFORM +# define XFORM_NONGCING __xform_nongcing__ +#else +# define XFORM_NONGCING /* empty */ +#endif + #ifdef MZ_XFORM START_XFORM_SUSPEND; #endif diff --git a/src/mzscheme/src/bignum.c b/src/mzscheme/src/bignum.c index 994c6b9b1c..1d6bbfbf87 100644 --- a/src/mzscheme/src/bignum.c +++ b/src/mzscheme/src/bignum.c @@ -590,7 +590,7 @@ static bigdig* allocate_bigdig_array(int length) } /* We don't want to count leading digits of 0 in the bignum's length */ -static int bigdig_length(bigdig* array, int alloced) +XFORM_NONGCING static int bigdig_length(bigdig* array, int alloced) { alloced--; while (alloced >= 0 && array[alloced] == 0) { diff --git a/src/mzscheme/src/complex.c b/src/mzscheme/src/complex.c index a7c97e1d6a..e75fc7811c 100644 --- a/src/mzscheme/src/complex.c +++ b/src/mzscheme/src/complex.c @@ -209,35 +209,76 @@ Scheme_Object *scheme_complex_multiply(const Scheme_Object *a, const Scheme_Obje } -Scheme_Object *scheme_complex_divide(const Scheme_Object *n, const Scheme_Object *d) +Scheme_Object *scheme_complex_divide(const Scheme_Object *_n, const Scheme_Object *_d) { - Scheme_Complex *cn = (Scheme_Complex *)n; - Scheme_Complex *cd = (Scheme_Complex *)d; - Scheme_Object *a_sq_p_b_sq, *r, *i; + Scheme_Complex *cn = (Scheme_Complex *)_n; + Scheme_Complex *cd = (Scheme_Complex *)_d; + Scheme_Object *den, *r, *i, *a, *b, *c, *d, *cm, *dm, *aa[1]; if ((cn->r == zero) && (cn->i == zero)) return zero; + a = cn->r; + b = cn->i; + c = cd->r; + d = cd->i; + /* Check for exact-zero simplifications in d: */ - if (cd->r == zero) { - i = scheme_bin_minus(zero, scheme_bin_div(cn->r, cd->i)); - r = scheme_bin_div(cn->i, cd->i); + if (c == zero) { + i = scheme_bin_minus(zero, scheme_bin_div(a, d)); + r = scheme_bin_div(b, d); return scheme_make_complex(r, i); - } else if (cd->i == zero) { - r = scheme_bin_div(cn->r, cd->r); - i = scheme_bin_div(cn->i, cd->r); + } else if (d == zero) { + r = scheme_bin_div(a, c); + i = scheme_bin_div(b, c); return scheme_make_complex(r, i); } - a_sq_p_b_sq = scheme_bin_plus(scheme_bin_mult(cd->r, cd->r), - scheme_bin_mult(cd->i, cd->i)); + aa[0] = d; + if (SCHEME_TRUEP(scheme_zero_p(1, aa))) { + /* This is like dividing by a real number, except that + the inexact 0 imaginary part can interact with +inf.0 and +nan.0 */ + r = scheme_bin_plus(scheme_bin_div(a, c), + /* Either 0.0 or +nan.0: */ + scheme_bin_mult(d, b)); + i = scheme_bin_minus(scheme_bin_div(b, c), + /* Either 0.0 or +nan.0: */ + scheme_bin_mult(d, a)); + + return scheme_make_complex(r, i); + } + aa[0] = c; + if (SCHEME_TRUEP(scheme_zero_p(1, aa))) { + r = scheme_bin_plus(scheme_bin_div(b, d), + /* Either 0.0 or +nan.0: */ + scheme_bin_mult(c, a)); + i = scheme_bin_minus(scheme_bin_mult(c, b), /* either 0.0 or +nan.0 */ + scheme_bin_div(a, d)); + + return scheme_make_complex(r, i); + } + + aa[0] = c; + cm = scheme_abs(1, aa); + aa[0] = d; + dm = scheme_abs(1, aa); + + if (scheme_bin_lt(cm, dm)) { + cm = a; + a = b; + b = cm; + cm = c; + c = d; + d = cm; + } + + r = scheme_bin_div(c, d); + den = scheme_bin_plus(d, scheme_bin_mult(c, r)); - r = scheme_bin_div(scheme_bin_plus(scheme_bin_mult(cd->r, cn->r), - scheme_bin_mult(cd->i, cn->i)), - a_sq_p_b_sq); - i = scheme_bin_div(scheme_bin_minus(scheme_bin_mult(cd->r, cn->i), - scheme_bin_mult(cd->i, cn->r)), - a_sq_p_b_sq); + i = scheme_bin_div(scheme_bin_minus(a, scheme_bin_mult(b, r)), + den); + r = scheme_bin_div(scheme_bin_plus(b, scheme_bin_mult(a, r)), + den); return scheme_make_complex(r, i); } diff --git a/src/mzscheme/src/cstartup.inc b/src/mzscheme/src/cstartup.inc index 2078999103..b9e84f4570 100644 --- a/src/mzscheme/src/cstartup.inc +++ b/src/mzscheme/src/cstartup.inc @@ -1,5 +1,5 @@ { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,37,252,132,5,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,37,252,132,5,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,65,35,37,115,116,120, 1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,16,30,3,2, 2,71,105,100,101,110,116,105,102,105,101,114,63,4,254,1,30,5,2,2,69, @@ -70,7 +70,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1424); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,80,252,70,10,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,80,252,70,10,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,71,35,37,113,113,45, 97,110,100,45,111,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98, 158,16,1,30,3,2,2,69,113,113,45,97,112,112,101,110,100,4,254,1,16, @@ -139,31 +139,31 @@ 37,9,18,16,2,158,2,12,37,9,18,16,2,100,9,41,35,34,33,16,8, 40,11,2,26,71,117,110,113,117,111,116,101,45,115,116,120,27,1,20,117,110, 113,117,111,116,101,45,115,112,108,105,99,105,110,103,45,115,116,120,28,3,1, -7,101,110,118,50,50,53,54,29,2,29,2,29,16,4,39,11,67,105,110,45, -102,111,114,109,30,3,1,7,101,110,118,50,50,53,55,31,16,6,38,11,61, -120,32,63,111,108,100,33,3,1,7,101,110,118,50,50,53,57,34,2,34,9, +7,101,110,118,50,50,54,48,29,2,29,2,29,16,4,39,11,67,105,110,45, +102,111,114,109,30,3,1,7,101,110,118,50,50,54,49,31,16,6,38,11,61, +120,32,63,111,108,100,33,3,1,7,101,110,118,50,50,54,51,34,2,34,9, 18,16,2,158,65,113,117,111,116,101,35,41,9,18,16,2,100,64,108,105,115, 116,36,43,35,34,33,40,39,16,6,42,11,61,97,37,61,100,38,3,1,7, -101,110,118,50,50,54,48,39,2,39,9,18,16,2,158,2,36,43,9,18,16, +101,110,118,50,50,54,52,39,2,39,9,18,16,2,158,2,36,43,9,18,16, 2,158,65,108,105,115,116,42,40,43,9,18,16,2,158,2,40,43,9,18,16, 2,104,2,6,49,35,34,33,40,39,16,8,48,11,64,102,111,114,109,41,66, -110,111,114,109,97,108,42,2,8,3,1,7,101,110,118,50,50,53,56,43,2, -43,2,43,16,4,47,11,2,9,3,1,7,101,110,118,50,50,54,49,44,16, +110,111,114,109,97,108,42,2,8,3,1,7,101,110,118,50,50,54,50,43,2, +43,2,43,16,4,47,11,2,9,3,1,7,101,110,118,50,50,54,53,44,16, 6,46,11,2,32,65,108,101,118,101,108,45,3,1,7,101,110,118,50,50,54, -50,46,2,46,16,4,45,11,2,10,3,1,7,101,110,118,50,50,54,51,47, -16,4,44,11,65,102,105,114,115,116,48,3,1,7,101,110,118,50,50,54,57, +54,46,2,46,16,4,45,11,2,10,3,1,7,101,110,118,50,50,54,55,47, +16,4,44,11,65,102,105,114,115,116,48,3,1,7,101,110,118,50,50,55,51, 49,9,18,16,2,106,2,4,52,35,34,33,40,39,48,47,46,45,44,16,4, -51,11,64,114,101,115,116,50,3,1,7,101,110,118,50,50,55,50,51,16,8, +51,11,64,114,101,115,116,50,3,1,7,101,110,118,50,50,55,54,51,16,8, 50,11,64,117,113,115,100,52,65,111,108,100,45,108,53,61,108,54,3,1,7, -101,110,118,50,50,55,52,55,2,55,2,55,9,18,16,2,158,94,107,2,35, +101,110,118,50,50,55,56,55,2,55,2,55,9,18,16,2,158,94,107,2,35, 54,35,34,33,40,39,48,47,46,45,44,51,50,16,4,53,11,65,114,101,115, -116,120,56,3,1,7,101,110,118,50,50,55,54,57,158,2,12,54,54,9,18, +116,120,56,3,1,7,101,110,118,50,50,56,48,57,158,2,12,54,54,9,18, 16,2,105,72,108,105,115,116,45,62,118,101,99,116,111,114,58,57,35,34,33, -40,39,48,47,46,45,16,4,56,11,2,54,3,1,7,101,110,118,50,50,55, -55,59,16,4,55,11,62,108,50,60,3,1,7,101,110,118,50,50,55,56,61, +40,39,48,47,46,45,16,4,56,11,2,54,3,1,7,101,110,118,50,50,56, +49,59,16,4,55,11,62,108,50,60,3,1,7,101,110,118,50,50,56,50,61, 9,18,16,2,105,63,98,111,120,62,8,28,35,34,33,40,39,48,47,46,45, -16,4,59,11,61,118,63,3,1,7,101,110,118,50,50,55,57,64,16,4,58, -11,62,113,118,65,3,1,7,101,110,118,50,50,56,48,66,9,11,16,5,93, +16,4,59,11,61,118,63,3,1,7,101,110,118,50,50,56,51,64,16,4,58, +11,62,113,118,65,3,1,7,101,110,118,50,50,56,52,66,9,11,16,5,93, 2,7,27,20,15,159,33,32,37,89,162,32,33,46,9,224,1,0,87,94,28, 248,80,158,34,32,195,12,250,22,252,39,2,11,6,10,10,98,97,100,32,115, 121,110,116,97,120,197,27,248,80,158,35,33,196,28,248,80,158,35,34,193,20, @@ -173,8 +173,8 @@ 33,202,20,15,159,41,36,37,198,33,20,98,158,16,5,2,24,2,18,2,20, 2,16,2,22,16,5,18,16,2,97,2,26,8,29,35,34,33,9,18,16,2, 100,10,8,33,35,34,33,16,4,8,32,11,2,26,3,1,7,101,110,118,50, -50,56,50,67,16,4,8,31,11,2,32,3,1,7,101,110,118,50,50,56,51, -68,16,4,8,30,11,61,101,69,3,1,7,101,110,118,50,50,56,52,70,9, +50,56,54,67,16,4,8,31,11,2,32,3,1,7,101,110,118,50,50,56,55, +68,16,4,8,30,11,61,101,69,3,1,7,101,110,118,50,50,56,56,70,9, 18,16,2,158,62,105,102,71,8,33,9,18,16,2,158,2,7,8,33,9,18, 16,2,158,11,8,33,9,11,16,5,93,2,5,27,20,15,159,33,32,38,89, 162,32,33,49,9,224,1,0,87,94,28,248,80,158,34,32,195,250,22,252,39, @@ -187,11 +187,11 @@ 248,80,158,47,33,205,198,250,22,252,39,2,11,6,10,10,98,97,100,32,115, 121,110,116,97,120,198,33,20,98,158,16,6,2,13,2,18,2,20,2,16,2, 22,2,24,16,5,18,16,2,158,2,26,8,29,9,18,16,2,100,11,8,37, -35,34,33,16,4,8,36,11,2,26,3,1,7,101,110,118,50,50,56,54,73, -16,4,8,35,11,2,32,3,1,7,101,110,118,50,50,56,55,74,16,4,8, -34,11,2,69,3,1,7,101,110,118,50,50,56,56,75,9,18,16,2,101,63, +35,34,33,16,4,8,36,11,2,26,3,1,7,101,110,118,50,50,57,48,73, +16,4,8,35,11,2,32,3,1,7,101,110,118,50,50,57,49,74,16,4,8, +34,11,2,69,3,1,7,101,110,118,50,50,57,50,75,9,18,16,2,101,63, 108,101,116,76,8,39,35,34,33,8,36,8,35,8,34,16,4,8,38,11,63, -116,109,112,77,3,1,7,101,110,118,50,50,56,57,78,9,18,16,2,158,2, +116,109,112,77,3,1,7,101,110,118,50,50,57,51,78,9,18,16,2,158,2, 71,8,39,9,18,16,2,158,2,5,8,39,9,11,93,83,159,32,93,80,159, 32,32,33,89,162,32,34,37,2,4,222,28,248,22,58,193,249,22,65,194,195, 250,22,252,40,2,2,12,6,11,11,112,114,111,112,101,114,32,108,105,115,116, @@ -199,7 +199,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 2642); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,44,252,209,4,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,44,252,209,4,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37,99,111,110, 100,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,0,16,0, 11,11,16,0,32,11,16,1,64,99,111,110,100,3,16,1,11,16,1,2,3, @@ -241,28 +241,28 @@ 98,34,10,33,11,94,159,71,35,37,113,113,45,97,110,100,45,111,114,17,9, 11,159,2,6,9,11,16,0,96,33,8,254,1,11,16,0,9,18,16,2,158, 93,102,64,118,111,105,100,18,43,35,34,33,16,4,42,11,2,16,3,1,7, -101,110,118,50,50,57,51,19,16,4,41,11,67,105,110,45,102,111,114,109,20, -3,1,7,101,110,118,50,50,57,52,21,16,6,40,11,64,102,111,114,109,22, -66,115,101,114,114,111,114,23,3,1,7,101,110,118,50,50,57,53,24,2,24, -16,4,39,11,2,4,3,1,7,101,110,118,50,50,57,55,25,16,6,38,11, +101,110,118,50,50,57,55,19,16,4,41,11,67,105,110,45,102,111,114,109,20, +3,1,7,101,110,118,50,50,57,56,21,16,6,40,11,64,102,111,114,109,22, +66,115,101,114,114,111,114,23,3,1,7,101,110,118,50,50,57,57,24,2,24, +16,4,39,11,2,4,3,1,7,101,110,118,50,51,48,49,25,16,6,38,11, 65,116,101,115,116,115,26,66,102,105,114,115,116,63,27,3,1,7,101,110,118, -50,50,57,56,28,2,28,43,9,18,104,64,101,108,115,101,29,46,35,34,33, +50,51,48,50,28,2,28,43,9,18,104,64,101,108,115,101,29,46,35,34,33, 42,41,40,39,38,16,6,45,11,64,108,105,110,101,30,64,114,101,115,116,31, -3,1,7,101,110,118,50,50,57,57,32,2,32,16,6,44,11,64,116,101,115, -116,33,65,118,97,108,117,101,34,3,1,7,101,110,118,50,51,48,48,35,2, +3,1,7,101,110,118,50,51,48,51,32,2,32,16,6,44,11,64,116,101,115, +116,33,65,118,97,108,117,101,34,3,1,7,101,110,118,50,51,48,52,35,2, 35,18,104,62,61,62,36,48,35,34,33,42,41,40,39,38,45,16,8,47,11, 2,33,2,34,65,101,108,115,101,63,37,2,35,2,35,2,35,18,105,63,108, 101,116,38,50,35,34,33,42,41,40,39,38,45,47,16,4,49,11,63,103,101, -110,39,3,1,7,101,110,118,50,51,48,49,40,18,158,62,105,102,41,50,18, +110,39,3,1,7,101,110,118,50,51,48,53,40,18,158,62,105,102,41,50,18, 158,2,41,48,18,158,2,0,48,18,16,2,158,2,0,48,9,18,105,2,38, 52,35,34,33,42,41,40,39,38,45,47,16,4,51,11,2,39,3,1,7,101, -110,118,50,51,48,50,42,18,158,2,41,52,18,16,2,158,2,41,48,9,18, +110,118,50,51,48,54,42,18,158,2,41,52,18,16,2,158,2,41,48,9,18, 16,2,158,2,0,48,9,11,9,93,68,35,37,107,101,114,110,101,108,43,95, 2,6,2,17,2,43,0}; EVAL_ONE_SIZED_STR((char *)expr, 1245); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,24,252,36,4,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,24,252,36,4,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,73,35,37,115,116,114, 117,99,116,45,105,110,102,111,1,29,2,11,11,10,10,10,32,80,158,32,32, 20,98,158,16,9,30,3,2,2,74,105,100,101,110,116,105,102,105,101,114,47, @@ -317,7 +317,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1072); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,27,252,223,3,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,27,252,223,3,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,71,35,37,100,115,45, 104,101,108,112,101,114,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98, 158,16,6,30,3,2,2,1,20,108,105,115,116,45,62,105,109,109,117,116,97, @@ -368,15 +368,15 @@ EVAL_ONE_SIZED_STR((char *)expr, 1003); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,102,252,162,11,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,102,252,162,11,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,74,35,37,100,101,102, 105,110,101,45,101,116,45,97,108,1,29,2,11,11,10,10,10,32,80,158,32, -32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,6,66,108,101,116,47, -101,99,3,67,45,100,101,102,105,110,101,4,73,100,101,102,105,110,101,45,115, -116,114,117,99,116,5,64,119,104,101,110,6,74,45,100,101,102,105,110,101,45, -115,121,110,116,97,120,7,66,117,110,108,101,115,115,8,16,6,11,11,11,11, +32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,6,64,119,104,101,110, +3,73,100,101,102,105,110,101,45,115,116,114,117,99,116,4,66,117,110,108,101, +115,115,5,66,108,101,116,47,101,99,6,67,45,100,101,102,105,110,101,7,74, +45,100,101,102,105,110,101,45,115,121,110,116,97,120,8,16,6,11,11,11,11, 11,11,16,6,2,3,2,4,2,5,2,6,2,7,2,8,32,38,97,16,5, -94,2,4,2,7,27,20,15,159,33,32,37,27,89,162,32,33,35,69,109,107, +94,2,7,2,8,27,20,15,159,33,32,37,27,89,162,32,33,35,69,109,107, 45,100,101,102,105,110,101,9,224,2,1,89,162,32,33,51,9,225,1,0,2, 27,248,80,158,36,32,197,27,248,80,158,37,33,194,28,248,80,158,37,34,193, 250,22,209,198,250,22,61,200,248,22,59,199,249,80,158,44,35,248,80,158,45, @@ -395,31 +395,31 @@ 11,159,73,35,37,115,116,114,117,99,116,45,105,110,102,111,25,9,11,159,66, 35,37,99,111,110,100,26,9,11,159,2,19,9,11,159,2,12,9,11,16,0, 96,33,8,254,1,11,16,0,9,18,103,2,23,44,35,34,33,16,4,43,11, -2,23,3,1,7,101,110,118,50,51,51,49,27,16,4,42,11,64,98,97,115, -101,28,3,1,7,101,110,118,50,51,51,51,29,16,4,41,11,64,99,111,100, -101,30,3,1,7,101,110,118,50,51,51,52,31,16,4,40,11,64,98,111,100, -121,32,3,1,7,101,110,118,50,51,51,53,33,16,4,39,11,65,102,105,114, -115,116,34,3,1,7,101,110,118,50,51,51,54,35,16,4,38,11,65,112,98, -111,100,121,36,3,1,7,101,110,118,50,51,51,55,37,18,16,2,99,73,100, +2,23,3,1,7,101,110,118,50,51,51,53,27,16,4,42,11,64,98,97,115, +101,28,3,1,7,101,110,118,50,51,51,55,29,16,4,41,11,64,99,111,100, +101,30,3,1,7,101,110,118,50,51,51,56,31,16,4,40,11,64,98,111,100, +121,32,3,1,7,101,110,118,50,51,51,57,33,16,4,39,11,65,102,105,114, +115,116,34,3,1,7,101,110,118,50,51,52,48,35,16,4,38,11,65,112,98, +111,100,121,36,3,1,7,101,110,118,50,51,52,49,37,18,16,2,99,73,100, 101,102,105,110,101,45,118,97,108,117,101,115,38,46,35,34,33,43,16,4,45, -11,2,9,3,1,7,101,110,118,50,51,51,50,39,9,18,16,2,158,75,100, +11,2,9,3,1,7,101,110,118,50,51,51,54,39,9,18,16,2,158,75,100, 101,102,105,110,101,45,115,121,110,116,97,120,101,115,40,46,9,11,16,5,93, -2,6,89,162,32,33,45,9,223,0,27,248,22,216,195,28,28,192,249,22,183, +2,3,89,162,32,33,45,9,223,0,27,248,22,216,195,28,28,192,249,22,183, 248,22,64,195,34,11,250,22,209,20,15,159,36,32,34,250,22,59,20,15,159, 39,33,34,248,80,158,40,32,248,80,158,41,33,202,249,22,61,20,15,159,41, 34,34,248,80,158,42,33,248,80,158,43,33,204,197,250,22,252,39,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,2,2,14, 2,11,16,3,18,99,2,23,49,35,34,33,16,4,48,11,61,120,41,3,1, -7,101,110,118,50,51,51,57,42,16,4,47,11,61,108,43,3,1,7,101,110, -118,50,51,52,48,44,18,158,62,105,102,45,49,18,158,2,0,49,11,16,5, -93,2,8,89,162,32,33,45,9,223,0,27,248,22,216,195,28,28,192,249,22, +7,101,110,118,50,51,52,51,42,16,4,47,11,61,108,43,3,1,7,101,110, +118,50,51,52,52,44,18,158,62,105,102,45,49,18,158,2,0,49,11,16,5, +93,2,5,89,162,32,33,45,9,223,0,27,248,22,216,195,28,28,192,249,22, 183,248,22,64,195,34,11,250,22,209,20,15,159,36,32,32,251,22,59,20,15, 159,40,33,32,248,22,78,200,20,15,159,40,34,32,249,22,61,20,15,159,42, 35,32,248,22,80,202,197,250,22,252,39,2,11,6,10,10,98,97,100,32,115, 121,110,116,97,120,197,32,20,98,158,16,0,16,4,18,99,2,23,52,35,34, -33,16,4,51,11,2,41,3,1,7,101,110,118,50,51,52,50,46,16,4,50, -11,2,43,3,1,7,101,110,118,50,51,52,51,47,18,158,2,45,52,18,158, -93,158,64,118,111,105,100,48,52,52,18,158,2,0,52,11,16,5,93,2,3, +33,16,4,51,11,2,41,3,1,7,101,110,118,50,51,52,54,46,16,4,50, +11,2,43,3,1,7,101,110,118,50,51,52,55,47,18,158,2,45,52,18,158, +93,158,64,118,111,105,100,48,52,52,18,158,2,0,52,11,16,5,93,2,6, 89,162,32,33,48,9,223,0,27,248,22,216,195,28,28,192,28,249,22,183,248, 22,64,195,34,248,80,158,34,32,248,22,78,194,11,11,27,248,22,78,194,27, 248,80,158,36,33,248,80,158,37,33,198,250,22,209,20,15,159,38,32,36,249, @@ -427,9 +427,9 @@ 80,158,45,34,248,80,158,46,35,203,9,199,250,22,252,39,2,11,6,10,10, 98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,4,2,16,2,11, 2,18,2,21,16,1,18,100,2,23,56,35,34,33,16,4,55,11,2,30,3, -1,7,101,110,118,50,51,52,53,50,16,4,54,11,2,43,3,1,7,101,110, -118,50,51,52,54,51,16,6,53,11,63,118,97,114,52,65,101,120,112,114,115, -53,3,1,7,101,110,118,50,51,52,55,54,2,54,11,16,5,93,2,5,27, +1,7,101,110,118,50,51,52,57,50,16,4,54,11,2,43,3,1,7,101,110, +118,50,51,53,48,51,16,6,53,11,63,118,97,114,52,65,101,120,112,114,115, +53,3,1,7,101,110,118,50,51,53,49,54,2,54,11,16,5,93,2,4,27, 89,162,32,36,53,69,109,97,107,101,45,99,111,114,101,55,223,1,250,22,59, 70,108,101,116,45,118,97,108,117,101,115,56,248,22,59,249,22,59,21,97,64, 116,121,112,101,57,65,109,97,107,101,114,58,64,112,114,101,100,59,66,97,99, @@ -489,7 +489,7 @@ 23,15,23,20,28,23,15,251,22,59,63,108,101,116,73,248,22,59,249,22,59, 2,72,23,22,21,95,2,45,96,2,45,2,72,94,63,110,111,116,74,94,70, 105,110,115,112,101,99,116,111,114,63,75,2,72,11,96,76,114,97,105,115,101, -45,116,121,112,101,45,101,114,114,111,114,76,94,2,63,2,5,6,15,15,105, +45,116,121,112,101,45,101,114,114,111,114,76,94,2,63,2,4,6,15,15,105, 110,115,112,101,99,116,111,114,32,111,114,32,35,102,2,72,196,192,250,22,59, 2,40,248,22,59,23,17,203,23,16,28,196,250,22,218,195,75,100,105,115,97, 112,112,101,97,114,101,100,45,117,115,101,77,248,22,252,86,3,200,192,33,20, @@ -499,38 +499,38 @@ 84,2,24,72,103,101,116,45,115,116,120,45,105,110,102,111,85,0,16,2,18, 16,2,158,93,101,77,99,117,114,114,101,110,116,45,105,110,115,112,101,99,116, 111,114,86,8,29,35,34,33,16,4,8,28,11,2,55,3,1,7,101,110,118, -50,51,52,57,87,16,4,59,11,63,115,116,120,88,3,1,7,101,110,118,50, -51,53,51,89,16,4,58,11,2,32,3,1,7,101,110,118,50,51,53,52,90, -16,6,57,11,2,69,2,70,3,1,7,101,110,118,50,51,53,53,91,2,91, +50,51,53,51,87,16,4,59,11,63,115,116,120,88,3,1,7,101,110,118,50, +51,53,55,89,16,4,58,11,2,32,3,1,7,101,110,118,50,51,53,56,90, +16,6,57,11,2,69,2,70,3,1,7,101,110,118,50,51,53,57,91,2,91, 8,29,9,18,16,2,104,2,23,8,33,35,34,33,8,28,59,58,57,16,10, 8,32,11,64,110,97,109,101,92,71,102,105,101,108,100,45,110,97,109,101,115, 93,2,72,68,115,117,112,101,114,45,105,100,94,3,1,7,101,110,118,50,51, -54,57,95,2,95,2,95,2,95,16,4,8,31,11,73,100,101,102,105,110,101, -100,45,110,97,109,101,115,96,3,1,7,101,110,118,50,51,55,48,97,16,6, +55,51,95,2,95,2,95,2,95,16,4,8,31,11,73,100,101,102,105,110,101, +100,45,110,97,109,101,115,96,3,1,7,101,110,118,50,51,55,52,97,16,6, 8,30,11,76,115,117,112,101,114,45,105,100,47,115,116,114,117,99,116,58,98, -68,115,116,120,45,105,110,102,111,99,3,1,7,101,110,118,50,51,55,50,100, +68,115,116,120,45,105,110,102,111,99,3,1,7,101,110,118,50,51,55,54,100, 2,100,9,11,9,93,68,35,37,107,101,114,110,101,108,101,98,2,101,2,12, 2,19,2,26,2,25,2,24,0}; EVAL_ONE_SIZED_STR((char *)expr, 2990); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,18,252,4,1,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,18,252,4,1,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,74,35,37,115,109,97, 108,108,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,32,80,158,32, -32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,10,66,108,101,116,47, -101,99,3,70,113,117,97,115,105,113,117,111,116,101,4,67,45,100,101,102,105, -110,101,5,64,99,111,110,100,6,73,100,101,102,105,110,101,45,115,116,114,117, -99,116,7,63,97,110,100,8,62,111,114,9,64,119,104,101,110,10,74,45,100, -101,102,105,110,101,45,115,121,110,116,97,120,11,66,117,110,108,101,115,115,12, -16,10,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,13,71,35,37, -113,113,45,97,110,100,45,111,114,14,2,13,66,35,37,99,111,110,100,15,2, -13,2,14,2,14,2,13,2,13,2,13,16,10,2,3,2,4,2,5,2,6, +32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,10,70,113,117,97,115, +105,113,117,111,116,101,3,64,119,104,101,110,4,64,99,111,110,100,5,66,117, +110,108,101,115,115,6,66,108,101,116,47,101,99,7,73,100,101,102,105,110,101, +45,115,116,114,117,99,116,8,67,45,100,101,102,105,110,101,9,62,111,114,10, +63,97,110,100,11,74,45,100,101,102,105,110,101,45,115,121,110,116,97,120,12, +16,10,71,35,37,113,113,45,97,110,100,45,111,114,13,74,35,37,100,101,102, +105,110,101,45,101,116,45,97,108,14,66,35,37,99,111,110,100,15,2,14,2, +14,2,14,2,14,2,13,2,13,2,14,16,10,2,3,2,4,2,5,2,6, 2,7,2,8,2,9,2,10,2,11,2,12,32,42,9,9,97,68,35,37,107, -101,114,110,101,108,16,65,35,37,115,116,120,17,2,14,2,15,2,13,9,0}; +101,114,110,101,108,16,65,35,37,115,116,120,17,2,13,2,15,2,14,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 272); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,181,252,200,37,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,181,252,200,37,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,64,35,37,115,99,1, 29,2,11,11,10,10,10,48,80,158,32,32,20,98,158,16,37,30,3,2,2, 64,46,46,46,63,4,254,1,30,5,2,2,68,115,116,120,45,109,101,109,113, @@ -573,27 +573,27 @@ 97,114,76,254,1,30,77,2,2,1,26,115,101,116,45,115,121,110,116,97,120, 45,109,97,112,112,105,110,103,45,118,97,108,118,97,114,33,78,254,1,16,2, 18,98,63,46,46,46,79,38,98,36,10,32,11,94,159,74,35,37,115,109,97, -108,108,45,115,99,104,101,109,101,80,9,11,159,2,18,9,11,16,62,2,6, -2,2,2,54,2,2,2,66,2,2,2,16,2,2,2,14,2,2,2,25,2, -2,2,44,2,2,2,8,2,2,2,56,2,2,2,33,2,2,2,35,2,2, -2,60,2,2,2,48,2,2,2,46,2,2,2,12,2,2,2,52,2,2,2, -64,2,2,2,70,2,2,2,10,2,2,2,68,2,2,74,115,121,110,116,97, -120,45,109,97,112,112,105,110,103,81,2,2,2,74,2,2,2,62,2,2,2, -29,2,2,2,78,2,2,2,76,2,2,2,4,2,2,2,27,2,2,2,72, -2,2,2,50,2,2,2,58,2,2,96,35,33,11,16,0,96,34,8,254,1, -11,16,0,16,4,33,11,61,115,82,3,1,7,101,110,118,50,51,55,55,83, +108,108,45,115,99,104,101,109,101,80,9,11,159,2,18,9,11,16,62,2,68, +2,2,2,6,2,2,2,44,2,2,2,16,2,2,2,56,2,2,2,46,2, +2,2,60,2,2,2,25,2,2,2,4,2,2,2,48,2,2,2,50,2,2, +2,35,2,2,2,72,2,2,2,33,2,2,2,10,2,2,2,8,2,2,2, +14,2,2,2,62,2,2,2,64,2,2,2,70,2,2,2,74,2,2,74,115, +121,110,116,97,120,45,109,97,112,112,105,110,103,81,2,2,2,66,2,2,2, +29,2,2,2,78,2,2,2,52,2,2,2,27,2,2,2,12,2,2,2,76, +2,2,2,54,2,2,2,58,2,2,96,35,33,11,16,0,96,34,8,254,1, +11,16,0,16,4,33,11,61,115,82,3,1,7,101,110,118,50,51,56,49,83, 18,103,2,79,45,36,35,34,16,10,44,11,61,112,84,67,112,114,111,116,111, -45,114,85,61,107,86,64,100,101,115,116,87,3,1,7,101,110,118,50,52,53, -55,88,2,88,2,88,2,88,16,6,43,11,68,101,120,112,97,110,100,101,114, -89,63,116,111,112,90,3,1,7,101,110,118,50,52,54,49,91,3,1,7,101, -110,118,50,52,53,57,92,16,6,42,11,2,89,2,90,2,91,2,92,16,10, +45,114,85,61,107,86,64,100,101,115,116,87,3,1,7,101,110,118,50,52,54, +49,88,2,88,2,88,2,88,16,6,43,11,68,101,120,112,97,110,100,101,114, +89,63,116,111,112,90,3,1,7,101,110,118,50,52,54,53,91,3,1,7,101, +110,118,50,52,54,51,92,16,6,42,11,2,89,2,90,2,91,2,92,16,10, 41,11,69,108,111,99,97,108,45,116,111,112,93,73,117,115,101,45,101,108,108, 105,112,115,101,115,63,94,72,117,115,101,45,116,97,105,108,45,112,111,115,95, -65,104,97,115,104,33,96,3,1,7,101,110,118,50,52,54,51,97,2,97,2, +65,104,97,115,104,33,96,3,1,7,101,110,118,50,52,54,55,97,2,97,2, 97,2,97,16,10,40,11,66,112,45,104,101,97,100,98,68,101,108,45,99,111, 117,110,116,99,66,114,101,115,116,45,112,100,67,108,97,115,116,45,101,108,101, -3,1,7,101,110,118,50,52,54,52,102,2,102,2,102,2,102,16,4,39,11, -64,108,111,111,112,103,3,1,7,101,110,118,50,52,54,55,104,11,11,16,21, +3,1,7,101,110,118,50,52,54,56,102,2,102,2,102,2,102,16,4,39,11, +64,108,111,111,112,103,3,1,7,101,110,118,50,52,55,49,104,11,11,16,21, 2,4,2,33,2,35,2,29,2,58,2,54,2,56,2,60,2,50,2,16,2, 52,2,27,2,25,2,14,2,62,2,12,2,74,2,78,2,66,2,6,2,10, 53,16,9,10,10,10,10,10,10,10,10,10,16,9,2,46,2,44,2,48,2, @@ -995,13 +995,13 @@ EVAL_ONE_SIZED_STR((char *)expr, 9684); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,133,252,150,15,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,133,252,150,15,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,69,35,37,115,116,120, 99,97,115,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16, 1,30,3,2,2,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110,116, 45,101,114,114,111,114,4,254,1,16,0,11,11,16,1,2,4,33,11,16,2, -66,115,121,110,116,97,120,5,73,115,121,110,116,97,120,45,99,97,115,101,42, -42,6,16,2,11,11,16,2,2,5,2,6,32,34,94,16,5,93,2,6,89, +73,115,121,110,116,97,120,45,99,97,115,101,42,42,5,66,115,121,110,116,97, +120,6,16,2,11,11,16,2,2,5,2,6,32,34,94,16,5,93,2,5,89, 162,32,33,8,32,9,223,0,91,159,33,10,90,161,33,32,10,28,248,80,158, 34,32,195,248,22,53,248,80,158,35,33,196,11,87,94,28,28,248,80,158,34, 32,195,249,22,183,248,22,64,210,35,11,12,250,22,252,39,2,11,6,8,8, @@ -1077,18 +1077,18 @@ 116,99,104,38,101,110,118,31,1,30,32,2,28,72,115,116,120,45,109,101,109, 113,45,112,111,115,33,5,16,29,18,101,63,97,114,103,34,41,98,39,10,32, 11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,35,9,11, -159,2,15,9,11,16,6,2,5,2,2,2,4,2,2,2,6,2,2,98,38, +159,2,15,9,11,16,6,2,4,2,2,2,5,2,2,2,6,2,2,98,38, 10,33,11,95,159,2,28,9,11,159,2,35,9,11,159,2,15,9,11,16,0, 96,37,8,254,1,11,16,0,16,4,36,11,61,120,36,3,1,7,101,110,118, -50,53,53,53,37,16,4,35,11,61,108,38,3,1,7,101,110,118,50,53,53, -55,39,16,14,34,11,63,119,104,111,40,71,97,114,103,45,105,115,45,115,116, +50,53,53,57,37,16,4,35,11,61,108,38,3,1,7,101,110,118,50,53,54, +49,39,16,14,34,11,63,119,104,111,40,71,97,114,103,45,105,115,45,115,116, 120,63,41,64,101,120,112,114,42,63,107,119,115,43,68,108,105,116,45,99,111, 109,112,44,67,99,108,97,117,115,101,115,45,3,1,7,101,110,118,50,53,54, -48,46,2,46,2,46,2,46,2,46,2,46,16,8,33,11,68,112,97,116,116, +52,46,2,46,2,46,2,46,2,46,2,46,16,8,33,11,68,112,97,116,116, 101,114,110,115,47,67,102,101,110,100,101,114,115,48,67,97,110,115,119,101,114, -115,49,3,1,7,101,110,118,50,53,54,52,50,2,50,2,50,18,102,64,114, +115,49,3,1,7,101,110,118,50,53,54,56,50,2,50,2,50,18,102,64,114, 115,108,116,51,43,39,38,37,36,35,34,33,16,4,42,11,2,34,3,1,7, -101,110,118,50,53,54,56,52,18,102,2,11,45,39,38,37,36,35,34,33,16, +101,110,118,50,53,55,50,52,18,102,2,11,45,39,38,37,36,35,34,33,16, 8,44,11,2,34,2,51,73,112,97,116,116,101,114,110,45,118,97,114,115,115, 53,2,52,2,52,2,52,18,102,2,7,47,39,38,37,36,35,34,33,16,10, 46,11,2,34,2,51,2,53,76,108,105,116,45,99,111,109,112,45,105,115,45, @@ -1097,42 +1097,42 @@ 101,99,116,56,47,18,158,72,113,117,111,116,101,45,115,121,110,116,97,120,57, 47,18,104,78,114,97,105,115,101,45,115,121,110,116,97,120,45,101,114,114,111, 114,58,50,39,38,37,36,35,34,33,46,16,4,49,11,2,8,3,1,7,101, -110,118,50,53,55,48,59,16,4,48,11,1,20,117,110,102,108,97,116,45,112, +110,118,50,53,55,52,59,16,4,48,11,1,20,117,110,102,108,97,116,45,112, 97,116,116,101,114,110,45,118,97,114,115,115,60,3,1,7,101,110,118,50,53, -55,49,61,18,108,2,13,55,39,38,37,36,35,34,33,46,49,48,16,4,54, -11,64,114,101,115,116,62,3,1,7,101,110,118,50,53,55,50,63,16,10,53, +55,53,61,18,108,2,13,55,39,38,37,36,35,34,33,46,49,48,16,4,54, +11,64,114,101,115,116,62,3,1,7,101,110,118,50,53,55,54,63,16,10,53, 11,67,112,97,116,116,101,114,110,64,66,102,101,110,100,101,114,65,79,117,110, 102,108,97,116,45,112,97,116,116,101,114,110,45,118,97,114,115,66,66,97,110, -115,119,101,114,67,3,1,7,101,110,118,50,53,55,51,68,2,68,2,68,2, +115,119,101,114,67,3,1,7,101,110,118,50,53,55,55,68,2,68,2,68,2, 68,16,8,52,11,76,116,97,105,108,45,112,97,116,116,101,114,110,45,118,97, 114,69,69,116,101,109,112,45,118,97,114,115,70,72,112,97,116,116,101,114,110, -45,118,97,114,115,71,3,1,7,101,110,118,50,53,55,57,72,3,1,7,101, -110,118,50,53,55,55,73,3,1,7,101,110,118,50,53,55,53,74,16,8,51, +45,118,97,114,115,71,3,1,7,101,110,118,50,53,56,51,72,3,1,7,101, +110,118,50,53,56,49,73,3,1,7,101,110,118,50,53,55,57,74,16,8,51, 11,2,69,2,70,2,71,2,72,2,73,2,74,18,109,2,55,57,39,38,37, 36,35,34,33,46,49,48,54,53,52,51,16,8,56,11,71,100,111,45,116,114, 121,45,110,101,120,116,75,64,109,116,99,104,76,70,99,97,110,116,45,102,97, -105,108,63,77,3,1,7,101,110,118,50,53,56,53,78,2,78,2,78,18,158, +105,108,63,77,3,1,7,101,110,118,50,53,56,57,78,2,78,2,78,18,158, 2,7,57,18,158,62,105,102,79,57,18,158,2,55,57,18,111,63,99,100,114, 80,8,28,39,38,37,36,35,34,33,46,49,48,54,53,52,51,56,16,6,59, 11,71,112,97,116,116,101,114,110,45,118,97,114,81,68,116,101,109,112,45,118, -97,114,82,3,1,7,101,110,118,50,53,56,54,83,2,83,16,4,58,11,63, -112,111,115,84,3,1,7,101,110,118,50,53,56,55,85,18,158,64,99,100,100, +97,114,82,3,1,7,101,110,118,50,53,57,48,83,2,83,16,4,58,11,63, +112,111,115,84,3,1,7,101,110,118,50,53,57,49,85,18,158,64,99,100,100, 114,86,8,28,18,158,65,99,100,100,100,114,87,8,28,18,158,66,99,100,100, 100,100,114,88,8,28,18,158,63,99,97,114,89,8,28,18,158,64,99,97,100, 114,90,8,28,18,158,65,99,97,100,100,114,91,8,28,18,158,66,99,97,100, 100,100,114,92,8,28,18,112,69,108,105,115,116,45,116,97,105,108,93,8,30, 39,38,37,36,35,34,33,46,49,48,54,53,52,51,56,59,58,16,4,8,29, -11,68,97,99,99,101,115,115,111,114,94,3,1,7,101,110,118,50,53,56,56, +11,68,97,99,99,101,115,115,111,114,94,3,1,7,101,110,118,50,53,57,50, 95,18,158,68,108,105,115,116,45,114,101,102,96,8,30,18,158,1,22,108,101, 116,114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108,117,101,115,97, 57,18,110,79,109,97,107,101,45,115,121,110,116,97,120,45,109,97,112,112,105, 110,103,98,8,32,39,38,37,36,35,34,33,46,49,48,54,53,52,51,56,16, 8,8,31,11,2,81,78,117,110,102,108,97,116,45,112,97,116,116,101,114,110, -45,118,97,114,99,2,82,3,1,7,101,110,118,50,53,56,57,100,2,100,2, +45,118,97,114,99,2,82,3,1,7,101,110,118,50,53,57,51,100,2,100,2, 100,18,158,2,57,8,32,18,158,2,79,57,18,109,2,55,8,34,39,38,37, 36,35,34,33,46,49,48,54,53,52,51,16,10,8,33,11,2,75,2,76,2, 77,61,109,101,2,78,2,78,2,78,2,78,18,158,2,9,8,34,11,16,5, -93,2,5,89,162,32,33,53,9,223,0,91,159,33,10,90,161,33,32,10,20, +93,2,6,89,162,32,33,53,9,223,0,91,159,33,10,90,161,33,32,10,20, 15,159,33,32,42,87,94,28,28,248,80,158,34,32,195,27,248,80,158,35,33, 196,28,248,80,158,35,32,193,248,80,158,35,34,248,80,158,36,33,194,11,11, 12,250,22,252,39,2,11,6,8,8,98,97,100,32,102,111,114,109,197,250,22, @@ -1166,22 +1166,22 @@ 110,116,97,120,45,109,97,112,112,105,110,103,45,100,101,112,116,104,112,6,30, 113,2,28,1,21,115,121,110,116,97,120,45,109,97,112,112,105,110,103,45,118, 97,108,118,97,114,114,7,2,19,16,5,18,100,2,7,8,38,39,38,37,16, -4,8,37,11,2,36,3,1,7,101,110,118,50,53,57,51,115,16,4,8,36, -11,68,104,101,114,101,45,115,116,120,116,3,1,7,101,110,118,50,53,57,53, +4,8,37,11,2,36,3,1,7,101,110,118,50,53,57,55,115,16,4,8,36, +11,68,104,101,114,101,45,115,116,120,116,3,1,7,101,110,118,50,53,57,57, 117,16,4,8,35,11,2,116,2,117,18,102,2,57,8,43,39,38,37,8,37, 16,4,8,42,11,2,116,2,117,16,4,8,41,11,2,64,3,1,7,101,110, -118,50,53,57,57,118,16,4,8,40,11,71,117,110,105,113,117,101,45,118,97, -114,115,119,3,1,7,101,110,118,50,54,48,48,120,16,4,8,39,11,72,118, +118,50,54,48,51,118,16,4,8,40,11,71,117,110,105,113,117,101,45,118,97, +114,115,119,3,1,7,101,110,118,50,54,48,52,120,16,4,8,39,11,72,118, 97,114,45,98,105,110,100,105,110,103,115,121,3,1,7,101,110,118,50,54,48, -49,122,18,105,9,8,47,39,38,37,8,37,8,42,8,41,8,40,8,39,16, +53,122,18,105,9,8,47,39,38,37,8,37,8,42,8,41,8,40,8,39,16, 6,8,46,11,67,112,114,111,116,111,45,114,123,76,110,111,110,45,112,97,116, -116,101,114,110,45,118,97,114,115,124,3,1,7,101,110,118,50,54,48,55,125, +116,101,114,110,45,118,97,114,115,124,3,1,7,101,110,118,50,54,49,49,125, 2,125,16,6,8,45,11,79,98,117,105,108,100,45,102,114,111,109,45,116,101, -109,112,108,97,116,101,126,61,114,127,3,1,7,101,110,118,50,54,49,54,128, -2,128,16,4,8,44,11,63,108,101,110,129,3,1,7,101,110,118,50,54,49, -57,130,18,158,65,108,105,115,116,42,131,8,47,18,104,2,57,8,48,39,38, +109,112,108,97,116,101,126,61,114,127,3,1,7,101,110,118,50,54,50,48,128, +2,128,16,4,8,44,11,63,108,101,110,129,3,1,7,101,110,118,50,54,50, +51,130,18,158,65,108,105,115,116,42,131,8,47,18,104,2,57,8,48,39,38, 37,8,37,8,42,8,41,8,40,8,39,8,46,8,45,11,93,83,159,32,93, -80,159,32,32,33,89,162,32,34,38,2,4,222,251,22,252,39,2,2,5,6, +80,159,32,32,33,89,162,32,34,38,2,4,222,251,22,252,39,2,2,6,6, 47,47,105,110,99,111,109,112,97,116,105,98,108,101,32,101,108,108,105,112,115, 105,115,32,109,97,116,99,104,32,99,111,117,110,116,115,32,102,111,114,32,116, 101,109,112,108,97,116,101,196,197,95,68,35,37,107,101,114,110,101,108,132,2, @@ -1189,7 +1189,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 4002); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,65,252,188,6,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,65,252,188,6,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,35,37,115,116,120, 108,111,99,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,2, 30,3,2,2,68,108,111,99,45,105,110,115,112,4,254,1,30,5,2,2,68, @@ -1204,28 +1204,28 @@ 196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27,248, 80,158,46,35,196,28,248,80,158,46,36,193,248,80,158,46,37,193,11,11,11, 11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, -22,90,197,27,248,22,89,198,27,252,22,61,198,202,201,200,199,27,20,15,159, +22,90,197,27,248,22,89,198,27,252,22,61,198,201,202,200,199,27,20,15,159, 40,32,38,250,22,209,20,15,159,43,33,38,250,22,209,20,15,159,46,34,38, -254,22,62,20,15,159,53,35,38,248,22,78,23,15,20,15,159,53,36,38,248, -22,87,23,15,248,22,90,23,15,248,22,89,23,15,248,22,52,23,15,20,15, +254,22,62,20,15,159,53,35,38,248,22,87,23,15,20,15,159,53,36,38,248, +22,78,23,15,248,22,90,23,15,248,22,89,23,15,248,22,52,23,15,20,15, 159,46,37,38,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, 116,97,120,197,32,20,98,158,16,6,30,10,65,35,37,115,116,120,11,69,115, 116,120,45,112,97,105,114,63,12,11,30,13,2,11,67,99,111,110,115,47,35, 102,14,1,30,15,2,11,67,115,116,120,45,99,97,114,16,5,30,17,2,11, 67,115,116,120,45,99,100,114,18,6,30,19,2,11,69,115,116,120,45,108,105, 115,116,63,20,8,30,21,2,11,69,115,116,120,45,62,108,105,115,116,22,4, -16,6,18,16,2,95,66,115,114,99,116,97,103,23,34,93,8,252,62,7,95, -9,8,252,62,7,69,35,37,115,116,120,99,97,115,101,24,18,100,64,100,101, +16,6,18,16,2,95,66,115,114,99,116,97,103,23,34,93,8,252,63,7,95, +9,8,252,63,7,69,35,37,115,116,120,99,97,115,101,24,18,100,64,100,101, 115,116,25,41,98,40,10,32,11,94,159,74,35,37,100,101,102,105,110,101,45, 101,116,45,97,108,26,9,11,159,2,24,9,11,16,10,2,7,2,2,2,6, 2,2,2,4,2,2,2,8,2,2,2,9,2,2,98,39,10,33,11,93,159, 2,24,9,11,16,0,96,38,8,254,1,11,16,0,16,4,37,11,63,115,116, -120,27,3,1,7,101,110,118,50,54,50,51,28,16,12,36,11,3,1,4,103, +120,27,3,1,7,101,110,118,50,54,50,55,28,16,12,36,11,3,1,4,103, 50,56,48,29,3,1,4,103,50,56,49,30,3,1,4,103,50,56,50,31,3, 1,4,103,50,56,51,32,3,1,4,103,50,56,52,33,3,1,7,101,110,118, -50,54,51,49,34,2,34,2,34,2,34,2,34,16,12,35,11,61,95,35,64, +50,54,51,53,34,2,34,2,34,2,34,2,34,16,12,35,11,61,95,35,64, 115,116,120,101,36,62,107,108,37,64,105,100,61,63,38,66,99,108,97,117,115, -101,39,3,1,7,101,110,118,50,54,51,50,40,2,40,2,40,2,40,2,40, +101,39,3,1,7,101,110,118,50,54,51,54,40,2,40,2,40,2,40,2,40, 18,158,63,99,116,120,41,41,18,158,73,115,121,110,116,97,120,45,99,97,115, 101,42,42,42,41,18,158,11,41,18,158,2,41,41,11,16,5,93,2,8,89, 162,32,33,55,9,223,0,27,28,248,80,158,34,32,195,249,80,158,35,33,248, @@ -1234,18 +1234,18 @@ 32,193,249,80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28, 248,80,158,43,36,193,248,80,158,43,37,193,11,11,11,11,28,192,27,248,22, 52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197,27,251,22,61, -197,200,199,198,27,20,15,159,39,32,38,250,22,209,20,15,159,42,33,38,250, -22,209,20,15,159,45,34,38,254,22,62,20,15,159,52,35,38,248,22,78,23, -15,20,15,159,52,36,38,248,22,87,23,15,248,22,88,23,15,20,15,159,52, +197,199,200,198,27,20,15,159,39,32,38,250,22,209,20,15,159,42,33,38,250, +22,209,20,15,159,45,34,38,254,22,62,20,15,159,52,35,38,248,22,87,23, +15,20,15,159,52,36,38,248,22,78,23,15,248,22,88,23,15,20,15,159,52, 37,38,248,22,52,23,15,20,15,159,45,38,38,195,250,22,252,39,2,11,6, 10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,6,2,10, 2,13,2,15,2,17,2,19,2,21,16,7,18,16,2,95,2,23,42,93,8, -252,70,7,95,9,8,252,70,7,2,24,18,100,2,25,46,40,39,38,16,4, -45,11,2,27,3,1,7,101,110,118,50,54,52,49,43,16,10,44,11,3,1, +252,71,7,95,9,8,252,71,7,2,24,18,100,2,25,46,40,39,38,16,4, +45,11,2,27,3,1,7,101,110,118,50,54,52,53,43,16,10,44,11,3,1, 4,103,50,56,53,44,3,1,4,103,50,56,54,45,3,1,4,103,50,56,55, -46,3,1,4,103,50,56,56,47,3,1,7,101,110,118,50,54,52,56,48,2, +46,3,1,4,103,50,56,56,47,3,1,7,101,110,118,50,54,53,50,48,2, 48,2,48,2,48,16,10,43,11,2,35,2,36,2,37,2,39,3,1,7,101, -110,118,50,54,52,57,49,2,49,2,49,2,49,18,158,2,41,46,18,158,2, +110,118,50,54,53,51,49,2,49,2,49,2,49,18,158,2,41,46,18,158,2, 42,46,18,158,11,46,18,158,79,109,111,100,117,108,101,45,105,100,101,110,116, 105,102,105,101,114,61,63,50,46,18,158,2,41,46,11,16,5,93,2,7,89, 162,32,33,55,9,223,0,27,28,248,80,158,34,32,195,249,80,158,35,33,248, @@ -1260,12 +1260,12 @@ 252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98, 158,16,6,2,10,2,13,2,15,2,17,30,51,2,11,69,97,112,112,101,110, 100,47,35,102,52,0,30,53,2,11,71,115,116,120,45,110,117,108,108,47,35, -102,54,9,16,8,18,16,2,95,2,23,47,93,8,252,80,7,95,9,8,252, -80,7,2,24,18,100,2,25,51,40,39,38,16,4,50,11,2,27,3,1,7, -101,110,118,50,54,53,55,55,16,8,49,11,3,1,4,103,50,56,57,56,3, +102,54,9,16,8,18,16,2,95,2,23,47,93,8,252,81,7,95,9,8,252, +81,7,2,24,18,100,2,25,51,40,39,38,16,4,50,11,2,27,3,1,7, +101,110,118,50,54,54,49,55,16,8,49,11,3,1,4,103,50,56,57,56,3, 1,4,103,50,57,48,57,3,1,4,103,50,57,49,58,3,1,7,101,110,118, -50,54,54,51,59,2,59,2,59,16,8,48,11,2,35,63,108,111,99,60,67, -112,97,116,116,101,114,110,61,3,1,7,101,110,118,50,54,54,52,62,2,62, +50,54,54,55,59,2,59,2,59,16,8,48,11,2,35,63,108,111,99,60,67, +112,97,116,116,101,114,110,61,3,1,7,101,110,118,50,54,54,56,62,2,62, 2,62,18,158,2,41,51,18,158,2,6,51,18,158,2,41,51,18,158,66,115, 121,110,116,97,120,63,51,18,158,2,41,51,18,158,2,41,51,11,94,83,159, 32,93,80,159,32,32,33,247,22,252,114,2,83,159,32,93,80,159,32,33,33, @@ -1275,7 +1275,7 @@ EVAL_ONE_SIZED_STR((char *)expr, 1736); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,87,252,135,8,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,87,252,121,8,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,70,35,37,119,105,116, 104,45,115,116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158, 16,7,30,3,2,2,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97, @@ -1294,122 +1294,121 @@ 249,80,158,40,33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80, 158,42,37,193,248,80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,52, 194,27,248,22,78,195,27,248,22,80,196,249,80,158,39,39,200,27,249,22,61, -197,198,27,20,15,159,41,33,44,250,22,209,20,15,159,44,34,44,250,22,209, -20,15,159,47,35,44,250,22,62,20,15,159,50,36,44,248,22,53,203,248,22, -52,203,20,15,159,47,37,44,195,27,28,248,80,158,36,32,195,249,80,158,37, -33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32,193, -249,80,158,40,40,27,248,80,158,42,34,196,28,248,80,158,42,37,193,248,22, -8,89,162,32,33,39,9,224,10,1,27,249,22,2,89,162,32,33,45,9,224, -4,5,249,80,158,35,41,28,248,80,158,36,32,197,249,80,158,37,33,248,80, -158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158, -40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11, -194,248,80,158,37,38,196,28,248,22,57,193,21,94,9,9,248,80,158,35,42, -193,11,27,248,80,158,42,35,196,28,248,80,158,42,32,193,249,80,158,43,33, -248,80,158,44,34,195,27,248,80,158,45,35,196,28,248,80,158,45,37,193,248, -80,158,45,38,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,248,22,216,27,20, -15,159,43,38,44,250,22,209,20,15,159,46,39,44,200,195,87,94,251,80,158, -45,43,201,206,27,20,15,159,46,40,44,250,22,209,20,15,159,49,41,44,204, -195,9,27,249,22,2,89,162,32,33,34,9,222,248,22,48,65,119,115,116,109, -112,19,195,27,249,22,2,89,162,32,33,36,9,222,250,22,209,195,64,104,101, -114,101,20,195,196,27,248,22,216,27,20,15,159,46,42,44,250,22,209,20,15, -159,49,43,44,204,195,250,22,209,20,15,159,47,44,44,250,22,59,63,108,101, -116,21,251,22,2,89,162,32,35,42,9,222,249,22,59,194,250,22,59,1,20, -100,97,116,117,109,45,62,115,121,110,116,97,120,45,111,98,106,101,99,116,22, -249,22,59,72,113,117,111,116,101,45,115,121,110,116,97,120,23,200,199,204,203, -205,249,91,159,33,11,20,12,95,33,192,89,162,32,34,57,64,108,111,111,112, -24,226,21,13,14,0,28,248,22,57,197,27,249,22,61,197,196,27,20,15,159, -37,45,44,250,22,209,20,15,159,40,46,44,250,22,209,20,15,159,43,47,44, -250,22,62,20,15,159,46,48,44,248,22,53,203,248,22,52,203,20,15,159,43, -49,44,195,26,8,22,59,73,115,121,110,116,97,120,45,99,97,115,101,42,42, -25,11,10,248,22,52,205,9,79,109,111,100,117,108,101,45,105,100,101,110,116, -105,102,105,101,114,61,63,26,249,22,59,248,22,52,23,16,249,204,248,22,53, -23,17,248,22,53,23,18,249,22,59,65,95,101,108,115,101,27,249,22,59,2, -4,249,22,59,2,23,250,22,209,11,248,22,208,248,22,52,23,24,248,22,52, -23,23,202,200,23,16,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121, -110,116,97,120,197,32,20,98,158,16,12,30,28,2,12,69,115,116,120,45,112, -97,105,114,63,29,11,30,30,2,12,67,99,111,110,115,47,35,102,31,1,30, -32,2,12,67,115,116,120,45,99,97,114,33,5,30,34,2,12,67,115,116,120, -45,99,100,114,35,6,30,36,2,12,71,115,116,120,45,110,117,108,108,47,35, -102,37,9,30,38,2,12,2,13,8,30,39,2,12,2,15,4,30,40,68,35, -37,115,116,120,108,111,99,41,68,114,101,108,111,99,97,116,101,42,1,30,43, -2,12,69,97,112,112,101,110,100,47,35,102,44,0,30,45,2,12,73,115,116, -120,45,99,104,101,99,107,47,101,115,99,46,7,30,47,2,12,70,115,116,120, -45,114,111,116,97,116,101,48,12,30,49,64,35,37,115,99,50,74,103,101,116, -45,109,97,116,99,104,45,118,97,114,115,51,0,16,18,18,98,2,20,38,98, -36,10,32,11,96,159,69,35,37,115,116,120,99,97,115,101,52,9,11,159,74, -35,37,115,109,97,108,108,45,115,99,104,101,109,101,53,9,11,159,2,41,9, -11,159,2,12,9,11,16,10,2,10,2,2,2,6,2,2,2,4,2,2,2, -8,2,2,2,18,2,2,98,35,10,33,11,97,159,66,35,37,99,111,110,100, -54,9,11,159,71,35,37,113,113,45,97,110,100,45,111,114,55,9,11,159,2, -50,9,11,159,2,41,9,11,159,2,52,9,11,16,0,96,34,8,254,1,11, -16,0,16,4,33,11,61,120,56,3,1,7,101,110,118,50,54,55,53,57,18, -16,2,95,66,115,114,99,116,97,103,58,39,93,8,252,113,7,95,9,8,252, -113,7,2,52,18,100,64,100,101,115,116,59,42,36,35,34,33,16,8,41,11, -3,1,4,103,50,57,55,60,3,1,4,103,50,57,56,61,3,1,4,103,50, -57,57,62,3,1,7,101,110,118,50,54,56,50,63,2,63,2,63,16,8,40, -11,61,95,64,62,101,49,65,62,101,50,66,3,1,7,101,110,118,50,54,56, -51,67,2,67,2,67,18,158,63,99,116,120,68,42,18,158,2,0,42,18,158, -2,68,42,18,16,2,95,2,58,43,93,8,252,115,7,95,9,8,252,115,7, -2,52,18,100,2,59,46,36,35,34,33,16,12,45,11,3,1,4,103,50,57, -50,69,3,1,4,103,50,57,51,70,3,1,4,103,50,57,52,71,3,1,4, -103,50,57,53,72,3,1,4,103,50,57,54,73,3,1,7,101,110,118,50,54, -57,57,74,2,74,2,74,2,74,2,74,16,12,44,11,2,64,63,111,117,116, -75,62,105,110,76,2,65,2,66,3,1,7,101,110,118,50,55,48,48,77,2, -77,2,77,2,77,2,77,18,16,2,95,2,58,47,93,8,252,131,7,95,9, -8,252,131,7,2,52,18,101,2,59,49,36,35,34,33,45,44,16,4,48,11, -63,105,110,115,78,3,1,7,101,110,118,50,55,48,54,79,18,16,2,95,2, -58,50,93,8,252,132,7,95,9,8,252,132,7,2,52,18,158,2,59,49,18, -102,2,20,52,36,35,34,33,45,44,48,16,8,51,11,64,116,109,112,115,80, -65,104,101,114,101,115,81,64,111,117,116,115,82,3,1,7,101,110,118,50,55, -48,57,83,2,83,2,83,18,16,2,95,2,58,53,93,8,252,137,7,95,9, -8,252,137,7,2,52,18,103,2,59,55,36,35,34,33,45,44,48,51,16,4, -54,11,2,24,3,1,7,101,110,118,50,55,49,52,84,18,158,2,68,55,18, -158,2,0,55,18,158,2,68,55,11,96,83,159,32,93,80,159,32,32,33,89, -162,32,33,36,2,4,222,250,22,252,39,2,2,18,6,20,20,98,105,110,100, -105,110,103,32,109,97,116,99,104,32,102,97,105,108,101,100,195,83,159,32,93, -80,159,32,33,34,32,83,159,32,93,80,159,32,34,33,89,162,32,33,38,2, -8,223,0,87,94,83,160,34,11,80,159,32,33,34,248,22,170,80,159,33,33, -34,248,22,42,250,22,252,184,1,6,4,4,126,97,126,115,197,80,159,36,33, -34,83,159,32,93,80,159,32,35,33,89,162,32,33,37,2,10,223,0,87,94, -28,248,80,158,33,36,194,12,250,22,252,40,2,2,10,6,11,11,115,121,110, -116,97,120,32,112,97,105,114,196,27,248,80,158,34,37,195,249,22,2,89,162, -32,33,39,9,223,3,248,247,22,252,87,3,28,248,22,41,195,249,22,209,11, -248,80,159,36,34,34,197,28,248,22,252,136,1,195,249,22,209,11,248,80,159, -36,34,34,197,28,248,80,158,34,38,195,249,22,209,11,248,80,159,36,34,34, -248,22,210,198,249,22,209,11,248,80,159,36,34,34,64,116,101,109,112,85,194, -97,68,35,37,107,101,114,110,101,108,86,2,12,2,41,2,53,2,52,98,2, -86,2,52,2,41,2,50,2,55,2,54,0}; - EVAL_ONE_SIZED_STR((char *)expr, 2195); +198,197,27,20,15,159,41,33,44,250,22,209,20,15,159,44,34,44,250,22,209, +20,15,159,47,35,44,249,22,56,20,15,159,49,36,44,201,20,15,159,47,37, +44,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197, +27,248,80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40,40,27,248, +80,158,42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9, +224,10,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,41, +28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80, +158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34, +195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196, +28,248,22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158,42, +35,196,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27, +248,80,158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38,193,11,11, +11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, +22,90,197,27,248,22,89,198,27,248,22,216,27,20,15,159,43,38,44,250,22, +209,20,15,159,46,39,44,200,195,87,94,251,80,158,45,43,201,206,27,20,15, +159,46,40,44,250,22,209,20,15,159,49,41,44,204,195,9,27,249,22,2,89, +162,32,33,34,9,222,248,22,48,65,119,115,116,109,112,19,195,27,249,22,2, +89,162,32,33,36,9,222,250,22,209,195,64,104,101,114,101,20,195,196,27,248, +22,216,27,20,15,159,46,42,44,250,22,209,20,15,159,49,43,44,204,195,250, +22,209,20,15,159,47,44,44,250,22,59,63,108,101,116,21,251,22,2,89,162, +32,35,42,9,222,249,22,59,194,250,22,59,1,20,100,97,116,117,109,45,62, +115,121,110,116,97,120,45,111,98,106,101,99,116,22,249,22,59,72,113,117,111, +116,101,45,115,121,110,116,97,120,23,200,199,204,203,205,249,91,159,33,11,20, +12,95,33,192,89,162,32,34,57,64,108,111,111,112,24,226,21,13,14,0,28, +248,22,57,197,27,249,22,61,196,197,27,20,15,159,37,45,44,250,22,209,20, +15,159,40,46,44,250,22,209,20,15,159,43,47,44,249,22,56,20,15,159,45, +48,44,201,20,15,159,43,49,44,195,26,8,22,59,73,115,121,110,116,97,120, +45,99,97,115,101,42,42,25,11,10,248,22,52,205,9,79,109,111,100,117,108, +101,45,105,100,101,110,116,105,102,105,101,114,61,63,26,249,22,59,248,22,52, +23,16,249,204,248,22,53,23,17,248,22,53,23,18,249,22,59,65,95,101,108, +115,101,27,249,22,59,2,4,249,22,59,2,23,250,22,209,11,248,22,208,248, +22,52,23,24,248,22,52,23,23,202,200,23,16,250,22,252,39,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158,16,12,30,28,2, +12,69,115,116,120,45,112,97,105,114,63,29,11,30,30,2,12,67,99,111,110, +115,47,35,102,31,1,30,32,2,12,67,115,116,120,45,99,97,114,33,5,30, +34,2,12,67,115,116,120,45,99,100,114,35,6,30,36,2,12,71,115,116,120, +45,110,117,108,108,47,35,102,37,9,30,38,2,12,2,13,8,30,39,2,12, +2,15,4,30,40,68,35,37,115,116,120,108,111,99,41,68,114,101,108,111,99, +97,116,101,42,1,30,43,2,12,69,97,112,112,101,110,100,47,35,102,44,0, +30,45,2,12,73,115,116,120,45,99,104,101,99,107,47,101,115,99,46,7,30, +47,2,12,70,115,116,120,45,114,111,116,97,116,101,48,12,30,49,64,35,37, +115,99,50,74,103,101,116,45,109,97,116,99,104,45,118,97,114,115,51,0,16, +18,18,98,2,20,38,98,36,10,32,11,96,159,69,35,37,115,116,120,99,97, +115,101,52,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101, +53,9,11,159,2,41,9,11,159,2,12,9,11,16,10,2,8,2,2,2,18, +2,2,2,6,2,2,2,4,2,2,2,10,2,2,98,35,10,33,11,97,159, +66,35,37,99,111,110,100,54,9,11,159,71,35,37,113,113,45,97,110,100,45, +111,114,55,9,11,159,2,50,9,11,159,2,41,9,11,159,2,52,9,11,16, +0,96,34,8,254,1,11,16,0,16,4,33,11,61,120,56,3,1,7,101,110, +118,50,54,55,57,57,18,16,2,95,66,115,114,99,116,97,103,58,39,93,8, +252,114,7,95,9,8,252,114,7,2,52,18,100,64,100,101,115,116,59,42,36, +35,34,33,16,8,41,11,3,1,4,103,50,57,55,60,3,1,4,103,50,57, +56,61,3,1,4,103,50,57,57,62,3,1,7,101,110,118,50,54,56,54,63, +2,63,2,63,16,8,40,11,61,95,64,62,101,49,65,62,101,50,66,3,1, +7,101,110,118,50,54,56,55,67,2,67,2,67,18,158,63,99,116,120,68,42, +18,158,2,0,42,18,158,2,68,42,18,16,2,95,2,58,43,93,8,252,116, +7,95,9,8,252,116,7,2,52,18,100,2,59,46,36,35,34,33,16,12,45, +11,3,1,4,103,50,57,50,69,3,1,4,103,50,57,51,70,3,1,4,103, +50,57,52,71,3,1,4,103,50,57,53,72,3,1,4,103,50,57,54,73,3, +1,7,101,110,118,50,55,48,51,74,2,74,2,74,2,74,2,74,16,12,44, +11,2,64,63,111,117,116,75,62,105,110,76,2,65,2,66,3,1,7,101,110, +118,50,55,48,52,77,2,77,2,77,2,77,2,77,18,16,2,95,2,58,47, +93,8,252,132,7,95,9,8,252,132,7,2,52,18,101,2,59,49,36,35,34, +33,45,44,16,4,48,11,63,105,110,115,78,3,1,7,101,110,118,50,55,49, +48,79,18,16,2,95,2,58,50,93,8,252,133,7,95,9,8,252,133,7,2, +52,18,158,2,59,49,18,102,2,20,52,36,35,34,33,45,44,48,16,8,51, +11,64,116,109,112,115,80,65,104,101,114,101,115,81,64,111,117,116,115,82,3, +1,7,101,110,118,50,55,49,51,83,2,83,2,83,18,16,2,95,2,58,53, +93,8,252,138,7,95,9,8,252,138,7,2,52,18,103,2,59,55,36,35,34, +33,45,44,48,51,16,4,54,11,2,24,3,1,7,101,110,118,50,55,49,56, +84,18,158,2,68,55,18,158,2,0,55,18,158,2,68,55,11,96,83,159,32, +93,80,159,32,32,33,89,162,32,33,36,2,4,222,250,22,252,39,2,2,18, +6,20,20,98,105,110,100,105,110,103,32,109,97,116,99,104,32,102,97,105,108, +101,100,195,83,159,32,93,80,159,32,33,34,32,83,159,32,93,80,159,32,34, +33,89,162,32,33,38,2,8,223,0,87,94,83,160,34,11,80,159,32,33,34, +248,22,170,80,159,33,33,34,248,22,42,250,22,252,184,1,6,4,4,126,97, +126,115,197,80,159,36,33,34,83,159,32,93,80,159,32,35,33,89,162,32,33, +37,2,10,223,0,87,94,28,248,80,158,33,36,194,12,250,22,252,40,2,2, +10,6,11,11,115,121,110,116,97,120,32,112,97,105,114,196,27,248,80,158,34, +37,195,249,22,2,89,162,32,33,39,9,223,3,248,247,22,252,87,3,28,248, +22,41,195,249,22,209,11,248,80,159,36,34,34,197,28,248,22,252,136,1,195, +249,22,209,11,248,80,159,36,34,34,197,28,248,80,158,34,38,195,249,22,209, +11,248,80,159,36,34,34,248,22,210,198,249,22,209,11,248,80,159,36,34,34, +64,116,101,109,112,85,194,97,68,35,37,107,101,114,110,101,108,86,2,12,2, +41,2,53,2,52,98,2,86,2,52,2,41,2,50,2,55,2,54,0}; + EVAL_ONE_SIZED_STR((char *)expr, 2181); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,188,252,51,31,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,188,252,5,31,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,76,35,37,115,116,120, 99,97,115,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,32,80, 158,32,32,20,98,158,16,2,30,3,2,2,1,26,99,104,101,99,107,45,100, 117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,4,254, 1,30,5,65,35,37,115,116,120,6,71,105,100,101,110,116,105,102,105,101,114, 63,7,2,16,0,11,11,16,0,32,11,16,23,2,4,1,20,103,101,110,101, -114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,72,115,121,110, -116,97,120,45,99,97,115,101,42,9,70,113,117,97,115,105,113,117,111,116,101, -10,66,108,101,116,47,101,99,11,75,108,101,116,114,101,99,45,115,121,110,116, -97,120,101,115,12,67,45,100,101,102,105,110,101,13,71,115,121,110,116,97,120, -45,99,97,115,101,14,73,108,101,116,114,101,99,45,115,121,110,116,97,120,15, -64,99,111,110,100,16,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101, -115,17,71,119,105,116,104,45,115,121,110,116,97,120,18,72,108,101,116,45,115, -121,110,116,97,120,101,115,19,73,100,101,102,105,110,101,45,115,116,114,117,99, -116,20,66,115,121,110,116,97,120,21,63,97,110,100,22,70,108,101,116,45,115, -121,110,116,97,120,23,62,111,114,24,74,45,100,101,102,105,110,101,45,115,121, -110,116,97,120,25,70,115,121,110,116,97,120,47,108,111,99,26,64,119,104,101, -110,27,72,115,121,110,116,97,120,45,114,117,108,101,115,28,66,117,110,108,101, -115,115,29,16,23,11,70,35,37,119,105,116,104,45,115,116,120,30,68,35,37, -115,116,120,108,111,99,31,71,35,37,113,113,45,97,110,100,45,111,114,32,74, -35,37,100,101,102,105,110,101,45,101,116,45,97,108,33,11,2,33,2,31,11, -66,35,37,99,111,110,100,34,11,2,30,11,2,33,69,35,37,115,116,120,99, -97,115,101,35,2,32,11,2,32,2,33,2,31,2,33,11,2,33,16,23,2, +114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115,8,70,108,101,116, +45,115,121,110,116,97,120,9,70,115,121,110,116,97,120,47,108,111,99,10,70, +113,117,97,115,105,113,117,111,116,101,11,72,115,121,110,116,97,120,45,114,117, +108,101,115,12,71,115,121,110,116,97,120,45,99,97,115,101,13,67,45,100,101, +102,105,110,101,14,66,108,101,116,47,101,99,15,64,99,111,110,100,16,75,115, +121,110,116,97,120,45,105,100,45,114,117,108,101,115,17,75,108,101,116,114,101, +99,45,115,121,110,116,97,120,101,115,18,73,100,101,102,105,110,101,45,115,116, +114,117,99,116,19,66,115,121,110,116,97,120,20,73,108,101,116,114,101,99,45, +115,121,110,116,97,120,21,66,117,110,108,101,115,115,22,62,111,114,23,72,108, +101,116,45,115,121,110,116,97,120,101,115,24,71,119,105,116,104,45,115,121,110, +116,97,120,25,63,97,110,100,26,64,119,104,101,110,27,72,115,121,110,116,97, +120,45,99,97,115,101,42,28,74,45,100,101,102,105,110,101,45,115,121,110,116, +97,120,29,16,23,11,70,35,37,119,105,116,104,45,115,116,120,30,11,68,35, +37,115,116,120,108,111,99,31,71,35,37,113,113,45,97,110,100,45,111,114,32, +11,2,31,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108,33,2,33, +66,35,37,99,111,110,100,34,11,11,2,33,69,35,37,115,116,120,99,97,115, +101,35,11,2,33,2,32,11,2,30,2,32,2,33,2,31,2,33,16,23,2, 4,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17, 2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2, -28,2,29,34,55,98,16,5,93,2,12,89,162,32,33,50,9,223,0,27,249, +28,2,29,34,55,98,16,5,93,2,18,89,162,32,33,50,9,223,0,27,249, 22,209,20,15,159,35,32,44,196,27,28,248,80,158,35,32,194,249,80,158,36, 33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193, 249,80,158,39,36,27,248,80,158,41,34,196,28,248,80,158,41,37,193,248,22, @@ -1423,7 +1422,7 @@ 43,34,195,27,248,80,158,44,35,196,28,248,80,158,44,37,193,248,80,158,44, 39,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, 87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,41,42,202,27,251,22, -61,201,202,200,199,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32,11, +61,201,202,199,200,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32,11, 83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3,1, 250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, 184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, @@ -1435,8 +1434,8 @@ 22,209,20,15,159,38,35,44,250,22,209,20,15,159,41,36,44,252,22,62,20, 15,159,46,37,44,250,22,2,89,162,33,33,41,9,223,17,250,22,209,20,15, 159,35,38,44,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35,39,44, -248,22,78,23,16,248,22,52,23,16,20,15,159,46,40,44,248,22,87,205,248, -22,88,205,20,15,159,41,41,44,197,89,162,32,32,33,9,223,0,192,89,162, +248,22,78,23,16,248,22,52,23,16,20,15,159,46,40,44,248,22,88,205,248, +22,87,205,20,15,159,41,41,44,197,89,162,32,32,33,9,223,0,192,89,162, 32,32,34,9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10,10, 98,97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,12,30,42,2,6, 69,115,116,120,45,112,97,105,114,63,43,11,30,44,2,6,67,99,111,110,115, @@ -1451,24 +1450,24 @@ 117,110,116,45,101,114,114,111,114,65,0,16,10,18,98,64,104,101,114,101,66, 38,98,36,10,32,11,97,159,2,31,9,11,159,2,30,9,11,159,2,35,9, 11,159,2,6,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, -101,67,9,11,16,14,2,12,2,2,2,19,2,2,2,15,2,2,2,17,2, -2,2,4,2,2,2,23,2,2,2,28,2,2,98,35,10,33,11,97,159,2, +101,67,9,11,16,14,2,9,2,2,2,12,2,2,2,18,2,2,2,4,2, +2,2,17,2,2,2,21,2,2,2,24,2,2,98,35,10,33,11,97,159,2, 31,9,11,159,2,30,9,11,159,2,35,9,11,159,2,6,9,11,159,2,67, 9,11,16,0,96,34,8,254,1,11,16,0,16,4,33,11,63,115,116,120,68, -3,1,7,101,110,118,50,55,50,56,69,18,16,2,95,66,115,114,99,116,97, -103,70,39,93,8,252,172,7,95,9,8,252,172,7,2,35,18,16,2,99,2, -38,44,93,8,252,172,7,16,6,43,11,61,114,71,63,115,114,99,72,3,1, -7,101,110,118,50,55,52,57,73,2,73,16,4,42,11,64,101,120,110,104,74, -3,1,7,101,110,118,50,55,53,48,75,16,4,41,11,63,101,115,99,76,3, -1,7,101,110,118,50,55,53,49,77,16,4,40,11,63,101,120,110,78,3,1, -7,101,110,118,50,55,53,51,79,95,9,8,252,172,7,2,35,18,100,64,100, +3,1,7,101,110,118,50,55,51,50,69,18,16,2,95,66,115,114,99,116,97, +103,70,39,93,8,252,173,7,95,9,8,252,173,7,2,35,18,16,2,99,2, +38,44,93,8,252,173,7,16,6,43,11,61,114,71,63,115,114,99,72,3,1, +7,101,110,118,50,55,53,51,73,2,73,16,4,42,11,64,101,120,110,104,74, +3,1,7,101,110,118,50,55,53,52,75,16,4,41,11,63,101,115,99,76,3, +1,7,101,110,118,50,55,53,53,77,16,4,40,11,63,101,120,110,78,3,1, +7,101,110,118,50,55,53,55,79,95,9,8,252,173,7,2,35,18,100,64,100, 101,115,116,80,47,36,35,34,33,16,12,46,11,3,1,4,103,51,48,48,81, 3,1,4,103,51,48,49,82,3,1,4,103,51,48,50,83,3,1,4,103,51, -48,51,84,3,1,4,103,51,48,52,85,3,1,7,101,110,118,50,55,52,49, +48,51,84,3,1,4,103,51,48,52,85,3,1,7,101,110,118,50,55,52,53, 86,2,86,2,86,2,86,2,86,16,12,45,11,61,95,87,2,37,2,39,2, -40,2,41,3,1,7,101,110,118,50,55,52,50,88,2,88,2,88,2,88,2, +40,2,41,3,1,7,101,110,118,50,55,52,54,88,2,88,2,88,2,88,2, 88,18,158,63,99,116,120,89,47,18,158,2,36,47,18,158,2,89,47,18,158, -2,89,47,18,158,9,47,18,158,2,89,47,11,16,5,93,2,15,89,162,32, +2,89,47,18,158,9,47,18,158,2,89,47,11,16,5,93,2,21,89,162,32, 33,50,9,223,0,27,249,22,209,20,15,159,35,32,44,196,27,28,248,80,158, 35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197, 28,248,80,158,38,32,193,249,80,158,39,36,27,248,80,158,41,34,196,28,248, @@ -1481,7 +1480,7 @@ 32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28, 248,80,158,44,37,193,248,80,158,44,40,193,11,11,11,11,28,192,27,248,22, 52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89, -198,249,80,158,41,42,202,27,251,22,61,201,202,200,199,27,20,15,159,43,33, +198,249,80,158,41,42,202,27,251,22,61,201,202,199,200,27,20,15,159,43,33, 44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, 162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9,225,6, 3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33, @@ -1493,24 +1492,24 @@ 45,9,223,17,250,22,209,20,15,159,35,38,44,249,22,60,250,22,209,20,15, 159,40,39,44,248,22,60,248,22,52,203,20,15,159,40,40,44,248,22,78,199, 20,15,159,35,41,44,248,22,78,23,16,248,22,52,23,16,20,15,159,46,42, -44,248,22,87,205,248,22,88,205,20,15,159,41,43,44,197,89,162,32,32,33, +44,248,22,88,205,248,22,87,205,20,15,159,41,43,44,197,89,162,32,32,33, 9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,250,22,252, 39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,98,158, 16,12,2,42,2,44,2,46,2,48,2,50,2,52,2,54,2,58,2,56,2, 60,2,62,2,64,16,12,18,98,2,66,49,36,35,34,16,4,48,11,2,68, -3,1,7,101,110,118,50,55,54,50,90,18,16,2,95,2,70,50,93,8,252, -187,7,95,9,8,252,187,7,2,35,18,16,2,99,2,38,55,93,8,252,187, -7,16,6,54,11,2,71,2,72,3,1,7,101,110,118,50,55,56,50,91,2, -91,16,4,53,11,2,74,3,1,7,101,110,118,50,55,56,51,92,16,4,52, -11,2,76,3,1,7,101,110,118,50,55,56,52,93,16,4,51,11,2,78,3, -1,7,101,110,118,50,55,56,54,94,95,9,8,252,187,7,2,35,18,100,2, +3,1,7,101,110,118,50,55,54,54,90,18,16,2,95,2,70,50,93,8,252, +188,7,95,9,8,252,188,7,2,35,18,16,2,99,2,38,55,93,8,252,188, +7,16,6,54,11,2,71,2,72,3,1,7,101,110,118,50,55,56,54,91,2, +91,16,4,53,11,2,74,3,1,7,101,110,118,50,55,56,55,92,16,4,52, +11,2,76,3,1,7,101,110,118,50,55,56,56,93,16,4,51,11,2,78,3, +1,7,101,110,118,50,55,57,48,94,95,9,8,252,188,7,2,35,18,100,2, 80,58,36,35,34,48,16,12,57,11,3,1,4,103,51,48,53,95,3,1,4, 103,51,48,54,96,3,1,4,103,51,48,55,97,3,1,4,103,51,48,56,98, -3,1,4,103,51,48,57,99,3,1,7,101,110,118,50,55,55,52,100,2,100, +3,1,4,103,51,48,57,99,3,1,7,101,110,118,50,55,55,56,100,2,100, 2,100,2,100,2,100,16,12,56,11,2,87,2,37,2,39,2,40,2,41,3, -1,7,101,110,118,50,55,55,53,101,2,101,2,101,2,101,2,101,18,158,2, +1,7,101,110,118,50,55,55,57,101,2,101,2,101,2,101,2,101,18,158,2, 89,58,18,158,2,36,58,18,158,2,89,58,18,158,2,89,58,18,158,2,89, -58,18,158,2,89,58,18,158,9,58,18,158,2,89,58,11,16,5,93,2,19, +58,18,158,2,89,58,18,158,9,58,18,158,2,89,58,11,16,5,93,2,24, 89,162,32,33,52,9,223,0,27,249,22,209,20,15,159,35,32,47,196,27,28, 248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158, 38,35,197,28,248,80,158,38,32,193,249,80,158,39,36,27,248,80,158,41,34, @@ -1530,7 +1529,7 @@ 89,162,32,33,39,9,224,4,5,249,80,158,35,38,28,248,80,158,36,37,197, 248,22,59,248,80,158,37,39,198,11,194,248,80,158,37,39,196,28,248,22,57, 193,9,248,80,158,35,43,193,11,28,192,249,80,158,43,44,204,27,252,22,61, -203,205,202,200,204,27,20,15,159,45,36,47,91,159,33,11,90,161,33,32,11, +202,205,203,200,204,27,20,15,159,45,36,47,91,159,33,11,90,161,33,32,11, 83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3,1, 250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, 184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, @@ -1551,8 +1550,8 @@ 35,49,47,249,22,60,20,15,159,37,50,47,250,22,209,20,15,159,40,51,47, 249,22,60,20,15,159,42,52,47,248,22,52,204,20,15,159,40,53,47,20,15, 159,35,54,47,248,22,78,206,20,15,159,40,55,47,20,15,159,35,56,47,248, -22,78,23,23,248,22,90,23,23,20,15,159,53,57,47,248,22,52,23,20,248, -22,87,23,20,20,15,159,48,58,47,20,15,159,41,59,47,197,89,162,32,32, +22,78,23,23,248,22,90,23,23,20,15,159,53,57,47,248,22,87,23,20,248, +22,52,23,20,20,15,159,48,58,47,20,15,159,41,59,47,197,89,162,32,32, 33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,248,80, 158,42,46,20,15,159,42,8,28,47,250,22,252,39,2,11,6,10,10,98,97, 100,32,115,121,110,116,97,120,196,32,20,98,158,16,15,2,42,2,44,2,46, @@ -1560,34 +1559,34 @@ 30,107,2,6,71,115,116,120,45,114,111,116,97,116,101,42,108,13,2,62,2, 64,30,109,2,30,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105, 108,110,3,16,29,18,98,2,66,8,28,36,35,34,16,4,59,11,2,68,3, -1,7,101,110,118,50,55,57,53,111,18,100,2,66,8,31,36,35,34,59,16, +1,7,101,110,118,50,55,57,57,111,18,100,2,66,8,31,36,35,34,59,16, 12,8,30,11,3,1,4,103,51,49,48,112,3,1,4,103,51,49,49,113,3, 1,4,103,51,49,50,114,3,1,4,103,51,49,51,115,3,1,4,103,51,49, -52,116,3,1,7,101,110,118,50,56,48,56,117,2,117,2,117,2,117,2,117, +52,116,3,1,7,101,110,118,50,56,49,50,117,2,117,2,117,2,117,2,117, 16,12,8,29,11,2,87,2,37,2,39,2,40,2,41,3,1,7,101,110,118, -50,56,48,57,118,2,118,2,118,2,118,2,118,18,16,2,95,2,70,8,32, -93,8,252,202,7,95,9,8,252,202,7,2,35,18,158,2,80,8,31,18,16, -2,95,2,70,8,33,93,8,252,208,7,95,9,8,252,208,7,2,35,18,16, -2,99,2,38,8,38,93,8,252,208,7,16,6,8,37,11,2,71,2,72,3, -1,7,101,110,118,50,56,50,56,119,2,119,16,4,8,36,11,2,74,3,1, -7,101,110,118,50,56,50,57,120,16,4,8,35,11,2,76,3,1,7,101,110, -118,50,56,51,48,121,16,4,8,34,11,2,78,3,1,7,101,110,118,50,56, -51,50,122,95,9,8,252,208,7,2,35,18,102,2,80,8,41,36,35,34,59, +50,56,49,51,118,2,118,2,118,2,118,2,118,18,16,2,95,2,70,8,32, +93,8,252,203,7,95,9,8,252,203,7,2,35,18,158,2,80,8,31,18,16, +2,95,2,70,8,33,93,8,252,209,7,95,9,8,252,209,7,2,35,18,16, +2,99,2,38,8,38,93,8,252,209,7,16,6,8,37,11,2,71,2,72,3, +1,7,101,110,118,50,56,51,50,119,2,119,16,4,8,36,11,2,74,3,1, +7,101,110,118,50,56,51,51,120,16,4,8,35,11,2,76,3,1,7,101,110, +118,50,56,51,52,121,16,4,8,34,11,2,78,3,1,7,101,110,118,50,56, +51,54,122,95,9,8,252,209,7,2,35,18,102,2,80,8,41,36,35,34,59, 8,30,8,29,16,4,8,40,11,3,1,4,103,51,49,55,123,3,1,7,101, -110,118,50,56,50,52,124,16,4,8,39,11,2,102,3,1,7,101,110,118,50, -56,50,53,125,18,158,2,89,8,41,18,158,2,36,8,41,18,158,2,89,8, +110,118,50,56,50,56,124,16,4,8,39,11,2,102,3,1,7,101,110,118,50, +56,50,57,125,18,158,2,89,8,41,18,158,2,36,8,41,18,158,2,89,8, 41,18,158,2,89,8,41,18,158,9,8,41,18,158,2,89,8,41,18,158,2, 36,8,41,18,158,2,89,8,41,18,158,2,89,8,41,18,158,2,103,8,41, 18,158,2,89,8,41,18,158,2,104,8,41,18,158,2,89,8,41,18,158,2, 105,8,41,18,158,2,89,8,41,18,158,2,89,8,41,18,158,2,89,8,41, 18,158,2,89,8,41,18,158,9,8,41,18,158,2,89,8,41,18,158,2,89, 8,41,18,16,2,158,94,16,2,158,94,16,2,98,2,102,8,45,93,8,252, -201,7,16,4,8,44,11,3,1,8,119,115,116,109,112,51,49,53,126,3,1, -7,101,110,118,50,56,49,54,127,16,4,8,43,11,3,1,4,103,51,49,54, -128,3,1,7,101,110,118,50,56,52,53,129,16,4,8,42,11,65,95,101,108, -115,101,130,3,1,7,101,110,118,50,56,52,54,131,9,16,2,158,2,38,8, -45,9,8,45,9,16,2,158,2,38,8,45,9,8,45,95,9,8,252,201,7, -2,30,11,16,5,93,2,23,89,162,32,33,50,9,223,0,27,249,22,209,20, +202,7,16,4,8,44,11,3,1,8,119,115,116,109,112,51,49,53,126,3,1, +7,101,110,118,50,56,50,48,127,16,4,8,43,11,3,1,4,103,51,49,54, +128,3,1,7,101,110,118,50,56,52,57,129,16,4,8,42,11,65,95,101,108, +115,101,130,3,1,7,101,110,118,50,56,53,48,131,9,16,2,158,2,38,8, +45,9,8,45,9,16,2,158,2,38,8,45,9,8,45,95,9,8,252,202,7, +2,30,11,16,5,93,2,9,89,162,32,33,50,9,223,0,27,249,22,209,20, 15,159,35,32,44,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80, 158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158, 39,36,27,248,80,158,41,34,196,28,248,80,158,41,37,193,248,22,8,89,162, @@ -1600,36 +1599,36 @@ 43,34,195,27,248,80,158,44,35,196,28,248,80,158,44,37,193,248,80,158,44, 40,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, 87,196,27,248,22,90,197,27,248,22,89,198,249,80,158,41,42,202,27,251,22, -61,202,200,201,199,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32,11, +61,199,202,201,200,27,20,15,159,43,33,44,91,159,33,11,90,161,33,32,11, 83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,13,2,3,1, 250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, 184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, 32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80, -158,35,43,21,97,2,19,94,94,93,2,37,2,39,2,38,2,40,2,41,2, +158,35,43,21,97,2,24,94,94,93,2,37,2,39,2,38,2,40,2,41,2, 38,20,15,159,35,34,44,89,162,32,32,50,9,225,6,5,4,27,250,22,209, 20,15,159,38,35,44,250,22,209,20,15,159,41,36,44,251,22,62,20,15,159, 45,37,44,250,22,2,89,162,33,33,45,9,223,16,250,22,209,20,15,159,35, 38,44,249,22,60,250,22,209,20,15,159,40,39,44,248,22,60,248,22,52,203, -20,15,159,40,40,44,248,22,78,199,20,15,159,35,41,44,248,22,52,23,15, -248,22,87,23,15,248,22,78,204,248,22,88,204,20,15,159,41,42,44,197,89, +20,15,159,40,40,44,248,22,78,199,20,15,159,35,41,44,248,22,78,23,15, +248,22,87,23,15,248,22,88,204,248,22,52,204,20,15,159,41,42,44,197,89, 162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2, 208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196, 32,20,98,158,16,12,2,42,2,44,2,46,2,48,2,50,2,52,2,54,2, 58,2,56,2,60,2,62,2,64,16,11,18,98,2,66,8,47,36,35,34,16, -4,8,46,11,2,68,3,1,7,101,110,118,50,56,52,57,132,18,16,2,95, -2,70,8,48,93,8,252,224,7,95,9,8,252,224,7,2,35,18,16,2,99, -2,38,8,53,93,8,252,224,7,16,6,8,52,11,2,71,2,72,3,1,7, -101,110,118,50,56,54,57,133,2,133,16,4,8,51,11,2,74,3,1,7,101, -110,118,50,56,55,48,134,16,4,8,50,11,2,76,3,1,7,101,110,118,50, -56,55,49,135,16,4,8,49,11,2,78,3,1,7,101,110,118,50,56,55,51, -136,95,9,8,252,224,7,2,35,18,100,2,80,8,56,36,35,34,8,46,16, +4,8,46,11,2,68,3,1,7,101,110,118,50,56,53,51,132,18,16,2,95, +2,70,8,48,93,8,252,225,7,95,9,8,252,225,7,2,35,18,16,2,99, +2,38,8,53,93,8,252,225,7,16,6,8,52,11,2,71,2,72,3,1,7, +101,110,118,50,56,55,51,133,2,133,16,4,8,51,11,2,74,3,1,7,101, +110,118,50,56,55,52,134,16,4,8,50,11,2,76,3,1,7,101,110,118,50, +56,55,53,135,16,4,8,49,11,2,78,3,1,7,101,110,118,50,56,55,55, +136,95,9,8,252,225,7,2,35,18,100,2,80,8,56,36,35,34,8,46,16, 12,8,55,11,3,1,4,103,51,49,56,137,3,1,4,103,51,49,57,138,3, 1,4,103,51,50,48,139,3,1,4,103,51,50,49,140,3,1,4,103,51,50, -50,141,3,1,7,101,110,118,50,56,54,49,142,2,142,2,142,2,142,2,142, +50,141,3,1,7,101,110,118,50,56,54,53,142,2,142,2,142,2,142,2,142, 16,12,8,54,11,2,87,2,37,2,39,2,40,2,41,3,1,7,101,110,118, -50,56,54,50,143,2,143,2,143,2,143,2,143,18,158,2,89,8,56,18,158, -2,19,8,56,18,158,2,89,8,56,18,158,2,89,8,56,18,158,2,89,8, -56,18,158,2,89,8,56,18,158,2,89,8,56,11,16,5,93,2,28,89,162, +50,56,54,54,143,2,143,2,143,2,143,2,143,18,158,2,89,8,56,18,158, +2,24,8,56,18,158,2,89,8,56,18,158,2,89,8,56,18,158,2,89,8, +56,18,158,2,89,8,56,18,158,2,89,8,56,11,16,5,93,2,12,89,162, 32,33,52,9,223,0,27,89,162,32,32,36,68,116,114,121,45,110,101,120,116, 144,223,2,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, 120,195,27,28,248,80,158,35,32,196,249,80,158,36,33,248,80,158,37,34,198, @@ -1649,7 +1648,7 @@ 89,162,32,33,36,9,222,248,22,43,248,22,44,248,22,210,195,248,22,216,27, 20,15,159,46,35,46,250,22,209,20,15,159,49,36,46,204,195,27,28,248,80, 158,42,37,194,248,80,158,42,38,194,11,28,192,249,80,158,43,43,204,27,252, -22,61,202,206,205,203,200,27,20,15,159,45,37,46,91,159,33,11,90,161,33, +22,61,200,206,203,205,202,27,20,15,159,45,37,46,91,159,33,11,90,161,33, 32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2, 3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247, 22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89, @@ -1658,116 +1657,114 @@ 115,121,110,116,97,120,45,99,97,115,101,42,42,147,2,87,10,2,146,94,61, 107,148,2,38,79,109,111,100,117,108,101,45,105,100,101,110,116,105,102,105,101, 114,61,63,149,94,158,65,100,117,109,109,121,150,67,112,97,116,116,101,114,110, -151,95,2,26,2,146,68,116,101,109,112,108,97,116,101,152,2,38,20,15,159, +151,95,2,10,2,146,68,116,101,109,112,108,97,116,101,152,2,38,20,15,159, 35,38,46,89,162,32,32,8,28,9,225,6,5,4,27,250,22,209,20,15,159, 38,39,46,250,22,209,20,15,159,41,40,46,250,22,60,20,15,159,44,41,46, 20,15,159,44,42,46,250,22,209,20,15,159,47,43,46,254,22,62,20,15,159, 54,44,46,248,22,78,23,21,20,15,159,54,45,46,20,15,159,54,46,46,248, -22,87,23,21,20,15,159,54,47,46,251,22,2,89,162,33,33,49,9,223,26, +22,90,23,21,20,15,159,54,47,46,251,22,2,89,162,33,33,49,9,223,26, 250,22,209,20,15,159,35,48,46,249,22,60,250,22,209,20,15,159,40,49,46, 249,22,56,248,22,52,204,248,22,78,204,20,15,159,40,50,46,250,22,209,20, 15,159,40,51,46,250,22,60,20,15,159,43,52,46,20,15,159,43,53,46,248, -22,87,205,20,15,159,40,54,46,20,15,159,35,55,46,248,22,89,23,25,248, -22,90,23,25,248,22,52,23,25,20,15,159,47,56,46,20,15,159,41,57,46, +22,87,205,20,15,159,40,54,46,20,15,159,35,55,46,248,22,52,23,25,248, +22,87,23,25,248,22,89,23,25,20,15,159,47,56,46,20,15,159,41,57,46, 197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252, 184,2,208,248,80,158,42,45,20,15,159,42,58,46,247,198,247,193,32,20,98, 158,16,14,2,42,2,44,2,46,2,48,2,50,2,52,2,56,2,54,2,58, 2,107,30,153,2,6,2,7,2,2,62,2,64,2,109,16,27,18,16,2,95, -2,70,8,57,93,8,252,238,7,95,9,8,252,238,7,2,35,18,100,2,80, +2,70,8,57,93,8,252,239,7,95,9,8,252,239,7,2,35,18,100,2,80, 8,61,36,35,34,16,4,8,60,11,2,146,3,1,7,101,110,118,50,56,56, -50,154,16,12,8,59,11,3,1,4,103,51,50,51,155,3,1,4,103,51,50, +54,154,16,12,8,59,11,3,1,4,103,51,50,51,155,3,1,4,103,51,50, 52,156,3,1,4,103,51,50,53,157,3,1,4,103,51,50,54,158,3,1,4, -103,51,50,55,159,3,1,7,101,110,118,50,56,57,56,160,2,160,2,160,2, +103,51,50,55,159,3,1,7,101,110,118,50,57,48,50,160,2,160,2,160,2, 160,2,160,16,12,8,58,11,2,87,2,148,67,107,101,121,119,111,114,100,161, -2,151,2,152,3,1,7,101,110,118,50,56,57,57,162,2,162,2,162,2,162, -2,162,18,158,2,66,8,61,18,16,2,95,2,70,8,62,93,8,252,240,7, -95,9,8,252,240,7,2,35,18,158,2,80,8,61,18,16,2,95,2,70,8, -63,93,8,252,243,7,95,9,8,252,243,7,2,35,18,16,2,99,2,38,8, -68,93,8,252,243,7,16,6,8,67,11,2,71,2,72,3,1,7,101,110,118, -50,57,49,54,163,2,163,16,4,8,66,11,2,74,3,1,7,101,110,118,50, -57,49,55,164,16,4,8,65,11,2,76,3,1,7,101,110,118,50,57,49,56, -165,16,4,8,64,11,2,78,3,1,7,101,110,118,50,57,50,48,166,95,9, -8,252,243,7,2,35,18,102,2,80,8,73,36,35,34,8,60,16,12,8,72, -11,2,155,2,156,2,157,2,158,2,159,2,160,2,160,2,160,2,160,2,160, -16,12,8,71,11,2,87,2,148,2,161,2,151,2,152,2,162,2,162,2,162, -2,162,2,162,16,4,8,70,11,3,1,4,103,51,51,48,167,3,1,7,101, -110,118,50,57,49,50,168,16,4,8,69,11,2,150,3,1,7,101,110,118,50, -57,49,51,169,18,158,2,89,8,73,18,158,2,145,8,73,18,158,93,16,2, -158,2,146,8,73,9,8,73,18,158,2,89,8,73,18,158,2,147,8,73,18, -158,10,8,73,18,158,2,146,8,73,18,158,2,149,8,73,18,158,2,89,8, -73,18,158,2,89,8,73,18,158,2,89,8,73,18,158,2,89,8,73,18,158, -2,26,8,73,18,158,2,146,8,73,18,158,2,89,8,73,18,158,2,89,8, -73,18,158,2,89,8,73,18,158,2,89,8,73,18,16,2,158,94,16,2,98, -2,150,8,77,93,8,252,239,7,16,4,8,76,11,3,1,8,119,115,116,109, -112,51,50,56,170,3,1,7,101,110,118,50,57,48,54,171,16,4,8,75,11, -3,1,4,103,51,50,57,172,3,1,7,101,110,118,50,57,50,57,173,16,4, -8,74,11,2,130,3,1,7,101,110,118,50,57,51,48,174,9,16,2,158,2, -38,8,77,9,8,77,95,9,8,252,239,7,2,30,11,16,5,93,2,17,89, -162,32,33,48,9,223,0,27,89,162,32,32,36,2,144,223,2,250,22,252,39, -2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158, -35,32,196,249,80,158,36,33,248,80,158,37,34,198,27,248,80,158,38,35,199, -28,248,80,158,38,32,193,249,80,158,39,36,27,248,80,158,41,34,196,28,248, -80,158,41,37,193,248,22,59,248,80,158,42,38,194,11,27,248,80,158,41,35, -196,28,248,80,158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1,27, -249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,39,28,248,80,158, -36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200, -28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158, -41,40,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57, -193,21,93,9,248,80,158,35,41,193,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,87,196,27,248,22,88,197,28,249,22,4,80,158,40, -42,248,22,216,27,20,15,159,42,32,45,250,22,209,20,15,159,45,33,45,201, -195,249,80,158,40,43,201,27,251,22,61,199,202,201,200,27,20,15,159,42,34, -45,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, -162,32,33,40,9,226,12,2,3,1,250,22,31,89,162,32,32,36,9,225,6, -3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33, -36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181, -2,193,248,22,252,186,2,193,249,80,158,35,44,21,94,1,21,109,97,107,101, -45,115,101,116,33,45,116,114,97,110,115,102,111,114,109,101,114,175,95,2,145, -93,2,146,100,2,147,2,87,10,2,146,94,2,148,2,38,2,149,94,2,151, -95,2,26,2,146,2,152,2,38,20,15,159,35,35,45,89,162,32,32,8,32, -9,225,6,5,4,27,250,22,209,20,15,159,38,36,45,250,22,209,20,15,159, -41,37,45,249,22,60,20,15,159,43,38,45,250,22,209,20,15,159,46,39,45, -250,22,60,20,15,159,49,40,45,20,15,159,49,41,45,250,22,209,20,15,159, -52,42,45,254,22,62,20,15,159,59,43,45,248,22,78,23,26,20,15,159,59, -44,45,20,15,159,59,45,45,248,22,87,23,26,20,15,159,59,46,45,250,22, -2,89,162,33,33,46,9,223,30,250,22,209,20,15,159,35,47,45,249,22,60, -248,22,52,199,250,22,209,20,15,159,40,48,45,250,22,60,20,15,159,43,49, -45,20,15,159,43,50,45,248,22,78,205,20,15,159,40,51,45,20,15,159,35, -52,45,248,22,88,23,29,248,22,52,23,29,20,15,159,52,53,45,20,15,159, -46,54,45,20,15,159,41,55,45,197,89,162,32,32,33,9,223,0,192,89,162, -32,32,34,9,223,3,248,22,252,184,2,208,247,197,247,193,32,20,98,158,16, -13,2,42,2,44,2,46,2,48,2,50,2,52,2,56,2,54,2,58,2,107, -2,153,2,62,2,64,16,24,18,16,2,95,2,70,8,78,93,8,252,1,8, -95,9,8,252,1,8,2,35,18,100,2,80,8,82,36,35,34,16,4,8,81, -11,2,146,3,1,7,101,110,118,50,57,51,51,176,16,10,8,80,11,3,1, -4,103,51,51,49,177,3,1,4,103,51,51,50,178,3,1,4,103,51,51,51, -179,3,1,4,103,51,51,52,180,3,1,7,101,110,118,50,57,52,54,181,2, -181,2,181,2,181,16,10,8,79,11,2,87,2,148,2,151,2,152,3,1,7, -101,110,118,50,57,52,55,182,2,182,2,182,2,182,18,16,2,95,2,70,8, -83,93,8,252,3,8,95,9,8,252,3,8,2,35,18,16,2,99,2,38,8, -88,93,8,252,3,8,16,6,8,87,11,2,71,2,72,3,1,7,101,110,118, -50,57,53,51,183,2,183,16,4,8,86,11,2,74,3,1,7,101,110,118,50, -57,53,52,184,16,4,8,85,11,2,76,3,1,7,101,110,118,50,57,53,53, -185,16,4,8,84,11,2,78,3,1,7,101,110,118,50,57,53,55,186,95,9, -8,252,3,8,2,35,18,158,2,80,8,82,18,158,2,89,8,82,18,158,2, -175,8,82,18,158,2,89,8,82,18,158,2,145,8,82,18,158,93,16,2,158, -2,146,8,82,9,8,82,18,158,2,89,8,82,18,158,2,147,8,82,18,158, -10,8,82,18,158,2,146,8,82,18,158,2,149,8,82,18,158,2,89,8,82, -18,158,2,89,8,82,18,158,2,26,8,82,18,158,2,146,8,82,18,158,2, -89,8,82,18,158,2,89,8,82,18,158,2,89,8,82,18,158,2,89,8,82, -18,158,2,89,8,82,11,93,83,159,32,93,80,159,32,32,33,89,162,32,33, -35,2,4,223,0,248,22,8,89,162,32,33,38,9,224,1,2,27,247,22,110, -87,94,249,22,3,89,162,32,33,43,9,226,4,3,5,2,87,94,28,248,80, -158,36,33,197,12,250,22,252,40,2,2,4,6,19,19,108,105,115,116,32,111, -102,32,105,100,101,110,116,105,102,105,101,114,115,197,27,250,22,116,196,248,22, -210,201,89,97,40,32,32,9,222,87,94,28,249,22,5,89,162,32,33,36,9, -223,7,249,22,221,195,194,194,248,195,198,12,250,22,115,196,248,22,210,201,249, -22,51,202,197,195,11,98,68,35,37,107,101,114,110,101,108,187,2,67,2,6, -2,35,2,30,2,31,98,2,187,2,67,2,6,2,35,2,30,2,31,0}; - EVAL_ONE_SIZED_STR((char *)expr, 7999); +2,151,2,152,3,1,7,101,110,118,50,57,48,51,162,2,162,2,162,2,162, +2,162,18,158,2,66,8,61,18,16,2,95,2,70,8,62,93,8,252,241,7, +95,9,8,252,241,7,2,35,18,158,2,80,8,61,18,16,2,95,2,70,8, +63,93,8,252,244,7,95,9,8,252,244,7,2,35,18,16,2,99,2,38,8, +68,93,8,252,244,7,16,6,8,67,11,2,71,2,72,3,1,7,101,110,118, +50,57,50,48,163,2,163,16,4,8,66,11,2,74,3,1,7,101,110,118,50, +57,50,49,164,16,4,8,65,11,2,76,3,1,7,101,110,118,50,57,50,50, +165,16,4,8,64,11,2,78,3,1,7,101,110,118,50,57,50,52,166,95,9, +8,252,244,7,2,35,18,102,2,80,8,71,36,35,34,8,60,8,59,8,58, +16,4,8,70,11,3,1,4,103,51,51,48,167,3,1,7,101,110,118,50,57, +49,54,168,16,4,8,69,11,2,150,3,1,7,101,110,118,50,57,49,55,169, +18,158,2,89,8,71,18,158,2,145,8,71,18,158,93,16,2,158,2,146,8, +71,9,8,71,18,158,2,89,8,71,18,158,2,147,8,71,18,158,10,8,71, +18,158,2,146,8,71,18,158,2,149,8,71,18,158,2,89,8,71,18,158,2, +89,8,71,18,158,2,89,8,71,18,158,2,89,8,71,18,158,2,10,8,71, +18,158,2,146,8,71,18,158,2,89,8,71,18,158,2,89,8,71,18,158,2, +89,8,71,18,158,2,89,8,71,18,16,2,158,94,16,2,98,2,150,8,75, +93,8,252,240,7,16,4,8,74,11,3,1,8,119,115,116,109,112,51,50,56, +170,3,1,7,101,110,118,50,57,49,48,171,16,4,8,73,11,3,1,4,103, +51,50,57,172,3,1,7,101,110,118,50,57,51,51,173,16,4,8,72,11,2, +130,3,1,7,101,110,118,50,57,51,52,174,9,16,2,158,2,38,8,75,9, +8,75,95,9,8,252,240,7,2,30,11,16,5,93,2,17,89,162,32,33,48, +9,223,0,27,89,162,32,32,36,2,144,223,2,250,22,252,39,2,11,6,10, +10,98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158,35,32,196,249, +80,158,36,33,248,80,158,37,34,198,27,248,80,158,38,35,199,28,248,80,158, +38,32,193,249,80,158,39,36,27,248,80,158,41,34,196,28,248,80,158,41,37, +193,248,22,59,248,80,158,42,38,194,11,27,248,80,158,41,35,196,28,248,80, +158,41,37,193,248,22,8,89,162,32,33,39,9,224,9,1,27,249,22,2,89, +162,32,33,45,9,224,4,5,249,80,158,35,39,28,248,80,158,36,32,197,249, +80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158, +39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,40,248,80, +158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57,193,21,93,9, +248,80,158,35,41,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, +27,248,22,87,196,27,248,22,88,197,28,249,22,4,80,158,40,42,248,22,216, +27,20,15,159,42,32,45,250,22,209,20,15,159,45,33,45,201,195,249,80,158, +40,43,201,27,251,22,61,202,200,201,199,27,20,15,159,42,34,45,91,159,33, +11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40, +9,226,12,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161, +33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3, +1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22, +252,186,2,193,249,80,158,35,44,21,94,1,21,109,97,107,101,45,115,101,116, +33,45,116,114,97,110,115,102,111,114,109,101,114,175,95,2,145,93,2,146,100, +2,147,2,87,10,2,146,94,2,148,2,38,2,149,94,2,151,95,2,10,2, +146,2,152,2,38,20,15,159,35,35,45,89,162,32,32,8,32,9,225,6,5, +4,27,250,22,209,20,15,159,38,36,45,250,22,209,20,15,159,41,37,45,249, +22,60,20,15,159,43,38,45,250,22,209,20,15,159,46,39,45,250,22,60,20, +15,159,49,40,45,20,15,159,49,41,45,250,22,209,20,15,159,52,42,45,254, +22,62,20,15,159,59,43,45,248,22,52,23,26,20,15,159,59,44,45,20,15, +159,59,45,45,248,22,87,23,26,20,15,159,59,46,45,250,22,2,89,162,33, +33,46,9,223,30,250,22,209,20,15,159,35,47,45,249,22,60,248,22,52,199, +250,22,209,20,15,159,40,48,45,250,22,60,20,15,159,43,49,45,20,15,159, +43,50,45,248,22,78,205,20,15,159,40,51,45,20,15,159,35,52,45,248,22, +78,23,29,248,22,88,23,29,20,15,159,52,53,45,20,15,159,46,54,45,20, +15,159,41,55,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9, +223,3,248,22,252,184,2,208,247,197,247,193,32,20,98,158,16,13,2,42,2, +44,2,46,2,48,2,50,2,52,2,56,2,54,2,58,2,107,2,153,2,62, +2,64,16,24,18,16,2,95,2,70,8,76,93,8,252,2,8,95,9,8,252, +2,8,2,35,18,100,2,80,8,80,36,35,34,16,4,8,79,11,2,146,3, +1,7,101,110,118,50,57,51,55,176,16,10,8,78,11,3,1,4,103,51,51, +49,177,3,1,4,103,51,51,50,178,3,1,4,103,51,51,51,179,3,1,4, +103,51,51,52,180,3,1,7,101,110,118,50,57,53,48,181,2,181,2,181,2, +181,16,10,8,77,11,2,87,2,148,2,151,2,152,3,1,7,101,110,118,50, +57,53,49,182,2,182,2,182,2,182,18,16,2,95,2,70,8,81,93,8,252, +4,8,95,9,8,252,4,8,2,35,18,16,2,99,2,38,8,86,93,8,252, +4,8,16,6,8,85,11,2,71,2,72,3,1,7,101,110,118,50,57,53,55, +183,2,183,16,4,8,84,11,2,74,3,1,7,101,110,118,50,57,53,56,184, +16,4,8,83,11,2,76,3,1,7,101,110,118,50,57,53,57,185,16,4,8, +82,11,2,78,3,1,7,101,110,118,50,57,54,49,186,95,9,8,252,4,8, +2,35,18,158,2,80,8,80,18,158,2,89,8,80,18,158,2,175,8,80,18, +158,2,89,8,80,18,158,2,145,8,80,18,158,93,16,2,158,2,146,8,80, +9,8,80,18,158,2,89,8,80,18,158,2,147,8,80,18,158,10,8,80,18, +158,2,146,8,80,18,158,2,149,8,80,18,158,2,89,8,80,18,158,2,89, +8,80,18,158,2,10,8,80,18,158,2,146,8,80,18,158,2,89,8,80,18, +158,2,89,8,80,18,158,2,89,8,80,18,158,2,89,8,80,18,158,2,89, +8,80,11,93,83,159,32,93,80,159,32,32,33,89,162,32,33,35,2,4,223, +0,248,22,8,89,162,32,33,38,9,224,1,2,27,247,22,110,87,94,249,22, +3,89,162,32,33,43,9,226,4,3,5,2,87,94,28,248,80,158,36,33,197, +12,250,22,252,40,2,2,4,6,19,19,108,105,115,116,32,111,102,32,105,100, +101,110,116,105,102,105,101,114,115,197,27,250,22,116,196,248,22,210,201,89,97, +40,32,32,9,222,87,94,28,249,22,5,89,162,32,33,36,9,223,7,249,22, +221,195,194,194,248,195,198,12,250,22,115,196,248,22,210,201,249,22,51,202,197, +195,11,98,68,35,37,107,101,114,110,101,108,187,2,67,2,6,2,35,2,30, +2,31,98,2,187,2,67,2,6,2,35,2,30,2,31,0}; + EVAL_ONE_SIZED_STR((char *)expr, 7953); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,102,252,138,12,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,102,252,138,12,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,67,35,37,113,113,115, 116,120,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,2,30, 3,2,2,79,99,104,101,99,107,45,115,112,108,105,99,105,110,103,45,108,105, @@ -1803,12 +1800,12 @@ 22,209,20,15,159,38,37,40,248,22,52,248,80,158,40,38,21,93,63,117,113, 115,17,27,249,22,209,20,15,159,39,38,40,250,22,209,199,63,99,116,120,18, 199,249,198,250,22,209,200,250,22,61,201,20,15,159,45,39,40,206,200,249,22, -51,27,250,22,61,202,200,201,27,20,15,159,43,40,40,250,22,209,20,15,159, +51,27,250,22,61,201,202,200,27,20,15,159,43,40,40,250,22,209,20,15,159, 46,41,40,250,22,209,20,15,159,49,42,40,249,22,60,250,22,209,20,15,159, -54,43,40,249,22,60,248,22,80,23,15,20,15,159,56,44,40,20,15,159,54, +54,43,40,249,22,60,248,22,52,23,15,20,15,159,56,44,40,20,15,159,54, 45,40,250,22,209,20,15,159,54,46,40,250,22,60,20,15,159,57,47,40,248, -22,52,23,16,250,22,209,20,15,159,8,28,48,40,249,22,60,20,15,159,8, -30,49,40,248,22,78,23,21,20,15,159,8,28,50,40,20,15,159,54,51,40, +22,78,23,16,250,22,209,20,15,159,8,28,48,40,249,22,60,20,15,159,8, +30,49,40,248,22,80,23,21,20,15,159,8,28,50,40,20,15,159,54,51,40, 20,15,159,49,52,40,195,203,251,203,197,23,16,89,162,32,32,36,9,224,5, 4,249,194,195,9,196,251,202,197,248,22,171,23,16,89,162,32,32,46,9,229, 13,10,17,16,15,14,4,251,201,196,198,199,27,248,80,158,44,33,199,27,9, @@ -1870,53 +1867,53 @@ 101,115,36,0,30,37,2,6,67,99,111,110,115,47,35,102,38,1,16,31,18, 98,64,104,101,114,101,39,38,98,36,10,32,11,94,159,2,6,9,11,159,76, 35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,40,9,11,16,10, -2,4,2,2,2,9,2,2,2,10,2,2,2,11,2,2,2,8,2,2,98, +2,8,2,2,2,9,2,2,2,10,2,2,2,4,2,2,2,11,2,2,98, 35,10,33,11,94,159,2,6,9,11,159,2,40,9,11,16,0,96,34,8,254, 1,11,16,0,16,8,33,11,68,111,114,105,103,45,115,116,120,41,64,98,111, 100,121,42,68,109,107,45,102,105,110,97,108,43,3,1,7,101,110,118,50,57, -56,48,44,2,44,2,44,18,101,2,39,42,36,35,34,33,16,4,41,11,68, -104,101,114,101,45,115,116,120,45,3,1,7,101,110,118,50,57,56,49,46,16, -4,40,11,2,14,3,1,7,101,110,118,50,57,56,50,47,16,10,39,11,63, +56,52,44,2,44,2,44,18,101,2,39,42,36,35,34,33,16,4,41,11,68, +104,101,114,101,45,115,116,120,45,3,1,7,101,110,118,50,57,56,53,46,16, +4,40,11,2,14,3,1,7,101,110,118,50,57,56,54,47,16,10,39,11,63, 115,116,120,48,65,100,101,112,116,104,49,2,21,2,20,3,1,7,101,110,118, -50,57,56,51,50,2,50,2,50,2,50,18,158,2,9,42,18,158,2,9,42, +50,57,56,55,50,2,50,2,50,2,50,18,158,2,9,42,18,158,2,9,42, 18,158,2,10,42,18,104,2,39,46,36,35,34,33,41,40,39,16,6,45,11, 3,1,4,103,51,51,55,51,3,1,4,103,51,51,56,52,3,1,7,101,110, -118,51,48,48,52,53,2,53,16,6,44,11,61,120,54,64,114,101,115,116,55, -3,1,7,101,110,118,51,48,48,53,56,2,56,16,6,43,11,66,114,101,115, +118,51,48,48,56,53,2,53,16,6,44,11,61,120,54,64,114,101,115,116,55, +3,1,7,101,110,118,51,48,48,57,56,2,56,16,6,43,11,66,114,101,115, 116,45,118,57,68,98,105,110,100,105,110,103,115,58,3,1,7,101,110,118,51, -48,48,57,59,2,59,18,158,2,39,46,18,108,63,46,46,46,60,51,36,35, +48,49,51,59,2,59,18,158,2,39,46,18,108,63,46,46,46,60,51,36,35, 34,33,41,40,39,45,44,43,16,4,50,11,3,1,4,103,51,52,51,61,3, -1,7,101,110,118,51,48,49,55,62,16,4,49,11,64,116,101,109,112,63,3, -1,7,101,110,118,51,48,49,56,64,16,4,48,11,3,1,4,103,51,52,53, -65,3,1,7,101,110,118,51,48,50,55,66,16,4,47,11,2,18,3,1,7, -101,110,118,51,48,50,56,67,18,16,2,95,66,115,114,99,116,97,103,68,52, -93,8,252,47,8,95,9,8,252,47,8,69,35,37,115,116,120,99,97,115,101, +1,7,101,110,118,51,48,50,49,62,16,4,49,11,64,116,101,109,112,63,3, +1,7,101,110,118,51,48,50,50,64,16,4,48,11,3,1,4,103,51,52,53, +65,3,1,7,101,110,118,51,48,51,49,66,16,4,47,11,2,18,3,1,7, +101,110,118,51,48,51,50,67,18,16,2,95,66,115,114,99,116,97,103,68,52, +93,8,252,48,8,95,9,8,252,48,8,69,35,37,115,116,120,99,97,115,101, 69,18,158,64,100,101,115,116,70,51,18,158,2,18,51,18,158,2,18,51,18, 158,2,60,51,18,158,2,18,51,18,158,2,18,51,18,158,2,4,51,18,158, 2,18,51,18,158,72,113,117,111,116,101,45,115,121,110,116,97,120,71,51,18, 158,2,18,51,18,158,2,18,51,18,158,2,18,51,18,158,2,10,42,18,158, 2,8,42,18,106,2,9,58,36,35,34,33,41,40,39,16,4,57,11,3,1, -4,103,51,51,53,72,3,1,7,101,110,118,51,48,53,49,73,16,4,56,11, -65,95,101,108,115,101,74,3,1,7,101,110,118,51,48,53,50,75,16,4,55, -11,2,19,3,1,7,101,110,118,51,48,53,53,76,16,4,54,11,61,108,77, -3,1,7,101,110,118,51,48,53,54,78,16,4,53,11,61,97,79,3,1,7, -101,110,118,51,48,53,55,80,18,158,2,8,58,18,158,2,10,58,18,16,2, +4,103,51,51,53,72,3,1,7,101,110,118,51,48,53,53,73,16,4,56,11, +65,95,101,108,115,101,74,3,1,7,101,110,118,51,48,53,54,75,16,4,55, +11,2,19,3,1,7,101,110,118,51,48,53,57,76,16,4,54,11,61,108,77, +3,1,7,101,110,118,51,48,54,48,78,16,4,53,11,61,97,79,3,1,7, +101,110,118,51,48,54,49,80,18,158,2,8,58,18,158,2,10,58,18,16,2, 100,71,119,105,116,104,45,115,121,110,116,97,120,81,8,28,36,35,34,33,41, -16,4,59,11,2,58,3,1,7,101,110,118,51,48,54,57,82,9,18,99,2, +16,4,59,11,2,58,3,1,7,101,110,118,51,48,55,51,82,9,18,99,2, 39,8,31,36,35,34,16,4,8,30,11,2,13,3,1,7,101,110,118,50,57, -55,57,83,16,4,8,29,11,2,41,3,1,7,101,110,118,51,48,55,48,84, +56,51,83,16,4,8,29,11,2,41,3,1,7,101,110,118,51,48,55,52,84, 18,102,66,115,121,110,116,97,120,85,8,35,36,35,34,8,30,8,29,16,6, 8,34,11,3,1,4,103,51,52,54,86,3,1,4,103,51,52,55,87,3,1, -7,101,110,118,51,48,55,53,88,2,88,16,6,8,33,11,61,95,89,2,48, -3,1,7,101,110,118,51,48,55,54,90,2,90,16,4,8,32,11,2,42,3, -1,7,101,110,118,51,48,55,57,91,18,99,2,39,8,37,36,35,34,8,30, -16,4,8,36,11,2,41,3,1,7,101,110,118,51,48,56,48,92,18,102,70, +7,101,110,118,51,48,55,57,88,2,88,16,6,8,33,11,61,95,89,2,48, +3,1,7,101,110,118,51,48,56,48,90,2,90,16,4,8,32,11,2,42,3, +1,7,101,110,118,51,48,56,51,91,18,99,2,39,8,37,36,35,34,8,30, +16,4,8,36,11,2,41,3,1,7,101,110,118,51,48,56,52,92,18,102,70, 115,121,110,116,97,120,47,108,111,99,93,8,41,36,35,34,8,30,8,36,16, 8,8,40,11,3,1,4,103,51,52,56,94,3,1,4,103,51,52,57,95,3, -1,4,103,51,53,48,96,3,1,7,101,110,118,51,48,56,54,97,2,97,2, +1,4,103,51,53,48,96,3,1,7,101,110,118,51,48,57,48,97,2,97,2, 97,16,8,8,39,11,2,89,63,108,111,99,98,2,48,3,1,7,101,110,118, -51,48,56,55,99,2,99,2,99,16,4,8,38,11,2,42,3,1,7,101,110, -118,51,48,57,49,100,11,93,83,159,32,93,80,159,32,32,33,89,162,32,34, +51,48,57,49,99,2,99,2,99,16,4,8,38,11,2,42,3,1,7,101,110, +118,51,48,57,53,100,11,93,83,159,32,93,80,159,32,32,33,89,162,32,34, 38,2,4,223,0,87,94,28,248,80,158,33,33,194,12,250,22,252,40,2,2, 10,6,18,18,112,114,111,112,101,114,32,115,121,110,116,97,120,32,108,105,115, 116,196,250,22,209,197,196,197,95,68,35,37,107,101,114,110,101,108,101,2,40, @@ -1924,14 +1921,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 3222); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,165,252,59,26,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,165,252,57,26,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,35,37,100,101,102, 105,110,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,0, -16,0,11,11,16,0,32,11,16,4,77,100,101,102,105,110,101,45,102,111,114, -45,115,121,110,116,97,120,3,73,100,101,102,105,110,101,45,115,121,110,116,97, -120,4,66,100,101,102,105,110,101,5,76,98,101,103,105,110,45,102,111,114,45, +16,0,11,11,16,0,32,11,16,4,66,100,101,102,105,110,101,3,73,100,101, +102,105,110,101,45,115,121,110,116,97,120,4,77,100,101,102,105,110,101,45,102, +111,114,45,115,121,110,116,97,120,5,76,98,101,103,105,110,45,102,111,114,45, 115,121,110,116,97,120,6,16,4,11,11,11,11,16,4,2,3,2,4,2,5, -2,6,32,36,94,16,5,95,2,5,2,4,2,3,27,89,162,32,33,34,62, +2,6,32,36,94,16,5,95,2,3,2,4,2,5,27,89,162,32,33,34,62, 109,107,7,223,1,89,162,32,33,8,28,9,224,0,1,87,94,28,249,22,71, 247,22,252,83,3,21,93,70,101,120,112,114,101,115,115,105,111,110,8,250,22, 252,39,2,11,6,36,36,110,111,116,32,97,108,108,111,119,101,100,32,105,110, @@ -1949,306 +1946,306 @@ 28,248,80,158,38,32,194,249,80,158,39,33,248,80,158,40,34,196,27,248,80, 158,41,35,197,28,248,80,158,41,36,193,248,80,158,41,37,193,11,11,28,192, 27,248,22,52,194,27,248,22,53,195,249,22,7,248,22,216,27,20,15,159,43, -34,45,250,22,209,20,15,159,46,35,45,199,195,89,162,32,33,49,9,225,9, +34,45,250,22,209,20,15,159,46,35,45,199,195,89,162,32,33,51,9,225,9, 8,2,27,249,22,209,20,15,159,37,36,45,198,249,80,158,37,38,196,27,249, -22,61,198,197,27,20,15,159,39,37,45,250,22,209,20,15,159,42,38,45,250, -22,209,20,15,159,45,39,45,249,22,56,20,15,159,47,40,45,201,20,15,159, -45,41,45,195,27,28,248,80,158,39,32,195,249,80,158,40,33,248,80,158,41, -34,197,27,248,80,158,42,35,198,91,159,35,11,90,161,35,32,11,250,80,158, -47,39,198,33,11,28,194,27,28,248,22,206,197,196,201,249,80,158,47,40,28, -248,80,158,48,36,196,248,22,59,248,80,158,49,37,197,11,250,22,209,197,199, -197,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,249, -22,7,248,22,216,27,249,22,61,199,198,27,20,15,159,46,42,45,250,22,209, -20,15,159,49,43,45,249,22,65,248,22,52,199,248,22,60,248,22,53,200,195, -89,162,32,33,55,9,226,11,10,2,3,27,249,22,209,20,15,159,38,44,45, -199,249,80,158,38,38,197,27,250,22,61,198,199,200,27,20,15,159,40,45,45, -250,22,209,20,15,159,43,46,45,250,22,209,20,15,159,46,47,45,250,22,62, -20,15,159,49,48,45,249,22,65,248,22,78,205,248,22,80,205,248,22,52,203, -20,15,159,46,49,45,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,197,87,95,249,22,3,89,162,32,33,39,9,224,5,4,28, -248,80,158,34,41,195,12,251,22,252,39,2,11,6,40,40,110,111,116,32,97, -110,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32,112,114,111,99, -101,100,117,114,101,32,97,114,103,117,109,101,110,116,196,198,194,27,248,80,158, -37,42,194,28,192,251,22,252,39,2,11,6,29,29,100,117,112,108,105,99,97, -116,101,32,97,114,103,117,109,101,110,116,32,105,100,101,110,116,105,102,105,101, -114,199,196,12,193,89,162,32,33,47,73,103,101,110,101,114,97,108,45,112,114, -111,116,111,11,226,11,9,1,0,27,249,22,209,20,15,159,38,50,45,199,27, -89,162,32,32,57,2,9,228,5,4,3,2,6,1,27,28,248,80,158,39,32, -194,249,80,158,40,40,27,248,80,158,42,34,197,28,248,80,158,42,32,193,249, -80,158,43,33,248,80,158,44,34,195,27,248,80,158,45,35,196,248,22,59,250, -22,209,199,196,199,11,27,248,80,158,42,35,197,250,22,209,199,195,199,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,91,159,34,11,90, -161,34,32,11,248,202,27,249,22,61,199,200,27,20,15,159,46,51,45,250,22, -209,20,15,159,49,52,45,250,22,209,20,15,159,52,53,45,249,22,56,248,22, -53,202,248,22,52,202,20,15,159,52,54,45,195,27,248,202,201,249,22,7,195, -89,162,32,33,38,9,224,4,2,248,194,248,22,59,248,195,197,27,28,248,80, -158,40,32,195,249,80,158,41,33,248,80,158,42,34,197,27,248,80,158,43,35, -198,250,22,209,200,195,200,11,28,192,27,248,22,52,194,27,248,22,53,195,251, -22,252,39,2,11,6,82,82,98,97,100,32,115,121,110,116,97,120,32,40,110, -111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32, -112,114,111,99,101,100,117,114,101,32,110,97,109,101,44,32,97,110,100,32,110, -111,116,32,97,32,110,101,115,116,101,100,32,112,114,111,99,101,100,117,114,101, -32,102,111,114,109,41,204,197,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,197,27,28,248,80,158,39,32,195,249,80,158,40,33,248, -80,158,41,34,197,27,248,80,158,42,35,198,250,22,209,200,195,200,11,28,192, -27,248,22,52,194,27,248,22,53,195,28,248,80,158,41,41,194,249,22,7,195, -248,200,204,247,195,247,193,87,95,28,248,80,158,42,36,195,12,250,22,252,39, -2,11,6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101, -103,97,108,32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114, -111,99,101,100,117,114,101,32,98,111,100,121,41,202,28,248,80,158,42,43,195, -250,22,252,39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40, -110,111,32,101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114, -111,99,101,100,117,114,101,32,98,111,100,121,41,202,12,27,249,22,209,20,15, -159,44,55,45,203,27,249,22,209,20,15,159,45,56,45,196,27,249,22,209,20, -15,159,46,57,45,248,199,200,249,80,158,46,38,204,27,250,22,61,199,200,198, -27,20,15,159,48,58,45,250,22,209,20,15,159,51,59,45,250,22,209,20,15, -159,54,8,28,45,250,22,60,248,22,78,203,250,22,209,20,15,159,8,28,8, -29,45,248,22,60,248,22,52,23,15,20,15,159,8,28,8,30,45,248,22,80, -203,20,15,159,54,8,31,45,195,250,22,252,39,2,11,6,10,10,98,97,100, -32,115,121,110,116,97,120,196,27,28,248,80,158,38,32,195,249,80,158,39,33, -248,80,158,40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32,193,27, -28,248,22,206,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27,248,80, -158,45,35,197,250,22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,80,196,28,248,80,158,41,32,194,247,196,251,22,252,39, -2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,202,197,247,193,27,28, -248,80,158,38,32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80,158, -41,35,198,28,248,80,158,41,32,193,27,28,248,22,206,194,193,198,249,80,158, -43,33,248,80,158,44,34,196,27,248,80,158,45,35,197,250,22,209,198,195,198, -11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248, -80,158,41,41,194,250,22,252,39,2,11,27,249,22,209,20,15,159,46,8,32, -45,204,27,28,248,80,158,46,32,194,249,80,158,47,33,248,80,158,48,34,196, -27,248,80,158,49,35,197,28,248,80,158,49,32,193,249,80,158,50,33,248,80, -158,51,34,195,27,248,80,158,52,35,196,28,248,80,158,52,36,193,248,80,158, -52,37,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, -80,196,6,50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116, -105,112,108,101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101, -114,32,105,100,101,110,116,105,102,105,101,114,41,27,28,248,80,158,47,32,195, -249,80,158,48,33,248,80,158,49,34,197,27,248,80,158,50,35,198,28,248,80, -158,50,32,193,249,80,158,51,40,248,80,158,52,34,195,248,80,158,52,44,248, -80,158,53,35,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,6,46, -46,98,97,100,32,115,121,110,116,97,120,32,40,122,101,114,111,32,101,120,112, -114,101,115,115,105,111,110,115,32,97,102,116,101,114,32,105,100,101,110,116,105, -102,105,101,114,41,27,28,248,80,158,48,32,196,249,80,158,49,33,248,80,158, -50,34,198,27,248,80,158,51,35,199,28,248,80,158,51,32,193,27,28,248,22, -206,194,193,199,249,80,158,53,33,248,80,158,54,34,196,27,248,80,158,55,35, +22,61,197,198,27,20,15,159,39,37,45,250,22,209,20,15,159,42,38,45,250, +22,209,20,15,159,45,39,45,250,22,62,20,15,159,48,40,45,248,22,53,203, +248,22,52,203,20,15,159,45,41,45,195,27,28,248,80,158,39,32,195,249,80, +158,40,33,248,80,158,41,34,197,27,248,80,158,42,35,198,91,159,35,11,90, +161,35,32,11,250,80,158,47,39,198,33,11,28,194,27,28,248,22,206,197,196, +201,249,80,158,47,40,28,248,80,158,48,36,196,248,22,59,248,80,158,49,37, +197,11,250,22,209,197,199,197,11,11,28,192,27,248,22,52,194,27,248,22,78, +195,27,248,22,80,196,249,22,7,248,22,216,27,249,22,61,198,199,27,20,15, +159,46,42,45,250,22,209,20,15,159,49,43,45,249,22,65,248,22,53,199,248, +22,60,248,22,52,200,195,89,162,32,33,55,9,226,11,10,2,3,27,249,22, +209,20,15,159,38,44,45,199,249,80,158,38,38,197,27,250,22,61,198,199,200, +27,20,15,159,40,45,45,250,22,209,20,15,159,43,46,45,250,22,209,20,15, +159,46,47,45,250,22,62,20,15,159,49,48,45,249,22,65,248,22,78,205,248, +22,80,205,248,22,52,203,20,15,159,46,49,45,195,250,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,197,87,95,249,22,3,89,162,32, +33,39,9,224,5,4,28,248,80,158,34,41,195,12,251,22,252,39,2,11,6, +40,40,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105,101,114,32,102, +111,114,32,112,114,111,99,101,100,117,114,101,32,97,114,103,117,109,101,110,116, +196,198,194,27,248,80,158,37,42,194,28,192,251,22,252,39,2,11,6,29,29, +100,117,112,108,105,99,97,116,101,32,97,114,103,117,109,101,110,116,32,105,100, +101,110,116,105,102,105,101,114,199,196,12,193,89,162,32,33,47,73,103,101,110, +101,114,97,108,45,112,114,111,116,111,11,226,11,9,1,0,27,249,22,209,20, +15,159,38,50,45,199,27,89,162,32,32,54,2,9,228,5,4,3,2,6,1, +27,28,248,80,158,39,32,194,249,80,158,40,40,27,248,80,158,42,34,197,28, +248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80,158, +45,35,196,248,22,59,250,22,209,199,196,199,11,27,248,80,158,42,35,197,250, +22,209,199,195,199,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, +80,196,91,159,34,11,90,161,34,32,11,248,202,27,249,22,61,200,199,27,20, +15,159,46,51,45,250,22,209,20,15,159,49,52,45,250,22,209,20,15,159,52, +53,45,199,20,15,159,52,54,45,195,27,248,202,201,249,22,7,195,89,162,32, +33,38,9,224,4,2,248,194,248,22,59,248,195,197,27,28,248,80,158,40,32, +195,249,80,158,41,33,248,80,158,42,34,197,27,248,80,158,43,35,198,250,22, +209,200,195,200,11,28,192,27,248,22,52,194,27,248,22,53,195,251,22,252,39, +2,11,6,82,82,98,97,100,32,115,121,110,116,97,120,32,40,110,111,116,32, +97,110,32,105,100,101,110,116,105,102,105,101,114,32,102,111,114,32,112,114,111, +99,101,100,117,114,101,32,110,97,109,101,44,32,97,110,100,32,110,111,116,32, +97,32,110,101,115,116,101,100,32,112,114,111,99,101,100,117,114,101,32,102,111, +114,109,41,204,197,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, +116,97,120,197,27,28,248,80,158,39,32,195,249,80,158,40,33,248,80,158,41, +34,197,27,248,80,158,42,35,198,250,22,209,200,195,200,11,28,192,27,248,22, +52,194,27,248,22,53,195,28,248,80,158,41,41,194,249,22,7,195,248,200,204, +247,195,247,193,87,95,28,248,80,158,42,36,195,12,250,22,252,39,2,11,6, +50,50,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101,103,97,108, +32,117,115,101,32,111,102,32,96,46,39,32,102,111,114,32,112,114,111,99,101, +100,117,114,101,32,98,111,100,121,41,202,28,248,80,158,42,43,195,250,22,252, +39,2,11,6,46,46,98,97,100,32,115,121,110,116,97,120,32,40,110,111,32, +101,120,112,114,101,115,115,105,111,110,115,32,102,111,114,32,112,114,111,99,101, +100,117,114,101,32,98,111,100,121,41,202,12,27,249,22,209,20,15,159,44,55, +45,203,27,249,22,209,20,15,159,45,56,45,196,27,249,22,209,20,15,159,46, +57,45,248,199,200,249,80,158,46,38,204,27,250,22,61,198,199,200,27,20,15, +159,48,58,45,250,22,209,20,15,159,51,59,45,250,22,209,20,15,159,54,8, +28,45,250,22,60,248,22,80,203,250,22,209,20,15,159,8,28,8,29,45,248, +22,60,248,22,78,23,15,20,15,159,8,28,8,30,45,248,22,52,203,20,15, +159,54,8,31,45,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121, +110,116,97,120,196,27,28,248,80,158,38,32,195,249,80,158,39,33,248,80,158, +40,34,197,27,248,80,158,41,35,198,28,248,80,158,41,32,193,27,28,248,22, +206,194,193,198,249,80,158,43,33,248,80,158,44,34,196,27,248,80,158,45,35, 197,250,22,209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195, -27,248,22,80,196,6,31,31,98,97,100,32,115,121,110,116,97,120,32,40,105, -108,108,101,103,97,108,32,117,115,101,32,111,102,32,96,46,39,41,250,22,252, -39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,198,201,247,196,247, -193,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27, -248,80,158,40,35,198,28,248,80,158,40,32,193,249,80,158,41,33,248,80,158, -42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,32,193,249,80,158,44, -40,248,80,158,45,34,195,248,80,158,45,44,248,80,158,46,35,196,11,11,11, -28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158, -40,41,194,27,249,22,209,20,15,159,42,8,33,45,201,249,80,158,42,38,203, -27,250,22,61,198,200,199,27,20,15,159,44,8,34,45,250,22,209,20,15,159, -47,8,35,45,250,22,209,20,15,159,50,8,36,45,250,22,60,248,22,52,203, -250,22,209,20,15,159,56,8,37,45,248,22,60,248,22,78,23,15,20,15,159, -56,8,38,45,248,22,80,203,20,15,159,50,8,39,45,195,247,196,247,193,250, -22,7,248,196,20,15,159,37,8,40,45,248,196,20,15,159,37,8,41,45,248, -196,20,15,159,37,8,42,45,37,20,98,158,16,13,30,12,65,35,37,115,116, -120,13,69,115,116,120,45,112,97,105,114,63,14,11,30,15,2,13,67,99,111, -110,115,47,35,102,16,1,30,17,2,13,67,115,116,120,45,99,97,114,18,5, -30,19,2,13,67,115,116,120,45,99,100,114,20,6,30,21,2,13,69,115,116, -120,45,108,105,115,116,63,22,8,30,23,2,13,69,115,116,120,45,62,108,105, -115,116,24,4,30,25,68,35,37,115,116,120,108,111,99,26,68,114,101,108,111, -99,97,116,101,27,1,30,28,2,13,74,115,112,108,105,116,45,115,116,120,45, -108,105,115,116,29,3,30,30,2,13,69,97,112,112,101,110,100,47,35,102,31, -0,30,32,2,13,71,105,100,101,110,116,105,102,105,101,114,63,33,2,30,34, -76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,35,1,26,99, -104,101,99,107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105, -102,105,101,114,36,0,30,37,2,13,69,115,116,120,45,110,117,108,108,63,38, -10,30,39,2,13,71,115,116,120,45,110,117,108,108,47,35,102,40,9,16,43, -18,99,64,104,101,114,101,41,39,97,37,10,32,11,16,8,2,3,2,2,2, -4,2,2,2,5,2,2,2,6,2,2,98,36,10,33,11,95,159,67,35,37, -113,113,115,116,120,42,9,11,159,2,13,9,11,159,2,35,9,11,16,0,96, -35,8,254,1,11,16,0,16,4,34,11,77,100,101,102,105,110,101,45,118,97, -108,117,101,115,45,115,116,120,43,3,1,7,101,110,118,51,48,57,55,44,16, -4,33,11,63,115,116,120,45,3,1,7,101,110,118,51,48,57,56,46,18,102, -2,41,43,37,36,35,34,33,16,8,42,11,3,1,4,103,51,53,49,47,3, -1,4,103,51,53,50,48,3,1,4,103,51,53,51,49,3,1,7,101,110,118, -51,49,49,51,50,2,50,2,50,16,8,41,11,61,95,51,65,112,114,111,116, -111,52,64,98,111,100,121,53,3,1,7,101,110,118,51,49,49,52,54,2,54, -2,54,16,6,40,11,2,10,2,11,3,1,7,101,110,118,51,49,49,57,55, -2,55,18,16,2,95,66,115,114,99,116,97,103,56,44,93,8,252,123,8,95, -9,8,252,123,8,69,35,37,115,116,120,99,97,115,101,57,18,104,64,100,101, -115,116,58,48,37,36,35,34,33,42,41,16,6,47,11,2,10,2,11,2,55, -2,55,16,6,46,11,3,1,4,103,51,54,54,59,3,1,4,103,51,54,55, -60,3,1,7,101,110,118,51,49,50,54,61,2,61,16,6,45,11,62,105,100, -62,63,97,114,103,63,3,1,7,101,110,118,51,49,50,55,64,2,64,18,158, -2,41,48,18,16,2,95,2,56,49,93,8,252,129,8,95,9,8,252,129,8, -2,57,18,158,2,58,48,18,158,63,99,116,120,65,48,18,158,66,108,97,109, -98,100,97,66,48,18,158,2,65,48,18,16,2,95,2,56,50,93,8,252,130, -8,95,9,8,252,130,8,2,57,18,104,2,58,53,37,36,35,34,33,42,41, -47,16,8,52,11,3,1,4,103,51,54,51,67,3,1,4,103,51,54,52,68, -3,1,4,103,51,54,53,69,3,1,7,101,110,118,51,49,53,50,70,2,70, -2,70,16,8,51,11,2,62,2,63,64,114,101,115,116,71,3,1,7,101,110, -118,51,49,53,51,72,2,72,2,72,18,158,2,41,53,18,16,2,95,2,56, -54,93,8,252,136,8,95,9,8,252,136,8,2,57,18,158,2,58,53,18,158, -2,65,53,18,158,2,66,53,18,158,2,65,53,18,158,2,41,43,18,16,2, -95,2,56,55,93,8,252,148,8,95,9,8,252,148,8,2,57,18,104,2,58, -58,37,36,35,34,33,42,41,40,16,8,57,11,3,1,4,103,51,55,54,73, -3,1,4,103,51,55,55,74,3,1,4,103,51,55,56,75,3,1,7,101,110, -118,51,49,56,52,76,2,76,2,76,16,8,56,11,69,115,111,109,101,116,104, -105,110,103,77,64,109,111,114,101,78,2,71,3,1,7,101,110,118,51,49,56, -53,79,2,79,2,79,18,158,2,65,58,18,158,2,65,58,18,102,2,41,8, -28,37,36,35,34,33,42,41,16,6,59,11,2,62,66,109,107,45,114,104,115, -80,3,1,7,101,110,118,51,49,49,56,81,2,81,18,158,2,41,8,28,18, -158,2,41,8,28,18,16,2,95,2,56,8,29,93,8,252,167,8,95,9,8, -252,167,8,2,57,18,158,2,58,8,28,18,158,2,65,8,28,18,158,2,65, -8,28,18,158,2,65,8,28,18,158,2,65,8,28,18,101,2,41,8,32,37, -36,35,34,33,16,8,8,31,11,3,1,4,103,51,53,55,82,3,1,4,103, -51,53,56,83,3,1,4,103,51,53,57,84,3,1,7,101,110,118,51,50,53, -57,85,2,85,2,85,16,8,8,30,11,2,51,2,62,2,71,3,1,7,101, -110,118,51,50,54,48,86,2,86,2,86,18,101,2,41,8,35,37,36,35,34, -33,16,8,8,34,11,3,1,4,103,51,54,48,87,3,1,4,103,51,54,49, -88,3,1,4,103,51,54,50,89,3,1,7,101,110,118,51,50,57,54,90,2, -90,2,90,16,8,8,33,11,2,51,2,62,64,101,120,112,114,91,3,1,7, -101,110,118,51,50,57,55,92,2,92,2,92,18,16,2,95,2,56,8,36,93, -8,252,191,8,95,9,8,252,191,8,2,57,18,158,2,58,8,35,18,158,2, -65,8,35,18,158,2,65,8,35,18,158,2,65,8,35,18,158,2,65,8,35, -18,98,73,100,101,102,105,110,101,45,118,97,108,117,101,115,93,8,38,37,36, -35,16,4,8,37,11,2,7,3,1,7,101,110,118,51,48,57,54,94,18,158, -75,100,101,102,105,110,101,45,115,121,110,116,97,120,101,115,95,8,38,18,158, -1,24,100,101,102,105,110,101,45,118,97,108,117,101,115,45,102,111,114,45,115, -121,110,116,97,120,96,8,38,11,16,5,93,2,6,89,162,32,33,8,32,9, -223,0,27,247,22,252,83,3,87,94,28,249,22,71,194,21,95,66,109,111,100, -117,108,101,97,72,109,111,100,117,108,101,45,98,101,103,105,110,98,69,116,111, -112,45,108,101,118,101,108,99,12,250,22,252,39,2,11,6,51,51,97,108,108, -111,119,101,100,32,111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45, -108,101,118,101,108,32,111,114,32,97,32,109,111,100,117,108,101,32,116,111,112, -45,108,101,118,101,108,197,27,249,22,209,20,15,159,36,32,42,197,27,28,248, -80,158,36,32,194,249,80,158,37,33,248,80,158,38,34,196,248,80,158,38,35, -248,80,158,39,36,197,11,28,192,20,15,159,35,33,42,27,89,162,32,32,51, -2,9,225,4,5,2,27,28,248,80,158,36,32,194,249,80,158,37,37,248,80, -158,38,34,196,27,248,80,158,39,36,197,28,248,80,158,39,38,193,248,80,158, -39,39,193,11,11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,39, -40,198,27,20,15,159,40,34,42,250,22,209,20,15,159,43,35,42,250,22,209, -20,15,159,46,36,42,249,22,56,20,15,159,48,37,42,249,22,2,89,162,33, -33,40,9,223,18,250,22,209,20,15,159,35,38,42,249,22,60,20,15,159,37, -39,42,248,22,52,199,20,15,159,35,40,42,205,20,15,159,46,41,42,195,250, -22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27,28, -248,80,158,38,32,196,249,80,158,39,37,248,80,158,40,34,198,27,248,80,158, -41,36,199,28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195, -248,80,158,43,35,248,80,158,44,36,196,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,28,249,22,252,11,2,200,2,98,247,195,27,250,22,252,25,2, -196,202,248,22,216,20,15,159,44,42,42,27,249,22,209,20,15,159,43,43,42, -195,27,28,248,80,158,43,32,194,28,27,248,80,158,44,34,195,28,248,80,158, -44,41,193,28,249,22,224,194,20,15,159,45,44,42,9,11,11,27,248,80,158, -44,36,195,28,248,80,158,44,38,193,248,80,158,44,39,193,11,11,11,28,192, -27,20,15,159,43,45,42,250,22,209,20,15,159,46,46,42,250,22,209,20,15, -159,49,47,42,249,22,56,20,15,159,51,48,42,201,20,15,159,49,49,42,195, -27,28,248,80,158,44,32,195,28,27,248,80,158,45,34,196,28,248,80,158,45, -41,193,28,249,22,224,194,20,15,159,46,50,42,9,11,11,27,248,80,158,45, -36,196,28,248,80,158,45,32,193,249,80,158,46,33,27,248,80,158,48,34,196, -28,248,80,158,48,38,193,248,22,59,248,80,158,49,39,194,11,27,248,80,158, -48,36,196,28,248,80,158,48,32,193,249,80,158,49,33,248,80,158,50,34,195, -248,80,158,50,35,248,80,158,51,36,196,11,11,11,11,28,192,27,248,22,52, -194,27,248,22,53,195,27,249,22,61,195,196,27,20,15,159,47,51,42,250,22, -209,20,15,159,50,52,42,250,22,209,20,15,159,53,53,42,250,22,60,20,15, -159,56,54,42,248,22,53,203,248,22,52,203,20,15,159,53,55,42,195,27,28, -248,80,158,45,32,196,28,27,248,80,158,46,34,197,28,248,80,158,46,41,193, -28,249,22,224,194,20,15,159,47,56,42,9,11,11,27,248,80,158,46,36,197, -28,248,80,158,46,38,193,248,80,158,46,39,193,11,11,11,28,192,27,20,15, -159,45,57,42,250,22,209,20,15,159,48,58,42,250,22,209,20,15,159,51,59, -42,249,22,56,20,15,159,53,8,28,42,201,20,15,159,51,8,29,42,195,27, -28,248,80,158,46,32,197,28,27,248,80,158,47,34,198,28,248,80,158,47,41, -193,28,249,22,224,194,20,15,159,48,8,30,42,9,11,11,27,248,80,158,47, -36,198,28,248,80,158,47,38,193,248,80,158,47,39,193,11,11,11,28,192,27, -20,15,159,46,8,31,42,250,22,209,20,15,159,49,8,32,42,250,22,209,20, -15,159,52,8,33,42,249,22,56,20,15,159,54,8,34,42,201,20,15,159,52, -8,35,42,195,27,28,248,80,158,47,32,198,28,27,248,80,158,48,34,199,28, -248,80,158,48,41,193,28,249,22,224,194,20,15,159,49,8,36,42,9,11,11, -27,248,80,158,48,36,199,28,248,80,158,48,32,193,249,80,158,49,33,27,248, -80,158,51,34,196,28,248,80,158,51,38,193,248,22,59,248,80,158,52,39,194, -11,27,248,80,158,51,36,196,28,248,80,158,51,32,193,249,80,158,52,33,248, -80,158,53,34,195,248,80,158,53,35,248,80,158,54,36,196,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,53,195,250,22,252,39,2,11,6,54,54,115, -121,110,116,97,120,32,100,101,102,105,110,105,116,105,111,110,115,32,110,111,116, -32,97,108,108,111,119,101,100,32,119,105,116,104,105,110,32,98,101,103,105,110, -45,102,111,114,45,115,121,110,116,97,120,204,27,20,15,159,47,8,37,42,250, -22,209,20,15,159,50,8,38,42,250,22,209,20,15,159,53,8,39,42,250,22, -60,20,15,159,56,8,40,42,20,15,159,56,8,41,42,250,22,209,20,15,159, -59,8,42,42,250,22,62,20,15,159,8,30,8,43,42,23,21,20,15,159,8, -30,8,44,42,20,15,159,59,8,45,42,20,15,159,53,8,46,42,195,247,193, -32,20,98,158,16,10,2,12,2,30,2,17,2,39,2,19,2,15,2,21,2, -23,2,25,2,32,16,47,18,99,2,41,8,41,37,36,35,16,4,8,40,11, -2,45,3,1,7,101,110,118,51,51,49,52,100,16,4,8,39,11,2,65,3, -1,7,101,110,118,51,51,49,53,101,18,158,93,16,2,101,2,0,8,44,37, -36,35,8,40,8,39,16,4,8,43,11,3,1,4,103,52,48,53,102,3,1, -7,101,110,118,51,51,50,48,103,16,4,8,42,11,2,51,3,1,7,101,110, -118,51,51,50,49,104,9,8,44,18,16,2,95,2,56,8,45,93,8,252,205, -8,95,9,8,252,205,8,2,57,18,101,2,58,8,48,37,36,35,8,40,8, -39,16,6,8,47,11,3,1,4,103,52,48,49,105,3,1,4,103,52,48,50, -106,3,1,7,101,110,118,51,51,50,57,107,2,107,16,6,8,46,11,2,51, -64,101,108,101,109,108,3,1,7,101,110,118,51,51,51,48,109,2,109,18,158, -2,65,8,48,18,158,2,0,8,48,18,158,2,65,8,48,18,158,2,6,8, -48,18,158,2,65,8,48,18,158,2,65,8,48,18,158,110,16,2,101,2,0, -8,51,37,36,35,8,40,8,39,16,6,8,50,11,3,1,4,103,52,48,51, -110,3,1,4,103,52,48,52,111,3,1,7,101,110,118,51,51,52,48,112,2, -112,16,6,8,49,11,2,51,2,108,3,1,7,101,110,118,51,51,52,49,113, -2,113,9,16,2,158,2,93,8,51,9,16,2,158,2,95,8,51,9,16,2, -158,2,96,8,51,9,16,2,158,64,115,101,116,33,114,8,51,9,16,2,158, -70,108,101,116,45,118,97,108,117,101,115,115,8,51,9,16,2,158,71,108,101, -116,42,45,118,97,108,117,101,115,116,8,51,9,16,2,158,73,108,101,116,114, -101,99,45,118,97,108,117,101,115,117,8,51,9,16,2,158,2,66,8,51,9, -16,2,158,71,99,97,115,101,45,108,97,109,98,100,97,118,8,51,9,16,2, -158,62,105,102,119,8,51,9,16,2,158,65,113,117,111,116,101,120,8,51,9, -16,2,158,1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,43, -118,97,108,117,101,115,121,8,51,9,16,2,158,76,102,108,117,105,100,45,108, -101,116,45,115,121,110,116,97,120,122,8,51,9,16,2,158,1,22,119,105,116, -104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,123,8, -51,9,16,2,158,65,35,37,97,112,112,124,8,51,9,16,2,158,65,35,37, -116,111,112,125,8,51,9,16,2,158,67,35,37,100,97,116,117,109,126,8,51, -9,8,51,18,102,2,41,8,53,37,36,35,8,40,8,39,8,50,8,49,16, -4,8,52,11,61,101,127,3,1,7,101,110,118,51,51,52,52,128,18,158,2, -0,8,53,18,16,2,95,2,56,8,54,93,8,252,220,8,95,9,8,252,220, -8,2,57,18,104,2,58,8,57,37,36,35,8,40,8,39,8,50,8,49,8, -52,16,4,8,56,11,3,1,4,103,52,49,51,129,3,1,7,101,110,118,51, -51,53,48,130,16,4,8,55,11,61,118,131,3,1,7,101,110,118,51,51,53, -49,132,18,158,2,65,8,57,18,158,2,6,8,57,18,158,2,65,8,57,18, -158,2,93,8,53,18,16,2,95,2,56,8,58,93,8,252,221,8,95,9,8, -252,221,8,2,57,18,104,2,58,8,61,37,36,35,8,40,8,39,8,50,8, -49,8,52,16,6,8,60,11,3,1,4,103,52,49,49,133,3,1,4,103,52, -49,50,134,3,1,7,101,110,118,51,51,54,49,135,2,135,16,6,8,59,11, -2,62,2,91,3,1,7,101,110,118,51,51,54,50,136,2,136,18,158,2,65, -8,61,18,158,2,96,8,61,18,158,2,65,8,61,18,158,67,114,101,113,117, -105,114,101,137,8,53,18,16,2,95,2,56,8,62,93,8,252,222,8,95,9, -8,252,222,8,2,57,18,104,2,58,8,65,37,36,35,8,40,8,39,8,50, -8,49,8,52,16,4,8,64,11,3,1,4,103,52,49,48,138,3,1,7,101, -110,118,51,51,55,49,139,16,4,8,63,11,2,131,3,1,7,101,110,118,51, -51,55,50,140,18,158,2,65,8,65,18,158,78,114,101,113,117,105,114,101,45, -102,111,114,45,115,121,110,116,97,120,141,8,65,18,158,2,65,8,65,18,158, -1,20,114,101,113,117,105,114,101,45,102,111,114,45,116,101,109,112,108,97,116, -101,142,8,53,18,16,2,95,2,56,8,66,93,8,252,223,8,95,9,8,252, -223,8,2,57,18,104,2,58,8,69,37,36,35,8,40,8,39,8,50,8,49, -8,52,16,4,8,68,11,3,1,4,103,52,48,57,143,3,1,7,101,110,118, -51,51,56,48,144,16,4,8,67,11,2,131,3,1,7,101,110,118,51,51,56, -49,145,18,158,2,65,8,69,18,158,2,137,8,69,18,158,2,65,8,69,18, -158,2,95,8,53,18,16,2,95,2,56,8,70,93,8,252,225,8,95,9,8, -252,225,8,2,57,18,104,2,58,8,73,37,36,35,8,40,8,39,8,50,8, -49,8,52,16,4,8,72,11,3,1,4,103,52,48,54,146,3,1,7,101,110, -118,51,51,57,54,147,16,4,8,71,11,65,111,116,104,101,114,148,3,1,7, -101,110,118,51,51,57,55,149,18,158,2,65,8,73,18,158,2,96,8,73,18, -158,9,8,73,18,158,2,65,8,73,18,158,2,0,8,73,18,16,2,103,93, -16,2,158,93,16,2,158,66,118,97,108,117,101,115,150,8,73,9,8,73,9, -8,81,98,8,80,10,32,11,94,159,74,35,37,115,109,97,108,108,45,115,99, -104,101,109,101,151,9,11,159,2,13,9,11,16,6,66,115,121,110,116,97,120, -152,29,153,11,11,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110,116, -45,101,114,114,111,114,154,2,153,73,115,121,110,116,97,120,45,99,97,115,101, -42,42,155,2,153,98,8,79,10,33,11,95,159,64,35,37,115,99,156,9,11, -159,2,151,9,11,159,2,13,9,11,16,0,96,8,78,8,254,1,11,16,0, -16,4,8,77,11,61,120,157,3,1,6,101,110,118,51,56,49,158,16,4,8, -76,11,68,104,101,114,101,45,115,116,120,159,3,1,6,101,110,118,51,56,51, -160,16,4,8,75,11,2,159,2,160,13,16,3,33,2,153,2,57,93,8,252, -225,8,16,6,8,74,11,61,114,161,63,115,114,99,162,3,1,7,101,110,118, -51,52,48,48,163,2,163,95,9,8,252,225,8,2,57,18,158,2,65,8,73, -18,158,2,65,8,73,11,9,93,68,35,37,107,101,114,110,101,108,164,96,2, -164,2,35,2,13,2,42,0}; - EVAL_ONE_SIZED_STR((char *)expr, 6727); +27,248,22,80,196,28,248,80,158,41,32,194,247,196,251,22,252,39,2,11,6, +10,10,98,97,100,32,115,121,110,116,97,120,202,197,247,193,27,28,248,80,158, +38,32,195,249,80,158,39,33,248,80,158,40,34,197,27,248,80,158,41,35,198, +28,248,80,158,41,32,193,27,28,248,22,206,194,193,198,249,80,158,43,33,248, +80,158,44,34,196,27,248,80,158,45,35,197,250,22,209,198,195,198,11,11,28, +192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158,41, +41,194,250,22,252,39,2,11,27,249,22,209,20,15,159,46,8,32,45,204,27, +28,248,80,158,46,32,194,249,80,158,47,33,248,80,158,48,34,196,27,248,80, +158,49,35,197,28,248,80,158,49,32,193,249,80,158,50,33,248,80,158,51,34, +195,27,248,80,158,52,35,196,28,248,80,158,52,36,193,248,80,158,52,37,193, +11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,6, +50,50,98,97,100,32,115,121,110,116,97,120,32,40,109,117,108,116,105,112,108, +101,32,101,120,112,114,101,115,115,105,111,110,115,32,97,102,116,101,114,32,105, +100,101,110,116,105,102,105,101,114,41,27,28,248,80,158,47,32,195,249,80,158, +48,33,248,80,158,49,34,197,27,248,80,158,50,35,198,28,248,80,158,50,32, +193,249,80,158,51,40,248,80,158,52,34,195,248,80,158,52,44,248,80,158,53, +35,196,11,11,28,192,27,248,22,52,194,27,248,22,53,195,6,46,46,98,97, +100,32,115,121,110,116,97,120,32,40,122,101,114,111,32,101,120,112,114,101,115, +115,105,111,110,115,32,97,102,116,101,114,32,105,100,101,110,116,105,102,105,101, +114,41,27,28,248,80,158,48,32,196,249,80,158,49,33,248,80,158,50,34,198, +27,248,80,158,51,35,199,28,248,80,158,51,32,193,27,28,248,22,206,194,193, +199,249,80,158,53,33,248,80,158,54,34,196,27,248,80,158,55,35,197,250,22, +209,198,195,198,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, +80,196,6,31,31,98,97,100,32,115,121,110,116,97,120,32,40,105,108,108,101, +103,97,108,32,117,115,101,32,111,102,32,96,46,39,41,250,22,252,39,2,11, +6,10,10,98,97,100,32,115,121,110,116,97,120,198,201,247,196,247,193,27,28, +248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158, +40,35,198,28,248,80,158,40,32,193,249,80,158,41,33,248,80,158,42,34,195, +27,248,80,158,43,35,196,28,248,80,158,43,32,193,249,80,158,44,40,248,80, +158,45,34,195,248,80,158,45,44,248,80,158,46,35,196,11,11,11,28,192,27, +248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158,40,41,194, +27,249,22,209,20,15,159,42,8,33,45,201,249,80,158,42,38,203,27,250,22, +61,199,200,198,27,20,15,159,44,8,34,45,250,22,209,20,15,159,47,8,35, +45,250,22,209,20,15,159,50,8,36,45,250,22,60,248,22,80,203,250,22,209, +20,15,159,56,8,37,45,248,22,60,248,22,78,23,15,20,15,159,56,8,38, +45,248,22,52,203,20,15,159,50,8,39,45,195,247,196,247,193,250,22,7,248, +196,20,15,159,37,8,40,45,248,196,20,15,159,37,8,41,45,248,196,20,15, +159,37,8,42,45,37,20,98,158,16,13,30,12,65,35,37,115,116,120,13,69, +115,116,120,45,112,97,105,114,63,14,11,30,15,2,13,67,99,111,110,115,47, +35,102,16,1,30,17,2,13,67,115,116,120,45,99,97,114,18,5,30,19,2, +13,67,115,116,120,45,99,100,114,20,6,30,21,2,13,69,115,116,120,45,108, +105,115,116,63,22,8,30,23,2,13,69,115,116,120,45,62,108,105,115,116,24, +4,30,25,68,35,37,115,116,120,108,111,99,26,68,114,101,108,111,99,97,116, +101,27,1,30,28,2,13,74,115,112,108,105,116,45,115,116,120,45,108,105,115, +116,29,3,30,30,2,13,69,97,112,112,101,110,100,47,35,102,31,0,30,32, +2,13,71,105,100,101,110,116,105,102,105,101,114,63,33,2,30,34,76,35,37, +115,116,120,99,97,115,101,45,115,99,104,101,109,101,35,1,26,99,104,101,99, +107,45,100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101, +114,36,0,30,37,2,13,69,115,116,120,45,110,117,108,108,63,38,10,30,39, +2,13,71,115,116,120,45,110,117,108,108,47,35,102,40,9,16,43,18,99,64, +104,101,114,101,41,39,97,37,10,32,11,16,8,2,3,2,2,2,4,2,2, +2,5,2,2,2,6,2,2,98,36,10,33,11,95,159,67,35,37,113,113,115, +116,120,42,9,11,159,2,13,9,11,159,2,35,9,11,16,0,96,35,8,254, +1,11,16,0,16,4,34,11,77,100,101,102,105,110,101,45,118,97,108,117,101, +115,45,115,116,120,43,3,1,7,101,110,118,51,49,48,49,44,16,4,33,11, +63,115,116,120,45,3,1,7,101,110,118,51,49,48,50,46,18,102,2,41,43, +37,36,35,34,33,16,8,42,11,3,1,4,103,51,53,49,47,3,1,4,103, +51,53,50,48,3,1,4,103,51,53,51,49,3,1,7,101,110,118,51,49,49, +55,50,2,50,2,50,16,8,41,11,61,95,51,65,112,114,111,116,111,52,64, +98,111,100,121,53,3,1,7,101,110,118,51,49,49,56,54,2,54,2,54,16, +6,40,11,2,10,2,11,3,1,7,101,110,118,51,49,50,51,55,2,55,18, +16,2,95,66,115,114,99,116,97,103,56,44,93,8,252,124,8,95,9,8,252, +124,8,69,35,37,115,116,120,99,97,115,101,57,18,104,64,100,101,115,116,58, +48,37,36,35,34,33,42,41,16,6,47,11,2,10,2,11,2,55,2,55,16, +6,46,11,3,1,4,103,51,54,54,59,3,1,4,103,51,54,55,60,3,1, +7,101,110,118,51,49,51,48,61,2,61,16,6,45,11,62,105,100,62,63,97, +114,103,63,3,1,7,101,110,118,51,49,51,49,64,2,64,18,158,2,41,48, +18,16,2,95,2,56,49,93,8,252,130,8,95,9,8,252,130,8,2,57,18, +158,2,58,48,18,158,63,99,116,120,65,48,18,158,66,108,97,109,98,100,97, +66,48,18,158,2,65,48,18,16,2,95,2,56,50,93,8,252,131,8,95,9, +8,252,131,8,2,57,18,104,2,58,53,37,36,35,34,33,42,41,47,16,8, +52,11,3,1,4,103,51,54,51,67,3,1,4,103,51,54,52,68,3,1,4, +103,51,54,53,69,3,1,7,101,110,118,51,49,53,54,70,2,70,2,70,16, +8,51,11,2,62,2,63,64,114,101,115,116,71,3,1,7,101,110,118,51,49, +53,55,72,2,72,2,72,18,158,2,41,53,18,16,2,95,2,56,54,93,8, +252,137,8,95,9,8,252,137,8,2,57,18,158,2,58,53,18,158,2,65,53, +18,158,2,66,53,18,158,2,65,53,18,158,2,41,43,18,16,2,95,2,56, +55,93,8,252,149,8,95,9,8,252,149,8,2,57,18,104,2,58,58,37,36, +35,34,33,42,41,40,16,8,57,11,3,1,4,103,51,55,54,73,3,1,4, +103,51,55,55,74,3,1,4,103,51,55,56,75,3,1,7,101,110,118,51,49, +56,56,76,2,76,2,76,16,8,56,11,69,115,111,109,101,116,104,105,110,103, +77,64,109,111,114,101,78,2,71,3,1,7,101,110,118,51,49,56,57,79,2, +79,2,79,18,158,2,65,58,18,158,2,65,58,18,102,2,41,8,28,37,36, +35,34,33,42,41,16,6,59,11,2,62,66,109,107,45,114,104,115,80,3,1, +7,101,110,118,51,49,50,50,81,2,81,18,158,2,41,8,28,18,158,2,41, +8,28,18,16,2,95,2,56,8,29,93,8,252,168,8,95,9,8,252,168,8, +2,57,18,158,2,58,8,28,18,158,2,65,8,28,18,158,2,65,8,28,18, +158,2,65,8,28,18,158,2,65,8,28,18,101,2,41,8,32,37,36,35,34, +33,16,8,8,31,11,3,1,4,103,51,53,55,82,3,1,4,103,51,53,56, +83,3,1,4,103,51,53,57,84,3,1,7,101,110,118,51,50,54,51,85,2, +85,2,85,16,8,8,30,11,2,51,2,62,2,71,3,1,7,101,110,118,51, +50,54,52,86,2,86,2,86,18,101,2,41,8,35,37,36,35,34,33,16,8, +8,34,11,3,1,4,103,51,54,48,87,3,1,4,103,51,54,49,88,3,1, +4,103,51,54,50,89,3,1,7,101,110,118,51,51,48,48,90,2,90,2,90, +16,8,8,33,11,2,51,2,62,64,101,120,112,114,91,3,1,7,101,110,118, +51,51,48,49,92,2,92,2,92,18,16,2,95,2,56,8,36,93,8,252,192, +8,95,9,8,252,192,8,2,57,18,158,2,58,8,35,18,158,2,65,8,35, +18,158,2,65,8,35,18,158,2,65,8,35,18,158,2,65,8,35,18,98,73, +100,101,102,105,110,101,45,118,97,108,117,101,115,93,8,38,37,36,35,16,4, +8,37,11,2,7,3,1,7,101,110,118,51,49,48,48,94,18,158,75,100,101, +102,105,110,101,45,115,121,110,116,97,120,101,115,95,8,38,18,158,1,24,100, +101,102,105,110,101,45,118,97,108,117,101,115,45,102,111,114,45,115,121,110,116, +97,120,96,8,38,11,16,5,93,2,6,89,162,32,33,8,32,9,223,0,27, +247,22,252,83,3,87,94,28,249,22,71,194,21,95,66,109,111,100,117,108,101, +97,72,109,111,100,117,108,101,45,98,101,103,105,110,98,69,116,111,112,45,108, +101,118,101,108,99,12,250,22,252,39,2,11,6,51,51,97,108,108,111,119,101, +100,32,111,110,108,121,32,97,116,32,116,104,101,32,116,111,112,45,108,101,118, +101,108,32,111,114,32,97,32,109,111,100,117,108,101,32,116,111,112,45,108,101, +118,101,108,197,27,249,22,209,20,15,159,36,32,42,197,27,28,248,80,158,36, +32,194,249,80,158,37,33,248,80,158,38,34,196,248,80,158,38,35,248,80,158, +39,36,197,11,28,192,20,15,159,35,33,42,27,89,162,32,32,51,2,9,225, +4,5,2,27,28,248,80,158,36,32,194,249,80,158,37,37,248,80,158,38,34, +196,27,248,80,158,39,36,197,28,248,80,158,39,38,193,248,80,158,39,39,193, +11,11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,39,40,198,27, +20,15,159,40,34,42,250,22,209,20,15,159,43,35,42,250,22,209,20,15,159, +46,36,42,249,22,56,20,15,159,48,37,42,249,22,2,89,162,33,33,40,9, +223,18,250,22,209,20,15,159,35,38,42,249,22,60,20,15,159,37,39,42,248, +22,52,199,20,15,159,35,40,42,205,20,15,159,46,41,42,195,250,22,252,39, +2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,27,28,248,80,158, +38,32,196,249,80,158,39,37,248,80,158,40,34,198,27,248,80,158,41,36,199, +28,248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,248,80,158, +43,35,248,80,158,44,36,196,11,11,28,192,27,248,22,52,194,27,248,22,53, +195,28,249,22,252,11,2,200,2,98,247,195,27,250,22,252,25,2,196,202,248, +22,216,20,15,159,44,42,42,27,249,22,209,20,15,159,43,43,42,195,27,28, +248,80,158,43,32,194,28,27,248,80,158,44,34,195,28,248,80,158,44,41,193, +28,249,22,224,194,20,15,159,45,44,42,9,11,11,27,248,80,158,44,36,195, +28,248,80,158,44,38,193,248,80,158,44,39,193,11,11,11,28,192,27,20,15, +159,43,45,42,250,22,209,20,15,159,46,46,42,250,22,209,20,15,159,49,47, +42,249,22,56,20,15,159,51,48,42,201,20,15,159,49,49,42,195,27,28,248, +80,158,44,32,195,28,27,248,80,158,45,34,196,28,248,80,158,45,41,193,28, +249,22,224,194,20,15,159,46,50,42,9,11,11,27,248,80,158,45,36,196,28, +248,80,158,45,32,193,249,80,158,46,33,27,248,80,158,48,34,196,28,248,80, +158,48,38,193,248,22,59,248,80,158,49,39,194,11,27,248,80,158,48,36,196, +28,248,80,158,48,32,193,249,80,158,49,33,248,80,158,50,34,195,248,80,158, +50,35,248,80,158,51,36,196,11,11,11,11,28,192,27,248,22,52,194,27,248, +22,53,195,27,249,22,61,195,196,27,20,15,159,47,51,42,250,22,209,20,15, +159,50,52,42,250,22,209,20,15,159,53,53,42,250,22,60,20,15,159,56,54, +42,248,22,53,203,248,22,52,203,20,15,159,53,55,42,195,27,28,248,80,158, +45,32,196,28,27,248,80,158,46,34,197,28,248,80,158,46,41,193,28,249,22, +224,194,20,15,159,47,56,42,9,11,11,27,248,80,158,46,36,197,28,248,80, +158,46,38,193,248,80,158,46,39,193,11,11,11,28,192,27,20,15,159,45,57, +42,250,22,209,20,15,159,48,58,42,250,22,209,20,15,159,51,59,42,249,22, +56,20,15,159,53,8,28,42,201,20,15,159,51,8,29,42,195,27,28,248,80, +158,46,32,197,28,27,248,80,158,47,34,198,28,248,80,158,47,41,193,28,249, +22,224,194,20,15,159,48,8,30,42,9,11,11,27,248,80,158,47,36,198,28, +248,80,158,47,38,193,248,80,158,47,39,193,11,11,11,28,192,27,20,15,159, +46,8,31,42,250,22,209,20,15,159,49,8,32,42,250,22,209,20,15,159,52, +8,33,42,249,22,56,20,15,159,54,8,34,42,201,20,15,159,52,8,35,42, +195,27,28,248,80,158,47,32,198,28,27,248,80,158,48,34,199,28,248,80,158, +48,41,193,28,249,22,224,194,20,15,159,49,8,36,42,9,11,11,27,248,80, +158,48,36,199,28,248,80,158,48,32,193,249,80,158,49,33,27,248,80,158,51, +34,196,28,248,80,158,51,38,193,248,22,59,248,80,158,52,39,194,11,27,248, +80,158,51,36,196,28,248,80,158,51,32,193,249,80,158,52,33,248,80,158,53, +34,195,248,80,158,53,35,248,80,158,54,36,196,11,11,11,11,28,192,27,248, +22,52,194,27,248,22,53,195,250,22,252,39,2,11,6,54,54,115,121,110,116, +97,120,32,100,101,102,105,110,105,116,105,111,110,115,32,110,111,116,32,97,108, +108,111,119,101,100,32,119,105,116,104,105,110,32,98,101,103,105,110,45,102,111, +114,45,115,121,110,116,97,120,204,27,20,15,159,47,8,37,42,250,22,209,20, +15,159,50,8,38,42,250,22,209,20,15,159,53,8,39,42,250,22,60,20,15, +159,56,8,40,42,20,15,159,56,8,41,42,250,22,209,20,15,159,59,8,42, +42,250,22,62,20,15,159,8,30,8,43,42,23,21,20,15,159,8,30,8,44, +42,20,15,159,59,8,45,42,20,15,159,53,8,46,42,195,247,193,32,20,98, +158,16,10,2,12,2,30,2,17,2,39,2,19,2,15,2,21,2,23,2,25, +2,32,16,47,18,99,2,41,8,41,37,36,35,16,4,8,40,11,2,45,3, +1,7,101,110,118,51,51,49,56,100,16,4,8,39,11,2,65,3,1,7,101, +110,118,51,51,49,57,101,18,158,93,16,2,101,2,0,8,44,37,36,35,8, +40,8,39,16,4,8,43,11,3,1,4,103,52,48,53,102,3,1,7,101,110, +118,51,51,50,52,103,16,4,8,42,11,2,51,3,1,7,101,110,118,51,51, +50,53,104,9,8,44,18,16,2,95,2,56,8,45,93,8,252,206,8,95,9, +8,252,206,8,2,57,18,101,2,58,8,48,37,36,35,8,40,8,39,16,6, +8,47,11,3,1,4,103,52,48,49,105,3,1,4,103,52,48,50,106,3,1, +7,101,110,118,51,51,51,51,107,2,107,16,6,8,46,11,2,51,64,101,108, +101,109,108,3,1,7,101,110,118,51,51,51,52,109,2,109,18,158,2,65,8, +48,18,158,2,0,8,48,18,158,2,65,8,48,18,158,2,6,8,48,18,158, +2,65,8,48,18,158,2,65,8,48,18,158,110,16,2,101,2,0,8,51,37, +36,35,8,40,8,39,16,6,8,50,11,3,1,4,103,52,48,51,110,3,1, +4,103,52,48,52,111,3,1,7,101,110,118,51,51,52,52,112,2,112,16,6, +8,49,11,2,51,2,108,3,1,7,101,110,118,51,51,52,53,113,2,113,9, +16,2,158,2,93,8,51,9,16,2,158,2,95,8,51,9,16,2,158,2,96, +8,51,9,16,2,158,64,115,101,116,33,114,8,51,9,16,2,158,70,108,101, +116,45,118,97,108,117,101,115,115,8,51,9,16,2,158,71,108,101,116,42,45, +118,97,108,117,101,115,116,8,51,9,16,2,158,73,108,101,116,114,101,99,45, +118,97,108,117,101,115,117,8,51,9,16,2,158,2,66,8,51,9,16,2,158, +71,99,97,115,101,45,108,97,109,98,100,97,118,8,51,9,16,2,158,62,105, +102,119,8,51,9,16,2,158,65,113,117,111,116,101,120,8,51,9,16,2,158, +1,22,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,43,118,97,108, +117,101,115,121,8,51,9,16,2,158,76,102,108,117,105,100,45,108,101,116,45, +115,121,110,116,97,120,122,8,51,9,16,2,158,1,22,119,105,116,104,45,99, +111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,123,8,51,9,16, +2,158,65,35,37,97,112,112,124,8,51,9,16,2,158,65,35,37,116,111,112, +125,8,51,9,16,2,158,67,35,37,100,97,116,117,109,126,8,51,9,8,51, +18,102,2,41,8,53,37,36,35,8,40,8,39,8,50,8,49,16,4,8,52, +11,61,101,127,3,1,7,101,110,118,51,51,52,56,128,18,158,2,0,8,53, +18,16,2,95,2,56,8,54,93,8,252,221,8,95,9,8,252,221,8,2,57, +18,104,2,58,8,57,37,36,35,8,40,8,39,8,50,8,49,8,52,16,4, +8,56,11,3,1,4,103,52,49,51,129,3,1,7,101,110,118,51,51,53,52, +130,16,4,8,55,11,61,118,131,3,1,7,101,110,118,51,51,53,53,132,18, +158,2,65,8,57,18,158,2,6,8,57,18,158,2,65,8,57,18,158,2,93, +8,53,18,16,2,95,2,56,8,58,93,8,252,222,8,95,9,8,252,222,8, +2,57,18,104,2,58,8,61,37,36,35,8,40,8,39,8,50,8,49,8,52, +16,6,8,60,11,3,1,4,103,52,49,49,133,3,1,4,103,52,49,50,134, +3,1,7,101,110,118,51,51,54,53,135,2,135,16,6,8,59,11,2,62,2, +91,3,1,7,101,110,118,51,51,54,54,136,2,136,18,158,2,65,8,61,18, +158,2,96,8,61,18,158,2,65,8,61,18,158,67,114,101,113,117,105,114,101, +137,8,53,18,16,2,95,2,56,8,62,93,8,252,223,8,95,9,8,252,223, +8,2,57,18,104,2,58,8,65,37,36,35,8,40,8,39,8,50,8,49,8, +52,16,4,8,64,11,3,1,4,103,52,49,48,138,3,1,7,101,110,118,51, +51,55,53,139,16,4,8,63,11,2,131,3,1,7,101,110,118,51,51,55,54, +140,18,158,2,65,8,65,18,158,78,114,101,113,117,105,114,101,45,102,111,114, +45,115,121,110,116,97,120,141,8,65,18,158,2,65,8,65,18,158,1,20,114, +101,113,117,105,114,101,45,102,111,114,45,116,101,109,112,108,97,116,101,142,8, +53,18,16,2,95,2,56,8,66,93,8,252,224,8,95,9,8,252,224,8,2, +57,18,104,2,58,8,69,37,36,35,8,40,8,39,8,50,8,49,8,52,16, +4,8,68,11,3,1,4,103,52,48,57,143,3,1,7,101,110,118,51,51,56, +52,144,16,4,8,67,11,2,131,3,1,7,101,110,118,51,51,56,53,145,18, +158,2,65,8,69,18,158,2,137,8,69,18,158,2,65,8,69,18,158,2,95, +8,53,18,16,2,95,2,56,8,70,93,8,252,226,8,95,9,8,252,226,8, +2,57,18,104,2,58,8,73,37,36,35,8,40,8,39,8,50,8,49,8,52, +16,4,8,72,11,3,1,4,103,52,48,54,146,3,1,7,101,110,118,51,52, +48,48,147,16,4,8,71,11,65,111,116,104,101,114,148,3,1,7,101,110,118, +51,52,48,49,149,18,158,2,65,8,73,18,158,2,96,8,73,18,158,9,8, +73,18,158,2,65,8,73,18,158,2,0,8,73,18,16,2,103,93,16,2,158, +93,16,2,158,66,118,97,108,117,101,115,150,8,73,9,8,73,9,8,81,98, +8,80,10,32,11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109, +101,151,9,11,159,2,13,9,11,16,6,1,20,101,108,108,105,112,115,105,115, +45,99,111,117,110,116,45,101,114,114,111,114,152,29,153,11,11,73,115,121,110, +116,97,120,45,99,97,115,101,42,42,154,2,153,66,115,121,110,116,97,120,155, +2,153,98,8,79,10,33,11,95,159,64,35,37,115,99,156,9,11,159,2,151, +9,11,159,2,13,9,11,16,0,96,8,78,8,254,1,11,16,0,16,4,8, +77,11,61,120,157,3,1,6,101,110,118,51,56,49,158,16,4,8,76,11,68, +104,101,114,101,45,115,116,120,159,3,1,6,101,110,118,51,56,51,160,16,4, +8,75,11,2,159,2,160,13,16,4,33,2,153,2,57,11,93,8,252,226,8, +16,6,8,74,11,61,114,161,63,115,114,99,162,3,1,7,101,110,118,51,52, +48,52,163,2,163,95,9,8,252,226,8,2,57,18,158,2,65,8,73,18,158, +2,65,8,73,11,9,93,68,35,37,107,101,114,110,101,108,164,96,2,164,2, +35,2,13,2,42,0}; + EVAL_ONE_SIZED_STR((char *)expr, 6725); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,252,169,1,252,230,86,159,32,20,98,158,16,1, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,252,169,1,252,32,87,159,32,20,98,158,16,1, 20,24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,1,29,2,11,11,10,10,10,46,80,158, 32,32,20,98,158,16,24,30,3,2,2,74,115,116,114,117,99,116,58,112,114, @@ -2286,13 +2283,13 @@ 99,107,45,102,111,114,45,98,114,101,97,107,51,254,1,16,0,11,11,16,14, 2,41,2,39,2,31,2,33,2,29,2,37,2,27,2,6,2,10,2,43,2, 12,2,35,2,25,2,4,46,11,16,18,2,49,2,23,2,45,2,16,2,14, -2,8,71,115,101,116,33,45,118,97,108,117,101,115,52,70,108,101,116,45,115, -116,114,117,99,116,53,62,100,111,54,74,119,105,116,104,45,104,97,110,100,108, -101,114,115,42,55,72,112,97,114,97,109,101,116,101,114,105,122,101,56,64,116, -105,109,101,57,69,102,108,117,105,100,45,108,101,116,58,78,112,97,114,97,109, -101,116,101,114,105,122,101,45,98,114,101,97,107,59,64,99,97,115,101,60,66, -108,101,116,47,99,99,61,73,119,105,116,104,45,104,97,110,100,108,101,114,115, -62,65,100,101,108,97,121,63,16,18,11,11,11,11,11,11,11,11,11,11,11, +2,8,65,100,101,108,97,121,52,70,108,101,116,45,115,116,114,117,99,116,53, +69,102,108,117,105,100,45,108,101,116,54,73,119,105,116,104,45,104,97,110,100, +108,101,114,115,55,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,56, +72,112,97,114,97,109,101,116,101,114,105,122,101,57,64,116,105,109,101,58,66, +108,101,116,47,99,99,59,64,99,97,115,101,60,62,100,111,61,78,112,97,114, +97,109,101,116,101,114,105,122,101,45,98,114,101,97,107,62,71,115,101,116,33, +45,118,97,108,117,101,115,63,16,18,11,11,11,11,11,11,11,11,11,11,11, 11,11,11,11,11,11,11,16,18,2,49,2,23,2,45,2,16,2,14,2,8, 2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2, 62,2,63,38,50,106,16,5,93,69,99,97,115,101,45,116,101,115,116,64,89, @@ -2330,33 +2327,33 @@ 30,80,2,66,69,115,116,120,45,62,108,105,115,116,81,4,16,25,18,98,64, 104,101,114,101,82,38,98,36,10,32,11,95,159,2,18,9,11,159,68,35,37, 100,101,102,105,110,101,83,9,11,159,74,35,37,115,109,97,108,108,45,115,99, -104,101,109,101,84,9,11,16,70,2,6,2,2,2,16,2,2,2,25,2,2, -2,43,2,2,2,52,2,2,2,8,2,2,2,49,2,2,2,63,2,2,2, -61,2,2,2,27,2,2,2,23,2,2,2,10,2,2,2,64,2,2,2,57, -2,2,2,14,2,2,2,58,2,2,2,12,2,2,2,39,2,2,2,56,2, -2,2,60,2,2,2,4,2,2,2,33,2,2,2,35,2,2,2,53,2,2, -2,31,2,2,2,29,2,2,2,37,2,2,1,22,98,114,101,97,107,45,112, -97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,85,2,2,2,54,2, -2,2,62,2,2,2,59,2,2,67,112,114,111,109,105,115,101,86,2,2,2, -41,2,2,2,55,2,2,2,45,2,2,98,35,10,33,11,95,159,67,35,37, +104,101,109,101,84,9,11,16,70,2,10,2,2,2,54,2,2,2,37,2,2, +2,16,2,2,2,45,2,2,2,25,2,2,2,52,2,2,2,49,2,2,2, +41,2,2,2,23,2,2,2,57,2,2,2,56,2,2,67,112,114,111,109,105, +115,101,85,2,2,2,61,2,2,2,31,2,2,2,14,2,2,2,29,2,2, +2,12,2,2,2,33,2,2,2,59,2,2,2,55,2,2,2,64,2,2,2, +43,2,2,2,39,2,2,2,6,2,2,2,63,2,2,1,22,98,114,101,97, +107,45,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,86,2,2, +2,62,2,2,2,4,2,2,2,60,2,2,2,58,2,2,2,27,2,2,2, +35,2,2,2,8,2,2,2,53,2,2,98,35,10,33,11,95,159,67,35,37, 113,113,115,116,120,87,9,11,159,76,35,37,115,116,120,99,97,115,101,45,115, 99,104,101,109,101,88,9,11,159,2,66,9,11,16,0,96,34,8,254,1,11, -16,0,16,4,33,11,61,120,89,3,1,7,101,110,118,51,52,48,50,90,18, -16,2,95,66,115,114,99,116,97,103,91,39,93,8,252,254,8,95,9,8,252, -254,8,69,35,37,115,116,120,99,97,115,101,92,18,100,64,100,101,115,116,93, +16,0,16,4,33,11,61,120,89,3,1,7,101,110,118,51,52,48,54,90,18, +16,2,95,66,115,114,99,116,97,103,91,39,93,8,252,255,8,95,9,8,252, +255,8,69,35,37,115,116,120,99,97,115,101,92,18,100,64,100,101,115,116,93, 42,36,35,34,33,16,8,41,11,3,1,4,103,52,49,55,94,3,1,4,103, -52,49,56,95,3,1,4,103,52,49,57,96,3,1,7,101,110,118,51,52,48, -57,97,2,97,2,97,16,6,40,11,61,95,98,61,107,99,3,1,7,101,110, -118,51,52,49,48,100,2,100,18,158,63,99,116,120,101,42,18,158,63,101,113, +52,49,56,95,3,1,4,103,52,49,57,96,3,1,7,101,110,118,51,52,49, +51,97,2,97,2,97,16,6,40,11,61,95,98,61,107,99,3,1,7,101,110, +118,51,52,49,52,100,2,100,18,158,63,99,116,120,101,42,18,158,63,101,113, 63,102,42,18,158,2,101,42,18,158,65,113,117,111,116,101,103,42,18,158,2, -101,42,18,158,2,101,42,18,16,2,95,2,91,43,93,8,252,255,8,95,9, -8,252,255,8,2,92,18,158,2,93,42,18,158,2,101,42,18,158,64,101,113, +101,42,18,158,2,101,42,18,16,2,95,2,91,43,93,8,252,0,9,95,9, +8,252,0,9,2,92,18,158,2,93,42,18,158,2,101,42,18,158,64,101,113, 118,63,104,42,18,158,2,101,42,18,158,2,103,42,18,158,2,101,42,18,158, -2,101,42,18,16,2,95,2,91,44,93,8,252,0,9,95,9,8,252,0,9, +2,101,42,18,16,2,95,2,91,44,93,8,252,1,9,95,9,8,252,1,9, 2,92,18,100,2,93,47,36,35,34,33,16,8,46,11,3,1,4,103,52,49, 52,105,3,1,4,103,52,49,53,106,3,1,4,103,52,49,54,107,3,1,7, -101,110,118,51,52,50,49,108,2,108,2,108,16,6,45,11,2,98,2,99,3, -1,7,101,110,118,51,52,50,50,109,2,109,18,158,2,101,47,18,158,64,109, +101,110,118,51,52,50,53,108,2,108,2,108,16,6,45,11,2,98,2,99,3, +1,7,101,110,118,51,52,50,54,109,2,109,18,158,2,101,47,18,158,64,109, 101,109,118,110,47,18,158,2,101,47,18,158,2,103,47,18,158,2,101,47,18, 158,2,101,47,11,16,5,93,2,60,89,162,32,33,8,36,9,223,0,27,249, 22,209,20,15,159,35,32,43,196,27,28,248,80,158,35,32,194,249,80,158,36, @@ -2374,9 +2371,9 @@ 80,158,48,34,195,27,248,80,158,49,35,196,28,248,80,158,49,39,193,248,80, 158,49,40,193,11,11,11,11,248,80,158,44,37,248,80,158,45,35,196,11,11, 11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22, -88,197,249,80,158,41,41,202,27,250,22,61,198,200,199,27,20,15,159,43,40, +88,197,249,80,158,41,41,202,27,250,22,61,199,198,200,27,20,15,159,43,40, 43,250,22,209,20,15,159,46,41,43,250,22,209,20,15,159,49,42,43,251,22, -62,20,15,159,53,43,43,248,22,78,204,248,22,80,204,248,22,52,204,20,15, +62,20,15,159,53,43,43,248,22,80,204,248,22,52,204,248,22,78,204,20,15, 159,49,44,43,195,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80,158, 39,34,198,27,248,80,158,40,35,199,28,248,80,158,40,32,193,249,80,158,41, 33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,32,193, @@ -2387,7 +2384,7 @@ 52,39,193,248,80,158,52,40,193,11,11,11,248,80,158,45,37,248,80,158,46, 35,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, 196,27,248,22,90,197,27,248,22,89,198,249,80,158,43,41,204,27,251,22,61, -200,199,201,202,27,20,15,159,45,45,43,91,159,33,11,90,161,33,32,11,83, +199,200,201,202,27,20,15,159,45,45,43,91,159,33,11,90,161,33,32,11,83, 160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3,1,250, 22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184, 2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32, @@ -2398,7 +2395,7 @@ 209,20,15,159,41,48,43,250,22,60,20,15,159,44,49,43,250,22,209,20,15, 159,47,50,43,250,22,60,20,15,159,50,51,43,248,22,88,23,17,248,22,87, 23,17,20,15,159,47,52,43,250,22,209,20,15,159,47,53,43,250,22,62,20, -15,159,50,54,43,248,22,52,23,17,248,22,78,23,17,20,15,159,47,55,43, +15,159,50,54,43,248,22,78,23,17,248,22,52,23,17,20,15,159,47,55,43, 20,15,159,41,56,43,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, 9,223,3,248,22,252,184,2,208,27,28,248,80,158,38,32,197,249,80,158,39, 33,248,80,158,40,34,199,27,248,80,158,41,35,200,28,248,80,158,41,32,193, @@ -2412,7 +2409,7 @@ 34,195,27,248,80,158,50,35,196,28,248,80,158,50,39,193,248,80,158,50,40, 193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22, 87,196,27,248,22,90,197,27,249,22,70,199,36,27,249,22,70,200,37,27,249, -22,69,201,38,249,80,158,46,41,23,15,27,253,22,61,204,203,205,202,201,206, +22,69,201,38,249,80,158,46,41,23,15,27,253,22,61,201,203,204,205,202,206, 27,20,15,159,48,57,43,91,159,33,11,90,161,33,32,11,83,160,38,32,33, 11,247,248,22,8,89,162,32,33,40,9,226,18,2,3,1,250,22,31,89,162, 32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252, @@ -2427,11 +2424,11 @@ 32,43,249,22,69,23,21,37,20,15,159,51,8,33,43,20,15,159,47,8,34, 43,250,22,209,20,15,159,47,8,35,43,251,22,60,20,15,159,51,8,36,43, 250,22,209,20,15,159,54,8,37,43,250,22,60,20,15,159,57,8,38,43,20, -15,159,57,8,39,43,248,22,87,23,24,20,15,159,54,8,40,43,250,22,209, -20,15,159,54,8,41,43,250,22,62,20,15,159,57,8,42,43,248,22,52,23, +15,159,57,8,39,43,248,22,90,23,24,20,15,159,54,8,40,43,250,22,209, +20,15,159,54,8,41,43,250,22,62,20,15,159,57,8,42,43,248,22,87,23, 24,248,22,78,23,24,20,15,159,54,8,43,43,250,22,209,20,15,159,54,8, -44,43,251,22,62,20,15,159,58,8,45,43,20,15,159,58,8,46,43,248,22, -90,23,25,249,22,70,23,26,36,20,15,159,54,8,47,43,20,15,159,47,8, +44,43,251,22,62,20,15,159,58,8,45,43,20,15,159,58,8,46,43,249,22, +70,23,26,36,248,22,52,23,25,20,15,159,54,8,47,43,20,15,159,47,8, 48,43,20,15,159,41,8,49,43,197,89,162,32,32,33,9,223,0,192,89,162, 32,32,34,9,223,3,248,22,252,184,2,208,27,28,248,80,158,39,32,198,249, 80,158,40,33,248,80,158,41,34,200,27,248,80,158,42,35,201,28,248,80,158, @@ -2466,853 +2463,855 @@ 37,115,116,120,108,111,99,123,68,114,101,108,111,99,97,116,101,124,1,30,125, 2,92,1,20,101,108,108,105,112,115,105,115,45,99,111,117,110,116,45,101,114, 114,111,114,126,0,16,50,18,98,2,82,49,36,35,34,16,4,48,11,2,89, -3,1,7,101,110,118,51,52,50,57,127,18,16,2,95,2,91,50,93,8,252, -43,9,95,9,8,252,43,9,2,92,18,100,2,93,53,36,35,34,48,16,6, +3,1,7,101,110,118,51,52,51,51,127,18,16,2,95,2,91,50,93,8,252, +44,9,95,9,8,252,44,9,2,92,18,100,2,93,53,36,35,34,48,16,6, 52,11,3,1,4,103,52,52,56,128,3,1,4,103,52,52,57,129,3,1,7, -101,110,118,51,52,51,52,130,2,130,16,6,51,11,2,98,2,112,3,1,7, -101,110,118,51,52,51,53,131,2,131,18,158,2,101,53,18,158,2,0,53,18, +101,110,118,51,52,51,56,130,2,130,16,6,51,11,2,98,2,112,3,1,7, +101,110,118,51,52,51,57,131,2,131,18,158,2,101,53,18,158,2,0,53,18, 16,2,103,93,16,2,158,93,16,2,158,64,99,111,110,100,132,53,9,53,9, 8,29,98,8,28,10,32,11,94,159,2,84,9,11,159,2,66,9,11,16,6, -66,115,121,110,116,97,120,133,29,134,11,11,2,126,2,134,73,115,121,110,116, -97,120,45,99,97,115,101,42,42,135,2,134,98,59,10,33,11,95,159,64,35, +2,126,29,133,11,11,73,115,121,110,116,97,120,45,99,97,115,101,42,42,134, +2,133,66,115,121,110,116,97,120,135,2,133,98,59,10,33,11,95,159,64,35, 37,115,99,136,9,11,159,2,84,9,11,159,2,66,9,11,16,0,96,58,8, 254,1,11,16,0,16,4,57,11,2,89,3,1,6,101,110,118,51,56,49,137, 16,4,56,11,68,104,101,114,101,45,115,116,120,138,3,1,6,101,110,118,51, -56,51,139,16,4,55,11,2,138,2,139,13,16,3,33,2,134,2,92,93,8, -252,43,9,16,6,54,11,61,114,140,63,115,114,99,141,3,1,7,101,110,118, -51,52,51,57,142,2,142,95,9,8,252,43,9,2,92,18,158,2,101,53,18, -158,64,101,108,115,101,143,49,18,16,2,95,2,91,8,30,93,8,252,45,9, -95,9,8,252,45,9,2,92,18,100,2,93,8,33,36,35,34,48,16,10,8, -32,11,3,1,4,103,52,52,52,144,3,1,4,103,52,52,53,145,3,1,4, -103,52,52,54,146,3,1,4,103,52,52,55,147,3,1,7,101,110,118,51,52, -52,56,148,2,148,2,148,2,148,16,10,8,31,11,2,98,2,112,2,114,2, -115,3,1,7,101,110,118,51,52,52,57,149,2,149,2,149,2,149,18,158,2, -101,8,33,18,158,2,0,8,33,18,158,2,101,8,33,18,16,2,95,2,91, -8,34,93,8,252,47,9,95,9,8,252,47,9,2,92,18,16,2,99,2,113, -8,39,93,8,252,47,9,16,6,8,38,11,2,140,2,141,3,1,7,101,110, -118,51,52,55,50,150,2,150,16,4,8,37,11,64,101,120,110,104,151,3,1, -7,101,110,118,51,52,55,51,152,16,4,8,36,11,63,101,115,99,153,3,1, -7,101,110,118,51,52,55,52,154,16,4,8,35,11,63,101,120,110,155,3,1, -7,101,110,118,51,52,55,54,156,95,9,8,252,47,9,2,92,18,100,2,93, -8,42,36,35,34,48,16,12,8,41,11,3,1,4,103,52,51,57,157,3,1, -4,103,52,52,48,158,3,1,4,103,52,52,49,159,3,1,4,103,52,52,50, -160,3,1,4,103,52,52,51,161,3,1,7,101,110,118,51,52,54,52,162,2, -162,2,162,2,162,2,162,16,12,8,40,11,2,98,2,112,2,99,2,114,2, -115,3,1,7,101,110,118,51,52,54,53,163,2,163,2,163,2,163,2,163,18, -158,2,101,8,42,18,158,2,111,8,42,18,158,2,101,8,42,18,158,2,64, -8,42,18,158,2,101,8,42,18,158,2,101,8,42,18,158,2,0,8,42,18, -158,2,101,8,42,18,158,2,101,8,42,18,16,2,95,2,91,8,43,93,8, -252,50,9,95,9,8,252,50,9,2,92,18,16,2,99,2,113,8,48,93,8, -252,50,9,16,6,8,47,11,2,140,2,141,3,1,7,101,110,118,51,53,48, -50,164,2,164,16,4,8,46,11,2,151,3,1,7,101,110,118,51,53,48,51, -165,16,4,8,45,11,2,153,3,1,7,101,110,118,51,53,48,52,166,16,4, -8,44,11,2,155,3,1,7,101,110,118,51,53,48,54,167,95,9,8,252,50, -9,2,92,18,100,2,93,8,51,36,35,34,48,16,16,8,50,11,3,1,4, -103,52,51,50,168,3,1,4,103,52,51,51,169,3,1,4,103,52,51,52,170, -3,1,4,103,52,51,53,171,3,1,4,103,52,51,54,172,3,1,4,103,52, -51,55,173,3,1,4,103,52,51,56,174,3,1,7,101,110,118,51,52,57,50, -175,2,175,2,175,2,175,2,175,2,175,2,175,16,16,8,49,11,2,98,2, -112,2,99,2,114,2,115,2,117,2,118,3,1,7,101,110,118,51,52,57,51, -176,2,176,2,176,2,176,2,176,2,176,2,176,18,158,2,101,8,51,18,158, -2,116,8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,89,8, -51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158, -2,111,8,51,18,158,2,101,8,51,18,158,2,64,8,51,18,158,2,89,8, -51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,0,8,51,18,158, -2,101,8,51,18,158,2,101,8,51,18,158,2,60,8,51,18,158,2,89,8, -51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,11,16, -5,93,2,54,89,162,32,33,8,29,9,223,0,27,249,22,209,20,15,159,35, -32,45,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34, -196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,36,27, -248,80,158,41,34,196,28,248,80,158,41,37,193,248,22,8,89,162,32,33,39, -9,224,9,1,27,249,22,2,89,162,32,33,50,9,224,4,5,249,80,158,35, -38,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248, -80,158,39,35,200,28,248,80,158,39,32,193,27,28,248,22,206,194,193,200,249, -80,158,41,33,248,80,158,42,34,196,27,248,80,158,43,35,197,248,22,59,250, -22,209,199,196,199,11,11,194,248,80,158,37,39,196,28,248,22,57,193,21,95, -9,9,9,248,80,158,35,40,193,11,27,248,80,158,41,35,196,28,248,80,158, -41,32,193,249,80,158,42,36,27,248,80,158,44,34,196,28,248,80,158,44,32, -193,249,80,158,45,33,248,80,158,46,34,195,27,248,80,158,47,35,196,28,248, -80,158,47,37,193,248,22,59,248,80,158,48,39,194,11,11,27,248,80,158,44, -35,196,28,248,80,158,44,37,193,248,80,158,44,39,193,11,11,11,11,28,192, -27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27, -249,22,70,199,36,27,249,22,70,200,37,27,249,22,69,201,38,27,249,22,209, -20,15,159,44,33,45,250,22,2,89,162,32,34,43,9,224,15,16,27,249,22, -209,20,15,159,36,34,45,198,27,248,80,158,36,41,194,28,192,196,27,28,248, -80,158,37,32,195,249,80,158,38,36,248,80,158,39,34,197,248,80,158,39,41, -248,80,158,40,35,198,11,28,192,192,250,22,252,39,2,11,6,19,19,98,97, -100,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,198,248,22,216, -27,20,15,159,49,35,45,250,22,209,20,15,159,52,36,45,23,16,195,248,22, -216,27,20,15,159,49,37,45,250,22,209,20,15,159,52,38,45,206,195,27,28, -248,80,158,44,37,194,248,80,158,44,39,194,11,28,192,27,249,22,209,20,15, -159,46,39,45,27,20,15,159,47,40,45,250,22,209,20,15,159,50,41,45,202, -195,27,248,80,158,46,41,194,28,192,249,80,158,47,42,23,16,27,252,22,61, -23,17,23,16,202,206,204,27,20,15,159,49,42,45,91,159,33,11,90,161,33, -32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,19,2, -3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247, -22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89, -162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193, -249,80,158,35,43,21,96,2,116,66,100,111,108,111,111,112,177,94,94,63,118, -97,114,178,64,105,110,105,116,179,2,113,95,2,111,94,63,110,111,116,180,62, -101,48,181,96,2,0,61,99,182,2,113,95,2,177,64,115,116,101,112,183,2, -113,20,15,159,35,43,45,89,162,32,32,8,34,9,225,6,5,4,27,250,22, -209,20,15,159,38,44,45,250,22,209,20,15,159,41,45,45,251,22,60,20,15, -159,45,46,45,20,15,159,45,47,45,250,22,2,89,162,33,33,41,9,223,16, -250,22,209,20,15,159,35,48,45,249,22,60,248,22,52,199,248,22,78,199,20, -15,159,35,49,45,248,22,52,23,15,248,22,78,23,15,250,22,209,20,15,159, -48,50,45,250,22,60,20,15,159,51,51,45,250,22,209,20,15,159,54,52,45, -249,22,60,20,15,159,56,53,45,248,22,90,23,23,20,15,159,54,54,45,250, -22,209,20,15,159,54,55,45,249,22,56,20,15,159,56,56,45,249,22,65,248, -22,89,23,25,248,22,60,250,22,209,20,15,159,8,30,57,45,249,22,56,20, -15,159,8,32,58,45,248,22,87,23,31,20,15,159,8,30,59,45,20,15,159, -54,8,28,45,20,15,159,48,8,29,45,20,15,159,41,8,30,45,197,89,162, +56,51,139,16,4,55,11,2,138,2,139,13,16,4,33,2,133,2,92,11,93, +8,252,44,9,16,6,54,11,61,114,140,63,115,114,99,141,3,1,7,101,110, +118,51,52,52,51,142,2,142,95,9,8,252,44,9,2,92,18,158,2,101,53, +18,158,64,101,108,115,101,143,49,18,16,2,95,2,91,8,30,93,8,252,46, +9,95,9,8,252,46,9,2,92,18,100,2,93,8,33,36,35,34,48,16,10, +8,32,11,3,1,4,103,52,52,52,144,3,1,4,103,52,52,53,145,3,1, +4,103,52,52,54,146,3,1,4,103,52,52,55,147,3,1,7,101,110,118,51, +52,53,50,148,2,148,2,148,2,148,16,10,8,31,11,2,98,2,112,2,114, +2,115,3,1,7,101,110,118,51,52,53,51,149,2,149,2,149,2,149,18,158, +2,101,8,33,18,158,2,0,8,33,18,158,2,101,8,33,18,16,2,95,2, +91,8,34,93,8,252,48,9,95,9,8,252,48,9,2,92,18,16,2,99,2, +113,8,39,93,8,252,48,9,16,6,8,38,11,2,140,2,141,3,1,7,101, +110,118,51,52,55,54,150,2,150,16,4,8,37,11,64,101,120,110,104,151,3, +1,7,101,110,118,51,52,55,55,152,16,4,8,36,11,63,101,115,99,153,3, +1,7,101,110,118,51,52,55,56,154,16,4,8,35,11,63,101,120,110,155,3, +1,7,101,110,118,51,52,56,48,156,95,9,8,252,48,9,2,92,18,100,2, +93,8,42,36,35,34,48,16,12,8,41,11,3,1,4,103,52,51,57,157,3, +1,4,103,52,52,48,158,3,1,4,103,52,52,49,159,3,1,4,103,52,52, +50,160,3,1,4,103,52,52,51,161,3,1,7,101,110,118,51,52,54,56,162, +2,162,2,162,2,162,2,162,16,12,8,40,11,2,98,2,112,2,99,2,114, +2,115,3,1,7,101,110,118,51,52,54,57,163,2,163,2,163,2,163,2,163, +18,158,2,101,8,42,18,158,2,111,8,42,18,158,2,101,8,42,18,158,2, +64,8,42,18,158,2,101,8,42,18,158,2,101,8,42,18,158,2,0,8,42, +18,158,2,101,8,42,18,158,2,101,8,42,18,16,2,95,2,91,8,43,93, +8,252,51,9,95,9,8,252,51,9,2,92,18,16,2,99,2,113,8,48,93, +8,252,51,9,16,6,8,47,11,2,140,2,141,3,1,7,101,110,118,51,53, +48,54,164,2,164,16,4,8,46,11,2,151,3,1,7,101,110,118,51,53,48, +55,165,16,4,8,45,11,2,153,3,1,7,101,110,118,51,53,48,56,166,16, +4,8,44,11,2,155,3,1,7,101,110,118,51,53,49,48,167,95,9,8,252, +51,9,2,92,18,100,2,93,8,51,36,35,34,48,16,16,8,50,11,3,1, +4,103,52,51,50,168,3,1,4,103,52,51,51,169,3,1,4,103,52,51,52, +170,3,1,4,103,52,51,53,171,3,1,4,103,52,51,54,172,3,1,4,103, +52,51,55,173,3,1,4,103,52,51,56,174,3,1,7,101,110,118,51,52,57, +54,175,2,175,2,175,2,175,2,175,2,175,2,175,16,16,8,49,11,2,98, +2,112,2,99,2,114,2,115,2,117,2,118,3,1,7,101,110,118,51,52,57, +55,176,2,176,2,176,2,176,2,176,2,176,2,176,18,158,2,101,8,51,18, +158,2,116,8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,89, +8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,18, +158,2,111,8,51,18,158,2,101,8,51,18,158,2,64,8,51,18,158,2,89, +8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,0,8,51,18, +158,2,101,8,51,18,158,2,101,8,51,18,158,2,60,8,51,18,158,2,89, +8,51,18,158,2,101,8,51,18,158,2,101,8,51,18,158,2,101,8,51,11, +16,5,93,2,61,89,162,32,33,8,29,9,223,0,27,249,22,209,20,15,159, +35,32,45,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37, +34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,36, +27,248,80,158,41,34,196,28,248,80,158,41,37,193,248,22,8,89,162,32,33, +39,9,224,9,1,27,249,22,2,89,162,32,33,50,9,224,4,5,249,80,158, +35,38,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27, +248,80,158,39,35,200,28,248,80,158,39,32,193,27,28,248,22,206,194,193,200, +249,80,158,41,33,248,80,158,42,34,196,27,248,80,158,43,35,197,248,22,59, +250,22,209,199,196,199,11,11,194,248,80,158,37,39,196,28,248,22,57,193,21, +95,9,9,9,248,80,158,35,40,193,11,27,248,80,158,41,35,196,28,248,80, +158,41,32,193,249,80,158,42,36,27,248,80,158,44,34,196,28,248,80,158,44, +32,193,249,80,158,45,33,248,80,158,46,34,195,27,248,80,158,47,35,196,28, +248,80,158,47,37,193,248,22,59,248,80,158,48,39,194,11,11,27,248,80,158, +44,35,196,28,248,80,158,44,37,193,248,80,158,44,39,193,11,11,11,11,28, +192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, +27,249,22,70,199,36,27,249,22,70,200,37,27,249,22,69,201,38,27,249,22, +209,20,15,159,44,33,45,250,22,2,89,162,32,34,43,9,224,15,16,27,249, +22,209,20,15,159,36,34,45,198,27,248,80,158,36,41,194,28,192,196,27,28, +248,80,158,37,32,195,249,80,158,38,36,248,80,158,39,34,197,248,80,158,39, +41,248,80,158,40,35,198,11,28,192,192,250,22,252,39,2,11,6,19,19,98, +97,100,32,118,97,114,105,97,98,108,101,32,115,121,110,116,97,120,198,248,22, +216,27,20,15,159,49,35,45,250,22,209,20,15,159,52,36,45,23,16,195,248, +22,216,27,20,15,159,49,37,45,250,22,209,20,15,159,52,38,45,206,195,27, +28,248,80,158,44,37,194,248,80,158,44,39,194,11,28,192,27,249,22,209,20, +15,159,46,39,45,27,20,15,159,47,40,45,250,22,209,20,15,159,50,41,45, +202,195,27,248,80,158,46,41,194,28,192,249,80,158,47,42,23,16,27,252,22, +61,204,23,16,202,206,23,17,27,20,15,159,49,42,45,91,159,33,11,90,161, +33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,19, +2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10, +247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193, +89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2, +193,249,80,158,35,43,21,96,2,116,66,100,111,108,111,111,112,177,94,94,63, +118,97,114,178,64,105,110,105,116,179,2,113,95,2,111,94,63,110,111,116,180, +62,101,48,181,96,2,0,61,99,182,2,113,95,2,177,64,115,116,101,112,183, +2,113,20,15,159,35,43,45,89,162,32,32,8,34,9,225,6,5,4,27,250, +22,209,20,15,159,38,44,45,250,22,209,20,15,159,41,45,45,251,22,60,20, +15,159,45,46,45,20,15,159,45,47,45,250,22,2,89,162,33,33,41,9,223, +16,250,22,209,20,15,159,35,48,45,249,22,60,248,22,52,199,248,22,78,199, +20,15,159,35,49,45,248,22,89,23,15,248,22,78,23,15,250,22,209,20,15, +159,48,50,45,250,22,60,20,15,159,51,51,45,250,22,209,20,15,159,54,52, +45,249,22,60,20,15,159,56,53,45,248,22,90,23,23,20,15,159,54,54,45, +250,22,209,20,15,159,54,55,45,249,22,56,20,15,159,56,56,45,249,22,65, +248,22,52,23,25,248,22,60,250,22,209,20,15,159,8,30,57,45,249,22,56, +20,15,159,8,32,58,45,248,22,87,23,31,20,15,159,8,30,59,45,20,15, +159,54,8,28,45,20,15,159,48,8,29,45,20,15,159,41,8,30,45,197,89, +162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2, +208,27,28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49,34,197,27, +248,80,158,50,35,198,28,248,80,158,50,37,193,248,80,158,50,39,193,11,11, +28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,50,42,23,19,27,254, +22,61,23,17,23,21,23,15,23,19,203,23,22,202,27,20,15,159,52,8,31, +45,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, +162,32,33,40,9,226,22,2,3,1,250,22,31,89,162,32,32,36,9,225,6, +3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33, +36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181, +2,193,248,22,252,186,2,193,249,80,158,35,43,21,96,2,116,2,177,94,94, +2,178,2,179,2,113,96,2,111,2,181,96,2,0,2,114,2,115,2,113,96, +2,0,2,182,2,113,95,2,177,2,183,2,113,20,15,159,35,8,32,45,89, +162,32,32,8,35,9,225,6,5,4,27,250,22,209,20,15,159,38,8,33,45, +250,22,209,20,15,159,41,8,34,45,251,22,60,20,15,159,45,8,35,45,20, +15,159,45,8,36,45,250,22,2,89,162,33,33,41,9,223,16,250,22,209,20, +15,159,35,8,37,45,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35, +8,38,45,249,22,70,23,16,37,248,22,78,23,15,250,22,209,20,15,159,48, +8,39,45,251,22,60,20,15,159,52,8,40,45,248,22,90,23,19,250,22,209, +20,15,159,55,8,41,45,250,22,62,20,15,159,58,8,42,45,249,22,70,23, +26,36,249,22,69,23,26,38,20,15,159,55,8,43,45,250,22,209,20,15,159, +55,8,44,45,249,22,56,20,15,159,57,8,45,45,249,22,65,248,22,52,23, +26,248,22,60,250,22,209,20,15,159,8,31,8,46,45,249,22,56,20,15,159, +8,33,8,47,45,248,22,87,23,32,20,15,159,8,31,8,48,45,20,15,159, +55,8,49,45,20,15,159,48,8,50,45,20,15,159,41,8,51,45,197,89,162, 32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208, -27,28,248,80,158,47,32,195,249,80,158,48,33,248,80,158,49,34,197,27,248, -80,158,50,35,198,28,248,80,158,50,37,193,248,80,158,50,39,193,11,11,28, -192,27,248,22,52,194,27,248,22,53,195,249,80,158,50,42,23,19,27,254,22, -61,203,202,23,22,23,21,23,15,23,19,23,17,27,20,15,159,52,8,31,45, +250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,248, +80,158,44,44,20,15,159,44,8,52,45,250,22,252,39,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,13,2,65,2,68,2, +70,2,72,2,74,2,78,30,184,2,66,73,115,116,120,45,99,104,101,99,107, +47,101,115,99,185,7,2,80,30,186,2,66,70,115,116,120,45,114,111,116,97, +116,101,187,12,2,76,2,122,2,125,30,188,70,35,37,119,105,116,104,45,115, +116,120,189,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108,190, +3,16,53,18,98,2,82,8,53,36,35,34,16,4,8,52,11,66,111,114,105, +103,45,120,191,3,1,7,101,110,118,51,53,54,48,192,18,100,2,82,8,56, +36,35,34,8,52,16,16,8,55,11,3,1,4,103,52,53,48,193,3,1,4, +103,52,53,49,194,3,1,4,103,52,53,50,195,3,1,4,103,52,53,51,196, +3,1,4,103,52,53,52,197,3,1,4,103,52,53,53,198,3,1,4,103,52, +53,54,199,3,1,7,101,110,118,51,53,55,55,200,2,200,2,200,2,200,2, +200,2,200,2,200,16,16,8,54,11,2,98,2,178,2,179,2,183,2,181,2, +114,2,182,3,1,7,101,110,118,51,53,55,56,201,2,201,2,201,2,201,2, +201,2,201,2,201,18,101,2,82,8,58,36,35,34,8,52,8,55,8,54,16, +6,8,57,11,2,112,61,115,202,3,1,7,101,110,118,51,53,56,56,203,2, +203,18,16,2,95,2,91,8,59,93,8,252,72,9,95,9,8,252,72,9,2, +92,18,158,2,93,8,56,18,16,2,95,2,91,8,60,93,8,252,73,9,95, +9,8,252,73,9,2,92,18,158,2,93,8,56,18,101,2,82,8,62,36,35, +34,8,52,8,55,8,54,16,4,8,61,11,3,1,4,103,52,54,49,204,3, +1,7,101,110,118,51,54,48,56,205,18,16,2,95,2,91,8,63,93,8,252, +77,9,95,9,8,252,77,9,2,92,18,158,2,93,8,62,18,16,2,95,2, +91,8,64,93,8,252,79,9,95,9,8,252,79,9,2,92,18,16,2,99,2, +113,8,69,93,8,252,79,9,16,6,8,68,11,2,140,2,141,3,1,7,101, +110,118,51,54,49,56,206,2,206,16,4,8,67,11,2,151,3,1,7,101,110, +118,51,54,49,57,207,16,4,8,66,11,2,153,3,1,7,101,110,118,51,54, +50,48,208,16,4,8,65,11,2,155,3,1,7,101,110,118,51,54,50,50,209, +95,9,8,252,79,9,2,92,18,158,2,93,8,62,18,158,2,101,8,62,18, +158,2,116,8,62,18,158,2,177,8,62,18,158,2,101,8,62,18,158,2,101, +8,62,18,158,2,101,8,62,18,158,2,111,8,62,18,158,2,101,8,62,18, +158,2,180,8,62,18,158,2,101,8,62,18,158,2,101,8,62,18,158,2,0, +8,62,18,158,2,101,8,62,18,158,2,177,8,62,18,158,2,101,8,62,18, +158,2,101,8,62,18,158,2,101,8,62,18,158,2,101,8,62,18,16,2,95, +2,91,8,70,93,8,252,82,9,95,9,8,252,82,9,2,92,18,16,2,99, +2,113,8,75,93,8,252,82,9,16,6,8,74,11,2,140,2,141,3,1,7, +101,110,118,51,54,51,56,210,2,210,16,4,8,73,11,2,151,3,1,7,101, +110,118,51,54,51,57,211,16,4,8,72,11,2,153,3,1,7,101,110,118,51, +54,52,48,212,16,4,8,71,11,2,155,3,1,7,101,110,118,51,54,52,50, +213,95,9,8,252,82,9,2,92,18,103,2,93,8,78,36,35,34,8,52,8, +55,8,54,8,61,16,6,8,77,11,3,1,4,103,52,54,50,214,3,1,4, +103,52,54,51,215,3,1,7,101,110,118,51,54,51,51,216,2,216,16,4,8, +76,11,2,115,3,1,7,101,110,118,51,54,51,52,217,18,158,2,101,8,78, +18,158,2,116,8,78,18,158,2,177,8,78,18,158,2,101,8,78,18,158,2, +101,8,78,18,158,2,101,8,78,18,158,2,111,8,78,18,158,2,101,8,78, +18,158,2,0,8,78,18,158,2,101,8,78,18,158,2,101,8,78,18,158,2, +0,8,78,18,158,2,101,8,78,18,158,2,177,8,78,18,158,2,101,8,78, +18,158,2,101,8,78,18,158,2,101,8,78,18,158,2,101,8,78,18,16,2, +158,94,16,2,98,2,183,8,82,93,8,252,68,9,16,4,8,81,11,3,1, +8,119,115,116,109,112,52,53,55,218,3,1,7,101,110,118,51,53,56,55,219, +16,4,8,80,11,3,1,4,103,52,54,48,220,3,1,7,101,110,118,51,54, +53,49,221,16,4,8,79,11,65,95,101,108,115,101,222,3,1,7,101,110,118, +51,54,53,50,223,9,16,2,158,2,113,8,82,9,8,82,95,9,8,252,68, +9,2,189,11,16,5,93,2,52,89,162,32,33,55,9,223,0,27,249,22,209, +20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248, +80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80, +158,39,36,248,80,158,40,34,195,248,80,158,40,37,248,80,158,41,35,196,11, +11,28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,38,38,199,27,20, +15,159,39,33,39,250,22,209,20,15,159,42,34,39,250,22,209,20,15,159,45, +35,39,249,22,60,20,15,159,47,36,39,250,22,209,20,15,159,50,37,39,250, +22,60,20,15,159,53,38,39,20,15,159,53,39,39,23,17,20,15,159,50,40, +39,20,15,159,45,41,39,195,250,22,252,39,2,11,6,10,10,98,97,100,32, +115,121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2,70,2,72, +2,74,2,76,2,122,16,10,18,98,2,82,8,84,36,35,34,16,4,8,83, +11,2,89,3,1,7,101,110,118,51,54,53,53,224,18,16,2,95,2,91,8, +85,93,8,252,92,9,95,9,8,252,92,9,2,92,18,100,2,93,8,88,36, +35,34,8,83,16,6,8,87,11,3,1,4,103,52,54,52,225,3,1,4,103, +52,54,53,226,3,1,7,101,110,118,51,54,54,48,227,2,227,16,6,8,86, +11,2,52,63,101,120,112,228,3,1,7,101,110,118,51,54,54,49,229,2,229, +18,158,2,101,8,88,18,158,2,6,8,88,18,158,2,101,8,88,18,158,66, +108,97,109,98,100,97,230,8,88,18,158,9,8,88,18,158,2,101,8,88,18, +158,2,101,8,88,11,16,5,93,2,85,253,22,60,248,247,22,252,88,3,20, +15,159,39,32,32,248,247,22,252,88,3,20,15,159,39,33,32,248,247,22,252, +88,3,20,15,159,39,34,32,248,22,60,248,247,22,252,88,3,20,15,159,40, +35,32,248,22,60,248,247,22,252,88,3,20,15,159,40,36,32,10,40,20,98, +158,16,0,16,5,18,97,2,4,8,89,36,35,34,18,158,2,6,8,89,18, +158,2,8,8,89,18,158,2,10,8,89,18,158,2,12,8,89,11,16,5,93, +2,57,89,162,32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,45,196, +27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248, +80,158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158, +39,34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158,40, +33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80,158,42,37,193, +248,80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22, +78,195,27,248,22,80,196,27,249,22,61,196,195,27,20,15,159,39,33,45,250, +22,209,20,15,159,42,34,45,250,22,209,20,15,159,45,35,45,250,22,62,20, +15,159,48,36,45,20,15,159,48,37,45,202,20,15,159,45,38,45,195,27,28, +248,80,158,36,32,195,249,80,158,37,33,248,80,158,38,34,197,27,248,80,158, +39,35,198,28,248,80,158,39,32,193,249,80,158,40,39,27,248,80,158,42,34, +196,28,248,80,158,42,37,193,248,22,8,89,162,32,33,39,9,224,10,1,27, +249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,40,28,248,80,158, +36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200, +28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158, +41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57, +193,21,94,9,9,248,80,158,35,41,193,11,27,248,80,158,42,35,196,28,248, +80,158,42,32,193,249,80,158,43,33,248,80,158,44,34,195,27,248,80,158,45, +35,196,28,248,80,158,45,37,193,248,80,158,45,38,193,11,11,11,11,28,192, +27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27, +248,22,89,198,27,249,22,209,20,15,159,43,39,45,249,22,1,22,65,250,22, +2,22,59,248,22,216,27,20,15,159,50,40,45,250,22,209,20,15,159,53,41, +45,23,16,195,248,22,216,27,20,15,159,50,42,45,250,22,209,20,15,159,53, +43,45,23,15,195,27,28,248,80,158,43,37,194,248,80,158,43,38,194,11,28, +192,249,80,158,44,42,205,27,250,22,61,198,201,200,27,20,15,159,46,44,45, 91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162, -32,33,40,9,226,22,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3, +32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3, 7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36, 9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2, -193,248,22,252,186,2,193,249,80,158,35,43,21,96,2,116,2,177,94,94,2, -178,2,179,2,113,96,2,111,2,181,96,2,0,2,114,2,115,2,113,96,2, -0,2,182,2,113,95,2,177,2,183,2,113,20,15,159,35,8,32,45,89,162, -32,32,8,36,9,225,6,5,4,27,250,22,209,20,15,159,38,8,33,45,250, -22,209,20,15,159,41,8,34,45,251,22,60,20,15,159,45,8,35,45,20,15, -159,45,8,36,45,250,22,2,89,162,33,33,41,9,223,16,250,22,209,20,15, -159,35,8,37,45,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35,8, -38,45,248,22,87,23,15,248,22,90,23,15,250,22,209,20,15,159,48,8,39, -45,251,22,60,20,15,159,52,8,40,45,249,22,70,23,20,37,250,22,209,20, -15,159,55,8,41,45,250,22,62,20,15,159,58,8,42,45,248,22,52,23,25, -248,22,78,23,25,20,15,159,55,8,43,45,250,22,209,20,15,159,55,8,44, -45,249,22,56,20,15,159,57,8,45,45,249,22,65,249,22,69,23,27,38,248, -22,60,250,22,209,20,15,159,8,31,8,46,45,249,22,56,20,15,159,8,33, -8,47,45,249,22,70,23,33,36,20,15,159,8,31,8,48,45,20,15,159,55, -8,49,45,20,15,159,48,8,50,45,20,15,159,41,8,51,45,197,89,162,32, -32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,250, -22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,248,80, -158,44,44,20,15,159,44,8,52,45,250,22,252,39,2,11,6,10,10,98,97, -100,32,115,121,110,116,97,120,196,32,20,98,158,16,13,2,65,2,68,2,70, -2,72,2,74,2,78,30,184,2,66,73,115,116,120,45,99,104,101,99,107,47, -101,115,99,185,7,2,80,30,186,2,66,70,115,116,120,45,114,111,116,97,116, -101,187,12,2,76,2,122,2,125,30,188,70,35,37,119,105,116,104,45,115,116, -120,189,76,119,105,116,104,45,115,121,110,116,97,120,45,102,97,105,108,190,3, -16,53,18,98,2,82,8,53,36,35,34,16,4,8,52,11,66,111,114,105,103, -45,120,191,3,1,7,101,110,118,51,53,53,54,192,18,100,2,82,8,56,36, -35,34,8,52,16,16,8,55,11,3,1,4,103,52,53,48,193,3,1,4,103, -52,53,49,194,3,1,4,103,52,53,50,195,3,1,4,103,52,53,51,196,3, -1,4,103,52,53,52,197,3,1,4,103,52,53,53,198,3,1,4,103,52,53, -54,199,3,1,7,101,110,118,51,53,55,51,200,2,200,2,200,2,200,2,200, -2,200,2,200,16,16,8,54,11,2,98,2,178,2,179,2,183,2,181,2,114, -2,182,3,1,7,101,110,118,51,53,55,52,201,2,201,2,201,2,201,2,201, -2,201,2,201,18,101,2,82,8,58,36,35,34,8,52,8,55,8,54,16,6, -8,57,11,2,112,61,115,202,3,1,7,101,110,118,51,53,56,52,203,2,203, -18,16,2,95,2,91,8,59,93,8,252,71,9,95,9,8,252,71,9,2,92, -18,158,2,93,8,56,18,16,2,95,2,91,8,60,93,8,252,72,9,95,9, -8,252,72,9,2,92,18,158,2,93,8,56,18,101,2,82,8,62,36,35,34, -8,52,8,55,8,54,16,4,8,61,11,3,1,4,103,52,54,49,204,3,1, -7,101,110,118,51,54,48,52,205,18,16,2,95,2,91,8,63,93,8,252,76, -9,95,9,8,252,76,9,2,92,18,158,2,93,8,62,18,16,2,95,2,91, -8,64,93,8,252,78,9,95,9,8,252,78,9,2,92,18,16,2,99,2,113, -8,69,93,8,252,78,9,16,6,8,68,11,2,140,2,141,3,1,7,101,110, -118,51,54,49,52,206,2,206,16,4,8,67,11,2,151,3,1,7,101,110,118, -51,54,49,53,207,16,4,8,66,11,2,153,3,1,7,101,110,118,51,54,49, -54,208,16,4,8,65,11,2,155,3,1,7,101,110,118,51,54,49,56,209,95, -9,8,252,78,9,2,92,18,158,2,93,8,62,18,158,2,101,8,62,18,158, -2,116,8,62,18,158,2,177,8,62,18,158,2,101,8,62,18,158,2,101,8, -62,18,158,2,101,8,62,18,158,2,111,8,62,18,158,2,101,8,62,18,158, -2,180,8,62,18,158,2,101,8,62,18,158,2,101,8,62,18,158,2,0,8, -62,18,158,2,101,8,62,18,158,2,177,8,62,18,158,2,101,8,62,18,158, -2,101,8,62,18,158,2,101,8,62,18,158,2,101,8,62,18,16,2,95,2, -91,8,70,93,8,252,81,9,95,9,8,252,81,9,2,92,18,16,2,99,2, -113,8,75,93,8,252,81,9,16,6,8,74,11,2,140,2,141,3,1,7,101, -110,118,51,54,51,52,210,2,210,16,4,8,73,11,2,151,3,1,7,101,110, -118,51,54,51,53,211,16,4,8,72,11,2,153,3,1,7,101,110,118,51,54, -51,54,212,16,4,8,71,11,2,155,3,1,7,101,110,118,51,54,51,56,213, -95,9,8,252,81,9,2,92,18,103,2,93,8,78,36,35,34,8,52,8,55, -8,54,8,61,16,6,8,77,11,3,1,4,103,52,54,50,214,3,1,4,103, -52,54,51,215,3,1,7,101,110,118,51,54,50,57,216,2,216,16,4,8,76, -11,2,115,3,1,7,101,110,118,51,54,51,48,217,18,158,2,101,8,78,18, -158,2,116,8,78,18,158,2,177,8,78,18,158,2,101,8,78,18,158,2,101, -8,78,18,158,2,101,8,78,18,158,2,111,8,78,18,158,2,101,8,78,18, -158,2,0,8,78,18,158,2,101,8,78,18,158,2,101,8,78,18,158,2,0, -8,78,18,158,2,101,8,78,18,158,2,177,8,78,18,158,2,101,8,78,18, -158,2,101,8,78,18,158,2,101,8,78,18,158,2,101,8,78,18,16,2,158, -94,16,2,98,2,183,8,82,93,8,252,67,9,16,4,8,81,11,3,1,8, -119,115,116,109,112,52,53,55,218,3,1,7,101,110,118,51,53,56,51,219,16, -4,8,80,11,3,1,4,103,52,54,48,220,3,1,7,101,110,118,51,54,52, -55,221,16,4,8,79,11,65,95,101,108,115,101,222,3,1,7,101,110,118,51, -54,52,56,223,9,16,2,158,2,113,8,82,9,8,82,95,9,8,252,67,9, -2,189,11,16,5,93,2,63,89,162,32,33,55,9,223,0,27,249,22,209,20, -15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80, -158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158, -39,36,248,80,158,40,34,195,248,80,158,40,37,248,80,158,41,35,196,11,11, -28,192,27,248,22,52,194,27,248,22,53,195,249,80,158,38,38,199,27,20,15, -159,39,33,39,250,22,209,20,15,159,42,34,39,250,22,209,20,15,159,45,35, -39,249,22,60,20,15,159,47,36,39,250,22,209,20,15,159,50,37,39,250,22, -60,20,15,159,53,38,39,20,15,159,53,39,39,23,17,20,15,159,50,40,39, -20,15,159,45,41,39,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115, -121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2,70,2,72,2, -74,2,76,2,122,16,10,18,98,2,82,8,84,36,35,34,16,4,8,83,11, -2,89,3,1,7,101,110,118,51,54,53,49,224,18,16,2,95,2,91,8,85, -93,8,252,91,9,95,9,8,252,91,9,2,92,18,100,2,93,8,88,36,35, -34,8,83,16,6,8,87,11,3,1,4,103,52,54,52,225,3,1,4,103,52, -54,53,226,3,1,7,101,110,118,51,54,53,54,227,2,227,16,6,8,86,11, -2,63,63,101,120,112,228,3,1,7,101,110,118,51,54,53,55,229,2,229,18, -158,2,101,8,88,18,158,2,6,8,88,18,158,2,101,8,88,18,158,66,108, -97,109,98,100,97,230,8,88,18,158,9,8,88,18,158,2,101,8,88,18,158, -2,101,8,88,11,16,5,93,2,86,253,22,60,248,247,22,252,88,3,20,15, -159,39,32,32,248,247,22,252,88,3,20,15,159,39,33,32,248,247,22,252,88, -3,20,15,159,39,34,32,248,22,60,248,247,22,252,88,3,20,15,159,40,35, -32,248,22,60,248,247,22,252,88,3,20,15,159,40,36,32,10,40,20,98,158, -16,0,16,5,18,97,2,4,8,89,36,35,34,18,158,2,6,8,89,18,158, -2,8,8,89,18,158,2,10,8,89,18,158,2,12,8,89,11,16,5,93,2, -56,89,162,32,33,55,9,223,0,27,249,22,209,20,15,159,35,32,45,196,27, +193,248,22,252,186,2,193,249,80,158,35,43,21,96,1,22,119,105,116,104,45, +99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,231,2,21,96, +2,19,95,1,27,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114, +107,45,115,101,116,45,102,105,114,115,116,232,11,2,21,63,112,47,118,233,2, +113,97,2,116,9,65,101,120,112,114,49,234,64,101,120,112,114,235,2,113,20, +15,159,35,45,45,89,162,32,32,54,9,225,6,5,4,27,250,22,209,20,15, +159,38,46,45,250,22,209,20,15,159,41,47,45,251,22,60,20,15,159,45,48, +45,20,15,159,45,49,45,250,22,209,20,15,159,48,50,45,250,22,62,20,15, +159,51,51,45,20,15,159,51,52,45,248,22,52,23,18,20,15,159,48,53,45, +250,22,209,20,15,159,48,54,45,251,22,62,20,15,159,52,55,45,20,15,159, +52,56,45,248,22,78,23,19,248,22,80,23,19,20,15,159,48,57,45,20,15, +159,41,58,45,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223, +3,248,22,252,184,2,208,248,80,158,43,44,20,15,159,43,59,45,250,22,252, +39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,32,20,98,158, +16,13,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,74,2,184,2, +186,2,122,2,125,2,188,16,28,18,98,2,82,8,91,36,35,34,16,4,8, +90,11,63,115,116,120,236,3,1,7,101,110,118,51,54,54,56,237,18,16,2, +95,2,91,8,92,93,8,252,122,9,95,9,8,252,122,9,2,92,18,100,2, +93,8,95,36,35,34,8,90,16,8,8,94,11,3,1,4,103,52,55,49,238, +3,1,4,103,52,55,50,239,3,1,4,103,52,55,51,240,3,1,7,101,110, +118,51,54,55,53,241,2,241,2,241,16,8,8,93,11,2,98,2,234,2,235, +3,1,7,101,110,118,51,54,55,54,242,2,242,2,242,18,158,2,101,8,95, +18,158,2,116,8,95,18,158,9,8,95,18,158,2,101,8,95,18,100,2,82, +8,98,36,35,34,8,90,16,12,8,97,11,3,1,4,103,52,54,54,243,3, +1,4,103,52,54,55,244,3,1,4,103,52,54,56,245,3,1,4,103,52,54, +57,246,3,1,4,103,52,55,48,247,3,1,7,101,110,118,51,54,57,50,248, +2,248,2,248,2,248,2,248,16,12,8,96,11,2,98,65,112,97,114,97,109, +249,63,118,97,108,250,2,234,2,235,3,1,7,101,110,118,51,54,57,51,251, +2,251,2,251,2,251,2,251,18,16,2,95,2,91,8,99,93,8,252,125,9, +95,9,8,252,125,9,2,92,18,158,2,93,8,98,18,16,2,95,2,91,8, +100,93,8,252,126,9,95,9,8,252,126,9,2,92,18,158,2,93,8,98,18, +16,2,95,2,91,8,101,93,8,252,129,9,95,9,8,252,129,9,2,92,18, +16,2,99,2,113,8,106,93,8,252,129,9,16,6,8,105,11,2,140,2,141, +3,1,7,101,110,118,51,55,49,48,252,252,0,2,252,252,0,16,4,8,104, +11,2,151,3,1,7,101,110,118,51,55,49,49,252,253,0,16,4,8,103,11, +2,153,3,1,7,101,110,118,51,55,49,50,252,254,0,16,4,8,102,11,2, +155,3,1,7,101,110,118,51,55,49,52,252,255,0,95,9,8,252,129,9,2, +92,18,102,2,93,8,109,36,35,34,8,90,8,97,8,96,16,4,8,108,11, +3,1,4,103,52,55,54,252,0,1,3,1,7,101,110,118,51,55,48,54,252, +1,1,16,4,8,107,11,2,233,3,1,7,101,110,118,51,55,48,55,252,2, +1,18,158,2,101,8,109,18,158,2,231,8,109,18,158,2,21,8,109,18,158, +2,101,8,109,18,158,2,19,8,109,18,158,95,16,2,158,2,232,8,109,9, +16,2,158,11,8,109,9,16,2,158,2,21,8,109,9,8,109,18,158,2,101, +8,109,18,158,2,101,8,109,18,158,2,116,8,109,18,158,9,8,109,18,158, +2,101,8,109,18,158,2,101,8,109,18,16,2,158,94,16,2,98,2,233,8, +113,93,8,252,124,9,16,4,8,112,11,3,1,8,119,115,116,109,112,52,55, +52,252,3,1,3,1,7,101,110,118,51,55,48,48,252,4,1,16,4,8,111, +11,3,1,4,103,52,55,53,252,5,1,3,1,7,101,110,118,51,55,50,49, +252,6,1,16,4,8,110,11,2,222,3,1,7,101,110,118,51,55,50,50,252, +7,1,9,16,2,158,2,113,8,113,9,8,113,95,9,8,252,124,9,2,189, +11,16,5,93,2,62,89,162,32,33,8,36,9,223,0,27,249,22,209,20,15, +159,35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158, +37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39, +33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193, +249,80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28,248,80, +158,44,36,193,248,80,158,44,37,193,11,11,11,11,28,192,27,248,22,52,194, +27,248,22,78,195,27,248,22,87,196,27,248,22,88,197,249,80,158,40,38,201, +27,250,22,61,198,199,200,27,20,15,159,42,33,39,250,22,209,20,15,159,45, +34,39,250,22,209,20,15,159,48,35,39,251,22,60,20,15,159,52,36,39,20, +15,159,52,37,39,250,22,209,20,15,159,55,38,39,249,22,60,20,15,159,57, +39,39,250,22,209,20,15,159,8,28,40,39,250,22,62,20,15,159,8,31,41, +39,248,22,80,23,23,20,15,159,8,31,42,39,20,15,159,8,28,43,39,20, +15,159,55,44,39,250,22,209,20,15,159,55,45,39,250,22,60,20,15,159,58, +46,39,20,15,159,58,47,39,250,22,209,20,15,159,8,29,48,39,251,22,62, +20,15,159,8,33,49,39,20,15,159,8,33,50,39,248,22,78,23,25,248,22, +52,23,25,20,15,159,8,29,51,39,20,15,159,55,52,39,20,15,159,48,53, +39,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120, +196,32,20,98,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122, +16,22,18,98,2,82,8,115,36,35,34,16,4,8,114,11,2,236,3,1,7, +101,110,118,51,55,50,53,252,8,1,18,16,2,95,2,91,8,116,93,8,252, +142,9,95,9,8,252,142,9,2,92,18,100,2,93,8,119,36,35,34,8,114, +16,10,8,118,11,3,1,4,103,52,55,55,252,9,1,3,1,4,103,52,55, +56,252,10,1,3,1,4,103,52,55,57,252,11,1,3,1,4,103,52,56,48, +252,12,1,3,1,7,101,110,118,51,55,51,50,252,13,1,2,252,13,1,2, +252,13,1,2,252,13,1,16,10,8,117,11,2,98,69,98,111,111,108,45,101, +120,112,114,252,14,1,2,234,2,235,3,1,7,101,110,118,51,55,51,51,252, +15,1,2,252,15,1,2,252,15,1,2,252,15,1,18,158,2,101,8,119,18, +158,2,231,8,119,18,158,2,47,8,119,18,158,2,101,8,119,18,158,76,109, +97,107,101,45,116,104,114,101,97,100,45,99,101,108,108,252,16,1,8,119,18, +158,2,101,8,119,18,158,63,97,110,100,252,17,1,8,119,18,16,2,103,93, +16,2,158,10,8,119,9,8,121,8,28,59,58,57,56,55,13,16,4,33,2, +133,2,92,11,93,8,252,142,9,16,6,8,120,11,2,140,2,141,3,1,7, +101,110,118,51,55,51,57,252,18,1,2,252,18,1,95,9,8,252,142,9,2, +92,18,158,2,101,8,119,18,158,2,101,8,119,18,158,2,101,8,119,18,158, +2,0,8,119,18,158,93,16,2,158,2,51,8,119,9,8,119,18,158,2,101, +8,119,18,158,2,116,8,119,18,158,9,8,119,18,158,2,101,8,119,18,158, +2,101,8,119,18,158,2,101,8,119,11,16,5,93,2,86,253,22,60,248,247, +22,252,88,3,20,15,159,39,32,32,248,247,22,252,88,3,20,15,159,39,33, +32,248,247,22,252,88,3,20,15,159,39,34,32,248,22,60,248,247,22,252,88, +3,20,15,159,40,35,32,248,22,60,248,247,22,252,88,3,20,15,159,40,36, +32,10,40,20,98,158,16,0,16,5,18,158,2,35,8,89,18,158,2,37,8, +89,18,158,2,39,8,89,18,158,2,41,8,89,18,158,2,43,8,89,11,16, +5,94,2,55,2,56,27,89,162,32,33,34,62,119,104,252,19,1,223,1,89, +162,32,33,53,9,224,0,1,27,249,22,209,20,15,159,36,32,44,197,27,28, +248,80,158,36,32,194,249,80,158,37,33,248,80,158,38,34,196,27,248,80,158, +39,35,197,28,248,80,158,39,32,193,28,248,80,158,39,36,248,80,158,40,34, +194,27,248,80,158,40,35,194,28,248,80,158,40,32,193,249,80,158,41,33,248, +80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158,43,37,193,248,80, +158,43,38,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, +27,248,22,80,196,249,80,158,40,39,201,27,249,22,61,198,197,27,20,15,159, +42,33,44,250,22,209,20,15,159,45,34,44,250,22,209,20,15,159,48,35,44, +250,22,62,20,15,159,51,36,44,20,15,159,51,37,44,202,20,15,159,48,38, +44,195,27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197, +27,248,80,158,40,35,198,28,248,80,158,40,32,193,249,80,158,41,40,27,248, +80,158,43,34,196,28,248,80,158,43,37,193,248,22,8,89,162,32,33,39,9, +224,11,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158,35,41, +28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27,248,80, +158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158,41,34, +195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37,38,196, +28,248,22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248,80,158,43, +35,196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45,34,195,27, +248,80,158,46,35,196,28,248,80,158,46,37,193,248,80,158,46,38,193,11,11, +11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, +22,90,197,27,248,22,89,198,27,249,22,209,20,15,159,44,39,44,28,203,20, +15,159,44,40,44,20,15,159,44,41,44,249,80,158,44,39,205,27,252,22,61, +203,202,204,200,201,27,20,15,159,46,42,44,91,159,33,11,90,161,33,32,11, +83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,16,2,3,1, +250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252, +184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32, +32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80, +158,35,43,21,95,2,116,94,94,61,108,252,20,1,95,64,108,105,115,116,252, +21,1,95,64,99,111,110,115,252,22,1,64,112,114,101,100,252,23,1,67,104, +97,110,100,108,101,114,252,24,1,2,113,94,64,98,111,100,121,252,25,1,97, +2,230,9,2,234,2,235,2,113,95,2,116,93,94,63,98,112,122,252,26,1, +95,2,232,11,2,47,96,2,231,2,47,94,2,252,16,1,11,93,94,67,99, +97,108,108,47,101,99,252,27,1,95,2,230,93,2,99,96,2,231,2,47,2, +252,26,1,95,2,57,93,94,1,25,99,117,114,114,101,110,116,45,101,120,99, +101,112,116,105,111,110,45,104,97,110,100,108,101,114,252,28,1,95,2,230,93, +61,101,252,29,1,94,2,99,95,2,230,9,96,2,116,64,108,111,111,112,252, +30,1,93,94,2,252,20,1,2,252,20,1,96,2,132,94,94,65,110,117,108, +108,63,252,31,1,2,252,20,1,94,65,114,97,105,115,101,252,32,1,2,252, +29,1,94,94,94,64,99,97,97,114,252,33,1,2,252,20,1,2,252,29,1, +63,117,113,49,252,34,1,94,2,143,94,2,252,30,1,94,63,99,100,114,252, +35,1,2,252,20,1,95,76,99,97,108,108,45,119,105,116,104,45,118,97,108, +117,101,115,252,36,1,2,252,25,1,95,2,230,64,97,114,103,115,252,37,1, +95,2,230,9,95,65,97,112,112,108,121,252,38,1,66,118,97,108,117,101,115, +252,39,1,2,252,37,1,20,15,159,35,43,44,89,162,32,32,8,100,9,225, +6,5,4,27,250,22,209,20,15,159,38,44,44,250,22,209,20,15,159,41,45, +44,250,22,60,20,15,159,44,46,44,250,22,209,20,15,159,47,47,44,249,22, +60,250,22,209,20,15,159,52,48,44,249,22,60,20,15,159,54,49,44,250,22, +209,20,15,159,57,50,44,249,22,56,20,15,159,59,51,44,250,22,2,89,162, +33,33,41,9,223,30,250,22,209,20,15,159,35,52,44,250,22,60,20,15,159, +38,53,44,248,22,52,200,248,22,78,200,20,15,159,35,54,44,248,22,87,23, +29,248,22,52,23,29,20,15,159,57,55,44,20,15,159,52,56,44,250,22,209, +20,15,159,52,57,44,249,22,60,20,15,159,54,58,44,250,22,209,20,15,159, +57,59,44,251,22,62,20,15,159,8,29,8,28,44,20,15,159,8,29,8,29, +44,248,22,78,23,28,248,22,89,23,28,20,15,159,57,8,30,44,20,15,159, +52,8,31,44,20,15,159,47,8,32,44,250,22,209,20,15,159,47,8,33,44, +250,22,60,20,15,159,50,8,34,44,20,15,159,50,8,35,44,250,22,209,20, +15,159,53,8,36,44,251,22,60,20,15,159,57,8,37,44,20,15,159,57,8, +38,44,20,15,159,57,8,39,44,250,22,209,20,15,159,8,28,8,40,44,248, +22,60,250,22,209,20,15,159,8,32,8,41,44,249,22,60,20,15,159,8,34, +8,42,44,250,22,209,20,15,159,8,37,8,43,44,250,22,60,20,15,159,8, +40,8,44,44,20,15,159,8,40,8,45,44,250,22,209,20,15,159,8,43,8, +46,44,251,22,60,20,15,159,8,47,8,47,44,20,15,159,8,47,8,48,44, +20,15,159,8,47,8,49,44,250,22,209,20,15,159,8,50,8,50,44,250,22, +62,20,15,159,8,53,8,51,44,250,22,209,20,15,159,8,56,8,52,44,248, +22,60,250,22,209,20,15,159,8,60,8,53,44,249,22,60,20,15,159,8,62, +8,54,44,250,22,209,20,15,159,8,65,8,55,44,250,22,60,20,15,159,8, +68,8,56,44,20,15,159,8,68,8,57,44,250,22,209,20,15,159,8,71,8, +58,44,249,22,60,20,15,159,8,73,8,59,44,250,22,209,20,15,159,8,76, +8,60,44,250,22,60,20,15,159,8,79,8,61,44,20,15,159,8,79,8,62, +44,250,22,209,20,15,159,8,82,8,63,44,251,22,60,20,15,159,8,86,8, +64,44,20,15,159,8,86,8,65,44,20,15,159,8,86,8,66,44,250,22,209, +20,15,159,8,89,8,67,44,251,22,62,20,15,159,8,93,8,68,44,20,15, +159,8,93,8,69,44,250,22,209,20,15,159,8,96,8,70,44,249,22,60,20, +15,159,8,98,8,71,44,248,22,90,23,97,20,15,159,8,96,8,72,44,20, +15,159,8,93,8,73,44,20,15,159,8,89,8,74,44,20,15,159,8,82,8, +75,44,20,15,159,8,76,8,76,44,20,15,159,8,71,8,77,44,20,15,159, +8,65,8,78,44,20,15,159,8,60,8,79,44,20,15,159,8,56,8,80,44, +20,15,159,8,53,8,81,44,20,15,159,8,50,8,82,44,20,15,159,8,43, +8,83,44,20,15,159,8,37,8,84,44,20,15,159,8,32,8,85,44,20,15, +159,8,28,8,86,44,20,15,159,53,8,87,44,20,15,159,47,8,88,44,20, +15,159,41,8,89,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34, +9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,197,249,22,7,248,195,10,248,195,11,37,20,98,158, +16,12,2,65,2,68,2,70,2,72,2,76,2,78,2,80,2,122,2,74,2, +184,2,186,2,125,16,90,18,99,2,82,8,124,36,35,34,16,4,8,123,11, +74,100,105,115,97,98,108,101,45,98,114,101,97,107,63,252,40,1,3,1,7, +101,110,118,51,55,52,51,252,41,1,16,4,8,122,11,2,236,3,1,7,101, +110,118,51,55,52,52,252,42,1,18,16,2,95,2,91,8,125,93,8,252,173, +9,95,9,8,252,173,9,2,92,18,101,2,93,8,128,36,35,34,8,123,8, +122,16,8,8,127,11,3,1,4,103,52,56,54,252,43,1,3,1,4,103,52, +56,55,252,44,1,3,1,4,103,52,56,56,252,45,1,3,1,7,101,110,118, +51,55,53,49,252,46,1,2,252,46,1,2,252,46,1,16,8,8,126,11,2, +98,2,234,2,235,3,1,7,101,110,118,51,55,53,50,252,47,1,2,252,47, +1,2,252,47,1,18,158,2,101,8,128,18,158,2,116,8,128,18,158,9,8, +128,18,158,2,101,8,128,18,101,2,82,8,131,36,35,34,8,123,8,122,16, +12,8,130,11,3,1,4,103,52,56,49,252,48,1,3,1,4,103,52,56,50, +252,49,1,3,1,4,103,52,56,51,252,50,1,3,1,4,103,52,56,52,252, +51,1,3,1,4,103,52,56,53,252,52,1,3,1,7,101,110,118,51,55,54, +56,252,53,1,2,252,53,1,2,252,53,1,2,252,53,1,2,252,53,1,16, +12,8,129,11,2,98,2,252,23,1,2,252,24,1,2,234,2,235,3,1,7, +101,110,118,51,55,54,57,252,54,1,2,252,54,1,2,252,54,1,2,252,54, +1,2,252,54,1,18,158,95,16,2,158,66,98,101,103,105,110,48,252,55,1, +8,131,9,16,2,158,94,16,2,158,94,16,2,158,64,99,100,97,114,252,56, +1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2,158,2, +252,29,1,8,131,9,8,131,9,16,2,158,96,16,2,158,2,231,8,131,9, +16,2,158,2,47,8,131,9,16,2,158,2,252,26,1,8,131,9,16,2,158, +93,16,2,158,2,51,8,131,9,8,131,9,8,131,9,8,131,18,158,96,16, +2,158,2,231,8,131,9,16,2,158,2,47,8,131,9,16,2,158,2,252,26, +1,8,131,9,16,2,158,95,16,2,158,2,0,8,131,9,16,2,158,93,16, +2,158,2,51,8,131,9,8,131,9,16,2,158,94,16,2,158,94,16,2,158, +2,252,56,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16, +2,158,2,252,29,1,8,131,9,8,131,9,8,131,9,8,131,18,16,2,95, +2,91,8,132,93,8,252,182,9,95,9,8,252,182,9,2,92,18,16,2,99, +2,113,8,137,93,8,252,182,9,16,6,8,136,11,2,140,2,141,3,1,7, +101,110,118,51,55,56,55,252,57,1,2,252,57,1,16,4,8,135,11,2,151, +3,1,7,101,110,118,51,55,56,56,252,58,1,16,4,8,134,11,2,153,3, +1,7,101,110,118,51,55,56,57,252,59,1,16,4,8,133,11,2,155,3,1, +7,101,110,118,51,55,57,49,252,60,1,95,9,8,252,182,9,2,92,18,158, +2,93,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18,158,2,101,8, +131,18,158,2,101,8,131,18,158,2,252,20,1,8,131,18,158,2,101,8,131, +18,158,2,252,21,1,8,131,18,158,2,101,8,131,18,158,2,252,22,1,8, +131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158, +2,101,8,131,18,158,2,252,25,1,8,131,18,158,2,101,8,131,18,158,2, +230,8,131,18,158,9,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18, +158,2,101,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18,158,93,16, +2,158,94,16,2,158,2,252,26,1,8,131,9,16,2,158,95,16,2,158,2, +232,8,131,9,16,2,158,11,8,131,9,16,2,158,2,47,8,131,9,8,131, +9,8,131,9,8,131,18,158,2,101,8,131,18,158,2,231,8,131,18,158,2, +47,8,131,18,158,94,16,2,158,2,252,16,1,8,131,9,16,2,158,11,8, +131,9,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252,27, +1,8,131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,93,16,2,158, +2,99,8,131,9,8,131,18,158,2,101,8,131,18,158,2,231,8,131,18,158, +2,47,8,131,18,158,2,252,26,1,8,131,18,158,2,101,8,131,18,158,2, +57,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252,28,1, +8,131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,93,16,2,158,2, +252,29,1,8,131,9,8,131,18,158,2,101,8,131,18,158,2,99,8,131,18, +158,2,101,8,131,18,158,2,230,8,131,18,158,9,8,131,18,158,2,101,8, +131,18,158,2,116,8,131,18,158,2,252,30,1,8,131,18,158,93,16,2,158, +94,16,2,158,2,252,20,1,8,131,9,16,2,158,2,252,20,1,8,131,9, +8,131,9,8,131,18,158,2,101,8,131,18,158,2,132,8,131,18,158,94,16, +2,158,94,16,2,158,2,252,31,1,8,131,9,16,2,158,2,252,20,1,8, +131,9,8,131,9,16,2,158,94,16,2,158,2,252,32,1,8,131,9,16,2, +158,2,252,29,1,8,131,9,8,131,9,8,131,18,158,2,101,8,131,18,158, +94,16,2,158,94,16,2,158,2,252,33,1,8,131,9,16,2,158,2,252,20, +1,8,131,9,8,131,9,16,2,158,2,252,29,1,8,131,9,8,131,18,158, +2,101,8,131,18,16,2,105,93,16,2,158,94,16,2,158,2,143,8,131,9, +16,2,158,94,16,2,158,2,252,30,1,8,131,9,16,2,158,94,16,2,158, +2,252,35,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,8, +131,9,8,131,9,8,141,8,28,59,58,57,56,55,13,16,4,33,2,133,2, +92,11,93,8,252,182,9,16,6,8,140,11,2,140,2,141,2,252,57,1,2, +252,57,1,16,4,8,139,11,2,151,2,252,58,1,16,4,8,138,11,2,153, +2,252,59,1,95,9,8,252,182,9,2,92,18,158,2,101,8,131,18,158,2, +101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131, +18,158,2,101,8,131,18,158,2,101,8,131,18,16,2,158,93,16,2,158,95, +16,2,158,2,252,36,1,8,131,9,16,2,158,2,252,25,1,8,131,9,16, +2,158,95,16,2,158,2,230,8,131,9,16,2,158,2,252,37,1,8,131,9, +16,2,158,95,16,2,158,2,230,8,131,9,16,2,158,9,8,131,9,16,2, +158,95,16,2,158,2,252,38,1,8,131,9,16,2,158,2,252,39,1,8,131, +9,16,2,158,2,252,37,1,8,131,9,8,131,9,8,131,9,8,131,9,8, +131,9,8,141,95,9,8,252,182,9,2,92,18,158,2,101,8,131,18,158,2, +101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131, +18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,11,16,5, +93,2,63,89,162,32,33,57,9,223,0,27,249,22,209,20,15,159,35,32,46, +196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27, +248,80,158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80, +158,39,34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158, +40,37,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11, +11,11,28,192,27,248,22,52,194,27,248,22,53,195,27,20,15,159,37,33,46, +250,22,209,20,15,159,40,34,46,250,22,209,20,15,159,43,35,46,250,22,62, +20,15,159,46,36,46,250,22,209,20,15,159,49,37,46,248,22,60,250,22,209, +20,15,159,53,38,46,249,22,60,20,15,159,55,39,46,23,19,20,15,159,53, +40,46,20,15,159,49,41,46,20,15,159,46,42,46,20,15,159,43,43,46,195, +27,89,162,32,32,51,2,119,225,3,4,2,27,89,162,32,32,36,2,119,223, +1,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,195, +27,28,248,80,158,37,32,195,249,80,158,38,33,248,80,158,39,34,197,27,248, +80,158,40,35,198,28,248,80,158,40,32,193,249,80,158,41,37,27,248,80,158, +43,34,196,28,248,80,158,43,38,193,248,22,59,248,80,158,44,39,194,11,27, +248,80,158,43,35,196,28,248,80,158,43,32,193,249,80,158,44,37,248,80,158, +45,34,195,248,80,158,45,36,248,80,158,46,35,196,11,11,11,28,192,27,248, +22,52,194,27,248,22,78,195,27,248,22,80,196,28,27,248,80,158,41,39,27, +20,15,159,42,44,46,250,22,209,20,15,159,45,45,46,199,195,87,94,249,22, +3,89,162,32,33,39,9,224,10,9,28,248,80,158,34,40,195,12,251,22,252, +39,2,11,6,17,17,110,111,116,32,97,110,32,105,100,101,110,116,105,102,105, +101,114,196,198,194,27,248,80,158,42,41,194,28,192,251,22,252,39,2,11,6, +20,20,100,117,112,108,105,99,97,116,101,32,105,100,101,110,116,105,102,105,101, +114,204,196,12,27,249,22,209,20,15,159,42,46,46,248,80,158,43,42,27,20, +15,159,44,47,46,250,22,209,20,15,159,47,48,46,201,195,27,28,248,80,158, +42,38,194,248,80,158,42,39,194,11,28,192,249,80,158,43,43,202,27,250,22, +61,200,198,201,27,20,15,159,45,49,46,91,159,33,11,90,161,33,32,11,83, +160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226,15,2,3,1,250, +22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184, +2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32, +36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158, +35,44,21,96,70,108,101,116,45,118,97,108,117,101,115,252,61,1,93,94,94, +64,116,101,109,112,252,62,1,2,113,2,235,95,64,115,101,116,33,252,63,1, +62,105,100,252,64,1,2,252,62,1,2,113,20,15,159,35,50,46,89,162,32, +32,56,9,225,6,5,4,27,250,22,209,20,15,159,38,51,46,250,22,209,20, +15,159,41,52,46,250,22,62,20,15,159,44,53,46,250,22,209,20,15,159,47, +54,46,248,22,60,250,22,209,20,15,159,51,55,46,249,22,60,248,22,78,23, +20,248,22,52,23,20,20,15,159,51,56,46,20,15,159,47,57,46,250,22,2, +89,162,33,33,41,9,223,15,250,22,209,20,15,159,35,58,46,250,22,60,20, +15,159,38,59,46,248,22,52,200,248,22,78,200,20,15,159,35,8,28,46,248, +22,80,206,248,22,78,206,20,15,159,41,8,29,46,197,89,162,32,32,33,9, +223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158,42, +45,20,15,159,42,8,30,46,247,196,247,193,27,28,248,80,158,37,32,196,249, +80,158,38,33,248,80,158,39,34,198,27,248,80,158,40,35,199,28,248,80,158, +40,32,193,249,80,158,41,37,27,248,80,158,43,34,196,28,248,80,158,43,32, +193,249,80,158,44,33,248,80,158,45,34,195,248,80,158,45,36,248,80,158,46, +35,196,11,27,248,80,158,43,35,196,28,248,80,158,43,32,193,249,80,158,44, +37,248,80,158,45,34,195,248,80,158,45,36,248,80,158,46,35,196,11,11,11, +28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196,28,248,80,158, +40,40,194,27,249,22,61,195,196,27,20,15,159,41,8,31,46,250,22,209,20, +15,159,44,8,32,46,250,22,209,20,15,159,47,8,33,46,250,22,60,20,15, +159,50,8,34,46,248,22,53,203,248,22,52,203,20,15,159,47,8,35,46,195, +247,196,247,193,32,20,98,158,16,14,2,65,2,68,2,70,2,72,2,76,2, +74,2,78,2,80,2,120,30,252,65,1,2,88,1,26,99,104,101,99,107,45, +100,117,112,108,105,99,97,116,101,45,105,100,101,110,116,105,102,105,101,114,252, +66,1,0,30,252,67,1,2,189,1,20,103,101,110,101,114,97,116,101,45,116, +101,109,112,111,114,97,114,105,101,115,252,68,1,0,2,122,2,125,2,188,16, +36,18,98,2,82,8,143,36,35,34,16,4,8,142,11,2,236,3,1,7,101, +110,118,51,56,48,48,252,69,1,18,16,2,95,2,91,8,144,93,8,252,204, +9,95,9,8,252,204,9,2,92,18,100,2,93,8,147,36,35,34,8,142,16, +6,8,146,11,3,1,4,103,52,57,56,252,70,1,3,1,4,103,52,57,57, +252,71,1,3,1,7,101,110,118,51,56,48,54,252,72,1,2,252,72,1,16, +6,8,145,11,2,98,2,235,3,1,7,101,110,118,51,56,48,55,252,73,1, +2,252,73,1,18,158,2,101,8,147,18,158,2,252,61,1,8,147,18,158,2, +101,8,147,18,158,2,101,8,147,18,158,9,8,147,18,158,2,101,8,147,18, +158,2,101,8,147,18,16,2,103,93,16,2,158,93,16,2,158,64,118,111,105, +100,252,74,1,8,147,9,8,147,9,8,149,8,28,59,58,57,56,55,13,16, +4,33,2,133,2,92,11,93,8,252,204,9,16,6,8,148,11,2,140,2,141, +3,1,7,101,110,118,51,56,49,49,252,75,1,2,252,75,1,95,9,8,252, +204,9,2,92,18,158,2,101,8,147,18,16,2,95,2,91,8,150,93,8,252, +205,9,95,9,8,252,205,9,2,92,18,100,2,93,8,153,36,35,34,8,142, +16,8,8,152,11,3,1,4,103,52,57,50,252,76,1,3,1,4,103,52,57, +51,252,77,1,3,1,4,103,52,57,52,252,78,1,3,1,7,101,110,118,51, +56,50,49,252,79,1,2,252,79,1,2,252,79,1,16,8,8,151,11,2,98, +2,252,64,1,2,235,3,1,7,101,110,118,51,56,50,50,252,80,1,2,252, +80,1,2,252,80,1,18,158,2,82,8,153,18,16,2,95,2,91,8,154,93, +8,252,209,9,95,9,8,252,209,9,2,92,18,158,2,93,8,153,18,16,2, +95,2,91,8,155,93,8,252,212,9,95,9,8,252,212,9,2,92,18,16,2, +99,2,113,8,160,93,8,252,212,9,16,6,8,159,11,2,140,2,141,3,1, +7,101,110,118,51,56,51,57,252,81,1,2,252,81,1,16,4,8,158,11,2, +151,3,1,7,101,110,118,51,56,52,48,252,82,1,16,4,8,157,11,2,153, +3,1,7,101,110,118,51,56,52,49,252,83,1,16,4,8,156,11,2,155,3, +1,7,101,110,118,51,56,52,51,252,84,1,95,9,8,252,212,9,2,92,18, +102,2,93,8,165,36,35,34,8,142,16,8,8,164,11,2,252,76,1,2,252, +77,1,2,252,78,1,2,252,79,1,2,252,79,1,2,252,79,1,16,8,8, +163,11,2,98,2,252,64,1,2,235,2,252,80,1,2,252,80,1,2,252,80, +1,16,4,8,162,11,3,1,4,103,53,48,50,252,85,1,3,1,7,101,110, +118,51,56,51,53,252,86,1,16,4,8,161,11,2,252,62,1,3,1,7,101, +110,118,51,56,51,54,252,87,1,18,158,2,101,8,165,18,158,2,252,61,1, +8,165,18,158,2,101,8,165,18,158,2,101,8,165,18,158,2,101,8,165,18, +158,2,101,8,165,18,158,2,101,8,165,18,158,2,252,63,1,8,165,18,158, +2,101,8,165,18,158,2,101,8,165,18,16,2,158,94,16,2,98,2,252,62, +1,8,169,93,8,252,208,9,16,4,8,168,11,3,1,8,119,115,116,109,112, +53,48,48,252,88,1,3,1,7,101,110,118,51,56,51,48,252,89,1,16,4, +8,167,11,3,1,4,103,53,48,49,252,90,1,3,1,7,101,110,118,51,56, +53,50,252,91,1,16,4,8,166,11,2,222,3,1,7,101,110,118,51,56,53, +51,252,92,1,9,16,2,158,2,113,8,169,9,8,169,95,9,8,252,208,9, +2,189,18,16,2,95,2,91,8,170,93,8,252,215,9,95,9,8,252,215,9, +2,92,18,100,2,93,8,173,36,35,34,8,142,16,8,8,172,11,3,1,4, +103,52,57,53,252,93,1,3,1,4,103,52,57,54,252,94,1,3,1,4,103, +52,57,55,252,95,1,3,1,7,101,110,118,51,56,54,48,252,96,1,2,252, +96,1,2,252,96,1,16,8,8,171,11,2,98,2,252,64,1,2,235,3,1, +7,101,110,118,51,56,54,49,252,97,1,2,252,97,1,2,252,97,1,18,158, +2,101,8,173,18,158,2,252,63,1,8,173,18,158,2,101,8,173,11,16,5, +93,2,59,89,162,32,33,8,32,9,223,0,27,249,22,209,20,15,159,35,32, +39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196, +27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,33,248,80, +158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193,249,80,158, +42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28,248,80,158,44,36, +193,248,80,158,44,37,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22, +78,195,27,248,22,87,196,27,248,22,88,197,249,80,158,40,38,201,27,250,22, +61,199,200,198,27,20,15,159,42,33,39,250,22,209,20,15,159,45,34,39,250, +22,209,20,15,159,48,35,39,249,22,60,20,15,159,50,36,39,250,22,209,20, +15,159,53,37,39,251,22,62,20,15,159,57,38,39,250,22,209,20,15,159,8, +28,39,39,248,22,60,248,22,78,23,21,20,15,159,8,28,40,39,248,22,52, +23,17,248,22,80,23,17,20,15,159,53,41,39,20,15,159,48,42,39,195,250, +22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20, +98,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122,16,11,18, +98,2,82,8,175,36,35,34,16,4,8,174,11,2,236,3,1,7,101,110,118, +51,56,54,55,252,98,1,18,16,2,95,2,91,8,176,93,8,252,225,9,95, +9,8,252,225,9,2,92,18,100,2,93,8,179,36,35,34,8,174,16,10,8, +178,11,3,1,4,103,53,48,51,252,99,1,3,1,4,103,53,48,52,252,100, +1,3,1,4,103,53,48,53,252,101,1,3,1,4,103,53,48,54,252,102,1, +3,1,7,101,110,118,51,56,55,52,252,103,1,2,252,103,1,2,252,103,1, +2,252,103,1,16,10,8,177,11,2,98,2,178,65,98,111,100,121,49,252,104, +1,2,252,25,1,3,1,7,101,110,118,51,56,55,53,252,105,1,2,252,105, +1,2,252,105,1,2,252,105,1,18,158,2,101,8,179,18,158,67,99,97,108, +108,47,99,99,252,106,1,8,179,18,158,2,101,8,179,18,158,2,230,8,179, +18,158,2,101,8,179,18,158,2,101,8,179,18,158,2,101,8,179,18,158,2, +101,8,179,11,16,5,93,2,53,89,162,32,33,55,9,223,0,27,249,22,209, +20,15,159,35,32,41,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248, +80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80, +158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41, +32,193,249,80,158,42,36,27,248,80,158,44,34,196,28,248,80,158,44,37,193, +248,22,59,248,80,158,45,38,194,11,27,248,80,158,44,35,196,28,248,80,158, +44,32,193,249,80,158,45,33,248,80,158,46,34,195,27,248,80,158,47,35,196, +28,248,80,158,47,37,193,248,80,158,47,38,193,11,11,11,11,11,28,192,27, +248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248, +22,89,198,249,80,158,41,39,202,27,251,22,61,199,201,200,202,27,20,15,159, +43,33,41,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22, +8,89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32,36,9, +225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162, +32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22, +252,181,2,193,248,22,252,186,2,193,249,80,158,35,40,21,98,2,116,9,95, +73,100,101,102,105,110,101,45,115,116,114,117,99,116,252,107,1,64,98,97,115, +101,252,108,1,94,65,102,105,101,108,100,252,109,1,2,113,2,252,104,1,2, +252,25,1,2,113,20,15,159,35,34,41,89,162,32,32,54,9,225,6,5,4, +27,250,22,209,20,15,159,38,35,41,250,22,209,20,15,159,41,36,41,252,22, +62,20,15,159,46,37,41,20,15,159,46,38,41,250,22,209,20,15,159,49,39, +41,250,22,60,20,15,159,52,40,41,248,22,88,23,19,248,22,78,23,19,20, +15,159,49,41,41,248,22,87,205,248,22,52,205,20,15,159,41,42,41,197,89, +162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2, +208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196, +32,20,98,158,16,9,2,65,2,68,2,70,2,72,2,74,2,78,2,80,2, +122,2,125,16,11,18,98,2,82,8,181,36,35,34,16,4,8,180,11,2,236, +3,1,7,101,110,118,51,56,56,51,252,110,1,18,16,2,95,2,91,8,182, +93,8,252,238,9,95,9,8,252,238,9,2,92,18,16,2,99,2,113,8,187, +93,8,252,238,9,16,6,8,186,11,2,140,2,141,3,1,7,101,110,118,51, +57,48,48,252,111,1,2,252,111,1,16,4,8,185,11,2,151,3,1,7,101, +110,118,51,57,48,49,252,112,1,16,4,8,184,11,2,153,3,1,7,101,110, +118,51,57,48,50,252,113,1,16,4,8,183,11,2,155,3,1,7,101,110,118, +51,57,48,52,252,114,1,95,9,8,252,238,9,2,92,18,100,2,93,8,190, +36,35,34,8,180,16,12,8,189,11,3,1,4,103,53,48,55,252,115,1,3, +1,4,103,53,48,56,252,116,1,3,1,4,103,53,48,57,252,117,1,3,1, +4,103,53,49,48,252,118,1,3,1,4,103,53,49,49,252,119,1,3,1,7, +101,110,118,51,56,57,50,252,120,1,2,252,120,1,2,252,120,1,2,252,120, +1,2,252,120,1,16,12,8,188,11,2,98,2,252,108,1,2,252,109,1,2, +252,104,1,2,252,25,1,3,1,7,101,110,118,51,56,57,51,252,121,1,2, +252,121,1,2,252,121,1,2,252,121,1,2,252,121,1,18,158,2,101,8,190, +18,158,2,116,8,190,18,158,9,8,190,18,158,2,101,8,190,18,158,2,252, +107,1,8,190,18,158,2,101,8,190,18,158,2,101,8,190,11,16,5,93,2, +54,89,162,32,33,54,9,223,0,27,249,22,209,20,15,159,35,32,46,196,27, 28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248,80, 158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80,158,39, 34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158,40,33, 248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80,158,42,37,193,248, 80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78, -195,27,248,22,80,196,27,249,22,61,195,196,27,20,15,159,39,33,45,250,22, -209,20,15,159,42,34,45,250,22,209,20,15,159,45,35,45,251,22,62,20,15, -159,49,36,45,20,15,159,49,37,45,248,22,53,204,248,22,52,204,20,15,159, -45,38,45,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158,38, -34,197,27,248,80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40,39, -27,248,80,158,42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32,33, -39,9,224,10,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80,158, -35,40,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199,27, -248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80,158, -41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158,37, -38,196,28,248,22,57,193,21,94,9,9,248,80,158,35,41,193,11,27,248,80, -158,42,35,196,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44,34, -195,27,248,80,158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38,193, -11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196, -27,248,22,90,197,27,248,22,89,198,27,249,22,209,20,15,159,43,39,45,249, -22,1,22,65,250,22,2,22,59,248,22,216,27,20,15,159,50,40,45,250,22, -209,20,15,159,53,41,45,23,16,195,248,22,216,27,20,15,159,50,42,45,250, -22,209,20,15,159,53,43,45,23,15,195,27,28,248,80,158,43,37,194,248,80, -158,43,38,194,11,28,192,249,80,158,44,42,205,27,250,22,61,198,201,200,27, -20,15,159,46,44,45,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11, -247,248,22,8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162,32, -32,36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184, -2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3, -28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,96,1, -22,119,105,116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97, -114,107,231,2,21,96,2,19,95,1,27,99,111,110,116,105,110,117,97,116,105, -111,110,45,109,97,114,107,45,115,101,116,45,102,105,114,115,116,232,11,2,21, -63,112,47,118,233,2,113,97,2,116,9,65,101,120,112,114,49,234,64,101,120, -112,114,235,2,113,20,15,159,35,45,45,89,162,32,32,54,9,225,6,5,4, -27,250,22,209,20,15,159,38,46,45,250,22,209,20,15,159,41,47,45,251,22, -60,20,15,159,45,48,45,20,15,159,45,49,45,250,22,209,20,15,159,48,50, -45,250,22,62,20,15,159,51,51,45,20,15,159,51,52,45,248,22,52,23,18, -20,15,159,48,53,45,250,22,209,20,15,159,48,54,45,251,22,62,20,15,159, -52,55,45,20,15,159,52,56,45,248,22,78,23,19,248,22,80,23,19,20,15, -159,48,57,45,20,15,159,41,58,45,197,89,162,32,32,33,9,223,0,192,89, -162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158,43,44,20,15,159, -43,59,45,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,197,32,20,98,158,16,13,2,65,2,68,2,70,2,72,2,76,2,78,2, -80,2,74,2,184,2,186,2,122,2,125,2,188,16,28,18,98,2,82,8,91, -36,35,34,16,4,8,90,11,63,115,116,120,236,3,1,7,101,110,118,51,54, -54,52,237,18,16,2,95,2,91,8,92,93,8,252,121,9,95,9,8,252,121, -9,2,92,18,100,2,93,8,95,36,35,34,8,90,16,8,8,94,11,3,1, -4,103,52,55,49,238,3,1,4,103,52,55,50,239,3,1,4,103,52,55,51, -240,3,1,7,101,110,118,51,54,55,49,241,2,241,2,241,16,8,8,93,11, -2,98,2,234,2,235,3,1,7,101,110,118,51,54,55,50,242,2,242,2,242, -18,158,2,101,8,95,18,158,2,116,8,95,18,158,9,8,95,18,158,2,101, -8,95,18,100,2,82,8,98,36,35,34,8,90,16,12,8,97,11,3,1,4, -103,52,54,54,243,3,1,4,103,52,54,55,244,3,1,4,103,52,54,56,245, -3,1,4,103,52,54,57,246,3,1,4,103,52,55,48,247,3,1,7,101,110, -118,51,54,56,56,248,2,248,2,248,2,248,2,248,16,12,8,96,11,2,98, -65,112,97,114,97,109,249,63,118,97,108,250,2,234,2,235,3,1,7,101,110, -118,51,54,56,57,251,2,251,2,251,2,251,2,251,18,16,2,95,2,91,8, -99,93,8,252,124,9,95,9,8,252,124,9,2,92,18,158,2,93,8,98,18, -16,2,95,2,91,8,100,93,8,252,125,9,95,9,8,252,125,9,2,92,18, -158,2,93,8,98,18,16,2,95,2,91,8,101,93,8,252,128,9,95,9,8, -252,128,9,2,92,18,16,2,99,2,113,8,106,93,8,252,128,9,16,6,8, -105,11,2,140,2,141,3,1,7,101,110,118,51,55,48,54,252,252,0,2,252, -252,0,16,4,8,104,11,2,151,3,1,7,101,110,118,51,55,48,55,252,253, -0,16,4,8,103,11,2,153,3,1,7,101,110,118,51,55,48,56,252,254,0, -16,4,8,102,11,2,155,3,1,7,101,110,118,51,55,49,48,252,255,0,95, -9,8,252,128,9,2,92,18,102,2,93,8,109,36,35,34,8,90,8,97,8, -96,16,4,8,108,11,3,1,4,103,52,55,54,252,0,1,3,1,7,101,110, -118,51,55,48,50,252,1,1,16,4,8,107,11,2,233,3,1,7,101,110,118, -51,55,48,51,252,2,1,18,158,2,101,8,109,18,158,2,231,8,109,18,158, -2,21,8,109,18,158,2,101,8,109,18,158,2,19,8,109,18,158,95,16,2, -158,2,232,8,109,9,16,2,158,11,8,109,9,16,2,158,2,21,8,109,9, -8,109,18,158,2,101,8,109,18,158,2,101,8,109,18,158,2,116,8,109,18, -158,9,8,109,18,158,2,101,8,109,18,158,2,101,8,109,18,16,2,158,94, -16,2,98,2,233,8,113,93,8,252,123,9,16,4,8,112,11,3,1,8,119, -115,116,109,112,52,55,52,252,3,1,3,1,7,101,110,118,51,54,57,54,252, -4,1,16,4,8,111,11,3,1,4,103,52,55,53,252,5,1,3,1,7,101, -110,118,51,55,49,55,252,6,1,16,4,8,110,11,2,222,3,1,7,101,110, -118,51,55,49,56,252,7,1,9,16,2,158,2,113,8,113,9,8,113,95,9, -8,252,123,9,2,189,11,16,5,93,2,59,89,162,32,33,8,36,9,223,0, -27,249,22,209,20,15,159,35,32,39,196,27,28,248,80,158,35,32,194,249,80, -158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38, -32,193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28, -248,80,158,41,32,193,249,80,158,42,33,248,80,158,43,34,195,27,248,80,158, -44,35,196,28,248,80,158,44,36,193,248,80,158,44,37,193,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,88,197, -249,80,158,40,38,201,27,250,22,61,200,199,198,27,20,15,159,42,33,39,250, -22,209,20,15,159,45,34,39,250,22,209,20,15,159,48,35,39,251,22,60,20, -15,159,52,36,39,20,15,159,52,37,39,250,22,209,20,15,159,55,38,39,249, -22,60,20,15,159,57,39,39,250,22,209,20,15,159,8,28,40,39,250,22,62, -20,15,159,8,31,41,39,248,22,52,23,23,20,15,159,8,31,42,39,20,15, -159,8,28,43,39,20,15,159,55,44,39,250,22,209,20,15,159,55,45,39,250, -22,60,20,15,159,58,46,39,20,15,159,58,47,39,250,22,209,20,15,159,8, -29,48,39,251,22,62,20,15,159,8,33,49,39,20,15,159,8,33,50,39,248, -22,78,23,25,248,22,80,23,25,20,15,159,8,29,51,39,20,15,159,55,52, -39,20,15,159,48,53,39,195,250,22,252,39,2,11,6,10,10,98,97,100,32, -115,121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2,70,2,72, -2,78,2,80,2,122,16,22,18,98,2,82,8,115,36,35,34,16,4,8,114, -11,2,236,3,1,7,101,110,118,51,55,50,49,252,8,1,18,16,2,95,2, -91,8,116,93,8,252,141,9,95,9,8,252,141,9,2,92,18,100,2,93,8, -119,36,35,34,8,114,16,10,8,118,11,3,1,4,103,52,55,55,252,9,1, -3,1,4,103,52,55,56,252,10,1,3,1,4,103,52,55,57,252,11,1,3, -1,4,103,52,56,48,252,12,1,3,1,7,101,110,118,51,55,50,56,252,13, -1,2,252,13,1,2,252,13,1,2,252,13,1,16,10,8,117,11,2,98,69, -98,111,111,108,45,101,120,112,114,252,14,1,2,234,2,235,3,1,7,101,110, -118,51,55,50,57,252,15,1,2,252,15,1,2,252,15,1,2,252,15,1,18, -158,2,101,8,119,18,158,2,231,8,119,18,158,2,47,8,119,18,158,2,101, -8,119,18,158,76,109,97,107,101,45,116,104,114,101,97,100,45,99,101,108,108, -252,16,1,8,119,18,158,2,101,8,119,18,158,63,97,110,100,252,17,1,8, -119,18,16,2,103,93,16,2,158,10,8,119,9,8,121,8,28,59,58,57,56, -55,13,16,3,33,2,134,2,92,93,8,252,141,9,16,6,8,120,11,2,140, -2,141,3,1,7,101,110,118,51,55,51,53,252,18,1,2,252,18,1,95,9, -8,252,141,9,2,92,18,158,2,101,8,119,18,158,2,101,8,119,18,158,2, -101,8,119,18,158,2,0,8,119,18,158,93,16,2,158,2,51,8,119,9,8, -119,18,158,2,101,8,119,18,158,2,116,8,119,18,158,9,8,119,18,158,2, -101,8,119,18,158,2,101,8,119,18,158,2,101,8,119,11,16,5,93,2,85, -253,22,60,248,247,22,252,88,3,20,15,159,39,32,32,248,247,22,252,88,3, -20,15,159,39,33,32,248,247,22,252,88,3,20,15,159,39,34,32,248,22,60, -248,247,22,252,88,3,20,15,159,40,35,32,248,22,60,248,247,22,252,88,3, -20,15,159,40,36,32,10,40,20,98,158,16,0,16,5,18,158,2,35,8,89, -18,158,2,37,8,89,18,158,2,39,8,89,18,158,2,41,8,89,18,158,2, -43,8,89,11,16,5,94,2,62,2,55,27,89,162,32,33,34,62,119,104,252, -19,1,223,1,89,162,32,33,55,9,224,0,1,27,249,22,209,20,15,159,36, -32,44,197,27,28,248,80,158,36,32,194,249,80,158,37,33,248,80,158,38,34, -196,27,248,80,158,39,35,197,28,248,80,158,39,32,193,28,248,80,158,39,36, -248,80,158,40,34,194,27,248,80,158,40,35,194,28,248,80,158,40,32,193,249, -80,158,41,33,248,80,158,42,34,195,27,248,80,158,43,35,196,28,248,80,158, -43,37,193,248,80,158,43,38,193,11,11,11,11,11,28,192,27,248,22,52,194, -27,248,22,78,195,27,248,22,80,196,249,80,158,40,39,201,27,249,22,61,197, -198,27,20,15,159,42,33,44,250,22,209,20,15,159,45,34,44,250,22,209,20, -15,159,48,35,44,251,22,62,20,15,159,52,36,44,20,15,159,52,37,44,248, -22,53,204,248,22,52,204,20,15,159,48,38,44,195,27,28,248,80,158,37,32, -195,249,80,158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248, -80,158,40,32,193,249,80,158,41,40,27,248,80,158,43,34,196,28,248,80,158, -43,37,193,248,22,8,89,162,32,33,39,9,224,11,1,27,249,22,2,89,162, -32,33,45,9,224,4,5,249,80,158,35,41,28,248,80,158,36,32,197,249,80, -158,37,33,248,80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39, -32,193,249,80,158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158, -42,35,196,11,11,194,248,80,158,37,38,196,28,248,22,57,193,21,94,9,9, -248,80,158,35,42,193,11,27,248,80,158,43,35,196,28,248,80,158,43,32,193, -249,80,158,44,33,248,80,158,45,34,195,27,248,80,158,46,35,196,28,248,80, -158,46,37,193,248,80,158,46,38,193,11,11,11,11,28,192,27,248,22,52,194, -27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27, -249,22,209,20,15,159,44,39,44,28,203,20,15,159,44,40,44,20,15,159,44, -41,44,249,80,158,44,39,205,27,252,22,61,200,202,201,204,203,27,20,15,159, -46,42,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22, -8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9, -225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162, -32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22, -252,181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,95,2,116,94,94, -61,108,252,20,1,95,64,108,105,115,116,252,21,1,95,64,99,111,110,115,252, -22,1,64,112,114,101,100,252,23,1,67,104,97,110,100,108,101,114,252,24,1, -2,113,94,64,98,111,100,121,252,25,1,97,2,230,9,2,234,2,235,2,113, -95,2,116,93,94,63,98,112,122,252,26,1,95,2,232,11,2,47,96,2,231, -2,47,94,2,252,16,1,11,93,94,67,99,97,108,108,47,101,99,252,27,1, -95,2,230,93,2,99,96,2,231,2,47,2,252,26,1,95,2,56,93,94,1, -25,99,117,114,114,101,110,116,45,101,120,99,101,112,116,105,111,110,45,104,97, -110,100,108,101,114,252,28,1,95,2,230,93,61,101,252,29,1,94,2,99,95, -2,230,9,96,2,116,64,108,111,111,112,252,30,1,93,94,2,252,20,1,2, -252,20,1,96,2,132,94,94,65,110,117,108,108,63,252,31,1,2,252,20,1, -94,65,114,97,105,115,101,252,32,1,2,252,29,1,94,94,94,64,99,97,97, -114,252,33,1,2,252,20,1,2,252,29,1,63,117,113,49,252,34,1,94,2, -143,94,2,252,30,1,94,63,99,100,114,252,35,1,2,252,20,1,95,76,99, -97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252,36,1,2,252,25, -1,95,2,230,64,97,114,103,115,252,37,1,95,2,230,9,95,65,97,112,112, -108,121,252,38,1,66,118,97,108,117,101,115,252,39,1,2,252,37,1,20,15, -159,35,43,44,89,162,32,32,8,100,9,225,6,5,4,27,250,22,209,20,15, -159,38,44,44,250,22,209,20,15,159,41,45,44,250,22,60,20,15,159,44,46, -44,250,22,209,20,15,159,47,47,44,249,22,60,250,22,209,20,15,159,52,48, -44,249,22,60,20,15,159,54,49,44,250,22,209,20,15,159,57,50,44,249,22, -56,20,15,159,59,51,44,250,22,2,89,162,33,33,41,9,223,30,250,22,209, -20,15,159,35,52,44,250,22,60,20,15,159,38,53,44,248,22,52,200,248,22, -78,200,20,15,159,35,54,44,248,22,90,23,29,248,22,89,23,29,20,15,159, -57,55,44,20,15,159,52,56,44,250,22,209,20,15,159,52,57,44,249,22,60, -20,15,159,54,58,44,250,22,209,20,15,159,57,59,44,251,22,62,20,15,159, -8,29,8,28,44,20,15,159,8,29,8,29,44,248,22,78,23,28,248,22,87, -23,28,20,15,159,57,8,30,44,20,15,159,52,8,31,44,20,15,159,47,8, -32,44,250,22,209,20,15,159,47,8,33,44,250,22,60,20,15,159,50,8,34, -44,20,15,159,50,8,35,44,250,22,209,20,15,159,53,8,36,44,251,22,60, -20,15,159,57,8,37,44,20,15,159,57,8,38,44,20,15,159,57,8,39,44, -250,22,209,20,15,159,8,28,8,40,44,248,22,60,250,22,209,20,15,159,8, -32,8,41,44,249,22,60,20,15,159,8,34,8,42,44,250,22,209,20,15,159, -8,37,8,43,44,250,22,60,20,15,159,8,40,8,44,44,20,15,159,8,40, -8,45,44,250,22,209,20,15,159,8,43,8,46,44,251,22,60,20,15,159,8, -47,8,47,44,20,15,159,8,47,8,48,44,20,15,159,8,47,8,49,44,250, -22,209,20,15,159,8,50,8,50,44,250,22,62,20,15,159,8,53,8,51,44, -250,22,209,20,15,159,8,56,8,52,44,248,22,60,250,22,209,20,15,159,8, -60,8,53,44,249,22,60,20,15,159,8,62,8,54,44,250,22,209,20,15,159, -8,65,8,55,44,250,22,60,20,15,159,8,68,8,56,44,20,15,159,8,68, -8,57,44,250,22,209,20,15,159,8,71,8,58,44,249,22,60,20,15,159,8, -73,8,59,44,250,22,209,20,15,159,8,76,8,60,44,250,22,60,20,15,159, -8,79,8,61,44,20,15,159,8,79,8,62,44,250,22,209,20,15,159,8,82, -8,63,44,251,22,60,20,15,159,8,86,8,64,44,20,15,159,8,86,8,65, -44,20,15,159,8,86,8,66,44,250,22,209,20,15,159,8,89,8,67,44,251, -22,62,20,15,159,8,93,8,68,44,20,15,159,8,93,8,69,44,250,22,209, -20,15,159,8,96,8,70,44,249,22,60,20,15,159,8,98,8,71,44,248,22, -52,23,97,20,15,159,8,96,8,72,44,20,15,159,8,93,8,73,44,20,15, -159,8,89,8,74,44,20,15,159,8,82,8,75,44,20,15,159,8,76,8,76, -44,20,15,159,8,71,8,77,44,20,15,159,8,65,8,78,44,20,15,159,8, -60,8,79,44,20,15,159,8,56,8,80,44,20,15,159,8,53,8,81,44,20, -15,159,8,50,8,82,44,20,15,159,8,43,8,83,44,20,15,159,8,37,8, -84,44,20,15,159,8,32,8,85,44,20,15,159,8,28,8,86,44,20,15,159, -53,8,87,44,20,15,159,47,8,88,44,20,15,159,41,8,89,44,197,89,162, -32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208, -250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,197,249, -22,7,248,195,10,248,195,11,37,20,98,158,16,12,2,65,2,68,2,70,2, -72,2,76,2,78,2,80,2,122,2,74,2,184,2,186,2,125,16,90,18,99, -2,82,8,124,36,35,34,16,4,8,123,11,74,100,105,115,97,98,108,101,45, -98,114,101,97,107,63,252,40,1,3,1,7,101,110,118,51,55,51,57,252,41, -1,16,4,8,122,11,2,236,3,1,7,101,110,118,51,55,52,48,252,42,1, -18,16,2,95,2,91,8,125,93,8,252,172,9,95,9,8,252,172,9,2,92, -18,101,2,93,8,128,36,35,34,8,123,8,122,16,8,8,127,11,3,1,4, -103,52,56,54,252,43,1,3,1,4,103,52,56,55,252,44,1,3,1,4,103, -52,56,56,252,45,1,3,1,7,101,110,118,51,55,52,55,252,46,1,2,252, -46,1,2,252,46,1,16,8,8,126,11,2,98,2,234,2,235,3,1,7,101, -110,118,51,55,52,56,252,47,1,2,252,47,1,2,252,47,1,18,158,2,101, -8,128,18,158,2,116,8,128,18,158,9,8,128,18,158,2,101,8,128,18,101, -2,82,8,131,36,35,34,8,123,8,122,16,12,8,130,11,3,1,4,103,52, -56,49,252,48,1,3,1,4,103,52,56,50,252,49,1,3,1,4,103,52,56, -51,252,50,1,3,1,4,103,52,56,52,252,51,1,3,1,4,103,52,56,53, -252,52,1,3,1,7,101,110,118,51,55,54,52,252,53,1,2,252,53,1,2, -252,53,1,2,252,53,1,2,252,53,1,16,12,8,129,11,2,98,2,252,23, -1,2,252,24,1,2,234,2,235,3,1,7,101,110,118,51,55,54,53,252,54, -1,2,252,54,1,2,252,54,1,2,252,54,1,2,252,54,1,18,158,95,16, -2,158,66,98,101,103,105,110,48,252,55,1,8,131,9,16,2,158,94,16,2, -158,94,16,2,158,64,99,100,97,114,252,56,1,8,131,9,16,2,158,2,252, -20,1,8,131,9,8,131,9,16,2,158,2,252,29,1,8,131,9,8,131,9, -16,2,158,96,16,2,158,2,231,8,131,9,16,2,158,2,47,8,131,9,16, -2,158,2,252,26,1,8,131,9,16,2,158,93,16,2,158,2,51,8,131,9, -8,131,9,8,131,9,8,131,18,158,96,16,2,158,2,231,8,131,9,16,2, -158,2,47,8,131,9,16,2,158,2,252,26,1,8,131,9,16,2,158,95,16, -2,158,2,0,8,131,9,16,2,158,93,16,2,158,2,51,8,131,9,8,131, -9,16,2,158,94,16,2,158,94,16,2,158,2,252,56,1,8,131,9,16,2, -158,2,252,20,1,8,131,9,8,131,9,16,2,158,2,252,29,1,8,131,9, -8,131,9,8,131,9,8,131,18,16,2,95,2,91,8,132,93,8,252,181,9, -95,9,8,252,181,9,2,92,18,16,2,99,2,113,8,137,93,8,252,181,9, -16,6,8,136,11,2,140,2,141,3,1,7,101,110,118,51,55,56,51,252,57, -1,2,252,57,1,16,4,8,135,11,2,151,3,1,7,101,110,118,51,55,56, -52,252,58,1,16,4,8,134,11,2,153,3,1,7,101,110,118,51,55,56,53, -252,59,1,16,4,8,133,11,2,155,3,1,7,101,110,118,51,55,56,55,252, -60,1,95,9,8,252,181,9,2,92,18,158,2,93,8,131,18,158,2,101,8, -131,18,158,2,116,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158, -2,252,20,1,8,131,18,158,2,101,8,131,18,158,2,252,21,1,8,131,18, -158,2,101,8,131,18,158,2,252,22,1,8,131,18,158,2,101,8,131,18,158, -2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,252,25, -1,8,131,18,158,2,101,8,131,18,158,2,230,8,131,18,158,9,8,131,18, -158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101, -8,131,18,158,2,116,8,131,18,158,93,16,2,158,94,16,2,158,2,252,26, -1,8,131,9,16,2,158,95,16,2,158,2,232,8,131,9,16,2,158,11,8, -131,9,16,2,158,2,47,8,131,9,8,131,9,8,131,9,8,131,18,158,2, -101,8,131,18,158,2,231,8,131,18,158,2,47,8,131,18,158,94,16,2,158, -2,252,16,1,8,131,9,16,2,158,11,8,131,9,8,131,18,158,2,101,8, -131,18,158,2,101,8,131,18,158,2,252,27,1,8,131,18,158,2,101,8,131, -18,158,2,230,8,131,18,158,93,16,2,158,2,99,8,131,9,8,131,18,158, -2,101,8,131,18,158,2,231,8,131,18,158,2,47,8,131,18,158,2,252,26, -1,8,131,18,158,2,101,8,131,18,158,2,56,8,131,18,158,2,101,8,131, -18,158,2,101,8,131,18,158,2,252,28,1,8,131,18,158,2,101,8,131,18, -158,2,230,8,131,18,158,93,16,2,158,2,252,29,1,8,131,9,8,131,18, -158,2,101,8,131,18,158,2,99,8,131,18,158,2,101,8,131,18,158,2,230, -8,131,18,158,9,8,131,18,158,2,101,8,131,18,158,2,116,8,131,18,158, -2,252,30,1,8,131,18,158,93,16,2,158,94,16,2,158,2,252,20,1,8, -131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,8,131,18,158,2,101, -8,131,18,158,2,132,8,131,18,158,94,16,2,158,94,16,2,158,2,252,31, -1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2,158,94, -16,2,158,2,252,32,1,8,131,9,16,2,158,2,252,29,1,8,131,9,8, -131,9,8,131,18,158,2,101,8,131,18,158,94,16,2,158,94,16,2,158,2, -252,33,1,8,131,9,16,2,158,2,252,20,1,8,131,9,8,131,9,16,2, -158,2,252,29,1,8,131,9,8,131,18,158,2,101,8,131,18,16,2,105,93, -16,2,158,94,16,2,158,2,143,8,131,9,16,2,158,94,16,2,158,2,252, -30,1,8,131,9,16,2,158,94,16,2,158,2,252,35,1,8,131,9,16,2, -158,2,252,20,1,8,131,9,8,131,9,8,131,9,8,131,9,8,141,8,28, -59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,181,9,16,6,8, -140,11,2,140,2,141,2,252,57,1,2,252,57,1,16,4,8,139,11,2,151, -2,252,58,1,16,4,8,138,11,2,153,2,252,59,1,95,9,8,252,181,9, -2,92,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18, -158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101, -8,131,18,16,2,158,93,16,2,158,95,16,2,158,2,252,36,1,8,131,9, -16,2,158,2,252,25,1,8,131,9,16,2,158,95,16,2,158,2,230,8,131, -9,16,2,158,2,252,37,1,8,131,9,16,2,158,95,16,2,158,2,230,8, -131,9,16,2,158,9,8,131,9,16,2,158,95,16,2,158,2,252,38,1,8, -131,9,16,2,158,2,252,39,1,8,131,9,16,2,158,2,252,37,1,8,131, -9,8,131,9,8,131,9,8,131,9,8,131,9,8,141,95,9,8,252,181,9, -2,92,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18, -158,2,101,8,131,18,158,2,101,8,131,18,158,2,101,8,131,18,158,2,101, -8,131,18,158,2,101,8,131,11,16,5,93,2,52,89,162,32,33,57,9,223, -0,27,249,22,209,20,15,159,35,32,46,196,27,28,248,80,158,35,32,194,249, -80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158, -38,32,193,28,248,80,158,38,36,248,80,158,39,34,194,27,248,80,158,39,35, -194,28,248,80,158,39,32,193,249,80,158,40,37,248,80,158,41,34,195,248,80, -158,41,36,248,80,158,42,35,196,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,53,195,27,20,15,159,37,33,46,250,22,209,20,15,159,40,34,46,250, -22,209,20,15,159,43,35,46,250,22,62,20,15,159,46,36,46,250,22,209,20, -15,159,49,37,46,248,22,60,250,22,209,20,15,159,53,38,46,249,22,60,20, -15,159,55,39,46,23,19,20,15,159,53,40,46,20,15,159,49,41,46,20,15, -159,46,42,46,20,15,159,43,43,46,195,27,89,162,32,32,51,2,119,225,3, -4,2,27,89,162,32,32,36,2,119,223,1,250,22,252,39,2,11,6,10,10, -98,97,100,32,115,121,110,116,97,120,195,27,28,248,80,158,37,32,195,249,80, -158,38,33,248,80,158,39,34,197,27,248,80,158,40,35,198,28,248,80,158,40, -32,193,249,80,158,41,37,27,248,80,158,43,34,196,28,248,80,158,43,38,193, -248,22,59,248,80,158,44,39,194,11,27,248,80,158,43,35,196,28,248,80,158, -43,32,193,249,80,158,44,37,248,80,158,45,34,195,248,80,158,45,36,248,80, -158,46,35,196,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248, -22,80,196,28,27,248,80,158,41,39,27,20,15,159,42,44,46,250,22,209,20, -15,159,45,45,46,199,195,87,94,249,22,3,89,162,32,33,39,9,224,10,9, -28,248,80,158,34,40,195,12,251,22,252,39,2,11,6,17,17,110,111,116,32, -97,110,32,105,100,101,110,116,105,102,105,101,114,196,198,194,27,248,80,158,42, -41,194,28,192,251,22,252,39,2,11,6,20,20,100,117,112,108,105,99,97,116, -101,32,105,100,101,110,116,105,102,105,101,114,204,196,12,27,249,22,209,20,15, -159,42,46,46,248,80,158,43,42,27,20,15,159,44,47,46,250,22,209,20,15, -159,47,48,46,201,195,27,28,248,80,158,42,38,194,248,80,158,42,39,194,11, -28,192,249,80,158,43,43,202,27,250,22,61,201,198,200,27,20,15,159,45,49, -46,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89, -162,32,33,40,9,226,15,2,3,1,250,22,31,89,162,32,32,36,9,225,6, -3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33, -36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181, -2,193,248,22,252,186,2,193,249,80,158,35,44,21,96,70,108,101,116,45,118, -97,108,117,101,115,252,61,1,93,94,94,64,116,101,109,112,252,62,1,2,113, -2,235,95,64,115,101,116,33,252,63,1,62,105,100,252,64,1,2,252,62,1, -2,113,20,15,159,35,50,46,89,162,32,32,56,9,225,6,5,4,27,250,22, -209,20,15,159,38,51,46,250,22,209,20,15,159,41,52,46,250,22,62,20,15, -159,44,53,46,250,22,209,20,15,159,47,54,46,248,22,60,250,22,209,20,15, -159,51,55,46,249,22,60,248,22,78,23,20,248,22,80,23,20,20,15,159,51, -56,46,20,15,159,47,57,46,250,22,2,89,162,33,33,41,9,223,15,250,22, -209,20,15,159,35,58,46,250,22,60,20,15,159,38,59,46,248,22,52,200,248, -22,78,200,20,15,159,35,8,28,46,248,22,52,206,248,22,78,206,20,15,159, -41,8,29,46,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223, -3,248,22,252,184,2,208,248,80,158,42,45,20,15,159,42,8,30,46,247,196, -247,193,27,28,248,80,158,37,32,196,249,80,158,38,33,248,80,158,39,34,198, -27,248,80,158,40,35,199,28,248,80,158,40,32,193,249,80,158,41,37,27,248, -80,158,43,34,196,28,248,80,158,43,32,193,249,80,158,44,33,248,80,158,45, -34,195,248,80,158,45,36,248,80,158,46,35,196,11,27,248,80,158,43,35,196, -28,248,80,158,43,32,193,249,80,158,44,37,248,80,158,45,34,195,248,80,158, -45,36,248,80,158,46,35,196,11,11,11,28,192,27,248,22,52,194,27,248,22, -78,195,27,248,22,80,196,28,248,80,158,40,40,194,27,249,22,61,195,196,27, -20,15,159,41,8,31,46,250,22,209,20,15,159,44,8,32,46,250,22,209,20, -15,159,47,8,33,46,250,22,60,20,15,159,50,8,34,46,248,22,53,203,248, -22,52,203,20,15,159,47,8,35,46,195,247,196,247,193,32,20,98,158,16,14, -2,65,2,68,2,70,2,72,2,76,2,74,2,78,2,80,2,120,30,252,65, -1,2,88,1,26,99,104,101,99,107,45,100,117,112,108,105,99,97,116,101,45, -105,100,101,110,116,105,102,105,101,114,252,66,1,0,30,252,67,1,2,189,1, -20,103,101,110,101,114,97,116,101,45,116,101,109,112,111,114,97,114,105,101,115, -252,68,1,0,2,122,2,125,2,188,16,36,18,98,2,82,8,143,36,35,34, -16,4,8,142,11,2,236,3,1,7,101,110,118,51,55,57,54,252,69,1,18, -16,2,95,2,91,8,144,93,8,252,203,9,95,9,8,252,203,9,2,92,18, -100,2,93,8,147,36,35,34,8,142,16,6,8,146,11,3,1,4,103,52,57, -56,252,70,1,3,1,4,103,52,57,57,252,71,1,3,1,7,101,110,118,51, -56,48,50,252,72,1,2,252,72,1,16,6,8,145,11,2,98,2,235,3,1, -7,101,110,118,51,56,48,51,252,73,1,2,252,73,1,18,158,2,101,8,147, -18,158,2,252,61,1,8,147,18,158,2,101,8,147,18,158,2,101,8,147,18, -158,9,8,147,18,158,2,101,8,147,18,158,2,101,8,147,18,16,2,103,93, -16,2,158,93,16,2,158,64,118,111,105,100,252,74,1,8,147,9,8,147,9, -8,149,8,28,59,58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,203, -9,16,6,8,148,11,2,140,2,141,3,1,7,101,110,118,51,56,48,55,252, -75,1,2,252,75,1,95,9,8,252,203,9,2,92,18,158,2,101,8,147,18, -16,2,95,2,91,8,150,93,8,252,204,9,95,9,8,252,204,9,2,92,18, -100,2,93,8,153,36,35,34,8,142,16,8,8,152,11,3,1,4,103,52,57, -50,252,76,1,3,1,4,103,52,57,51,252,77,1,3,1,4,103,52,57,52, -252,78,1,3,1,7,101,110,118,51,56,49,55,252,79,1,2,252,79,1,2, -252,79,1,16,8,8,151,11,2,98,2,252,64,1,2,235,3,1,7,101,110, -118,51,56,49,56,252,80,1,2,252,80,1,2,252,80,1,18,158,2,82,8, -153,18,16,2,95,2,91,8,154,93,8,252,208,9,95,9,8,252,208,9,2, -92,18,158,2,93,8,153,18,16,2,95,2,91,8,155,93,8,252,211,9,95, -9,8,252,211,9,2,92,18,16,2,99,2,113,8,160,93,8,252,211,9,16, -6,8,159,11,2,140,2,141,3,1,7,101,110,118,51,56,51,53,252,81,1, -2,252,81,1,16,4,8,158,11,2,151,3,1,7,101,110,118,51,56,51,54, -252,82,1,16,4,8,157,11,2,153,3,1,7,101,110,118,51,56,51,55,252, -83,1,16,4,8,156,11,2,155,3,1,7,101,110,118,51,56,51,57,252,84, -1,95,9,8,252,211,9,2,92,18,102,2,93,8,163,36,35,34,8,142,8, -152,8,151,16,4,8,162,11,3,1,4,103,53,48,50,252,85,1,3,1,7, -101,110,118,51,56,51,49,252,86,1,16,4,8,161,11,2,252,62,1,3,1, -7,101,110,118,51,56,51,50,252,87,1,18,158,2,101,8,163,18,158,2,252, -61,1,8,163,18,158,2,101,8,163,18,158,2,101,8,163,18,158,2,101,8, -163,18,158,2,101,8,163,18,158,2,101,8,163,18,158,2,252,63,1,8,163, -18,158,2,101,8,163,18,158,2,101,8,163,18,16,2,158,94,16,2,98,2, -252,62,1,8,167,93,8,252,207,9,16,4,8,166,11,3,1,8,119,115,116, -109,112,53,48,48,252,88,1,3,1,7,101,110,118,51,56,50,54,252,89,1, -16,4,8,165,11,3,1,4,103,53,48,49,252,90,1,3,1,7,101,110,118, -51,56,52,56,252,91,1,16,4,8,164,11,2,222,3,1,7,101,110,118,51, -56,52,57,252,92,1,9,16,2,158,2,113,8,167,9,8,167,95,9,8,252, -207,9,2,189,18,16,2,95,2,91,8,168,93,8,252,214,9,95,9,8,252, -214,9,2,92,18,100,2,93,8,171,36,35,34,8,142,16,8,8,170,11,3, -1,4,103,52,57,53,252,93,1,3,1,4,103,52,57,54,252,94,1,3,1, -4,103,52,57,55,252,95,1,3,1,7,101,110,118,51,56,53,54,252,96,1, -2,252,96,1,2,252,96,1,16,8,8,169,11,2,98,2,252,64,1,2,235, -3,1,7,101,110,118,51,56,53,55,252,97,1,2,252,97,1,2,252,97,1, -18,158,2,101,8,171,18,158,2,252,63,1,8,171,18,158,2,101,8,171,11, -16,5,93,2,61,89,162,32,33,8,32,9,223,0,27,249,22,209,20,15,159, -35,32,39,196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37, -34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,33, -248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80,158,41,32,193,249, -80,158,42,33,248,80,158,43,34,195,27,248,80,158,44,35,196,28,248,80,158, -44,36,193,248,80,158,44,37,193,11,11,11,11,28,192,27,248,22,52,194,27, -248,22,78,195,27,248,22,87,196,27,248,22,88,197,249,80,158,40,38,201,27, -250,22,61,200,199,198,27,20,15,159,42,33,39,250,22,209,20,15,159,45,34, -39,250,22,209,20,15,159,48,35,39,249,22,60,20,15,159,50,36,39,250,22, -209,20,15,159,53,37,39,251,22,62,20,15,159,57,38,39,250,22,209,20,15, -159,8,28,39,39,248,22,60,248,22,52,23,21,20,15,159,8,28,40,39,248, -22,78,23,17,248,22,80,23,17,20,15,159,53,41,39,20,15,159,48,42,39, -195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196, -32,20,98,158,16,7,2,65,2,68,2,70,2,72,2,78,2,80,2,122,16, -11,18,98,2,82,8,173,36,35,34,16,4,8,172,11,2,236,3,1,7,101, -110,118,51,56,54,51,252,98,1,18,16,2,95,2,91,8,174,93,8,252,224, -9,95,9,8,252,224,9,2,92,18,100,2,93,8,177,36,35,34,8,172,16, -10,8,176,11,3,1,4,103,53,48,51,252,99,1,3,1,4,103,53,48,52, -252,100,1,3,1,4,103,53,48,53,252,101,1,3,1,4,103,53,48,54,252, -102,1,3,1,7,101,110,118,51,56,55,48,252,103,1,2,252,103,1,2,252, -103,1,2,252,103,1,16,10,8,175,11,2,98,2,178,65,98,111,100,121,49, -252,104,1,2,252,25,1,3,1,7,101,110,118,51,56,55,49,252,105,1,2, -252,105,1,2,252,105,1,2,252,105,1,18,158,2,101,8,177,18,158,67,99, -97,108,108,47,99,99,252,106,1,8,177,18,158,2,101,8,177,18,158,2,230, -8,177,18,158,2,101,8,177,18,158,2,101,8,177,18,158,2,101,8,177,18, -158,2,101,8,177,11,16,5,93,2,53,89,162,32,33,55,9,223,0,27,249, -22,209,20,15,159,35,32,41,196,27,28,248,80,158,35,32,194,249,80,158,36, -33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248,80,158,38,32,193, -249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41,35,196,28,248,80, -158,41,32,193,249,80,158,42,36,27,248,80,158,44,34,196,28,248,80,158,44, -37,193,248,22,59,248,80,158,45,38,194,11,27,248,80,158,44,35,196,28,248, -80,158,44,32,193,249,80,158,45,33,248,80,158,46,34,195,27,248,80,158,47, -35,196,28,248,80,158,47,37,193,248,80,158,47,38,193,11,11,11,11,11,28, -192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197, -27,248,22,89,198,249,80,158,41,39,202,27,251,22,61,200,202,199,201,27,20, -15,159,43,33,41,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247, -248,22,8,89,162,32,33,40,9,226,13,2,3,1,250,22,31,89,162,32,32, -36,9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2, -89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28, -248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,40,21,98,2,116, -9,95,73,100,101,102,105,110,101,45,115,116,114,117,99,116,252,107,1,64,98, -97,115,101,252,108,1,94,65,102,105,101,108,100,252,109,1,2,113,2,252,104, -1,2,252,25,1,2,113,20,15,159,35,34,41,89,162,32,32,54,9,225,6, -5,4,27,250,22,209,20,15,159,38,35,41,250,22,209,20,15,159,41,36,41, -252,22,62,20,15,159,46,37,41,20,15,159,46,38,41,250,22,209,20,15,159, -49,39,41,250,22,60,20,15,159,52,40,41,248,22,78,23,19,248,22,88,23, -19,20,15,159,49,41,41,248,22,52,205,248,22,87,205,20,15,159,41,42,41, -197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248,22,252, -184,2,208,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116,97, -120,196,32,20,98,158,16,9,2,65,2,68,2,70,2,72,2,74,2,78,2, -80,2,122,2,125,16,11,18,98,2,82,8,179,36,35,34,16,4,8,178,11, -2,236,3,1,7,101,110,118,51,56,55,57,252,110,1,18,16,2,95,2,91, -8,180,93,8,252,237,9,95,9,8,252,237,9,2,92,18,16,2,99,2,113, -8,185,93,8,252,237,9,16,6,8,184,11,2,140,2,141,3,1,7,101,110, -118,51,56,57,54,252,111,1,2,252,111,1,16,4,8,183,11,2,151,3,1, -7,101,110,118,51,56,57,55,252,112,1,16,4,8,182,11,2,153,3,1,7, -101,110,118,51,56,57,56,252,113,1,16,4,8,181,11,2,155,3,1,7,101, -110,118,51,57,48,48,252,114,1,95,9,8,252,237,9,2,92,18,100,2,93, -8,188,36,35,34,8,178,16,12,8,187,11,3,1,4,103,53,48,55,252,115, -1,3,1,4,103,53,48,56,252,116,1,3,1,4,103,53,48,57,252,117,1, -3,1,4,103,53,49,48,252,118,1,3,1,4,103,53,49,49,252,119,1,3, -1,7,101,110,118,51,56,56,56,252,120,1,2,252,120,1,2,252,120,1,2, -252,120,1,2,252,120,1,16,12,8,186,11,2,98,2,252,108,1,2,252,109, -1,2,252,104,1,2,252,25,1,3,1,7,101,110,118,51,56,56,57,252,121, -1,2,252,121,1,2,252,121,1,2,252,121,1,2,252,121,1,18,158,2,101, -8,188,18,158,2,116,8,188,18,158,9,8,188,18,158,2,101,8,188,18,158, -2,252,107,1,8,188,18,158,2,101,8,188,18,158,2,101,8,188,11,16,5, -93,2,58,89,162,32,33,53,9,223,0,27,249,22,209,20,15,159,35,32,46, -196,27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27, -248,80,158,38,35,197,28,248,80,158,38,32,193,28,248,80,158,38,36,248,80, -158,39,34,194,27,248,80,158,39,35,194,28,248,80,158,39,32,193,249,80,158, -40,33,248,80,158,41,34,195,27,248,80,158,42,35,196,28,248,80,158,42,37, -193,248,80,158,42,38,193,11,11,11,11,11,28,192,27,248,22,52,194,27,248, -22,78,195,27,248,22,80,196,249,80,158,39,39,200,27,249,22,61,198,197,27, -20,15,159,41,33,46,250,22,209,20,15,159,44,34,46,250,22,209,20,15,159, -47,35,46,250,22,62,20,15,159,50,36,46,20,15,159,50,37,46,202,20,15, -159,47,38,46,195,27,28,248,80,158,36,32,195,249,80,158,37,33,248,80,158, -38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32,193,249,80,158,40, -40,27,248,80,158,42,34,196,28,248,80,158,42,37,193,248,22,8,89,162,32, -33,39,9,224,10,1,27,249,22,2,89,162,32,33,45,9,224,4,5,249,80, -158,35,41,28,248,80,158,36,32,197,249,80,158,37,33,248,80,158,38,34,199, -27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80,158,40,33,248,80, -158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11,11,194,248,80,158, -37,38,196,28,248,22,57,193,21,94,9,9,248,80,158,35,42,193,11,27,248, -80,158,42,35,196,28,248,80,158,42,32,193,249,80,158,43,33,248,80,158,44, -34,195,27,248,80,158,45,35,196,28,248,80,158,45,37,193,248,80,158,45,38, -193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87, -196,27,248,22,90,197,27,248,22,89,198,27,249,22,209,20,15,159,43,39,46, -248,80,158,44,43,27,20,15,159,45,40,46,250,22,209,20,15,159,48,41,46, -203,195,27,28,248,80,158,43,37,194,248,80,158,43,38,194,11,28,192,249,80, -158,44,39,205,27,252,22,61,203,202,204,205,200,27,20,15,159,46,42,46,91, -159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32, -33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7, -90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9, -224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193, -248,22,252,186,2,193,249,80,158,35,44,21,95,2,116,94,94,63,116,109,112, -252,122,1,2,250,2,113,95,2,116,93,94,64,115,119,97,112,252,123,1,96, -2,230,9,96,2,116,93,94,2,202,2,252,122,1,95,2,252,63,1,2,252, -122,1,64,110,97,109,101,252,124,1,95,2,252,63,1,2,252,124,1,2,202, -2,113,96,72,100,121,110,97,109,105,99,45,119,105,110,100,252,125,1,2,252, -123,1,97,2,230,9,2,252,104,1,2,252,25,1,2,113,2,252,123,1,20, -15,159,35,43,46,89,162,32,32,8,40,9,225,6,5,4,27,250,22,209,20, -15,159,38,44,46,250,22,209,20,15,159,41,45,46,250,22,60,20,15,159,44, -46,46,250,22,2,89,162,33,33,41,9,223,15,250,22,209,20,15,159,35,47, -46,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35,48,46,248,22,89, -206,248,22,87,206,250,22,209,20,15,159,47,49,46,250,22,60,20,15,159,50, -50,46,250,22,209,20,15,159,53,51,46,248,22,60,250,22,209,20,15,159,57, -52,46,249,22,60,20,15,159,59,53,46,250,22,209,20,15,159,8,30,54,46, -250,22,62,20,15,159,8,33,55,46,20,15,159,8,33,56,46,252,22,2,89, -162,33,33,51,9,223,38,250,22,209,20,15,159,35,57,46,251,22,60,20,15, -159,39,58,46,250,22,209,20,15,159,42,59,46,248,22,60,250,22,209,20,15, -159,46,8,28,46,249,22,60,20,15,159,48,8,29,46,248,22,52,23,18,20, -15,159,46,8,30,46,20,15,159,42,8,31,46,250,22,209,20,15,159,42,8, -32,46,250,22,60,20,15,159,45,8,33,46,248,22,52,23,15,248,22,87,23, -15,20,15,159,42,8,34,46,250,22,209,20,15,159,42,8,35,46,250,22,62, -20,15,159,45,8,36,46,248,22,87,23,15,20,15,159,45,8,37,46,20,15, -159,42,8,38,46,20,15,159,35,8,39,46,248,22,89,23,37,248,22,89,23, -37,248,22,90,23,37,248,22,90,23,37,20,15,159,8,30,8,40,46,20,15, -159,57,8,41,46,20,15,159,53,8,42,46,250,22,209,20,15,159,53,8,43, -46,251,22,62,20,15,159,57,8,44,46,20,15,159,57,8,45,46,250,22,209, -20,15,159,8,28,8,46,46,251,22,62,20,15,159,8,32,8,47,46,20,15, -159,8,32,8,48,46,248,22,52,23,31,248,22,78,23,31,20,15,159,8,28, -8,49,46,20,15,159,57,8,50,46,20,15,159,53,8,51,46,20,15,159,47, -8,52,46,20,15,159,41,8,53,46,197,89,162,32,32,33,9,223,0,192,89, -162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158,43,45,20,15,159, -43,8,54,46,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110,116, -97,120,197,32,20,98,158,16,14,2,65,2,68,2,70,2,72,2,76,2,78, -2,80,2,122,2,74,2,184,2,186,2,252,67,1,2,125,2,188,16,55,18, -98,2,82,8,190,36,35,34,16,4,8,189,11,2,236,3,1,7,101,110,118, -51,57,48,55,252,126,1,18,16,2,95,2,91,8,191,93,8,252,0,10,95, -9,8,252,0,10,2,92,18,100,2,93,8,194,36,35,34,8,189,16,8,8, -193,11,3,1,4,103,53,49,55,252,127,1,3,1,4,103,53,49,56,252,128, -1,3,1,4,103,53,49,57,252,129,1,3,1,7,101,110,118,51,57,49,52, -252,130,1,2,252,130,1,2,252,130,1,16,8,8,192,11,2,98,2,252,104, -1,2,252,25,1,3,1,7,101,110,118,51,57,49,53,252,131,1,2,252,131, -1,2,252,131,1,18,158,2,101,8,194,18,158,2,116,8,194,18,158,9,8, -194,18,158,2,101,8,194,18,100,2,82,8,197,36,35,34,8,189,16,12,8, -196,11,3,1,4,103,53,49,50,252,132,1,3,1,4,103,53,49,51,252,133, -1,3,1,4,103,53,49,52,252,134,1,3,1,4,103,53,49,53,252,135,1, -3,1,4,103,53,49,54,252,136,1,3,1,7,101,110,118,51,57,51,49,252, -137,1,2,252,137,1,2,252,137,1,2,252,137,1,2,252,137,1,16,12,8, -195,11,2,98,2,252,124,1,2,250,2,252,104,1,2,252,25,1,3,1,7, -101,110,118,51,57,51,50,252,138,1,2,252,138,1,2,252,138,1,2,252,138, -1,2,252,138,1,18,16,2,95,2,91,8,198,93,8,252,3,10,95,9,8, -252,3,10,2,92,18,158,2,93,8,197,18,16,2,95,2,91,8,199,93,8, -252,6,10,95,9,8,252,6,10,2,92,18,16,2,99,2,113,8,204,93,8, -252,6,10,16,6,8,203,11,2,140,2,141,3,1,7,101,110,118,51,57,52, -56,252,139,1,2,252,139,1,16,4,8,202,11,2,151,3,1,7,101,110,118, -51,57,52,57,252,140,1,16,4,8,201,11,2,153,3,1,7,101,110,118,51, -57,53,48,252,141,1,16,4,8,200,11,2,155,3,1,7,101,110,118,51,57, -53,50,252,142,1,95,9,8,252,6,10,2,92,18,102,2,93,8,207,36,35, -34,8,189,8,196,8,195,16,4,8,206,11,3,1,4,103,53,50,50,252,143, -1,3,1,7,101,110,118,51,57,52,52,252,144,1,16,4,8,205,11,2,252, -122,1,3,1,7,101,110,118,51,57,52,53,252,145,1,18,158,2,101,8,207, -18,158,2,116,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2, -101,8,207,18,158,2,116,8,207,18,158,2,101,8,207,18,158,2,101,8,207, -18,158,2,252,123,1,8,207,18,158,2,101,8,207,18,158,2,230,8,207,18, -158,9,8,207,18,158,2,101,8,207,18,158,2,116,8,207,18,158,2,101,8, -207,18,158,2,101,8,207,18,158,2,202,8,207,18,158,2,101,8,207,18,158, -2,101,8,207,18,158,2,101,8,207,18,158,2,252,63,1,8,207,18,158,2, -101,8,207,18,158,2,101,8,207,18,158,2,252,63,1,8,207,18,16,2,106, -93,16,2,158,2,202,8,207,9,8,212,8,28,59,58,57,56,55,13,16,3, -33,2,134,2,92,93,8,252,6,10,16,6,8,211,11,2,140,2,141,2,252, -139,1,2,252,139,1,16,4,8,210,11,2,151,2,252,140,1,16,4,8,209, -11,2,153,2,252,141,1,16,4,8,208,11,64,118,97,108,115,252,146,1,3, -1,7,101,110,118,51,57,53,56,252,147,1,95,9,8,252,6,10,2,92,18, -158,2,101,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2,101, -8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,158,2,252,125,1,8, -207,18,158,2,252,123,1,8,207,18,158,2,101,8,207,18,158,2,230,8,207, -18,158,9,8,207,18,158,2,101,8,207,18,16,2,105,93,16,2,158,2,252, -123,1,8,207,9,8,213,8,28,59,58,57,56,55,13,16,3,33,2,134,2, -92,93,8,252,6,10,8,211,8,210,8,209,95,9,8,252,6,10,2,92,18, -158,2,101,8,207,18,158,2,101,8,207,18,158,2,101,8,207,18,16,2,158, -94,16,2,98,2,252,122,1,8,217,93,8,252,2,10,16,4,8,216,11,3, -1,8,119,115,116,109,112,53,50,48,252,148,1,3,1,7,101,110,118,51,57, -51,57,252,149,1,16,4,8,215,11,3,1,4,103,53,50,49,252,150,1,3, -1,7,101,110,118,51,57,54,51,252,151,1,16,4,8,214,11,2,222,3,1, -7,101,110,118,51,57,54,52,252,152,1,9,16,2,158,2,113,8,217,9,8, -217,95,9,8,252,2,10,2,189,11,16,5,93,2,57,89,162,32,33,8,41, -9,223,0,27,249,22,209,20,15,159,35,32,39,196,27,28,248,80,158,35,32, -194,249,80,158,36,33,248,80,158,37,34,196,27,248,80,158,38,35,197,28,248, -80,158,38,32,193,249,80,158,39,33,248,80,158,40,34,195,27,248,80,158,41, -35,196,28,248,80,158,41,36,193,248,80,158,41,37,193,11,11,11,28,192,27, -248,22,52,194,27,248,22,78,195,27,248,22,80,196,249,80,158,39,38,200,27, -249,22,61,198,197,27,20,15,159,41,33,39,250,22,209,20,15,159,44,34,39, -250,22,209,20,15,159,47,35,39,250,22,62,20,15,159,50,36,39,250,22,209, -20,15,159,53,37,39,248,22,60,250,22,209,20,15,159,57,38,39,249,22,60, -20,15,159,59,39,39,250,22,209,20,15,159,8,30,40,39,250,22,62,20,15, -159,8,33,41,39,250,22,209,20,15,159,8,36,42,39,250,22,62,20,15,159, -8,39,43,39,20,15,159,8,39,44,39,23,31,20,15,159,8,36,45,39,20, -15,159,8,33,46,39,20,15,159,8,30,47,39,20,15,159,57,48,39,20,15, -159,53,49,39,20,15,159,50,50,39,20,15,159,47,51,39,195,250,22,252,39, -2,11,6,10,10,98,97,100,32,115,121,110,116,97,120,196,32,20,98,158,16, -7,2,65,2,68,2,70,2,72,2,78,2,80,2,122,16,20,18,98,2,82, -8,219,36,35,34,16,4,8,218,11,2,236,3,1,7,101,110,118,51,57,54, -55,252,153,1,18,16,2,95,2,91,8,220,93,8,252,17,10,95,9,8,252, -17,10,2,92,18,100,2,93,8,223,36,35,34,8,218,16,8,8,222,11,3, -1,4,103,53,50,51,252,154,1,3,1,4,103,53,50,52,252,155,1,3,1, -4,103,53,50,53,252,156,1,3,1,7,101,110,118,51,57,55,51,252,157,1, -2,252,157,1,2,252,157,1,16,8,8,221,11,2,98,2,234,2,235,3,1, -7,101,110,118,51,57,55,52,252,158,1,2,252,158,1,2,252,158,1,18,158, -2,101,8,223,18,158,2,252,61,1,8,223,18,158,2,101,8,223,18,158,2, -101,8,223,18,158,96,16,2,158,2,112,8,223,9,16,2,158,63,99,112,117, -252,159,1,8,223,9,16,2,158,64,117,115,101,114,252,160,1,8,223,9,16, -2,158,62,103,99,252,161,1,8,223,9,8,223,18,158,2,101,8,223,18,158, -70,116,105,109,101,45,97,112,112,108,121,252,162,1,8,223,18,158,2,101,8, -223,18,158,2,230,8,223,18,158,9,8,223,18,158,2,101,8,223,18,16,2, -103,93,16,2,158,64,110,117,108,108,252,163,1,8,223,9,8,225,8,28,59, -58,57,56,55,13,16,3,33,2,134,2,92,93,8,252,17,10,16,6,8,224, -11,2,140,2,141,3,1,7,101,110,118,51,57,55,57,252,164,1,2,252,164, -1,95,9,8,252,17,10,2,92,18,158,2,101,8,223,18,158,2,101,8,223, -18,158,2,101,8,223,18,16,2,158,94,16,2,158,97,16,2,158,66,112,114, -105,110,116,102,252,165,1,8,223,9,16,2,158,6,40,40,99,112,117,32,116, -105,109,101,58,32,126,115,32,114,101,97,108,32,116,105,109,101,58,32,126,115, -32,103,99,32,116,105,109,101,58,32,126,115,126,110,8,223,9,16,2,158,2, -252,159,1,8,223,9,16,2,158,2,252,160,1,8,223,9,16,2,158,2,252, -161,1,8,223,9,8,223,9,16,2,158,95,16,2,158,2,252,38,1,8,223, -9,16,2,158,2,252,39,1,8,223,9,16,2,158,2,112,8,223,9,8,223, -9,8,225,95,9,8,252,17,10,2,92,18,158,2,101,8,223,11,100,83,159, -32,97,80,159,32,32,33,80,159,32,33,33,80,159,32,34,33,80,159,32,35, -33,80,159,32,36,33,27,247,22,252,113,2,87,94,28,192,28,248,22,252,112, -2,193,12,250,22,252,40,2,2,252,107,1,6,15,15,105,110,115,112,101,99, -116,111,114,32,111,114,32,35,102,195,12,91,159,37,11,90,161,37,32,11,254, -22,252,90,2,2,86,11,33,32,11,9,204,252,22,7,197,198,199,250,22,252, -92,2,203,32,61,112,252,166,1,250,22,252,93,2,204,32,2,252,166,1,83, -159,32,93,80,159,32,37,33,89,162,32,33,39,2,14,223,0,87,94,28,248, -80,159,33,34,34,194,12,250,22,252,40,2,2,14,6,7,7,112,114,111,109, -105,115,101,196,27,248,80,159,34,35,34,195,28,248,22,0,193,27,249,22,6, -195,22,59,87,94,28,248,22,0,248,80,159,36,35,34,197,249,80,159,36,36, -34,197,194,12,249,22,1,22,7,248,80,159,37,35,34,198,249,22,1,22,7, -194,83,159,32,93,80,159,32,38,33,89,162,32,32,36,2,16,223,0,248,80, -158,33,39,249,22,19,11,80,158,35,40,83,159,32,93,80,159,32,41,33,89, -162,32,34,40,2,23,223,0,87,95,28,248,22,252,222,2,194,12,252,22,252, -40,2,2,23,6,16,16,112,97,114,97,109,101,116,101,114,105,122,97,116,105, -111,110,32,198,199,28,28,248,22,0,195,249,22,34,196,32,11,12,252,22,252, -40,2,2,23,6,19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105, -116,121,32,48,41,33,198,199,20,14,159,80,158,32,40,193,247,194,83,159,32, -97,80,159,32,42,33,80,159,32,43,33,80,159,32,44,33,80,159,32,45,33, -80,159,32,46,33,252,22,252,90,2,2,85,11,33,32,11,83,159,32,97,80, -159,32,47,33,80,159,32,48,33,80,159,32,49,33,80,159,32,50,33,80,159, -32,51,33,27,247,22,252,113,2,87,94,28,192,28,248,22,252,9,2,248,22, -252,112,2,194,250,22,252,40,2,2,252,107,1,6,15,15,105,110,115,112,101, -99,116,111,114,32,111,114,32,35,102,195,12,12,91,159,37,11,90,161,37,32, -11,254,22,252,90,2,2,85,11,33,32,11,9,204,252,22,7,197,198,199,250, -22,252,92,2,203,32,64,99,101,108,108,252,167,1,250,22,252,93,2,204,32, -2,252,167,1,83,159,32,93,80,159,32,52,33,89,162,32,32,36,2,45,223, -0,248,80,159,33,43,34,249,22,19,11,80,158,35,53,83,159,32,93,80,159, -32,54,33,89,162,32,34,40,2,49,223,0,87,95,28,248,80,159,33,44,34, -194,12,252,22,252,40,2,2,49,6,22,22,98,114,101,97,107,32,112,97,114, -97,109,101,116,101,114,105,122,97,116,105,111,110,32,198,199,28,28,248,22,0, -195,249,22,34,196,32,11,12,252,22,252,40,2,2,23,6,19,19,112,114,111, -99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,33,198,199,83,158, -36,20,93,94,20,14,159,80,158,32,53,249,80,159,34,45,34,195,32,87,94, -247,80,158,32,55,247,194,247,80,158,32,55,96,68,35,37,107,101,114,110,101, -108,252,168,1,2,84,2,83,2,18,96,2,252,168,1,2,66,2,88,2,87, -0}; - EVAL_ONE_SIZED_STR((char *)expr, 22260); +195,27,248,22,80,196,249,80,158,39,39,200,27,249,22,61,197,198,27,20,15, +159,41,33,46,250,22,209,20,15,159,44,34,46,250,22,209,20,15,159,47,35, +46,251,22,62,20,15,159,51,36,46,20,15,159,51,37,46,248,22,53,204,248, +22,52,204,20,15,159,47,38,46,195,27,28,248,80,158,36,32,195,249,80,158, +37,33,248,80,158,38,34,197,27,248,80,158,39,35,198,28,248,80,158,39,32, +193,249,80,158,40,40,27,248,80,158,42,34,196,28,248,80,158,42,37,193,248, +22,8,89,162,32,33,39,9,224,10,1,27,249,22,2,89,162,32,33,45,9, +224,4,5,249,80,158,35,41,28,248,80,158,36,32,197,249,80,158,37,33,248, +80,158,38,34,199,27,248,80,158,39,35,200,28,248,80,158,39,32,193,249,80, +158,40,33,248,80,158,41,34,195,248,80,158,41,36,248,80,158,42,35,196,11, +11,194,248,80,158,37,38,196,28,248,22,57,193,21,94,9,9,248,80,158,35, +42,193,11,27,248,80,158,42,35,196,28,248,80,158,42,32,193,249,80,158,43, +33,248,80,158,44,34,195,27,248,80,158,45,35,196,28,248,80,158,45,37,193, +248,80,158,45,38,193,11,11,11,11,28,192,27,248,22,52,194,27,248,22,78, +195,27,248,22,87,196,27,248,22,90,197,27,248,22,89,198,27,249,22,209,20, +15,159,43,39,46,248,80,158,44,43,27,20,15,159,45,40,46,250,22,209,20, +15,159,48,41,46,203,195,27,28,248,80,158,43,37,194,248,80,158,43,38,194, +11,28,192,249,80,158,44,39,205,27,252,22,61,203,204,202,200,205,27,20,15, +159,46,42,46,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248, +22,8,89,162,32,33,40,9,226,16,2,3,1,250,22,31,89,162,32,32,36, +9,225,6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89, +162,32,33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248, +22,252,181,2,193,248,22,252,186,2,193,249,80,158,35,44,21,95,2,116,94, +94,63,116,109,112,252,122,1,2,250,2,113,95,2,116,93,94,64,115,119,97, +112,252,123,1,96,2,230,9,96,2,116,93,94,2,202,2,252,122,1,95,2, +252,63,1,2,252,122,1,64,110,97,109,101,252,124,1,95,2,252,63,1,2, +252,124,1,2,202,2,113,96,72,100,121,110,97,109,105,99,45,119,105,110,100, +252,125,1,2,252,123,1,97,2,230,9,2,252,104,1,2,252,25,1,2,113, +2,252,123,1,20,15,159,35,43,46,89,162,32,32,8,40,9,225,6,5,4, +27,250,22,209,20,15,159,38,44,46,250,22,209,20,15,159,41,45,46,250,22, +60,20,15,159,44,46,46,250,22,2,89,162,33,33,41,9,223,15,250,22,209, +20,15,159,35,47,46,249,22,60,248,22,52,199,248,22,78,199,20,15,159,35, +48,46,248,22,90,206,248,22,78,206,250,22,209,20,15,159,47,49,46,250,22, +60,20,15,159,50,50,46,250,22,209,20,15,159,53,51,46,248,22,60,250,22, +209,20,15,159,57,52,46,249,22,60,20,15,159,59,53,46,250,22,209,20,15, +159,8,30,54,46,250,22,62,20,15,159,8,33,55,46,20,15,159,8,33,56, +46,252,22,2,89,162,33,33,51,9,223,38,250,22,209,20,15,159,35,57,46, +251,22,60,20,15,159,39,58,46,250,22,209,20,15,159,42,59,46,248,22,60, +250,22,209,20,15,159,46,8,28,46,249,22,60,20,15,159,48,8,29,46,248, +22,52,23,18,20,15,159,46,8,30,46,20,15,159,42,8,31,46,250,22,209, +20,15,159,42,8,32,46,250,22,60,20,15,159,45,8,33,46,248,22,52,23, +15,248,22,87,23,15,20,15,159,42,8,34,46,250,22,209,20,15,159,42,8, +35,46,250,22,62,20,15,159,45,8,36,46,248,22,87,23,15,20,15,159,45, +8,37,46,20,15,159,42,8,38,46,20,15,159,35,8,39,46,248,22,90,23, +37,248,22,90,23,37,248,22,89,23,37,248,22,89,23,37,20,15,159,8,30, +8,40,46,20,15,159,57,8,41,46,20,15,159,53,8,42,46,250,22,209,20, +15,159,53,8,43,46,251,22,62,20,15,159,57,8,44,46,20,15,159,57,8, +45,46,250,22,209,20,15,159,8,28,8,46,46,251,22,62,20,15,159,8,32, +8,47,46,20,15,159,8,32,8,48,46,248,22,52,23,31,248,22,87,23,31, +20,15,159,8,28,8,49,46,20,15,159,57,8,50,46,20,15,159,53,8,51, +46,20,15,159,47,8,52,46,20,15,159,41,8,53,46,197,89,162,32,32,33, +9,223,0,192,89,162,32,32,34,9,223,3,248,22,252,184,2,208,248,80,158, +43,45,20,15,159,43,8,54,46,250,22,252,39,2,11,6,10,10,98,97,100, +32,115,121,110,116,97,120,197,32,20,98,158,16,14,2,65,2,68,2,70,2, +72,2,76,2,78,2,80,2,122,2,74,2,184,2,186,2,252,67,1,2,125, +2,188,16,55,18,98,2,82,8,192,36,35,34,16,4,8,191,11,2,236,3, +1,7,101,110,118,51,57,49,49,252,126,1,18,16,2,95,2,91,8,193,93, +8,252,1,10,95,9,8,252,1,10,2,92,18,100,2,93,8,196,36,35,34, +8,191,16,8,8,195,11,3,1,4,103,53,49,55,252,127,1,3,1,4,103, +53,49,56,252,128,1,3,1,4,103,53,49,57,252,129,1,3,1,7,101,110, +118,51,57,49,56,252,130,1,2,252,130,1,2,252,130,1,16,8,8,194,11, +2,98,2,252,104,1,2,252,25,1,3,1,7,101,110,118,51,57,49,57,252, +131,1,2,252,131,1,2,252,131,1,18,158,2,101,8,196,18,158,2,116,8, +196,18,158,9,8,196,18,158,2,101,8,196,18,100,2,82,8,199,36,35,34, +8,191,16,12,8,198,11,3,1,4,103,53,49,50,252,132,1,3,1,4,103, +53,49,51,252,133,1,3,1,4,103,53,49,52,252,134,1,3,1,4,103,53, +49,53,252,135,1,3,1,4,103,53,49,54,252,136,1,3,1,7,101,110,118, +51,57,51,53,252,137,1,2,252,137,1,2,252,137,1,2,252,137,1,2,252, +137,1,16,12,8,197,11,2,98,2,252,124,1,2,250,2,252,104,1,2,252, +25,1,3,1,7,101,110,118,51,57,51,54,252,138,1,2,252,138,1,2,252, +138,1,2,252,138,1,2,252,138,1,18,16,2,95,2,91,8,200,93,8,252, +4,10,95,9,8,252,4,10,2,92,18,158,2,93,8,199,18,16,2,95,2, +91,8,201,93,8,252,7,10,95,9,8,252,7,10,2,92,18,16,2,99,2, +113,8,206,93,8,252,7,10,16,6,8,205,11,2,140,2,141,3,1,7,101, +110,118,51,57,53,50,252,139,1,2,252,139,1,16,4,8,204,11,2,151,3, +1,7,101,110,118,51,57,53,51,252,140,1,16,4,8,203,11,2,153,3,1, +7,101,110,118,51,57,53,52,252,141,1,16,4,8,202,11,2,155,3,1,7, +101,110,118,51,57,53,54,252,142,1,95,9,8,252,7,10,2,92,18,102,2, +93,8,209,36,35,34,8,191,8,198,8,197,16,4,8,208,11,3,1,4,103, +53,50,50,252,143,1,3,1,7,101,110,118,51,57,52,56,252,144,1,16,4, +8,207,11,2,252,122,1,3,1,7,101,110,118,51,57,52,57,252,145,1,18, +158,2,101,8,209,18,158,2,116,8,209,18,158,2,101,8,209,18,158,2,101, +8,209,18,158,2,101,8,209,18,158,2,116,8,209,18,158,2,101,8,209,18, +158,2,101,8,209,18,158,2,252,123,1,8,209,18,158,2,101,8,209,18,158, +2,230,8,209,18,158,9,8,209,18,158,2,101,8,209,18,158,2,116,8,209, +18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,202,8,209,18,158,2, +101,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,252,63,1, +8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,252,63,1,8, +209,18,16,2,106,93,16,2,158,2,202,8,209,9,8,214,8,28,59,58,57, +56,55,13,16,4,33,2,133,2,92,11,93,8,252,7,10,16,6,8,213,11, +2,140,2,141,2,252,139,1,2,252,139,1,16,4,8,212,11,2,151,2,252, +140,1,16,4,8,211,11,2,153,2,252,141,1,16,4,8,210,11,64,118,97, +108,115,252,146,1,3,1,7,101,110,118,51,57,54,50,252,147,1,95,9,8, +252,7,10,2,92,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,101, +8,209,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2,101,8,209,18, +158,2,252,125,1,8,209,18,158,2,252,123,1,8,209,18,158,2,101,8,209, +18,158,2,230,8,209,18,158,9,8,209,18,158,2,101,8,209,18,16,2,105, +93,16,2,158,2,252,123,1,8,209,9,8,215,8,28,59,58,57,56,55,13, +16,4,33,2,133,2,92,11,93,8,252,7,10,8,213,8,212,8,211,95,9, +8,252,7,10,2,92,18,158,2,101,8,209,18,158,2,101,8,209,18,158,2, +101,8,209,18,16,2,158,94,16,2,98,2,252,122,1,8,219,93,8,252,3, +10,16,4,8,218,11,3,1,8,119,115,116,109,112,53,50,48,252,148,1,3, +1,7,101,110,118,51,57,52,51,252,149,1,16,4,8,217,11,3,1,4,103, +53,50,49,252,150,1,3,1,7,101,110,118,51,57,54,55,252,151,1,16,4, +8,216,11,2,222,3,1,7,101,110,118,51,57,54,56,252,152,1,9,16,2, +158,2,113,8,219,9,8,219,95,9,8,252,3,10,2,189,11,16,5,93,2, +58,89,162,32,33,8,43,9,223,0,27,249,22,209,20,15,159,35,32,39,196, +27,28,248,80,158,35,32,194,249,80,158,36,33,248,80,158,37,34,196,27,248, +80,158,38,35,197,28,248,80,158,38,32,193,249,80,158,39,33,248,80,158,40, +34,195,27,248,80,158,41,35,196,28,248,80,158,41,36,193,248,80,158,41,37, +193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,80,196, +249,80,158,39,38,200,27,249,22,61,197,198,27,20,15,159,41,33,39,250,22, +209,20,15,159,44,34,39,250,22,209,20,15,159,47,35,39,250,22,62,20,15, +159,50,36,39,250,22,209,20,15,159,53,37,39,248,22,60,250,22,209,20,15, +159,57,38,39,249,22,60,20,15,159,59,39,39,250,22,209,20,15,159,8,30, +40,39,250,22,62,20,15,159,8,33,41,39,250,22,209,20,15,159,8,36,42, +39,251,22,62,20,15,159,8,40,43,39,20,15,159,8,40,44,39,248,22,53, +23,33,248,22,52,23,33,20,15,159,8,36,45,39,20,15,159,8,33,46,39, +20,15,159,8,30,47,39,20,15,159,57,48,39,20,15,159,53,49,39,20,15, +159,50,50,39,20,15,159,47,51,39,195,250,22,252,39,2,11,6,10,10,98, +97,100,32,115,121,110,116,97,120,196,32,20,98,158,16,7,2,65,2,68,2, +70,2,72,2,78,2,80,2,122,16,20,18,98,2,82,8,221,36,35,34,16, +4,8,220,11,2,236,3,1,7,101,110,118,51,57,55,49,252,153,1,18,16, +2,95,2,91,8,222,93,8,252,18,10,95,9,8,252,18,10,2,92,18,100, +2,93,8,225,36,35,34,8,220,16,8,8,224,11,3,1,4,103,53,50,51, +252,154,1,3,1,4,103,53,50,52,252,155,1,3,1,4,103,53,50,53,252, +156,1,3,1,7,101,110,118,51,57,55,55,252,157,1,2,252,157,1,2,252, +157,1,16,8,8,223,11,2,98,2,234,2,235,3,1,7,101,110,118,51,57, +55,56,252,158,1,2,252,158,1,2,252,158,1,18,158,2,101,8,225,18,158, +2,252,61,1,8,225,18,158,2,101,8,225,18,158,2,101,8,225,18,158,96, +16,2,158,2,112,8,225,9,16,2,158,63,99,112,117,252,159,1,8,225,9, +16,2,158,64,117,115,101,114,252,160,1,8,225,9,16,2,158,62,103,99,252, +161,1,8,225,9,8,225,18,158,2,101,8,225,18,158,70,116,105,109,101,45, +97,112,112,108,121,252,162,1,8,225,18,158,2,101,8,225,18,158,2,230,8, +225,18,158,9,8,225,18,158,2,101,8,225,18,16,2,103,93,16,2,158,64, +110,117,108,108,252,163,1,8,225,9,8,227,8,28,59,58,57,56,55,13,16, +4,33,2,133,2,92,11,93,8,252,18,10,16,6,8,226,11,2,140,2,141, +3,1,7,101,110,118,51,57,56,51,252,164,1,2,252,164,1,95,9,8,252, +18,10,2,92,18,158,2,101,8,225,18,158,2,101,8,225,18,158,2,101,8, +225,18,16,2,158,94,16,2,158,97,16,2,158,66,112,114,105,110,116,102,252, +165,1,8,225,9,16,2,158,6,40,40,99,112,117,32,116,105,109,101,58,32, +126,115,32,114,101,97,108,32,116,105,109,101,58,32,126,115,32,103,99,32,116, +105,109,101,58,32,126,115,126,110,8,225,9,16,2,158,2,252,159,1,8,225, +9,16,2,158,2,252,160,1,8,225,9,16,2,158,2,252,161,1,8,225,9, +8,225,9,16,2,158,95,16,2,158,2,252,38,1,8,225,9,16,2,158,2, +252,39,1,8,225,9,16,2,158,2,112,8,225,9,8,225,9,8,227,95,9, +8,252,18,10,2,92,18,158,2,101,8,225,11,100,83,159,32,97,80,159,32, +32,33,80,159,32,33,33,80,159,32,34,33,80,159,32,35,33,80,159,32,36, +33,27,247,22,252,113,2,87,94,28,192,28,248,22,252,112,2,193,12,250,22, +252,40,2,2,252,107,1,6,15,15,105,110,115,112,101,99,116,111,114,32,111, +114,32,35,102,195,12,91,159,37,11,90,161,37,32,11,254,22,252,90,2,2, +85,11,33,32,11,9,204,252,22,7,197,198,199,250,22,252,92,2,203,32,61, +112,252,166,1,250,22,252,93,2,204,32,2,252,166,1,83,159,32,93,80,159, +32,37,33,89,162,32,33,39,2,14,223,0,87,94,28,248,80,159,33,34,34, +194,12,250,22,252,40,2,2,14,6,7,7,112,114,111,109,105,115,101,196,27, +248,80,159,34,35,34,195,28,248,22,0,193,27,249,22,6,195,22,59,87,94, +28,248,22,0,248,80,159,36,35,34,197,249,80,159,36,36,34,197,194,12,249, +22,1,22,7,248,80,159,37,35,34,198,249,22,1,22,7,194,83,159,32,93, +80,159,32,38,33,89,162,32,32,36,2,16,223,0,248,80,158,33,39,249,22, +19,11,80,158,35,40,83,159,32,93,80,159,32,41,33,89,162,32,34,40,2, +23,223,0,87,95,28,248,22,252,222,2,194,12,252,22,252,40,2,2,23,6, +16,16,112,97,114,97,109,101,116,101,114,105,122,97,116,105,111,110,32,198,199, +28,28,248,22,0,195,249,22,34,196,32,11,12,252,22,252,40,2,2,23,6, +19,19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41, +33,198,199,20,14,159,80,158,32,40,193,247,194,83,159,32,97,80,159,32,42, +33,80,159,32,43,33,80,159,32,44,33,80,159,32,45,33,80,159,32,46,33, +252,22,252,90,2,2,86,11,33,32,11,83,159,32,97,80,159,32,47,33,80, +159,32,48,33,80,159,32,49,33,80,159,32,50,33,80,159,32,51,33,27,247, +22,252,113,2,87,94,28,192,28,248,22,252,9,2,248,22,252,112,2,194,250, +22,252,40,2,2,252,107,1,6,15,15,105,110,115,112,101,99,116,111,114,32, +111,114,32,35,102,195,12,12,91,159,37,11,90,161,37,32,11,254,22,252,90, +2,2,86,11,33,32,11,9,204,252,22,7,197,198,199,250,22,252,92,2,203, +32,64,99,101,108,108,252,167,1,250,22,252,93,2,204,32,2,252,167,1,83, +159,32,93,80,159,32,52,33,89,162,32,32,36,2,45,223,0,248,80,159,33, +43,34,249,22,19,11,80,158,35,53,83,159,32,93,80,159,32,54,33,89,162, +32,34,40,2,49,223,0,87,95,28,248,80,159,33,44,34,194,12,252,22,252, +40,2,2,49,6,22,22,98,114,101,97,107,32,112,97,114,97,109,101,116,101, +114,105,122,97,116,105,111,110,32,198,199,28,28,248,22,0,195,249,22,34,196, +32,11,12,252,22,252,40,2,2,23,6,19,19,112,114,111,99,101,100,117,114, +101,32,40,97,114,105,116,121,32,48,41,33,198,199,83,158,36,20,93,94,20, +14,159,80,158,32,53,249,80,159,34,45,34,195,32,87,94,247,80,158,32,55, +247,194,247,80,158,32,55,96,68,35,37,107,101,114,110,101,108,252,168,1,2, +84,2,83,2,18,96,2,252,168,1,2,66,2,88,2,87,0}; + EVAL_ONE_SIZED_STR((char *)expr, 22318); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,252,150,1,252,115,49,159,32,20,98,158,16,1, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,252,150,1,252,143,49,159,32,20,98,158,16,1, 20,24,65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37,109, 105,115,99,1,29,2,11,11,10,10,10,44,80,158,32,32,20,98,158,16,47, 30,3,2,2,72,112,97,116,104,45,115,116,114,105,110,103,63,4,254,1,30, @@ -3383,27 +3382,27 @@ 248,80,158,41,37,193,11,11,11,28,192,27,248,22,52,194,27,248,22,78,195, 27,248,22,80,196,27,249,22,209,20,15,159,40,33,38,249,22,209,203,247,22, 48,27,249,22,209,20,15,159,41,34,38,249,22,209,204,247,22,48,27,249,22, -209,20,15,159,42,35,38,249,22,209,205,247,22,48,27,252,22,61,200,201,199, -202,198,27,20,15,159,42,36,38,250,22,209,20,15,159,45,37,38,250,22,209, +209,20,15,159,42,35,38,249,22,209,205,247,22,48,27,252,22,61,201,200,202, +199,198,27,20,15,159,42,36,38,250,22,209,20,15,159,45,37,38,250,22,209, 20,15,159,48,38,38,250,22,60,20,15,159,51,39,38,250,22,209,20,15,159, -54,40,38,248,22,60,250,22,209,20,15,159,58,41,38,249,22,56,248,22,52, +54,40,38,248,22,60,250,22,209,20,15,159,58,41,38,249,22,56,248,22,78, 23,20,20,15,159,8,28,42,38,20,15,159,58,43,38,20,15,159,54,44,38, 250,22,209,20,15,159,54,45,38,251,22,60,20,15,159,58,46,38,250,22,209, 20,15,159,8,29,47,38,248,22,60,250,22,209,20,15,159,8,33,48,38,249, -22,60,248,22,87,23,27,250,22,209,20,15,159,8,38,49,38,250,22,60,20, -15,159,8,41,50,38,248,22,90,23,33,250,22,209,20,15,159,8,44,51,38, +22,60,248,22,90,23,27,250,22,209,20,15,159,8,38,49,38,250,22,60,20, +15,159,8,41,50,38,248,22,87,23,33,250,22,209,20,15,159,8,44,51,38, 250,22,60,20,15,159,8,47,52,38,250,22,209,20,15,159,8,50,53,38,248, 22,60,250,22,209,20,15,159,8,54,54,38,249,22,60,248,22,89,23,48,250, 22,209,20,15,159,8,59,55,38,249,22,60,20,15,159,8,61,56,38,248,22, -52,23,53,20,15,159,8,59,57,38,20,15,159,8,54,58,38,20,15,159,8, +78,23,53,20,15,159,8,59,57,38,20,15,159,8,54,58,38,20,15,159,8, 50,59,38,250,22,209,20,15,159,8,50,8,28,38,251,22,62,20,15,159,8, -54,8,29,38,20,15,159,8,54,8,30,38,248,22,89,23,46,248,22,78,23, +54,8,29,38,20,15,159,8,54,8,30,38,248,22,89,23,46,248,22,52,23, 46,20,15,159,8,50,8,31,38,20,15,159,8,44,8,32,38,20,15,159,8, 38,8,33,38,20,15,159,8,33,8,34,38,20,15,159,8,29,8,35,38,250, 22,209,20,15,159,8,29,8,36,38,250,22,60,20,15,159,8,32,8,37,38, -248,22,52,23,24,250,22,209,20,15,159,8,35,8,38,38,249,22,60,20,15, -159,8,37,8,39,38,248,22,87,23,29,20,15,159,8,35,8,40,38,20,15, -159,8,29,8,41,38,248,22,87,23,18,20,15,159,54,8,42,38,20,15,159, +248,22,78,23,24,250,22,209,20,15,159,8,35,8,38,38,249,22,60,20,15, +159,8,37,8,39,38,248,22,90,23,29,20,15,159,8,35,8,40,38,20,15, +159,8,29,8,41,38,248,22,90,23,18,20,15,159,54,8,42,38,20,15,159, 48,8,43,38,195,250,22,252,39,2,11,6,10,10,98,97,100,32,115,121,110, 116,97,120,196,32,20,98,158,16,6,30,99,65,35,37,115,116,120,100,69,115, 116,120,45,112,97,105,114,63,101,11,30,102,2,100,67,99,111,110,115,47,35, @@ -3414,522 +3413,523 @@ 100,101,102,105,110,101,113,9,11,159,70,35,37,109,101,109,116,114,97,99,101, 114,9,11,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,115,9, 11,159,73,35,37,109,111,114,101,45,115,99,104,101,109,101,116,9,11,16,92, -2,10,2,2,2,79,2,2,2,61,2,2,2,20,2,2,2,83,2,2,2, -95,2,2,2,49,2,2,2,85,2,2,2,87,2,2,2,22,2,2,2,89, -2,2,2,57,2,2,2,53,2,2,2,40,2,2,2,16,2,2,2,71,2, -2,2,55,2,2,2,12,2,2,2,59,2,2,2,63,2,2,2,75,2,2, -2,98,2,2,2,28,2,2,2,77,2,2,2,69,2,2,2,97,2,2,2, -81,2,2,2,32,2,2,2,30,2,2,2,93,2,2,2,51,2,2,2,4, -2,2,2,47,2,2,2,6,2,2,2,65,2,2,2,91,2,2,2,34,2, -2,2,26,2,2,2,14,2,2,2,67,2,2,2,36,2,2,2,73,2,2, -2,38,2,2,2,24,2,2,2,8,2,2,2,18,2,2,98,35,10,33,11, +2,63,2,2,2,40,2,2,2,65,2,2,2,12,2,2,2,71,2,2,2, +77,2,2,2,49,2,2,2,32,2,2,2,30,2,2,2,4,2,2,2,98, +2,2,2,95,2,2,2,6,2,2,2,18,2,2,2,47,2,2,2,20,2, +2,2,34,2,2,2,14,2,2,2,16,2,2,2,97,2,2,2,28,2,2, +2,36,2,2,2,73,2,2,2,38,2,2,2,51,2,2,2,69,2,2,2, +8,2,2,2,75,2,2,2,10,2,2,2,61,2,2,2,79,2,2,2,81, +2,2,2,24,2,2,2,91,2,2,2,93,2,2,2,83,2,2,2,85,2, +2,2,87,2,2,2,22,2,2,2,89,2,2,2,53,2,2,2,67,2,2, +2,55,2,2,2,57,2,2,2,26,2,2,2,59,2,2,98,35,10,33,11, 94,159,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101,117,9, 11,159,2,100,9,11,16,0,96,34,8,254,1,11,16,0,16,4,33,11,61, -120,118,3,1,7,101,110,118,52,48,48,52,119,18,100,2,112,41,36,35,34, +120,118,3,1,7,101,110,118,52,48,48,56,119,18,100,2,112,41,36,35,34, 33,16,8,40,11,3,1,4,103,53,50,54,120,3,1,4,103,53,50,55,121, -3,1,4,103,53,50,56,122,3,1,7,101,110,118,52,48,49,48,123,2,123, +3,1,4,103,53,50,56,122,3,1,7,101,110,118,52,48,49,52,123,2,123, 2,123,16,8,39,11,61,95,124,64,97,114,103,115,125,64,98,111,100,121,126, -3,1,7,101,110,118,52,48,49,49,127,2,127,2,127,18,158,2,112,41,18, -158,2,112,41,18,16,2,95,66,115,114,99,116,97,103,128,42,93,8,252,66, -10,95,9,8,252,66,10,69,35,37,115,116,120,99,97,115,101,129,18,106,64, +3,1,7,101,110,118,52,48,49,53,127,2,127,2,127,18,158,2,112,41,18, +158,2,112,41,18,16,2,95,66,115,114,99,116,97,103,128,42,93,8,252,67, +10,95,9,8,252,67,10,69,35,37,115,116,120,99,97,115,101,129,18,106,64, 100,101,115,116,130,49,36,35,34,33,40,39,16,4,48,11,3,1,4,103,53, -51,51,131,3,1,7,101,110,118,52,48,50,51,132,16,4,47,11,68,99,111, -110,116,109,97,114,107,133,3,1,7,101,110,118,52,48,50,52,134,16,4,46, -11,3,1,4,103,53,51,53,135,3,1,7,101,110,118,52,48,51,51,136,16, -4,45,11,64,102,117,110,99,137,3,1,7,101,110,118,52,48,51,52,138,16, -4,44,11,3,1,4,103,53,51,55,139,3,1,7,101,110,118,52,48,52,51, +51,51,131,3,1,7,101,110,118,52,48,50,55,132,16,4,47,11,68,99,111, +110,116,109,97,114,107,133,3,1,7,101,110,118,52,48,50,56,134,16,4,46, +11,3,1,4,103,53,51,53,135,3,1,7,101,110,118,52,48,51,55,136,16, +4,45,11,64,102,117,110,99,137,3,1,7,101,110,118,52,48,51,56,138,16, +4,44,11,3,1,4,103,53,51,55,139,3,1,7,101,110,118,52,48,52,55, 140,16,4,43,11,67,110,101,119,109,97,114,107,141,3,1,7,101,110,118,52, -48,52,52,142,18,158,63,99,116,120,143,49,18,158,63,108,101,116,144,49,18, +48,52,56,142,18,158,63,99,116,120,143,49,18,158,63,108,101,116,144,49,18, 158,2,143,49,18,158,2,143,49,18,16,2,103,93,16,2,158,11,49,9,57, -98,56,10,32,11,94,159,2,115,9,11,159,2,100,9,11,16,6,66,115,121, -110,116,97,120,145,29,146,11,11,1,20,101,108,108,105,112,115,105,115,45,99, -111,117,110,116,45,101,114,114,111,114,147,2,146,73,115,121,110,116,97,120,45, -99,97,115,101,42,42,148,2,146,98,55,10,33,11,95,159,64,35,37,115,99, +98,56,10,32,11,94,159,2,115,9,11,159,2,100,9,11,16,6,1,20,101, +108,108,105,112,115,105,115,45,99,111,117,110,116,45,101,114,114,111,114,145,29, +146,11,11,73,115,121,110,116,97,120,45,99,97,115,101,42,42,147,2,146,66, +115,121,110,116,97,120,148,2,146,98,55,10,33,11,95,159,64,35,37,115,99, 149,9,11,159,2,115,9,11,159,2,100,9,11,16,0,96,54,8,254,1,11, 16,0,16,4,53,11,2,118,3,1,6,101,110,118,51,56,49,150,16,4,52, 11,68,104,101,114,101,45,115,116,120,151,3,1,6,101,110,118,51,56,51,152, -16,4,51,11,2,151,2,152,13,16,3,33,2,146,2,129,93,8,252,66,10, -16,6,50,11,61,114,153,63,115,114,99,154,3,1,7,101,110,118,52,48,52, -55,155,2,155,95,9,8,252,66,10,2,129,18,158,2,143,49,18,158,2,143, -49,18,158,2,143,49,18,158,2,144,49,18,158,2,143,49,18,158,2,143,49, -18,158,2,143,49,18,158,66,108,97,109,98,100,97,156,49,18,158,2,143,49, -18,158,2,144,49,18,158,2,143,49,18,158,2,143,49,18,158,2,143,49,18, -158,1,31,117,110,105,111,110,101,100,45,109,101,109,116,114,97,99,101,45,116, -114,97,99,107,105,110,103,45,118,97,108,117,101,157,49,18,158,2,143,49,18, -158,2,143,49,18,158,2,143,49,18,158,2,143,49,18,158,1,22,119,105,116, -104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,158,49, -18,158,1,30,109,101,109,111,114,121,45,116,114,97,99,101,45,99,111,110,116, -105,110,117,97,116,105,111,110,45,109,97,114,107,159,49,18,158,2,143,49,18, -158,2,143,49,18,158,2,143,49,18,158,2,143,49,18,158,2,143,49,18,158, -2,143,49,18,158,64,115,101,116,33,160,49,18,158,2,143,49,18,158,1,30, -110,101,119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110,103, -45,102,117,110,99,116,105,111,110,161,49,18,158,2,143,49,18,158,2,143,49, -18,158,2,143,49,18,158,2,143,49,11,134,83,159,32,93,80,159,32,32,33, -89,162,32,33,36,2,4,222,27,248,22,252,24,3,194,28,192,192,28,248,22, -252,136,1,194,27,248,22,252,37,3,195,28,192,192,248,22,252,38,3,195,11, -83,159,32,93,80,159,32,33,33,248,22,252,62,3,5,12,40,91,46,93,91, -94,46,93,42,124,41,36,83,159,32,93,80,159,32,34,33,89,162,32,34,45, -2,8,223,0,87,95,28,27,248,22,252,24,3,195,28,192,192,28,248,22,252, -136,1,195,27,248,22,252,37,3,196,28,192,192,248,22,252,38,3,196,11,12, -252,22,252,40,2,2,8,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,32,198,199,28,28,248,22, -252,136,1,195,10,248,22,252,188,1,195,12,252,22,252,40,2,2,8,6,21, -21,115,116,114,105,110,103,32,111,114,32,98,121,116,101,32,115,116,114,105,110, -103,33,198,199,91,159,35,11,90,161,35,32,11,248,22,252,36,3,197,87,94, -28,192,12,250,22,252,41,2,2,8,6,36,36,99,97,110,110,111,116,32,97, -100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111,111,116, -32,112,97,116,104,58,32,199,27,248,22,252,28,3,250,22,252,70,3,80,159, -40,33,34,248,22,252,26,3,199,28,248,22,252,136,1,203,249,22,252,212,1, -204,8,63,202,28,248,22,252,24,3,194,249,22,252,35,3,195,194,192,83,159, -32,93,80,159,32,35,33,249,22,252,138,1,7,92,7,92,83,159,32,93,80, -159,32,36,33,89,162,32,33,43,2,12,223,0,87,94,28,27,248,22,252,24, -3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,37,3,196,28,192, -192,248,22,252,38,3,196,11,12,250,22,252,40,2,76,110,111,114,109,97,108, -45,112,97,116,104,45,99,97,115,101,162,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,196,28,249, -22,252,11,2,247,22,252,219,1,67,119,105,110,100,111,119,115,163,27,28,248, -22,252,136,1,195,194,248,22,252,25,3,195,28,249,22,252,65,3,0,21,35, -114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34,194, -28,248,22,252,136,1,195,248,22,252,27,3,195,194,27,248,22,252,175,1,194, -248,22,252,27,3,250,22,252,71,3,0,6,35,114,120,34,47,34,28,249,22, -252,65,3,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91,47, -92,92,93,42,36,34,198,196,250,22,252,71,3,0,19,35,114,120,34,91,32, -46,93,43,40,91,47,92,92,93,42,41,36,34,199,6,2,2,92,49,80,159, -38,35,34,28,249,22,252,11,2,247,22,252,219,1,65,109,97,99,111,115,164, -248,22,252,27,3,248,22,252,175,1,28,248,22,252,136,1,196,195,248,22,252, -25,3,196,28,248,22,252,136,1,194,248,22,252,27,3,194,193,83,159,32,93, -80,159,32,37,33,91,159,34,11,90,161,33,33,11,89,162,32,33,36,65,99, -104,101,99,107,165,222,28,248,22,130,193,12,250,22,252,40,2,2,14,6,4, -4,114,101,97,108,195,20,12,95,33,89,162,32,34,44,2,14,224,0,1,87, -95,248,193,195,248,193,196,27,248,22,176,197,27,249,22,173,198,195,27,249,22, -172,199,196,28,249,22,181,199,199,28,250,22,184,196,32,195,28,248,22,133,198, -32,0,3,48,46,48,28,248,22,188,194,248,22,173,249,199,248,22,173,196,248, -22,173,197,249,198,195,194,0,6,43,110,97,110,46,48,89,162,32,34,46,72, -102,105,110,100,45,98,101,116,119,101,101,110,166,223,0,28,248,22,132,194,193, -27,248,22,144,195,27,248,22,144,197,28,249,22,182,195,194,248,22,170,194,249, -22,172,195,248,22,175,249,199,248,22,175,249,22,173,204,201,248,22,175,249,22, -173,203,201,83,159,32,93,80,159,32,38,33,89,162,32,32,39,2,16,222,91, -159,36,11,90,161,33,32,11,83,160,38,32,33,11,90,161,33,33,11,83,160, -38,32,33,11,90,161,33,34,11,83,160,38,32,33,11,90,161,33,35,11,89, -162,32,32,33,1,24,114,101,112,45,101,114,114,111,114,45,101,115,99,97,112, -101,45,104,97,110,100,108,101,114,167,223,1,247,207,250,22,31,89,162,32,32, -36,9,225,6,5,3,90,161,33,32,10,247,22,252,44,2,90,161,33,33,10, -247,22,252,31,2,87,94,248,22,252,44,2,195,248,22,252,31,2,11,89,162, -32,32,35,9,224,5,4,248,22,8,89,162,32,33,36,9,224,2,1,247,91, -159,33,11,20,12,95,33,192,89,162,32,32,37,69,114,101,112,108,45,108,111, -111,112,168,226,2,1,3,0,87,94,248,22,8,89,162,32,33,39,9,225,4, -3,2,250,22,31,89,162,32,32,36,9,225,5,4,6,87,94,248,22,252,31, -2,210,90,161,33,33,10,192,12,89,162,32,32,36,9,223,3,27,247,247,22, -40,87,94,28,248,22,252,70,1,193,248,194,12,12,249,22,6,89,162,32,32, -35,9,223,2,248,247,22,252,32,2,28,248,22,206,194,248,22,252,30,2,194, -193,89,162,33,33,35,9,222,249,22,3,247,22,39,194,89,162,32,32,35,9, -224,5,4,90,161,33,33,10,247,22,252,31,2,87,94,248,22,252,31,2,11, -90,161,33,32,10,11,12,247,192,89,162,32,32,36,9,225,5,4,3,87,95, -248,22,252,44,2,208,248,22,252,31,2,210,90,161,33,33,10,11,90,161,33, -32,10,11,12,83,159,32,93,80,159,32,39,33,89,162,32,33,43,2,18,222, -87,94,28,27,248,22,252,24,3,194,28,192,192,28,248,22,252,136,1,194,27, -248,22,252,37,3,195,28,192,192,248,22,252,38,3,195,11,12,250,22,252,40, -2,2,18,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103,32, -40,115,97,110,115,32,110,117,108,41,195,91,159,35,11,90,161,35,32,11,248, -22,252,36,3,196,28,194,248,22,252,186,2,249,22,252,160,2,248,22,252,165, -1,249,22,252,184,1,6,36,36,108,111,97,100,47,99,100,58,32,99,97,110, -110,111,116,32,111,112,101,110,32,97,32,100,105,114,101,99,116,111,114,121,58, -32,126,115,201,247,22,15,28,248,22,252,24,3,193,87,94,28,248,22,252,30, -3,193,12,248,22,252,186,2,249,22,252,160,2,248,22,252,165,1,250,22,252, -184,1,6,65,65,108,111,97,100,47,99,100,58,32,100,105,114,101,99,116,111, -114,121,32,111,102,32,126,115,32,100,111,101,115,32,110,111,116,32,101,120,105, -115,116,32,40,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114,121, -32,105,115,32,126,115,41,202,247,22,252,54,3,247,22,15,27,247,22,252,54, -3,250,22,31,89,162,32,32,34,9,223,4,248,22,252,54,3,193,89,162,32, -32,34,9,223,5,248,22,252,88,1,193,89,162,32,32,34,9,223,3,248,22, -252,54,3,193,248,22,252,88,1,196,83,159,32,93,80,159,32,40,33,89,162, -32,35,39,2,20,222,87,94,28,27,248,22,252,24,3,196,28,192,192,28,248, -22,252,136,1,196,27,248,22,252,37,3,197,28,192,192,248,22,252,38,3,197, -11,12,250,22,252,40,2,196,6,25,25,112,97,116,104,32,111,114,32,115,116, -114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,197,28,248,22,252,39, -3,195,248,193,195,27,247,22,252,90,1,248,194,28,193,249,22,252,40,3,198, -195,196,83,159,32,93,80,159,32,41,33,89,162,32,33,37,2,22,223,0,250, -80,159,35,40,34,22,252,88,1,2,22,196,83,159,32,93,80,159,32,42,33, -89,162,32,33,37,2,24,223,0,250,80,159,35,40,34,22,252,58,3,2,24, -196,83,159,32,93,80,159,32,43,33,27,248,22,252,62,3,248,22,252,211,1, -27,27,247,22,252,219,1,28,249,22,72,194,21,96,64,117,110,105,120,169,64, -98,101,111,115,170,65,111,115,107,105,116,171,66,109,97,99,111,115,120,172,6, -1,1,58,28,249,22,72,194,21,94,2,163,2,164,6,1,1,59,12,250,22, -252,184,1,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41,195, -195,27,89,162,32,35,38,69,99,111,110,115,45,112,97,116,104,173,222,28,249, -22,252,194,1,195,5,0,249,22,65,194,196,249,22,51,248,22,252,28,3,196, -196,89,162,32,34,39,2,26,224,0,1,87,95,28,28,248,22,252,188,1,195, -10,248,22,252,136,1,195,12,250,22,252,40,2,2,26,6,21,21,98,121,116, -101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,197,28,28, -248,22,58,196,249,22,4,22,252,24,3,197,11,12,250,22,252,40,2,2,26, -6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,198,248,91,159,33, -11,20,12,95,33,192,89,162,32,33,43,64,108,111,111,112,174,226,3,2,5, -0,27,249,22,252,64,3,197,199,28,192,250,199,197,248,22,78,196,248,197,248, -22,87,197,250,199,197,200,9,28,248,22,252,136,1,196,248,22,252,211,1,196, -195,83,159,32,93,80,159,32,44,33,83,158,35,20,92,96,2,28,89,162,32, -35,43,9,223,0,87,95,28,27,248,22,252,24,3,195,28,192,192,28,248,22, +16,4,51,11,2,151,2,152,13,16,4,33,2,146,2,129,11,93,8,252,67, +10,16,6,50,11,61,114,153,63,115,114,99,154,3,1,7,101,110,118,52,48, +53,49,155,2,155,95,9,8,252,67,10,2,129,18,158,2,143,49,18,158,2, +143,49,18,158,2,143,49,18,158,2,144,49,18,158,2,143,49,18,158,2,143, +49,18,158,2,143,49,18,158,66,108,97,109,98,100,97,156,49,18,158,2,143, +49,18,158,2,144,49,18,158,2,143,49,18,158,2,143,49,18,158,2,143,49, +18,158,1,31,117,110,105,111,110,101,100,45,109,101,109,116,114,97,99,101,45, +116,114,97,99,107,105,110,103,45,118,97,108,117,101,157,49,18,158,2,143,49, +18,158,2,143,49,18,158,2,143,49,18,158,2,143,49,18,158,1,22,119,105, +116,104,45,99,111,110,116,105,110,117,97,116,105,111,110,45,109,97,114,107,158, +49,18,158,1,30,109,101,109,111,114,121,45,116,114,97,99,101,45,99,111,110, +116,105,110,117,97,116,105,111,110,45,109,97,114,107,159,49,18,158,2,143,49, +18,158,2,143,49,18,158,2,143,49,18,158,2,143,49,18,158,2,143,49,18, +158,2,143,49,18,158,64,115,101,116,33,160,49,18,158,2,143,49,18,158,1, +30,110,101,119,45,109,101,109,116,114,97,99,101,45,116,114,97,99,107,105,110, +103,45,102,117,110,99,116,105,111,110,161,49,18,158,2,143,49,18,158,2,143, +49,18,158,2,143,49,18,158,2,143,49,11,134,83,159,32,93,80,159,32,32, +33,89,162,32,33,36,2,4,222,27,248,22,252,24,3,194,28,192,192,28,248, +22,252,136,1,194,27,248,22,252,37,3,195,28,192,192,248,22,252,38,3,195, +11,83,159,32,93,80,159,32,33,33,248,22,252,62,3,5,12,40,91,46,93, +91,94,46,93,42,124,41,36,83,159,32,93,80,159,32,34,33,89,162,32,34, +45,2,8,223,0,87,95,28,27,248,22,252,24,3,195,28,192,192,28,248,22, 252,136,1,195,27,248,22,252,37,3,196,28,192,192,248,22,252,38,3,196,11, -12,250,22,252,40,2,2,28,6,25,25,112,97,116,104,32,111,114,32,115,116, -114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196,28,28,194,28,27, -248,22,252,24,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252,37, -3,197,28,192,192,248,22,252,38,3,197,11,248,22,252,37,3,195,11,10,12, -250,22,252,40,2,2,28,6,29,29,35,102,32,111,114,32,114,101,108,97,116, -105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,197,91,159, -33,11,20,12,95,33,28,28,248,22,252,37,3,195,91,159,35,11,90,161,35, -32,11,248,22,252,36,3,198,249,22,252,11,2,194,68,114,101,108,97,116,105, -118,101,175,11,27,248,22,252,217,1,6,4,4,80,65,84,72,27,89,162,32, -33,36,67,119,105,110,45,97,100,100,176,222,28,249,22,252,11,2,247,22,252, -219,1,2,163,249,22,51,248,22,252,28,3,5,1,46,194,192,248,91,159,33, -11,20,12,95,33,192,89,162,32,33,43,2,174,225,6,4,0,28,248,22,57, -196,11,27,248,22,252,40,3,248,22,52,198,27,249,22,252,35,3,195,198,28, -248,22,252,29,3,193,248,196,193,27,248,22,53,199,28,248,22,57,193,11,27, -248,22,252,40,3,248,22,52,195,27,249,22,252,35,3,195,201,28,248,22,252, -29,3,193,248,199,193,248,198,248,22,53,196,28,194,248,194,249,80,159,39,43, -34,197,9,9,27,248,22,252,40,3,196,28,248,22,252,29,3,193,248,194,193, -11,89,162,32,33,45,70,102,111,117,110,100,45,101,120,101,99,177,225,4,3, -0,28,193,91,159,35,11,90,161,35,32,11,248,22,252,36,3,199,27,28,198, -27,248,22,252,41,3,201,28,249,22,252,13,2,194,202,11,28,248,22,252,37, -3,193,248,198,249,22,252,35,3,197,195,248,198,193,11,28,192,192,27,28,248, -22,252,24,3,195,27,249,22,252,35,3,197,201,28,28,248,22,252,30,3,193, -10,248,22,252,29,3,193,192,11,11,28,192,192,28,199,11,27,248,22,252,41, -3,202,28,249,22,252,13,2,194,203,11,28,248,22,252,37,3,193,248,199,249, -22,252,35,3,198,195,248,199,193,195,89,162,32,34,38,9,223,0,250,80,158, -35,44,196,197,11,89,162,32,33,37,9,223,0,250,80,158,35,44,196,11,11, -83,159,32,93,80,159,32,45,33,89,162,32,34,41,2,30,222,87,94,28,27, -248,22,252,24,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,37, -3,196,28,192,192,248,22,252,38,3,196,11,12,250,22,252,40,2,195,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,196,28,248,22,252,37,3,194,12,248,22,252,186,2,249,22, -252,130,2,248,22,252,165,1,250,22,252,184,1,6,29,29,126,97,58,32,105, -110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104,58, -32,126,115,199,200,247,22,15,83,159,32,93,80,159,32,46,33,89,162,32,35, -38,2,32,223,0,87,94,249,80,159,34,45,34,195,196,249,22,3,89,162,32, -33,37,9,224,2,3,249,80,159,35,45,34,194,196,197,83,159,32,93,80,159, -32,47,33,89,162,32,35,38,2,34,222,27,247,22,252,55,3,248,91,159,33, -11,20,12,95,33,192,89,162,32,33,49,65,99,108,111,111,112,178,227,5,4, -3,2,0,28,248,22,57,198,248,22,252,186,2,249,22,252,160,2,248,22,252, -165,1,251,22,252,184,1,6,42,42,126,97,58,32,99,111,108,108,101,99,116, -105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110,32, -97,110,121,32,111,102,58,32,126,115,202,28,248,22,57,205,203,250,22,1,22, -252,35,3,206,23,15,201,247,22,15,27,249,22,252,35,3,248,22,52,201,198, -28,248,22,252,30,3,193,27,250,22,1,22,252,35,3,196,201,28,248,22,252, -30,3,193,192,248,195,248,22,53,201,248,194,248,22,53,200,193,83,159,32,93, -80,159,32,48,33,27,247,22,252,219,1,28,249,22,252,11,2,194,2,163,5, -4,46,100,108,108,28,249,22,72,194,21,94,2,172,2,164,5,6,46,100,121, -108,105,98,5,3,46,115,111,83,159,32,93,80,159,32,49,33,249,80,159,34, -34,34,248,22,252,28,3,5,10,95,108,111,97,100,101,114,46,115,115,80,159, -34,48,34,83,159,32,93,80,159,32,50,33,249,22,252,220,2,27,27,89,162, -32,35,41,67,100,97,116,101,62,61,63,179,222,28,193,27,249,22,5,89,162, -32,33,39,9,223,4,27,248,194,195,27,250,22,252,49,3,196,11,89,162,40, -32,32,9,222,11,28,192,249,22,51,195,194,11,195,27,28,196,11,193,28,192, -192,28,193,28,196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11,11, -11,89,162,32,34,8,31,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,180,224,4,0,87,94,28,27, -248,22,252,24,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252,37, -3,197,28,192,192,248,22,252,38,3,197,11,12,250,22,252,40,2,2,49,6, +12,252,22,252,40,2,2,8,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,32,198,199,28,28,248, +22,252,136,1,195,10,248,22,252,188,1,195,12,252,22,252,40,2,2,8,6, +21,21,115,116,114,105,110,103,32,111,114,32,98,121,116,101,32,115,116,114,105, +110,103,33,198,199,91,159,35,11,90,161,35,32,11,248,22,252,36,3,197,87, +94,28,192,12,250,22,252,41,2,2,8,6,36,36,99,97,110,110,111,116,32, +97,100,100,32,97,32,115,117,102,102,105,120,32,116,111,32,97,32,114,111,111, +116,32,112,97,116,104,58,32,199,27,248,22,252,28,3,250,22,252,70,3,80, +159,40,33,34,248,22,252,26,3,199,28,248,22,252,136,1,203,249,22,252,212, +1,204,8,63,202,28,248,22,252,24,3,194,249,22,252,35,3,195,194,192,83, +159,32,93,80,159,32,35,33,249,22,252,138,1,7,92,7,92,83,159,32,93, +80,159,32,36,33,89,162,32,33,43,2,12,223,0,87,94,28,27,248,22,252, +24,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252,37,3,196,28, +192,192,248,22,252,38,3,196,11,12,250,22,252,40,2,76,110,111,114,109,97, +108,45,112,97,116,104,45,99,97,115,101,162,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,196,28, +249,22,252,11,2,247,22,252,219,1,67,119,105,110,100,111,119,115,163,27,28, +248,22,252,136,1,195,194,248,22,252,25,3,195,28,249,22,252,65,3,0,21, +35,114,120,34,94,91,92,92,93,91,92,92,93,91,63,93,91,92,92,93,34, +194,28,248,22,252,136,1,195,248,22,252,27,3,195,194,27,248,22,252,175,1, +194,248,22,252,27,3,250,22,252,71,3,0,6,35,114,120,34,47,34,28,249, +22,252,65,3,0,22,35,114,120,34,91,47,92,92,93,91,46,32,93,43,91, +47,92,92,93,42,36,34,198,196,250,22,252,71,3,0,19,35,114,120,34,91, +32,46,93,43,40,91,47,92,92,93,42,41,36,34,199,6,2,2,92,49,80, +159,38,35,34,28,249,22,252,11,2,247,22,252,219,1,65,109,97,99,111,115, +164,248,22,252,27,3,248,22,252,175,1,28,248,22,252,136,1,196,195,248,22, +252,25,3,196,28,248,22,252,136,1,194,248,22,252,27,3,194,193,83,159,32, +93,80,159,32,37,33,91,159,34,11,90,161,33,33,11,89,162,32,33,36,65, +99,104,101,99,107,165,222,28,248,22,130,193,12,250,22,252,40,2,2,14,6, +4,4,114,101,97,108,195,20,12,95,33,89,162,32,34,44,2,14,224,0,1, +87,95,248,193,195,248,193,196,27,248,22,176,197,27,249,22,173,198,195,27,249, +22,172,199,196,28,249,22,181,199,199,28,250,22,184,196,32,195,28,248,22,133, +198,32,0,3,48,46,48,28,248,22,188,194,248,22,173,249,199,248,22,173,196, +248,22,173,197,249,198,195,194,0,6,43,110,97,110,46,48,89,162,32,34,46, +72,102,105,110,100,45,98,101,116,119,101,101,110,166,223,0,28,248,22,132,194, +193,27,248,22,144,195,27,248,22,144,197,28,249,22,182,195,194,248,22,170,194, +249,22,172,195,248,22,175,249,199,248,22,175,249,22,173,204,201,248,22,175,249, +22,173,203,201,83,159,32,93,80,159,32,38,33,89,162,32,32,39,2,16,222, +91,159,36,11,90,161,33,32,11,83,160,38,32,33,11,90,161,33,33,11,83, +160,38,32,33,11,90,161,33,34,11,83,160,38,32,33,11,90,161,33,35,11, +89,162,32,32,33,1,24,114,101,112,45,101,114,114,111,114,45,101,115,99,97, +112,101,45,104,97,110,100,108,101,114,167,223,1,247,207,250,22,31,89,162,32, +32,36,9,225,6,5,3,90,161,33,32,10,247,22,252,44,2,90,161,33,33, +10,247,22,252,31,2,87,94,248,22,252,44,2,195,248,22,252,31,2,11,89, +162,32,32,35,9,224,5,4,248,22,8,89,162,32,33,36,9,224,2,1,247, +91,159,33,11,20,12,95,33,192,89,162,32,32,37,69,114,101,112,108,45,108, +111,111,112,168,226,2,1,3,0,87,94,248,22,8,89,162,32,33,39,9,225, +4,3,2,250,22,31,89,162,32,32,36,9,225,5,4,6,87,94,248,22,252, +31,2,210,90,161,33,33,10,192,12,89,162,32,32,36,9,223,3,27,247,247, +22,40,87,94,28,248,22,252,70,1,193,248,194,12,12,249,22,6,89,162,32, +32,35,9,223,2,248,247,22,252,32,2,28,248,22,206,194,248,22,252,30,2, +194,193,89,162,33,33,35,9,222,249,22,3,247,22,39,194,89,162,32,32,35, +9,224,5,4,90,161,33,33,10,247,22,252,31,2,87,94,248,22,252,31,2, +11,90,161,33,32,10,11,12,247,192,89,162,32,32,36,9,225,5,4,3,87, +95,248,22,252,44,2,208,248,22,252,31,2,210,90,161,33,33,10,11,90,161, +33,32,10,11,12,83,159,32,93,80,159,32,39,33,89,162,32,33,43,2,18, +222,87,94,28,27,248,22,252,24,3,194,28,192,192,28,248,22,252,136,1,194, +27,248,22,252,37,3,195,28,192,192,248,22,252,38,3,195,11,12,250,22,252, +40,2,2,18,6,25,25,112,97,116,104,32,111,114,32,115,116,114,105,110,103, +32,40,115,97,110,115,32,110,117,108,41,195,91,159,35,11,90,161,35,32,11, +248,22,252,36,3,196,28,194,248,22,252,186,2,249,22,252,160,2,248,22,252, +165,1,249,22,252,184,1,6,36,36,108,111,97,100,47,99,100,58,32,99,97, +110,110,111,116,32,111,112,101,110,32,97,32,100,105,114,101,99,116,111,114,121, +58,32,126,115,201,247,22,15,28,248,22,252,24,3,193,87,94,28,248,22,252, +30,3,193,12,248,22,252,186,2,249,22,252,160,2,248,22,252,165,1,250,22, +252,184,1,6,65,65,108,111,97,100,47,99,100,58,32,100,105,114,101,99,116, +111,114,121,32,111,102,32,126,115,32,100,111,101,115,32,110,111,116,32,101,120, +105,115,116,32,40,99,117,114,114,101,110,116,32,100,105,114,101,99,116,111,114, +121,32,105,115,32,126,115,41,202,247,22,252,54,3,247,22,15,27,247,22,252, +54,3,250,22,31,89,162,32,32,34,9,223,4,248,22,252,54,3,193,89,162, +32,32,34,9,223,5,248,22,252,88,1,193,89,162,32,32,34,9,223,3,248, +22,252,54,3,193,248,22,252,88,1,196,83,159,32,93,80,159,32,40,33,89, +162,32,35,39,2,20,222,87,94,28,27,248,22,252,24,3,196,28,192,192,28, +248,22,252,136,1,196,27,248,22,252,37,3,197,28,192,192,248,22,252,38,3, +197,11,12,250,22,252,40,2,196,6,25,25,112,97,116,104,32,111,114,32,115, +116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,197,28,248,22,252, +39,3,195,248,193,195,27,247,22,252,90,1,248,194,28,193,249,22,252,40,3, +198,195,196,83,159,32,93,80,159,32,41,33,89,162,32,33,37,2,22,223,0, +250,80,159,35,40,34,22,252,88,1,2,22,196,83,159,32,93,80,159,32,42, +33,89,162,32,33,37,2,24,223,0,250,80,159,35,40,34,22,252,58,3,2, +24,196,83,159,32,93,80,159,32,43,33,27,248,22,252,62,3,248,22,252,211, +1,27,27,247,22,252,219,1,28,249,22,72,194,21,96,64,117,110,105,120,169, +64,98,101,111,115,170,65,111,115,107,105,116,171,66,109,97,99,111,115,120,172, +6,1,1,58,28,249,22,72,194,21,94,2,163,2,164,6,1,1,59,12,250, +22,252,184,1,6,14,14,40,91,94,126,97,93,42,41,126,97,40,46,42,41, +195,195,27,89,162,32,35,38,69,99,111,110,115,45,112,97,116,104,173,222,28, +249,22,252,194,1,195,5,0,249,22,65,194,196,249,22,51,248,22,252,28,3, +196,196,89,162,32,34,39,2,26,224,0,1,87,95,28,28,248,22,252,188,1, +195,10,248,22,252,136,1,195,12,250,22,252,40,2,2,26,6,21,21,98,121, +116,101,32,115,116,114,105,110,103,32,111,114,32,115,116,114,105,110,103,197,28, +28,248,22,58,196,249,22,4,22,252,24,3,197,11,12,250,22,252,40,2,2, +26,6,13,13,108,105,115,116,32,111,102,32,112,97,116,104,115,198,248,91,159, +33,11,20,12,95,33,192,89,162,32,33,43,64,108,111,111,112,174,226,3,2, +5,0,27,249,22,252,64,3,197,199,28,192,250,199,197,248,22,78,196,248,197, +248,22,87,197,250,199,197,200,9,28,248,22,252,136,1,196,248,22,252,211,1, +196,195,83,159,32,93,80,159,32,44,33,83,158,35,20,92,96,2,28,89,162, +32,35,43,9,223,0,87,95,28,27,248,22,252,24,3,195,28,192,192,28,248, +22,252,136,1,195,27,248,22,252,37,3,196,28,192,192,248,22,252,38,3,196, +11,12,250,22,252,40,2,2,28,6,25,25,112,97,116,104,32,111,114,32,115, +116,114,105,110,103,32,40,115,97,110,115,32,110,117,108,41,196,28,28,194,28, +27,248,22,252,24,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252, +37,3,197,28,192,192,248,22,252,38,3,197,11,248,22,252,37,3,195,11,10, +12,250,22,252,40,2,2,28,6,29,29,35,102,32,111,114,32,114,101,108,97, +116,105,118,101,32,112,97,116,104,32,111,114,32,115,116,114,105,110,103,197,91, +159,33,11,20,12,95,33,28,28,248,22,252,37,3,195,91,159,35,11,90,161, +35,32,11,248,22,252,36,3,198,249,22,252,11,2,194,68,114,101,108,97,116, +105,118,101,175,11,27,248,22,252,217,1,6,4,4,80,65,84,72,27,89,162, +32,33,36,67,119,105,110,45,97,100,100,176,222,28,249,22,252,11,2,247,22, +252,219,1,2,163,249,22,51,248,22,252,28,3,5,1,46,194,192,248,91,159, +33,11,20,12,95,33,192,89,162,32,33,43,2,174,225,6,4,0,28,248,22, +57,196,11,27,248,22,252,40,3,248,22,52,198,27,249,22,252,35,3,195,198, +28,248,22,252,29,3,193,248,196,193,27,248,22,53,199,28,248,22,57,193,11, +27,248,22,252,40,3,248,22,52,195,27,249,22,252,35,3,195,201,28,248,22, +252,29,3,193,248,199,193,248,198,248,22,53,196,28,194,248,194,249,80,159,39, +43,34,197,9,9,27,248,22,252,40,3,196,28,248,22,252,29,3,193,248,194, +193,11,89,162,32,33,45,70,102,111,117,110,100,45,101,120,101,99,177,225,4, +3,0,28,193,91,159,35,11,90,161,35,32,11,248,22,252,36,3,199,27,28, +198,27,248,22,252,41,3,201,28,249,22,252,13,2,194,202,11,28,248,22,252, +37,3,193,248,198,249,22,252,35,3,197,195,248,198,193,11,28,192,192,27,28, +248,22,252,24,3,195,27,249,22,252,35,3,197,201,28,28,248,22,252,30,3, +193,10,248,22,252,29,3,193,192,11,11,28,192,192,28,199,11,27,248,22,252, +41,3,202,28,249,22,252,13,2,194,203,11,28,248,22,252,37,3,193,248,199, +249,22,252,35,3,198,195,248,199,193,195,89,162,32,34,38,9,223,0,250,80, +158,35,44,196,197,11,89,162,32,33,37,9,223,0,250,80,158,35,44,196,11, +11,83,159,32,93,80,159,32,45,33,89,162,32,34,41,2,30,222,87,94,28, +27,248,22,252,24,3,195,28,192,192,28,248,22,252,136,1,195,27,248,22,252, +37,3,196,28,192,192,248,22,252,38,3,196,11,12,250,22,252,40,2,195,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,197,91,159,38,11,90,161,33,32,11,28,248,22,252,39, -3,201,200,27,247,22,252,90,1,28,192,249,22,252,40,3,203,194,201,90,161, -35,33,11,248,22,252,36,3,193,90,161,33,36,11,28,249,22,252,11,2,195, -2,175,64,115,97,109,101,181,193,90,161,33,37,11,247,22,252,56,3,27,89, -162,32,34,36,66,103,101,116,45,115,111,182,224,8,5,89,162,32,33,44,9, -226,1,0,3,2,252,22,252,35,3,199,201,6,6,6,110,97,116,105,118,101, -247,22,252,220,1,28,198,249,80,159,42,34,34,199,80,159,42,48,34,197,27, -89,162,32,33,41,62,122,111,183,225,9,6,4,250,22,252,35,3,196,198,249, -80,159,39,34,34,197,5,3,46,122,111,27,249,196,199,10,27,249,197,80,159, -45,49,34,11,27,249,22,5,89,162,32,33,39,9,223,7,27,193,27,250,22, -252,49,3,196,11,89,162,40,32,32,9,222,11,28,192,249,22,51,195,194,11, -204,27,89,162,32,33,40,68,119,105,116,104,45,100,105,114,184,224,13,10,20, -14,159,80,158,33,51,250,80,158,36,52,249,22,19,11,80,158,38,51,22,252, -90,1,28,248,22,252,24,3,196,195,247,22,252,54,3,247,194,27,27,250,23, -17,23,16,199,198,28,192,27,248,22,252,58,3,248,22,52,195,91,159,34,11, -90,161,34,32,11,248,195,248,22,42,248,22,252,210,1,248,22,252,26,3,249, -80,159,56,34,34,23,19,5,0,28,192,87,94,28,23,20,28,249,22,252,11, -2,195,23,22,12,248,22,252,186,2,249,22,252,127,2,248,22,252,165,1,251, -22,252,184,1,6,81,81,108,111,97,100,45,101,120,116,101,110,115,105,111,110, -58,32,101,120,112,101,99,116,101,100,32,109,111,100,117,108,101,32,100,101,99, -108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,44,32,102,111, -117,110,100,32,126,97,32,116,104,114,111,117,103,104,32,108,111,97,100,101,114, -58,32,126,101,23,28,28,201,249,22,252,184,1,6,27,27,109,111,100,117,108, -101,32,100,101,99,108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97, -39,203,6,4,4,110,111,110,101,248,22,52,204,247,22,15,12,192,11,11,28, -192,248,194,193,27,250,23,17,23,16,200,198,28,192,248,195,89,162,32,32,37, -9,224,18,1,249,247,22,252,59,3,248,22,52,195,195,27,250,23,18,23,17, -202,199,28,192,248,196,89,162,32,32,37,9,224,19,1,249,247,22,252,89,1, -248,22,52,195,195,248,196,89,162,32,32,36,9,224,19,10,249,247,22,252,89, -1,194,195,192,89,162,32,33,36,9,222,87,94,28,28,248,22,0,193,249,22, -34,194,34,11,12,250,22,252,40,2,2,40,6,19,19,112,114,111,99,101,100, -117,114,101,32,40,97,114,105,116,121,32,50,41,195,192,83,159,32,93,80,159, -32,53,33,89,162,33,34,38,2,47,223,0,87,94,87,94,249,80,159,34,45, -34,2,47,195,249,22,3,89,162,32,33,36,9,223,2,249,80,159,34,45,34, -2,47,195,196,250,80,159,35,47,34,2,47,196,197,83,159,32,93,80,159,32, -54,33,89,162,32,33,36,2,49,223,0,249,247,80,159,34,50,34,195,11,248, -22,252,2,3,89,162,32,33,33,1,20,100,101,102,97,117,108,116,45,114,101, -97,100,101,114,45,103,117,97,114,100,185,222,192,83,159,32,93,80,159,32,55, -33,248,22,252,62,3,5,11,40,46,43,63,41,47,43,40,46,42,41,83,159, -32,93,80,159,32,56,33,248,22,252,62,3,5,2,94,44,83,159,32,93,80, -159,32,57,33,248,22,252,62,3,5,39,94,91,45,97,45,122,65,45,90,48, -45,57,95,46,32,93,43,40,47,43,91,45,97,45,122,65,45,90,48,45,57, -95,46,32,93,43,41,42,36,83,159,32,93,80,159,32,58,33,248,22,110,64, -119,101,97,107,186,83,159,32,93,80,159,32,59,33,249,22,110,2,186,65,101, -113,117,97,108,187,83,159,32,93,80,159,32,8,28,33,247,22,48,83,159,32, -93,80,159,32,8,29,34,11,83,159,32,93,80,159,32,8,30,34,11,83,159, -32,93,80,159,32,8,31,33,89,162,32,33,36,2,67,223,0,91,159,34,11, -90,161,33,33,11,83,160,38,32,33,11,20,12,95,33,192,89,162,32,35,8, -28,1,29,115,116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97, -109,101,45,114,101,115,111,108,118,101,114,188,225,2,3,1,28,28,248,22,50, -196,249,22,252,11,2,248,22,52,198,66,112,108,97,110,101,116,189,11,87,94, -28,207,12,20,14,159,80,158,34,51,250,80,158,37,52,249,22,19,11,80,158, -39,51,22,252,211,2,196,90,161,33,32,10,249,22,235,21,95,63,108,105,98, -190,6,11,11,114,101,115,111,108,118,101,114,46,115,115,6,6,6,112,108,97, -110,101,116,1,27,112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97, -109,101,45,114,101,115,111,108,118,101,114,191,12,250,210,198,199,200,28,195,27, -89,162,32,32,45,67,103,101,116,45,100,105,114,192,224,3,5,27,28,193,28, -249,22,252,11,2,195,80,159,36,8,29,34,80,159,34,8,30,34,27,248,22, -252,213,1,248,22,44,196,28,249,22,252,65,3,80,159,37,56,34,194,91,159, -35,11,90,161,35,32,11,248,22,252,36,3,248,22,252,28,3,250,22,252,197, -1,200,33,248,22,252,191,1,201,87,95,83,160,34,11,80,159,38,8,29,34, -197,83,160,34,11,80,159,38,8,30,34,192,192,11,11,28,192,192,27,247,22, -252,90,1,28,192,192,247,22,252,54,3,27,28,248,22,252,136,1,198,27,247, -194,27,250,22,116,80,159,41,59,34,249,22,51,204,198,89,162,40,32,32,9, -222,11,28,192,192,27,248,22,252,211,1,201,28,249,22,252,65,3,80,159,41, -57,34,194,249,91,159,33,11,20,12,95,33,192,89,162,32,34,45,2,174,224, -10,0,27,249,22,252,64,3,80,159,36,55,34,198,28,192,249,195,249,22,252, -35,3,199,27,248,22,78,198,28,249,22,252,194,1,194,5,1,46,2,181,28, -249,22,252,194,1,194,5,2,46,46,62,117,112,193,248,22,252,28,3,193,248, -22,87,195,249,22,252,35,3,197,248,22,252,28,3,199,196,194,248,22,59,249, -22,252,159,1,6,72,72,32,40,114,101,108,97,116,105,118,101,32,115,116,114, -105,110,103,32,102,111,114,109,32,109,117,115,116,32,99,111,110,116,97,105,110, -32,111,110,108,121,32,97,45,122,44,32,65,45,90,44,32,48,45,57,44,32, -45,44,32,95,44,32,46,44,32,47,44,32,97,110,100,32,6,37,37,115,112, -97,99,101,44,32,119,105,116,104,32,110,111,32,108,101,97,100,105,110,103,32, -111,114,32,116,114,97,105,108,105,110,103,32,47,41,28,248,22,252,24,3,198, -28,248,22,252,38,3,198,197,248,22,59,6,25,25,40,97,32,112,97,116,104, -32,109,117,115,116,32,98,101,32,97,98,115,111,108,117,116,101,41,28,28,248, -22,50,198,248,22,252,9,2,248,22,58,199,10,11,28,249,22,252,11,2,248, -22,52,200,2,190,250,22,116,80,159,39,59,34,249,22,51,202,247,22,252,55, -3,89,162,32,32,40,9,224,7,8,27,27,248,22,64,195,28,249,22,181,194, -34,248,22,59,6,5,5,109,122,108,105,98,28,249,22,183,194,34,248,22,80, -195,11,28,192,28,249,22,4,89,162,32,33,34,9,222,28,248,22,252,136,1, -193,248,22,252,37,3,193,11,194,28,248,22,252,136,1,248,22,78,195,28,248, -22,252,37,3,248,22,78,195,27,250,80,159,38,47,34,2,188,248,22,52,197, -248,22,53,197,249,22,252,35,3,194,248,22,78,197,11,11,11,11,28,249,22, -252,11,2,248,22,52,200,64,102,105,108,101,194,28,249,22,181,248,22,64,200, -34,27,248,22,78,199,28,248,22,252,136,1,193,28,27,248,22,252,24,3,194, -28,192,192,28,248,22,252,136,1,194,27,248,22,252,37,3,195,28,192,192,248, -22,252,38,3,195,11,249,22,252,40,3,194,247,196,11,11,11,11,87,94,28, -28,248,22,252,24,3,193,10,248,22,252,222,1,193,12,28,199,250,22,252,39, -2,67,114,101,113,117,105,114,101,195,249,22,252,184,1,6,17,17,98,97,100, -32,109,111,100,117,108,101,32,112,97,116,104,126,97,28,197,248,22,52,198,6, -0,0,202,250,22,252,40,2,2,188,249,22,252,184,1,6,13,13,109,111,100, -117,108,101,32,112,97,116,104,126,97,28,197,248,22,52,198,6,0,0,200,27, -28,248,22,252,222,1,194,249,22,252,227,1,195,32,248,22,252,42,3,248,22, -252,43,3,195,27,28,248,22,252,222,1,195,249,22,252,227,1,196,33,248,80, -159,39,36,34,194,91,159,35,11,90,161,35,32,11,28,248,22,252,222,1,198, -250,22,7,67,105,103,110,111,114,101,100,196,249,22,252,227,1,202,34,2,196, -248,22,252,36,3,197,27,28,248,22,252,222,1,199,249,22,252,227,1,200,35, -249,80,159,44,34,34,196,5,0,27,28,248,22,252,222,1,200,249,22,252,227, -1,201,36,249,22,252,184,1,6,3,3,44,126,97,248,22,252,210,1,248,22, -252,26,3,248,80,159,48,36,34,199,27,28,248,22,252,222,1,201,249,22,252, -227,1,202,37,248,22,42,249,22,252,159,1,196,248,22,252,210,1,248,22,252, -26,3,199,27,28,248,22,252,222,1,202,249,22,252,227,1,203,38,27,249,22, -252,64,3,80,159,48,33,34,248,22,252,26,3,201,28,192,248,22,52,193,10, -27,250,22,116,80,159,49,58,34,248,22,252,79,3,247,22,252,211,2,89,162, -32,32,38,9,223,17,27,247,22,110,87,94,250,22,115,80,159,36,58,34,248, -22,252,79,3,247,22,252,211,2,195,192,87,95,27,250,22,116,196,198,89,162, -40,32,32,9,222,11,87,94,28,192,28,28,248,22,41,193,10,249,22,252,13, -2,196,194,12,252,22,252,37,2,2,188,6,71,71,109,111,100,117,108,101,32, -112,114,101,118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116, -104,32,115,117,102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108, -111,97,100,32,119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126, -101,28,249,22,252,11,2,10,199,6,0,0,197,28,249,22,252,11,2,10,201, -6,0,0,199,23,15,12,28,192,12,87,95,27,249,22,17,247,22,15,80,159, -50,8,28,34,27,247,22,252,211,2,249,22,3,89,162,32,33,46,9,226,13, -14,2,3,28,249,22,252,13,2,248,22,53,199,197,28,249,22,252,11,2,248, -22,52,199,195,251,22,252,37,2,2,188,6,26,26,99,121,99,108,101,32,105, -110,32,108,111,97,100,105,110,103,32,97,116,32,126,101,58,32,126,101,198,249, -22,2,22,53,248,22,67,249,22,51,205,201,12,12,195,27,248,22,42,198,20, -14,159,80,159,48,8,28,34,249,22,51,247,22,252,211,2,204,20,14,159,80, -158,48,51,250,80,158,51,52,249,22,19,11,80,158,53,51,22,234,195,249,247, -80,159,50,50,34,205,248,22,42,248,22,252,210,1,248,22,252,26,3,203,250, -22,115,196,198,197,28,28,248,22,252,222,1,203,11,27,248,22,252,136,1,23, -17,28,192,192,28,248,22,50,23,17,249,22,252,11,2,248,22,52,23,19,2, -190,11,250,22,115,80,159,49,59,34,28,248,22,252,136,1,23,19,249,22,51, -23,20,247,23,16,249,22,51,23,20,247,22,252,55,3,254,22,252,224,1,23, -19,23,18,23,16,206,205,204,203,12,194,87,94,28,207,250,210,198,199,200,12, -27,250,22,116,80,159,38,58,34,248,22,252,79,3,247,22,252,211,2,89,162, -32,32,38,9,223,6,27,247,22,110,87,94,250,22,115,80,159,36,58,34,248, -22,252,79,3,247,22,252,211,2,195,192,250,22,115,195,200,66,97,116,116,97, -99,104,197,83,159,32,93,80,159,32,8,32,33,83,158,35,20,92,95,2,69, -89,162,32,32,34,9,223,0,248,80,158,33,8,32,9,89,162,32,33,46,9, -223,0,27,247,22,252,57,3,249,80,159,35,43,34,28,194,27,248,22,252,217, -1,6,11,11,80,76,84,67,79,76,76,69,67,84,83,28,192,192,6,0,0, -6,0,0,27,28,195,250,22,252,35,3,248,22,252,53,3,69,97,100,100,111, -110,45,100,105,114,198,247,22,252,215,1,6,8,8,99,111,108,108,101,99,116, -115,11,27,248,91,159,33,11,20,12,95,33,192,89,162,32,33,43,2,174,224, -7,0,28,248,22,57,195,9,27,248,22,52,196,27,28,248,22,252,39,3,194, -193,28,248,22,252,38,3,194,249,22,252,40,3,195,250,80,159,40,44,34,248, -22,252,53,3,69,101,120,101,99,45,102,105,108,101,199,11,10,250,80,159,38, -44,34,248,22,252,53,3,2,199,196,10,28,192,249,22,51,248,22,252,42,3, -249,22,252,40,3,197,247,22,252,54,3,248,197,248,22,53,200,248,195,248,22, -53,198,249,22,65,201,248,22,59,248,22,252,53,3,72,99,111,108,108,101,99, -116,115,45,100,105,114,200,28,193,249,22,51,195,194,192,83,159,32,93,80,159, -32,8,33,33,89,162,32,33,35,2,71,222,27,248,22,252,4,1,194,28,192, -192,248,22,252,5,1,194,83,159,32,97,80,159,32,8,34,33,80,159,32,8, -35,33,80,159,32,8,36,33,80,159,32,8,37,33,80,159,32,8,38,33,26, -9,22,252,90,2,63,101,118,116,201,11,33,32,11,248,22,59,249,22,51,22, -252,89,2,32,247,22,252,113,2,11,21,93,32,83,159,32,93,80,159,32,8, -39,33,89,162,32,33,37,2,83,223,0,87,94,28,28,248,22,0,194,249,22, -34,195,32,11,12,250,22,252,40,2,2,83,6,19,19,112,114,111,99,101,100, -117,114,101,32,40,97,114,105,116,121,32,48,41,196,248,80,159,33,8,35,34, -89,162,32,33,34,9,223,2,247,192,83,159,32,93,80,159,32,8,40,33,89, -162,32,33,36,2,85,222,87,94,28,248,22,252,253,2,193,12,250,22,252,40, -2,2,85,6,7,7,99,104,97,110,110,101,108,195,248,22,252,238,2,193,83, -159,32,93,80,159,32,8,41,33,89,162,32,33,36,2,87,222,87,94,28,248, -22,252,253,2,193,12,250,22,252,40,2,2,87,6,7,7,99,104,97,110,110, -101,108,195,249,22,252,239,2,32,194,83,159,32,93,80,159,32,8,42,33,89, -162,32,34,37,2,89,222,87,94,28,248,22,252,253,2,193,12,250,22,252,40, -2,2,89,6,7,7,99,104,97,110,110,101,108,195,28,248,22,252,238,2,249, -22,252,252,2,195,196,12,11,83,159,32,93,80,159,32,8,43,33,89,162,32, -32,32,2,91,222,247,22,252,211,2,83,159,32,93,80,159,32,8,44,33,89, -162,32,33,37,2,93,223,0,87,94,28,249,22,181,195,37,12,250,22,252,40, -2,2,93,6,1,1,53,196,248,80,159,33,8,45,34,11,83,159,32,93,80, -159,32,8,46,33,89,162,32,33,37,2,97,223,0,87,94,28,249,22,181,195, -37,12,250,22,252,40,2,2,97,6,1,1,53,196,248,80,159,33,8,45,34, -10,83,159,32,93,80,159,32,8,45,33,89,162,32,33,41,2,95,223,0,27, -248,22,252,189,2,65,101,109,112,116,121,202,27,247,22,252,189,2,87,94,20, -14,159,80,158,34,51,250,80,158,37,52,249,22,19,11,80,158,39,51,22,252, -211,2,196,87,96,249,22,239,194,66,35,37,114,53,114,115,203,248,22,237,2, -203,248,22,238,21,95,64,111,110,108,121,204,68,109,122,115,99,104,101,109,101, -205,72,115,121,110,116,97,120,45,114,117,108,101,115,206,28,195,12,249,22,3, -89,162,32,33,37,9,222,249,22,252,76,3,194,249,22,235,2,205,196,21,15, -203,63,99,97,114,207,63,99,100,114,208,64,99,97,97,114,209,64,99,97,100, -114,210,64,99,100,97,114,211,64,99,100,100,114,212,65,99,97,97,97,114,213, -65,99,97,97,100,114,214,65,99,97,100,97,114,215,65,99,97,100,100,114,216, -65,99,100,97,97,114,217,65,99,100,97,100,114,218,65,99,100,100,97,114,219, -65,99,100,100,100,114,220,66,99,97,97,97,97,114,221,66,99,97,97,97,100, -114,222,66,99,97,97,100,97,114,223,66,99,97,97,100,100,114,224,66,99,97, -100,97,97,114,225,66,99,97,100,97,100,114,226,66,99,97,100,100,97,114,227, -66,99,97,100,100,100,114,228,66,99,100,97,97,97,114,229,66,99,100,97,97, -100,114,230,66,99,100,97,100,97,114,231,66,99,100,97,100,100,114,232,66,99, -100,100,97,97,114,233,66,99,100,100,97,100,114,234,66,99,100,100,100,97,114, -235,66,99,100,100,100,100,114,236,63,109,97,112,237,61,61,238,61,60,239,61, -62,240,62,60,61,241,62,62,61,242,63,109,97,120,243,63,109,105,110,244,61, -43,245,61,45,246,61,42,247,61,47,248,63,97,98,115,249,63,103,99,100,250, -63,108,99,109,251,63,101,120,112,252,252,0,63,108,111,103,252,253,0,63,115, -105,110,252,254,0,63,99,111,115,252,255,0,63,116,97,110,252,0,1,63,110, -111,116,252,1,1,63,101,113,63,252,2,1,1,30,99,97,108,108,45,119,105, -116,104,45,99,117,114,114,101,110,116,45,99,111,110,116,105,110,117,97,116,105, -111,110,252,3,1,71,109,97,107,101,45,115,116,114,105,110,103,252,4,1,74, -115,121,109,98,111,108,45,62,115,116,114,105,110,103,252,5,1,74,115,116,114, -105,110,103,45,62,115,121,109,98,111,108,252,6,1,76,109,97,107,101,45,114, -101,99,116,97,110,103,117,108,97,114,252,7,1,74,101,120,97,99,116,45,62, -105,110,101,120,97,99,116,252,8,1,74,105,110,101,120,97,99,116,45,62,101, -120,97,99,116,252,9,1,74,110,117,109,98,101,114,45,62,115,116,114,105,110, -103,252,10,1,74,115,116,114,105,110,103,45,62,110,117,109,98,101,114,252,11, -1,2,14,72,111,117,116,112,117,116,45,112,111,114,116,63,252,12,1,78,99, -117,114,114,101,110,116,45,105,110,112,117,116,45,112,111,114,116,252,13,1,79, -99,117,114,114,101,110,116,45,111,117,116,112,117,116,45,112,111,114,116,252,14, -1,78,99,117,114,114,101,110,116,45,101,114,114,111,114,45,112,111,114,116,252, -15,1,75,111,112,101,110,45,105,110,112,117,116,45,102,105,108,101,252,16,1, -76,111,112,101,110,45,111,117,116,112,117,116,45,102,105,108,101,252,17,1,76, -99,108,111,115,101,45,105,110,112,117,116,45,112,111,114,116,252,18,1,77,99, -108,111,115,101,45,111,117,116,112,117,116,45,112,111,114,116,252,19,1,79,119, -105,116,104,45,111,117,116,112,117,116,45,116,111,45,102,105,108,101,252,20,1, -73,116,114,97,110,115,99,114,105,112,116,45,111,110,252,21,1,74,116,114,97, -110,115,99,114,105,112,116,45,111,102,102,252,22,1,72,102,108,117,115,104,45, -111,117,116,112,117,116,252,23,1,73,115,116,114,105,110,103,45,108,101,110,103, -116,104,252,24,1,72,115,116,114,105,110,103,45,99,105,60,61,63,252,25,1, -72,115,116,114,105,110,103,45,99,105,62,61,63,252,26,1,73,115,116,114,105, -110,103,45,97,112,112,101,110,100,252,27,1,72,115,116,114,105,110,103,45,62, -108,105,115,116,252,28,1,72,108,105,115,116,45,62,115,116,114,105,110,103,252, -29,1,72,115,116,114,105,110,103,45,102,105,108,108,33,252,30,1,73,118,101, -99,116,111,114,45,108,101,110,103,116,104,252,31,1,72,118,101,99,116,111,114, -45,62,108,105,115,116,252,32,1,72,108,105,115,116,45,62,118,101,99,116,111, -114,252,33,1,72,118,101,99,116,111,114,45,102,105,108,108,33,252,34,1,76, -99,104,97,114,45,97,108,112,104,97,98,101,116,105,99,63,252,35,1,73,99, -104,97,114,45,110,117,109,101,114,105,99,63,252,36,1,76,99,104,97,114,45, -119,104,105,116,101,115,112,97,99,101,63,252,37,1,76,99,104,97,114,45,117, -112,112,101,114,45,99,97,115,101,63,252,38,1,76,99,104,97,114,45,108,111, -119,101,114,45,99,97,115,101,63,252,39,1,73,99,104,97,114,45,62,105,110, -116,101,103,101,114,252,40,1,73,105,110,116,101,103,101,114,45,62,99,104,97, -114,252,41,1,73,99,104,97,114,45,100,111,119,110,99,97,115,101,252,42,1, -1,21,99,97,108,108,45,119,105,116,104,45,111,117,116,112,117,116,45,102,105, -108,101,252,43,1,1,20,99,97,108,108,45,119,105,116,104,45,105,110,112,117, -116,45,102,105,108,101,252,44,1,1,20,119,105,116,104,45,105,110,112,117,116, -45,102,114,111,109,45,102,105,108,101,252,45,1,65,97,112,112,108,121,252,46, -1,68,102,111,114,45,101,97,99,104,252,47,1,67,115,121,109,98,111,108,63, -252,48,1,65,112,97,105,114,63,252,49,1,64,99,111,110,115,252,50,1,68, -115,101,116,45,99,97,114,33,252,51,1,68,115,101,116,45,99,100,114,33,252, -52,1,65,110,117,108,108,63,252,53,1,65,108,105,115,116,63,252,54,1,64, -108,105,115,116,252,55,1,66,108,101,110,103,116,104,252,56,1,66,97,112,112, -101,110,100,252,57,1,67,114,101,118,101,114,115,101,252,58,1,69,108,105,115, -116,45,116,97,105,108,252,59,1,68,108,105,115,116,45,114,101,102,252,60,1, -64,109,101,109,113,252,61,1,64,109,101,109,118,252,62,1,66,109,101,109,98, -101,114,252,63,1,64,97,115,115,113,252,64,1,64,97,115,115,118,252,65,1, -65,97,115,115,111,99,252,66,1,70,112,114,111,99,101,100,117,114,101,63,252, -67,1,67,110,117,109,98,101,114,63,252,68,1,68,99,111,109,112,108,101,120, -63,252,69,1,65,114,101,97,108,63,252,70,1,69,114,97,116,105,111,110,97, -108,63,252,71,1,68,105,110,116,101,103,101,114,63,252,72,1,66,101,120,97, -99,116,63,252,73,1,68,105,110,101,120,97,99,116,63,252,74,1,65,122,101, -114,111,63,252,75,1,69,112,111,115,105,116,105,118,101,63,252,76,1,69,110, -101,103,97,116,105,118,101,63,252,77,1,64,111,100,100,63,252,78,1,65,101, -118,101,110,63,252,79,1,68,113,117,111,116,105,101,110,116,252,80,1,69,114, -101,109,97,105,110,100,101,114,252,81,1,66,109,111,100,117,108,111,252,82,1, -65,102,108,111,111,114,252,83,1,67,99,101,105,108,105,110,103,252,84,1,68, -116,114,117,110,99,97,116,101,252,85,1,65,114,111,117,110,100,252,86,1,69, -110,117,109,101,114,97,116,111,114,252,87,1,71,100,101,110,111,109,105,110,97, -116,111,114,252,88,1,64,97,115,105,110,252,89,1,64,97,99,111,115,252,90, -1,64,97,116,97,110,252,91,1,64,115,113,114,116,252,92,1,64,101,120,112, -116,252,93,1,70,109,97,107,101,45,112,111,108,97,114,252,94,1,69,114,101, -97,108,45,112,97,114,116,252,95,1,69,105,109,97,103,45,112,97,114,116,252, -96,1,65,97,110,103,108,101,252,97,1,69,109,97,103,110,105,116,117,100,101, -252,98,1,71,105,110,112,117,116,45,112,111,114,116,63,252,99,1,64,114,101, -97,100,252,100,1,69,114,101,97,100,45,99,104,97,114,252,101,1,69,112,101, -101,107,45,99,104,97,114,252,102,1,71,101,111,102,45,111,98,106,101,99,116, -63,252,103,1,71,99,104,97,114,45,114,101,97,100,121,63,252,104,1,65,119, -114,105,116,101,252,105,1,67,100,105,115,112,108,97,121,252,106,1,67,110,101, -119,108,105,110,101,252,107,1,70,119,114,105,116,101,45,99,104,97,114,252,108, -1,64,108,111,97,100,252,109,1,67,115,116,114,105,110,103,63,252,110,1,66, -115,116,114,105,110,103,252,111,1,70,115,116,114,105,110,103,45,114,101,102,252, -112,1,71,115,116,114,105,110,103,45,115,101,116,33,252,113,1,68,115,116,114, -105,110,103,61,63,252,114,1,69,115,117,98,115,116,114,105,110,103,252,115,1, -71,115,116,114,105,110,103,45,99,111,112,121,252,116,1,71,115,116,114,105,110, -103,45,99,105,61,63,252,117,1,68,115,116,114,105,110,103,60,63,252,118,1, -68,115,116,114,105,110,103,62,63,252,119,1,69,115,116,114,105,110,103,60,61, -63,252,120,1,69,115,116,114,105,110,103,62,61,63,252,121,1,71,115,116,114, -105,110,103,45,99,105,60,63,252,122,1,71,115,116,114,105,110,103,45,99,105, -62,63,252,123,1,67,118,101,99,116,111,114,63,252,124,1,71,109,97,107,101, -45,118,101,99,116,111,114,252,125,1,66,118,101,99,116,111,114,252,126,1,70, -118,101,99,116,111,114,45,114,101,102,252,127,1,71,118,101,99,116,111,114,45, -115,101,116,33,252,128,1,65,99,104,97,114,63,252,129,1,66,99,104,97,114, -61,63,252,130,1,66,99,104,97,114,60,63,252,131,1,66,99,104,97,114,62, -63,252,132,1,67,99,104,97,114,60,61,63,252,133,1,67,99,104,97,114,62, -61,63,252,134,1,69,99,104,97,114,45,99,105,61,63,252,135,1,69,99,104, -97,114,45,99,105,60,63,252,136,1,69,99,104,97,114,45,99,105,62,63,252, -137,1,70,99,104,97,114,45,99,105,60,61,63,252,138,1,70,99,104,97,114, -45,99,105,62,61,63,252,139,1,71,99,104,97,114,45,117,112,99,97,115,101, -252,140,1,68,98,111,111,108,101,97,110,63,252,141,1,64,101,113,118,63,252, -142,1,66,101,113,117,97,108,63,252,143,1,65,102,111,114,99,101,252,144,1, -76,99,97,108,108,45,119,105,116,104,45,118,97,108,117,101,115,252,145,1,66, -118,97,108,117,101,115,252,146,1,64,101,118,97,108,252,147,1,2,71,2,93, -2,97,2,91,72,100,121,110,97,109,105,99,45,119,105,110,100,252,148,1,9, -193,97,68,35,37,107,101,114,110,101,108,252,149,1,2,116,2,115,2,114,2, -113,95,2,252,149,1,2,100,2,117,0}; - EVAL_ONE_SIZED_STR((char *)expr, 12673); +115,116,114,105,110,103,196,28,248,22,252,37,3,194,12,248,22,252,186,2,249, +22,252,130,2,248,22,252,165,1,250,22,252,184,1,6,29,29,126,97,58,32, +105,110,118,97,108,105,100,32,114,101,108,97,116,105,118,101,32,112,97,116,104, +58,32,126,115,199,200,247,22,15,83,159,32,93,80,159,32,46,33,89,162,32, +35,38,2,32,223,0,87,94,249,80,159,34,45,34,195,196,249,22,3,89,162, +32,33,37,9,224,2,3,249,80,159,35,45,34,194,196,197,83,159,32,93,80, +159,32,47,33,89,162,32,35,38,2,34,222,27,247,22,252,55,3,248,91,159, +33,11,20,12,95,33,192,89,162,32,33,49,65,99,108,111,111,112,178,227,5, +4,3,2,0,28,248,22,57,198,248,22,252,186,2,249,22,252,160,2,248,22, +252,165,1,251,22,252,184,1,6,42,42,126,97,58,32,99,111,108,108,101,99, +116,105,111,110,32,110,111,116,32,102,111,117,110,100,58,32,126,115,32,105,110, +32,97,110,121,32,111,102,58,32,126,115,202,28,248,22,57,205,203,250,22,1, +22,252,35,3,206,23,15,201,247,22,15,27,249,22,252,35,3,248,22,52,201, +198,28,248,22,252,30,3,193,27,250,22,1,22,252,35,3,196,201,28,248,22, +252,30,3,193,192,248,195,248,22,53,201,248,194,248,22,53,200,193,83,159,32, +93,80,159,32,48,33,27,247,22,252,219,1,28,249,22,252,11,2,194,2,163, +5,4,46,100,108,108,28,249,22,72,194,21,94,2,172,2,164,5,6,46,100, +121,108,105,98,5,3,46,115,111,83,159,32,93,80,159,32,49,33,249,80,159, +34,34,34,248,22,252,28,3,5,10,95,108,111,97,100,101,114,46,115,115,80, +159,34,48,34,83,159,32,93,80,159,32,50,33,249,22,252,220,2,27,27,89, +162,32,35,41,67,100,97,116,101,62,61,63,179,222,28,193,27,249,22,5,89, +162,32,33,39,9,223,4,27,248,194,195,27,250,22,252,49,3,196,11,89,162, +40,32,32,9,222,11,28,192,249,22,51,195,194,11,195,27,28,196,11,193,28, +192,192,28,193,28,196,28,249,22,185,248,22,53,196,248,22,53,199,193,11,11, +11,11,89,162,32,34,8,31,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,180,224,4,0,87,94,28, +27,248,22,252,24,3,196,28,192,192,28,248,22,252,136,1,196,27,248,22,252, +37,3,197,28,192,192,248,22,252,38,3,197,11,12,250,22,252,40,2,2,49, +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,197,91,159,38,11,90,161,33,32,11,28,248,22,252, +39,3,201,200,27,247,22,252,90,1,28,192,249,22,252,40,3,203,194,201,90, +161,35,33,11,248,22,252,36,3,193,90,161,33,36,11,28,249,22,252,11,2, +195,2,175,64,115,97,109,101,181,193,90,161,33,37,11,247,22,252,56,3,27, +89,162,32,34,36,66,103,101,116,45,115,111,182,224,8,5,89,162,32,33,44, +9,226,1,0,3,2,252,22,252,35,3,199,201,6,6,6,110,97,116,105,118, +101,247,22,252,220,1,28,198,249,80,159,42,34,34,199,80,159,42,48,34,197, +27,89,162,32,33,41,62,122,111,183,225,9,6,4,250,22,252,35,3,196,198, +249,80,159,39,34,34,197,5,3,46,122,111,27,249,196,199,10,27,249,197,80, +159,45,49,34,11,27,249,22,5,89,162,32,33,39,9,223,7,27,193,27,250, +22,252,49,3,196,11,89,162,40,32,32,9,222,11,28,192,249,22,51,195,194, +11,204,27,89,162,32,33,40,68,119,105,116,104,45,100,105,114,184,224,13,10, +20,14,159,80,158,33,51,250,80,158,36,52,249,22,19,11,80,158,38,51,22, +252,90,1,28,248,22,252,24,3,196,195,247,22,252,54,3,247,194,27,27,250, +23,17,23,16,199,198,28,192,27,248,22,252,58,3,248,22,52,195,91,159,34, +11,90,161,34,32,11,248,195,248,22,42,248,22,252,210,1,248,22,252,26,3, +249,80,159,56,34,34,23,19,5,0,28,192,87,94,28,23,20,28,249,22,252, +11,2,195,23,22,12,248,22,252,186,2,249,22,252,127,2,248,22,252,165,1, +251,22,252,184,1,6,81,81,108,111,97,100,45,101,120,116,101,110,115,105,111, +110,58,32,101,120,112,101,99,116,101,100,32,109,111,100,117,108,101,32,100,101, +99,108,97,114,97,116,105,111,110,32,102,111,114,32,96,126,97,39,44,32,102, +111,117,110,100,32,126,97,32,116,104,114,111,117,103,104,32,108,111,97,100,101, +114,58,32,126,101,23,28,28,201,249,22,252,184,1,6,27,27,109,111,100,117, +108,101,32,100,101,99,108,97,114,97,116,105,111,110,32,102,111,114,32,96,126, +97,39,203,6,4,4,110,111,110,101,248,22,52,204,247,22,15,12,192,11,11, +28,192,248,194,193,27,250,23,17,23,16,200,198,28,192,248,195,89,162,32,32, +37,9,224,18,1,249,247,22,252,59,3,248,22,52,195,195,27,250,23,18,23, +17,202,199,28,192,248,196,89,162,32,32,37,9,224,19,1,249,247,22,252,89, +1,248,22,52,195,195,248,196,89,162,32,32,36,9,224,19,10,249,247,22,252, +89,1,194,195,192,89,162,32,33,36,9,222,87,94,28,28,248,22,0,193,249, +22,34,194,34,11,12,250,22,252,40,2,2,40,6,19,19,112,114,111,99,101, +100,117,114,101,32,40,97,114,105,116,121,32,50,41,195,192,83,159,32,93,80, +159,32,53,33,89,162,33,34,38,2,47,223,0,87,94,87,94,249,80,159,34, +45,34,2,47,195,249,22,3,89,162,32,33,36,9,223,2,249,80,159,34,45, +34,2,47,195,196,250,80,159,35,47,34,2,47,196,197,83,159,32,93,80,159, +32,54,33,89,162,32,33,36,2,49,223,0,249,247,80,159,34,50,34,195,11, +248,22,252,2,3,89,162,32,33,33,1,20,100,101,102,97,117,108,116,45,114, +101,97,100,101,114,45,103,117,97,114,100,185,222,192,83,159,32,93,80,159,32, +55,33,248,22,252,62,3,5,11,40,46,43,63,41,47,43,40,46,42,41,83, +159,32,93,80,159,32,56,33,248,22,252,62,3,5,2,94,44,83,159,32,93, +80,159,32,57,33,248,22,252,62,3,5,39,94,91,45,97,45,122,65,45,90, +48,45,57,95,46,32,93,43,40,47,43,91,45,97,45,122,65,45,90,48,45, +57,95,46,32,93,43,41,42,36,83,159,32,93,80,159,32,58,33,248,22,110, +64,119,101,97,107,186,83,159,32,93,80,159,32,59,33,249,22,110,2,186,65, +101,113,117,97,108,187,83,159,32,93,80,159,32,8,28,33,247,22,48,83,159, +32,93,80,159,32,8,29,34,11,83,159,32,93,80,159,32,8,30,34,11,83, +159,32,93,80,159,32,8,31,33,89,162,32,33,36,2,67,223,0,91,159,34, +10,90,161,33,32,10,11,90,161,33,33,10,83,158,35,20,92,96,1,29,115, +116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114, +101,115,111,108,118,101,114,188,89,162,32,33,40,9,224,2,0,87,94,28,207, +248,208,195,12,27,250,22,116,80,159,37,58,34,248,22,252,79,3,247,22,252, +211,2,89,162,32,32,38,9,223,5,27,247,22,110,87,94,250,22,115,80,159, +36,58,34,248,22,252,79,3,247,22,252,211,2,195,192,250,22,115,195,198,66, +97,116,116,97,99,104,189,89,162,32,35,40,9,223,1,251,211,197,198,199,10, +89,162,32,36,8,29,9,225,2,3,0,28,28,248,22,50,196,249,22,252,11, +2,248,22,52,198,66,112,108,97,110,101,116,190,11,87,94,28,207,12,20,14, +159,80,158,34,51,250,80,158,37,52,249,22,19,11,80,158,39,51,22,252,211, +2,196,90,161,33,32,10,249,22,235,21,95,63,108,105,98,191,6,11,11,114, +101,115,111,108,118,101,114,46,115,115,6,6,6,112,108,97,110,101,116,1,27, +112,108,97,110,101,116,45,109,111,100,117,108,101,45,110,97,109,101,45,114,101, +115,111,108,118,101,114,192,12,251,211,199,200,201,202,27,89,162,32,32,45,67, +103,101,116,45,100,105,114,193,224,3,5,27,28,193,28,249,22,252,11,2,195, +80,159,36,8,29,34,80,159,34,8,30,34,27,248,22,252,213,1,248,22,44, +196,28,249,22,252,65,3,80,159,37,56,34,194,91,159,35,11,90,161,35,32, +11,248,22,252,36,3,248,22,252,28,3,250,22,252,197,1,200,33,248,22,252, +191,1,201,87,95,83,160,34,11,80,159,38,8,29,34,197,83,160,34,11,80, +159,38,8,30,34,192,192,11,11,28,192,192,27,247,22,252,90,1,28,192,192, +247,22,252,54,3,27,28,248,22,252,136,1,198,27,247,194,27,250,22,116,80, +159,41,59,34,249,22,51,204,198,89,162,40,32,32,9,222,11,28,192,192,27, +248,22,252,211,1,201,28,249,22,252,65,3,80,159,41,57,34,194,249,91,159, +33,11,20,12,95,33,192,89,162,32,34,45,2,174,224,10,0,27,249,22,252, +64,3,80,159,36,55,34,198,28,192,249,195,249,22,252,35,3,199,27,248,22, +78,198,28,249,22,252,194,1,194,5,1,46,2,181,28,249,22,252,194,1,194, +5,2,46,46,62,117,112,194,248,22,252,28,3,193,248,22,87,195,249,22,252, +35,3,197,248,22,252,28,3,199,196,194,248,22,59,249,22,252,159,1,6,72, +72,32,40,114,101,108,97,116,105,118,101,32,115,116,114,105,110,103,32,102,111, +114,109,32,109,117,115,116,32,99,111,110,116,97,105,110,32,111,110,108,121,32, +97,45,122,44,32,65,45,90,44,32,48,45,57,44,32,45,44,32,95,44,32, +46,44,32,47,44,32,97,110,100,32,6,37,37,115,112,97,99,101,44,32,119, +105,116,104,32,110,111,32,108,101,97,100,105,110,103,32,111,114,32,116,114,97, +105,108,105,110,103,32,47,41,28,248,22,252,24,3,198,28,248,22,252,38,3, +198,197,248,22,59,6,25,25,40,97,32,112,97,116,104,32,109,117,115,116,32, +98,101,32,97,98,115,111,108,117,116,101,41,28,28,248,22,50,198,248,22,252, +9,2,248,22,58,199,10,11,28,249,22,252,11,2,248,22,52,200,2,191,250, +22,116,80,159,39,59,34,249,22,51,202,247,22,252,55,3,89,162,32,32,40, +9,224,7,8,27,27,248,22,64,195,28,249,22,181,194,34,248,22,59,6,5, +5,109,122,108,105,98,28,249,22,183,194,34,248,22,80,195,11,28,192,28,249, +22,4,89,162,32,33,34,9,222,28,248,22,252,136,1,193,248,22,252,37,3, +193,11,194,28,248,22,252,136,1,248,22,78,195,28,248,22,252,37,3,248,22, +78,195,27,250,80,159,38,47,34,2,188,248,22,52,197,248,22,53,197,249,22, +252,35,3,194,248,22,78,197,11,11,11,11,28,249,22,252,11,2,248,22,52, +200,64,102,105,108,101,195,28,249,22,181,248,22,64,200,34,27,248,22,78,199, +28,248,22,252,136,1,193,28,27,248,22,252,24,3,194,28,192,192,28,248,22, +252,136,1,194,27,248,22,252,37,3,195,28,192,192,248,22,252,38,3,195,11, +249,22,252,40,3,194,247,196,11,11,11,11,87,94,28,28,248,22,252,24,3, +193,10,248,22,252,222,1,193,12,28,199,250,22,252,39,2,67,114,101,113,117, +105,114,101,196,249,22,252,184,1,6,17,17,98,97,100,32,109,111,100,117,108, +101,32,112,97,116,104,126,97,28,197,248,22,52,198,6,0,0,202,250,22,252, +40,2,2,188,249,22,252,184,1,6,13,13,109,111,100,117,108,101,32,112,97, +116,104,126,97,28,197,248,22,52,198,6,0,0,200,27,28,248,22,252,222,1, +194,249,22,252,227,1,195,32,248,22,252,42,3,248,22,252,43,3,195,27,28, +248,22,252,222,1,195,249,22,252,227,1,196,33,248,80,159,39,36,34,194,91, +159,35,11,90,161,35,32,11,28,248,22,252,222,1,198,250,22,7,67,105,103, +110,111,114,101,100,197,249,22,252,227,1,202,34,2,197,248,22,252,36,3,197, +27,28,248,22,252,222,1,199,249,22,252,227,1,200,35,249,80,159,44,34,34, +196,5,0,27,28,248,22,252,222,1,200,249,22,252,227,1,201,36,249,22,252, +184,1,6,3,3,44,126,97,248,22,252,210,1,248,22,252,26,3,248,80,159, +48,36,34,199,27,28,248,22,252,222,1,201,249,22,252,227,1,202,37,248,22, +42,249,22,252,159,1,196,248,22,252,210,1,248,22,252,26,3,199,27,28,248, +22,252,222,1,202,249,22,252,227,1,203,38,27,249,22,252,64,3,80,159,48, +33,34,248,22,252,26,3,201,28,192,248,22,52,193,10,27,250,22,116,80,159, +49,58,34,248,22,252,79,3,247,22,252,211,2,89,162,32,32,38,9,223,17, +27,247,22,110,87,94,250,22,115,80,159,36,58,34,248,22,252,79,3,247,22, +252,211,2,195,192,87,95,28,23,18,27,250,22,116,196,198,89,162,40,32,32, +9,222,11,87,94,28,192,28,28,248,22,41,193,10,249,22,252,13,2,196,194, +12,252,22,252,37,2,2,188,6,71,71,109,111,100,117,108,101,32,112,114,101, +118,105,111,117,115,108,121,32,108,111,97,100,101,100,32,119,105,116,104,32,115, +117,102,102,105,120,32,126,115,44,32,99,97,110,110,111,116,32,108,111,97,100, +32,119,105,116,104,32,115,117,102,102,105,120,32,126,115,58,32,126,101,28,249, +22,252,11,2,10,199,6,0,0,197,28,249,22,252,11,2,10,201,6,0,0, +199,23,15,12,28,192,12,87,95,27,249,22,17,247,22,15,80,159,50,8,28, +34,27,247,22,252,211,2,249,22,3,89,162,32,33,46,9,226,13,14,2,3, +28,249,22,252,13,2,248,22,53,199,197,28,249,22,252,11,2,248,22,52,199, +195,251,22,252,37,2,2,188,6,26,26,99,121,99,108,101,32,105,110,32,108, +111,97,100,105,110,103,32,97,116,32,126,101,58,32,126,101,198,249,22,2,22, +53,248,22,67,249,22,51,205,201,12,12,195,27,248,22,42,198,20,14,159,80, +159,48,8,28,34,249,22,51,247,22,252,211,2,204,20,14,159,80,158,48,51, +250,80,158,51,52,249,22,19,11,80,158,53,51,22,234,195,249,247,80,159,50, +50,34,205,248,22,42,248,22,252,210,1,248,22,252,26,3,203,250,22,115,196, +198,197,12,28,28,248,22,252,222,1,203,11,27,248,22,252,136,1,23,17,28, +192,192,28,248,22,50,23,17,249,22,252,11,2,248,22,52,23,19,2,191,11, +250,22,115,80,159,49,59,34,28,248,22,252,136,1,23,19,249,22,51,23,20, +247,23,16,249,22,51,23,20,247,22,252,55,3,254,22,252,224,1,23,19,23, +18,23,16,206,205,204,203,12,194,208,83,159,32,93,80,159,32,8,32,33,83, +158,35,20,92,95,2,69,89,162,32,32,34,9,223,0,248,80,158,33,8,32, +9,89,162,32,33,46,9,223,0,27,247,22,252,57,3,249,80,159,35,43,34, +28,194,27,248,22,252,217,1,6,11,11,80,76,84,67,79,76,76,69,67,84, +83,28,192,192,6,0,0,6,0,0,27,28,195,250,22,252,35,3,248,22,252, +53,3,69,97,100,100,111,110,45,100,105,114,198,247,22,252,215,1,6,8,8, +99,111,108,108,101,99,116,115,11,27,248,91,159,33,11,20,12,95,33,192,89, +162,32,33,43,2,174,224,7,0,28,248,22,57,195,9,27,248,22,52,196,27, +28,248,22,252,39,3,194,193,28,248,22,252,38,3,194,249,22,252,40,3,195, +250,80,159,40,44,34,248,22,252,53,3,69,101,120,101,99,45,102,105,108,101, +199,11,10,250,80,159,38,44,34,248,22,252,53,3,2,199,196,10,28,192,249, +22,51,248,22,252,42,3,249,22,252,40,3,197,247,22,252,54,3,248,197,248, +22,53,200,248,195,248,22,53,198,249,22,65,201,248,22,59,248,22,252,53,3, +72,99,111,108,108,101,99,116,115,45,100,105,114,200,28,193,249,22,51,195,194, +192,83,159,32,93,80,159,32,8,33,33,89,162,32,33,35,2,71,222,27,248, +22,252,4,1,194,28,192,192,248,22,252,5,1,194,83,159,32,97,80,159,32, +8,34,33,80,159,32,8,35,33,80,159,32,8,36,33,80,159,32,8,37,33, +80,159,32,8,38,33,26,9,22,252,90,2,63,101,118,116,201,11,33,32,11, +248,22,59,249,22,51,22,252,89,2,32,247,22,252,113,2,11,21,93,32,83, +159,32,93,80,159,32,8,39,33,89,162,32,33,37,2,83,223,0,87,94,28, +28,248,22,0,194,249,22,34,195,32,11,12,250,22,252,40,2,2,83,6,19, +19,112,114,111,99,101,100,117,114,101,32,40,97,114,105,116,121,32,48,41,196, +248,80,159,33,8,35,34,89,162,32,33,34,9,223,2,247,192,83,159,32,93, +80,159,32,8,40,33,89,162,32,33,36,2,85,222,87,94,28,248,22,252,253, +2,193,12,250,22,252,40,2,2,85,6,7,7,99,104,97,110,110,101,108,195, +248,22,252,238,2,193,83,159,32,93,80,159,32,8,41,33,89,162,32,33,36, +2,87,222,87,94,28,248,22,252,253,2,193,12,250,22,252,40,2,2,87,6, +7,7,99,104,97,110,110,101,108,195,249,22,252,239,2,32,194,83,159,32,93, +80,159,32,8,42,33,89,162,32,34,37,2,89,222,87,94,28,248,22,252,253, +2,193,12,250,22,252,40,2,2,89,6,7,7,99,104,97,110,110,101,108,195, +28,248,22,252,238,2,249,22,252,252,2,195,196,12,11,83,159,32,93,80,159, +32,8,43,33,89,162,32,32,32,2,91,222,247,22,252,211,2,83,159,32,93, +80,159,32,8,44,33,89,162,32,33,37,2,93,223,0,87,94,28,249,22,181, +195,37,12,250,22,252,40,2,2,93,6,1,1,53,196,248,80,159,33,8,45, +34,11,83,159,32,93,80,159,32,8,46,33,89,162,32,33,37,2,97,223,0, +87,94,28,249,22,181,195,37,12,250,22,252,40,2,2,97,6,1,1,53,196, +248,80,159,33,8,45,34,10,83,159,32,93,80,159,32,8,45,33,89,162,32, +33,41,2,95,223,0,27,248,22,252,189,2,65,101,109,112,116,121,202,27,247, +22,252,189,2,87,94,20,14,159,80,158,34,51,250,80,158,37,52,249,22,19, +11,80,158,39,51,22,252,211,2,196,87,96,249,22,239,194,66,35,37,114,53, +114,115,203,248,22,237,2,203,248,22,238,21,95,64,111,110,108,121,204,68,109, +122,115,99,104,101,109,101,205,72,115,121,110,116,97,120,45,114,117,108,101,115, +206,28,195,12,249,22,3,89,162,32,33,37,9,222,249,22,252,76,3,194,249, +22,235,2,205,196,21,15,203,63,99,97,114,207,63,99,100,114,208,64,99,97, +97,114,209,64,99,97,100,114,210,64,99,100,97,114,211,64,99,100,100,114,212, +65,99,97,97,97,114,213,65,99,97,97,100,114,214,65,99,97,100,97,114,215, +65,99,97,100,100,114,216,65,99,100,97,97,114,217,65,99,100,97,100,114,218, +65,99,100,100,97,114,219,65,99,100,100,100,114,220,66,99,97,97,97,97,114, +221,66,99,97,97,97,100,114,222,66,99,97,97,100,97,114,223,66,99,97,97, +100,100,114,224,66,99,97,100,97,97,114,225,66,99,97,100,97,100,114,226,66, +99,97,100,100,97,114,227,66,99,97,100,100,100,114,228,66,99,100,97,97,97, +114,229,66,99,100,97,97,100,114,230,66,99,100,97,100,97,114,231,66,99,100, +97,100,100,114,232,66,99,100,100,97,97,114,233,66,99,100,100,97,100,114,234, +66,99,100,100,100,97,114,235,66,99,100,100,100,100,114,236,63,109,97,112,237, +61,61,238,61,60,239,61,62,240,62,60,61,241,62,62,61,242,63,109,97,120, +243,63,109,105,110,244,61,43,245,61,45,246,61,42,247,61,47,248,63,97,98, +115,249,63,103,99,100,250,63,108,99,109,251,63,101,120,112,252,252,0,63,108, +111,103,252,253,0,63,115,105,110,252,254,0,63,99,111,115,252,255,0,63,116, +97,110,252,0,1,63,110,111,116,252,1,1,63,101,113,63,252,2,1,1,30, +99,97,108,108,45,119,105,116,104,45,99,117,114,114,101,110,116,45,99,111,110, +116,105,110,117,97,116,105,111,110,252,3,1,71,109,97,107,101,45,115,116,114, +105,110,103,252,4,1,74,115,121,109,98,111,108,45,62,115,116,114,105,110,103, +252,5,1,74,115,116,114,105,110,103,45,62,115,121,109,98,111,108,252,6,1, +76,109,97,107,101,45,114,101,99,116,97,110,103,117,108,97,114,252,7,1,74, +101,120,97,99,116,45,62,105,110,101,120,97,99,116,252,8,1,74,105,110,101, +120,97,99,116,45,62,101,120,97,99,116,252,9,1,74,110,117,109,98,101,114, +45,62,115,116,114,105,110,103,252,10,1,74,115,116,114,105,110,103,45,62,110, +117,109,98,101,114,252,11,1,2,14,72,111,117,116,112,117,116,45,112,111,114, +116,63,252,12,1,78,99,117,114,114,101,110,116,45,105,110,112,117,116,45,112, +111,114,116,252,13,1,79,99,117,114,114,101,110,116,45,111,117,116,112,117,116, +45,112,111,114,116,252,14,1,78,99,117,114,114,101,110,116,45,101,114,114,111, +114,45,112,111,114,116,252,15,1,75,111,112,101,110,45,105,110,112,117,116,45, +102,105,108,101,252,16,1,76,111,112,101,110,45,111,117,116,112,117,116,45,102, +105,108,101,252,17,1,76,99,108,111,115,101,45,105,110,112,117,116,45,112,111, +114,116,252,18,1,77,99,108,111,115,101,45,111,117,116,112,117,116,45,112,111, +114,116,252,19,1,79,119,105,116,104,45,111,117,116,112,117,116,45,116,111,45, +102,105,108,101,252,20,1,73,116,114,97,110,115,99,114,105,112,116,45,111,110, +252,21,1,74,116,114,97,110,115,99,114,105,112,116,45,111,102,102,252,22,1, +72,102,108,117,115,104,45,111,117,116,112,117,116,252,23,1,73,115,116,114,105, +110,103,45,108,101,110,103,116,104,252,24,1,72,115,116,114,105,110,103,45,99, +105,60,61,63,252,25,1,72,115,116,114,105,110,103,45,99,105,62,61,63,252, +26,1,73,115,116,114,105,110,103,45,97,112,112,101,110,100,252,27,1,72,115, +116,114,105,110,103,45,62,108,105,115,116,252,28,1,72,108,105,115,116,45,62, +115,116,114,105,110,103,252,29,1,72,115,116,114,105,110,103,45,102,105,108,108, +33,252,30,1,73,118,101,99,116,111,114,45,108,101,110,103,116,104,252,31,1, +72,118,101,99,116,111,114,45,62,108,105,115,116,252,32,1,72,108,105,115,116, +45,62,118,101,99,116,111,114,252,33,1,72,118,101,99,116,111,114,45,102,105, +108,108,33,252,34,1,76,99,104,97,114,45,97,108,112,104,97,98,101,116,105, +99,63,252,35,1,73,99,104,97,114,45,110,117,109,101,114,105,99,63,252,36, +1,76,99,104,97,114,45,119,104,105,116,101,115,112,97,99,101,63,252,37,1, +76,99,104,97,114,45,117,112,112,101,114,45,99,97,115,101,63,252,38,1,76, +99,104,97,114,45,108,111,119,101,114,45,99,97,115,101,63,252,39,1,73,99, +104,97,114,45,62,105,110,116,101,103,101,114,252,40,1,73,105,110,116,101,103, +101,114,45,62,99,104,97,114,252,41,1,73,99,104,97,114,45,100,111,119,110, +99,97,115,101,252,42,1,1,21,99,97,108,108,45,119,105,116,104,45,111,117, +116,112,117,116,45,102,105,108,101,252,43,1,1,20,99,97,108,108,45,119,105, +116,104,45,105,110,112,117,116,45,102,105,108,101,252,44,1,1,20,119,105,116, +104,45,105,110,112,117,116,45,102,114,111,109,45,102,105,108,101,252,45,1,65, +97,112,112,108,121,252,46,1,68,102,111,114,45,101,97,99,104,252,47,1,67, +115,121,109,98,111,108,63,252,48,1,65,112,97,105,114,63,252,49,1,64,99, +111,110,115,252,50,1,68,115,101,116,45,99,97,114,33,252,51,1,68,115,101, +116,45,99,100,114,33,252,52,1,65,110,117,108,108,63,252,53,1,65,108,105, +115,116,63,252,54,1,64,108,105,115,116,252,55,1,66,108,101,110,103,116,104, +252,56,1,66,97,112,112,101,110,100,252,57,1,67,114,101,118,101,114,115,101, +252,58,1,69,108,105,115,116,45,116,97,105,108,252,59,1,68,108,105,115,116, +45,114,101,102,252,60,1,64,109,101,109,113,252,61,1,64,109,101,109,118,252, +62,1,66,109,101,109,98,101,114,252,63,1,64,97,115,115,113,252,64,1,64, +97,115,115,118,252,65,1,65,97,115,115,111,99,252,66,1,70,112,114,111,99, +101,100,117,114,101,63,252,67,1,67,110,117,109,98,101,114,63,252,68,1,68, +99,111,109,112,108,101,120,63,252,69,1,65,114,101,97,108,63,252,70,1,69, +114,97,116,105,111,110,97,108,63,252,71,1,68,105,110,116,101,103,101,114,63, +252,72,1,66,101,120,97,99,116,63,252,73,1,68,105,110,101,120,97,99,116, +63,252,74,1,65,122,101,114,111,63,252,75,1,69,112,111,115,105,116,105,118, +101,63,252,76,1,69,110,101,103,97,116,105,118,101,63,252,77,1,64,111,100, +100,63,252,78,1,65,101,118,101,110,63,252,79,1,68,113,117,111,116,105,101, +110,116,252,80,1,69,114,101,109,97,105,110,100,101,114,252,81,1,66,109,111, +100,117,108,111,252,82,1,65,102,108,111,111,114,252,83,1,67,99,101,105,108, +105,110,103,252,84,1,68,116,114,117,110,99,97,116,101,252,85,1,65,114,111, +117,110,100,252,86,1,69,110,117,109,101,114,97,116,111,114,252,87,1,71,100, +101,110,111,109,105,110,97,116,111,114,252,88,1,64,97,115,105,110,252,89,1, +64,97,99,111,115,252,90,1,64,97,116,97,110,252,91,1,64,115,113,114,116, +252,92,1,64,101,120,112,116,252,93,1,70,109,97,107,101,45,112,111,108,97, +114,252,94,1,69,114,101,97,108,45,112,97,114,116,252,95,1,69,105,109,97, +103,45,112,97,114,116,252,96,1,65,97,110,103,108,101,252,97,1,69,109,97, +103,110,105,116,117,100,101,252,98,1,71,105,110,112,117,116,45,112,111,114,116, +63,252,99,1,64,114,101,97,100,252,100,1,69,114,101,97,100,45,99,104,97, +114,252,101,1,69,112,101,101,107,45,99,104,97,114,252,102,1,71,101,111,102, +45,111,98,106,101,99,116,63,252,103,1,71,99,104,97,114,45,114,101,97,100, +121,63,252,104,1,65,119,114,105,116,101,252,105,1,67,100,105,115,112,108,97, +121,252,106,1,67,110,101,119,108,105,110,101,252,107,1,70,119,114,105,116,101, +45,99,104,97,114,252,108,1,64,108,111,97,100,252,109,1,67,115,116,114,105, +110,103,63,252,110,1,66,115,116,114,105,110,103,252,111,1,70,115,116,114,105, +110,103,45,114,101,102,252,112,1,71,115,116,114,105,110,103,45,115,101,116,33, +252,113,1,68,115,116,114,105,110,103,61,63,252,114,1,69,115,117,98,115,116, +114,105,110,103,252,115,1,71,115,116,114,105,110,103,45,99,111,112,121,252,116, +1,71,115,116,114,105,110,103,45,99,105,61,63,252,117,1,68,115,116,114,105, +110,103,60,63,252,118,1,68,115,116,114,105,110,103,62,63,252,119,1,69,115, +116,114,105,110,103,60,61,63,252,120,1,69,115,116,114,105,110,103,62,61,63, +252,121,1,71,115,116,114,105,110,103,45,99,105,60,63,252,122,1,71,115,116, +114,105,110,103,45,99,105,62,63,252,123,1,67,118,101,99,116,111,114,63,252, +124,1,71,109,97,107,101,45,118,101,99,116,111,114,252,125,1,66,118,101,99, +116,111,114,252,126,1,70,118,101,99,116,111,114,45,114,101,102,252,127,1,71, +118,101,99,116,111,114,45,115,101,116,33,252,128,1,65,99,104,97,114,63,252, +129,1,66,99,104,97,114,61,63,252,130,1,66,99,104,97,114,60,63,252,131, +1,66,99,104,97,114,62,63,252,132,1,67,99,104,97,114,60,61,63,252,133, +1,67,99,104,97,114,62,61,63,252,134,1,69,99,104,97,114,45,99,105,61, +63,252,135,1,69,99,104,97,114,45,99,105,60,63,252,136,1,69,99,104,97, +114,45,99,105,62,63,252,137,1,70,99,104,97,114,45,99,105,60,61,63,252, +138,1,70,99,104,97,114,45,99,105,62,61,63,252,139,1,71,99,104,97,114, +45,117,112,99,97,115,101,252,140,1,68,98,111,111,108,101,97,110,63,252,141, +1,64,101,113,118,63,252,142,1,66,101,113,117,97,108,63,252,143,1,65,102, +111,114,99,101,252,144,1,76,99,97,108,108,45,119,105,116,104,45,118,97,108, +117,101,115,252,145,1,66,118,97,108,117,101,115,252,146,1,64,101,118,97,108, +252,147,1,2,71,2,93,2,97,2,91,72,100,121,110,97,109,105,99,45,119, +105,110,100,252,148,1,9,193,97,68,35,37,107,101,114,110,101,108,252,149,1, +2,116,2,115,2,114,2,113,95,2,252,149,1,2,100,2,117,0}; + EVAL_ONE_SIZED_STR((char *)expr, 12701); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,19,252,173,1,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,19,252,173,1,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,72,35,37,115,116,120, 109,122,45,98,111,100,121,1,29,2,11,11,18,95,11,35,98,33,10,32,11, 94,159,68,35,37,100,101,102,105,110,101,3,9,11,159,76,35,37,115,116,120, -99,97,115,101,45,115,99,104,101,109,101,4,9,11,16,4,1,20,35,37,112, -108,97,105,110,45,109,111,100,117,108,101,45,98,101,103,105,110,5,158,68,35, -37,107,101,114,110,101,108,6,74,35,37,109,111,100,117,108,101,45,98,101,103, -105,110,7,1,28,109,122,115,99,104,101,109,101,45,105,110,45,115,116,120,45, -109,111,100,117,108,101,45,98,101,103,105,110,8,2,2,10,10,32,80,158,32, -32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,1,2,8,16,1,11, -16,1,2,8,32,33,93,16,5,93,2,8,89,162,32,33,44,9,223,0,28, +99,97,115,101,45,115,99,104,101,109,101,4,9,11,16,4,1,28,109,122,115, +99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45,98, +101,103,105,110,5,2,2,1,20,35,37,112,108,97,105,110,45,109,111,100,117, +108,101,45,98,101,103,105,110,6,158,68,35,37,107,101,114,110,101,108,7,74, +35,37,109,111,100,117,108,101,45,98,101,103,105,110,8,10,10,32,80,158,32, +32,20,98,158,16,0,16,0,11,11,16,0,32,11,16,1,2,5,16,1,11, +16,1,2,5,32,33,93,16,5,93,2,5,89,162,32,33,44,9,223,0,28, 248,80,158,33,32,194,250,22,209,20,15,159,35,32,34,250,22,61,20,15,159, 38,33,34,249,22,209,201,249,22,59,20,15,159,42,34,34,68,109,122,115,99, 104,101,109,101,9,248,80,158,39,33,200,196,250,22,252,39,2,11,6,10,10, @@ -3937,14 +3937,14 @@ 37,115,116,120,11,69,115,116,120,45,112,97,105,114,63,12,11,30,13,2,11, 67,115,116,120,45,99,100,114,14,6,16,3,18,98,64,104,101,114,101,15,39, 33,98,38,10,33,11,93,159,2,11,9,11,16,0,96,37,8,254,1,11,16, -0,16,4,36,11,63,115,116,120,16,3,1,7,101,110,118,52,51,48,49,17, -18,158,2,5,39,18,158,78,114,101,113,117,105,114,101,45,102,111,114,45,115, -121,110,116,97,120,18,39,11,9,95,2,6,2,4,2,3,94,2,6,2,11, +0,16,4,36,11,63,115,116,120,16,3,1,7,101,110,118,52,51,48,57,17, +18,158,2,6,39,18,158,78,114,101,113,117,105,114,101,45,102,111,114,45,115, +121,110,116,97,120,18,39,11,9,95,2,7,2,4,2,3,94,2,7,2,11, 0}; EVAL_ONE_SIZED_STR((char *)expr, 441); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,91,252,159,6,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,91,252,159,6,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,68,109,122,115,99,104, 101,109,101,1,29,2,11,11,10,10,10,32,80,158,32,32,20,98,158,16,0, 16,0,74,35,37,109,111,100,117,108,101,45,98,101,103,105,110,3,10,16,0, @@ -3978,79 +3978,79 @@ 71,114,97,116,105,111,110,97,108,105,122,101,32,1,20,114,101,97,100,45,101, 118,97,108,45,112,114,105,110,116,45,108,111,111,112,33,1,25,115,99,104,101, 109,101,45,114,101,112,111,114,116,45,101,110,118,105,114,111,110,109,101,110,116, -34,64,99,111,110,100,35,64,119,104,101,110,36,66,117,110,108,101,115,115,37, -66,108,101,116,47,101,99,38,71,119,105,116,104,45,115,121,110,116,97,120,39, -72,115,121,110,116,97,120,45,99,97,115,101,42,40,71,115,121,110,116,97,120, -45,99,97,115,101,41,70,115,121,110,116,97,120,47,108,111,99,42,75,113,117, -97,115,105,115,121,110,116,97,120,47,108,111,99,43,75,108,101,116,114,101,99, -45,115,121,110,116,97,120,101,115,44,77,117,110,115,121,110,116,97,120,45,115, -112,108,105,99,105,110,103,45,68,117,110,115,121,110,116,97,120,46,71,113,117, -97,115,105,115,121,110,116,97,120,47,73,119,105,116,104,45,104,97,110,100,108, -101,114,115,48,71,115,101,116,33,45,118,97,108,117,101,115,49,70,108,101,116, -45,115,116,114,117,99,116,50,69,102,108,117,105,100,45,108,101,116,51,73,100, -101,102,105,110,101,45,115,121,110,116,97,120,52,72,115,121,110,116,97,120,45, -114,117,108,101,115,53,78,112,97,114,97,109,101,116,101,114,105,122,101,45,98, -114,101,97,107,54,65,100,101,108,97,121,55,66,108,101,116,47,99,99,56,2, -3,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120,57,76, -98,101,103,105,110,45,102,111,114,45,115,121,110,116,97,120,58,66,100,101,102, -105,110,101,59,74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,60,73, -100,101,102,105,110,101,45,115,116,114,117,99,116,61,66,115,121,110,116,97,120, -62,73,108,101,116,114,101,99,45,115,121,110,116,97,120,63,72,108,101,116,45, -115,121,110,116,97,120,101,115,64,64,116,105,109,101,65,70,108,101,116,45,115, -121,110,116,97,120,66,75,115,121,110,116,97,120,45,105,100,45,114,117,108,101, -115,67,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108,97,109,98,100, -97,68,70,113,117,97,115,105,113,117,111,116,101,69,1,28,109,122,115,99,104, -101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45,98,101,103, -105,110,70,72,112,97,114,97,109,101,116,101,114,105,122,101,71,64,99,97,115, -101,72,63,97,110,100,73,62,111,114,74,62,100,111,75,16,73,73,35,37,109, +34,2,3,77,100,101,102,105,110,101,45,102,111,114,45,115,121,110,116,97,120, +35,71,119,105,116,104,45,115,121,110,116,97,120,36,76,98,101,103,105,110,45, +102,111,114,45,115,121,110,116,97,120,37,66,108,101,116,47,101,99,38,72,115, +121,110,116,97,120,45,99,97,115,101,42,39,71,115,121,110,116,97,120,45,99, +97,115,101,40,70,115,121,110,116,97,120,47,108,111,99,41,75,113,117,97,115, +105,115,121,110,116,97,120,47,108,111,99,42,77,117,110,115,121,110,116,97,120, +45,115,112,108,105,99,105,110,103,43,66,117,110,108,101,115,115,44,71,115,101, +116,33,45,118,97,108,117,101,115,45,68,117,110,115,121,110,116,97,120,46,71, +113,117,97,115,105,115,121,110,116,97,120,47,64,99,97,115,101,48,66,100,101, +102,105,110,101,49,62,100,111,50,73,100,101,102,105,110,101,45,115,121,110,116, +97,120,51,64,116,105,109,101,52,73,108,101,116,114,101,99,45,115,121,110,116, +97,120,53,65,100,101,108,97,121,54,78,112,97,114,97,109,101,116,101,114,105, +122,101,45,98,114,101,97,107,55,64,99,111,110,100,56,73,100,101,102,105,110, +101,45,115,116,114,117,99,116,57,64,119,104,101,110,58,66,115,121,110,116,97, +120,59,79,109,101,109,111,114,121,45,116,114,97,99,101,45,108,97,109,98,100, +97,60,75,108,101,116,114,101,99,45,115,121,110,116,97,120,101,115,61,72,108, +101,116,45,115,121,110,116,97,120,101,115,62,70,108,101,116,45,115,121,110,116, +97,120,63,72,115,121,110,116,97,120,45,114,117,108,101,115,64,75,115,121,110, +116,97,120,45,105,100,45,114,117,108,101,115,65,72,112,97,114,97,109,101,116, +101,114,105,122,101,66,73,119,105,116,104,45,104,97,110,100,108,101,114,115,67, +74,119,105,116,104,45,104,97,110,100,108,101,114,115,42,68,70,108,101,116,45, +115,116,114,117,99,116,69,66,108,101,116,47,99,99,70,69,102,108,117,105,100, +45,108,101,116,71,70,113,117,97,115,105,113,117,111,116,101,72,1,28,109,122, +115,99,104,101,109,101,45,105,110,45,115,116,120,45,109,111,100,117,108,101,45, +98,101,103,105,110,73,63,97,110,100,74,62,111,114,75,16,73,73,35,37,109, 111,114,101,45,115,99,104,101,109,101,76,2,76,66,35,37,109,105,115,99,77, 2,77,2,77,76,35,37,115,116,120,99,97,115,101,45,115,99,104,101,109,101, 78,2,77,2,76,2,77,2,76,2,77,2,77,2,76,70,35,37,119,105,116, 104,45,115,116,120,79,2,77,65,35,37,115,116,120,80,2,77,2,77,2,77, 2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,77,2,76,2,77,2, -77,2,77,66,35,37,99,111,110,100,81,74,35,37,100,101,102,105,110,101,45, -101,116,45,97,108,82,2,82,2,82,2,79,68,35,37,115,116,120,108,111,99, -83,2,83,2,83,67,35,37,113,113,115,116,120,84,2,78,2,84,2,84,2, -84,2,76,2,76,2,76,2,76,68,35,37,100,101,102,105,110,101,85,2,78, -2,76,2,76,2,76,68,35,37,107,101,114,110,101,108,86,2,85,2,85,2, -85,2,76,2,82,69,35,37,115,116,120,99,97,115,101,87,2,78,2,78,2, -76,2,78,2,78,2,77,71,35,37,113,113,45,97,110,100,45,111,114,88,72, -35,37,115,116,120,109,122,45,98,111,100,121,89,2,76,2,76,2,88,2,88, -2,76,16,73,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2, +77,2,77,68,35,37,107,101,114,110,101,108,81,68,35,37,100,101,102,105,110, +101,82,2,79,2,82,74,35,37,100,101,102,105,110,101,45,101,116,45,97,108, +83,68,35,37,115,116,120,108,111,99,84,2,84,2,84,67,35,37,113,113,115, +116,120,85,2,85,2,83,2,76,2,85,2,85,2,76,2,82,2,76,2,82, +2,76,2,78,2,76,2,76,66,35,37,99,111,110,100,86,2,83,2,83,69, +35,37,115,116,120,99,97,115,101,87,2,77,2,78,2,78,2,78,2,78,2, +78,2,76,2,76,2,76,2,76,2,76,2,76,71,35,37,113,113,45,97,110, +100,45,111,114,88,72,35,37,115,116,120,109,122,45,98,111,100,121,89,2,88, +2,88,16,73,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,2,18,2,19,2,20,2,21,2,22, 2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2, -33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43, -2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2, -54,2,55,2,56,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101, -45,98,101,103,105,110,90,2,57,2,58,2,59,2,60,2,61,2,62,2,63, -2,64,2,65,2,66,2,67,2,68,2,69,2,3,2,71,2,72,2,73,2, -74,2,75,8,31,8,73,9,9,100,2,86,2,76,2,77,2,78,2,80,2, -89,2,84,2,85,9,0}; +33,2,34,1,20,35,37,112,108,97,105,110,45,109,111,100,117,108,101,45,98, +101,103,105,110,90,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42, +2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2, +53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63, +2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,3,2, +74,2,75,8,31,8,73,9,9,100,2,81,2,76,2,77,2,78,2,80,2, +89,2,85,2,82,9,0}; EVAL_ONE_SIZED_STR((char *)expr, 1707); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,121,252,116,15,159,32,20,98,158,16,1,20,24, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,121,252,117,15,159,32,20,98,158,16,1,20,24, 65,98,101,103,105,110,0,16,0,83,158,39,20,95,114,66,35,37,114,53,114, 115,1,29,2,11,11,10,10,10,33,80,158,32,32,20,98,158,16,1,30,3, 2,2,69,117,110,100,101,102,105,110,101,100,4,254,1,16,0,11,11,16,1, -2,4,33,11,16,24,63,97,110,100,5,65,100,101,108,97,121,6,66,108,97, -109,98,100,97,7,71,114,53,114,115,58,108,101,116,114,101,99,8,65,35,37, -97,112,112,9,64,108,101,116,42,10,73,108,101,116,114,101,99,45,115,121,110, -116,97,120,11,66,100,101,102,105,110,101,12,67,35,37,100,97,116,117,109,13, -63,108,101,116,14,64,99,111,110,100,15,2,0,70,108,101,116,45,115,121,110, -116,97,120,16,62,105,102,17,62,100,111,18,65,113,117,111,116,101,19,62,111, -114,20,73,100,101,102,105,110,101,45,115,121,110,116,97,120,21,70,113,117,97, -115,105,113,117,111,116,101,22,76,117,110,113,117,111,116,101,45,115,112,108,105, -99,105,110,103,23,64,115,101,116,33,24,65,35,37,116,111,112,25,64,99,97, -115,101,26,67,117,110,113,117,111,116,101,27,16,24,71,35,37,113,113,45,97, -110,100,45,111,114,28,73,35,37,109,111,114,101,45,115,99,104,101,109,101,29, -68,35,37,107,101,114,110,101,108,30,11,2,30,2,30,76,35,37,115,116,120, -99,97,115,101,45,115,99,104,101,109,101,31,68,35,37,100,101,102,105,110,101, -32,2,30,2,30,66,35,37,99,111,110,100,33,2,30,2,31,2,30,2,29, -2,30,2,28,2,32,2,28,2,30,2,30,2,30,2,29,2,30,16,24,2, -5,2,6,2,7,66,108,101,116,114,101,99,34,2,9,2,10,2,11,2,12, +2,4,33,11,16,24,73,100,101,102,105,110,101,45,115,121,110,116,97,120,5, +65,100,101,108,97,121,6,66,108,97,109,98,100,97,7,62,100,111,8,71,114, +53,114,115,58,108,101,116,114,101,99,9,66,100,101,102,105,110,101,10,65,35, +37,97,112,112,11,64,108,101,116,42,12,67,35,37,100,97,116,117,109,13,63, +108,101,116,14,64,99,111,110,100,15,2,0,73,108,101,116,114,101,99,45,115, +121,110,116,97,120,16,76,117,110,113,117,111,116,101,45,115,112,108,105,99,105, +110,103,17,63,97,110,100,18,65,113,117,111,116,101,19,62,111,114,20,62,105, +102,21,70,113,117,97,115,105,113,117,111,116,101,22,64,99,97,115,101,23,70, +108,101,116,45,115,121,110,116,97,120,24,64,115,101,116,33,25,65,35,37,116, +111,112,26,67,117,110,113,117,111,116,101,27,16,24,68,35,37,100,101,102,105, +110,101,28,73,35,37,109,111,114,101,45,115,99,104,101,109,101,29,68,35,37, +107,101,114,110,101,108,30,2,29,11,2,28,2,30,2,30,2,30,2,30,66, +35,37,99,111,110,100,31,2,30,76,35,37,115,116,120,99,97,115,101,45,115, +99,104,101,109,101,32,2,30,71,35,37,113,113,45,97,110,100,45,111,114,33, +2,30,2,33,2,30,2,33,2,29,2,32,2,30,2,30,2,30,16,24,2, +5,2,6,2,7,2,8,66,108,101,116,114,101,99,34,2,10,2,11,2,12, 2,13,2,14,2,15,2,0,2,16,2,17,2,18,2,19,2,20,2,21,2, -22,2,23,2,24,2,25,2,26,2,27,32,56,93,16,5,93,2,8,89,162, +22,2,23,2,24,2,25,2,26,2,27,32,56,93,16,5,93,2,9,89,162, 32,33,8,32,9,223,0,27,28,248,80,158,34,32,195,249,80,158,35,33,248, 80,158,36,34,197,27,248,80,158,37,35,198,28,248,80,158,37,32,193,249,80, 158,38,36,27,248,80,158,40,34,196,28,248,80,158,40,37,193,248,22,8,89, @@ -4061,20 +4061,20 @@ 80,158,37,40,196,28,248,22,57,193,21,94,9,9,248,80,158,35,41,193,11, 27,248,80,158,40,35,196,28,248,80,158,40,37,193,248,80,158,40,40,193,11, 11,11,28,192,27,248,22,52,194,27,248,22,78,195,27,248,22,87,196,27,248, -22,88,197,249,80,158,39,42,200,27,250,22,61,199,198,200,27,20,15,159,41, +22,88,197,249,80,158,39,42,200,27,250,22,61,200,199,198,27,20,15,159,41, 32,44,91,159,33,11,90,161,33,32,11,83,160,38,32,33,11,247,248,22,8, 89,162,32,33,40,9,226,11,2,3,1,250,22,31,89,162,32,32,36,9,225, 6,3,7,90,161,33,33,10,247,22,252,184,2,248,22,252,184,2,89,162,32, 33,36,9,224,3,1,248,193,89,162,32,32,36,9,224,2,3,28,248,22,252, -181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,99,2,8,6,19,19, +181,2,193,248,22,252,186,2,193,249,80,158,35,43,21,99,2,9,6,19,19, 103,101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,94,64, 118,97,114,49,35,63,46,46,46,36,9,94,94,2,35,65,105,110,105,116,49, 37,2,36,64,98,111,100,121,38,2,36,20,15,159,35,33,44,89,162,32,32, 52,9,225,6,5,4,27,250,22,209,20,15,159,38,34,44,250,22,209,20,15, 159,41,35,44,253,22,62,20,15,159,47,36,44,20,15,159,47,37,44,248,22, -80,206,20,15,159,47,38,44,250,22,2,89,162,33,33,41,9,223,18,250,22, +52,206,20,15,159,47,38,44,250,22,2,89,162,33,33,41,9,223,18,250,22, 209,20,15,159,35,39,44,249,22,60,248,22,52,199,248,22,78,199,20,15,159, -35,40,44,248,22,80,23,17,248,22,52,23,17,248,22,78,206,20,15,159,41, +35,40,44,248,22,52,23,17,248,22,78,23,17,248,22,80,206,20,15,159,41, 41,44,197,89,162,32,32,33,9,223,0,192,89,162,32,32,34,9,223,3,248, 22,252,184,2,208,27,28,248,80,158,35,32,196,249,80,158,36,33,248,80,158, 37,34,198,27,248,80,158,38,35,199,28,248,80,158,38,32,193,28,27,248,80, @@ -4099,7 +4099,7 @@ 248,22,252,184,2,89,162,32,33,36,9,224,3,1,248,193,89,162,32,32,36, 9,224,2,3,28,248,22,252,181,2,193,248,22,252,186,2,193,249,80,158,35, 43,21,95,2,14,94,94,2,35,2,4,2,36,97,2,14,94,94,65,116,101, -109,112,49,39,2,37,2,36,95,2,24,2,35,2,39,2,36,96,2,14,9, +109,112,49,39,2,37,2,36,95,2,25,2,35,2,39,2,36,96,2,14,9, 2,38,2,36,20,15,159,35,43,44,89,162,32,32,8,29,9,225,6,5,4, 27,250,22,209,20,15,159,38,44,44,250,22,209,20,15,159,41,45,44,250,22, 60,20,15,159,44,46,44,249,22,2,89,162,33,33,40,9,223,14,250,22,209, @@ -4133,21 +4133,21 @@ 49,37,193,248,80,158,49,40,193,11,11,11,11,11,11,11,28,192,27,248,22, 52,194,27,248,22,78,195,27,248,22,87,196,27,248,22,90,197,27,249,22,70, 199,36,27,249,22,70,200,37,27,249,22,69,201,38,249,80,158,44,42,205,27, -252,22,61,204,200,202,201,203,27,20,15,159,46,8,31,44,91,159,33,11,90, +252,22,61,204,200,203,202,201,27,20,15,159,46,8,31,44,91,159,33,11,90, 161,33,32,11,83,160,38,32,33,11,247,248,22,8,89,162,32,33,40,9,226, 16,2,3,1,250,22,31,89,162,32,32,36,9,225,6,3,7,90,161,33,33, 10,247,22,252,184,2,248,22,252,184,2,89,162,32,33,36,9,224,3,1,248, 193,89,162,32,32,36,9,224,2,3,28,248,22,252,181,2,193,248,22,252,186, -2,193,249,80,158,35,43,21,99,2,8,6,19,19,103,101,110,101,114,97,116, +2,193,249,80,158,35,43,21,99,2,9,6,19,19,103,101,110,101,114,97,116, 101,95,116,101,109,112,95,110,97,109,101,115,94,61,121,40,2,36,95,67,110, 101,119,116,101,109,112,41,64,116,101,109,112,42,2,36,94,94,2,35,2,37, 2,36,2,38,2,36,20,15,159,35,8,32,44,89,162,32,32,54,9,225,6, 5,4,27,250,22,209,20,15,159,38,8,33,44,250,22,209,20,15,159,41,8, 34,44,253,22,62,20,15,159,47,8,35,44,20,15,159,47,8,36,44,248,22, 52,206,250,22,209,20,15,159,50,8,37,44,249,22,56,20,15,159,52,8,38, -44,248,22,89,23,19,20,15,159,50,8,39,44,250,22,2,89,162,33,33,41, +44,248,22,87,23,19,20,15,159,50,8,39,44,250,22,2,89,162,33,33,41, 9,223,18,250,22,209,20,15,159,35,8,40,44,249,22,60,248,22,52,199,248, -22,78,199,20,15,159,35,8,41,44,248,22,87,23,17,248,22,90,23,17,248, +22,78,199,20,15,159,35,8,41,44,248,22,90,23,17,248,22,89,23,17,248, 22,78,206,20,15,159,41,8,42,44,197,89,162,32,32,33,9,223,0,192,89, 162,32,32,34,9,223,3,248,22,252,184,2,208,250,22,252,39,2,11,6,10, 10,98,97,100,32,115,121,110,116,97,120,199,32,20,98,158,16,12,30,43,65, @@ -4162,66 +4162,67 @@ 115,116,120,108,111,99,65,68,114,101,108,111,99,97,116,101,66,1,30,67,69, 35,37,115,116,120,99,97,115,101,68,1,20,101,108,108,105,112,115,105,115,45, 99,111,117,110,116,45,101,114,114,111,114,69,0,16,43,18,16,2,95,66,115, -114,99,116,97,103,70,34,93,8,252,60,11,95,9,8,252,60,11,2,68,18, -16,2,99,2,36,39,93,8,252,60,11,16,6,38,11,61,114,71,63,115,114, -99,72,3,1,7,101,110,118,52,51,50,49,73,2,73,16,4,37,11,64,101, -120,110,104,74,3,1,7,101,110,118,52,51,50,50,75,16,4,36,11,63,101, -115,99,76,3,1,7,101,110,118,52,51,50,51,77,16,4,35,11,63,101,120, -110,78,3,1,7,101,110,118,52,51,50,53,79,95,9,8,252,60,11,2,68, +114,99,116,97,103,70,34,93,8,252,62,11,95,9,8,252,62,11,2,68,18, +16,2,99,2,36,39,93,8,252,62,11,16,6,38,11,61,114,71,63,115,114, +99,72,3,1,7,101,110,118,52,51,50,57,73,2,73,16,4,37,11,64,101, +120,110,104,74,3,1,7,101,110,118,52,51,51,48,75,16,4,36,11,63,101, +115,99,76,3,1,7,101,110,118,52,51,51,49,77,16,4,35,11,63,101,120, +110,78,3,1,7,101,110,118,52,51,51,51,79,95,9,8,252,62,11,2,68, 18,99,64,100,101,115,116,80,45,98,44,10,32,11,93,159,68,109,122,115,99, -104,101,109,101,81,9,11,16,4,2,8,2,2,2,4,2,2,98,43,10,33, +104,101,109,101,81,9,11,16,4,2,9,2,2,2,4,2,2,98,43,10,33, 11,93,159,2,81,9,11,16,0,96,42,8,254,1,11,16,0,16,8,41,11, 3,1,4,103,53,53,53,82,3,1,4,103,53,53,54,83,3,1,4,103,53, -53,55,84,3,1,7,101,110,118,52,51,49,52,85,2,85,2,85,16,8,40, -11,2,35,2,37,2,38,3,1,7,101,110,118,52,51,49,53,86,2,86,2, -86,18,158,63,99,116,120,87,45,18,158,2,8,45,18,158,6,19,19,103,101, +53,55,84,3,1,7,101,110,118,52,51,50,50,85,2,85,2,85,16,8,40, +11,2,35,2,37,2,38,3,1,7,101,110,118,52,51,50,51,86,2,86,2, +86,18,158,63,99,116,120,87,45,18,158,2,9,45,18,158,6,19,19,103,101, 110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,45,18,158,9, 45,18,158,2,87,45,18,158,2,87,45,18,158,2,87,45,18,16,2,95,2, -70,46,93,8,252,64,11,95,9,8,252,64,11,2,68,18,16,2,99,2,36, -51,93,8,252,64,11,16,6,50,11,2,71,2,72,3,1,7,101,110,118,52, -51,53,53,88,2,88,16,4,49,11,2,74,3,1,7,101,110,118,52,51,53, -54,89,16,4,48,11,2,76,3,1,7,101,110,118,52,51,53,55,90,16,4, -47,11,2,78,3,1,7,101,110,118,52,51,53,57,91,95,9,8,252,64,11, +70,46,93,8,252,66,11,95,9,8,252,66,11,2,68,18,16,2,99,2,36, +51,93,8,252,66,11,16,6,50,11,2,71,2,72,3,1,7,101,110,118,52, +51,54,51,88,2,88,16,4,49,11,2,74,3,1,7,101,110,118,52,51,54, +52,89,16,4,48,11,2,76,3,1,7,101,110,118,52,51,54,53,90,16,4, +47,11,2,78,3,1,7,101,110,118,52,51,54,55,91,95,9,8,252,66,11, 2,68,18,99,2,80,54,44,43,42,16,10,53,11,3,1,4,103,53,53,48, 92,3,1,4,103,53,53,49,93,3,1,4,103,53,53,50,94,3,1,4,103, -53,53,51,95,3,1,7,101,110,118,52,51,52,55,96,2,96,2,96,2,96, -16,10,52,11,2,39,2,35,2,37,2,38,3,1,7,101,110,118,52,51,52, -56,97,2,97,2,97,2,97,18,158,2,87,54,18,158,2,14,54,18,158,2, +53,53,51,95,3,1,7,101,110,118,52,51,53,53,96,2,96,2,96,2,96, +16,10,52,11,2,39,2,35,2,37,2,38,3,1,7,101,110,118,52,51,53, +54,97,2,97,2,97,2,97,18,158,2,87,54,18,158,2,14,54,18,158,2, 87,54,18,16,2,106,93,16,2,158,2,4,54,9,8,33,98,8,32,10,32, 11,94,159,74,35,37,115,109,97,108,108,45,115,99,104,101,109,101,98,9,11, -159,2,44,9,11,16,6,66,115,121,110,116,97,120,99,29,100,11,11,2,69, -2,100,73,115,121,110,116,97,120,45,99,97,115,101,42,42,101,2,100,98,8, +159,2,44,9,11,16,6,2,69,29,99,11,11,73,115,121,110,116,97,120,45, +99,97,115,101,42,42,100,2,99,66,115,121,110,116,97,120,101,2,99,98,8, 31,10,33,11,95,159,64,35,37,115,99,102,9,11,159,2,98,9,11,159,2, 44,9,11,16,0,96,8,30,8,254,1,11,16,0,16,4,8,29,11,61,120, 103,3,1,6,101,110,118,51,56,49,104,16,4,8,28,11,68,104,101,114,101, 45,115,116,120,105,3,1,6,101,110,118,51,56,51,106,16,4,59,11,2,105, -2,106,13,16,3,33,2,100,2,68,93,8,252,64,11,16,6,58,11,2,71, -2,72,2,88,2,88,16,4,57,11,2,74,2,89,16,4,56,11,2,76,2, -90,16,4,55,11,64,118,97,108,115,107,3,1,7,101,110,118,52,51,54,51, -108,95,9,8,252,64,11,2,68,18,158,2,87,54,18,158,2,87,54,18,158, -2,14,54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,158,2, -24,54,18,158,2,87,54,18,158,2,87,54,18,158,2,14,54,18,158,9,54, -18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,16,2,95,2,70, -8,34,93,8,252,69,11,95,9,8,252,69,11,2,68,18,16,2,99,2,36, -8,39,93,8,252,69,11,16,6,8,38,11,2,71,2,72,3,1,7,101,110, -118,52,51,57,55,109,2,109,16,4,8,37,11,2,74,3,1,7,101,110,118, -52,51,57,56,110,16,4,8,36,11,2,76,3,1,7,101,110,118,52,51,57, -57,111,16,4,8,35,11,2,78,3,1,7,101,110,118,52,52,48,49,112,95, -9,8,252,69,11,2,68,18,99,2,80,8,42,44,43,42,16,14,8,41,11, -3,1,4,103,53,52,51,113,3,1,4,103,53,52,52,114,3,1,4,103,53, -52,53,115,3,1,4,103,53,52,54,116,3,1,4,103,53,52,55,117,3,1, -4,103,53,52,56,118,3,1,7,101,110,118,52,51,56,55,119,2,119,2,119, -2,119,2,119,2,119,16,14,8,40,11,2,103,2,40,2,42,2,35,2,37, -2,38,3,1,7,101,110,118,52,51,56,56,120,2,120,2,120,2,120,2,120, -2,120,18,158,2,87,8,42,18,158,2,8,8,42,18,158,6,19,19,103,101, -110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,8,42,18,158, -2,87,8,42,18,158,2,41,8,42,18,158,2,87,8,42,18,158,2,87,8, -42,18,158,2,87,8,42,18,158,2,87,8,42,11,93,83,159,32,93,80,159, -32,32,33,91,159,33,10,90,161,33,32,10,207,207,93,2,81,93,2,81,0}; - EVAL_ONE_SIZED_STR((char *)expr, 3968); +2,106,13,16,4,33,2,99,2,68,11,93,8,252,66,11,16,6,58,11,2, +71,2,72,2,88,2,88,16,4,57,11,2,74,2,89,16,4,56,11,2,76, +2,90,16,4,55,11,64,118,97,108,115,107,3,1,7,101,110,118,52,51,55, +49,108,95,9,8,252,66,11,2,68,18,158,2,87,54,18,158,2,87,54,18, +158,2,14,54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,158, +2,25,54,18,158,2,87,54,18,158,2,87,54,18,158,2,14,54,18,158,9, +54,18,158,2,87,54,18,158,2,87,54,18,158,2,87,54,18,16,2,95,2, +70,8,34,93,8,252,71,11,95,9,8,252,71,11,2,68,18,16,2,99,2, +36,8,39,93,8,252,71,11,16,6,8,38,11,2,71,2,72,3,1,7,101, +110,118,52,52,48,53,109,2,109,16,4,8,37,11,2,74,3,1,7,101,110, +118,52,52,48,54,110,16,4,8,36,11,2,76,3,1,7,101,110,118,52,52, +48,55,111,16,4,8,35,11,2,78,3,1,7,101,110,118,52,52,48,57,112, +95,9,8,252,71,11,2,68,18,99,2,80,8,42,44,43,42,16,14,8,41, +11,3,1,4,103,53,52,51,113,3,1,4,103,53,52,52,114,3,1,4,103, +53,52,53,115,3,1,4,103,53,52,54,116,3,1,4,103,53,52,55,117,3, +1,4,103,53,52,56,118,3,1,7,101,110,118,52,51,57,53,119,2,119,2, +119,2,119,2,119,2,119,16,14,8,40,11,2,103,2,40,2,42,2,35,2, +37,2,38,3,1,7,101,110,118,52,51,57,54,120,2,120,2,120,2,120,2, +120,2,120,18,158,2,87,8,42,18,158,2,9,8,42,18,158,6,19,19,103, +101,110,101,114,97,116,101,95,116,101,109,112,95,110,97,109,101,115,8,42,18, +158,2,87,8,42,18,158,2,41,8,42,18,158,2,87,8,42,18,158,2,87, +8,42,18,158,2,87,8,42,18,158,2,87,8,42,11,93,83,159,32,93,80, +159,32,32,33,91,159,33,10,90,161,33,32,10,207,207,93,2,81,93,2,81, +0}; + EVAL_ONE_SIZED_STR((char *)expr, 3969); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,5,93,159,32,20,98,158,16,1,20,24,65,98, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,5,93,159,32,20,98,158,16,1,20,24,65,98, 101,103,105,110,0,16,0,83,160,40,80,158,32,32,32,18,158,94,96,67,114, 101,113,117,105,114,101,1,34,10,11,158,95,158,64,111,110,108,121,2,34,158, 68,109,122,115,99,104,101,109,101,3,34,158,1,22,110,97,109,101,115,112,97, @@ -4229,14 +4230,14 @@ EVAL_ONE_SIZED_STR((char *)expr, 103); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,3,73,159,33,20,98,158,16,1,20,24,65,98, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,3,73,159,33,20,98,158,16,1,20,24,65,98, 101,103,105,110,0,16,0,87,94,248,22,241,68,109,122,115,99,104,101,109,101, 1,83,160,40,80,158,32,32,33,18,158,94,96,78,114,101,113,117,105,114,101, 45,102,111,114,45,115,121,110,116,97,120,2,34,10,11,158,2,1,34,34,0}; EVAL_ONE_SIZED_STR((char *)expr, 83); } { - static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,49,2,66,159,36,20,98,158,16,0,16,0,248,22, + static MZCOMPILED_STRING_FAR unsigned char expr[] = {35,126,5,51,53,48,46,50,2,66,159,36,20,98,158,16,0,16,0,248,22, 233,248,249,22,235,66,35,37,109,105,115,99,0,1,34,109,97,107,101,45,115, 116,97,110,100,97,114,100,45,109,111,100,117,108,101,45,110,97,109,101,45,114, 101,115,111,108,118,101,114,1,247,22,252,211,2,0}; diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 410ea8add9..07a81616f1 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -644,7 +644,7 @@ Scheme_Env *scheme_make_empty_env(void) static Scheme_Env *make_env(Scheme_Env *base, int semi, int toplevel_size) { Scheme_Bucket_Table *toplevel, *syntax; - Scheme_Hash_Table *module_registry; + Scheme_Hash_Table *module_registry, *export_registry; Scheme_Object *modchain; Scheme_Env *env; @@ -655,14 +655,17 @@ static Scheme_Env *make_env(Scheme_Env *base, int semi, int toplevel_size) syntax = NULL; modchain = NULL; module_registry = NULL; + export_registry = NULL; } else { syntax = scheme_make_bucket_table(7, SCHEME_hash_ptr); if (base) { modchain = base->modchain; module_registry = base->module_registry; + export_registry = base->export_registry; } else { if (semi < 0) { module_registry = NULL; + export_registry = NULL; modchain = NULL; } else { Scheme_Hash_Table *modules; @@ -673,6 +676,8 @@ static Scheme_Env *make_env(Scheme_Env *base, int semi, int toplevel_size) module_registry = scheme_make_hash_table(SCHEME_hash_ptr); module_registry->iso.so.type = scheme_module_registry_type; + + export_registry = scheme_make_hash_table(SCHEME_hash_ptr); } } } @@ -686,6 +691,7 @@ static Scheme_Env *make_env(Scheme_Env *base, int semi, int toplevel_size) env->syntax = syntax; env->modchain = modchain; env->module_registry = module_registry; + env->export_registry = export_registry; } return env; @@ -725,6 +731,7 @@ void scheme_prepare_exp_env(Scheme_Env *env) eenv->module = env->module; eenv->module_registry = env->module_registry; + eenv->export_registry = env->export_registry; eenv->insp = env->insp; modchain = SCHEME_VEC_ELS(env->modchain)[1]; @@ -759,6 +766,7 @@ void scheme_prepare_template_env(Scheme_Env *env) eenv->module = env->module; eenv->module_registry = env->module_registry; + eenv->export_registry = env->export_registry; eenv->insp = env->insp; modchain = SCHEME_VEC_ELS(env->modchain)[2]; @@ -789,6 +797,7 @@ Scheme_Env *scheme_clone_module_env(Scheme_Env *menv, Scheme_Env *ns, Scheme_Obj menv2->module = menv->module; menv2->module_registry = ns->module_registry; + menv2->export_registry = ns->export_registry; menv2->insp = menv->insp; menv2->syntax = menv->syntax; @@ -2322,7 +2331,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags, if (modidx) { /* If it's an access path, resolve it: */ - modname = scheme_module_resolve(modidx); + modname = scheme_module_resolve(modidx, 1); if (env->genv->module && SAME_OBJ(modname, env->genv->module->modname)) { modidx = NULL; diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 899c8b84ad..03797cb5ac 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -1332,7 +1332,7 @@ static Scheme_Object *link_module_variable(Scheme_Object *modidx, Scheme_Env *menv; /* If it's a name id, resolve the name. */ - modname = scheme_module_resolve(modidx); + modname = scheme_module_resolve(modidx, 1); if (env->module && SAME_OBJ(env->module->modname, modname) && (env->mod_phase == mod_phase)) @@ -3041,8 +3041,9 @@ static void *compile_k(void) form = add_renames_unless_module(form, genv); if (genv->module) { form = scheme_stx_phase_shift(form, 0, - genv->module->src_modidx, - genv->module->self_modidx); + genv->module->me->src_modidx, + genv->module->self_modidx, + genv->export_registry); } } @@ -3877,7 +3878,7 @@ static Scheme_Object *check_top(const char *when, Scheme_Object *form, Scheme_Co if (modidx) { /* If it's an access path, resolve it: */ if (env->genv->module - && SAME_OBJ(scheme_module_resolve(modidx), env->genv->module->modname)) + && SAME_OBJ(scheme_module_resolve(modidx, 1), env->genv->module->modname)) bad = 0; else bad = 1; @@ -6041,7 +6042,7 @@ Scheme_Object *scheme_eval_compiled_stx_string(Scheme_Object *expr, Scheme_Env * result = scheme_make_vector(len - 1, NULL); for (i = 0; i < len - 1; i++) { - s = scheme_stx_phase_shift(SCHEME_VEC_ELS(expr)[i], shift, orig, modidx); + s = scheme_stx_phase_shift(SCHEME_VEC_ELS(expr)[i], shift, orig, modidx, env->export_registry); SCHEME_VEC_ELS(result)[i] = s; } @@ -6765,7 +6766,8 @@ Scheme_Object **scheme_push_prefix(Scheme_Env *genv, Resolve_Prefix *rp, if (rp->num_stxes) { i = rp->num_toplevels; - v = scheme_stx_phase_shift_as_rename(now_phase - src_phase, src_modidx, now_modidx); + v = scheme_stx_phase_shift_as_rename(now_phase - src_phase, src_modidx, now_modidx, + genv ? genv->export_registry : NULL); if (v) { /* Put lazy-shift info in a[i]: */ v = scheme_make_raw_pair(v, (Scheme_Object *)rp->stxes); diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 56443c8579..326aabe7f0 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -3107,7 +3107,7 @@ static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, Scheme_Object **runstack_start, Scheme_Cont *share_from) { - Scheme_Saved_Stack *saved, *isaved, *csaved, *share_saved, *ss; + Scheme_Saved_Stack *saved, *isaved, *csaved, *share_saved, *share_csaved, *ss; Scheme_Object **start; long size; @@ -3136,12 +3136,14 @@ static Scheme_Saved_Stack *copy_out_runstack(Scheme_Thread *p, /* Copy saved runstacks: */ isaved = saved; share_saved = NULL; + share_csaved = NULL; if (share_from) { /* We can share all saved runstacks */ - share_saved = share_from->ss.runstack_saved; + share_csaved = share_from->ss.runstack_saved; + share_saved = share_from->runstack_copied->prev; } for (csaved = p->runstack_saved; csaved; csaved = csaved->prev) { - if (share_saved && (csaved->runstack_start == share_saved->runstack_start)) { + if (share_csaved && (csaved->runstack_start == share_csaved->runstack_start)) { /* Share */ isaved->prev = share_saved; break; diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index 84f2a413a6..677aad3089 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -95,6 +95,8 @@ static void eval_defmacro(Scheme_Object *names, int count, Scheme_Bucket_Table *syntax, int for_stx, Scheme_Object *certs); +static Scheme_Module_Exports *make_module_exports(); + #define cons scheme_make_pair static Scheme_Object *modbeg_syntax; @@ -250,7 +252,7 @@ void scheme_init_module(Scheme_Env *env) o = scheme_make_prim_w_arity(default_module_resolver, "default-module-name-resolver", - 3, 3); + 1, 4); scheme_set_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_RESOLVER, o); scheme_set_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_PREFIX, scheme_false); @@ -374,7 +376,6 @@ void scheme_finish_kernel(Scheme_Env *env) REGISTER_SO(kernel); - kernel = MALLOC_ONE_TAGGED(Scheme_Module); kernel->so.type = scheme_module_type; @@ -429,18 +430,24 @@ void scheme_finish_kernel(Scheme_Env *env) kernel->tt_functional = 1; kernel->no_cert = 1; - kernel->provides = exs; - kernel->provide_srcs = NULL; - kernel->provide_src_names = exs; - kernel->num_provides = count; - kernel->num_var_provides = syntax_start; + { + Scheme_Module_Exports *me; + me = make_module_exports(); + kernel->me = me; + } + + kernel->me->provides = exs; + kernel->me->provide_srcs = NULL; + kernel->me->provide_src_names = exs; + kernel->me->num_provides = count; + kernel->me->num_var_provides = syntax_start; scheme_initial_env->running = 1; scheme_initial_env->et_running = 1; scheme_initial_env->attached = 1; rn = scheme_make_module_rename(0, mzMOD_RENAME_NORMAL, NULL); - for (i = kernel->num_provides; i--; ) { + for (i = kernel->me->num_provides; i--; ) { scheme_extend_module_rename(rn, kernel_symbol, exs[i], exs[i], kernel_symbol, exs[i], 0, 0); } @@ -535,9 +542,9 @@ void scheme_require_from_original_env(Scheme_Env *env, int syntax_only) env->rename = rn; } - exs = kernel->provides; - c = kernel->num_provides; - i = (syntax_only ? kernel->num_var_provides : 0); + exs = kernel->me->provides; + c = kernel->me->num_provides; + i = (syntax_only ? kernel->me->num_var_provides : 0); for (; i < c; i++) { scheme_extend_module_rename(rn, kernel_symbol, exs[i], exs[i], kernel_symbol, exs[i], 0, 0); } @@ -689,13 +696,25 @@ static Scheme_Object *default_module_resolver(int argc, Scheme_Object **argv) return NULL; } +static Scheme_Object *check_resolver(int argc, Scheme_Object **argv) +{ + if (scheme_check_proc_arity(NULL, 1, 0, argc, argv) + && scheme_check_proc_arity(NULL, 3, 0, argc, argv) + && scheme_check_proc_arity(NULL, 4, 0, argc, argv)) + return argv[0]; + + scheme_wrong_type("current-module-name-resolver", "procedure of arity 1, 3, and 4", 0, argc, argv); + + return NULL; +} + static Scheme_Object * current_module_name_resolver(int argc, Scheme_Object *argv[]) { return scheme_param_config("current-module-name-resolver", scheme_make_integer(MZCONFIG_CURRENT_MODULE_RESOLVER), argc, argv, - 3, NULL, NULL, 0); + -1, check_resolver, "procedure of arity 1, 3, and 4", 1); } static Scheme_Object *prefix_p(int argc, Scheme_Object **argv) @@ -763,7 +782,7 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], else modidx = scheme_make_modidx(modname, scheme_false, scheme_false); - modname = scheme_module_resolve(modidx); + modname = scheme_module_resolve(modidx, 1); if (phase == 1) { scheme_prepare_exp_env(env); @@ -790,25 +809,25 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], try_again: /* Before starting, check whether the name is provided */ - count = srcm->num_provides; + count = srcm->me->num_provides; if (position >= 0) { - if (position < srcm->num_var_provides) { + if (position < srcm->me->num_var_provides) { i = position; - if ((SCHEME_SYM_LEN(name) == SCHEME_SYM_LEN(srcm->provide_src_names[i])) - && !memcmp(SCHEME_SYM_VAL(name), SCHEME_SYM_VAL(srcm->provide_src_names[i]), SCHEME_SYM_LEN(name))) { - name = srcm->provides[i]; + if ((SCHEME_SYM_LEN(name) == SCHEME_SYM_LEN(srcm->me->provide_src_names[i])) + && !memcmp(SCHEME_SYM_VAL(name), SCHEME_SYM_VAL(srcm->me->provide_src_names[i]), SCHEME_SYM_LEN(name))) { + name = srcm->me->provides[i]; } else { i = count; /* not found */ indirect_ok = 0; /* don't look further */ } } else { - position -= srcm->num_var_provides; + position -= srcm->me->num_var_provides; i = count; } } else { for (i = 0; i < count; i++) { - if (SAME_OBJ(name, srcm->provides[i])) { - if (i < srcm->num_var_provides) { + if (SAME_OBJ(name, srcm->me->provides[i])) { + if (i < srcm->me->num_var_provides) { break; } else { if (fail_with_error) @@ -825,17 +844,17 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[], if (i < count) { if (srcm->provide_protects) protected = srcm->provide_protects[i]; - srcmname = (srcm->provide_srcs ? srcm->provide_srcs[i] : scheme_false); + srcmname = (srcm->me->provide_srcs ? srcm->me->provide_srcs[i] : scheme_false); if (SCHEME_FALSEP(srcmname)) srcmname = srcm->modname; else { - srcmname = scheme_modidx_shift(srcmname, srcm->src_modidx, srcm->self_modidx); - srcmname = scheme_module_resolve(srcmname); + srcmname = scheme_modidx_shift(srcmname, srcm->me->src_modidx, srcm->self_modidx); + srcmname = scheme_module_resolve(srcmname, 1); } - srcname = srcm->provide_src_names[i]; + srcname = srcm->me->provide_src_names[i]; } - if ((position < 0) && (i == count) && srcm->reprovide_kernel) { + if ((position < 0) && (i == count) && srcm->me->reprovide_kernel) { /* Check kernel. */ srcm = kernel; goto try_again; @@ -987,7 +1006,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) { Scheme_Env *from_env, *to_env, *menv, *menv2; Scheme_Object *todo, *next_phase_todo, *prev_phase_todo; - Scheme_Object *name, *notifies = scheme_null, *a[3], *resolver; + Scheme_Object *name, *notifies = scheme_null, *a[1], *resolver; Scheme_Object *to_modchain, *from_modchain, *l; Scheme_Hash_Table *checked, *next_checked, *prev_checked; Scheme_Object *past_checkeds, *future_checkeds, *future_todos, *past_to_modchains; @@ -996,8 +1015,6 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) if (!SCHEME_NAMESPACEP(argv[0])) scheme_wrong_type("namespace-attach-module", "namespace", 0, argc, argv); - if (!SCHEME_SYMBOLP(argv[1])) - scheme_wrong_type("namespace-attach-module", "symbol", 1, argc, argv); from_env = (Scheme_Env *)argv[0]; if (argc > 2) { @@ -1010,7 +1027,12 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) same_namespace = SAME_OBJ(from_env, to_env); - todo = scheme_make_pair(scheme_module_resolve(argv[1]), scheme_null); + if (SCHEME_SYMBOLP(argv[1])) + name = argv[1]; + else + name = scheme_module_resolve(scheme_make_modidx(argv[1], scheme_false, scheme_false), 0); + + todo = scheme_make_pair(name, scheme_null); next_phase_todo = scheme_null; prev_phase_todo = scheme_null; from_modchain = from_env->modchain; @@ -1105,7 +1127,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) /* Push requires onto the check list: */ l = menv->require_names; while (!SCHEME_NULLP(l)) { - name = scheme_module_resolve(SCHEME_CAR(l)); + name = scheme_module_resolve(SCHEME_CAR(l), 0); if (!scheme_hash_get(checked, name)) { /* printf("Add %d %s (%p)\n", phase, SCHEME_SYM_VAL(name), checked); */ todo = scheme_make_pair(name, todo); @@ -1120,7 +1142,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) l = menv->et_require_names; while (!SCHEME_NULLP(l)) { - name = scheme_module_resolve(SCHEME_CAR(l)); + name = scheme_module_resolve(SCHEME_CAR(l), 0); if (!scheme_hash_get(next_checked, name)) { /* printf("Add +%d %s (%p)\n", phase+1, SCHEME_SYM_VAL(name), next_checked); */ next_phase_todo = scheme_make_pair(name, next_phase_todo); @@ -1136,7 +1158,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) if (!prev_checked) prev_checked = scheme_make_hash_table(SCHEME_hash_ptr); - name = scheme_module_resolve(SCHEME_CAR(l)); + name = scheme_module_resolve(SCHEME_CAR(l), 0); if (!scheme_hash_get(prev_checked, name)) { /* printf("Add -%d %s (%p)\n", phase-1, SCHEME_SYM_VAL(name), prev_checked); */ prev_phase_todo = scheme_make_pair(name, prev_phase_todo); @@ -1257,6 +1279,7 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) scheme_hash_set(MODCHAIN_TABLE(to_modchain), name, (Scheme_Object *)menv2); scheme_hash_set(to_env->module_registry, name, (Scheme_Object *)menv2->module); + scheme_hash_set(to_env->export_registry, name, (Scheme_Object *)menv2->module->me); /* Push name onto notify list: */ if (!same_namespace) @@ -1292,11 +1315,9 @@ static Scheme_Object *namespace_attach_module(int argc, Scheme_Object *argv[]) resolver = scheme_get_param(config, MZCONFIG_CURRENT_MODULE_RESOLVER); while (!SCHEME_NULLP(notifies)) { - a[0] = scheme_false; - a[1] = SCHEME_CAR(notifies); - a[2] = scheme_false; + a[0] = SCHEME_CAR(notifies); - name = scheme_apply(resolver, 3, a); + scheme_apply(resolver, 1, a); notifies = SCHEME_CDR(notifies); } @@ -1316,8 +1337,6 @@ static Scheme_Object *namespace_unprotect_module(int argc, Scheme_Object *argv[] if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_inspector_type)) scheme_wrong_type("namespace-unprotect-module", "inspector", 0, argc, argv); - if (!SCHEME_SYMBOLP(argv[1])) - scheme_wrong_type("namespace-unprotect-module", "symbol", 1, argc, argv); insp = argv[0]; if (argc > 2) @@ -1325,7 +1344,10 @@ static Scheme_Object *namespace_unprotect_module(int argc, Scheme_Object *argv[] else to_env = scheme_get_env(NULL); - name = argv[1]; + if (SCHEME_SYMBOLP(argv[1])) + name = argv[1]; + else + name = scheme_module_resolve(scheme_make_modidx(argv[1], scheme_false, scheme_false), 0); to_modchain = to_env->modchain; @@ -1356,12 +1378,12 @@ static int add_require_renames(Scheme_Object *rn, Scheme_Module *im, Scheme_Obje saw_mb = 0; - exs = im->provides; - exsns = im->provide_src_names; - exss = im->provide_srcs; - for (i = im->num_provides; i--; ) { + exs = im->me->provides; + exsns = im->me->provide_src_names; + exss = im->me->provide_srcs; + for (i = im->me->num_provides; i--; ) { if (exss && !SCHEME_FALSEP(exss[i])) - midx = scheme_modidx_shift(exss[i], im->src_modidx, idx); + midx = scheme_modidx_shift(exss[i], im->me->src_modidx, idx); else midx = idx; scheme_extend_module_rename(rn, midx, exs[i], exsns[i], idx, exs[i], 0, 1); @@ -1369,7 +1391,7 @@ static int add_require_renames(Scheme_Object *rn, Scheme_Module *im, Scheme_Obje saw_mb = 1; } - if (im->reprovide_kernel) { + if (im->me->reprovide_kernel) { scheme_extend_module_rename_with_kernel(rn, idx); saw_mb = 1; } @@ -1387,7 +1409,7 @@ static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]) env = scheme_get_env(NULL); - name = scheme_module_resolve(scheme_make_modidx(argv[0], scheme_false, scheme_false)); + name = scheme_module_resolve(scheme_make_modidx(argv[0], scheme_false, scheme_false), 1); modchain = env->modchain; menv = (Scheme_Env *)scheme_hash_get(MODCHAIN_TABLE(modchain), name); @@ -1434,9 +1456,9 @@ static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]) rn = scheme_make_module_rename(0, mzMOD_RENAME_NORMAL, mn_ht); /* Local, provided: */ - for (i = 0; i < m->num_provides; i++) { - if (SCHEME_FALSEP(m->provide_srcs[i])) { - name = m->provides[i]; + for (i = 0; i < m->me->num_provides; i++) { + if (SCHEME_FALSEP(m->me->provide_srcs[i])) { + name = m->me->provides[i]; scheme_extend_module_rename(rn, m->self_modidx, name, name, m->self_modidx, name, 0, 0); } } @@ -1449,7 +1471,7 @@ static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]) /* Required: */ for (l = menv->require_names; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { idx = SCHEME_CAR(l); - name = scheme_module_resolve(idx); + name = scheme_module_resolve(idx, 0); if (SAME_OBJ(name, kernel_symbol)) im = kernel; @@ -1512,7 +1534,7 @@ static Scheme_Object *module_to_namespace(int argc, Scheme_Object *argv[]) /* Required for syntax: */ for (l = menv->et_require_names; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { idx = SCHEME_CAR(l); - name = scheme_module_resolve(idx); + name = scheme_module_resolve(idx, 0); im = (Scheme_Module *)scheme_hash_get(menv->module_registry, name); add_require_renames(rn, im, idx); @@ -1602,12 +1624,12 @@ static Scheme_Object *module_compiled_exports(int argc, Scheme_Object *argv[]) m = scheme_extract_compiled_module(argv[0]); if (m) { - n = m->num_var_provides; - for (i = m->num_provides - 1; i >= n; --i) { - ml = scheme_make_immutable_pair(m->provides[i], ml); + n = m->me->num_var_provides; + for (i = m->me->num_provides - 1; i >= n; --i) { + ml = scheme_make_immutable_pair(m->me->provides[i], ml); } for (; i >= 0; --i) { - vl = scheme_make_immutable_pair(m->provides[i], vl); + vl = scheme_make_immutable_pair(m->me->provides[i], vl); } a[0] = vl; @@ -1670,7 +1692,7 @@ static Scheme_Object *module_export_protected_p(int argc, Scheme_Object **argv) if (!SCHEME_SYMBOLP(argv[1])) scheme_wrong_type("module-provide-protected?", "symbol", 1, argc, argv); - modname = scheme_module_resolve(argv[0]); + modname = scheme_module_resolve(argv[0], 1); name = argv[1]; env = scheme_get_env(NULL); @@ -1687,9 +1709,9 @@ static Scheme_Object *module_export_protected_p(int argc, Scheme_Object **argv) m = (Scheme_Module *)mv; - count = m->num_provides; + count = m->me->num_provides; for (i = 0; i < count; i++) { - if (SAME_OBJ(name, m->provides[i])) { + if (SAME_OBJ(name, m->me->provides[i])) { if (m->provide_protects && m->provide_protects[i]) return scheme_true; else @@ -1735,16 +1757,16 @@ int same_modidx(Scheme_Object *a, Scheme_Object *b) int same_resolved_modidx(Scheme_Object *a, Scheme_Object *b) { if (SAME_TYPE(SCHEME_TYPE(a), scheme_module_index_type)) - a = scheme_module_resolve(a); + a = scheme_module_resolve(a, 1); if (SAME_TYPE(SCHEME_TYPE(b), scheme_module_index_type)) - b = scheme_module_resolve(b); + b = scheme_module_resolve(b, 1); return scheme_equal(a, b); } static Scheme_Object *_module_resolve_k(void); -static Scheme_Object *_module_resolve(Scheme_Object *modidx, Scheme_Object *stx) +static Scheme_Object *_module_resolve(Scheme_Object *modidx, Scheme_Object *stx, int load_it) { if (SCHEME_SYMBOLP(modidx) || SCHEME_FALSEP(modidx)) return modidx; @@ -1754,7 +1776,7 @@ static Scheme_Object *_module_resolve(Scheme_Object *modidx, Scheme_Object *stx) if (SCHEME_FALSEP(((Scheme_Modidx *)modidx)->resolved)) { /* Need to resolve access path to a module name: */ - Scheme_Object *a[3]; + Scheme_Object *a[4]; Scheme_Object *name, *base; base = ((Scheme_Modidx *)modidx)->base; @@ -1763,22 +1785,24 @@ static Scheme_Object *_module_resolve(Scheme_Object *modidx, Scheme_Object *stx) { Scheme_Thread *p = scheme_current_thread; p->ku.k.p1 = (void *)base; + p->ku.k.i1 = load_it; base = scheme_handle_stack_overflow(_module_resolve_k); } else { - base = _module_resolve(base, NULL); + base = _module_resolve(base, NULL, load_it); } } a[0] = ((Scheme_Modidx *)modidx)->path; a[1] = base; a[2] = (stx ? stx : scheme_false); + a[3] = (load_it ? scheme_true : scheme_false); if (SCHEME_FALSEP(a[0])) { scheme_wrong_syntax("require", NULL, NULL, "broken compiled/expanded code: unresolved module index without path"); } - name = scheme_apply(scheme_get_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_RESOLVER), 3, a); + name = scheme_apply(scheme_get_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_RESOLVER), 4, a); ((Scheme_Modidx *)modidx)->resolved = name; } @@ -1793,12 +1817,12 @@ static Scheme_Object *_module_resolve_k(void) p->ku.k.p1 = NULL; - return _module_resolve(base, NULL); + return _module_resolve(base, NULL, p->ku.k.i1); } -Scheme_Object *scheme_module_resolve(Scheme_Object *modidx) +Scheme_Object *scheme_module_resolve(Scheme_Object *modidx, int load_it) { - return _module_resolve(modidx, NULL); + return _module_resolve(modidx, NULL, load_it); } Scheme_Object *scheme_modidx_shift(Scheme_Object *modidx, @@ -1858,10 +1882,10 @@ Scheme_Object *scheme_modidx_shift(Scheme_Object *modidx, if (!global_shift_cache) global_shift_cache = scheme_make_vector(GLOBAL_SHIFT_CACHE_SIZE, SHIFT_CACHE_NULL); for (i = 0; i < (GLOBAL_SHIFT_CACHE_SIZE - 2); i++) { - SCHEME_VEC_ELS(global_shift_cache)[i] = SCHEME_VEC_ELS(global_shift_cache)[i + 2]; + SCHEME_VEC_ELS(global_shift_cache)[i+2] = SCHEME_VEC_ELS(global_shift_cache)[i]; } - SCHEME_VEC_ELS(global_shift_cache)[i] = modidx; - SCHEME_VEC_ELS(global_shift_cache)[i+1] = smodidx; + SCHEME_VEC_ELS(global_shift_cache)[0] = modidx; + SCHEME_VEC_ELS(global_shift_cache)[1] = smodidx; } else { /* May have GCed: */ if (cvec && !sbm->shift_cache) @@ -1945,10 +1969,10 @@ static void setup_accessible_table(Scheme_Module *m) int i, count, nvp; ht = scheme_make_hash_table(SCHEME_hash_ptr); - nvp = m->num_var_provides; + nvp = m->me->num_var_provides; for (i = 0; i < nvp; i++) { - if (SCHEME_FALSEP(m->provide_srcs[i])) { - scheme_hash_set(ht, m->provide_src_names[i], scheme_make_integer(i)); + if (SCHEME_FALSEP(m->me->provide_srcs[i])) { + scheme_hash_set(ht, m->me->provide_src_names[i], scheme_make_integer(i)); } } @@ -1959,10 +1983,10 @@ static void setup_accessible_table(Scheme_Module *m) m->accessible = ht; /* Add syntax as negative ids: */ - count = m->num_provides; + count = m->me->num_provides; for (i = nvp; i < count; i++) { - if (SCHEME_FALSEP(m->provide_srcs[i])) { - scheme_hash_set(ht, m->provide_src_names[i], scheme_make_integer(-(i+1))); + if (SCHEME_FALSEP(m->me->provide_srcs[i])) { + scheme_hash_set(ht, m->me->provide_src_names[i], scheme_make_integer(-(i+1))); } } } @@ -2000,7 +2024,7 @@ static void check_certified(Scheme_Object *stx, Scheme_Object *certs, int need_cert = 1; Scheme_Object *midx; - midx = (env->link_midx ? env->link_midx : env->module->src_modidx); + midx = (env->link_midx ? env->link_midx : env->module->me->src_modidx); if (stx) need_cert = !scheme_stx_certified(stx, certs, prot ? NULL : midx, env->insp); @@ -2012,8 +2036,8 @@ static void check_certified(Scheme_Object *stx, Scheme_Object *certs, /* If we're currently executing a macro expander in this module, then allow the access under any cirsumstances. This is mostly useful for syntax-local-value and local-expand. */ - in_modidx = scheme_module_resolve(in_modidx); - midx = scheme_module_resolve(midx); + in_modidx = scheme_module_resolve(in_modidx, 0); + midx = scheme_module_resolve(midx, 0); if (SAME_OBJ(in_modidx, midx)) need_cert = 0; } @@ -2066,13 +2090,13 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object Scheme_Object *isym; int need_cert = 0; - if (position < env->module->num_var_provides) { - if (SCHEME_FALSEP(env->module->provide_srcs[position])) - isym = env->module->provide_src_names[position]; + if (position < env->module->me->num_var_provides) { + if (SCHEME_FALSEP(env->module->me->provide_srcs[position])) + isym = env->module->me->provide_src_names[position]; else isym = NULL; } else { - int ipos = position - env->module->num_var_provides; + int ipos = position - env->module->me->num_var_provides; if (ipos < env->module->num_indirect_provides) { isym = env->module->indirect_provides[ipos]; need_cert = 1; @@ -2087,7 +2111,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object || (SCHEME_SYM_LEN(isym) == SCHEME_SYM_LEN(symbol) && !memcmp(SCHEME_SYM_VAL(isym), SCHEME_SYM_VAL(symbol), SCHEME_SYM_LEN(isym)))) { - if ((position < env->module->num_var_provides) + if ((position < env->module->me->num_var_provides) && scheme_module_protected_wrt(env->insp, prot_insp) && env->module->provide_protects && env->module->provide_protects[position]) { @@ -2125,7 +2149,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object if (pos) { if (env->module->provide_protects - && (SCHEME_INT_VAL(pos) < env->module->num_provides) + && (SCHEME_INT_VAL(pos) < env->module->me->num_provides) && env->module->provide_protects[SCHEME_INT_VAL(pos)]) { if (_protected) *_protected = 1; @@ -2133,7 +2157,7 @@ Scheme_Object *scheme_check_accessible_in_module(Scheme_Env *env, Scheme_Object } if ((position >= -1) - && (SCHEME_INT_VAL(pos) >= env->module->num_var_provides)) { + && (SCHEME_INT_VAL(pos) >= env->module->me->num_var_provides)) { /* unexported var -- need cert */ if (_protected) *_protected = 1; @@ -2241,23 +2265,26 @@ static void templstart_module(Scheme_Env *menv, Scheme_Env *env, int with_tt, Scheme_Object *cycle_list) { Scheme_Object *np, *new_cycle_list, *midx, *l; + Scheme_Module *im; new_cycle_list = scheme_make_pair(menv->module->modname, cycle_list); np = scheme_null; for (l = menv->module->tt_requires; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { - midx = scheme_modidx_shift(SCHEME_CAR(l), menv->module->src_modidx, menv->link_midx); + midx = scheme_modidx_shift(SCHEME_CAR(l), menv->module->me->src_modidx, menv->link_midx); scheme_prepare_template_env(env); + im = module_load(scheme_module_resolve(midx, 1), env, NULL); + if (with_tt > 1) - start_module(module_load(scheme_module_resolve(midx), env, NULL), + start_module(im, env->template_env, 0, midx, 0, with_tt - 1, new_cycle_list); else - expstart_module(module_load(scheme_module_resolve(midx), env, NULL), + expstart_module(im, env->template_env, 0, midx, 0, with_tt - 1, @@ -2280,6 +2307,7 @@ static void expstart_module(Scheme_Module *m, Scheme_Env *env, int restart, { Scheme_Env *menv; Scheme_Object *l, *midx, *np, *new_cycle_list; + Scheme_Module *im; if (!delay_exptime) delay_exptime = m->et_functional; @@ -2345,9 +2373,9 @@ static void expstart_module(Scheme_Module *m, Scheme_Env *env, int restart, Scheme_Object **exss, **exsns; int i, count; - exsns = m->provide_src_names; - exss = m->provide_srcs; - count = m->num_var_provides; + exsns = m->me->provide_src_names; + exss = m->me->provide_srcs; + count = m->me->num_var_provides; for (i = 0; i < count; i++) { if (SCHEME_FALSEP(exss[i])) @@ -2368,13 +2396,15 @@ static void expstart_module(Scheme_Module *m, Scheme_Env *env, int restart, for (l = m->requires; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { if (syntax_idx) - midx = scheme_modidx_shift(SCHEME_CAR(l), m->src_modidx, syntax_idx); + midx = scheme_modidx_shift(SCHEME_CAR(l), m->me->src_modidx, syntax_idx); else - midx = scheme_modidx_shift(SCHEME_CAR(l), m->src_modidx, m->self_modidx); - + midx = scheme_modidx_shift(SCHEME_CAR(l), m->me->src_modidx, m->self_modidx); + np = cons(midx, np); - expstart_module(module_load(scheme_module_resolve(midx), env, NULL), + im = module_load(scheme_module_resolve(midx, 1), env, NULL); + + expstart_module(im, env, 0, midx, delay_exptime, @@ -2403,6 +2433,7 @@ static void finish_expstart_module(Scheme_Env *menv, Scheme_Env *env, Scheme_Object *l, *body, *e, *names, *midx, *np, *new_cycle_list; Scheme_Env *exp_env; Scheme_Bucket_Table *syntax, *for_stx_globals; + Scheme_Module *im; int let_depth, for_stx; /* Continue a delayed expstart: */ @@ -2413,7 +2444,7 @@ static void finish_expstart_module(Scheme_Env *menv, Scheme_Env *env, /* make sure exptimes of imports have been forced: */ for (l = menv->require_names; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { midx = SCHEME_CAR(l); - expstart_module(module_load(scheme_module_resolve(midx), env, NULL), + expstart_module(module_load(scheme_module_resolve(midx, 1), env, NULL), env, 0, midx, 0, @@ -2441,11 +2472,13 @@ static void finish_expstart_module(Scheme_Env *menv, Scheme_Env *env, np = scheme_null; for (l = menv->module->et_requires; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { - midx = scheme_modidx_shift(SCHEME_CAR(l), menv->module->src_modidx, exp_env->link_midx); + midx = scheme_modidx_shift(SCHEME_CAR(l), menv->module->me->src_modidx, exp_env->link_midx); np = cons(midx, np); - start_module(module_load(scheme_module_resolve(midx), env, NULL), + im = module_load(scheme_module_resolve(midx, 1), env, NULL); + + start_module(im, exp_env, 0, midx, 0, with_tt + 1, @@ -2474,6 +2507,7 @@ static void finish_expstart_module(Scheme_Env *menv, Scheme_Env *env, cenv = MALLOC_ONE_TAGGED(Scheme_Env); cenv->so.type = scheme_namespace_type; cenv->module_registry = menv->module_registry; + cenv->export_registry = menv->export_registry; cenv->module = menv->module; cenv->insp = menv->insp; cenv->syntax = menv->syntax; @@ -2556,7 +2590,7 @@ static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, for (l = menv->require_names; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) { midx = SCHEME_CAR(l); - start_module(module_load(scheme_module_resolve(midx), env, NULL), + start_module(module_load(scheme_module_resolve(midx, 1), env, NULL), env, 0, midx, delay_expstart, with_tt, @@ -2601,7 +2635,7 @@ static void eval_module_body(Scheme_Env *menv) } save_runstack = scheme_push_prefix(menv, m->prefix, - m->src_modidx, menv->link_midx, + m->me->src_modidx, menv->link_midx, 0, menv->phase); body = m->body; @@ -2654,6 +2688,14 @@ Scheme_Env *scheme_primitive_module(Scheme_Object *name, Scheme_Env *for_env) m->primitive = env; m->insp = insp; + { + Scheme_Module_Exports *me; + me = make_module_exports(); + m->me = me; + } + + scheme_hash_set(for_env->export_registry, m->modname, (Scheme_Object *)m->me); + insp = scheme_make_inspector(insp); env->insp = insp; @@ -2693,11 +2735,11 @@ void scheme_finish_primitive_module(Scheme_Env *env) m->et_functional = 1; m->tt_functional = 1; - m->provides = exs; - m->provide_srcs = NULL; - m->provide_src_names = exs; - m->num_provides = count; - m->num_var_provides = count; + m->me->provides = exs; + m->me->provide_srcs = NULL; + m->me->provide_src_names = exs; + m->me->num_provides = count; + m->me->num_var_provides = count; env->running = 1; } @@ -2709,23 +2751,23 @@ void scheme_protect_primitive_provide(Scheme_Env *env, Scheme_Object *name) if (!m->provide_protects) { char *exps; - exps = MALLOC_N_ATOMIC(char, m->num_provides); - for (i = m->num_provides; i--; ) { + exps = MALLOC_N_ATOMIC(char, m->me->num_provides); + for (i = m->me->num_provides; i--; ) { exps[i] = 0; } m->provide_protects = exps; } if (name) { - for (i = m->num_provides; i--; ) { - if (SAME_OBJ(name, m->provides[i])) { + for (i = m->me->num_provides; i--; ) { + if (SAME_OBJ(name, m->me->provides[i])) { m->provide_protects[i] = 1; break; } } } else { /* Protect all */ - for (i = m->num_provides; i--; ) { + for (i = m->me->num_provides; i--; ) { m->provide_protects[i] = 1; } } @@ -2773,6 +2815,16 @@ Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o) return NULL; } +static Scheme_Module_Exports *make_module_exports() +{ + Scheme_Module_Exports *me; + me = MALLOC_ONE_RT(Scheme_Module_Exports); +#ifdef MZTAG_REQUIRED + me->type = scheme_rt_module_exports; +#endif + return me; +} + /**********************************************************************/ /* define-syntaxes */ /**********************************************************************/ @@ -2841,12 +2893,12 @@ static void eval_defmacro(Scheme_Object *names, int count, } save_runstack = scheme_push_prefix(genv, rp, - (shift ? genv->module->src_modidx : NULL), + (shift ? genv->module->me->src_modidx : NULL), (shift ? genv->link_midx : NULL), 1, genv->phase); scheme_on_next_top(comp_env, NULL, scheme_false, certs, - genv, (genv->link_midx ? genv->link_midx : genv->module->src_modidx)); + genv, (genv->link_midx ? genv->link_midx : genv->module->me->src_modidx)); vals = scheme_eval_linked_expr_multi(expr); scheme_pop_prefix(save_runstack); @@ -2976,6 +3028,7 @@ module_execute(Scheme_Object *data) m->insp = insp; scheme_hash_set(env->module_registry, m->modname, (Scheme_Object *)m); + scheme_hash_set(env->export_registry, m->modname, (Scheme_Object *)m->me); /* We might compute whether the module is obviously functional (as opposed to imperative). But it doesn't seem to matter much except @@ -3322,11 +3375,17 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, restore_confusing_name = 1; } + { + Scheme_Module_Exports *me; + me = make_module_exports(); + m->me = me; + } + menv = scheme_new_module_env(env->genv, m, 1); self_modidx = scheme_make_modidx(scheme_false, scheme_false, m->modname); m->self_modidx = self_modidx; - m->src_modidx = self_modidx; + m->me->src_modidx = self_modidx; m->insp = env->insp; @@ -3334,6 +3393,10 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, self_modidx, scheme_false); + /* load the module for the initial require */ + iim = module_load(_module_resolve(iidx, ii, 1), menv, NULL); + expstart_module(iim, menv, 0, iidx, 0, 0, scheme_null); + { Scheme_Object *ins; ins = cons(iidx, scheme_null); @@ -3342,10 +3405,6 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, m->tt_requires = scheme_null; } - /* load the module for the initial require */ - iim = module_load(_module_resolve(iidx, ii), menv, NULL); - expstart_module(iim, menv, 0, iidx, 0, 0, scheme_null); - mn_ht = scheme_make_hash_table(SCHEME_hash_ptr); et_mn_ht = scheme_make_hash_table(SCHEME_hash_ptr); tt_mn_ht = scheme_make_hash_table(SCHEME_hash_ptr); @@ -3409,7 +3468,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, } /* phase shift to replace self_modidx of previous expansion (if any): */ - fm = scheme_stx_phase_shift(fm, 0, empty_self_modidx, self_modidx); + fm = scheme_stx_phase_shift(fm, 0, empty_self_modidx, self_modidx, NULL); fm = scheme_add_rename(fm, rn); fm = scheme_add_rename(fm, et_rn); @@ -3506,7 +3565,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, } /* for future expansion, shift away from self_modidx: */ - fm = scheme_stx_phase_shift(fm, 0, self_modidx, empty_self_modidx); + fm = scheme_stx_phase_shift(fm, 0, self_modidx, empty_self_modidx, NULL); /* make self_modidx like the empty modidx */ ((Scheme_Modidx *)self_modidx)->resolved = empty_self_symbol; @@ -3534,161 +3593,6 @@ module_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *ere return do_module(form, env, erec, drec); } -static Scheme_Object *mk_req(Scheme_Object *path, Scheme_Object *self) -{ - if (SCHEME_SYMBOLP(path)) - return path; - else - return scheme_make_modidx(path, self, scheme_false); -} - -/* The mzc interface: */ -Scheme_Object *scheme_declare_module(Scheme_Object *shape, Scheme_Invoke_Proc ivk, Scheme_Invoke_Proc sivk, - void *data, Scheme_Env *env) -{ - Scheme_Module *m; - Scheme_Object *name, *prefix, *a, *self_modidx; - Scheme_Object *requires, *et_requires, *tt_requires, *kernel_exclusion; - Scheme_Object *var_provides, *syntax_provides, *ind_provides, **exs, **exss, **exns; - char *exps; - int nvar, nsyntax, i; - - /* shape is: (list requires et-requires tt-requires var-provides syntax-provides - indirect-provides kernel-exclusion) where var-provides and - syntax-provides can contain broken module index paths; they're - broken because they contain NULL in place of self_modix (which - hasn't been created before this function is called). */ - - name = SCHEME_CAR(shape); - shape = SCHEME_CDR(shape); - requires = SCHEME_CAR(shape); - shape = SCHEME_CDR(shape); - et_requires = SCHEME_CAR(shape); - shape = SCHEME_CDR(shape); - tt_requires = SCHEME_CAR(shape); - shape = SCHEME_CDR(shape); - var_provides = SCHEME_CAR(shape); /* self_modix is NULLed! */ - shape = SCHEME_CDR(shape); - syntax_provides = SCHEME_CAR(shape); /* self_modix is NULLed! */ - shape = SCHEME_CDR(shape); - ind_provides = SCHEME_CAR(shape); - shape = SCHEME_CDR(shape); - kernel_exclusion = SCHEME_CAR(shape); - - m = MALLOC_ONE_TAGGED(Scheme_Module); - m->so.type = scheme_module_type; - - prefix = scheme_get_param(scheme_current_config(), MZCONFIG_CURRENT_MODULE_PREFIX); - if (SCHEME_SYMBOLP(prefix)) - name = scheme_symbol_append(prefix, name); - - m->modname = name; - - self_modidx = scheme_make_modidx(scheme_false, scheme_false, m->modname); - - requires = scheme_named_map_1(NULL, mk_req, requires, self_modidx); - et_requires = scheme_named_map_1(NULL, mk_req, et_requires, self_modidx); - tt_requires = scheme_named_map_1(NULL, mk_req, tt_requires, self_modidx); - - m->requires = requires; - m->et_requires = et_requires; - m->tt_requires = tt_requires; - - m->prim_body = ivk; - m->prim_et_body = sivk; - - m->body = data; - - nvar = scheme_list_length(var_provides); - nsyntax = scheme_list_length(syntax_provides); - - exs = MALLOC_N(Scheme_Object *, nvar + nsyntax); - exss = MALLOC_N(Scheme_Object *, nvar + nsyntax); - exns = MALLOC_N(Scheme_Object *, nvar + nsyntax); - exps = MALLOC_N_ATOMIC(char, nvar + nsyntax); - - var_provides = scheme_append(var_provides, syntax_provides); - - for (i = 0; i < nvar + nsyntax; i++, var_provides = SCHEME_CDR(var_provides)) { - a = SCHEME_CAR(var_provides); - exps[i] = 0; - if (SCHEME_SYMBOLP(a)) { - exs[i] = a; - exns[i] = a; - exss[i] = scheme_false; /* means "self" */ - } else if (SCHEME_SYMBOLP(SCHEME_CDR(a))) { - exs[i] = SCHEME_CAR(a); - exns[i] = SCHEME_CDR(a); - exss[i] = scheme_false; /* means "self" */ - } else { - exss[i] = SCHEME_CAR(a); - a = SCHEME_CDR(a); - exs[i] = SCHEME_CAR(a); - exns[i] = SCHEME_CDR(a); - /* If exss[i] is a module_index, it ends in a NULL where it should - end in self_modix: */ - if (SAME_TYPE(SCHEME_TYPE(exss[i]), scheme_module_index_type)) { - Scheme_Modidx *f = (Scheme_Modidx *)exss[i], *naya, *prev = NULL, *first = NULL; - while (f) { - naya = (Scheme_Modidx *)scheme_make_modidx(f->path, f->base, scheme_false); - f = (Scheme_Modidx *)f->base; - if (prev) - prev->base = (Scheme_Object *)naya; - prev = naya; - if (!first) - first = naya; - } - prev->base = self_modidx; - exss[i] = (Scheme_Object *)first; - } - } - } - - qsort_provides(exs, exns, exss, exps, 0, nvar, 1); - - /* Worst-case assumptions: */ - m->functional = 0; - m->et_functional = 0; - m->tt_functional = 0; - - m->provides = exs; - m->provide_srcs = exss; - m->provide_src_names = exns; - m->provide_protects = exps; - m->num_provides = nvar + nsyntax; - m->num_var_provides = nvar; - - m->reprovide_kernel = SCHEME_TRUEP(kernel_exclusion); - m->kernel_exclusion = kernel_exclusion; - - nvar = scheme_list_length(ind_provides); - if (nvar) { - exs = MALLOC_N(Scheme_Object *, nvar); - for (i = 0; i < nvar; i++, ind_provides = SCHEME_CDR(ind_provides)) { - exs[i] = SCHEME_CAR(ind_provides); - } - } else - exs = NULL; - - m->indirect_provides = exs; - m->num_indirect_provides = nvar; - - qsort_provides(exs, NULL, NULL, NULL, 0, nvar, 1); - - m->self_modidx = self_modidx; - m->src_modidx = self_modidx; - - { - Scheme_Object *insp; - insp = scheme_get_param(scheme_current_config(), MZCONFIG_CODE_INSPECTOR); - m->insp = insp; - } - scheme_hash_set(env->module_registry, m->modname, (Scheme_Object *)m); - - return scheme_void; -} - - /* For mzc: */ Scheme_Object *scheme_apply_for_syntax_in_env(Scheme_Object *proc, Scheme_Env *env) { @@ -3700,7 +3604,7 @@ Scheme_Object *scheme_apply_for_syntax_in_env(Scheme_Object *proc, Scheme_Env *e env, (env->link_midx ? env->link_midx : (env->module - ? env->module->src_modidx + ? env->module->me->src_modidx : NULL))); return scheme_apply_multi(proc, 0, NULL); } @@ -3890,18 +3794,18 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Object *midx, *nmidx, *vec, *nml; nmidx = SCHEME_CAR(env->genv->module->requires); - iim = module_load(scheme_module_resolve(nmidx), env->genv, NULL); - exs = iim->provides; - exsns = iim->provide_src_names; - exss = iim->provide_srcs; - numvals = iim->num_var_provides; - for (i = iim->num_provides; i--; ) { + iim = module_load(scheme_module_resolve(nmidx, 1), env->genv, NULL); + exs = iim->me->provides; + exsns = iim->me->provide_src_names; + exss = iim->me->provide_srcs; + numvals = iim->me->num_var_provides; + for (i = iim->me->num_provides; i--; ) { if (exss) { midx = exss[i]; if (SCHEME_FALSEP(midx)) midx = nmidx; else - midx = scheme_modidx_shift(midx, iim->src_modidx, nmidx); + midx = scheme_modidx_shift(midx, iim->me->src_modidx, nmidx); } else midx = nmidx; vec = scheme_make_vector(5, NULL); @@ -3914,11 +3818,11 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, scheme_hash_set(required, exs[i], vec); } - if (iim->reprovide_kernel) { - exs = kernel->provides; - numvals = kernel->num_var_provides; - for (i = kernel->num_provides; i--; ) { - if (!SAME_OBJ(iim->kernel_exclusion, exs[i])) { + if (iim->me->reprovide_kernel) { + exs = kernel->me->provides; + numvals = kernel->me->num_var_provides; + for (i = kernel->me->num_provides; i--; ) { + if (!SAME_OBJ(iim->me->kernel_exclusion, exs[i])) { vec = scheme_make_vector(5, NULL); nml = scheme_make_pair(nmidx, scheme_null); SCHEME_VEC_ELS(vec)[0] = nml; @@ -4819,7 +4723,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, /* Ad hoc optimization: mzscheme is everything from kernel except #%module_begin */ - if ((reprovide_kernel == (kernel->num_provides - 1)) + if ((reprovide_kernel == (kernel->me->num_provides - 1)) && SCHEME_FALSEP(exclude_hint)) { exclude_hint = scheme_make_pair(module_begin_symbol, scheme_null); exclude_hint = scheme_datum_to_syntax(exclude_hint, scheme_false, scheme_top_stx, 0, 0); @@ -4827,7 +4731,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, /* Re-providing all of the kernel without prefixing? */ if (reprovide_kernel) { - if ((reprovide_kernel == (kernel->num_provides - 1)) + if ((reprovide_kernel == (kernel->me->num_provides - 1)) && SCHEME_TRUEP(exclude_hint)) { if (SCHEME_STX_PAIRP(exclude_hint) && SCHEME_NULLP(SCHEME_STX_CDR(exclude_hint))) { Scheme_Object *n; @@ -4849,7 +4753,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, reprovide_kernel = 0; } else reprovide_kernel = 0; - } else if (reprovide_kernel != kernel->num_provides) + } else if (reprovide_kernel != kernel->me->num_provides) reprovide_kernel = 0; else exclude_hint = scheme_false; @@ -5054,16 +4958,16 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, if (reprovide_kernel) { if (!j) { - i = kernel->num_var_provides; - top = kernel->num_provides; + i = kernel->me->num_var_provides; + top = kernel->me->num_provides; } else { i = 0; - top = kernel->num_var_provides; + top = kernel->me->num_var_provides; } for (; i < top; i++) { - if (!SAME_OBJ(kernel->provides[i], exclude_hint)) { - a = scheme_make_immutable_pair(kernel->provides[i], kernel->provides[i]); + if (!SAME_OBJ(kernel->me->provides[i], exclude_hint)) { + a = scheme_make_immutable_pair(kernel->me->provides[i], kernel->me->provides[i]); a = scheme_make_immutable_pair(kernel_symbol, a); e = scheme_make_immutable_pair(a, e); } @@ -5110,15 +5014,15 @@ static Scheme_Object *do_module_begin(Scheme_Object *form, Scheme_Comp_Env *env, env->genv->module->et_body = exp_body_r; /* Install final provides: */ - env->genv->module->num_provides = excount; - env->genv->module->num_var_provides = exvcount; - env->genv->module->provides = exs; - env->genv->module->provide_src_names = exsns; - env->genv->module->provide_srcs = exss; + env->genv->module->me->num_provides = excount; + env->genv->module->me->num_var_provides = exvcount; + env->genv->module->me->provides = exs; + env->genv->module->me->provide_src_names = exsns; + env->genv->module->me->provide_srcs = exss; env->genv->module->provide_protects = exps; - env->genv->module->reprovide_kernel = reprovide_kernel; - env->genv->module->kernel_exclusion = exclude_hint; + env->genv->module->me->reprovide_kernel = reprovide_kernel; + env->genv->module->me->kernel_exclusion = exclude_hint; env->genv->module->indirect_provides = exis; env->genv->module->num_indirect_provides = exicount; @@ -5255,8 +5159,8 @@ static void qsort_provides(Scheme_Object **exs, Scheme_Object **exsns, Scheme_Ob /* top-level require */ /**********************************************************************/ -void add_single_require(Scheme_Module *m, /* from module */ - Scheme_Object *idx, /* from module's idx; may be used to find m on unmarshal */ +void add_single_require(Scheme_Module_Exports *me, /* from module */ + Scheme_Object *idx, /* from module's idx; may be saved for unmarshalling */ Scheme_Env *env, /* env for mark_src or copy_vars */ Scheme_Object *rn, /* add requires to this rename when no mark_src */ Scheme_Object *post_ex_rn, /* add requires to this rename when mark_src */ @@ -5273,8 +5177,8 @@ void add_single_require(Scheme_Module *m, /* from module */ ) { int j, var_count; - Scheme_Object **exs, **exsns, **exss; Scheme_Object *orig_idx = idx; + Scheme_Object **exs, **exsns, **exss; int is_kern, has_context, save_marshal_info = 0, can_save_marshal = 1; Scheme_Object *nominal_modidx, *one_exn, *prnt_iname, *name; @@ -5309,12 +5213,12 @@ void add_single_require(Scheme_Module *m, /* from module */ while (1) { /* loop to handle kernel re-provides... */ int break_if_iname_null = !!iname; - exs = m->provides; - exsns = m->provide_src_names; - exss = m->provide_srcs; - var_count = m->num_var_provides; + exs = me->provides; + exsns = me->provide_src_names; + exss = me->provide_srcs; + var_count = me->num_var_provides; - for (j = m->num_provides; j--; ) { + for (j = me->num_provides; j--; ) { Scheme_Object *modidx; if (ename) { @@ -5353,7 +5257,7 @@ void add_single_require(Scheme_Module *m, /* from module */ } modidx = ((exss && !SCHEME_FALSEP(exss[j])) - ? scheme_modidx_shift(exss[j], m->src_modidx, idx) + ? scheme_modidx_shift(exss[j], me->src_modidx, idx) : idx); if (!iname) @@ -5386,7 +5290,7 @@ void add_single_require(Scheme_Module *m, /* from module */ if (copy_vars && (j < var_count) && !env->module && !env->phase) { Scheme_Env *menv; Scheme_Object *val; - modidx = scheme_module_resolve(modidx); + modidx = scheme_module_resolve(modidx, 1); menv = scheme_module_access(modidx, env, 0); val = scheme_lookup_in_table(menv->toplevel, (char *)exsns[j]); scheme_add_global_symbol(iname, val, env); @@ -5408,7 +5312,7 @@ void add_single_require(Scheme_Module *m, /* from module */ } if (ename) { - if (!m->reprovide_kernel) { + if (!me->reprovide_kernel) { scheme_wrong_syntax(NULL, ename, form, "no such provided variable"); return; } @@ -5420,10 +5324,10 @@ void add_single_require(Scheme_Module *m, /* from module */ if (break_if_iname_null && !iname) break; - if (m->reprovide_kernel) { + if (me->reprovide_kernel) { idx = kernel_symbol; - one_exn = m->kernel_exclusion; - m = kernel; + one_exn = me->kernel_exclusion; + me = kernel->me; is_kern = !prefix && !unpack_kern && !ename && !has_context; } else break; @@ -5454,10 +5358,11 @@ void add_single_require(Scheme_Module *m, /* from module */ } void scheme_do_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info, - Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to) + Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to, + Scheme_Hash_Table *export_registry) { Scheme_Object *orig_idx, *exns, *prefix, *idx, *name; - Scheme_Module *m; + Scheme_Module_Exports *me; Scheme_Env *env; idx = SCHEME_CAR(info); @@ -5470,24 +5375,33 @@ void scheme_do_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info, prefix = NULL; if (SCHEME_NULLP(exns)) exns = NULL; - + if (modidx_shift_from) idx = scheme_modidx_shift(idx, modidx_shift_from, modidx_shift_to); - env = scheme_get_env(scheme_current_config()); - name = scheme_module_resolve(idx); - m = (Scheme_Module *)scheme_hash_get(env->module_registry, name); - if (!m) { - scheme_signal_error("broken compiled/expanded code or wrong namespace;" - " cannot find instance to restore imported renamings" - " from module: %s", - scheme_symbol_name(name)); - return; + name = scheme_module_resolve(idx, 0); + + if (SAME_OBJ(kernel_symbol, name)) { + me = kernel->me; + } else { + if (!export_registry) { + env = scheme_get_env(scheme_current_config()); + export_registry = env->export_registry; + } + + me = (Scheme_Module_Exports *)scheme_hash_get(export_registry, name); + if (!me) { + scheme_signal_error("compiled/expanded code out of context;" + " cannot find exports to restore imported renamings" + " for module: %s", + scheme_symbol_name(name)); + return; + } } - add_single_require(m, orig_idx, env, + add_single_require(me, orig_idx, NULL, rn, NULL, exns, NULL, prefix, NULL, NULL, NULL, @@ -5698,7 +5612,7 @@ Scheme_Object *parse_requires(Scheme_Object *form, base_modidx, scheme_false); - name = _module_resolve(idx, idxstx); + name = _module_resolve(idx, idxstx, 1); m = module_load(name, env, NULL); @@ -5724,7 +5638,7 @@ Scheme_Object *parse_requires(Scheme_Object *form, } } - add_single_require(m, idx, env, rn, post_ex_rn, + add_single_require(m->me, idx, env, rn, post_ex_rn, exns, onlys, prefix, iname, ename, mark_src, unpack_kern, copy_vars && start, 0, @@ -5969,26 +5883,26 @@ static Scheme_Object *write_module(Scheme_Object *obj) l = cons(m->body, l); l = cons(m->et_body, l); - l = cons(scheme_make_integer(m->num_provides), l); - l = cons(scheme_make_integer(m->num_var_provides), l); + l = cons(scheme_make_integer(m->me->num_provides), l); + l = cons(scheme_make_integer(m->me->num_var_provides), l); - count = m->num_provides; + count = m->me->num_provides; v = scheme_make_vector(count, NULL); for (i = 0; i < count; i++) { - SCHEME_VEC_ELS(v)[i] = m->provides[i]; + SCHEME_VEC_ELS(v)[i] = m->me->provides[i]; } l = cons(v, l); v = scheme_make_vector(count, NULL); for (i = 0; i < count; i++) { - SCHEME_VEC_ELS(v)[i] = m->provide_srcs[i]; + SCHEME_VEC_ELS(v)[i] = m->me->provide_srcs[i]; } l = cons(v, l); v = scheme_make_vector(count, NULL); for (i = 0; i < count; i++) { - SCHEME_VEC_ELS(v)[i] = m->provide_src_names[i]; + SCHEME_VEC_ELS(v)[i] = m->me->provide_src_names[i]; } l = cons(v, l); @@ -6018,8 +5932,8 @@ static Scheme_Object *write_module(Scheme_Object *obj) } l = cons(v, l); - l = cons(m->reprovide_kernel ? scheme_true : scheme_false, l); - l = cons(m->kernel_exclusion, l); + l = cons(m->me->reprovide_kernel ? scheme_true : scheme_false, l); + l = cons(m->me->kernel_exclusion, l); l = cons((Scheme_Object *)m->prefix, l); l = cons(m->dummy, l); @@ -6030,32 +5944,48 @@ static Scheme_Object *write_module(Scheme_Object *obj) l = cons(m->et_rn_stx ? m->et_rn_stx : scheme_false, l); l = cons(m->rn_stx ? m->rn_stx : scheme_false, l); - l = cons(m->src_modidx, l); + l = cons(m->me->src_modidx, l); l = cons(m->modname, l); return l; } +static int check_requires_ok(Scheme_Object *l) +{ + Scheme_Object *x; + while (!SCHEME_NULLP(l)) { + x = SCHEME_CAR(l); + if (!SCHEME_SYMBOLP(x) && !SAME_TYPE(SCHEME_TYPE(x), scheme_module_index_type)) + return 0; + l = SCHEME_CDR(l); + } + return 1; +} + static Scheme_Object *read_module(Scheme_Object *obj) { Scheme_Module *m; Scheme_Object *ie, *nie; Scheme_Object *esp, *esn, *es, *e, *nve, *ne, **v; + Scheme_Module_Exports *me; char *ps; int i, count; m = MALLOC_ONE_TAGGED(Scheme_Module); m->so.type = scheme_module_type; + me = make_module_exports(); + m->me = me; + if (!SCHEME_PAIRP(obj)) return NULL; m->modname = SCHEME_CAR(obj); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; - m->src_modidx = SCHEME_CAR(obj); + me->src_modidx = SCHEME_CAR(obj); obj = SCHEME_CDR(obj); - ((Scheme_Modidx *)m->src_modidx)->resolved = m->modname; - m->self_modidx = m->src_modidx; + ((Scheme_Modidx *)m->me->src_modidx)->resolved = m->modname; + m->self_modidx = m->me->src_modidx; if (!SCHEME_PAIRP(obj)) return NULL; m->rn_stx = SCHEME_CAR(obj); @@ -6088,10 +6018,10 @@ static Scheme_Object *read_module(Scheme_Object *obj) obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; - m->kernel_exclusion = SCHEME_CAR(obj); + me->kernel_exclusion = SCHEME_CAR(obj); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; - m->reprovide_kernel = SCHEME_TRUEP(SCHEME_CAR(obj)); + me->reprovide_kernel = SCHEME_TRUEP(SCHEME_CAR(obj)); obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; @@ -6137,29 +6067,29 @@ static Scheme_Object *read_module(Scheme_Object *obj) obj = SCHEME_CDR(obj); count = SCHEME_INT_VAL(ne); - m->num_provides = count; - m->num_var_provides = SCHEME_INT_VAL(nve); + me->num_provides = count; + me->num_var_provides = SCHEME_INT_VAL(nve); if (!SCHEME_VECTORP(e) || (SCHEME_VEC_SIZE(e) != count)) return NULL; v = MALLOC_N(Scheme_Object *, count); for (i = 0; i < count; i++) { v[i] = SCHEME_VEC_ELS(e)[i]; } - m->provides = v; + me->provides = v; if (!SCHEME_VECTORP(es) || (SCHEME_VEC_SIZE(es) != count)) return NULL; v = MALLOC_N(Scheme_Object *, count); for (i = 0; i < count; i++) { v[i] = SCHEME_VEC_ELS(es)[i]; } - m->provide_srcs = v; + me->provide_srcs = v; if (!SCHEME_VECTORP(esn) || (SCHEME_VEC_SIZE(esn) != count)) return NULL; v = MALLOC_N(Scheme_Object *, count); for (i = 0; i < count; i++) { v[i] = SCHEME_VEC_ELS(esn)[i]; } - m->provide_src_names = v; + me->provide_src_names = v; if (SCHEME_FALSEP(esp)) { m->provide_protects = NULL; @@ -6188,17 +6118,20 @@ static Scheme_Object *read_module(Scheme_Object *obj) if (scheme_proper_list_length(SCHEME_CAR(obj)) < 0) return NULL; e = scheme_copy_list(SCHEME_CAR(obj)); m->requires = e; + if (!check_requires_ok(e)) return NULL; obj = SCHEME_CDR(obj); if (!SCHEME_PAIRP(obj)) return NULL; if (scheme_proper_list_length(SCHEME_CAR(obj)) < 0) return NULL; e = scheme_copy_list(SCHEME_CAR(obj)); m->et_requires = e; + if (!check_requires_ok(e)) return NULL; obj = SCHEME_CDR(obj); if (scheme_proper_list_length(obj) < 0) return NULL; e = scheme_copy_list(obj); m->tt_requires = e; + if (!check_requires_ok(e)) return NULL; return (Scheme_Object *)m; } diff --git a/src/mzscheme/src/mzmark.c b/src/mzscheme/src/mzmark.c index 799e652ae9..1fe13e564b 100644 --- a/src/mzscheme/src/mzmark.c +++ b/src/mzscheme/src/mzmark.c @@ -1838,6 +1838,7 @@ static int namespace_val_MARK(void *p) { gcMARK(e->module); gcMARK(e->module_registry); + gcMARK(e->export_registry); gcMARK(e->insp); gcMARK(e->rename); @@ -1871,6 +1872,7 @@ static int namespace_val_FIXUP(void *p) { gcFIXUP(e->module); gcFIXUP(e->module_registry); + gcFIXUP(e->export_registry); gcFIXUP(e->insp); gcFIXUP(e->rename); @@ -2104,15 +2106,10 @@ static int module_val_MARK(void *p) { gcMARK(m->body); gcMARK(m->et_body); - gcMARK(m->provides); - gcMARK(m->provide_srcs); - gcMARK(m->provide_src_names); + gcMARK(m->me); + gcMARK(m->provide_protects); - - gcMARK(m->kernel_exclusion); - gcMARK(m->indirect_provides); - gcMARK(m->src_modidx); gcMARK(m->self_modidx); gcMARK(m->accessible); @@ -2144,15 +2141,10 @@ static int module_val_FIXUP(void *p) { gcFIXUP(m->body); gcFIXUP(m->et_body); - gcFIXUP(m->provides); - gcFIXUP(m->provide_srcs); - gcFIXUP(m->provide_src_names); + gcFIXUP(m->me); + gcFIXUP(m->provide_protects); - - gcFIXUP(m->kernel_exclusion); - gcFIXUP(m->indirect_provides); - gcFIXUP(m->src_modidx); gcFIXUP(m->self_modidx); gcFIXUP(m->accessible); @@ -2177,6 +2169,43 @@ static int module_val_FIXUP(void *p) { #define module_val_IS_CONST_SIZE 1 +static int module_exports_val_SIZE(void *p) { + return + gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +} + +static int module_exports_val_MARK(void *p) { + Scheme_Module_Exports *m = (Scheme_Module_Exports *)p; + + gcMARK(m->provides); + gcMARK(m->provide_srcs); + gcMARK(m->provide_src_names); + + gcMARK(m->kernel_exclusion); + + gcMARK(m->src_modidx); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +} + +static int module_exports_val_FIXUP(void *p) { + Scheme_Module_Exports *m = (Scheme_Module_Exports *)p; + + gcFIXUP(m->provides); + gcFIXUP(m->provide_srcs); + gcFIXUP(m->provide_src_names); + + gcFIXUP(m->kernel_exclusion); + + gcFIXUP(m->src_modidx); + return + gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +} + +#define module_exports_val_IS_ATOMIC 0 +#define module_exports_val_IS_CONST_SIZE 1 + + static int modidx_val_SIZE(void *p) { return gcBYTES_TO_WORDS(sizeof(Scheme_Modidx)); diff --git a/src/mzscheme/src/mzmarksrc.c b/src/mzscheme/src/mzmarksrc.c index c3748e3e22..30d194eb94 100644 --- a/src/mzscheme/src/mzmarksrc.c +++ b/src/mzscheme/src/mzmarksrc.c @@ -715,6 +715,7 @@ namespace_val { gcMARK(e->module); gcMARK(e->module_registry); + gcMARK(e->export_registry); gcMARK(e->insp); gcMARK(e->rename); @@ -823,15 +824,10 @@ module_val { gcMARK(m->body); gcMARK(m->et_body); - gcMARK(m->provides); - gcMARK(m->provide_srcs); - gcMARK(m->provide_src_names); + gcMARK(m->me); + gcMARK(m->provide_protects); - - gcMARK(m->kernel_exclusion); - gcMARK(m->indirect_provides); - gcMARK(m->src_modidx); gcMARK(m->self_modidx); gcMARK(m->accessible); @@ -852,6 +848,21 @@ module_val { gcBYTES_TO_WORDS(sizeof(Scheme_Module)); } +module_exports_val { + mark: + Scheme_Module_Exports *m = (Scheme_Module_Exports *)p; + + gcMARK(m->provides); + gcMARK(m->provide_srcs); + gcMARK(m->provide_src_names); + + gcMARK(m->kernel_exclusion); + + gcMARK(m->src_modidx); + size: + gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +} + modidx_val { mark: Scheme_Modidx *modidx = (Scheme_Modidx *)p; diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index 472b7c0ab3..7ccd557473 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -2123,12 +2123,31 @@ static Scheme_Object *magnitude(int argc, Scheme_Object *argv[]) if (SCHEME_COMPLEXP(o)) { Scheme_Object *r = _scheme_complex_real_part(o); Scheme_Object *i = _scheme_complex_imaginary_part(o); - Scheme_Object *m2; - - m2 = scheme_bin_plus(scheme_bin_mult(r, r), - scheme_bin_mult(i, i)); + Scheme_Object *a[1], *q; + a[0] = r; + r = scheme_abs(1, a); + a[0] = i; + i = scheme_abs(1, a); - return scheme_sqrt(1, &m2); + if (SAME_OBJ(r, scheme_make_integer(0))) + return i; + + if (scheme_bin_lt(i, r)) { + Scheme_Object *tmp; + tmp = i; + i = r; + r = tmp; + } + a[0] = r; + if (SCHEME_TRUEP(scheme_zero_p(1, a))) { + a[0] = i; + return scheme_exact_to_inexact(1, a); + } + q = scheme_bin_div(r, i); + q = scheme_bin_plus(scheme_make_integer(1), + scheme_bin_mult(q, q)); + a[0] = q; + return scheme_bin_mult(i, scheme_sqrt(1, a)); } else return scheme_abs(1, argv); } diff --git a/src/mzscheme/src/port.c b/src/mzscheme/src/port.c index e19c062ce3..ef4f740bed 100644 --- a/src/mzscheme/src/port.c +++ b/src/mzscheme/src/port.c @@ -1180,7 +1180,7 @@ static void register_port_wait() evt_output_port_p, 1); } -static int pipe_char_count(Scheme_Object *p) +XFORM_NONGCING static int pipe_char_count(Scheme_Object *p) { if (p) { Scheme_Pipe *pipe; @@ -1202,7 +1202,7 @@ static void post_progress(Scheme_Input_Port *ip) ip->progress_evt = NULL; } -static void inc_pos(Scheme_Port *ip, int a) +XFORM_NONGCING static void inc_pos(Scheme_Port *ip, int a) { ip->column += a; ip->readpos += a; @@ -1232,7 +1232,7 @@ static Scheme_Object *quick_plus(Scheme_Object *s, long v) #define state_len(state) ((state >> 3) & 0x7) -static void do_count_lines(Scheme_Port *ip, const char *buffer, long offset, long got) +XFORM_NONGCING static void do_count_lines(Scheme_Port *ip, const char *buffer, long offset, long got) { long i; int c, degot = 0; diff --git a/src/mzscheme/src/schemef.h b/src/mzscheme/src/schemef.h index ed492fde51..b9539fcb52 100644 --- a/src/mzscheme/src/schemef.h +++ b/src/mzscheme/src/schemef.h @@ -524,8 +524,8 @@ MZ_EXTERN mzchar *scheme_utf8_decode_to_buffer(const unsigned char *s, int len, mzchar *buf, int blen); MZ_EXTERN mzchar *scheme_utf8_decode_to_buffer_len(const unsigned char *s, int len, mzchar *buf, int blen, long *rlen); -MZ_EXTERN int scheme_utf8_decode_count(const unsigned char *s, int start, int end, - int *_state, int might_continue, int permissive); +XFORM_NONGCING MZ_EXTERN int scheme_utf8_decode_count(const unsigned char *s, int start, int end, + int *_state, int might_continue, int permissive); MZ_EXTERN int scheme_utf8_encode(const unsigned int *us, int start, int end, unsigned char *s, int dstart, @@ -852,9 +852,6 @@ MZ_EXTERN Scheme_Object *scheme_make_modidx(Scheme_Object *path, Scheme_Object *base, Scheme_Object *resolved); -MZ_EXTERN Scheme_Object *scheme_declare_module(Scheme_Object *shape, Scheme_Invoke_Proc ivk, - Scheme_Invoke_Proc sivk, void *data, Scheme_Env *env); - MZ_EXTERN Scheme_Object *scheme_apply_for_syntax_in_env(Scheme_Object *proc, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_dynamic_require(int argc, Scheme_Object *argv[]); diff --git a/src/mzscheme/src/schemex.h b/src/mzscheme/src/schemex.h index ed451e2fa9..41b5a6843f 100644 --- a/src/mzscheme/src/schemex.h +++ b/src/mzscheme/src/schemex.h @@ -429,8 +429,8 @@ mzchar *(*scheme_utf8_decode_to_buffer)(const unsigned char *s, int len, mzchar *buf, int blen); mzchar *(*scheme_utf8_decode_to_buffer_len)(const unsigned char *s, int len, mzchar *buf, int blen, long *rlen); -int (*scheme_utf8_decode_count)(const unsigned char *s, int start, int end, - int *_state, int might_continue, int permissive); +XFORM_NONGCING MZ_EXTERN; + int *_state, int might_continue, int permissive); int (*scheme_utf8_encode)(const unsigned int *us, int start, int end, unsigned char *s, int dstart, char utf16); @@ -703,8 +703,6 @@ void (*scheme_protect_primitive_provide)(Scheme_Env *env, Scheme_Object *name); Scheme_Object *(*scheme_make_modidx)(Scheme_Object *path, Scheme_Object *base, Scheme_Object *resolved); -Scheme_Object *(*scheme_declare_module)(Scheme_Object *shape, Scheme_Invoke_Proc ivk, - Scheme_Invoke_Proc sivk, void *data, Scheme_Env *env); Scheme_Object *(*scheme_apply_for_syntax_in_env)(Scheme_Object *proc, Scheme_Env *env); Scheme_Object *(*scheme_dynamic_require)(int argc, Scheme_Object *argv[]); /*========================================================================*/ diff --git a/src/mzscheme/src/schemex.inc b/src/mzscheme/src/schemex.inc index 2284b8e477..f6cccef135 100644 --- a/src/mzscheme/src/schemex.inc +++ b/src/mzscheme/src/schemex.inc @@ -285,7 +285,7 @@ scheme_extension_table->scheme_utf8_decode_prefix = scheme_utf8_decode_prefix; scheme_extension_table->scheme_utf8_decode_to_buffer = scheme_utf8_decode_to_buffer; scheme_extension_table->scheme_utf8_decode_to_buffer_len = scheme_utf8_decode_to_buffer_len; - scheme_extension_table->scheme_utf8_decode_count = scheme_utf8_decode_count; + scheme_extension_table->MZ_EXTERN = MZ_EXTERN; scheme_extension_table->scheme_utf8_encode = scheme_utf8_encode; scheme_extension_table->scheme_utf8_encode_all = scheme_utf8_encode_all; scheme_extension_table->scheme_utf8_encode_to_buffer = scheme_utf8_encode_to_buffer; @@ -475,7 +475,6 @@ scheme_extension_table->scheme_finish_primitive_module = scheme_finish_primitive_module; scheme_extension_table->scheme_protect_primitive_provide = scheme_protect_primitive_provide; scheme_extension_table->scheme_make_modidx = scheme_make_modidx; - scheme_extension_table->scheme_declare_module = scheme_declare_module; scheme_extension_table->scheme_apply_for_syntax_in_env = scheme_apply_for_syntax_in_env; scheme_extension_table->scheme_dynamic_require = scheme_dynamic_require; scheme_extension_table->scheme_intern_symbol = scheme_intern_symbol; diff --git a/src/mzscheme/src/schemexm.h b/src/mzscheme/src/schemexm.h index 5b8650d0d3..715142158f 100644 --- a/src/mzscheme/src/schemexm.h +++ b/src/mzscheme/src/schemexm.h @@ -285,7 +285,7 @@ #define scheme_utf8_decode_prefix (scheme_extension_table->scheme_utf8_decode_prefix) #define scheme_utf8_decode_to_buffer (scheme_extension_table->scheme_utf8_decode_to_buffer) #define scheme_utf8_decode_to_buffer_len (scheme_extension_table->scheme_utf8_decode_to_buffer_len) -#define scheme_utf8_decode_count (scheme_extension_table->scheme_utf8_decode_count) +#define MZ_EXTERN (scheme_extension_table->MZ_EXTERN) #define scheme_utf8_encode (scheme_extension_table->scheme_utf8_encode) #define scheme_utf8_encode_all (scheme_extension_table->scheme_utf8_encode_all) #define scheme_utf8_encode_to_buffer (scheme_extension_table->scheme_utf8_encode_to_buffer) @@ -475,7 +475,6 @@ #define scheme_finish_primitive_module (scheme_extension_table->scheme_finish_primitive_module) #define scheme_protect_primitive_provide (scheme_extension_table->scheme_protect_primitive_provide) #define scheme_make_modidx (scheme_extension_table->scheme_make_modidx) -#define scheme_declare_module (scheme_extension_table->scheme_declare_module) #define scheme_apply_for_syntax_in_env (scheme_extension_table->scheme_apply_for_syntax_in_env) #define scheme_dynamic_require (scheme_extension_table->scheme_dynamic_require) #define scheme_intern_symbol (scheme_extension_table->scheme_intern_symbol) diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 2c5d35e51a..343c88e316 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -593,7 +593,8 @@ void scheme_extend_module_rename(Scheme_Object *rn, Scheme_Object *modname, void scheme_extend_module_rename_with_kernel(Scheme_Object *rn, Scheme_Object *nominal_src); void scheme_save_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info); void scheme_do_module_rename_unmarshal(Scheme_Object *rn, Scheme_Object *info, - Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to); + Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to, + Scheme_Hash_Table *export_registry); void scheme_remove_module_rename(Scheme_Object *mrn, Scheme_Object *localname); void scheme_append_module_rename(Scheme_Object *src, Scheme_Object *dest); @@ -626,9 +627,11 @@ Scheme_Object *scheme_stx_property(Scheme_Object *_stx, Scheme_Object *val); Scheme_Object *scheme_stx_phase_shift(Scheme_Object *stx, long shift, - Scheme_Object *old_midx, Scheme_Object *new_midx); + Scheme_Object *old_midx, Scheme_Object *new_midx, + Scheme_Hash_Table *export_registry); Scheme_Object *scheme_stx_phase_shift_as_rename(long shift, - Scheme_Object *old_midx, Scheme_Object *new_midx); + Scheme_Object *old_midx, Scheme_Object *new_midx, + Scheme_Hash_Table *export_registry); int scheme_stx_list_length(Scheme_Object *list); int scheme_stx_proper_list_length(Scheme_Object *list); @@ -1420,7 +1423,7 @@ Scheme_Object *scheme_named_map_1(char *, Scheme_Object *(*fun)(Scheme_Object*, Scheme_Object *form), Scheme_Object *lst, Scheme_Object *form); -int scheme_strncmp(const char *a, const char *b, int len); +XFORM_NONGCING int scheme_strncmp(const char *a, const char *b, int len); #define _scheme_make_char(ch) scheme_make_character(ch) @@ -2001,6 +2004,7 @@ struct Scheme_Env { Scheme_Hash_Table *module_registry; /* symbol -> module ; loaded modules, shared with modules in same space */ + Scheme_Hash_Table *export_registry; /* symbol -> module-exports */ Scheme_Object *insp; /* instantiation-time inspector, for granting protected access and certificates */ @@ -2049,9 +2053,9 @@ typedef struct Scheme_Module Scheme_Object *modname; - Scheme_Object *et_requires; /* list of module access paths */ - Scheme_Object *requires; /* list of module access paths */ - Scheme_Object *tt_requires; /* list of module access paths */ + Scheme_Object *et_requires; /* list of symbol-or-module-path-index */ + Scheme_Object *requires; /* list of symbol-or-module-path-index */ + Scheme_Object *tt_requires; /* list of symbol-or-module-path-index */ Scheme_Invoke_Proc prim_body; Scheme_Invoke_Proc prim_et_body; @@ -2060,21 +2064,13 @@ typedef struct Scheme_Module Scheme_Object *et_body; /* list of (vector list-of-names expr depth-int resolve-prefix) */ char functional, et_functional, tt_functional, no_cert; + + struct Scheme_Module_Exports *me; - Scheme_Object **provides; /* symbols (extenal names) */ - Scheme_Object **provide_srcs; /* module access paths, #f for self */ - Scheme_Object **provide_src_names; /* symbols (original internal names) */ char *provide_protects; /* 1 => protected, 0 => not */ - int num_provides; - int num_var_provides; /* non-syntax listed first in provides */ - - int reprovide_kernel; /* if true, extend provides with kernel's */ - Scheme_Object *kernel_exclusion; /* we allow one exn, but it must be shadowed */ - Scheme_Object **indirect_provides; /* symbols (internal names) */ int num_indirect_provides; - Scheme_Object *src_modidx; /* the one used in marshalled syntax */ Scheme_Object *self_modidx; Scheme_Hash_Table *accessible; @@ -2094,6 +2090,26 @@ typedef struct Scheme_Module Scheme_Object *rn_stx, *et_rn_stx, *tt_rn_stx; } Scheme_Module; +typedef struct Scheme_Module_Exports +{ + /* Scheme_Module_Exports is separate from Scheme_Module + so that we can create a global table mapping export + keys to exports. This mapping is used to lazily + unmarshal syntax-object context. */ + MZTAG_IF_REQUIRED + + Scheme_Object **provides; /* symbols (extenal names) */ + Scheme_Object **provide_srcs; /* module access paths, #f for self */ + Scheme_Object **provide_src_names; /* symbols (original internal names) */ + int num_provides; + int num_var_provides; /* non-syntax listed first in provides */ + + int reprovide_kernel; /* if true, extend provides with kernel's */ + Scheme_Object *kernel_exclusion; /* we allow one exn, but it must be shadowed */ + + Scheme_Object *src_modidx; /* the one used in marshalled syntax */ +} Scheme_Module_Exports; + typedef struct Scheme_Modidx { Scheme_Object so; /* scheme_module_index_type */ @@ -2125,7 +2141,7 @@ Scheme_Object *scheme_sys_wraps(Scheme_Comp_Env *env); Scheme_Env *scheme_new_module_env(Scheme_Env *env, Scheme_Module *m, int new_exp_module_tree); int scheme_is_module_env(Scheme_Comp_Env *env); -Scheme_Object *scheme_module_resolve(Scheme_Object *modidx); +Scheme_Object *scheme_module_resolve(Scheme_Object *modidx, int load_it); Scheme_Env *scheme_module_access(Scheme_Object *modname, Scheme_Env *env, int rev_mod_phase); void scheme_module_force_lazy(Scheme_Env *env, int previous); diff --git a/src/mzscheme/src/schvers.h b/src/mzscheme/src/schvers.h index 3d869d1c57..5d65ede16d 100644 --- a/src/mzscheme/src/schvers.h +++ b/src/mzscheme/src/schvers.h @@ -9,6 +9,6 @@ #define MZSCHEME_VERSION_MAJOR 350 -#define MZSCHEME_VERSION_MINOR 1 +#define MZSCHEME_VERSION_MINOR 2 -#define MZSCHEME_VERSION "350.1" _MZ_SPECIAL_TAG +#define MZSCHEME_VERSION "350.2" _MZ_SPECIAL_TAG diff --git a/src/mzscheme/src/startup.inc b/src/mzscheme/src/startup.inc index 13f4f0bed6..ea8562b5c2 100644 --- a/src/mzscheme/src/startup.inc +++ b/src/mzscheme/src/startup.inc @@ -2867,14 +2867,29 @@ "(define(make-standard-module-name-resolver orig-namespace)" "(define planet-resolver #f)" "(define standard-module-name-resolver" -"(lambda(s relto stx)" +"(case-lambda " +"((s) " +"(when planet-resolver" +"(planet-resolver s))" +"(let((ht(hash-table-get" +" -module-hash-table-table" +"(namespace-module-registry(current-namespace))" +"(lambda()" +"(let((ht(make-hash-table)))" +"(hash-table-put! -module-hash-table-table" +"(namespace-module-registry(current-namespace))" +" ht)" +" ht)))))" +"(hash-table-put! ht s 'attach)))" +"((s relto stx)(standard-module-name-resolver s relto stx #t))" +"((s relto stx load?)" "(cond" "((and(pair? s)(eq?(car s) 'planet))" "(unless planet-resolver" "(parameterize((current-namespace orig-namespace))" " (set! planet-resolver (dynamic-require '(lib \"resolver.ss\" \"planet\") 'planet-module-name-resolver))))" -"(planet-resolver s relto stx))" -"(s" +"(planet-resolver s relto stx load?))" +"(else" "(let((get-dir(lambda()" "(or(and relto" "(if(eq? relto -prev-relto)" @@ -2993,6 +3008,7 @@ "(namespace-module-registry(current-namespace))" " ht)" " ht)))))" +"(when load?" "(let((got(hash-table-get ht modname(lambda() #f))))" "(when got" "(unless(or(symbol? got)(equal? suffix got))" @@ -3023,7 +3039,7 @@ "((current-load/use-compiled) " " filename " "(string->symbol(bytes->string/latin-1(path->bytes no-sfx)))))))" -"(hash-table-put! ht modname suffix)))" +"(hash-table-put! ht modname suffix))))" "(when(and(not(vector? s-parsed))" "(or(string? s)" "(and(pair? s)" @@ -3039,20 +3055,7 @@ " abase" " modname" " suffix)))" -" modname)))))))" -"(else" -"(when planet-resolver" -"(planet-resolver s relto stx))" -"(let((ht(hash-table-get" -" -module-hash-table-table" -"(namespace-module-registry(current-namespace))" -"(lambda()" -"(let((ht(make-hash-table)))" -"(hash-table-put! -module-hash-table-table" -"(namespace-module-registry(current-namespace))" -" ht)" -" ht)))))" -"(hash-table-put! ht relto 'attach))))))" +" modname)))))))))))" " standard-module-name-resolver)" "(define find-library-collection-paths" "(case-lambda" diff --git a/src/mzscheme/src/startup.ss b/src/mzscheme/src/startup.ss index b32018ab92..2c1c474026 100644 --- a/src/mzscheme/src/startup.ss +++ b/src/mzscheme/src/startup.ss @@ -3303,7 +3303,24 @@ (define (make-standard-module-name-resolver orig-namespace) (define planet-resolver #f) (define standard-module-name-resolver - (lambda (s relto stx) + (case-lambda + [(s) + ;; Just register s as loaded + (when planet-resolver + ;; Let planet resolver register, too: + (planet-resolver s)) + (let ([ht (hash-table-get + -module-hash-table-table + (namespace-module-registry (current-namespace)) + (lambda () + (let ([ht (make-hash-table)]) + (hash-table-put! -module-hash-table-table + (namespace-module-registry (current-namespace)) + ht) + ht)))]) + (hash-table-put! ht s 'attach))] + [(s relto stx) (standard-module-name-resolver s relto stx #t)] + [(s relto stx load?) ;; If stx is not #f, raise syntax error for ill-formed paths ;; If s is #f, call to resolver is a notification from namespace-attach-module (cond @@ -3311,8 +3328,8 @@ (unless planet-resolver (parameterize ([current-namespace orig-namespace]) (set! planet-resolver (dynamic-require '(lib "resolver.ss" "planet") 'planet-module-name-resolver)))) - (planet-resolver s relto stx)] - [s + (planet-resolver s relto stx load?)] + [else (let ([get-dir (lambda () (or (and relto (if (eq? relto -prev-relto) @@ -3435,39 +3452,40 @@ ht) ht)))]) ;; Loaded already? - (let ([got (hash-table-get ht modname (lambda () #f))]) - (when got - ;; Check the suffix, which gets lost when creating a key: - (unless (or (symbol? got) (equal? suffix got)) - (error - 'standard-module-name-resolver - "module previously loaded with suffix ~s, cannot load with suffix ~s: ~e" - (if (eq? #t got) "" got) - (if (eq? #t suffix) "" suffix) - filename))) - (unless got - ;; Currently loading? - (let ([l (continuation-mark-set->list - (current-continuation-marks) - -loading-filename)] - [ns (current-namespace)]) - (for-each - (lambda (s) - (when (and (equal? (cdr s) normal-filename) - (eq? (car s) ns)) - (error - 'standard-module-name-resolver - "cycle in loading at ~e: ~e" - filename - (map cdr (reverse (cons s l)))))) - l)) - (let ([prefix (string->symbol abase)]) - (with-continuation-mark -loading-filename (cons (current-namespace) normal-filename) - (parameterize ([current-module-name-prefix prefix]) - ((current-load/use-compiled) - filename - (string->symbol (bytes->string/latin-1 (path->bytes no-sfx))))))) - (hash-table-put! ht modname suffix))) + (when load? + (let ([got (hash-table-get ht modname (lambda () #f))]) + (when got + ;; Check the suffix, which gets lost when creating a key: + (unless (or (symbol? got) (equal? suffix got)) + (error + 'standard-module-name-resolver + "module previously loaded with suffix ~s, cannot load with suffix ~s: ~e" + (if (eq? #t got) "" got) + (if (eq? #t suffix) "" suffix) + filename))) + (unless got + ;; Currently loading? + (let ([l (continuation-mark-set->list + (current-continuation-marks) + -loading-filename)] + [ns (current-namespace)]) + (for-each + (lambda (s) + (when (and (equal? (cdr s) normal-filename) + (eq? (car s) ns)) + (error + 'standard-module-name-resolver + "cycle in loading at ~e: ~e" + filename + (map cdr (reverse (cons s l)))))) + l)) + (let ([prefix (string->symbol abase)]) + (with-continuation-mark -loading-filename (cons (current-namespace) normal-filename) + (parameterize ([current-module-name-prefix prefix]) + ((current-load/use-compiled) + filename + (string->symbol (bytes->string/latin-1 (path->bytes no-sfx))))))) + (hash-table-put! ht modname suffix)))) ;; If a `lib' path, cache pathname manipulations (when (and (not (vector? s-parsed)) (or (string? s) @@ -3485,22 +3503,7 @@ modname suffix))) ;; Result is the module name: - modname))))))] - [else - ;; Just register relto as loaded - (when planet-resolver - ;; Let planet resolver register, too: - (planet-resolver s relto stx)) - (let ([ht (hash-table-get - -module-hash-table-table - (namespace-module-registry (current-namespace)) - (lambda () - (let ([ht (make-hash-table)]) - (hash-table-put! -module-hash-table-table - (namespace-module-registry (current-namespace)) - ht) - ht)))]) - (hash-table-put! ht relto 'attach))]))) + modname))))))])])) standard-module-name-resolver) (define find-library-collection-paths diff --git a/src/mzscheme/src/string.c b/src/mzscheme/src/string.c index 4a557b4947..5b98d21cf4 100644 --- a/src/mzscheme/src/string.c +++ b/src/mzscheme/src/string.c @@ -268,14 +268,14 @@ static int mz_char_strcmp(const char *who, const mzchar *str1, int l1, const mzc static int mz_char_strcmp_ci(const char *who, const mzchar *str1, int l1, const mzchar *str2, int l2, int locale, int size_shortcut); static int mz_strcmp(const char *who, unsigned char *str1, int l1, unsigned char *str2, int l2); -static int utf8_decode_x(const unsigned char *s, int start, int end, - unsigned int *us, int dstart, int dend, - long *ipos, long *jpos, - char compact, char utf16, - int *state, int might_continue, int permissive); -static int utf8_encode_x(const unsigned int *us, int start, int end, - unsigned char *s, int dstart, int dend, - long *_ipos, long *_opos, char utf16); +XFORM_NONGCING static int utf8_decode_x(const unsigned char *s, int start, int end, + unsigned int *us, int dstart, int dend, + long *ipos, long *jpos, + char compact, char utf16, + int *state, int might_continue, int permissive); +XFORM_NONGCING static int utf8_encode_x(const unsigned int *us, int start, int end, + unsigned char *s, int dstart, int dend, + long *_ipos, long *_opos, char utf16); static char *string_to_from_locale(int to_bytes, char *in, int delta, int len, diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index 73b6bfe1ec..651219f422 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -213,8 +213,10 @@ static Module_Renames *krn; simple lexical renames (not ribs) and marks, only, and it's inserted into a chain heuristically - - A wrap-elem (box (vector )) is a phase shift - by , remapping the first to the second + - A wrap-elem (box (vector )) + is a phase shift by , remapping the first to the + second ; the part is for finding + modules to unmarshal import renamings - A wrap-elem '* is a mark barrier, which is applied to the result of an expansion so that top-level marks do not @@ -1327,14 +1329,16 @@ Scheme_Hash_Table *scheme_module_rename_marked_names(Scheme_Object *rn) } static void unmarshal_rename(Module_Renames *mrn, - Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to) + Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to, + Scheme_Hash_Table *export_registry) { Scheme_Object *l; mrn->needs_unmarshal = 0; for (l = mrn->unmarshal_info; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) { scheme_do_module_rename_unmarshal((Scheme_Object *)mrn, SCHEME_CAR(l), - modidx_shift_from, modidx_shift_to); + modidx_shift_from, modidx_shift_to, + export_registry); } } @@ -1402,22 +1406,25 @@ Scheme_Object *scheme_add_mark_barrier(Scheme_Object *o) return scheme_add_rename(o, barrier_symbol); } -Scheme_Object *scheme_stx_phase_shift_as_rename(long shift, Scheme_Object *old_midx, Scheme_Object *new_midx) +Scheme_Object *scheme_stx_phase_shift_as_rename(long shift, Scheme_Object *old_midx, Scheme_Object *new_midx, + Scheme_Hash_Table *export_registry) { - if (shift || new_midx) { + if (shift || new_midx || export_registry) { Scheme_Object *vec; if (last_phase_shift && ((vec = SCHEME_BOX_VAL(last_phase_shift))) && (SCHEME_VEC_ELS(vec)[0] == scheme_make_integer(shift)) && (SCHEME_VEC_ELS(vec)[1] == (new_midx ? old_midx : scheme_false)) - && (SCHEME_VEC_ELS(vec)[2] == (new_midx ? new_midx : scheme_false))) { + && (SCHEME_VEC_ELS(vec)[2] == (new_midx ? new_midx : scheme_false)) + && (SCHEME_VEC_ELS(vec)[3] == (export_registry ? (Scheme_Object *)export_registry : scheme_false))) { /* use the old one */ } else { - vec = scheme_make_vector(3, NULL); + vec = scheme_make_vector(4, NULL); SCHEME_VEC_ELS(vec)[0] = scheme_make_integer(shift); SCHEME_VEC_ELS(vec)[1] = (new_midx ? old_midx : scheme_false); SCHEME_VEC_ELS(vec)[2] = (new_midx ? new_midx : scheme_false); + SCHEME_VEC_ELS(vec)[3] = (export_registry ? (Scheme_Object *)export_registry : scheme_false); last_phase_shift = scheme_box(vec); } @@ -1428,14 +1435,15 @@ Scheme_Object *scheme_stx_phase_shift_as_rename(long shift, Scheme_Object *old_m } Scheme_Object *scheme_stx_phase_shift(Scheme_Object *stx, long shift, - Scheme_Object *old_midx, Scheme_Object *new_midx) + Scheme_Object *old_midx, Scheme_Object *new_midx, + Scheme_Hash_Table *export_registry) /* Shifts the phase on a syntax object in a module. A 0 shift might be used just to re-direct relative module paths. new_midx might be - NULL to shift without redirection. */ + NULL to shift without redirection. And so on. */ { Scheme_Object *ps; - ps = scheme_stx_phase_shift_as_rename(shift, old_midx, new_midx); + ps = scheme_stx_phase_shift_as_rename(shift, old_midx, new_midx, export_registry); if (ps) return scheme_add_rename(stx, ps); else @@ -1781,8 +1789,8 @@ int scheme_stx_certified(Scheme_Object *stx, Scheme_Object *extra_certs, else cert_modidx = certs->modidx; - a = scheme_module_resolve(home_modidx); - b = scheme_module_resolve(cert_modidx); + a = scheme_module_resolve(home_modidx, 0); + b = scheme_module_resolve(cert_modidx, 0); } else a = b = NULL; @@ -2057,7 +2065,7 @@ Scheme_Object *scheme_stx_cert(Scheme_Object *o, Scheme_Object *mark, Scheme_Env else cert = INACTIVE_CERTS(stx); - cert = cons_cert(mark, menv->link_midx ? menv->link_midx : menv->module->src_modidx, + cert = cons_cert(mark, menv->link_midx ? menv->link_midx : menv->module->me->src_modidx, menv->module->insp, key, cert); if (active) { @@ -2665,6 +2673,7 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, Scheme_Lexical_Rib *rib = NULL, *did_rib = NULL; long orig_phase = phase; Scheme_Object *bdg = NULL; + Scheme_Hash_Table *export_registry = NULL; if (_wraps) { WRAP_POS_COPY(wraps, *_wraps); @@ -2718,7 +2727,7 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, Scheme_Object *rename, *nominal = NULL, *glob_id; if (mrn->needs_unmarshal) - unmarshal_rename(mrn, modidx_shift_from, modidx_shift_to); + unmarshal_rename(mrn, modidx_shift_from, modidx_shift_to, export_registry); if (mrn->marked_names) { /* Resolve based on rest of wraps: */ @@ -2830,6 +2839,13 @@ static Scheme_Object *resolve_env(WRAP_POS *_wraps, modidx_shift_from = src; } + + { + Scheme_Object *er; + er = SCHEME_VEC_ELS(vec)[3]; + if (SCHEME_TRUEP(er)) + export_registry = (Scheme_Hash_Table *)er; + } } else if (rib || (SCHEME_VECTORP(WRAP_POS_FIRST(wraps)) && !no_lexical)) { /* Lexical rename: */ @@ -3079,8 +3095,8 @@ int scheme_stx_free_eq(Scheme_Object *a, Scheme_Object *b, long phase) a = resolve_env(NULL, a, phase, 1, NULL, NULL); b = resolve_env(NULL, b, phase, 1, NULL, NULL); - a = scheme_module_resolve(a); - b = scheme_module_resolve(b); + a = scheme_module_resolve(a, 0); + b = scheme_module_resolve(b, 0); /* Same binding environment? */ return SAME_OBJ(a, b); @@ -3112,8 +3128,8 @@ int scheme_stx_module_eq(Scheme_Object *a, Scheme_Object *b, long phase) a = resolve_env(NULL, a, phase, 1, NULL, NULL); b = resolve_env(NULL, b, phase, 1, NULL, NULL); - a = scheme_module_resolve(a); - b = scheme_module_resolve(b); + a = scheme_module_resolve(a, 0); + b = scheme_module_resolve(b, 0); /* Same binding environment? */ return SAME_OBJ(a, b); @@ -3254,7 +3270,7 @@ Scheme_Object *scheme_stx_source_module(Scheme_Object *stx, int resolve) } if (SCHEME_TRUEP(srcmod) && resolve) - srcmod = scheme_module_resolve(srcmod); + srcmod = scheme_module_resolve(srcmod, 0); return srcmod; } @@ -3993,6 +4009,18 @@ static Scheme_Object *wraps_to_datum(Scheme_Object *w_in, } /* If l is the end, don't need the phase shift */ if (!WRAP_POS_END_P(l)) { + /* Need the phase shift, but drop the export table, if any: */ + Scheme_Object *aa; + aa = SCHEME_BOX_VAL(a); + if (SCHEME_TRUEP(SCHEME_VEC_ELS(aa)[3])) { + a = scheme_make_vector(4, NULL); + SCHEME_VEC_ELS(a)[0] = SCHEME_VEC_ELS(aa)[0]; + SCHEME_VEC_ELS(a)[1] = SCHEME_VEC_ELS(aa)[1]; + SCHEME_VEC_ELS(a)[2] = SCHEME_VEC_ELS(aa)[2]; + SCHEME_VEC_ELS(a)[3] = scheme_false; + a = scheme_box(a); + } + stack = CONS(a, stack); stack_size++; } @@ -5604,7 +5632,7 @@ static Scheme_Object *do_module_binding(char *name, int argc, Scheme_Object **ar /* Imported */ int pos; - m = scheme_module_resolve(m); + m = scheme_module_resolve(m, 0); pos = scheme_module_export_position(m, scheme_get_env(NULL), a); if (pos < 0) return scheme_false; diff --git a/src/mzscheme/src/stypes.h b/src/mzscheme/src/stypes.h index 794ff57785..4d9a77f5e7 100644 --- a/src/mzscheme/src/stypes.h +++ b/src/mzscheme/src/stypes.h @@ -215,6 +215,7 @@ enum { scheme_rt_native_code, /* 194 */ scheme_rt_native_code_plus_case, /* 195 */ scheme_rt_jitter_data, /* 196 */ + scheme_rt_module_exports, /* 197 */ #endif _scheme_last_type_ diff --git a/src/mzscheme/src/type.c b/src/mzscheme/src/type.c index 0efc52d855..aa0b6f0f18 100644 --- a/src/mzscheme/src/type.c +++ b/src/mzscheme/src/type.c @@ -519,6 +519,7 @@ void scheme_register_traversers(void) GC_REG_TRAV(scheme_stx_type, stx_val); GC_REG_TRAV(scheme_stx_offset_type, stx_off_val); GC_REG_TRAV(scheme_module_type, module_val); + GC_REG_TRAV(scheme_rt_module_exports, module_exports_val); GC_REG_TRAV(scheme_module_index_type, modidx_val); GC_REG_TRAV(scheme_security_guard_type, guard_val);