diff --git a/collects/drracket/private/language-configuration.rkt b/collects/drracket/private/language-configuration.rkt index 468fddb43a..d108a0a668 100644 --- a/collects/drracket/private/language-configuration.rkt +++ b/collects/drracket/private/language-configuration.rkt @@ -375,8 +375,9 @@ (define/override (on-select i) (cond [(and i (is-a? i hieritem-language<%>)) - (preferences:set 'drracket:language-dialog:hierlist-default (send (send i get-language) get-language-position)) - (set! most-recent-languages-hier-list-selection i) + (define pos (send (send i get-language) get-language-position)) + (preferences:set 'drracket:language-dialog:hierlist-default pos) + (set! most-recent-languages-hier-list-selection pos) (something-selected i)] [else (non-language-selected)])) @@ -430,8 +431,7 @@ (use-chosen-language-rb-callback))])) (define (use-chosen-language-rb-callback) (when most-recent-languages-hier-list-selection - (send languages-hier-list select - most-recent-languages-hier-list-selection)) + (select-a-language-in-hierlist most-recent-languages-hier-list-selection)) (send use-language-in-source-rb set-selection #f) (send languages-hier-list focus)) (define languages-hier-list-panel (new horizontal-panel% [parent languages-choice-panel])) diff --git a/collects/drracket/private/syncheck/gui.rkt b/collects/drracket/private/syncheck/gui.rkt index e917af2d19..9e239c6e83 100644 --- a/collects/drracket/private/syncheck/gui.rkt +++ b/collects/drracket/private/syncheck/gui.rkt @@ -204,7 +204,7 @@ If the namespace does not, they are colored the unbound color. (define-struct graphic (pos* locs->thunks draw-fn click-fn)) - (define-struct arrow (start-x start-y end-x end-y) #:mutable #:transparent) + (define-struct arrow () #:mutable #:transparent) (define-struct (var-arrow arrow) (start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right @@ -420,12 +420,12 @@ If the namespace does not, they are colored the unbound color. xr yr)))) - (define/private (update-arrow-poss arrow) + (define/private (get-arrow-poss arrow) (cond - [(var-arrow? arrow) (update-var-arrow-poss arrow)] - [(tail-arrow? arrow) (update-tail-arrow-poss arrow)])) + [(var-arrow? arrow) (get-var-arrow-poss arrow)] + [(tail-arrow? arrow) (get-tail-arrow-poss arrow)])) - (define/private (update-var-arrow-poss arrow) + (define/private (get-var-arrow-poss arrow) (let-values ([(start-x start-y) (find-poss (var-arrow-start-text arrow) (var-arrow-start-pos-left arrow) @@ -434,12 +434,9 @@ If the namespace does not, they are colored the unbound color. (var-arrow-end-text arrow) (var-arrow-end-pos-left arrow) (var-arrow-end-pos-right arrow))]) - (set-arrow-start-x! arrow start-x) - (set-arrow-start-y! arrow start-y) - (set-arrow-end-x! arrow end-x) - (set-arrow-end-y! arrow end-y))) + (values start-x start-y end-x end-y))) - (define/private (update-tail-arrow-poss arrow) + (define/private (get-tail-arrow-poss arrow) ;; If the item is an embedded editor snip, redirect ;; the arrow to point at the left edge rather than the ;; midpoint. @@ -458,24 +455,22 @@ If the namespace does not, they are colored the unbound color. [(end-x end-y) (find-poss/embedded (tail-arrow-to-text arrow) (tail-arrow-to-pos arrow))]) - (set-arrow-start-x! arrow start-x) - (set-arrow-start-y! arrow start-y) - (set-arrow-end-x! arrow end-x) - (set-arrow-end-y! arrow end-y))) - + (values start-x start-y end-x end-y))) + + (define xlb (box 0)) + (define ylb (box 0)) + (define xrb (box 0)) + (define yrb (box 0)) + (define/private (find-poss text left-pos right-pos) - (let ([xlb (box 0)] - [ylb (box 0)] - [xrb (box 0)] - [yrb (box 0)]) - (send text position-location left-pos xlb ylb #t) - (send text position-location right-pos xrb yrb #f) - (let*-values ([(xl-off yl-off) (send text editor-location-to-dc-location (unbox xlb) (unbox ylb))] - [(xl yl) (dc-location-to-editor-location xl-off yl-off)] - [(xr-off yr-off) (send text editor-location-to-dc-location (unbox xrb) (unbox yrb))] - [(xr yr) (dc-location-to-editor-location xr-off yr-off)]) - (values (/ (+ xl xr) 2) - (/ (+ yl yr) 2))))) + (send text position-location left-pos xlb ylb #t) + (send text position-location right-pos xrb yrb #f) + (let*-values ([(xl-off yl-off) (send text editor-location-to-dc-location (unbox xlb) (unbox ylb))] + [(xl yl) (dc-location-to-editor-location xl-off yl-off)] + [(xr-off yr-off) (send text editor-location-to-dc-location (unbox xrb) (unbox yrb))] + [(xr yr) (dc-location-to-editor-location xr-off yr-off)]) + (values (/ (+ xl xr) 2) + (/ (+ yl yr) 2)))) ;; syncheck:init-arrows : -> void (define/public (syncheck:init-arrows) @@ -701,8 +696,7 @@ If the namespace does not, they are colored the unbound color. (when (add-to-bindings-table start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right) - (let ([arrow (make-var-arrow #f #f #f #f - start-text start-pos-left start-pos-right + (let ([arrow (make-var-arrow start-text start-pos-left start-pos-right end-text end-pos-left end-pos-right actual? level)]) (add-to-range/key start-text start-pos-left start-pos-right arrow #f #f) @@ -711,7 +705,7 @@ If the namespace does not, they are colored the unbound color. ;; syncheck:add-tail-arrow : text number text number -> void (define/public (syncheck:add-tail-arrow from-text from-pos to-text to-pos) (when arrow-records - (let ([tail-arrow (make-tail-arrow #f #f #f #f to-text to-pos from-text from-pos)]) + (let ([tail-arrow (make-tail-arrow to-text to-pos from-text from-pos)]) (add-to-range/key from-text from-pos (+ from-pos 1) tail-arrow #f #f) (add-to-range/key to-text to-pos (+ to-pos 1) tail-arrow #f #f)))) @@ -761,7 +755,6 @@ If the namespace does not, they are colored the unbound color. (define/augment (on-change) (inner (void) on-change) (when arrow-records - (flush-arrow-coordinates-cache) (let ([any-tacked? #f]) (when tacked-hash-table (let/ec k @@ -773,18 +766,6 @@ If the namespace does not, they are colored the unbound color. (when any-tacked? (invalidate-bitmap-cache))))) - ;; flush-arrow-coordinates-cache : -> void - ;; pre-condition: arrow-records is not #f. - (define/private (flush-arrow-coordinates-cache) - (for ([(text arrow-record) (in-hash arrow-records)]) - (for ([(start+end eles) (in-dict arrow-record)]) - (for ([ele (in-list eles)]) - (when (arrow? ele) - (set-arrow-start-x! ele #f) - (set-arrow-start-y! ele #f) - (set-arrow-end-x! ele #f) - (set-arrow-end-y! ele #f)))))) - (define view-corner-hash (make-weak-hasheq)) (define (get-last-view-corner admin) @@ -835,21 +816,17 @@ If the namespace does not, they are colored the unbound color. (start-arrow-draw-timer syncheck-arrow-delay))) (let ([draw-arrow2 (λ (arrow) - (unless (arrow-start-x arrow) - (update-arrow-poss arrow)) - (let ([start-x (arrow-start-x arrow)] - [start-y (arrow-start-y arrow)] - [end-x (arrow-end-x arrow)] - [end-y (arrow-end-y arrow)]) - (unless (and (= start-x end-x) - (= start-y end-y)) - (drracket:arrow:draw-arrow dc start-x start-y end-x end-y dx dy - #:pen-width 2) - (when (and (var-arrow? arrow) (not (var-arrow-actual? arrow))) - (let-values ([(fw fh _d _v) (send dc get-text-extent "x")]) - (send dc draw-text "?" - (+ end-x dx fw) - (+ end-y dy (- fh))))))))] + (define-values (start-x start-y end-x end-y) + (get-arrow-poss arrow)) + (unless (and (= start-x end-x) + (= start-y end-y)) + (drracket:arrow:draw-arrow dc start-x start-y end-x end-y dx dy + #:pen-width 2) + (when (and (var-arrow? arrow) (not (var-arrow-actual? arrow))) + (let-values ([(fw fh _d _v) (send dc get-text-extent "x")]) + (send dc draw-text "?" + (+ end-x dx fw) + (+ end-y dy (- fh)))))))] [old-brush (send dc get-brush)] [old-pen (send dc get-pen)] [old-font (send dc get-font)] @@ -1014,11 +991,6 @@ If the namespace does not, they are colored the unbound color. (update-tooltip-frame) (update-docs-background cursor-eles) - (when cursor-eles - (for ([ele (in-list cursor-eles)]) - (when (arrow? ele) - (update-arrow-poss ele)))) - (invalidate-bitmap-cache)) (define popup-menu #f) diff --git a/collects/drracket/private/unit.rkt b/collects/drracket/private/unit.rkt index fd6b6a8997..1d3cfe0d00 100644 --- a/collects/drracket/private/unit.rkt +++ b/collects/drracket/private/unit.rkt @@ -1388,12 +1388,19 @@ module browser threading seems wrong. ;; so it stays alive as long ;; as the frame stays alive (define show-line-numbers-pref-fn - (let ([fn (lambda (pref value) (show-line-numbers! value))]) + (let ([fn (lambda (pref value) + (when show-line-numbers-menu-item + (send show-line-numbers-menu-item set-label + (if value + (string-constant hide-line-numbers/menu) + (string-constant show-line-numbers/menu)))) + (show-line-numbers! value))]) (preferences:add-callback 'drracket:show-line-numbers? fn #t) fn)) + (define show-line-numbers-menu-item #f) (define/override (add-line-number-menu-items menu) (define on? (preferences:get 'drracket:show-line-numbers?)) @@ -3978,19 +3985,16 @@ module browser threading seems wrong. has-editor-on-demand) (register-capability-menu-item 'drscheme:special:insert-lambda insert-menu)) - (new menu:can-restore-menu-item% - [label (if (show-line-numbers?) - (string-constant hide-line-numbers/menu) - (string-constant show-line-numbers/menu))] - [parent (get-show-menu)] - [callback (lambda (self event) - (define value (preferences:get 'drracket:show-line-numbers?)) - (send self set-label - (if value - (string-constant show-line-numbers/menu) - (string-constant hide-line-numbers/menu))) - (preferences:set 'drracket:show-line-numbers? (not value)) - (show-line-numbers! (not value)))]) + (set! show-line-numbers-menu-item + (new menu:can-restore-menu-item% + [label (if (show-line-numbers?) + (string-constant hide-line-numbers/menu) + (string-constant show-line-numbers/menu))] + [parent (get-show-menu)] + [callback (lambda (self event) + (define value (preferences:get 'drracket:show-line-numbers?)) + (preferences:set 'drracket:show-line-numbers? (not value)) + (show-line-numbers! (not value)))])) (make-object separator-menu-item% (get-show-menu)) diff --git a/collects/meta/dist-specs.rkt b/collects/meta/dist-specs.rkt index 91828537e9..877d7eaeee 100644 --- a/collects/meta/dist-specs.rkt +++ b/collects/meta/dist-specs.rkt @@ -661,8 +661,6 @@ mz-extras :+= (- (package: "swindle") ;; -------------------- plot plt-extras :+= (package: "plot") - (src: "fit") - (lib: "libfit*") ;; -------------------- mzcom plt-extras :+= (- (package: "mzcom" #:src? #t) diff --git a/collects/mred/private/wxme/keymap.rkt b/collects/mred/private/wxme/keymap.rkt index 4f66580db1..505420285c 100644 --- a/collects/mred/private/wxme/keymap.rkt +++ b/collects/mred/private/wxme/keymap.rkt @@ -445,7 +445,9 @@ (def/public (handle-key-event [any? obj] [key-event% event]) (let ([code (send event get-key-code)]) (or (eq? code 'shift) + (eq? code 'rshift) (eq? code 'control) + (eq? code 'rcontrol) (eq? code 'release) (let ([score (get-best-score code diff --git a/collects/mysterx/private/mxmain.rkt b/collects/mysterx/private/mxmain.rkt index 382a7af6a7..acaaed77f3 100644 --- a/collects/mysterx/private/mxmain.rkt +++ b/collects/mysterx/private/mxmain.rkt @@ -1,575 +1,301 @@ -(module mxmain mzscheme +#lang racket/base - ; dummy entries to make Setup happy - ; these are the names defined in mxPrims[] in src/mysterx.cxx +(error "mxmain.rkt: you seem to be missing mxmain.dll; you need to build MysterX in plt\\src\\mysterx\\") - (provide - mx-version - block-while-browsers - com-invoke - com-set-property! - com-get-property - com-get-properties - com-set-properties - com-methods - com-events - com-method-type - com-get-property-type - com-set-property-type - com-event-type - com-help - com-object-type - com-is-a? - com-currency? - com-date? - com-date->date - date->com-date - com-scode? - com-scode->number - number->com-scode - com-currency->number - number->com-currency - com-object? - com-iunknown? - com-register-event-handler - com-unregister-event-handler - com-all-coclasses - com-all-controls - coclass->html - progid->html - cocreate-instance-from-coclass - cocreate-instance-from-progid - com-get-active-object-from-coclass - coclass - progid - set-coclass! - set-coclass-from-progid! - com-object-eq? - com-register-object - com-release-object - com-add-ref - com-ref-count - com-terminate - make-browser - browser-show - navigate - go-back - go-forward - refresh - iconize - restore - current-url - register-navigate-handler - current-document - print-document - document? - document-title - document-insert-html - document-append-html - document-replace-html - document-find-element - document-find-element-by-id-or-name - document-elements-with-tag - document-objects - element-insert-html - element-append-html - element-insert-text - element-append-text - element-replace-html - element-get-html - element-get-text - element-focus - element-selection - element-set-selection! - element-attribute - element-set-attribute! - element-click - element-tag - element-font-family - element-set-font-family! - element-font-style - element-set-font-style! - element-font-variant - element-set-font-variant! - element-font-weight - element-set-font-weight! - element-font - element-set-font! - element-background - element-set-background! - element-background-attachment - element-set-background-attachment! - element-background-image - element-set-background-image! - element-background-repeat - element-set-background-repeat! - element-background-position - element-set-background-position! - element-text-decoration - element-set-text-decoration! - element-text-transform - element-set-text-transform! - element-text-align - element-set-text-align! - element-margin - element-set-margin! - element-padding - element-set-padding! - element-border - element-set-border! - element-border-top - element-set-border-top! - element-border-bottom - element-set-border-bottom! - element-border-left - element-set-border-left! - element-border-right - element-set-border-right! - element-border-color - element-set-border-color! - element-border-width - element-set-border-width! - element-border-style - element-set-border-style! - element-border-top-style - element-set-border-top-style! - element-border-bottom-style - element-set-border-bottom-style! - element-border-left-style - element-set-border-left-style! - element-border-right-style - element-set-border-right-style! - element-style-float - element-set-style-float! - element-clear - element-set-clear! - element-display - element-set-display! - element-visibility - element-set-visibility! - element-list-style-type - element-set-list-style-type! - element-list-style-position - element-set-list-style-position! - element-list-style-image - element-set-list-style-image! - element-list-style - element-set-list-style! - element-position - element-overflow - element-set-overflow! - element-pagebreak-before - element-set-pagebreak-before! - element-pagebreak-after - element-set-pagebreak-after! - element-css-text - element-set-css-text! - element-cursor - element-set-cursor! - element-clip - element-set-clip! - element-filter - element-set-filter! - element-style-string - element-text-decoration-none - element-set-text-decoration-none! - element-text-decoration-underline - element-set-text-decoration-underline! - element-text-decoration-overline - element-set-text-decoration-overline! - element-text-decoration-linethrough - element-set-text-decoration-linethrough! - element-text-decoration-blink - element-set-text-decoration-blink! - element-pixel-top - element-set-pixel-top! - element-pixel-left - element-set-pixel-left! - element-pixel-width - element-set-pixel-width! - element-pixel-height - element-set-pixel-height! - element-pos-top - element-set-pos-top! - element-pos-left - element-set-pos-left! - element-pos-width - element-set-pos-width! - element-pos-height - element-set-pos-height! - element-font-size - element-set-font-size! - element-color - element-set-color! - element-background-color - element-set-background-color! - element-background-position-x - element-set-background-position-x! - element-background-position-y - element-set-background-position-y! - element-letter-spacing - element-set-letter-spacing! - element-vertical-align - element-set-vertical-align! - element-text-indent - element-set-text-indent! - element-line-height - element-set-line-height! - element-margin-top - element-set-margin-top! - element-margin-bottom - element-set-margin-bottom! - element-margin-left - element-set-margin-left! - element-margin-right - element-set-margin-right! - element-padding-top - element-set-padding-top! - element-padding-bottom - element-set-padding-bottom! - element-padding-left - element-set-padding-left! - element-padding-right - element-set-padding-right! - element-border-top-color - element-set-border-top-color! - element-border-bottom-color - element-set-border-bottom-color! - element-border-left-color - element-set-border-left-color! - element-border-right-color - element-set-border-right-color! - element-border-top-width - element-set-border-top-width! - element-border-bottom-width - element-set-border-bottom-width! - element-border-left-width - element-set-border-left-width! - element-border-right-width - element-set-border-right-width! - element-width - element-set-width! - element-height - element-set-height! - element-top - element-set-top! - element-left - element-set-left! - element-z-index - element-set-z-index! - event? - get-event - event-tag - event-id - event-from-tag - event-from-id - event-to-tag - event-to-id - event-keycode - event-shiftkey - event-ctrlkey - event-altkey - event-x - event-y - event-keypress? - event-keydown? - event-keyup? - event-mousedown? - event-mousemove? - event-mouseover? - event-mouseout? - event-mouseup? - event-click? - event-dblclick? - event-error? - block-until-event - process-win-events - release-type-table - com-omit - %%initialize-dotnet-runtime) +(define-syntax provide-dummy + (syntax-rules () + [(_ id) (begin + (provide id) + (define id (false/thwart-optimization)))] + [(_ id ...) (begin (provide-dummy id) ...)])) - (error "mxmain.rkt: you seem to be missing mxmain.dll; you need to build MysterX in plt\\src\\mysterx\\") +(define false/thwart-optimization #f) +(set! false/thwart-optimization (lambda () #f)) - (define mx-version #f) - (define block-while-browsers #f) - (define com-invoke #f) - (define com-set-property! #f) - (define com-get-property #f) - (define com-get-properties #f) - (define com-set-properties #f) - (define com-methods #f) - (define com-events #f) - (define com-method-type #f) - (define com-get-property-type #f) - (define com-set-property-type #f) - (define com-event-type #f) - (define com-help #f) - (define com-object-type #f) - (define com-is-a? #f) - (define com-currency? #f) - (define com-date? #f) - (define com-date->date #f) - (define date->com-date #f) - (define com-scode? #f) - (define com-scode->number #f) - (define number->com-scode #f) - (define com-currency->number #f) - (define number->com-currency #f) - (define com-object? #f) - (define com-iunknown? #f) - (define com-register-event-handler #f) - (define com-unregister-event-handler #f) - (define com-all-coclasses #f) - (define com-all-controls #f) - (define coclass->html #f) - (define progid->html #f) - (define cocreate-instance-from-coclass #f) - (define cocreate-instance-from-progid #f) - (define com-get-active-object-from-coclass #f) - (define coclass #f) - (define progid #f) - (define set-coclass! #f) - (define set-coclass-from-progid! #f) - (define com-object-eq? #f) - (define com-register-object #f) - (define com-release-object #f) - (define com-add-ref #f) - (define com-ref-count #f) - (define com-terminate #f) - (define make-browser #f) - (define browser-show #f) - (define navigate #f) - (define go-back #f) - (define go-forward #f) - (define refresh #f) - (define iconize #f) - (define restore #f) - (define current-url #f) - (define register-navigate-handler #f) - (define current-document #f) - (define print-document #f) - (define document? #f) - (define document-title #f) - (define document-insert-html #f) - (define document-append-html #f) - (define document-replace-html #f) - (define document-find-element #f) - (define document-find-element-by-id-or-name #f) - (define document-elements-with-tag #f) - (define document-objects #f) - (define element-insert-html #f) - (define element-append-html #f) - (define element-insert-text #f) - (define element-append-text #f) - (define element-replace-html #f) - (define element-get-html #f) - (define element-get-text #f) - (define element-focus #f) - (define element-selection #f) - (define element-set-selection! #f) - (define element-attribute #f) - (define element-set-attribute! #f) - (define element-click #f) - (define element-tag #f) - (define element-font-family #f) - (define element-set-font-family! #f) - (define element-font-style #f) - (define element-set-font-style! #f) - (define element-font-variant #f) - (define element-set-font-variant! #f) - (define element-font-weight #f) - (define element-set-font-weight! #f) - (define element-font #f) - (define element-set-font! #f) - (define element-background #f) - (define element-set-background! #f) - (define element-background-attachment #f) - (define element-set-background-attachment! #f) - (define element-background-image #f) - (define element-set-background-image! #f) - (define element-background-repeat #f) - (define element-set-background-repeat! #f) - (define element-background-position #f) - (define element-set-background-position! #f) - (define element-text-decoration #f) - (define element-set-text-decoration! #f) - (define element-text-transform #f) - (define element-set-text-transform! #f) - (define element-text-align #f) - (define element-set-text-align! #f) - (define element-margin #f) - (define element-set-margin! #f) - (define element-padding #f) - (define element-set-padding! #f) - (define element-border #f) - (define element-set-border! #f) - (define element-border-top #f) - (define element-set-border-top! #f) - (define element-border-bottom #f) - (define element-set-border-bottom! #f) - (define element-border-left #f) - (define element-set-border-left! #f) - (define element-border-right #f) - (define element-set-border-right! #f) - (define element-border-color #f) - (define element-set-border-color! #f) - (define element-border-width #f) - (define element-set-border-width! #f) - (define element-border-style #f) - (define element-set-border-style! #f) - (define element-border-top-style #f) - (define element-set-border-top-style! #f) - (define element-border-bottom-style #f) - (define element-set-border-bottom-style! #f) - (define element-border-left-style #f) - (define element-set-border-left-style! #f) - (define element-border-right-style #f) - (define element-set-border-right-style! #f) - (define element-style-float #f) - (define element-set-style-float! #f) - (define element-clear #f) - (define element-set-clear! #f) - (define element-display #f) - (define element-set-display! #f) - (define element-visibility #f) - (define element-set-visibility! #f) - (define element-list-style-type #f) - (define element-set-list-style-type! #f) - (define element-list-style-position #f) - (define element-set-list-style-position! #f) - (define element-list-style-image #f) - (define element-set-list-style-image! #f) - (define element-list-style #f) - (define element-set-list-style! #f) - (define element-position #f) - (define element-overflow #f) - (define element-set-overflow! #f) - (define element-pagebreak-before #f) - (define element-set-pagebreak-before! #f) - (define element-pagebreak-after #f) - (define element-set-pagebreak-after! #f) - (define element-css-text #f) - (define element-set-css-text! #f) - (define element-cursor #f) - (define element-set-cursor! #f) - (define element-clip #f) - (define element-set-clip! #f) - (define element-filter #f) - (define element-set-filter! #f) - (define element-style-string #f) - (define element-text-decoration-none #f) - (define element-set-text-decoration-none! #f) - (define element-text-decoration-underline #f) - (define element-set-text-decoration-underline! #f) - (define element-text-decoration-overline #f) - (define element-set-text-decoration-overline! #f) - (define element-text-decoration-linethrough #f) - (define element-set-text-decoration-linethrough! #f) - (define element-text-decoration-blink #f) - (define element-set-text-decoration-blink! #f) - (define element-pixel-top #f) - (define element-set-pixel-top! #f) - (define element-pixel-left #f) - (define element-set-pixel-left! #f) - (define element-pixel-width #f) - (define element-set-pixel-width! #f) - (define element-pixel-height #f) - (define element-set-pixel-height! #f) - (define element-pos-top #f) - (define element-set-pos-top! #f) - (define element-pos-left #f) - (define element-set-pos-left! #f) - (define element-pos-width #f) - (define element-set-pos-width! #f) - (define element-pos-height #f) - (define element-set-pos-height! #f) - (define element-font-size #f) - (define element-set-font-size! #f) - (define element-color #f) - (define element-set-color! #f) - (define element-background-color #f) - (define element-set-background-color! #f) - (define element-background-position-x #f) - (define element-set-background-position-x! #f) - (define element-background-position-y #f) - (define element-set-background-position-y! #f) - (define element-letter-spacing #f) - (define element-set-letter-spacing! #f) - (define element-vertical-align #f) - (define element-set-vertical-align! #f) - (define element-text-indent #f) - (define element-set-text-indent! #f) - (define element-line-height #f) - (define element-set-line-height! #f) - (define element-margin-top #f) - (define element-set-margin-top! #f) - (define element-margin-bottom #f) - (define element-set-margin-bottom! #f) - (define element-margin-left #f) - (define element-set-margin-left! #f) - (define element-margin-right #f) - (define element-set-margin-right! #f) - (define element-padding-top #f) - (define element-set-padding-top! #f) - (define element-padding-bottom #f) - (define element-set-padding-bottom! #f) - (define element-padding-left #f) - (define element-set-padding-left! #f) - (define element-padding-right #f) - (define element-set-padding-right! #f) - (define element-border-top-color #f) - (define element-set-border-top-color! #f) - (define element-border-bottom-color #f) - (define element-set-border-bottom-color! #f) - (define element-border-left-color #f) - (define element-set-border-left-color! #f) - (define element-border-right-color #f) - (define element-set-border-right-color! #f) - (define element-border-top-width #f) - (define element-set-border-top-width! #f) - (define element-border-bottom-width #f) - (define element-set-border-bottom-width! #f) - (define element-border-left-width #f) - (define element-set-border-left-width! #f) - (define element-border-right-width #f) - (define element-set-border-right-width! #f) - (define element-width #f) - (define element-set-width! #f) - (define element-height #f) - (define element-set-height! #f) - (define element-top #f) - (define element-set-top! #f) - (define element-left #f) - (define element-set-left! #f) - (define element-z-index #f) - (define element-set-z-index! #f) - (define event? #f) - (define get-event #f) - (define event-tag #f) - (define event-id #f) - (define event-from-tag #f) - (define event-from-id #f) - (define event-to-tag #f) - (define event-to-id #f) - (define event-keycode #f) - (define event-shiftkey #f) - (define event-ctrlkey #f) - (define event-altkey #f) - (define event-x #f) - (define event-y #f) - (define event-keypress? #f) - (define event-keydown? #f) - (define event-keyup? #f) - (define event-mousedown? #f) - (define event-mousemove? #f) - (define event-mouseover? #f) - (define event-mouseout? #f) - (define event-mouseup? #f) - (define event-click? #f) - (define event-dblclick? #f) - (define event-error? #f) - (define block-until-event #f) - (define process-win-events #f) - (define release-type-table #f) - (define com-omit #f) - (define %%initialize-dotnet-runtime #f)) +;; dummy entries to make Setup happy; +;; these are the names defined in mxPrims[] in src/mysterx.cxx + +(provide-dummy + mx-version + block-while-browsers + com-invoke + com-set-property! + com-get-property + com-get-properties + com-set-properties + com-methods + com-events + com-method-type + com-get-property-type + com-set-property-type + com-event-type + com-help + com-object-type + com-is-a? + com-currency? + com-date? + com-date->date + date->com-date + com-scode? + com-scode->number + number->com-scode + com-currency->number + number->com-currency + com-object? + com-iunknown? + com-register-event-handler + com-unregister-event-handler + com-all-coclasses + com-all-controls + coclass->html + progid->html + cocreate-instance-from-coclass + cocreate-instance-from-progid + com-get-active-object-from-coclass + coclass + progid + set-coclass! + set-coclass-from-progid! + com-object-eq? + com-register-object + com-release-object + com-add-ref + com-ref-count + com-terminate + make-browser + browser-show + navigate + go-back + go-forward + refresh + iconize + restore + current-url + register-navigate-handler + current-document + print-document + document? + document-title + document-insert-html + document-append-html + document-replace-html + document-find-element + document-find-element-by-id-or-name + document-elements-with-tag + document-objects + element-insert-html + element-append-html + element-insert-text + element-append-text + element-replace-html + element-get-html + element-get-text + element-focus + element-selection + element-set-selection! + element-attribute + element-set-attribute! + element-click + element-tag + element-font-family + element-set-font-family! + element-font-style + element-set-font-style! + element-font-variant + element-set-font-variant! + element-font-weight + element-set-font-weight! + element-font + element-set-font! + element-background + element-set-background! + element-background-attachment + element-set-background-attachment! + element-background-image + element-set-background-image! + element-background-repeat + element-set-background-repeat! + element-background-position + element-set-background-position! + element-text-decoration + element-set-text-decoration! + element-text-transform + element-set-text-transform! + element-text-align + element-set-text-align! + element-margin + element-set-margin! + element-padding + element-set-padding! + element-border + element-set-border! + element-border-top + element-set-border-top! + element-border-bottom + element-set-border-bottom! + element-border-left + element-set-border-left! + element-border-right + element-set-border-right! + element-border-color + element-set-border-color! + element-border-width + element-set-border-width! + element-border-style + element-set-border-style! + element-border-top-style + element-set-border-top-style! + element-border-bottom-style + element-set-border-bottom-style! + element-border-left-style + element-set-border-left-style! + element-border-right-style + element-set-border-right-style! + element-style-float + element-set-style-float! + element-clear + element-set-clear! + element-display + element-set-display! + element-visibility + element-set-visibility! + element-list-style-type + element-set-list-style-type! + element-list-style-position + element-set-list-style-position! + element-list-style-image + element-set-list-style-image! + element-list-style + element-set-list-style! + element-position + element-overflow + element-set-overflow! + element-pagebreak-before + element-set-pagebreak-before! + element-pagebreak-after + element-set-pagebreak-after! + element-css-text + element-set-css-text! + element-cursor + element-set-cursor! + element-clip + element-set-clip! + element-filter + element-set-filter! + element-style-string + element-text-decoration-none + element-set-text-decoration-none! + element-text-decoration-underline + element-set-text-decoration-underline! + element-text-decoration-overline + element-set-text-decoration-overline! + element-text-decoration-linethrough + element-set-text-decoration-linethrough! + element-text-decoration-blink + element-set-text-decoration-blink! + element-pixel-top + element-set-pixel-top! + element-pixel-left + element-set-pixel-left! + element-pixel-width + element-set-pixel-width! + element-pixel-height + element-set-pixel-height! + element-pos-top + element-set-pos-top! + element-pos-left + element-set-pos-left! + element-pos-width + element-set-pos-width! + element-pos-height + element-set-pos-height! + element-font-size + element-set-font-size! + element-color + element-set-color! + element-background-color + element-set-background-color! + element-background-position-x + element-set-background-position-x! + element-background-position-y + element-set-background-position-y! + element-letter-spacing + element-set-letter-spacing! + element-vertical-align + element-set-vertical-align! + element-text-indent + element-set-text-indent! + element-line-height + element-set-line-height! + element-margin-top + element-set-margin-top! + element-margin-bottom + element-set-margin-bottom! + element-margin-left + element-set-margin-left! + element-margin-right + element-set-margin-right! + element-padding-top + element-set-padding-top! + element-padding-bottom + element-set-padding-bottom! + element-padding-left + element-set-padding-left! + element-padding-right + element-set-padding-right! + element-border-top-color + element-set-border-top-color! + element-border-bottom-color + element-set-border-bottom-color! + element-border-left-color + element-set-border-left-color! + element-border-right-color + element-set-border-right-color! + element-border-top-width + element-set-border-top-width! + element-border-bottom-width + element-set-border-bottom-width! + element-border-left-width + element-set-border-left-width! + element-border-right-width + element-set-border-right-width! + element-width + element-set-width! + element-height + element-set-height! + element-top + element-set-top! + element-left + element-set-left! + element-z-index + element-set-z-index! + event? + get-event + event-tag + event-id + event-from-tag + event-from-id + event-to-tag + event-to-id + event-keycode + event-shiftkey + event-ctrlkey + event-altkey + event-x + event-y + event-keypress? + event-keydown? + event-keyup? + event-mousedown? + event-mousemove? + event-mouseover? + event-mouseout? + event-mouseup? + event-click? + event-dblclick? + event-error? + block-until-event + process-win-events + release-type-table + com-omit + %%initialize-dotnet-runtime) diff --git a/collects/net/unihead.rkt b/collects/net/unihead.rkt index f7a99e9e7d..7dd39246d8 100644 --- a/collects/net/unihead.rkt +++ b/collects/net/unihead.rkt @@ -1,49 +1,77 @@ #lang racket/base -(require net/base64 net/qp racket/string) +(require net/base64 net/qp) (provide encode-for-header decode-for-header generalize-encoding) -(define re:ascii #rx"^[\u0-\u7F]*$") +(define re:non-ascii #rx"[^\u0-\u7F]") (define (encode-for-header s) - (if (regexp-match? re:ascii s) - s - (let ([l (regexp-split #rx"\r\n" s)]) - (apply string-append - (map encode-line-for-header l))))) + (cond [(not (regexp-match? re:non-ascii s)) s] + [(not (regexp-match? #rx"\r\n" s)) (encode-line-for-header s)] ; speed + [else (regexp-replace* #rx"[^\r\n]+" s encode-line-for-header)])) + +;; Note: the following two encoder wrappers remove newlines from the +;; encoded strings. This avoids producing invalid strings, but it's not +;; complete: rfc2047 (section 2) specifies that encoded words should not +;; be longer than 75 characters, and longer words should be split for +;; encoding with a separator of CRLF SPACE between them. The problem is +;; that doing this properly requires changing the encoders to get a +;; length limit and have them return also the leftover unencoded string. +;; Instead of doing all of that, do something simpler: if the string to +;; be encoded is longer than 70 characters, then split it. (This is +;; done in `encode-line-for-header' below.) It's possible to get longer +;; encodings with this, but it seems that sendmail's limit on line +;; lengths is sufficiently larger that it works fine in practice. (BTW, +;; when sendmail gets lines that are too long it splits them with the +;; dreaded "!\n ", and it looks like there is no sane way to avoid that +;; behavior -- so splitting the input is needed.) + +(define (base64-encode-header s) + (regexp-replace* #rx#"[\r\n]+" (base64-encode s) #"")) + +(define (qp-encode-header s) + ;; rfc2047 (section 4.2) calls this "Q encoding", which is different + ;; from the usual QP encoding: encode underlines and question marks, + ;; and replace spaces by underlines; also remove soft-newlines. + (regexp-replace* #rx#"[ ?_]" + (regexp-replace* #rx#"=\r?\n" (qp-encode s) #"") + (λ (b) + (case (bytes-ref b 0) + [(32) #"_"] ; " " + [(63) #"=3F"] ; "?" + [(95) #"=5F"] ; "_" + [else (error 'qp-encode-header "internal error")])))) (define (encode-line-for-header s) - (define (loop s string->bytes charset encode encoding) - ;; Find ASCII (and no "=") prefix before a space - (let ([m (regexp-match #rx"^([\u0-\u3c\u3e-\u7F]* )(.*)$" s)]) - (if m - (string-append - (cadr m) - (loop (caddr m) string->bytes charset encode encoding)) + (define (do-encode s string->bytes charset encode encoding) + (let loop ([s s]) + (cond + ;; Find ASCII (and no "=") prefix before a space + [(regexp-match #rx"^([\u0-\u3c\u3e-\u7F]* )(.*)$" s) + => (λ (m) (string-append (cadr m) (loop (caddr m))))] ;; Find ASCII (and no "=") suffix after a space - (let ([m (regexp-match #rx"^(.*?)( [\u0-\u3c\u3e-\u7F]*)$" s)]) - (if m - (string-append - (loop (cadr m) string->bytes charset encode encoding) - (caddr m)) - (format "=?~a?~a?~a?=" - charset encoding - (regexp-replace* #rx#"[\r\n]+$" - (encode (string->bytes s)) - #""))))))) + [(regexp-match #rx"^(.*?)( [\u0-\u3c\u3e-\u7F]*)$" s) + => (λ (m) (string-append (loop (cadr m)) (caddr m)))] + [else + ;; Split lines longer than 70 chars and re-assemble (see above + ;; comment). Note that the proper separator should use CRLF, + ;; but we're sending this to a sendmail process that will take + ;; care of that level. + (let loop ([bytes (string->bytes s)]) + (if ((bytes-length bytes) . > . 70) + (string-append (loop (subbytes bytes 0 70)) + "\n " + (loop (subbytes bytes 70))) + (format "=?~a?~a?~a?=" charset encoding (encode bytes))))]))) (cond - [(regexp-match? re:ascii s) - ;; ASCII - do nothing - s] + ;; ASCII - do nothing + [(not (regexp-match? re:non-ascii s)) s] + ;; Not Latin-1, so use UTF-8 [(regexp-match? #rx"[^\u0-\uFF]" s) - ;; Not Latin-1, so use UTF-8 - (loop s string->bytes/utf-8 "UTF-8" base64-encode "B")] + (do-encode s string->bytes/utf-8 "UTF-8" base64-encode-header "B")] + ;; use Latin-1 [else - ;; use Latin-1 - (loop s string->bytes/latin-1 "ISO-8859-1" - (lambda (s) - (regexp-replace #rx#" " (qp-encode s) #"_")) - "Q")])) + (do-encode s string->bytes/latin-1 "ISO-8859-1" qp-encode-header "Q")])) ;; ---------------------------------------- @@ -68,8 +96,7 @@ (if m (let ([s ((if (member (cadddr m) '(#"q" #"Q")) ;; quoted-printable, with special _ handling - (lambda (x) - (qp-decode (regexp-replace* #rx#"_" x #" "))) + (λ (x) (qp-decode (regexp-replace* #rx#"_" x #" "))) ;; base64: base64-decode) (cadddr (cdr m)))] diff --git a/collects/plot/compat.rkt b/collects/plot/compat.rkt index 43df706fef..e3d6c006b2 100644 --- a/collects/plot/compat.rkt +++ b/collects/plot/compat.rkt @@ -18,8 +18,6 @@ plot-foreground plot-background plot3d-angle plot3d-altitude)) "deprecated/renderers.rkt" - ;; Curve fitting - "deprecated/fit.rkt" ;; Miscellaneous "deprecated/math.rkt") @@ -31,9 +29,6 @@ contour shade surface) (only-doc-out (all-defined-out)) - ;; Curve fitting - (rename-out [fit-int fit]) - (struct-out fit-result) ;; Miscellaneous make-vec derivative gradient) diff --git a/collects/plot/deprecated/fit-low-level.rkt b/collects/plot/deprecated/fit-low-level.rkt deleted file mode 100644 index 82415aeb12..0000000000 --- a/collects/plot/deprecated/fit-low-level.rkt +++ /dev/null @@ -1,56 +0,0 @@ -(module fit-low-level racket/base - (require mzlib/foreign mzlib/runtime-path - (for-syntax racket/base)) - (unsafe!) - - (define-runtime-path libfit-path '(so "libfit")) - - (define libfit (ffi-lib libfit-path)) - - (define do-fit-int - (get-ffi-obj "do_fit" libfit - (_fun (func : (_fun _int _pointer -> _double)) - (val-num : _int = (length x-values)) - (x-values : (_list i _double*)) - (y-values : (_list i _double*)) - (z-values : (_list i _double*)) - (errors : (_list i _double*)) - (param-num : _int = (length params)) - (params : (_list i _double*)) - -> (_list o _double* param-num)))) - - (define (do-fit callback x-vals y-vals z-vals errors params) - (do-fit-int (lambda (argc argv) - (let ([args (cblock->list argv _double argc)]) - (apply callback args))) - x-vals y-vals z-vals errors params)) - - (define get-asym-error - (get-ffi-obj "get_asym_error" libfit - (_fun (len : _?) ; len is only used for list conversion - -> (_list o _double* len)))) - - (define get-asym-error-percent - (get-ffi-obj "get_asym_error_percent" libfit - (_fun (len : _?) ; len is only used for list conversion - -> (_list o _double* len)))) - - (define get-rms - (get-ffi-obj "get_rms" libfit - (_fun -> _double*))) - - (define get-varience - (get-ffi-obj "get_varience" libfit - (_fun -> _double*))) - - (define (fit-internal f-of-x-y x-vals y-vals z-vals err-vals params) - - (let* ([len (length params)] - [fit-result (do-fit f-of-x-y x-vals y-vals z-vals err-vals params)] - [asym-error (get-asym-error len)] - [asym-error-percent (get-asym-error-percent len)] - [rms (get-rms)] - [varience (get-varience)]) - (list fit-result asym-error asym-error-percent rms varience))) - - (provide fit-internal)) diff --git a/collects/plot/deprecated/fit.rkt b/collects/plot/deprecated/fit.rkt deleted file mode 100644 index 1308462011..0000000000 --- a/collects/plot/deprecated/fit.rkt +++ /dev/null @@ -1,57 +0,0 @@ -(module fit mzscheme - (require unstable/lazy-require - "math.rkt") - - ;; Require lazily so the rest of 'plot' still works without libfit: - (lazy-require ["fit-low-level.rkt" (fit-internal)]) - - ; a structure contain a the results of a curve-fit - (define-struct fit-result ( - rms - variance - names - final-params - std-error - std-error-percent - function - ) (make-inspector)) - - ; fit-int : (number* -> number) (list-of (symbol number)) (list-of (vector number [number] number number)) -> fit-result - (define (fit-int function guesses data) - (let* ((independent-vars (- (procedure-arity function) (length guesses))) - (f-of-x-y (cond - [(= 1 independent-vars) - (lambda (x y . rest) - (apply function x rest))] - [(= 2 independent-vars) - function] - [else - (error "Function provided is either not of one or two independent variables or the number of - guesses given is incorrect")])) - (x-vals (map vector-x data)) - (y-vals (if (= 1 independent-vars) - x-vals - (map vector-y data))) - (z-vals (if (= 1 independent-vars) - (map vector-y data) - (map vector-z data))) - (err-vals (if (= 1 independent-vars) - (map vector-z data) - (map (lambda (vec) (vector-ref vec 4)) data))) - (result (fit-internal f-of-x-y x-vals y-vals z-vals err-vals (map cadr guesses)))) - (if (null? result) - null - (begin - ;(display result) - (make-fit-result - (list-ref result 3) - (list-ref result 4) - (map car guesses) - (car result) - (cadr result) - (caddr result) - (lambda args (apply function(append args (car result))))))))) - - (provide fit-int - (struct fit-result (rms variance names final-params - std-error std-error-percent function)))) diff --git a/collects/plot/scribblings/compat.scrbl b/collects/plot/scribblings/compat.scrbl index 62693e7df8..07cac36fba 100644 --- a/collects/plot/scribblings/compat.scrbl +++ b/collects/plot/scribblings/compat.scrbl @@ -127,116 +127,6 @@ Returns @racket[#t] if @racket[v] is one of the following symbols, @; ---------------------------------------- -@section[#:tag "curve-fit"]{Curve Fitting} - -@define[fit-warning]{ -@para{ -@bold{Do not use the @(racket fit) function. It is going to be removed in Racket 5.2.1.} -It relies on old C code that nobody understands or is willing to maintain, and that is also slightly crashy. -}} - -@fit-warning - -Quite independent of plotting, and for reasons lost in the sands of time, -the @racketmodname[plot] library provides a non-linear, least-squares -fit algorithm to fit parameterized functions to given data. -The code that implements the algorithm is public -domain, and is used by the @tt{gnuplot} package. - -To fit a particular function to a curve: - -@itemize[ - - @item{Set up the independent and dependent variable data. The first - item in each vector is the independent variable, the second is the - result. The last item is the weight of the error; we can leave it - as @racket[1] since all the items weigh the same. - - @racketblock[ - (define data '(#(0 3 1) - #(1 5 1) - #(2 7 1) - #(3 9 1) - #(4 11 1))) - ] - } - - @item{Set up the function to be fitted using fit. This particular - function looks like a line. The independent variables must come - before the parameters. - - @racketblock[ - (define fit-fun - (lambda (x m b) (+ b (* m x)))) - ] - } - - @item{If possible, come up with some guesses for the values of the - parameters. The guesses can be left as one, but each parameter must - be named.} - - @item{Do the fit. - - @racketblock[ - (define fitted - (fit fit-fun - '((m 1) (b 1)) - data)) - ] - } - - @item{View the resulting parameters; for example, - - @racketblock[ - (fit-result-final-params fitted) - ] - - will produce @racketresultfont{(2.0 3.0)}. - } - - @item{For some visual feedback of the fit result, plot the function - with the new parameters. For convenience, the structure that is - returned by the fit command has already the function. - - @racketblock[ - (plot (mix (points data) - (line (fit-result-function fitted))) - #:y-max 15) - ]}] - -A more realistic example can be found in -@filepath{compat/tests/fit-demo-2.rkt} in the @filepath{plot} collection. - -@defproc[(fit [f (real? ... . -> . real?)] - [guess-list (list/c (list symbol? real?))] - [data (or/c (list-of (vector/c real? real? real?)) - (list-of (vector/c real? real? real? real?)))]) - fit-result?]{ - -@fit-warning - -Attempts to fit a @defterm{fittable function} to the data that is -given. The @racket[guess-list] should be a set of arguments and -values. The more accurate your initial guesses are, the more likely -the fit is to succeed; if there are no good values for the guesses, -leave them as @racket[1].} - -@defstruct[fit-result ([rms real?] - [variance real?] - [names (listof symbol?)] - [final-params (listof real?)] - [std-error (listof real?)] - [std-error-percent (listof real?)] - [function (real? ... . -> . real?)])]{ - -The @racket[params] field contains an associative list of the -parameters specified in @racket[fit] and their values. Note that the -values may not be correct if the fit failed to converge. For a visual -test, use the @racket[function] field to get the function with the -parameters in place and plot it along with the original data.} - -@; ---------------------------------------- - @section{Miscellaneous Functions} @defproc[(derivative [f (real? . -> . real?)] [h real? .000001]) diff --git a/collects/plot/scribblings/porting.scrbl b/collects/plot/scribblings/porting.scrbl index fcb576657d..644b5f7e48 100644 --- a/collects/plot/scribblings/porting.scrbl +++ b/collects/plot/scribblings/porting.scrbl @@ -18,6 +18,8 @@ The update from PLoT version 5.1.3 to 5.2 introduces a few incompatibilities: The argument change in @(racket plot3d) is similar. This should not affect most code because PLoT encourages regarding these data types as black boxes.} @item{The @(racket plot-extend) module no longer exists.} + @item{The @racket[fit] function and @racket[fit-result] functions have been removed.} + ] This section of the PLoT manual will help you port code written for PLoT 5.1.3 and earlier to the most recent PLoT. diff --git a/collects/plot/tests/fit-test-1.rkt b/collects/plot/tests/fit-test-1.rkt deleted file mode 100644 index 9e3f47ed72..0000000000 --- a/collects/plot/tests/fit-test-1.rkt +++ /dev/null @@ -1,1155 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0108 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 5.2.0.1 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 44 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -( - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 19 #"drscheme:sexp-snip\0" -0 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -( - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 33 #"(lib \"bullet-snip.ss\" \"browser\")\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 8 #"gb:core\0" -5 0 10 #"gb:canvas\0" -5 0 17 #"gb:editor-canvas\0" -5 0 10 #"gb:slider\0" -5 0 9 #"gb:gauge\0" -5 0 11 #"gb:listbox\0" -5 0 12 #"gb:radiobox\0" -5 0 10 #"gb:choice\0" -5 0 8 #"gb:text\0" -5 0 11 #"gb:message\0" -5 0 10 #"gb:button\0" -5 0 12 #"gb:checkbox\0" -5 0 18 #"gb:vertical-panel\0" -5 0 9 #"gb:panel\0" -5 0 20 #"gb:horizontal-panel\0" -5 0 33 #"(lib \"readable.ss\" \"guibuilder\")\0" -1 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 15 #"test-case-box%\0" -2 0 1 6 #"wxloc\0" - 0 0 129 0 1 #"\0" -0 75 1 #"\0" -0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 10 #"Monospace\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38 -#"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39 -#"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42 -#"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37 -#"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 37 -#"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 2 38 -#"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 --1 0 1 #"\0" -0 75 10 #"Monospace\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 0 -1 -1 0 1 #"\0" -0 75 1 #"\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 14 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 38 #"drscheme:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -31 #"drscheme:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 37 #"profj:syntax-colors:scheme:prim-type\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 38 #"profj:syntax-colors:scheme:identifier\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 34 -#"profj:syntax-colors:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:literal\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -33 #"profj:syntax-colors:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:default\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 37 -#"profj:syntax-colors:scheme:uncovered\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:covered\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 8 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 8 24 #"drscheme:text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 15 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 14 #"Html Standard\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 0 1 -#"\0" -0 75 1 #"\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 12 #"Courier New\0" -0.0 10 90 -1 90 -1 2 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 30 #"drscheme:check-syntax:keyword\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 39 #"drscheme:check-syntax:unbound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 37 #"drscheme:check-syntax:bound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:primitive\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 31 #"drscheme:check-syntax:constant\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:tail-call\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 27 #"drscheme:check-syntax:base\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 94 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 32 #"widget.rkt::browser-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 59 -#"macro-debugger/syntax-browser/properties color-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 99 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 190 190 190 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 255 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 107 142 35 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 100 149 237 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 65 105 225 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 70 130 180 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 47 79 79 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 139 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 75 0 130 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 160 32 240 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 250 128 114 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 184 134 11 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 128 128 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 169 169 169 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -228 225 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 255 0 0 224 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 224 -255 255 -1 -1 0 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 22 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 14 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 41 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 43 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 0 259 0 26 3 12 #"#lang racket" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 81 -( - #";; Originally a test for PLoT <= 5.1.3; keeping it to test backward " - #"compatibility" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 7 #"require" -0 0 4 3 1 #" " -0 0 14 3 4 #"plot" -0 0 4 29 1 #"\n" -0 0 4 3 9 #" " -0 0 22 3 1 #"(" -0 0 14 3 7 #"only-in" -0 0 4 3 1 #" " -0 0 14 3 11 #"plot/compat" -0 0 4 3 1 #" " -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 23 #"fit-result-final-params" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"build-list" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"build-list" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 20 3 1 #"3" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 20 3 4 #"1.32" -0 0 22 3 4 #"))))" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 3 #"fun" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 8 #"gues-fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 1 #"b" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 14 3 1 #"b" -0 0 22 3 4 #"))))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"params" -0 0 4 3 1 #" " -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 8 #"gues-fun" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 20 3 1 #"'" -0 0 22 3 2 #"((" -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"b" -0 0 4 3 1 #" " -0 0 20 3 1 #"1" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 1 #"\"" -0 0 19 3 41 #"The old plot library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 41 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 15 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1\220\b" - #"\2\0\0\0\17\335\241\233\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0\34\246IDATx\234\355" - #"\335\177l\24\347\235\307\361\357`<\266" - #"\261\301?\26\31\34\260!l\322\264D-\b\213P\34\\qR\2244\"\266r" - #"\215\200p\n\327H\204\234*\2614\204^\32\376H\252$:\216\220\204\22qm" - #"\223\266\27\225\360\207\23z\247b\23\21" - #"\235j\353\b\343\322\366\260O\220\23\341" - #"R\214S\212\335\340\22ls\30\212\327" - #"1s\177\fl\226\365\332k\357\316\372" - #"\331\347\331\367\353\17\264?\36\217\277\343" - #"a>~\236\3073\317Z\256\353\n\0\350`\212\352\2\0`\274\b,\0\332 " - #"\260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r" - #"\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0\332" - #" \260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240" - #"\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0" - #"\332 \260\0h\203\300\2\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2" - #"\240\r\2\v\2006\b,\0\332\310\254\300r\34g\341\302\2051/vuu\205" - #"B\241\342\342\342P(\324\335\335\255\244" - #"0\0\231 \203\2\313q\234\265k\327\236:u*\346\365\305\213\27\213HKK" - #"\213\210,Z\264HAe\0002\203\345" - #"\272\256\352\32n\250\251\251\331\271sgmmmtI===\301`p``" - #"\300{ZTT\324\331\331Y^^\256\250F\0*eP`y,\353\226\222\266" - #"l\331RPP\260}\373v\357\351\266m\333\6\a\aw\355\332\245" - #"\250:\0*ez`\305t\251b:\\\0\262\312T\325\5\244\312" -) 500 -( - #"\262\254\16\221;E2+w\1\243]\276|\271\250\250h\362\277o\246\367\260b" - #"\306\2001#\304\e\355\213\212\344\323O" - #"%\321\217/f\313\264\314\300\226\312\v" - #"\240\245\277-}\227\351\201\225p\322\335" - #"\262,\267\242B\332\333\245\242bB[\246e\6\266T^\0-\375m\351\273\f" - #"\272\254!\256Y\263f\345\347\347\207B" - #"\241\266\266\266P(\224\237\237\37\347O" - #"\204\323\247\313\345\313>~\323\274\274<-Z\216\237y{\224\246\28L\31." - #"\343\2k\344\205\243\307\217\37\27\221U" - #"\253V\211\310\211\23'\342|\215\337\201" - #"u\355\3325-Z\216\237y{\224\246\28L\31.\343\206\204\23eY\226\273" - #"r\245\374\340\a\262re\342\226\232\357" - #"l\f\363\366HL\334)\366\310G\31\327\303JFQ\221d\345\205\16Z\364\341" - #"'\312\274\2352o\217\0242\"\260\374" - #"\36\22\352B\213>\374D\231\267S\346\355\221B\4\26\0m\20X\0\264aD" - #"`\25\25\21X@60\"\260\246O\317\316Iw \333\230\22X\364\260\200," - #"@`\1\320\6\201\5@\e\332_\203kY\326J\221\37\210\334\237\233\e\16\207" - #"G6\260m{hh(\372\225\334QZ\2\30C\364\251\304\225\356\311\373\317\266" - #"\266\225\325\325\243eP8\34v]\327\373\371z\17H+ \t\321\247\222*&" - #"\4\26CB K\20X\0\264A`\1\320\206\21\2015m\232\374\365\257\242\371" - #"_\17\0$dD`M\231\"\371\371r\365\252\352:\0\244\227\21\201%\"\205" - #"\205r\345\212\352\"\0\244\27\201\5@\e\4\26\0m\20X\0\264A`\1\320" - #"\6\201\5@\e\4\26\0m\230\260Z\203\210\374L\244-'\347\215\317?\37\331" - #"\200\325\32\0_d\302j\rS\225|W\177\271\256+O=\365\304" - #"\355\267\307}7\222M\346}\236%0\231\242O%U50$\4" -) 500 -( - #"\240\r\2\v\2006\b,\0\332 \260\0h\203\300\2\240\r\2\v\2006L\t" - #"\254\242\">\374\0310\236)\201E\17\v\310\2\4\26\0m\20X\0\264A`" - #"\1\320\6\201\5@\e\246\4VA\201\\\273\306'}\1f3!\260,\313\262" - #"rr\256\f\17\307\375\244/\333\266-" - #"\313\362\356/\367\36\330\266=\3515\2\332\213>\225T1ey\31\21\2315K" - #"\256\\\221\302\302\230wY^\6\360\5\313\313\370\212i,\300t\4\26\0m\20" - #"X\0\264A`\1\320\6\201\5@\e\4\26\0m\30\24X\2540\3\230N\203" - #"\300r\34g\372\364\351\226e\5\2\201" - #"\326\326\326Q\333\321\303\2L\247A`" - #"\325\327\327\277\377\376\373\256\353\368p" - #"\240\256\256n\324v\4\26`:\r\2" - #"\253\277\277\177\305\212\25\"R[[\333\337\337?j;\2\v0\235\6\201UZ" - #"Z\32\b\4v\357\336\35\b\4\252\252\252FmG`\1\246\323\343^\302\336\336" - #"\336-[\266H\344\266\301\270\b,\300" - #"t\231\336\303r\34\307\275\325\310yw" - #"\357\16\362\277\333\270\261\341\347?\217," - #"\306\20\271\263<\"\3222\202e\e\200" - #"\204\342\236J\252d\372\2\6\245\245\245" - #"\a\17\36\364\346\260D\304q\234\372\372" - #"\372\276\276\276H\203/\326`hj\222\177\375Wil\34mS\254\326\0\370B" - #"\341\251\224\351=\254\t\340:,\300t\231\36X---\217>\372hKK\213" - #"\210477\257[\267\316{\34\asX\200\3512}\322}\311\222%\r\r\r" - #"uuu\227.]*..~\357\275\367\226,Y\22\277)\201\5\230.\323\3" - #"K\22^~\25A`\1\246\313\364!\341\4\20X\200\351\b,\0\3320(\260" - #"\370\244/\300t\6\5\326\224)2m\32W6\0\0063(\260D" - #"d\306\f\371\277\377S]\4\200t1+\260\246O\227\313\227U\27\1" -) 500 -( - #" ]\314\n,zX\200\321\314\n,zX\200\321\314\n,zX\200\321L\b" - #"\254/\326\212\211\327\303\212,\216qKK\0\23\24}*\251bB`y\353d" - #"\205\303\341\270\201\25\16\207\275\6\267\264" - #"\0040A\321\247\222*&\4\326\27\30\22\2F3+\260\230t\a\214F`\1" - #"\320\206Y\201\305\220\0200\232Y\201E\17\v0\232Y\201E\17\v0\232Y\201" - #"E\17\v0\232Y\201E\17\v0\232Y\201E\17\v0\232Y\201E\17\v0" - #"\232Y\201UX(W\257\312\365\353\252\353\0\220\26f\5\226\267J2\37E\1" - #"\30\312\204\300\272e\r\206\21\243BVk\0|\221\t\2535h\360A\252\t\335" - #"r\373\370\210y\367\310\332\f\226e\251" - #"\275\321\34\320Z\364\251\244\252\6\23z" - #"X\267`\336\0350\227q\201\305\225\r\200\271\214\v,zX\200\271\214\v,z" - #"X\200\271\b,\0\3320.\260\30\22\2\3462.\260\350a\1\346\"\260\0h" - #"\303\270\300bH\b\230\313\270\300\242\207" - #"\5\230\313\270\300\242\207\5\230\313\270\300" - #"\242\207\5\230\313\270\300\242\207\5\230\313" - #"\204\300\272e\321\230\21=,\226\227\1" - #"|\301\3622\376\270e\321\230\21=,\226\227\1|\301\3622iPX(\177\375" - #"+\253$\3F2.\260\246L\221\242\"\246\261\0#\31\27X\"RZ*}" - #"}\252\213\0\340?\23\3\253\244D\372\373U\27\1\300\177&\6\26=,\300P" - #"&\6\26=,\300P&\6\26=,\300Pz\4\226\3438\201@ \20\b\264" - #"\266\266&nM\17\v0\224\6\27\216:\216\263v\355\332\306\306F\327u\237y" - #"\346\231\243G\217&\370\2\2\v0\224\6\201U__\177\360\340\301\25+V\210" - #"H\342\264\22\221\322R9u*\355e\1\230t\32\f\t\373\373" - #"\373]\327\235?\177~(\24\352\356\356N\374\5\364\260\0Ci\20" -) 500 -( - #"X\"\262v\355\332\327^{MD\26-Z\224\2705\223\356\200\2414\270\37\330" - #"\262,\307q\274!aiiidx\30y7\246}\355\324\251G\226.\265\333" - #"\332\206\206\206\306\336rnnn\344~N\0q\331\266=\362TR\225\ez\4" - #"V\244\310\335\273w\277\376\372\353\237|\362I\334wo8uJ\36yD>\372" - #"h\214\355\0H\232\302SI\203!aIII\344j\206\27^xa\337\276}" - #"\t\276\200!!`(\r\376J\330\324\324\264f\315\232={\366\34>|8'" - #"''z<\30\37\223\356\200\2414\350" - #"a\325\326\326\276\373\356\273[\267n\25" - #"\221\23'N$\376\202\374|\21\221k" - #"\327\322\\\27\200\311\246\375\264N\374\341\364m\267I{\273TT$n\t`\202" - #"\230\303\362\e\243B\300D\206\6\26\363" - #"\356\200\211\f\r,zX\200\211\f\r,zX\200\211\f\r,zX\200\211\f" - #"\r,zX\200\211\f\r,zX\200\211\b,\0\33204\260\30\22\2&2" - #"!\260,\313\262,\313\266\355/^\212" - #"\352a\331\266\3555\210\337\22\300\370D" - #"\237J\252hp\363sBq\356\22\210\352aEV\274\342\326\34 \25\321\247\222" - #"\252\32L\350a\305\301\34\26`\"C\3\2139,\300D\206\6\326\214\03120" - #" \303\303\252\353\0\340'C\3k\312\24\231>\235N\26`\30C\3KD\2" - #"\1\271xQu\21\0\374D`\1\320\6\201\5@\e\4\26\0m\370\20X\216" - #"\343\324\324\324x\17\356\276\373\356\310G" - #"r)F`\1\306\361!\260\352\353\353" - #"w\356\334\331\323\323\263z\365\352\215\e" - #"7\256Y\263\213\300\2\214\343\303\335*\336-/\337\373\336\367,\313z" - #"\345\225W\34\307\251\257\257\357\233\254K\nF\275\341\346'?\221\343" - #"\307\345\3157\23\267\0040\21\nO%\337\356%|\343\2157:;" -) 500 -( - #";\375\332\232\17\350a\1\306\361aH" - #"XRR\262{\367\356\334\334\334\362\362" - #"r\307q\326\256]{\360\340\301\3247;~\361\327`\270\31X\254\326\0\370\"" - #"\23Vk\360!\260\232\232\232\32\32\32" - #"\274\220\372\376\367\277\277\177\377\376\304\237" - #"&\357+\327u]\327\215\334J~C \275\275\"\22\16\207\275\6\243\266\4" - #"0\16\321\247\222*\332O\353\214:\234>wN\226/\227\256\256\304-\1L\204" - #"\226\237\374\\VV\266`\301\2\21\t" - #"\6\203\326\255\202\301\240\177\25&\2139" - #",\3008\311O\272\317\2349\363\255\267" - #"\336\22\2213g\316\370W\217\177\246M" - #"\23\313\222\253We\3324\325\245\0\360" - #"G\362\201\365\207?\374\301\307:\322\242\254L.^$\260\0c\3700\351^]" - #"]\275\177\377\376\310\323\375\373\367WW" - #"W\247\276Y\0370*\4\314\342\303u" - #"X\277\370\305/\352\353\353\177\363\233\337\274\366\332k[\267nmjjjjj" - #"J}\263> \260\0\263\370\20X_\375\352W\217\35;\366\360\303\17\337v\333" - #"mw\335uW[[[ \20H}\263> \260\0\263\370\263Z\303\300\300\300" - #"\245K\227\212\213\213\373\373\373/_\276\354\3136}@`\1f\361!\260>\370" - #"\340\203e\313\226=\361\304\23\247O\237" - #"~\342\211'\226-[\366\301\a\37\244\276Y\37\20X\200Y|\30\22>\375\364" - #"\323{\366\354Y\263f\215\210|\367\273" - #"\337\255\250\250x\372\351\247\333\333\333S" - #"\337r\252\2\19wNu\21\0|\243\375\305\337c]t\273w\257\264\264\310" - #"\333o'n\t`\334\264\274\322=b\316\2349\231x\245\273\334\274\16\v\200)" - #"|\b\254\253W\257:\216\343\335\25y" - #"\344\310\221\212\212\212\275{\367\246\276" - #"Y\0370\207\5\230\305\267\5\374\"O'\177\1?\357" - #"Annn\3542\f\37\177,\17=d\237=;4" -) 500 -( - #"4\24\375r\234\226\0\22\261m;r*i\277\200\237B\243\376\354\2\1\271x" - #"1\222M\314a\1\251\210>\225T\325" - #"\340\317\2~\221E\334\225,\3407\252" - #"\322R>\260\0360\211\17=\254\246\246" - #"\246\207\36z\350\322\245K\"R\\\\" - #"\374\336{\357M\362\2~\243\312\311\221" - #"@@\376\362\27\251\250P]\n\0\37" - #"\370\20X\265\265\265\375\375\375\251o'" - #"-f\317\226O?%\260\0003\230\373A\252\236\212\n9\177^u\21\0\374a" - #"z`\315\236M`\1\306\310\202\300\372\364S\325E\0\360G\26\4VO\217\352" - #"\"\0\370C\233\300\352\350\350(((\230\360\227UT\320\303\2\214\241G`\r" - #"\17\17\257_\277\376\332\265k\23\376J" - #"\346\260\0\203$\37XK\227.\235\264" - #"{\6\177\370\303\37\26\27\27'\363\225" - #"\314a\1\6I\376n\225\323\247O\257" - #"Y\263\346\366\333o\177\353\255\267JJJ\374-+\332G\37}\264r\345\312c" - #"\307\216\315\237?\177d\265\tn\270\31" - #"\30\220\331\263e` qK\0\343\243" - #"\345\3622w\336y\347\357~\367\273\312" - #"\312\312e\313\226\35?~\334\307\232\242" - #"\r\17\17o\330\260\341\245\227^\2327o^2__T$\226%\231\263j3" - #"\200\24\2444\207\225\227\227\367\372\353\257" - #"?\362\310#K\227.M\323zX\336`\360\311'\237\34\243M\314j\\\266m" - #"\213\210m\333\336\323\216\201\201/\315\230" - #"\341\335\256\31\267%\2001DN\245\b" - #"\205\305\244\332\265knn~\374\361\307" - #"\233\232\232\226,Y\342WM\321\252\252" - #"\252\316\335\272\314\361\202\5\v\242?k" - #":q\357\264\266V\376\351\237\344\e\337" - #"`H\b\370B\341\251\224\322\275\204\351" - #"N+\21\371\323\237\376\24y\234\344\217\211\273s\0S$?$\234\204\264\362" - #"\aW6\0\246H>\260\236\177\376\371w\336yg2\323j\341\302\205\311|\31" -) 500 -( - #"\201\5\230\"\371!\341\321\243G}\254" - #"c\335\327\327\247\272\34\0" - #"I2!\260,\313\262,\313\266\355\270" - #"\357z\257[\226uF\344\201;\357\214\274\2`Bl\333\366\3165\2055\230\20" - #"X\256\353\272\256;\332\2121\336\353\256" - #"\353v\212\374\307O~\22y\5\300\204\204\303a\357\\SX\203\t\201\225Pi" - #"i\251eY\237\210\274\362\235\357TUU\251.\a@\222\262\"\260z{{\275" - #"\36\326?>\362\310\331\263gU\227\3 IY\21X\236N\21\351\354T]\5" - #"\200\344\21X\0\264\221E\201\325+\"\226%\27/\252.\4@\222\262" - #"(\260DD\26,\240\223\5\350+\313\2+\30$\260\0}eY`" -) 500 -( - #"\321\303\2t\226e\201u\373\355\4\26\240\257,\v,zX\200\316\b,\0\332" - #"\310\216\317%\214\264\f\207e\306\f\271tI\270\377\31H\26\237K8Yrs" - #"\245\252J::T\327\1 \31&\364\260\274\a\271\271\271q\227a\260m{h" - #"h(\362\264Qd_N\316/?\377|\222\352\3L\21}*\251\312\215\251J" - #"\276\253\277\306\376\331ER\354F?\366\231g\352Yt\24\230\270\350SIU\r" - #"Y6$\24\221\273\356\222\217?V]\4\200dde`\375\357\377\252.\2@" - #"2\262/\260\276\374ezX\200\246\262/\260f\316\224)S\344/\177Q]\a" - #"\200\t\313\276\300\22\246\261\0]ek`1\215\5h([\3\213\36\26\240!" - #"\r\2\313q\234@ `YV \20hmm\365a\213\314\273\3z\322 \260" - #"\352\353\353\e\e\e]\327=p\340@]]\235\17[\244\207\5\350I\203[s" - #"\356\276\373\356\223'Oz\217G\336u" - #"9\261\233\237\275\226\341\260\224\226Jo\257\344\345\371],`>n~\36K$" - #"\255zzz\n\v\v}\330\242m\313W\276\"\37~\350\303\246\0L\"\r\2" - #"+b\307\216\35\2337o\366g[\325" - #"\325\322\326\346\317\246\0L\26\r\206\204" - #"\36\307qV\257^\375\341\207\37\226\227" - #"\227G\277>\362>Lo\331\206\230E\32b<)r\217\310wFY\340\1@" - #"D\334S\211!\341X\232\233\233\327\255" - #"[w\350\320\241\230\264\362\270\267\3622" - #"(\34\16\307\274\36\335\362\315\266\266\r\213\27\223V@BqO%U4\350a" - #"577?\376\370\343MMMK\226,\31\371n2\223\356\"\22\16KY\231" - #"|\366\231\344\347\373X*\220\r\230t" - #"\37\325\330i\225<\333\226/\177Y\376\347\177\374\334&\2004\313" - #"\364\300\332\270qcwwwuu\265uS0\30\364g\323\314\273" -) 500 -( - #"\3\272\311\364\25G?\371\344\223tm" - #"\272\272Z\376\353\277\322\265q\0i\220" - #"\351=\2544\252\256\226\366v\325E\0" - #"\230\0\r&\335\307\226\344\244\273\210\f\16J \27.HAA\272\212\3L" - #"\304\244\273\nyy\262p\241\34;\246" - #"\272\16\0\343\225\305\201%\"\313\227\313" - #"o\177\253\272\b\0\343E`\21X\2006\b,\2\v\320Fv\a\326\274y\222" - #"\233+\235\235\252\353\0000.\331\35X\"\262l\31\235,@\27Y\37X_\377" - #":\201\5\350\302\204\300\362n\331\261m" - #";\356\273\266m{\r\342\267d\32\v\30\237\350SI\225,\276p\324s\365\252" - #"\314\232%\347\317\213/k\231\2Y\200\vG\325\2316Mjj\244\271Yu\35" - #"\0\22\313\372\300\22\221\a\37\224\367\337" - #"W]\4\200\304\262~H(\"\37\177,\367\335'\347\316\371\\\31`(\206\204" - #"J\335u\227\344\345\311\315\317\346\1\220" - #"\261\b,\21\21y\340\1F\205@\346#\260D\204i,@\17\314a\211\210\310" - #"\300\200\314\235+\347\316\311\364\351~\26" - #"\a\230\2109,\325\212\212\344\276\373\244" - #"\261Qu\35\0\306B`\335\264z\265" - #"\374\362\227\252\213\0000\26\206\2047]" - #"\275*\225\225\322\331)\305\305\276\25\a" - #"\230\210!a\6\2306M\376\346o\344\340A\325u\0\30\25\201\25\205Q!\220" - #"\331L\30\22z\17rss\303\341\360\310\6\266m\17\r\rE\2772ZK\271" - #"|Y\252\252\244\243C\2\2014T\n\350-\372TbH\230<\327u]\327\215" - #"\237A\"\341p\330k\220\260\245L\237" - #".\365\365\362\326[\351+\25\320W\364" - #"\251\244\212\t=,\177&\335=\255\255" - #"\362\370\343r\372\264(]\364\a\310dL\272g\214\25+\244\240@\16\37V]" - #"\a\2008\350a\335\242\254\254\354\357\373\372\276.\262" - #"N\244\264\264\264\267\267\327\217\32\1\243(\354a\21X" -) 500 -( - #"#\332|\366\231|\351Kr\352\2245k\226\356?\34 \35\30\22f\222@@" - #"\236|Rv\354P]\a\200X\364\260\342\265\271xQ\276\362\2259\27.tk" - #"\376\303\1\322Aa\17k\252\222\357\232\261JKK\275\v\273\376Y\344\5Vn" - #"\0002\f\201u\213/f\331{z\344k_\2233g$\30TZ\21\200/0" - #"\2075\212Y\263\344\205\27\344\261\307dxXu)\0n \260F\367\17\377 " - #"3f\310\356\335\252\353\0p\3\223\356c:{V\226.\225\303\207e\341\302d" - #"\212\3L\304e\r\231j\336" - #"\313\372\222eY\226UVV\246\272, +0\207\225\244J\313:\267i\223\274" - #"\363\216\374\352WVm\255\356?F`\374Xq4y\252\2\353\306\326\376\373\277" - #"\245\276\376\276\356\356f\25?F\333\266" - #"'vA\231\16\314\333)\363\366\210I\367\261tuu\205B\241\342\342\342P(" - #"\324\235i3GK\226HC\303\277\213\210eI~\376$\317m\305\\\20k\6" - #"\363v\312\274=RH\203\300Z\274x" - #"\261\210\264\264\264\210\310\242E\213T\227" - #"s\203\267\324\237eY\3267\276\361\265\252*q]\351\350\20\21Y\274XZ[" - #"\243[\226\225\225Y71\333\5\244\"\323\207\204===\301`" - #"p``\300{ZTT\324\331\331Y^^\36i\220\216!\341\370" -) 500 -( - #"\373\360qZ:\216\324\325\311\245K\222" - #"\227'\e7\312\263\317Zs\347\272\256" - #"\353\265\34O\r\343\377\356\223\264G\223" - #"\330RL\334\251l\336#\337ez\17k\307\216\35\2337o\216<\r\205B;" - #"\322\377\361\20\343\357\303\307iY[+\375\375_t\270\202AWD\362\363w\r" - #"\r%\34-z}\261\241\241\241\204}" - #"1\257\245\210\214\263\345\370\267\251\252\245" - #"\30\272S\23\222\322\177\274Il\251P\246\367\260b\272T1\35.IO\17\313" - #"\377\17\2668w\356_*+7\345\345\311\340\340\250\355\362\362\376eppSW" - #"\227\327#\e{\313\336\273\321\377\352\336" - #"Ry\1i\332)\321\341\277h\372Z" - #"\372\316\2045\335\255q\177\254\274\252\226" - #"Ve\245\210\204\306H+\221\271\203\203" - #"\337\27\31\234;\327\25\21\313\362\376\35\255qt\e3Z*/ M;\25i" - #"?v\e\275Z\236\21\t\207\303\266m" - #"\217\247\261\2772\275\207\265m\333\266\301" - #"\301\301]\273vyO\267l\331RPP\260}\373\366H\3]~\325\214\377W" - #"q\346w\34\350a\321\303R\226\enf;\177\376|aaa\344iaaa" - #"OOOt\203\361\357B\346\267,-" - #"-\215\34\227\252\252\252\254j\251\274\200" - #"4\355\224\253\303\177\274\364\265\364]\246" - #"\367\260Dd\346\314\231\353\326\255\373\366" - #"\267\277\275w\357\336\206\206\206\317>\373" - #",\372\335t\374Z\310\317\317\277v\355" - #"Z\346\2674o\217\304\304\235\312\346=" - #"\362]\246\377\225PD\216\37?.\"\253V\255\22\221\23'NL\302w\34\377" - #"\331\245\266\345\370\231\267Gi*\200\303" - #"\224\3414\350a\215M\217\201wz\230" - #"\267Gb\342N\261G>\322\240\207\205" - #"\321\344\345\345\251.\301\177\346\355\224y" - #"{\244\220\366\331\237\315=,@\tzX\0\220\30\201\5" - #"@\e\4\26\0m\20X\0\264A`\1\320\6\201\5@" -) 500 -( - #"\e\4\26\0m\230\20X\226eY\2265\332b\27\266m{\r\22\266\0040\206" - #"\350SI\25\355\257\245\344\302Q`\222q\341(\0$F`\1\320\6\201\5@" - #"\e\4\26\0m\20X\0\264A`\1\320\6\201\2451#/(3o\247\314\333" - #"#\205\264\2774)\233\257\3032o\217\304\304\235b\217|D\17\v\2006\b\254" - #"8\306\337\207W\333r\374\314\333\2434\25\300a\312p\332wVu\371\b\\Z" - #"\216\247\245\362\2h\351oK\337\321\303" - #"\2\240\r\23zX\252K\0\262\316\345" - #"\313\227\213\212\212&\377\373j\37X\0\262\aCB\0\332 \260\0h\203\300\2" - #"\240\r\2\v\2006\b,\0\332\310\212" - #"\300\352\352\352\n\205B\305\305\305\241P\250\273\273[u9>(++\263n\n" - #"\6\203\252\313I\211\3438\v\27.\214yQ\353C\26w\217\364=d\216\343\4" - #"\2\1\313\262\2\201@kkk\344u%\307(+\2k\361\342\305\"\322\322\322" - #"\"\"\213\26-R]\216\17\372\372\372" - #"\334\233\316\2349\243\272\234\3449\216\263" - #"v\355\332S\247N\305\274\256\357!\e" - #"m\217\364=d\365\365\365\215\215\215\256" - #"\353\368p\240\256\256.\362\272\232c" - #"\344\232\356\374\371\363\205\205\205\221\247\205" - #"\205\205===\n\353\361\2051\an" - #"\371\362\345\216\343\304\354\216\326\207,\356" - #"\36\271:\37\262\205\v\27F\36G\366B\32512\377\302\321-[\266\24\24\24" - #"l\337\276\335{\272m\333\266\301\301\301" - #"]\273v\251\255*E\321\327\367\227\226" - #"\226\366\366\366*,&u1\367\246\31p\310F\336mg\300!\353\351\351\t\6" - #"\203\3\3\3\242\360\30MB(\252\25" - #"\223\3751\277\0314\25\375K\257\244\244" - #"\304q\34\205\305\244.\346\377\241\1\207l\344\231e\300!{\352\251\247" - #"\266m\333\346=Vu\214\246\246=\21\221\6'O\236\214\30\n\205\352\352\352\\\327\335" - #"\274y\363\203\17>\30\375\356\276}\373" - #"\276\365\255outt<\373\354\263\265" - #"\265\265G\217\36\365\271t\350\2039," - #"\370\340\243\217>Z\271r\345\201\3\a" - #"\36~\370\341\303\207\17\217\274\325&\"" - #"ze\273\350\307\327\257__\260`\201eYg\316\234\2312eJ\314\273]]" - #"]/\277\374\362\317~\366\263\302\302\302" - #"\306\306F_\376\n\t\0351\207\205T" - #"\r\17\17o\330\260\341\245\227^\252\251" - #"\251y\361\305\0277l\330\340\375\3050" - #"\256\222\222\222\270\223P\317=\367\334\274" - #"y\363\252\252\252\236\177\376\371\230\267j" - #"jj\376\370\307?\356\331\263\347\332\265" - #"k\317=\367\234/\177\202\204\256\224\16" - #"Ha\202W^y\345\201\a\36\270~" - #"\375\272\353\272\327\257_\277\377\376\373_" - #"}\365\325\321\32G\326-8r\344H" - #"\344\277\337\276}\373\202\301\340\205\v\27" - #".\\\270\20\f\6\367\355\333\347F\315" - #"a\265\267\267\317\2313\247\271\271y\214" - #"\225\3\220%\b,\244\252\246\246\246\243" - #"\243#\362\364\364\351\323\367\336{\357\30" - #"\355\217\349R\\\\\\\\\\<\177" - #"\376|\357\225\245K\227\266\265\265y\217" - #"\333\332\332\226.]\352\336\272\246p\344K4ZF\n\351\300\34\26\0m0\207" - #"\5@\e\4\26\0m\20X\0\264A`\1\320\6\201\5@\e\4\26\0m\20" - #"X\0\264A`\1\320\6\201\5@\e\377\17\261\224\26" - #"\263EZ\271\b\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 49 #"\"The new plot/compat library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 6 #"x-vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"z-vals" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 7 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"line" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 15 3 6 #"lambda" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 15 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"apply" -0 0 4 3 1 #" " -0 0 14 3 8 #"gues-fun" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 23 #"fit-result-final-params" -0 0 4 3 1 #" " -0 0 14 3 6 #"params" -0 0 22 3 5 #")))))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"20" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"10" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 diff --git a/collects/plot/tests/fit-test-2.rkt b/collects/plot/tests/fit-test-2.rkt deleted file mode 100644 index bad31fed8e..0000000000 --- a/collects/plot/tests/fit-test-2.rkt +++ /dev/null @@ -1,2635 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0108 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 5.2.0.1 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 44 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -( - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 19 #"drscheme:sexp-snip\0" -0 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -( - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 33 #"(lib \"bullet-snip.ss\" \"browser\")\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 8 #"gb:core\0" -5 0 10 #"gb:canvas\0" -5 0 17 #"gb:editor-canvas\0" -5 0 10 #"gb:slider\0" -5 0 9 #"gb:gauge\0" -5 0 11 #"gb:listbox\0" -5 0 12 #"gb:radiobox\0" -5 0 10 #"gb:choice\0" -5 0 8 #"gb:text\0" -5 0 11 #"gb:message\0" -5 0 10 #"gb:button\0" -5 0 12 #"gb:checkbox\0" -5 0 18 #"gb:vertical-panel\0" -5 0 9 #"gb:panel\0" -5 0 20 #"gb:horizontal-panel\0" -5 0 33 #"(lib \"readable.ss\" \"guibuilder\")\0" -1 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 15 #"test-case-box%\0" -2 0 1 6 #"wxloc\0" - 0 0 129 0 1 #"\0" -0 75 1 #"\0" -0 12 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 10 #"Monospace\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38 -#"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39 -#"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42 -#"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37 -#"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 37 -#"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 2 38 -#"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 48 96 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 --1 0 1 #"\0" -0 75 10 #"Monospace\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 0 -1 -1 0 1 #"\0" -0 75 1 #"\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 14 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 38 #"drscheme:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -31 #"drscheme:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 37 #"profj:syntax-colors:scheme:prim-type\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 2 38 #"profj:syntax-colors:scheme:identifier\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 34 -#"profj:syntax-colors:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:literal\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 139 34 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -33 #"profj:syntax-colors:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:default\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 37 -#"profj:syntax-colors:scheme:uncovered\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 35 -#"profj:syntax-colors:scheme:covered\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 139 0 -0 0 -1 -1 8 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 8 24 #"drscheme:text:ports err\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 11 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 11 #" Monospace\0" -0.0 15 90 -1 90 -1 3 -1 0 1 0 1 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 14 #"Html Standard\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 0 1 -#"\0" -0 75 1 #"\0" -0.0 10 90 -1 90 -1 3 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 0 1 #"\0" -0 75 12 #"Courier New\0" -0.0 10 90 -1 90 -1 2 -1 0 1 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 30 #"drscheme:check-syntax:keyword\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 40 25 15 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 39 #"drscheme:check-syntax:unbound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 248 20 64 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 37 #"drscheme:check-syntax:bound-variable\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:primitive\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 36 36 140 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 31 #"drscheme:check-syntax:constant\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 51 135 39 0 -0 0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 32 #"drscheme:check-syntax:tail-call\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 2 27 #"drscheme:check-syntax:base\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 80 80 248 0 -0 0 -1 -1 2 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 94 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 200 0 0 0 0 -0 -1 -1 4 32 #"widget.rkt::browser-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 59 -#"macro-debugger/syntax-browser/properties color-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 99 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 190 190 190 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 255 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 107 142 35 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 100 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 139 0 0 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 100 149 237 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 65 105 225 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 70 130 180 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 47 79 79 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 0 0 139 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 75 0 130 0 0 -0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 160 32 240 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 255 165 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 250 128 114 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 184 134 11 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 128 128 0 0 -0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0.0 0.0 0.0 1.0 1.0 1.0 169 169 169 -0 0 0 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -228 225 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 255 0 0 224 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 224 -255 255 -1 -1 0 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -0.0 11 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 22 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 14 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 41 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 43 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 1 0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 255 -255 255 -1 -1 0 753 0 26 3 12 #"#lang racket" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 81 -( - #";; Originally a test for PLoT <= 5.1.3; keeping it to test backward " - #"compatibility" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 7 #"require" -0 0 4 3 1 #" " -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 14 3 8 #"rackunit" -0 0 4 29 1 #"\n" -0 0 4 3 9 #" " -0 0 22 3 1 #"(" -0 0 14 3 7 #"only-in" -0 0 4 3 1 #" " -0 0 14 3 11 #"plot/compat" -0 0 4 3 1 #" " -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 19 #"fit-result-function" -0 0 4 3 1 #" " -0 0 14 3 23 #"fit-result-final-params" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 45 #";; This is data from the Cavendish experiment" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 20 3 1 #"'" -0 0 22 3 3 #"(#(" -0 0 20 3 3 #"0.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-14.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"1.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"8.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"2.1" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"28.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"3.1" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"46.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"4.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"47.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"5.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"36.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"6.2" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"37.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"10.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"7.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"5.1" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"8.2" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-11.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 3 #"9.1" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-22.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"10.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-35.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"11.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-33.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"12.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-21.1" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"12.9" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-15.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"13.8" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-1.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"14.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"19.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"15.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"27.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.8" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"17.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"32.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"17.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"27.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"18.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"20.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"20.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"13.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.4" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"21.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-1.3" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"22.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.5" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"6.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"23.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-25.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.3" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"24.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-25.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.1" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"25.0" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-20.2" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.6" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"26.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"-9.9" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"27.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"5.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"28.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"14.7" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"29.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"21.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"30.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"29.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"31.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"21.4" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"4.1" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"32.0" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"24.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"32.9" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"25.8" -0 1 4 65 1 #"\t" -0 0 20 3 4 #"12.0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"33.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"0.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"2.9" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"34.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-16.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.2" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"35.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.0" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.7" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"36.6" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-24.6" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.8" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 4 #" " -0 0 22 3 2 #"#(" -0 0 20 3 4 #"37.7" -0 1 4 65 1 #"\t" -0 0 20 3 5 #"-19.8" -0 1 4 65 1 #"\t" -0 0 20 3 3 #"3.5" -0 0 22 3 3 #")))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 83 -( - #"; first column is time data, second is result, third is error. to pa" - #"rse them out..." -) 0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 12 #"match-define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"list" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 4 3 1 #" " -0 0 14 3 6 #"errors" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 3 #"..." -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The old plot library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 35 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 12 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1,\b" - #"\2\0\0\0b\325r\225\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0\26\345IDATx\234\355\335KhT\327\37\300\3613\365\37\265\240" - #"\314\303\322b\202\222\214\256\354\302Zt" - #"\0232\215\320\356j\202\272\265\224\266\264" - #"\330\342\246t\323\215\373J+tU,(\324vW(b\36+u5\267\b\21" - #"2B\301Mm\342#(t\223\314 \376\211I\333\371/N{{\3773w\306" - #"\271\357\363;\367\373Y\310dr\2759" - #"\347\334;\2779\347\334\363(\264\333m\5\0\22\274\220u\2\0`P\4,\0" - #"b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300\2" - #" \6\1\v\200\30\4,\0b\20\260\0\210A\300\2 \6\1\v\200\30\4," - #"\0b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300" - #"\2 \6\1\v\200\30\4,\0b\20\260\0\210A\300\2 \6\1\v\200\30\4" - #",\0b\20\260\0\210A\300\2 \6\1\v\200\30\4,\0b\20\260\0\210A" - #"\300\2 \6\1\v\200\30\4,\0b\374'\353\4<\307\326\255[777\263" - #"N\5\200~\236\16+F\315fsb" - #"bB)U\253\325\232\315\246\373~\251T\322\25.\307qJ\245\322s\317\243#" - #"TN\272'\0\243\344(`\365\nL\263\263\263\307\216\35SJMMM\315\317" - #"\317g\226>\0\317#\246\232\20\275F" - #"\3438\316\324\324T\253\325*\26\213\363" - #"\363\363\272\266\25\372\374\324\260\0-\315" - #"\317\202\230O\235i\303\32\bX\200\306" - #"\260\6\0\360az\300\332\272uk\241P\320s\375\n\377\310:Q\0\376\357\263" - #"\231\0321\355\32\232\204\200\231h\22\2" - #"\200\17\2\326\3375[\245T\241P\330\272uk\326\311\1\320\223\230vM\364j" - #"g\274#\324i\22\2\32#\335\23\301\34\32@:\232\204\0\304 `\1\20#" - #"\343\200\325h4\266o\337\256_\353\345" - #"_\364\310\16\23\226\246\2`\232,{" - #"\216\37?~|\344\310\221\307\217\37\353" - #"4\350\345_\364\24?\307q\274+\300(\363:\271MK\17\220\225\\\314%\334" - #"\330\3308z\364\350\344\344\344\271s\347" - #"t\32:\262\335\377\307\314\231\226\36 " - #"+\271\bXg\316\234\271\177\377\376\334" - #"\334\334\226-[\bX\200\\\366\17k" - #"\270t\351\322\265k\327n\335\272\365\302" - #"\v\375:\321:\246)u\374H\274\0" - #"2\221\341\366\306\331T\23\366\356\335\273" - #"\262\262\342\376X\255V\227\226\226L\253" - #"a\365\37hJ\r\v\320\354\237K\370\360\341\303\366?\224RKKK\312\263\"" - #"\250\32x\265\342Dmll\350\344\265\333m\6\235\2&\310~\244\373\201\3\a" - #"\364\v\275Tq\253\325RJ\351EA3M\27\0\343\210i\327d\325\4" - #"3|\343U s\3667\t\1 \4\2V`F\355\24\r[\271\353y\262" -) 500 -( - #"\352\221\27\1\253'\21;E\303V<\363\361%\246#&\375>\243\270v\212\6" - #"B\23q\203\321\207e\204\270v\212\6\20\27\2VO\203\354\24=77\227Y" - #"\372RG\257\n2'\240\302\251\245_7\216w\247hk\3446\343\231\20Q\332" - #"\271\230\374\34\24\343\260\f\221\333\214g" - #"BDi\323\207\365/6R\5\314\304F\252\375P\3032Dn3\236\t\21\245" - #"M\r\v\0|\20\260\0\210A\300\302" - #"\240\230\223\204\314\21\260zb\v\373\16" - #"\314IB\346\4t\351i\246\365>\232\226\236\0240')}\"\312\231Nw\230" - #"\2109I\203cV@B\4\304om\360(\336\177-\366\364\323c\215\376C\377" - #"\321-\372M\"\3426c\244\273\217\240" - #"\205\222t!\212\270\223\222\220\333\214\207" - #"@\300\212\35MB\0b\20\260\200\3701\4$!\4,\374\237\240\275\305\364." - #"\373b\bHBLo!\373\3561;H\232\351\303\212\242O\356|\177ewi" - #"\204\20\327\20\20\223\v\326\373\331\244\17" - #"\353ozekwqk\367u\37\324\306\221\271<\f\1\361~6Scz\300" - #"\n\201\332xB\30\372?\270\334.K\2334s+\234\35\6\257\e\2473 \333" - #"\344\272zt\246\r\"\21\212a\r\261" - #"\263\260\206\225\207\332xr\2026\250i\200#Um!\6Oj\275^/\26\213" - #"J\251b\261\3508N\346\351\221\245T" - #"*9\216\243\224\252\327\353\245R)\366\343s%\372M\"\3426K3\221\2*" - #"\234\232i\215\24\21u\365\20\2026\250" - #"\231\21\335\aM\302\330Y\330$D\24A\e\3244\300}\5z@\301X\266\301" - #"\t\210\337\23295\254t&Wg%\350\fgfD\307E\356\0007&?\373" - #"0'`\345\1\245\235\276\2162t\34\347\370\361\343\253\253\253\225J" - #"eff\306\344o\2\232\204@\3361\234\320\227\230/F\323\326\303" -) 500 -( - #"\262\e5\254\204\364\2719;\312P\320\323\fjX\221\2703\6\332\3556\321\n" - #"\211\n\332_\256oN\245\224\367\346\364\35\313\306\323\f_\246\a,v~NY" - #"\320\37179\237\257\343\e\200\202\362m" - #"\375\231?\271\207\235\237\3731\274V\214" - #"<\213\330\202\356\323\372\23q\333\323$" - #"\4r\204\326\337\340\bXH\4\203!\ag~\353\317\34\2*\234\232\210\2721" - #":\344\344\252\305\362P\225\201\243\203\240" - #"\206\225_T\202 \16\1+\277by\302\225s\254\256\2232\2\26\20^\320\361" - #"\350\4\270\2102\vX\225JE7F*\225\212~G_K\375&\227\23\"4" - #"\233M=\313\257V\2535\233\315\347\36\357\e\340r>\226-\220l\2V\245R" - #"\331\271s\247\36\214\256\177T\377\\K" - #"\375&\363\247 B\320\21\t\276\1\216" - #"\271\31\203\313&`\355\336\275\373\301\203" - #"\a\372\265\16R\312s-\325\300\337W0VN\332>AG$0\344*\252\300" - #"k\224\306M\257\261\333\356Zh\265\377" - #"\217\210KB\5\233\253\245\223\a/\303" - #"\240\353w\213\270\355\323Ld\306\243<" - #"._\276\374\331g\237\255\256\256*\277" - #"\371\n\375\377o\266)\267@\242+.\tZl \272\344\26\2670\263\350\272\267" - #"7N-\221\231u\2727\233\315\223'O^\270p\241\321h\364:\246\177\24O" - #"1\261vJt\305%\332>\26\363v\272\245\374I\314&`-,,\34:t" - #"h\317\236=\365z}ttT\277\351\336\342\212\273<\25A\237p\5\302t\23" - #"$\"\241\246f\177ccc\3364T\253\325\266\247y\257\374Z\370Y%\325b" - #")t3\345\344\252\5\315\346\340\307\213" - #"(\3004\23ib\v\331\227\231\215y\321R\330?\"'W-o}X\35\330" - #"\204\302\207\210+'Q\242\5k\375U\v\267\36" - #"7\1+\264\377\244\363g\0\351|c\23\343\371\344\223" - #"X\222\202<\240'\bQ\204\257a\315" - #"\316\316\276\375\366\333/\276\370\342/\277" - #"\374\222\334 @\357x_\267\22\307se\271\350\t\262F\367\376\317)\b_\303" - #"\252\325j###?\375\364\323\313/" - #"\277\374\371\347\237'\264Y\246\273\307\254" - #"\362\354}\246\177\305r\37@\206\274\237" - #"\315\324\210\31\5\327=8\255\\.\317" - #"\315\315\325j\265z\275>==\275\266" - #"\266\226U\332`\23A\223\370\fa\364\276\204ccc\255Vkuuu\337\276" - #"}\313\313\313\356\373\325juii)" - #"\356\344\375\253\273P\344N\243\205\371\270" - #"\243\6g\364H\367\37~\370\341\245\227^RJ---y\267\220N4Z\371" - #"2j\32-\303\356\201\24\210\371\32\351" - #"\216\342)/\3671\b\276\226\255\301" - #"\245\34\234\3215,\327\370\370\370\371\363\34777777" - #"7\317\237?\257\a\221\246I/\367\241\224j6\233&D" -) 500 -( - #"+\0I\v\37\260\346\347\347WVVFGGGGGWVVX*\4@" - #"\322\302\a\254V\253\265\274\274\\.\227" - #"\313\345\362\362\362r\253\325\2121Y@" - #"V\30.c\262\360\1\353\324\251S\223" - #"\223\223\267o\337\276}\373\366\344\344\344" - #"\251S\247bL\26\220\25\271\253\316\347" - #"\201\230\236\305^\35{\206t\216\312\335" - #"\f\6\35\30.\23\224\214Nwx\361\265l\r\243\206\313\240C\370\320\3301p" - #"txx\370\321\243G1\245\312\207\341" - #"5,\276\226\255a\340p\31\303\311\250" - #"a\255\255\255\225\313e=j\264^\257\377\367\277\377\2151Y\256>;?\e5" - #"\357\237\257ek0\\f@\302v~\326S\371\334+\232t\2245\274\332\302\327" - #"\262e\f\277\337\214b\364\\B\227\343" - #"8\356\224c\357\353\204\210\270\201D$" - #"\22\203\340R\16N\306F\252\265Z\315" - #"\255\20\352jE|\251\2\340\203\225$" - #"\304|\215\210\370\306\23\221H\f\302\344KiZ\332dt\272\0031b\271\v\f" - #"\202\200\5#\230\263\313\244QO\237\321" - #"\201\200e\226\234|BL\316\246\273\362o\364\320ir6\2052(`\351I\247" - #"\272Q n\336i\\_\313\351\257\352\237\t\262\211p\f\nXzv\213\376f" - #"\2138\301%h\310\bt\274\357\301}" - #"\276\226\223\373\232\35\344\314\336\276\241@" - #"c\374\22-\303D\317\34\375j\306x|\274g\366\256$144\24\357\311\243" - #"\34\237\2320\335\373\343\343\343_~\371" - #"e\354c#;\2365\364\3771\320\251\342=\336\234\223\17~p\2109C\231d" - #"\323\367}s\n<\321\223\17r\260w\343\2257\336xCb6#\n\363\227\32" - #"\215\306\364\364\364\367\337\177\377\346\233o" - #"\306\231\24\2\26\1\213\2005\3001R\256f\"\332\241,..\216\214\214" - #"\334\270q#\334\177\367\325\221\230\224" - #"\362\17 \262g\317\236\305\30\n\372\b" -) 500 -( - #"\37\32\277\371\346\233O?\375\364\217?" - #"\376\320?F\337\346\213\32Vr\aK" - #"\371N\246\206\325\377\30\357\224\325V\253" - #"%1\233\21\205\354t\277q\343\306\27" - #"_|\261\260\260\340F\276\350\333|\271" - #"\v\36(\326<\210\217\267\2336\353\264" - #"\364\303\302\304\203\360\256$\221uZ2" - #"\22\242Vv\375\372\365\221\221\221\305\305" - #"\305\20\377\267\217z\275^,\26u\252" - #"\212\305\242\3438\336\337\6J\352\266m" - #"\333\2\375\351@\307'z\362\330\263Y*\225\34\307QJ\325\353us\312\260;" - #"%\336t\226J\245\324R\"\353jzO+4\233\21\31\364\224\260?\323\346O" - #"%$\366l\206\356\246MTwJ\314LgD\te\304\264\3621}\265\206\233" - #"7o\306\236\16h\333\266m\213\367\204f\256,\330\235M3\323\31Q\354W\23" - #"f\205\352>L\373V\221B\312\312\202R\322\231-3\227\2271}\34V&\b" - #"XQH)=)\351\204\227\200\247\204\0\220>\2\26\0001\bX\0\304 `" - #"Y\216\345\350`\223\360\233P@\4C\36$\1\2610\275\206\325g#U\0\31" - #"\22\266\221j\312x\340m73G\30a\20\214\303\362A\300\2\314\3048,\0" - #"\360A\300BN\261\23\242Db\332Y4\t\221\4\356\253\350h\22\2\200\17\2" - #"V\262hw\0001b\340h\262\364\343y\332\35@,\250a\1\20\203\200\205\234" - #"b\333\v\211\bX\310\251\351\351\351\231" - #"\231\31\245\324\325\253W\247\246\246\262N" - #"\16\6\"\246oEt7\220\350\304\333\312\312m/2\301\260\206\1771\371\31\t" - #"\261r\333\2134e2\371\331\364\200\265" - #"\261\261\241\367#S\236\275\317\262NT\0t\224\30kvv\366\330\261cJ\251" - #"\251\251\251\271\271\271\254\223#\217\367" - #"\263\231\03215a\35\310\305\315\343/\227\313ss" - #"s\265Z\255^\257OOO\257\255\255%\367\267X\360" -) 500 -( - #" \4\32\203\321\261Z\203\17\2417V\372\35%B\v*+\24Wt\364a\331" - #"\203\216\22 F\214tO\226\267\243d" - #"~~>\353\344\0\262\211\251\17\213\256" - #"\272\247\332\310\227\\P\351\243\270\242\243I\b\0>\bX\310)k6@\313\325" - #"\212 b\352\303\242\253\3564\t\221\264" - #"\f\257;MB\177\214\275\354\217A\252" - #"\260\236\244\200%q\222j\232\355\16f" - #"\363\302z\2467\37\274\243\267]\206\247" - #"9+\314\346\315\263\364\257\270\367\263I" - #"\223\360o\336\371J\365z\275T*\3619\354\205A\252HS&s\tM\17X" - #"^LR\355\217\331\274\371\224\253\276K" - #"1\r\a\3328\3\242\240\362&\315\t" - #"\366\276\230\374\354\203\317\341\200(\250\16" - #"\326/b\21K\337e\224RJ\363\226c.!,g\375\306E\261\364]J)" - #"%I}Xp\345jp3\372\313U\337\245\351\1\325e~\354O\237o\231P" - #"P\276\254/\226X2\30\356$\214t\a\224\242\"\211.\231\5\254J\245\242o" - #"\304J\245\242\337\321Og\365\233\276\17" - #"h\271k\363F\217\364QJ\265\333m\373:\313\21B6\1\253R\251\354\334\271" - #"\323\35u\246c\226\236Y\242\337\364\235" - #"\\b\315]K\305\1\b'\233\200\265{\367\356\a\17\36\350\327:H)\245\232" - #"\315\346\304\304\204~\263V\2535\233\315" - #"L\322\226\202\204*\16\326\254\227\202\364" - #"I\31}\232M\300\272s\347\216\373zzz\332\372G\e\351p\247JXS\25" - #"\215\205\224\217b\266\304\314\234o'\246" - #"Z\255v\377\271j\265\352=\346\273\357" - #"\276+\227\313n\333\320\373\253\fS\236" - #"\216\350Y\260\240\20\6\0211\233\245R" - #"\311q\34\345\231\213j\231\241\241!\367" - #"C144\24\356$\352\237\t\314\355\1\n\334\373\27S\3760&X\303" - #"ZZZ\352\376{KKK\372\267\315f\363\344\311\223\27.\\h4\32\275" -) 500 -( - #"\316\340\375\217\335\205\222\\\312\315G\255" - #"apnW\203\255\375\f\275j\326\201" - #"\272J\3\215>\365\376\305\224?\211\331" - #"4\t\27\26\26\16\35:\264g\317\236z\275>::\252\337t\213L\261\336\300" - #"\363\210\251\300\e \267\213X\370v\225\366\212bbF\237\306UU\vdll" - #"\314\233\6\335N\254\327\353\305bQ\277" - #"S,\26\35\307\351\210\342\231$59" - #"Qr\244\202T\340\245\213\230A\367\276" - #"\352\276\251\362\300\267\364z\25i\270\242" - #"N\363\16\0243\374\327\246\221\312\216\343" - #"\34?~|uu\265R\251\314\314\314\270\317F\a\227\371\4\3754u_\372\20" - #"3um\272\177\2\t4\35\202\221\356\360\21\275A'\246\2\237\214^\343B\30" - #"\340f=1_;6}C\306\265\226\261Me\322G\320\352\0S,\275\250a" - #"!\252\334v\3\3\21\21\2602\220\363" - #"\6\35\322a\345\330\0271\365d\373\252" - #"\364\321sd_\231\370\242I\30N\237" - #"'3\261<\307\350s\266\344P\303\202" - #"\271b\251#\344v\212\245\357\210\331^E*e^\27\1\v\346\352\3658\265\327" - #"\247\316\367})\37\305\330\371v\225\212" - #"\37r\34\377\320\256d\bJ\352\200\242" - #"\347\310\2762\351\240z\214\217\3555=" - #"\320\372i\203\201\370\216\230\355U\244Q" - #"\244y\37\232\336\260\267x\347\347(-" - #"\177\353w\202\321z\365\302\364\32\27\302" - #"\336\327\335:\312!\306!\307\231\354\374" - #"l\372\2569\356G\221\373\317\313\326\b" - #"\325\301\3738u~~\336}\277\327\270" - #"\20\306\213\254\377" - #"\304\366\357\\\267>\373\220\213N\367<\242s\35x.:\335MA\347:\360\\" - #"b\32\329i\23\261\375:\304\241I\b\0>\bX\246cM(\300E\3002" - #"\235\357v\230\322\345$\362\346$\233i" - #"\3128`5\32\215\355\333\267\353\327z" - #"\344\244\36\212\306\312\4v\353\336X\304" - #"J9\311f\232\262\fX\217\37?\236" - #"\232\232z\366\354\231\376Q/K\240\253" - #"\22\21W&\b\372\315\26\350\370DO" - #"\236\350\231\311f\312'O\364\314B\263\31Qf\317\236666\216\36=:9" - #"9y\356\3349\235\206\216g\r\375\177\354/\350c\v\23N\36b\211d\211\331" - #"\24\235\222DOnNJ\222>y\24\231\5\2543g\316\334\277\177\177nnn" - #"\313\226-\4,\351)I\364\344\346\244" - #"$\321\223\233\223\222\244O\36I;1" - #"\325j\265\373\317U\253\325v\273}\361" - #"\342\305\375\373\367\257\256\256\352|\352\343" - #";\22\223R\376\1D\366\344\311\223\344\"\211W65\254\275{\367\256\254" - #"\254\270?V\253\325\245\245\245(U*\0y\220M\247\373\303\207\17\2755" -) 500 -( - #"\251\245\245%\345\231L\247\230O\a\300" - #"O\366s\t\17\348\240_\350\311t\255VK)U,\26\231O\a\240\3\315" - #".\0b0\322\35\200\30\4,\0b\230\36\260\3620_\307q\34\267#OY" - #"\232\345J\245\242sT\251T\364;Vfs\337\276}\356\316\3zX\217\225\331" - #"\324\262\231W\227\316\350\211\320J\245\222" - #"\3438\372u\275^/\225J\331\246'v\325j\265X,z/\204}Y.\227" - #"\313{\367\356u_\227\313\345\266\215\331t]\277~}dddqq\261mo" - #"6\37=z4<<\354\336\267\251e" - #"\323\364N\367\234\f\316\362\346\313\276," - #"\277\372\352\253w\356\334\321\257\35\307\321" - #"[l\330\227M\355\306\215\e\357\275\367" - #"\336\354\354\354\353\257\277\256l\274\232*" - #"\370\274\272\30\231^|V^\357nv\a,/\2759\320\304\304\204\255\331\34\e" - #"\e\273\177\377\276R\252\\.\257\256\256" - #"Z\231\315\240\363\352b\224\3758,\344" - #"\307\345\313\227\v\205\202\335\273+\336\273" - #"wO\277\260u\3\315K\227.]\273v\355\326\255[/\274\220A\17\270\351\361" - #"\336\312/\250n\326\327\260\232\315\346\a" - #"\37|\360\350\321\243\37\177\374qttTY\232M/\337\35\333,\310f\266\363" - #"\352L\177J\230\303\371:\366eyaa\341\320\241C{\366\354\251\327\353:Z" - #")\e\2639>>\336\235#\373\262\231\361\274\272$z\362cT\257\327\365C4" - #"\245T\261Xt\237DX\346\300\201\3" - #"\356k\373\262<66\346\275\345\364\212" - #"\35\366e\3237G\366e\323\313\275oS\313\246\370\n*\200\3740\275I\b\0" - #".\2\26\314\3221\356\37\360\"`!" - #"\6\265Z\355\267\337~\323\257\357\336\275" - #"[\253\325B\237\352\335w\337}\372\364iL\351\202m\bX\210\301\351" - #"\323\247O\2348\261\276\276\276\276\276" - #"~\362\344\311\217?\3768\364\251\356\335" -) 436 -( - #"\273\367\340\301\203\30\323\6\233\20\260\20" - #"\203w\336y\347\340\301\203g\317\236=" - #"{\366\354\301\203\aO\235:\325\353\310" - #"J\245\242'\307\356\333\267O)u\344" - #"\310\221\333\267o+\245\32\215\306\221#G\3641\372Wz>\255e\23\206\21U" - #"BO\37\2217\315f\363\225W^\31" - #"\36\36\356\263\37\201\236\371\354>\2o" - #"\267\333W\256\\\31\36\36n4\32\303" - #"\303\303W\256\\\321\207\351_\351\371\264" - #"\372`=\22\2`j\16\342\261\276\276" - #"\376\327_\177\25\n\205\365\365\365\35;" - #"v\370\36\263\266\266\326n\267\225R\315fS\317\\9q\342\304\315\2337''" - #"'?\376\370\343\23'Nx\17.\24\no\275\365\326G\37}t\347\316\235\221" - #"\221\221\24\262\0\363\321$D\f\332\355" - #"\366\373\357\277\177\346\314\231\323\247O\177" - #"\370\341\207\201\376\357\323\247O\267o\337" - #"\336\335\321\276\272\272\252;\362_{\355" - #"5Z\205\370[\326U<\330\340\302\205" - #"\v\223\223\223\177\376\371\347\346\346\346\370" - #"\370\370\267\337~\353{\230\273jR\275" - #"^\327\367\236\336\241ryyy\377\376" - #"\375\27/^\324\207\351_\271\315\300\257\277\376ztt4\215l\300x\4,\304" - #"`bb\342\356\335\273\372\365\257\277\376:11\341{\230\333{U,\26u\f" - #":|\370p\243\321h\267\333\213\213\213" - #"\207\17\37\326\207\351\t\37\345rY\177" - #"\247\3327\243\5\24115\a\200\30\364a\1\20\203\200\5@\f\2\26\0001\b" - #"X\0\304 `\1\20\203\200\5@\f\2\26\0001\bX\0\304 `\1" - #"\20\343\177\17\233H{#M\307\34\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The new plot library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 5 #"#:sym" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 6 #"square" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"error-bars" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 1 #"0" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 3 #"-40" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"50" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:width" -0 0 4 3 1 #" " -0 0 20 3 3 #"400" -0 0 4 3 1 #" " -0 0 22 3 8 #"#:height" -0 0 4 3 1 #" " -0 0 20 3 3 #"300" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 5 #"theta" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"+" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"exp" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"/" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 20 3 2 #"-1" -0 0 22 3 2 #"))" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"sin" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"+" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"/" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"*" -0 0 4 3 1 #" " -0 0 20 3 1 #"2" -0 0 4 3 1 #" " -0 0 14 3 2 #"pi" -0 0 4 3 1 #" " -0 0 14 3 1 #"x" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 22 3 6 #"))))))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 6 #"define" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"fit" -0 0 4 3 1 #" " -0 0 14 3 5 #"theta" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 22 3 2 #"((" -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 20 3 4 #"-0.5" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 20 3 2 #"15" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"theta0" -0 0 4 3 1 #" " -0 0 20 3 2 #"10" -0 0 22 3 2 #"))" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 1 #"\"" -0 0 19 3 3 #"The" -0 0 19 3 33 #" old library produced this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 2 83 4 1 #"\0" -2 -1.0 -1.0 0.0 0.0 0 36 500 -( - #"\211PNG\r\n\32\n\0\0\0\rIHDR\0\0\1\220\0\0\1\220\b" - #"\2\0\0\0\17\335\241\233\0\0\0\6bKGD\0\377\0\377\0\377\240\275\247" - #"\223\0\0 \0IDATx\234\355\235}|T\325\271\357\177C2\23B\240" - #"I&@\336\337\3!\t\220\0\"\20A\221[E\212\340K\5\365Vz8E" - #"\355\271\325(j{\324\236\323\336\323\323\36/U\213zr\353\353iO\325z|" - #"\273\307\2*V\t\0252\200E\22\233\204$\2207B\336H&@\2\362\232I" - #"\302\276\177\354\270\31&\223\311\314\354\265" - #"\367^k\347\371\376\301'\231\354\275\326" - #"\263\231\314/\317z\326\263\236\307\"I" - #"\22\b\202 D`\234\321\6\20\4A\370\v\t\26A\20\302@\202E\20\2040" - #"\220`\21\4!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`" - #"\21\4!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4" - #"!\f$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f" - #"$X\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X" - #"\4A\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A" - #"\b\3\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3" - #"\t\26A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3\t\26" - #"A\20\302@\202E\20\2040\220`\21\4!\f$X\4A\b\3\t\26A\20" - #"\302@\202E\20\2040\204\32m\200Z" - #",\26\213\321&\20\304\230\343\314\2313" - #"\23'N\324\177^\213$I\372\317\312\20\213\305\313#x}\321\317{\331^6" - #"\374EYaG\35\220\237G\340g\336\261s\31\347\346\371\377\24" - #"\314\241%!A\20\302`N\301\n\v\vcx\231!\223\362\374" -) 500 -( - #"\b\376_\311\363S\360\374\b\314\3475\352)\230c\316%!?S\250Y\2612" - #"\304@\37\236!&x\n\23<\2hIH\20\4\341\17$Xc\2\376]}" - #"\1770\301S\230\340\21\214\205\4KW\354v\273\274Kh\261X\354v\273n\363" - #"^\274xQ\267\271\264\303\4Oa\202G0\26\341W\324b\305\260\344o\335\377" - #"ed#A\350\a\305\260\b\202 F\207\4K+\324\254\376l6\233\345\el" - #"6\2336\6\22\204x\b\1774\207[z{{\335W\177\362\213\321\321\321\212\212" - #"\245\244\244\214t\257\313\345\202Y\266\300" - #"\t\202!\302\177$\270\215a\371\bW\361\177\0\202 |@1,\202 \210\321" - #"!\301\322\n?W\177\4A\370\217\360\213\16n\227\204>\356\245%!!4\264" - #"$$\b\202\30\35\22,\202 \204\301" - #"\f\202\245Q\276\222\222\f\245\335\24\4!\20\356\237\b\243\20>JB1,\202" - #"\320\31\212a\21\4A\214\16\t\226~" - #"\264\243\275\bEY\310B\246\321\246\20" - #"\204\230\320\321\34\235p\3029\asz^\354\271t\342\22~\aK\210\305\32b" - #"\225\217\340\20\4\341'\302GID\211" - #"a=\202G\302\21\376\24\236\222 \335" - #"\204\233n\304\215\217\3411\355\346%\b" - #"\3550\3607S\370\217\4\267\202e\263" - #"\331\372\373\373\345\257\255I\326\250\266\250" - #"jTO\305T\0\215h\\\200\5\365\250\217A\f\363y\tBk(\350nB" - #"\\.\227\364\r\17\264=p/\356\225" - #"\325\n@\26\262n\306\315\277\307\357\215" - #"\265\220 \204C\370\277\341\334zX\ngq6\25\251\207pH\21,\0\273\261" - #"\373\177\341\177\325\240\306\202\21\263Z\310" - #"\303\"\370\204<,3S\202\222\371\230\357\256V\0\256\303u!\b\331\205]\6" - #"\31E\20BB\202\2459\237\340\223\25X1\374" - #"\365{q\357\253xU\177{\bB\\\204_t\360" -) 500 -( - #"\277$LC\332'\370$\a9\36\257\237\304\311t\244w\241k\2&h1/" - #"Ah\4-\t/\323\330\330\30\36\36\356\376J{{{QQQdddQ" - #"QQGG\207Q\206\5G5\252C\21:\\\255\0\304 \246\0\5{\260G" - #"\177\253\bBP\370\22\254\301\301\301u\353\326y\364n+((\0\260s\347N" - #"\0\371\371\371\306X\26,\237\340\223\233p\323H?]\212\245\273\261[O{\b" - #"Bh\370\22\254\347\236{.22\322" - #"\375\25\247\323y\361\342\305\342\342\342\253" - #"\256\272\252\270\270\370\342\305\213\335\335\335" - #"F\231\27\4#\5\260d\256\303u\24w'\b\377\341(JR[[\273t\351" - #"\322\3\a\16\244\245\245)V=\362\310" - #"#\341\341\341O=\365\224\374\355\223O" - #">\331\327\327\267y\363f\345.\236c" - #"X}\350\233\202)\235\350\214@\204\327\v\316\341\\\34\342\234pz\rcQ\f" - #"\213\340\23\312t\307\340\340\340\342\305\213" - #"\327\257_\377\303\37\376\320\375\277c\342" - #"\304\211G\216\34\231:u('\300\351tfff\236={V\271\221g\301\372" - #"\22_>\200\a\16\340\200\217k\256\305" - #"\265\377\214\177\276\02172\234\227 4" - #"\205\202\356C\213\301\373\357\277?\210{" - #"-W\242\262\314\236{\23S\217\2~\201NQ\206\262y\230\347\373\32\nc\21" - #"\234\343\365\23a\24\274\374\rOIIikks\177%##\243\251\251\311c" - #"\r\350\261B\4\337\36\326\6lX\210" - #"\205\367\341>\37\327\354\304\316\e\276\270" - #"A*\34\32\337j\275\\\302\201<,\202OhIx\5\356\377\35\36k@\217" - #"\25\"\370\26\254\271\230\373*^\275\n" - #"W\371\270\346\34\316\305\"\266\a=a" - #"\2260\217YH\260\b>\241%\341\210\304\306\306\216\37?\276\250\250\250" - #"\254\254\254\250\250h\374\370\361\356j" - #"\3053\27p\241\36\365\2631\333\367e" -) 500 -( - #"\21\210\310Df-j\365\261\212 \204" - #"\206G\301\312\315\315u\377\266\242\242\2" - #"\300\312\225+\1TVV\32cS\340\34\304\301\34\344\3300z\264+\37\371\225" - #"\20\346\271\b\302@\204_tp\273$|\21/V\241\352e\274<\352\225\317\342" - #"\331Ntn\266l\246%!!\4\264$4!\345(\37u\213Pf6f\223" - #"\207E\20\376@\202\245\25\376\v\26-\t\t\302OH\2604\301\5W#\32\363" - #"\220\347\317\305\261\210\35\207q\210\323\332" - #"(BH\334\323\240\250\225/\t\226&\324\241.\ria\b\363\363\372|\344\243" - #"\340\362\267v\273]IX\265\333\355ZXH\210\202\\k\e\200$I\324f\211" - #"\4K\23jP\343\247{%\223\217|" - #"\367\374\207\336\336^\345w\264\267\267\227" - #"\271y\4!(\324\227P\23jQ\233" - #"\213\334\321\257\3\0\330\355\366\336\233{" - #"\261\34\26\213%::\272\247\247GS" - #"\333\bB\\\310\303\322\204\200<\254\336" - #"\336\336\3127*\221O\376\24A\214\2\t\226&\34\302!\257UFG\"\e\331" - #"\310\204\vC\21\212\350\350h%\206\225" - #"\222\222\242\211\211\4! \264$dO\37\372Z\3202\35\323\375\277%\fah" - #"C\343\364F\371[yUh\262\304\321+:\313\272\235\361&\b\377!\17\213=" - #"\365\250OG\272\25V?\257\37\362\247" - #"\16#\357\366<\23\373S\264\333E\250" - #"\207\4\213=\207p\310\377\210;\200\236\236\36I\222P\217M\37ljii\321" - #"\3160.X\2024\244\25\241\250\3\202\365\23!x\200\4\213=5\250\tH\260" - #"\206\250C\35\35240\207#\34p\340]\374\6\277\1P\200\20238c\264E" - #"\204`\230A\2604J\2V2\214\3\235\242\26\265\1%a\rav\301r\302" - #"\271\6k\260\26\337\305w\213Q\274\30\213?\302" - #"GF\eE\4\200\373'\302(\314 X\222$i" -) 500 -( - #"\21\26\221c.J\330\305\377)\252Q=\0233\3\236\357\20\16\341P\300w\211" - #"\303&l\372\1~\240\264a\274\vw\275\203w\f\265\210\b\f\367O\204Q\b" - #"\277\17\305[y\231K\2704\1\23\316\340\214\377Awe\26\273d?\214\303S" - #"0%\210y9\307\t\347,\314\252Fu\254%V~\25038\223\212\324\26\264" - #"L\302$\243\255\23\0\256~\31\250\274" - #"\214y8\215\323\0230!P\265\222\231" - #"\201\31\207q\230\271I<\260\t\233\356\305\275Sq\271Z\354$LZ\206e[" - #"\261\325@\253\b\341 \301b\314i\234" - #"\216D\344\350\327yc:\246\327\243\236" - #"\255=\as\366b\257>&\21" - #"BC\202\305\30\225KB\223\t\326_\361\327Q\5\v\300R,\335\215\335:\330" - #"C\210\16\t\26cH\260\24\232\320d" - #"\2055\5\243\327P\275\16\327\355\302." - #"\355-\"\204\207\4\2131*\5\313\16" - #";\200\36\230\241\323\327~\354\277\32W" - #"\373s\345B,\254BU\37\372\2646\211\20\35\n\2723F\245`\1\310Df" - #"\23\232d\345\22\224\241-\210\337\2\315" - #"\260\275`\ei\27\337\275-\205\245\334" - #"R5\267j>\346\353h\246\256\330\355v\271\207\eu\237T\203\31<,\216*" - #"\216Zq\1\27T\26x2A*\326\320\26\304\325(}\246\324G\316\221{j" - #"\322\206\271\e\276\302W:\332\2507&\350\346\315C\305Q3xX\32\325\22S" - #">i\1\224+KD\34\342\306\251\3733`\2160V\37\372\220\213\253p\225\237" - #"\327\317\303\274r\224kj\22\241\22\367" - #"O\204Q6\230\301\303\342\201\241\223\275\251hu\264*'{\203C^\22\2622" - #"\314(jQ\213\6\204#\334\317\353\347" - #"c\376\1\34\320\324$\302\4\220`\261" - #"a\310\341O\301\367\226|O\245\303o" - #"\16\17\253\22\225\250\274\342\25\245(\205" - #"\327\305\365,\314j@\303E\\\324\315B\235\241n\336L \301bJ2\222\221" - #"\254r\f\23\304\260\0\34\304A\34\274" - #"\342\25\245\205\201\327\303t6\330\246cz5\252\3653Q_\206\272O.\201]" - #"\262\267\266\264\306 f,\34\371f\16\t\26SX\bV*R\217\341\330\0\6" - #"\230Xd\24U\250BU`\267\230>\214%\267e" - #"\334\212\255\22\244-\330\262\26kI\263\2\205\4\213" -) 500 -( - #"\rC\16\177\n\36X\365\200J\207\337\n\353TL\25\27512\t\226\aJ[" - #"\306\305X\f`\t\226\274\213w\357\300" - #"\35\335\3506\3324\221 \301b\303\220" - #"\303\237\212\252\17\253\324\267\233\227\373_" - #"11\314\20\242r\243\272\273\272\321uEq\321\341x\324 5w\334\335\243-" - #"#\200%X\362\367\370\373M\330d\234Q\342A\202\305\24\26KBy\2306\264" - #"\251\37\307(N\247\234\276!\356\6\214" - #"\226s\344\221\2324\0233\e\320\340\202\tkE9\341|\vo\r\357\e\264\21" - #"\e\377\210?\222\223\345?$X\314\350A\17$\250Ls\227\21\335\303B\1\n" - #"P\20\350Ma\b\313Df-j\265\260\310X\206\267e\224\211E\354\6l\360" - #"p\262\2506\251\17H\260\230\321\2066\264\262\31*\tI\355hg3\226!\314" - #"\302,\314\n\356>\317\315E\361\221\333" - #"2>\233\364\254\327\254\216\215\330\370\6" - #"\3368\2033\312+T\233\324\a$X\314h\0013\257Ht\17+d^\310\367" - #"g\177\37\243\345\34\rOM*@A\5*t\263S\37\344\266\214\256v\357Y" - #"\35\261\210]\212\245\324\1\333OH\260" - #"\230\321\6fq\247\333\256\272m\373\301" - #"\355\30!\307\222s\\p\331f\330\372" - #"\252\372\0H\222\344c\vbh\247\302\3552SzX\37\340\203\333q\273\217\v" - #"\250\3\266\377\220`1\243\25\255\254\226" - #"\204\307\313\216O\2325i\244\34K\316i@C\nRl\bFg\vP\3607" - #"\374\215\271I\6r\32\247KQz\vn\361q\215\357\16\330^\3739\216YH" - #"\260\230\301P\260\242\0205\16\343z!" - #"\344\231\376:\324\315\300\214\340\356\215E" - #"l\bB:\321\311\326$\3\331\206m\313\260\314w\327E\337\35\260MP\346\201" - #"!$Xl\260\331l\357\354{\a\255\314\26q" - #")Ha\246\177\372R\207\272ld\a}\373l\314" -) 500 -( - #"\366<\205(2\357\343\3755X3\352e\324\1\333OH\260\330\340r\271\222\v" - #"\223\217:\216\262Z\304\211\233\212U\217" - #"\372\351\230\36\364\355\2630\3134'\n" - #"\317\341\334n\354\366\321\226Q\311`\270" - #"\353[wm;\275\355\34\316\351i\236\210\220`\261a\0\3N8\23\221\310j" - #"\3001\353a\345#\337\4\36\226\254D\23o\234\370\365\236\257cl1#]v" - #"9\203\341k\351\333\221\337\376\v\376\202" - #"aA+*\363\340\216\31\4\213\207\212" - #"\243\235\350\234\202)\241\354\n\"\212+" - #"X\207p(\a9\376\\\351\265\340\214" - #"92\e\206\224\350z\374|\361\317\375" - #"\364\270Wb\345\307\370\30\303\202V\303" - #"\367R\215\202\207\212\243f\20,\215v" - #"\323\224r(\376Lq\f\307\22\220\300" - #"pvA\227\204\335\350\36\207q\361\266" - #"x\37\245\257\24\274\26\234\311Fv\23\232Lr@\347Z,\301\22?\257\275\21" - #"7~\212O55G%\356\237\b\2430\203`\361@;\332\223\220\304p@A" - #"sG\17\343p\16r|\227\276\362M\30\302\222\221\334\210F\215,\324\21538" - #"\203\374\241\332\f\376\220\213\334\20\204\324" - #"\240FS\253D\207\4\213\r\35\350`\30\300\202\260K\302\3038\254&\200%3" - #"\0033\352P\307\304\36\3\331\207}\370" - #"\n\3431\336\377[\226c\371'\370\204\202V> \301bC':\331.\t\23" - #"\220\340\204s\20\203\f\307\324\201\0064" - #"\250\331\"\224\231\216\351\365\250gb\217" - #"\2018\340\200#\260[\226c\371g\370" - #"\214\237\240\25\207\220`\261\201\271\207e" - #"\2055\0061]\350b8\246\16\250\367" - #"\260l6\333\263\367=\373\304\177>!" - #"\342\261$wv!\340n\326\313\260\354" - #"\257\370\353y\234\327\304 S@\202\305" - #"\6\346\202\5 \21\211\302\325\35U\223\346.\343r\271J" - #"_+E\266\330\265\n\316\343|\5*\260/\260\273&b" -) 500 -( - #"\342l\314\336\27\350mc\t\22,6t\240\203\355\222\20\2\n\226\v\2566\264" - #"e C\3458\331\310V'z\306S\206\262\\\344\6\341*-\305\322\200\35\263" - #"\261\4\t\26\e\332\321\316\244\326\250;" - #"BT\305r\2576\02713\"\31\311\301\35{vg*\246B\202\320u8\367" - #"a_!\n\203\270\361z\\\3779>gn\217i \301b\300i\234\16A\310" - #"DLd;l\"\22\217\341\30\3331\231\343^m\356O\325\177\312B\26\233q" - #"\353 \364F\341\317?\371\371\vw\275\200\300K,\24\242\260\nUtFg$" - #"H\260\30\240E\0\v\2.\t\e\3200\r\323\330\214U\207\3038\314f(#" - #"\350\237\327\337\362N\vF+\2610\274tL8\302\347`\316^\354\325\315T\261" - #"`v\224d,\243E\0\v\2\nV#\32UF\334/#\262\207\325\204&\364" - #"#\5\243\247P\311\247p,\26\213\374" - #"\257\374\342\336\177\333\273\334\262\34\200\305" - #"b\261Z\255\342\356g\336\0" - #"*Q\231\17\265\221\326y\230\367\22^bb\217z\274~\"\214\202/\17\253\244" - #"\244\344\356\273\357\336\276}\373\324\251C" - #"M\275=\326\200\36+D\31\217U\256\312\215\25\367ZN2\276\247\30\300@\17" - #"zb\21\253f\322\221\340?wTq\210\36\330\374@_-\3138q\32\322\220" - #"\316p<\2358\210\203\301u\275vg&f6\240\201\223\270\273\327O\204a\260" - #"\v\207\251e\307\216\35\211\211\211\345\345" - #"\345\356/\362\37t\357\220:\342\245x" - #"\215\246.\226\212\177$\375H\243\301\231" - #" \377\347\0\270Q\272\21+\30\274\27" - #"\227\343\320k1a\373\4\365\3\352\3142i\331g\322g\362\327~\376rz\275" - #"l\2364\357K\351K\337\327\30\205\201" - #"\306\360\342a\225\224\224\254_\277~\333" - #"\266ms\347\316u\177=66v\374\370\361EEEeeeEEE\343\307" - #"\217W\234/N\350Dg\34\3424\32\234\377%\241" - #"B\3\32\320\300`\34%\16}\340\335\3\331+\324\326" -) 500 -( - #"\2\324\237*T\25\240@\3758\3630\257\fe\352\3071\31\274\b\326}\367\335" - #"\327\321\3211o\336<\345$mff\246\374\243\212\212\n\0+W\256\4PY" - #"\311]?\25'\234\332\tV\2\228" - #"_\22\16\225\307\264\242\271\2579\371\22" - #"\313\343\337\351HoF3\303\1u\240\23\235!\b\231\2\6\233\233s0\307d" - #"M\260\231\300K\320\275\271y\304_\315" - #"\244\244\244\342\342\342\342\342b=\355\361" - #"\237Nt\306#^\243\301\371/\330\320\323\323\3\300\222eI\vKknb\251" - #"/1\210\1p\22'\345/\204\240\2\25\352#\3562\3631\377\25\274\302d(" - #"3\301\213\207%.]\350\322(\342\16 \26\261'qR\200B\311)HE*" - #"\363Q\205s\262\252Q-G\334\275v0\v\210\231\230y\30\207\5x\353\365\205" - #"\4K-]\350\322\316\303\nE\350dL\356D\247F\3433#\3\351\32l\351" - #"e!\253\tM\314\207\325\216\nT\310\1,5}\203d\302\0206\21\23O\340" - #"\4k\e\305\206\4K-\232.\t!J\334=U\23\17+\3\31Gp\204\371" - #"\260lq/a\370v\355\333\254\226\204\0\246`\312q\34g5\2329 \301R" - #"\213\23N\355\226\204\20!\356\16\0\251" - #"HC\32\363Q\323\220\306\377\222P)" - #"a\330'\365\205\347\206\253\357r\246@\2025\34\22,\265\34\3031M=,\376" - #"\343\356\0\220\256\211`e\"S^\22\272{1\334\266\322\251C]:\322\3\252" - #"\20\355;\3245\25S\205\256\23\255\5" - #"\274\354\22\212\213\2461,\210\220\354\16" - #"\310i\351iLFR\16\202X,\226\320\354\320\244\303I\0\3440\220\\\350\216" - #"\311,ZP\203\232<\344\5t\213\357\360\26yX\303!\301R\305\327\370:\4" - #"!\21\210\320n\212D$\36\302!\355\306W" - #"\217\v.L\5\253\343\337\36\307\236&b\242\v" -) 500 -( - #".\365\215-t\240\26\265\271\310e8 \t\326phI\250\212.ti\2275" - #"*\303y\320\335f\263\205e\205\241\23V\213\225\371b-\24\241\tHhE+" - #"\333a5\"\b\17\3137$X\303!\301R\205\246\347rd8\27,\227\313U" - #"\322X\2624mi\320\373\367\276\311D&\377\e\2052\265\250e+X\24\303\32" - #"\16\t\226*\264\16`\201{\301\2p\24G\265\210\270\313\b\221\331\0\0ah" - #"E+\263\n\321\0\310\303\362\6\t\226*tX\22N\302$\v,_\343kM" - #"gQC\vZ\264H\302\222IG\272\30\2025\35\351HW_p\325\35\22\254" - #"\341\220`\251B\a\301\2\367N\326\30" - #"\367\260\206j:\347\241\346\275\232\200z" - #"\246\216\n-\t\207c\6\301\322(=G\311\375\3611\205>\202\305y\356h\v" - #"Z\264\23,\376\217\23\16\2250\314\301\377^\373\277}\364L\r\2;\354gq" - #"\326\5^:}\271\177\"\214\302\f\202" - #"\245\346\304\226\17\224\343`>\246\320\372" - #"\\\216L\"\22y\316\35mF\263v" - #"\202\245\344\216\362\316L\314\304L\266C" - #"\206\"4\e\331\265\250e;l\320\270\177\"\214\302\f\202e \232\226jP\340" - #"9w\264\37\375\335\350\326\250\a\a\0;\354\0\2423\243=Z\272sG\16r" - #"\220\303|\324Y\230u\20\a\231\17+.$X\252\320a\227\20@\2\22\270\215" - #"au\240#\26\261\241Zf g \343\224\375\224\342\352\262]v\251'::" - #"\332\22fA\32f\332f\6\3323uT\362\221_\t\356\212V\32\b\tV\360" - #"\fb\260\a=L\312K\372\206\347\240{+ZS\300\370S\352\1\347\355sz" - #"zzj\373j\321\6\311uEoA&\314\306\354\315%\233U\226\3262\23$" - #"X\301\323\215\356\30\304\204 D\353\211x>" - #"\377\254iN\203L\26\262\220\251\351\fj9" -) 500 -( - #"\4\255NO\25\240 \346\3331*K" - #"k\231\t\22\254\340\321\272\260\214\302\30" - #"\367\260\322\221\36\226\23\246x\31\314\227" - #"]\352\251C\35\3524\319\26\261!\b\21\240\202\243^\220`\5\217n\202\305" - #"s\241d\355\272^+\244#}\361\272\305\222\267\226\356\234P\217z\324k58" - #"\305\335\335!\301\n\36}\266\b\1\204\"4\0061N8u\230+PtX\22" - #"\362\237\331p\b\207pX\253\301\vP" - #"P\201\n\255F\27\r\22\254\340\351F" - #"\267>\202\5 \36\361|\256\v\332\320" - #"\226\f\226\335\275\206\223\202\224Nt\16" - #"`@\323Y\324\320\200\6\362\260\364\201\4+0\334K_>\361\374\23:\244\271" - #"\313p\233\331p\24G\265\366\260\254\260\306!\216\333\"3N8\307a\234vg" - #"\376\310\303r\207\n\370\5\206{\351\313" - #"uX7\25:\265\241\216G|\27\272\364\231\313\177z\321\e\202\220HDj=" - #"Q*R\271\25\254z\324O\307t\355\332\333d#\273\tM\242T1\324\32\22" - #"\254\340\321\347 \241\f\237\307\tu\b" - #"`\311\360\\\263\341\372\37]?x\325 \0\213\305b\265Z\231g\36\204!," - #"\31\311\215hd[\316TPhI\301,P\334\375\e\30,\t\227,Y\262\177\377~\371" - #"\353}\373\366\251\37P\b\234\320\273\334" - #"\313\257\36\370\325`\301\340/\356\377\5" - #"\0-\216\200\4\212\376\36\26\17\202\345" - #"\216\23N\271\362\217\16s\221\207%\23\274\207e\267\333322\0dffZ" - #"\256$3\223\357\212\266,\350\202\336\207" - #"\221\377\364\333?\335|\337\315\370\346o" - #"\273\256s{C\267\254Q\31\16\5K\267\210;\200Ld\266\241\255\17}\372L" - #"\307-\301\v\326\344\311\223\337x\343\r\0MMM\322" - #"\22545q]nM\r\321\321C\375\246\252\217W'" -) 500 -( - #"\206\352\264A&\303\333.\241\316\36V" - #"2\222\235p\366\243_\267\31GE\267\0\26\0+\254)H\341\274\220\241\16\4" - #"\277$\254\257\327\254d\31\307\364\364\364" - #"\0\260X-\326)\326\226\257t\215\1" - #"\363\266K\250\263`)\251X\374\264\320" - #"\321\323\303\3027a\2541^\263\201A" - #"\320}\336\274y\357\275\367\236\362\355{" - #"\357\2757o\336<\365\303r\315d\330a\327mG_f*\246\366\240G\3379" - #"}\241\363\222\20\374U\305\222+a\3516\335tL\327\260t\274 0\20\254?" - #"\374\341\17\217?\376\370\303\17?<0" - #"0\360\360\303\17?\376\370\343\177\370\303" - #"\37\324\17\3135q\3209\t\v@(B\355\260\353U1p\24z\320c\201%" - #"\nQzN\312[U\254\3038\254E" - #"\267\347\221\230\201\31t\242\220\201`\315" - #"\2325\353\300\201\3\345\345\345\t\t\t" - #"_}\365UYY\331\254Y\263\324\17" - #"\3135\261\3209\315\375\362\264z\353\244" - #"w\332\320\246\347zP\206+\17\253\37\375\355hOG\272n3\222\207\5V\325" - #"\32\316\236={\372\364\351\310\310\310S" - #"\247N\2359s\206\311\230\\\23g\214`% \1\361\372O\353\5\335j\215\272" - #"\223\206\264f4\353<\351H\34\305\321\4$\350Y\2668\a9Z\365k\25\a" - #"\6\202\265{\367\356\5\v\26\334{\357" - #"\275\r\r\r\367\336{\357\202\5\vv\357\336\255~X\256\2115`I\bcV" - #"\242\336\3219\342.\303Cf\203r\324" - #"a\372M\323\333v\351z\30\233\223#" - #"\320\306\302@\260\36}\364\321\342\342\342" - #"\207\37~\30\300\303\17?\\\\\\\374" - #"\350\243\217\252\37\226k\fZ\22\306!" - #"\216\23\17K\377\210;\370\20,\345\250" - #"\303\213\177~\261\277N\357\34\vJ\37e\220\351^^^\356\376\355\332\265k" - #"\327\256]\253~X\2561B\260\354v{\357\272^d\301b\261DGG\313" -) 500 -( - #"\t\26F\321\212\326|\344\353<\251\222" - #"\212\245u\375)\1778\202#\372/O\351\b4\3\17+11q\314e\272\e" - #"!X\275\275\275\357\275\360\36\342!I" - #"Roo\257\316\263{`\310\222\220\253\252XG`\300\216%yX\f\4\353\374" - #"\371\363\16\207C\316q/--\215\217" - #"\217\177\375\365\327\325\17\3135\6\5\223" - #"\306x\f\v\34\254\n\225\243\16\37T|\20w^\3577\203\216@3+\340'" - #"\177\275d\311\22\375\v\370\351YqT~\21S1;n\266\376\305\3059Ik" - #"\30\300\300q\34O@\202\376S\e\236" - #"\331\320\323\323#\307\260\"\v\"k>\252\321yvc3\ex\2508j\206F" - #"\252\32\225@T\16\30\313}\236\225\327" - #"\a1\30\216\360\v]\27t\316t\217" - #"\216\216\316\376V6\216\301b\261\244\244" - #"\30\340\335(\34\303\261)\230\22j\304" - #"/\217\341\36\326\0201\260\300b\207]" - #"\347i\345#\320FE\361\334?\21\372" - #"\317.\303\246\200\237R\304\335\364\5\374\0t\243[\317~9\n===\322\327" - #"\22\200\257\245\257[Z\214,eg\310\26\241\f/\251X\231\310\204\1\201Z\e" - #"l\351H\37\313\253B\6\177$\267m\333v\363\3157\237>}\32@dd\344" - #"G\37}d\342\2~\320\275\375\204'" - #"]\350\312\352\232\204I\206\31\0\264\243" - #"\335@\301\342\302\303\3120F\260\0\344" - #"!\257\006531\323\220\331\r\207M\1\277S\247N\251\37G\24\f\27\254\316" - #"\254\316i\230f\230\1@\e\332\222\220d\310\324\374\b\226QE#r\221[\213" - #"ZC\246\346\1j\244\0320\372\367\313" - #"\271\202N\335+\a\16\243\35\355F\t\26/U\2612\240\347)Bw\362\220\367" - #"\253?\375\312\275\256\274!f\30\5\tV\300\350\337/\347\n\364/u" - #":\f\3\5\213\227T,\343<\254<\344e\337\226\355^W\336\0203\214" -) 500 -( - #"\202\4+`\f_\22\32.X\6\6\335\361\315\252\320\243{\215\336F\30'X" - #"\3230\255\5-c\266V2\tV\300t\243{\252\201U\2518\20\254\16t\350" - #"\326?u8r*\226G\367\32\335f\267\331l\2260\vb\221i\3134d9" - #"f\2055\25\251\215h\324\177j\36 " - #"\301\n\230.t\31\271$\354\204\261\315" - #"\276\344\206\317\206d\215\312\244#\335\300" - #"\314\6\227\313u\270\357\360\264\361\323$" - #"\227a\313\261\231\230Y\215jC\2466" - #"\34\22\254\2001X\260\214\366\260\216\341X,b\365OCS0\274Aa\3\32" - #"\262\220e\240\1cy\2430x\301\232" - #"?\177\276\371\317\fz\303\250\30\326\320\251\240.T8+\2]\2140\\\274\30" - #"\30q\227\237\302\360\314\206\0064\4\235" - #"V\302\344\215\220S\261\324\217#\"\301" - #"\v\326\177\375\327\177=\377\374\363\267\337" - #"~\273\326IX\355\355\355EEE\221\221\221EEE\35\206\323\30\255\0\0 " - #"\0IDAT\35\35\232\3165*\3\308\205S\372\364\316\364@\216\332\364\37" - #"\353\267\305\332.\270\2k:\335\337\317" - #",\17\240\3\35F\t\226\374\24\206\367\254oBS\320Y\243L\336\bcK\217" - #"\272\3402\260\356i\360\2025m\332\264" - #"\277\376\365\257\311\311\311\v\26,\250\250" - #"\250`h\223\a\5\5\5\0v\356\334\t ?_\357\32L\36\234\300\211(D" - #"\31\270 \222[\r\e\262*\224]\274;\177|\347\373\317\275o`\372O\22\222" - #"\272\3205\200\1\243\fhD\243\261K" - #"\302k\343\256\255\275P\v\e,\26\213" - #"\335\256\367y\306z\324\343\222\316s^FU\f+,,\354\205\27^\370\356w" - #"\277;\177\376|\215\352a9\235\316\213" - #"\27/\26\27\27_u\325U\305\305\305\27/^\354\356\36\275D\254\237" - #"\37\247 >u>\326\203l'\365qY\22\222\332\321\36\320h~\342{" -) 500 -( - #"\264\241\215\271dl~d3\223\1\3\275L\306\nk\34\342|\324l\320\372\215" - #"\360\332\335K\213b!#\375\250\327\331" - #";=|:\262\2\250\214\306\360\377\244\32FF\374\325\6\335KJJ\336x\343" - #"\215\375\373\367k\324\371y\323\246M\17" - #"=\364\220\362mQQ\321\246M\233F\275\313O\307;\b\377\334GN\3\333I" - #"}\\\226\210\304\16t\0044\232\237\370" - #"5Z\22\222\220\244\333\303z\305w\30KS\333\\pu\2423\ri\301\215\346" - #"?\276\a\234\201\31\1\265pe\370\177" - #"R\v##\376\252\316\22\226\224\224\254_\277~\333\266ms\347\316ee\220\a" - #"\257\275\366\332\221#\227\v;n\334\270" - #"133s\363f\177\377\3023\307\340\254Q\0W\n\226\1$\303\300\254Q\31" - #"\3\343\356\315hNF\262!\245u\334" - #"\311\206\236=\247\257\240\6\206F\374\245`\331\261cGbbbyyy\320#" - #"\370CDD\204\323\351T\276\355\352\352" - #"\212\210\210p\277@\357\377\257G\201\347" - #"\365\236\323\223'\201\377c\334\354\0350" - #"(\346\356\306\277\0\2770h\352\233\201" - #"\355\6M\355\316\6\340?\r\232\372\20\220\203\276\276>M?\370#\21\274`-" - #"Z\264H\251\214\254\35O<\361\304#" - #"\217<\242|\273q\343\306'\237|\322" - #"\375\2x\323\\\257/2\271\354\t\351\211_I\277b5Zp\227\275.\275\276" - #"NZ\247\363\2442.\311\205>\fH" - #"\3:\317\353q\331\357\245\337\177_\372\376H7jj\333fi\363C\322CZ" - #"O:\352\225\16\311\201/\300|\336Q/\273(]\234 M\2005x\335PI" - #"\360\236\355\276}\373\202\276\327\177<\326\200\36+D\375q\302iT!$\5\3" - #"\227\204\307p\fN\204$\e\266I*c\340\222\260\21\21530\303\220" - #"\251\335\t4\206\305\212z\324\247#" - #"\275\246\337\2605!\357\231\356\261\261" -) 500 -( - #"\261\343\307\217/***+++**\32?~\374\324\251\243\237\343\v\v\v" - #"\363gp?/s\307G\320\235\355\244>.s\27\254 \36!\270Ie\3321" - #"\264?\251\333\303z%\ri{\332\367" - #"(\345\366=\266\3665\265m\244\234\6\266o\304\250\3N\306d\\B7\272u" - #"~#jP\223\207<\177\206\322\b\336" - #"\5\v\200\234\344\265r\345J\0\225\225" - #"\225\376\334r\361\342E\206\227\271s\34" - #"\307\247`\212\16\223\372\270,\36\361\307" - #"p,\240\321\374\304\367hv\273}\361" - #"\235\213\321\16\213\3052a\302\4\365\3" - #"\6z\231B\22\222.M\271\344\222\\\200\227\255}M\337\210&4y\25,\266" - #"o\204_\3\326\243\36\365\272\375\326\311" - #"\34\302\241\34\344\3703\224F\b XIII\305\305\305N\247\263\270\27081" - #"\321\260\"\0012<\354\22F\"\22\300\327\370Z\347y{{{\237y\367\31\264" - #"\31\337\30\321\n+\216A\377|w\27\\\35\3500\252t\237'\207\241\177\276{" - #"5\252\215\255\316,\200`qE7\272\r\27,\4\36\306b\265`Q\226\204\206" - #"p\305S4\31\320\310T}N\3\313\225c\35\364\357FQ\213ZZ\22\n\303" - #"\31\234\261\300\22\201\b\243\rA\2\22" - #"\224U\241?\260Z\260t\240\303@\301" - #"r\177\212\260\316\260\345\377\260\34\320\265" - #"\351Y#\32Un\271\260\\9\326C\347\36\205}\350kE\253\261\307\222H\260" - #"\2\200\207\365\240L\"\22\365wu\242" - #"\243\243\377\337\227\377\17m\3067F\4" - #"\360/\353\376\345'/\377\4\200$I\2725=\363z(G\177\206\352v\34\302" - #"\207\r\37\352y\250\263\26\265\3230\315" - #"\220\226\210\nfh\244\252\e\6\327\32u#\21\211\1yXL\350\351\351IB" - #"RGG\207\244\177\276\3560\322\221^\216r\235'" - #"mB\23\17\202%\27\16t\301\25\205\250\323\256\323" -) 500 -( - #"\272\315{\20\aga\226n\323y\205<\254\0\30\343\36\226\\kTw\235\364" - #"N&2\233\300\354\310\252\237\250\251\204" - #"\305\34\375\233\252V\240\242\0\5\272M" - #"\347\25\22\254\0\340\312\303\322?wT" - #"\2565\212A\235\247\365N\0062\364\17\272s%X\320\275\222_%*gc\266" - #"n\323y\205\4+\0\306\270`\31Xkt8v\330-\260\350YHq\244:" - #"\r\6\242s\255\344*T\221\207%\22$X\206\327ipG\347V[\234\324i" - #"pGO\17\353\30\216\205\"t\244\254i\335 \301\n\0\37i\356:\23\213\330" - #"\22389\250\357\362\254\35\355\6v\367" - #"\32N\272\276\335\227\325\34740G\317Z\311\34" - #"+\254iHk@\203\16sU\241\312\360\210;H\260\2\202\37\17\vW\36\201" - #"\326\ac;\324\17G\347\30\26\207\202" - #"\5\35\303X\225\250\314\207\301-``\16\301\222;_h\321\5@\36yh\212" - #"P\313\311\376\223\2064\370\362J<\342" - #"u\356\235cl\207\372\341\350\34\303\32" - #"\251N\203\261\350\23\306\352C\337Q\34" - #"\2357q\236\362\2110\n3\b\226F\213\24\271I\214\364M\31\306c\3\307\342" - #"\254q\0066\370\362@\347%\241\341\35" - #"\352\207\223\2064$\300\5=\26\247|" - #"\325ipC\237\266\365\225\250\314A\216" - #"\353\354\345O\204Q\230A\260\364\201\253" - #"\365 t_\22\32\336\241\336\3\233\315f\265Xq\fa\323\302t8" - #"O\307aN\203L\36\362tH\305*C\331<\314\323z\26\177 \301" -) 500 -( - #"\362\27\16\5\253\23\235\272M\307\333z" - #"P\366\177\227\245/\373\254\3413\35v\08\314i\220\311BV\vZ\264v3" - #"\377\206\277\315\301\34M\247\360\23\22," - #"\177\351B\27W\202\245\363\371\3476\264" - #"\245\300\340\n\r\303\311B\226>'\n" - #"9\314i\220\261\301\226\205,\255\235\254" - #"\380\37\3635\235\302OH\260\374\305\tg\34\342\214\266\3422:/\t\333" - #"\320\306\317\271\34\205t\244\353s\242\220" - #"\317-B\231|\344W\302\257\322\341\301q\1\27\32\321hl\241Q\5\22,\177" - #"\341mI\30\213\330\36\364\f`@\237\351\270:H\250\240\351\21he\233\330b" - #"\261\274\264\343%n\5k6fW\241J\273\361\17\342`\16rl\320\257\360\226" - #"\17H\260\374\2057\301\nAH\fb\272\321\255\317tcP\260\3440\31\0I" - #"\222\322nH\343\252N\203;\2631[" - #"S\17\213\237\210;H\260\374\2077\301" - #"\202\276\231\r\274e\215\312\350Sd\206\303:\r\356h\275$,G9\t\226x" - #"t\241\213\253\30\26\364\rc\361\351a" - #"\311EfN\342\244\246\263p\233\323 #\247\233h\267eL\202%$\\\35$" - #"\224\211G\374\355?\272]\211\263h\227" - #"\2164\200\201\238\301\233^\313\244#" - #"\275\31\315\232N\301mN\203\302,\314" - #":\210\203Z\214\334\207\276F4\32\333)\307\35\22,\277\30\300@/z'c" - #"\262\321\206\\A\2\22\376\371\305\177V" - #"\342,\332\245#u\240#\26\261|\272\30:d6p\233\323\240P\200\202\nT" - #"h1r-j\263\220\245C5\b?!\301\362\213\3438\36\203\30~\362\274e" - #"t[\22\362\271\36\224\321!\214\305s" - #"N\203\214v\e\205\234\234yV \301\362\v\16#\356\0\22\220\240O\262;o" - #"\265F\335\321!\25\213\177\301\322.\356\316IU\31" - #"\5\22,\277\340V\260\364\361\260\370\314\32\225\321\301" -) 500 -( - #"\303\342\255\367\304pr\220s\4G\372\320\307|d\36\32O\270C\202\345\27|" - #"\nV\34\342\364\361\260x;H\350\216vAw\273\335n\261X`C\363\305\346" - #"\253c\257\326b\nVXa\315D\346a\34f>r5\252y\250\214\254@\202" - #"\345\27|\n\226\\\331]\207dw\236" - #"\227\204\251H\355Dg?\372\231\217\334" - #"\333\333+I\02221}\374\364\336\356^\346\343\263E\2130V':-\260p" - #"\265;L\202\345\27\34&a\1\bE\350TL\325aU\330\212Vn\5\313\n" - #"k\22\2224\314l\310A\16r\264\32\234\35Zl\24V\240\202\253\210;\314!" - #"X:T\34\335\374\326\346\37\257\373\261" - #"\16u\227\2%\tI:\264\200\346y\227\20@\26\2624\254k\236\215ldk" - #"58;\2648\240S\205*w\301r\377D\30\205\31\4K\207\212\2437|\357" - #"\206O\337\374\224\207\316\v\36$!I" - #"\353\6\205\375\350?\211\223\34:\230\n" - #"\32\265\255\217\216\216\266X,\230\216\247" - #"\357}:%\205\273\322:\36\314\302,\346\245G=Z{\271\177\"\214\302\f\202" - #"\245\3\235\350\214G\274\321Vx\341\243" - #"\227>Z\373\343\265\0,\26\213\335n" - #"\327b\212v\264\307!\216\317\254Q\231" - #"\351\230^\217z\346\303\366\364\364H\222" - #"\204\34\354\371\217=---\314\307g" - #"\213\374\373\311v\23\206\223\326^\356\220" - #"`\371\5\207\347rd.6]|\344\331G\0H\222\324\333\31320\254\370\377" - #"\31\327e\264\356me82s4\362" - #"\260\206\230\6\316\323\334\25\330\36\3209" - #"\217\363\315h\346m9L\202\345\v\371C\213Pt\367w'\207s\31un\203" - #"F1,\245\270\312\233\273\337\274\373\232" - #"\273\265\230\202\25\3230\255\21\215Z" - #"\214,W\357\341\244\335\367\250\260\335(,CY\36\362" - #"8)\203\245@\202\345\213\241\17\355T\304[\343]\27" -) 500 -( - #"\270\v`\1@\eZ\241\255\373\323\202\226T\244j:\205J2\220\321\216v-" - #"\352\232\37\306a\275Z\3013\200\355F\341>\354+D!\253\321XA\202\345\a" - #"\361\3406\344\34y&r\177\307~\0\26\213E\243\3000\237\225\260\334\tEh" - #"\22\222\216\342(\363\221\17\3430\352\230" - #"\217\252\25l\17\350|\201/\26a\21" - #"\253\321XA\202\345\a\261\374\n\326\211" - #"\203'l\2116\204B\222$\215\2\303\374\v\26\200Ldj\261*l@\203\6" - #"\321|\255\310F\366\21\34\271\200\vLF\373\22_.\300\2&C1\204\4\313" - #"\17\342\301\347\26!\276\311\35\325\264\275)\377KBh\266Qx\b:\264Uf" - #"F\30\302\362\220w\0\a\324\17\325\204\246\20\204pXd\225\4\313\178^\22" - #"\2H\202\266I\235-h\341\260\301\227\aY\310\322\302\303\252C\235@KB\0" - #"\213\260\350\v|\241~\234/\360\305B,T?\16sH\260\374\200\343%!d" - #"\301\322\356`r4B\20\22\211H\315&`\203\26\231\rr{z\215\253\2312" - #"f\1\26\354\307~\365\343\354\307~\16" - #"\327\203 \301\362\v\216\227\204\0\222\221" - #"\254\241\3\224\n\376\327\203\320fI\30" - #"17\342B\315\5\270\240i\371i\266\\\203k\366b\257\372q\366b/\207[" - #"\204 \301\362\213XpX\252A!\21Z\226~I\6\377\21whS\263\341\255" - #"\257\336Z\223\267F\243\203_lQ\262|\323,i\335]\335*7L\317\341\\" - #"=\352\347b.\e\343\230B\202\345\a\t\334{X\332I\212 \36\226\r\266t" - #"\244\263\r8U\243\232\237\346\v\276qo\241x{\334\355*\235\254=\3303\17" - #"\363\302\21\316\310:\226\220`\371b\250" - #"\204[\34\246M\234\246\321I=\365h+X\202xX\0\362\220" - #"W\203\32\206\3\326\240F\24\301rg!\26\252\214\273\357\306\356\245" -) 500 -( - #"X\312\310\34\306\220`\371\242\267\267\367" - #"\264t\32\203\220\3162>\251\307\20\215v\t\207\304:\5O~\357In\305\332" - #"\235\\\344\326\242\226\341\200\265\250\25Q" - #"\260\324o\24\356\302\256\353p\35+{\330B\2025\n]\350\202\323h#F\306" - #"f\263\245XS0\31\26+\343\300\360" - #"P\275\315d\224\276U\312\255X\273\223" - #"\213\\\206IS.\270Z\321\312y\357" - #"\t\257\314\305\334:\324\235\307\371\340n" - #"?\207s\aq\220\317\234\6\230A\260" - #"\352a\t\325\252\200\37\200\354\245\331\350" - #"\204\\\264\214\303\255\"\227\313%\365K" - #"\251a\251M\375M\232\4\206\5\211a\1\230\211\231\f\vB\325\241.\35\351V" - #"XY\r\250\e\0230a.\346\356\301\236\340n\337\203=s1w\2&\f\377" - #"\21\25\360c\301\267\3209\320\251Q\1" - #"\277\350\350h\304\2]\0\220\222\222\302\355VQ*R\2658\2\335\217~LA" - #"\202\246y\364\354\310BV\vZXm" - #"\24\36\302\241\\\3442\31J\177\256\305" - #"\265\245(\r\356^\a\34K\260\304\353" - #"\217\250\200\37\v\234pj\266f\353\351" - #"\351y\376\335\347\321\251\341I=&h\321\233/::\3326\335\206\16X-V" - #"\376\353m\2\260\301\226\2064V\e\205\2m\21\16\347z\\\3779>\17\356\336" - #"\277\340/\313\260\214\255=\f!\301\32\5\316cX2ZxX===\237\326" - #"\177\212f\336\305\332\35\206a,\241=\254\205XX\205\252 \302Xgq\266\32" - #"\325\334\6\260`\16\301\352\222\327l\332" - #"\320\311\270\352\254&\244!M\213\2661" - #"Mh\322\246.\236V\344!\217U\30\253\32\32531\223\311P:0\264\245\373" - #"M\245\354\bD\314\301\234 \302X%()D\241\327\0\26'\210/X]\332" - #"zXN8\265\324C6\244!\255\5\354\235\240f4kPcJCXyX}\350\23k\213phK" -) 500 -( - #"\327\255R\266\377a,%\224n\261X" - #"\276\373\352w\227c\271\266\266\252C|\301\322xI8\326=,\315J\245k\201" - #"\232\215B\367\317\355\304\253'N\3034" - #"\21\267\b\25\374\17c)Y\362\227\244K\t\367'\254\304J\215MS\5\t\326" - #"(ti\273\342dC\22\222\234p2o\1\335\f\r\373\223j\201\274Q\30\\" - #"\255d\367\323-\277\373\362w\\\365g" - #"\17\202\205XX\215\35238\343\377-" - #"\207p(\24\241\234w\334 \301\362\305" - #"\0\6z\320\203\343\32\r\317\f+\254q\210S\23ww\367/\224t\263F4" - #"\212\345a\331`\313B\226\372|w\16" - #"\333[\371f\250\205\242[\245\354\bD" - #"\334\200\e\266b\253\377\203|\214\2179" - #"w\257`\6\301\322\322\5\352F\367dL\306\240F\303\263$\rij\316\350\273" - #"\373\27r\272\331\t\234\bE(\4Hq\277\2&u\315+Q9\e\263\231\330" - #"\243\17C-\24q\305\226\356\32\254y\37\357\373?\310'\370d\5Vhb\37" - #";\304\27,-=\254.t\361\\X\306\35\346\231\r\315hNG:\303\1u" - #"\300f\263\275\371\217o\256\377\315z\225" - #"'\37\252Q-\372\222\20\300w\360\35\a\34\376\256\ncP\216rn\317<+" - #"\210/X'\320\213\336Am\274\240Nt\212\222\347\235\216t\266\1\247&4\t" - #"\264M&\343r\271>}\372S\24@\315\311\207c86\16\343x\2561\353'" - #"\2230i\31\226\371\273*\334\200\333p[\4\"46J-\342\v\326 \354\260" - #"\37\327&\316t\313\17o\331\376\373\355" - #"\200\0005'S\221\312\266\317\325\21\34" - #"\311@\6\303\1\365!\37\371\310W5\202p\353A\37\370\271*\224 \341~\334" - #"\207\373t0I%|\t\226\303\341\210\211\211\211\211\211\331\263g\217" - #"\307\353\223&M\32\376\272L,b5Z\25\376\342\225_<\371\203'" -) 500 -( - #"\1U\177\261\365\201y*V3\2329l\2322*\261\210\305%UaMs\254" - #"\ae\276\203\357\224\242\364$N\372\276" - #"\254\24\245p\201\317\232\310\36p$Xv\273}\325\252U[\267n\335\262e\313" - #"\332\265k\25m*))\271\373\356\273" - #"w\357\336\275c\307\216\273\356\272k\347" - #"\316\235\0367j'X]\350\342\271\326\250;r*\226\327\315\276\340hBS&" - #"2Y\231\247+\225P\323\0Y\270-B\37L\302\244\325X\375{\374\336\367e" - #"/\341%\274\f\v\214,\303\340/\0227\344\346\346*_\227\226\226FEE\311" - #"_GEE9\34\216\341\257\313\0\270G\272\347u\351u-L\272C\272\343=" - #"\351=\256\376\227F\302%\271\302\2440\227ty\263/\b\334o\264\34\265(z" - #"e\265Z\331X\251\v\370\r\236\221\236\t\362^`\2264\253B\252`k\222>" - #"x}\337wI\273r\244\234K\322\245\221\356\212\234\36\211\223@\f\0DGG" - #"\a=\221>p\344a\325\324\\\256o{\313-\267(ewN\235:\265x\361" - #"b\371\353%K\226\234:u\312\343\3068\304i\347a\211\22|\265\302\32\217x" - #"V\e\205.\270\302R\303\\\215C\345D8_\16{R\211\3403\e&\240\t" - #"M9\310aj\220\221\\\213k%H\168F\272\340\364\375\247\177l\3771N" - #"^>\326\3033\34\t\226;\275\275\275" - #"===~^\254\335\222\360\30\216\211\262$\4\220\205,VGi\232\321\234\214" - #"dQ\317\246T\4\263$\34:?<\37\347\277<\37g\27\343\257\224\202\34\n" - #"\200\267\335!\v,\377\200\177x\t/y\275\261\3\35\370>\236\300\23zX\311" - #"\2]\5+33\3232\214\314L\317" - #"@\211\303\341\210\212\212\362\177\330\237|\377'\277\371\343oX\305" - #"n\334\303@G\316\35\2316i\32\0\17\233\371\3341dx\242" -) 500 -( - #"\260\21\215\242\6\260\0\324\341\b\216\\" - #"\300\205\200n\32:?\274\0EW\27" - #"\361\357hx\240\224\326\363\352\16\337\203" - #"{>\303g^\377\230=\207\347\360:" - #"b\344\5\341\b\270\177\"\306V\305\321" - #"\246\246\246\341\213\322\246\246+\376\37\345" - #"\20\373\360\310\272\17>}\343\323\e\356" - #"\271\301\307\e\26\20\312{\377\265\364\365" - #"\304\210\211\322\31/+v>\227H\31\310`U\306\257\21\215\302%a]\246\17" - #"\271\310-CY0\367.\302\",bm\2201(B3\3312\371\364\243\2477" - #"`\303%\\r\277\300\1\307\37\361\307" - #"\250\327\242<\216\365x\340\256\2062:" - #"=\2007\370Z\22\226\224\224\254_\277" - #"~\333\266ms\347^n\342\30\25\25" - #"\245\354\30zu\276\342\20\247\305\351\234" - #"Nt\n\264\36\204\272v\355\36\5\225" - #"\352Q\317\371!X\337\24\242p\37\366" - #"\5w\3475\270\206\2659\306\340~\334" - #"\252\177s\177\30\302\236\303s\312OK" - #"Pr7\356\336\216\355\275u\227K\323\bP\251QM\304\236-;v\354HL" - #"L,//\367x\275\274\274<11" - #"\261\244\244\304\353\5\0\272\244\256\251\322" - #"T\346\366\354\226v/\221\226H\206\356" - #"\211\4\304\227\322\227s\245\271RP\6" - #"\313\267(\377.\227\226\177,}\314\334" - #"B}\0\360\226\364\326m\322m\1\335\25\35\35\215t\310\245\204RRR4\262" - #"M\177\224_\206\6\251\1'\200b\340*\240\308\16\207\344\30~Y@c\352" - #"\17G\37\305\264\2644w%\315\310\310P~TZZ\32\31\31\31\31\31\251\344" - #"7(\0\30\220\6\254\222u@\32`k\317\273\322\273k\2445\2228\202uB" - #":\21%EI,\4+S\312\254\227\352\231[\250\17\0\216HG\342\244\270@" - #"o|Kz\v\37\210\361^\373\217\373/C\233\324\366\240" - #"\364 \234xPz\260]j\37\351\262\200\306\324\31\213d" -) 500 -( - #"\350\212T=\26\213E\222\244x\304\177" - #"\205\257\330\256\340^\300\vGp\344\5\274 O\301pd\355\210Ft#\32'" - #"[&\aj\260\374\214C\377\206Y\306" - #"\367\215?\2033\241\b\325\310NM\221\237\"\tI\245(\r\350t\321\3x\340" - #"\305\237\274(=#\306{\355'\303\177{\275\376>\a\364Kn\340'\202\257\30" - #"V\320\304!\216yaP\201\222\260\24" - #"\202\216\273\273\27T\212/\214OF\262" - #"\240j\245\260\0\v\344\6\310\376g\377" - #"\177\1\225-\223\t\3151\211`\305#" - #"\236y\334]D\301\252\376\260\372\352;" - #"\257\3067\261s\377ot/\250\364\332" - #"\347\257\t\234\323\360\r\v\260`?\366" - #"\303[\251/\257\22v\26g\e\320\200" - #"\257\f4\231\30\35\223\b\226\26\e\205" - #"\302\355\22\2p\325\272\236z\367)@" - #"U\326\262\350[\2042\205(\334\213\275" - #"^\1774\\\302\0\224\240\344\32\\\23" - #"`\362\26\2417\346\21,-\226\204\242" - #"T\357\273\314Q\6e\330\5>\366\354" - #"\306\\\314\255G\3759\234\363\363\372O" - #"\361)\347\rc\b\230I\260\230\237\316" - #"\21\321\303b\322\350\246\1\r\3230\215\2119\0062\1\23\nQX\202\22\177." - #"\226 }\204\217\370\257hN\230D\260" - #"\342\21\317\326\303\32\300\300)\234\232\202" - #")\f\307\324\201\310\236\310\2774\377\5" - #"#g-\373\203\210\265F\275\262\34\313" - #"?\305\247\376\\)D\303\30\2\246\21,\3461\254c86\25SC\20\302p" - #"L\358^v||\372x\330\202\317Zv\301\325\201\16\21K\367\r\347&\334" - #"\364\t>\361\347\312?\343\317\374\367_" - #"\b\24\217\323\v#]\346\343\3404\207\230G\260\330zXmhKF2\303\1" - #"\365\301\nk\nR\324\270G\rhHE\252\250u\32\256$\27\271!\b\251" - #"A\315\250W\232r=8\274\35\264W|\37\234\346\r\223\b\26\363\264\206\16t" -) 500 -( - #"$!\211\341\200\2721\35\252V6Bo\21\16\367)n\300\r\237\3413\337w" - #"\235\301\231\257\360\325m\321\267\t\344h" - #"\4\207\237>\27\317\230D\260&b\242" - #"\5\226\200\372\334\372\246\25\255\"zX" - #"\0r\220\203\31\301\337~\30\207\305-_7\334\247X\211\225\37\341#\337wm" - #"\301\226\ep\203\253W$G#8\374\364\271x\306$\202\5\326a\254\16t$" - #"\"\221\325hz2\226=\254\341,\305" - #"\322\317\277\376\3342\371\n\267\302\303\321" - #"\370\0\37\334\216\333\r6T\3\206\267\2036\1\246\22,\206a,AcX\0" - #"f`\206\32\17\351\20\16\315P\343\241q\306DL\224\266HO\237x\32nn" - #"\305\25\216\306\245\336R\224\336\202[\f" - #"6T\3\274\266\203\26\0353\b\226|" - #"\306b\337\177\357c\350a\265\241\355\177.\371\237J}E\236\v\215z0\0033" - #"\220\35\360]\312V\321\376S\373\257\217" - #"\277\236\275Y\272\340\335\247x\r\257\340" - #"\225\21;\302\254\3062,\233\200\t:\231h(*}.\345H\223\6\246\371\213" - #"\330\a\\e\344?#\17\341!\206\202\325\216\366fG\263\34w\27\250Z\3\200" - #"\311\230\214K\350F\367TL\365\377.9j\343\204s&f\36\357\324\244+\255" - #"\16\310}\0<\337\257=\bG\370\210=\330\327`\r\326\350`\e\17x\377\377" - #"\361\e%\264g\240f\231\301\303\222a" - #"\30\303\32\300\300\t\234\20\356\344\363e" - #"\352Q\217\372\340\3563S\0K&::\272\372\261jl\270\354V\\v4\342" - #",\343\26\2173_\6\226\2111\203\207" - #"%\23\2078\37\275\214\2B\316\32\25" - #"\261\276\212\315f\353\357\357\307\177b\311" - #"\357\226X\337\260\6\272\333U\207\272\354" - #" \326\223|\323\323\323s\22''\367Ln\224\206:k(\216\306c" - #"]\217Y`\231\204IF\333H\370\213y<,\206\251X\342F\334\345$" -) 500 -( - #"\300M\3537=\366\37\217\5\2617o\262\210\273B\fb\360O\270\a\367\fb" - #"\360\362\253\211x\3o\b\324\341\212\200" - #"\231\4\213\341\222\260\35\355\202\n\226\314" - #"\f\314\250C]\0207\326\241\316\224\202" - #"\5\0\257\340[\370\326\363x\376\362+" - #"?\306\275\270\327w\207+\2027\304[" - #"\365\214\4\303\264\206v\264\v\232\204%" - #"3\35\323)\206\345\211\204\337\342\267\v" - #"\261\360(\216\376\35\376\356u\274\216{\260\21\e\2156\213\b\f\363xXS0" - #"\245\27\275\3\30P?T;\332\5=" - #"\227#\223\211\3146\264\271\20\330\222\260" - #"\17}\35\350\b\250\b\272Xd!K\356\b=tl\260\0\1m\244\22<`" - #"\36\301\nEh\34\342\332\321\256~(qcX26\330\246aZ-j\3\272" - #"\253\22\225\271\310\265A\200\\\263\240IBR1\212\235p\26\243\30\35F[C" - #"\4\216y\4\v@\nRZ\321\252~\34\321\5\v@>\362+Q\31\320-e" - #"(\233\207y\32\331C\350\217Xuc\374\304<1,\260\23,\321\227\204\0f" - #"cv\25\252\2\272\245\34\345\v\261P#{\b\3751\345\21n\362\260<\351G" - #"\377I\234\248k\24\0000\v\263\16" - #"\342`@\267\374\r\177\233\2039\32\331" - #"\303\25\246t=\306\b\246\22\254d$" - #"\267\241M\345 \355h\217C\234\210Y" - #"\243\356\24\240\340o\370\233\377\327_\300" - #"\205z\324\317\306l\355L2\212\341\362$V\311:\206\230@\251M%XL<" - #"\254V\264\246@\370Z\34\261\210\rA\210\377y\36\aq0\a9\246\214\270\217" - #"Yy\32\216\t\376+H\260<1\207`\1\230\215\331\376\307\335)\342N\b\201" - #"\331\4\253\5j\353\376\230F\260\362\221" - #"\357\177\334\275\34\345$X\4\377\230" - #"J\260\242\0205\16\343z\241\252\366\253\tr\32d|" - #"l\24\16\357\325N\202E\b\201\251\4\v,V\205\246" -) 500 -( - #"\21,\37\e\205\36\275\332\317\341\\\23" - #"\232\362\220\247\257\201\4\0210f\20,wOA\275`)KB\367\372\212\2U" - #"\34U\310AN\23\232\316\343\374\250W" - #"\356\303\276\2\24\204!L\a\253\bq" - #"\341\241\342\250\31\4\313}\327C\275`\35\305\321T\244\302mK\305c\nQ\b" - #"C\330\\\314\335\203=\243^\3719>_\206e:\230D\b\215\373'\302(\314" - #" X\356\250L\305\352AO\bB\"\21\311\320$\3Y\212\245\273\261{\324\313" - #"va\327u\270N\a{\bB%f\23,\225\36V+Ze\367\312\34\\\207" - #"\353va\227\357k\316\340\314A\34,D\241.\26\21\204*H\260\256\30049" - #"\r2\205(\254B\3259\234\363q\315" - #">\354\233\213\271\3431^7\253\264\303" - #"\4\231\334\204oH\260\256\300d\202\25" - #"\216\3609\230\263\27{}\\\263\e\273\227\216\330RF0L\220\311M\370\306l" - #"\202\225\200\204nt\367\243?\270\333M" - #"\223\323\240\260\367\337\366.\177j\271\217" - #"]N\n`\21\2a6\301\262\302\232\200\204\240\363\335\315'X\177\376\247?/" - #"\376\351b|\223r\345\361\32338S\203\32\252*C\210\202\331\4\v@&2" - #"\217\340Hp\367\232lI\210o\302X#uZ\370\20\37\376\17\374\2171\322\367" - #"\2300\1&\24\254\fd\4-X-h1\323.!\200\bD\334\212[\361\3" - #"\357?}\a\357\334\205\273\364\265\210 " - #"\202\307\204\202\225\216\364\340\4\313\5\327" - #"q\34O@\2s\223\214\345\a\370\1" - #"\376\36\22.\347\373\331\355v\213\305\202" - #"I\370\260\367\303\37\246\374\320@\333\b\" L(XA{X\315hNA\212" - #"\350\245\373\206s\35\256\303 \334\23\262z{{%I\302\255\270#\372\216Sm" - #"\247\2143\215 \2\203\4\3532\rh\310B\26" - #"s{\270\340?\360*^\365|q\r\326`\215\21" -) 500 -( - #"\326\20D\220\220`]\246\tM\231\310dn\17\27\374\21\237\341\263&4)/" - #"8\340\300\2\254\300\n\3\215\"\210@1\241`\331a\267\300r\22'\3\275\321" - #"\314}\217O\342\337\360o\367\340\236A" - #"\f\2\230x\353\304k;\256\305\n|" - #"\313\362\255\224\24S\355\212\22\346\306\204" - #"\202\205`\235,3{X\300\375\270\337" - #"\6\333/\361\313\"\24\215\377\323xG\242\3_A\222\244\226\26\2655Z\tB" - #"7\314)X\301\245b5\242q\32\246" - #"ia\17\17\214\303\270\337\341w\177\304\37\1T\240b1\26\em\21A\4\214" - #"\31v\304\344\363\256V\253U\311\344\16" - #"\302\303r\301\325\201\216t\244+\257\330" - #"l\266\376\376\376\221\246\20\5\273\335\336" - #"\333\333\v\300b\261DGG\367\364\364\30m\21!*\356\237\b\2430\203`\r" - #"\257(\226\216\3642\224\0054H3\232" - #"\223\221\354\236\323\240h\223\305b1\266" - #"h\231\32\344\f\6\371\21\214\255\25I" - #"\210\216\373'\302(\e\314\271$\f\302\3032sN\3A\230\5\22\254!\32\320" - #"`\342\0\26A\230\3s\nV\nR\234p\6Td\246\21\215\246\364\260\242\243" - #"\243\225\232v\224\301@\210\2169\5\313" - #"\nk:\322\353P\347\377-f\25\254\236\236\36\245\217\6e0\20\242cN\301" - #"\2\220\207\274\32\324\370\177=-\t\t" - #"\202\177L+X\271\310\255E\255\237\27" - #"\367\241\257\v]&+,C\20\346\303" - #"\264\202\25\220\207U\213\332\351\230n\205" - #"US\223\b\202P\211\231\5\313\177\17" - #"\253\22\225\371\310\327\324\36\256\240\3562" - #"\204\240\230!q\324+\3230\255\5-}\350\363\247\3{\25\252fc\266\16V" - #"q\202p\371\372\4!cZ\17\313\n" - #"k\32\322\32\320\340\317\305\225\250\34S\202E\20\202bZ\301B a\254" - #"*T\25\240@k{\b\225\230`\365j\202G0\26\36\5\253\261\2611<" -) 500 -( - #"<\334\375\25\207\3031i\322\244\230\230" - #"\230={\366\370?\216\237\e\205\307p,\24\241S0%`C\t}1\374\344" - #"\255zL\360\b\306\302\235`\r\16\16\256[\267\356\342\305\213\312+%%%w" - #"\337}\367\356\335\273w\354\330q\327]" - #"w\355\334\271\323\317\241\374\364\260h=" - #"H\20\242\300\235`=\367\334s\221\221" - #"\221\356\257\254Y\263\346\235w\336\231;" - #"w\356\334\271s\337~\373\355;\356\270c\324Ad\307{\324\215B\371\262*T" - #"1\331\"\364\323\333\327\371\262\2006\4" - #"\375_\260\30\362\260~\302\347\e\21(" - #"\346x\n\346\360U8\245\266\266v\351\322\245\a\16\34HKKS\f\363\250\356" - #"\342\373[\367\27]pM\304D\27F\334\21\223/\373\36\276\267\2+\356\301=" - #"\276/\e\325\370\261s\31\347\346\231\340" - #"2\316\3153\260\340\22G\36\326\340\340" - #"\340\206\r\e~\371\313_\246\246\262\311" - #"8\267\301\346\317\371\347\261\226\204E\20\2#\351HFF\306p\003222\344" - #"\237>\363\3143\313\227/\277t\351\222" - #"\364\315a]\31\17#\207\177\353\v\1776\t\377\6\360\356\b\23\4_\2349s" - #"F{\301\360\2GK\302\224\224\224\266\2666\367W222\232\232\232\374Y\3" - #"\22\0041\26\340hI\330\332\332\352\3567I\222\324\324\324\4 **J\311f" - #"p8\34QQQFZI\20\204q\bp4g\347\316\235\253W\257~\375\365" - #"\327%IZ\277~\275\377i\r\4A\230\fN\227Wyyy55\227\343O" - #"\16\207c\325\252U\0>\372\350\243\305\213\251?\25A\214Q8\25,\202 \210" - #"\341p\24\303\"\b\202\360\r\t\226/" - #"\332\333\333\213\212\212\"##\213\212\273tw\217\0\0\4\333IDAT\212:" - #"::\2146'\0\34\16Gnn\256\307\213b" - #"=\216\303\341\210\211\211\261X,\36gH\305z\212" -) 500 -( - #"\314\314L\3137\270'\30\212\365\24\360v\302\327\220G \301\362EAA\1\0" - #"9\314\237\237/Lr\251\303\341\270\363" - #"\316;\17\35:\344\361\272X\217\263z" - #"\365\352\255[\267J\222\264e\313\269\202)#\326S455I\222400" - #"\260p\341\302\237\376\364\247\312\353b=" - #"\305\360\23\2760\352\21\364O\375\22\205" - #"\256\256\256\210\210\b\345\333\210\210\b\247" - #"\323i\240=\376\263h\321\"\207\303\341" - #"\361\346\n\3678\271\271\271\312\327\312\263" - #"\b\367\0242\356I\321\222\200O!\333\357\376\ee\324#P\320}D\36y\344" - #"\221\360\360\360\247\236zJ\376\366\311'" - #"\237\354\353\353\333\274y\263\261V\371\217" - #"G\206\255\270\217\343t:333\317\236=\va\237\"%%\345\334\271s[" - #"\267n\225\367\270\305z\n\257'|\r{\4\35DQP<\376hx\374I\341" - #"\37\2177W\334\307\331\270q\343\223O>)\177-\356S\224\227\227'&&\226" - #"\224\224HB=\205\274\230}\371\345\227" - #"\245+\177\243\214z\4\1\22G\211\261" - #"\214\303\341x\373\355\267\253\252\252\2146" - #"D-rq\244\325\253W\367\366\366\32" - #"mK\0\310\345\236\356\277\377~\243\r\31\202\202\356#RTT\264i\323&\345" - #"\333M\2336=\364\320C\6\332\243\22" - #"\21\37G\256\335\270}\373\366\251S\247" - #"\312\257\210\370\24\303\21\350)\376\375\337" - #"\377\375\323O?\0357n\234RU-33\23\6>\202\16^\234\240\b\27\31" - #"\365\0\202\a\335w\354\330\221\230\230X^^\356\376\242XO!\357~(\337F" - #"EE\311\337\212\365\24\n\340 \350N" - #"\202\345\213\230\230\230\a\37|\360\300\201" - #"\3\17>\370`LL\214\321\346\4\306\360\277F\2=\216W\265\222\21\350)J" - #"KK\343\343\343\35\16G[[\233\207\265\2=\205\202" - #"\307o\224!\217@KB_TTT\0X\271r%" -) 500 -( - #"\200\312\312J\243\315\t\214\341\211\243\2" - #"=\316}\367\335\327\321\3211o\336<%\353R^\211@\250\247X\262d\311\273" - #"\357\276{\363\3157gee\341Jk\5z\n\5\217\337(C\36\201\322\32\b" - #"\202\20\6\362\260\b\202\20\6\22,\202 \204\201\4\213 \ba \301\"\324r" - #"\3155\327\310\305\254e\32\e\e\231\24" - #"Y\264\333\355^\273\226\20c\31\22," - #"B-\353\326\255\273\347\236{\6\a\a" - #"\361\315\261\376u\353\326\251\0376..\356\2157\336P?\16a&h\227\220P" - #"\213$I7\335t\323\2157\336\370\330c\217=\373\354\263%%%\237|\362\211" - #"\234\30M\20l!\17\213P\213\305b" - #"y\365\325W\177\375\353_\177\370\341\207" - #"O?\375\364+\257\274\342C\255\224\262|\26\213%$$D~\361\352\253\257." - #"//\227\277.//\277\372\352\253\1" - #"(\211W\356\267x\24\363#\306\34\372" - #"\344\247\22\246\347\267\277\375\355\304\211\23" - #"_|\361E\337\227)\307S$\267\314" - #"\351\355\333\267'&&\266\264\264\264\264" - #"\264$$$l\337\276\335\375\247\251\251" - #"\251\317?\377\274\374uii\351\242E\2134y\0B\4\250Z\3\301\206s\347" - #"\316\205\205\205\235;w\316\367e\247N\235\32\36\222_\261bEQQ\321\252U" - #"\253$Iz\350\241\207V\254X\341\376\3237\337|\363\366\333ooll|\342" - #"\211'\226,Y\262o\337>\306\246\23\342@1,\202\1r\215\267-[\266\334" - #"z\353\255\273v\355\32~*H\301\275" - #"\254\240\373\327\227.]\312\310\310\260X" - #",MMM\343\306\215\363\370i{{\373\257\177\375\353\327^{-\"\"B)" - #"\203G\214A(\206E\250eppp\303\206\r\277\374\345/\v\v\v\377\365_" - #"\377u\303\206\r\362\216\241W\334\373x\273\363\263\237" - #"\375,555%%\345\347?\377\271\307\217\n\v" -) 226 -( - #"\v\217\36=Z\\\\|\361\342\305\237\375\354gL\266 \tQ1tAJ\230" - #"\1\367\202\345\227.]\272\361\306\e\237" - #"}\366\331\221.V\n\30\224\226\226*" - #"\277~o\276\371fff\346\361\343\307" - #"\217\37?\236\231\231\371\346\233oJn" - #"1,\245V\247\217\22\16\304\30\201\4\213PKaaacc\243\362mCC" - #"\3035\327\\\343\343\372\322\322\322\310\310" - #"\310\310\310H\271F\270$I\363\347\317/++\223\277.++\233?\177\276t" - #"e\23\n\345\26\367\362R\304\30\204bX\4A\b\3\305\260\b\202\20\6\22," - #"\202 \204\201\4\213 \ba \301\"\bB\30H\260\b\202\20\6\22,\202 " - #"\204\201\4\213 \ba \301\"\bB\30H\260\b\202\20\206\377" - #"\17\274\273\2057#\310\314\v\0\0\0\0IEND\256B`\202" -) 0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 9 #"displayln" -0 0 4 3 1 #" " -0 0 19 3 42 #"\"The new plot library produces this plot:\"" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 14 3 4 #"plot" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"mix" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 6 #"points" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 3 #"map" -0 0 4 3 1 #" " -0 0 14 3 6 #"vector" -0 0 4 3 1 #" " -0 0 14 3 5 #"times" -0 0 4 3 1 #" " -0 0 14 3 4 #"vals" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 5 #"#:sym" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 6 #"square" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:color" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 5 #"black" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 10 #"error-bars" -0 0 4 3 1 #" " -0 0 14 3 17 #"experimental-data" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 11 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"line" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 19 #"fit-result-function" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 22 3 1 #")" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:color" -0 0 4 3 1 #" " -0 0 20 3 1 #"'" -0 0 14 3 5 #"green" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:x-min" -0 0 4 3 1 #" " -0 0 20 3 2 #"-5" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:x-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"40" -0 0 4 29 1 #"\n" -0 0 4 3 6 #" " -0 0 22 3 7 #"#:y-min" -0 0 4 3 1 #" " -0 0 20 3 3 #"-40" -0 0 4 3 1 #" " -0 0 22 3 7 #"#:y-max" -0 0 4 3 1 #" " -0 0 20 3 2 #"50" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 22 3 1 #"(" -0 0 15 3 12 #"match-define" -0 0 4 3 1 #" " -0 0 22 3 1 #"(" -0 0 14 3 4 #"list" -0 0 4 3 1 #" " -0 0 14 3 1 #"a" -0 0 4 3 1 #" " -0 0 14 3 3 #"tau" -0 0 4 3 1 #" " -0 0 14 3 3 #"phi" -0 0 4 3 1 #" " -0 0 14 3 1 #"T" -0 0 4 3 1 #" " -0 0 14 3 6 #"theta0" -0 0 22 3 1 #")" -0 0 4 29 1 #"\n" -0 0 4 3 2 #" " -0 0 22 3 1 #"(" -0 0 14 3 23 #"fit-result-final-params" -0 0 4 3 1 #" " -0 0 14 3 6 #"result" -0 0 22 3 2 #"))" -0 0 4 29 1 #"\n" -0 0 4 29 1 #"\n" -0 0 17 3 86 -( - #";; Because fit seems to randomly fail, we can't have these test case" - #"s (DrDr complains)" -) 0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 1 #"a" -0 0 17 3 1 #" " -0 0 17 3 9 #"44.5 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 3 #"tau" -0 0 17 3 1 #" " -0 0 17 3 9 #"57.5 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 3 #"phi" -0 0 17 3 1 #" " -0 0 17 3 11 #"-0.38 0.05)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 1 #"T" -0 0 17 3 1 #" " -0 0 17 3 9 #"13.1 0.5)" -0 0 4 29 1 #"\n" -0 0 17 3 2 #";(" -0 0 17 3 7 #"check-=" -0 0 17 3 1 #" " -0 0 17 3 15 #"theta0 2.5 0.5)" -0 0 4 29 1 #"\n" -0 0 diff --git a/collects/plot/tests/sqr.png b/collects/plot/tests/sqr.png new file mode 100644 index 0000000000..15de9a7a26 Binary files /dev/null and b/collects/plot/tests/sqr.png differ diff --git a/collects/plot/tests/trig.png b/collects/plot/tests/trig.png new file mode 100644 index 0000000000..e2b219a544 Binary files /dev/null and b/collects/plot/tests/trig.png differ diff --git a/collects/racket/draw/private/dc-path.rkt b/collects/racket/draw/private/dc-path.rkt index a57cc94b7b..4fff301aa8 100644 --- a/collects/racket/draw/private/dc-path.rkt +++ b/collects/racket/draw/private/dc-path.rkt @@ -7,12 +7,14 @@ "fmod.rkt" "point.rkt" "transform.rkt" + "font.rkt" (only-in scheme/base [append s:append] [reverse s:reverse])) (provide dc-path% - do-path) + (protect-out do-path + set-text-to-path!)) (define-local-member-name get-closed-points @@ -22,6 +24,9 @@ (define 2pi (* 2.0 pi)) (define pi/2 (/ pi 2.0)) +(define text-to-path #f) +(define (set-text-to-path! proc) (set! text-to-path proc)) + (define dc-path% (class object% ;; A path is a list of pairs and vectors: @@ -277,6 +282,19 @@ (do-arc x y w h 0 2pi #f) (close)) + (def/public (text-outline [font% font] [string? str] [real? x] [real? y] [any? [combine? #f]]) + (when (open?) (close)) + (let ([p (text-to-path font str x y combine?)]) + (for ([a (in-list p)]) + (case (car a) + [(move) (move-to (cadr a) (caddr a))] + [(line) (line-to (cadr a) (caddr a))] + [(curve) (curve-to (cadr a) (caddr a) + (list-ref a 3) (list-ref a 4) + (list-ref a 5) (list-ref a 6))] + [(close) (close)]))) + (close)) + (def/public (scale [real? x][real? y]) (unless (and (= x 1.0) (= y 1.0)) (flatten-open!) diff --git a/collects/racket/draw/private/dc.rkt b/collects/racket/draw/private/dc.rkt index e45887adf4..e2f1e610ff 100644 --- a/collects/racket/draw/private/dc.rkt +++ b/collects/racket/draw/private/dc.rkt @@ -32,7 +32,8 @@ (define-local-member-name do-set-pen! - do-set-brush!) + do-set-brush! + text-path) (define 2pi (* 2 pi)) @@ -1161,9 +1162,16 @@ (with-cr (check-ok 'draw-text) cr - (do-text cr #t s x y font combine? offset angle) + (do-text cr 'draw s x y font combine? offset angle) (flush-cr))) + (define/public (text-path s x y combine?) + (with-cr + (check-ok 'draw-text) + cr + (do-text cr 'path s x y font combine? 0 0.0) + (cairo_copy_path cr))) + (define size-cache (make-weak-hasheq)) (define/private (get-size-cache desc) @@ -1231,12 +1239,12 @@ (set-font-antialias c (dc-adjust-smoothing (send font get-smoothing))) c))) - (define/private (do-text cr draw? s x y font combine? offset angle) + (define/private (do-text cr draw-mode s x y font combine? offset angle) (let* ([s (if (zero? offset) s (substring s offset))] [blank? (string=? s "")] - [s (if (and (not draw?) blank?) " " s)] + [s (if (and (not draw-mode) blank?) " " s)] [s (if (for/or ([c (in-string s)]) (or (eqv? c #\uFFFE) (eqv? c #\uFFFF))) ;; Since \uFFFE and \uFFFF are not supposed to be in any @@ -1244,10 +1252,10 @@ ;; string to Pango: (regexp-replace* #rx"[\uFFFE\uFFFF]" s "\uFFFD") s)] - [rotate? (and draw? (not (zero? angle)))] + [rotate? (and draw-mode (not (zero? angle)))] [smoothing-index (get-smoothing-index)] [context (get-context cr smoothing-index)]) - (when draw? + (when draw-mode (when (eq? text-mode 'solid) (unless rotate? (let-values ([(w h d a) (do-text cr #f s 0 0 font combine? 0 0.0)]) @@ -1276,7 +1284,7 @@ ;; This is combine mode. It has to be a little complicated, after all, ;; because we may need to implement font substitution ourselves, which ;; breaks the string into multiple layouts. - (let loop ([s s] [draw? draw?] [measured? #f] [w 0.0] [h 0.0] [d 0.0] [a 0.0]) + (let loop ([s s] [draw-mode draw-mode] [measured? #f] [w 0.0] [h 0.0] [d 0.0] [a 0.0]) (cond [(not s) (when rotate? (cairo_restore cr)) @@ -1313,11 +1321,11 @@ (install-alternate-face (string-ref s 0) layout font desc attrs context)) (substring s (max 1 ok-count))))]) (cond - [(and draw? next-s (not measured?)) + [(and draw-mode next-s (not measured?)) ;; It's going to take multiple layouts, so first gather measurements. (let-values ([(w2 h d a) (loop s #f #f w h d a)]) ;; draw again, supplying `h', `d', and `a' for the whole line - (loop s #t #t w h d a))] + (loop s draw-mode #t w h d a))] [else (let ([logical (make-PangoRectangle 0 0 0 0)]) (pango_layout_get_extents layout #f logical) @@ -1325,16 +1333,19 @@ [nd (/ (- (PangoRectangle-height logical) (pango_layout_get_baseline layout)) (exact->inexact PANGO_SCALE))]) - (when draw? + (when draw-mode (let ([bl (if measured? (- h d) (- nh nd))]) (pango_layout_get_extents layout #f logical) (cairo_move_to cr (text-align-x/delta (+ x w) 0) (text-align-y/delta (+ y bl) 0)) ;; Draw the text: - (pango_cairo_show_layout_line cr (pango_layout_get_line_readonly layout 0)))) + (let ([line (pango_layout_get_line_readonly layout 0)]) + (if (eq? draw-mode 'draw) + (pango_cairo_show_layout_line cr line) + (pango_cairo_layout_line_path cr line))))) (cond - [(and draw? (not next-s)) + [(and draw-mode (not next-s)) (g_object_unref layout) (when rotate? (cairo_restore cr))] [else @@ -1342,7 +1353,7 @@ 0.0 (integral (/ (PangoRectangle-width logical) (exact->inexact PANGO_SCALE))))] [na 0.0]) - (loop next-s measured? draw? (+ w nw) (max h nh) (max d nd) (max a na)))])))])))])) + (loop next-s draw-mode measured? (+ w nw) (max h nh) (max d nd) (max a na)))])))])))])) ;; This is character-by-character mode. It uses a cached per-character+font layout ;; object. (let ([cache (if (or combine? @@ -1397,7 +1408,7 @@ ;; character or if we're just measuring text. (begin0 (unless (and - draw? + (eq? draw-mode 'draw) cache (not attrs) ; fast path doesn't handle underline ((string-length s) . > . 1) @@ -1489,13 +1500,16 @@ ;; unrounded height, for slow-path alignment flh))) (values lw lh ld la flh)))))))]) - (when draw? + (when draw-mode (cairo_move_to cr (text-align-x/delta (+ x w) 0) (let ([bl (- flh ld)]) (text-align-y/delta (+ y bl) 0))) ;; Here's the draw command, which uses most of the time in this mode: - (pango_cairo_show_layout_line cr (pango_layout_get_line_readonly layout 0))) + (let ([line (pango_layout_get_line_readonly layout 0)]) + (if (eq? draw-mode 'draw) + (pango_cairo_show_layout_line cr line) + (pango_cairo_layout_line_path cr line)))) (values (if blank? 0.0 (+ w lw)) (max h lh) (max d ld) (max a la)))))) (when rotate? (cairo_restore cr)))))))) @@ -1518,7 +1532,7 @@ (vector-set! vec 2 #f) (vector-set! vec 3 #f) (vector-set! vec 4 #f))))) - + (def/public (start-doc [string? desc]) (check-ok 'start-doc)) (def/public (end-doc) @@ -1819,3 +1833,14 @@ (void)) dc%) + +(set-text-to-path! + (lambda (font str x y combine?) + (define tmp-bm (make-object bitmap% 10 10)) + (define tmp-dc (make-object -bitmap-dc% tmp-bm)) + (send tmp-dc set-font font) + (define path (send tmp-dc text-path str x y combine?)) + (begin0 + (cairo-path->list path) + (cairo_path_destroy path)))) + diff --git a/collects/racket/draw/private/record-dc.rkt b/collects/racket/draw/private/record-dc.rkt index dc6931e7f7..7074fcd77e 100644 --- a/collects/racket/draw/private/record-dc.rkt +++ b/collects/racket/draw/private/record-dc.rkt @@ -24,7 +24,9 @@ (define black (send the-color-database find-color "black")) (define (clone-point p) - (make-object point% (point-x p) (point-y p))) + (if (pair? p) + p + (make-object point% (point-x p) (point-y p)))) (define (clone-color c) (if (string? c) @@ -101,6 +103,11 @@ (class % (super-new) + (inherit get-origin get-scale get-rotation get-initial-matrix + get-pen get-brush get-font + get-smoothing get-text-mode + get-alpha get-clipping-region) + (define record-limit +inf.0) (define current-size 0) @@ -133,7 +140,30 @@ (start-atomic) (set! procs null) (set! current-size 0) - (end-atomic)) + (end-atomic) + ;; install current configuration explicitly (so it gets recorded): + (let-values ([(ox oy) (get-origin)] + [(sx sy) (get-scale)] + [(r) (get-rotation)] + [(m) (get-initial-matrix)] + [(p) (get-pen)] + [(b) (get-brush)] + [(s) (get-smoothing)] + [(f) (get-font)] + [(tm) (get-text-mode)] + [(a) (get-alpha)] + [(cr) (get-clipping-region)]) + (unless (and (zero? ox) (zero? oy)) (set-origin ox oy)) + (unless (and (= 1 sx) (= 1 sy)) (set-scale sx sy)) + (unless (zero? r) (set-rotation r)) + (unless (equal? m '#(1.0 0.0 0.0 1.0 0.0 0.0)) (set-initial-matrix m)) + (do-set-pen! p) + (do-set-brush! b) + (set-font f) + (unless (eq? s 'unsmoothed) (set-smoothing s)) + (unless (eq? tm 'transparent) (set-text-mode tm)) + (unless (= a 1.0) (set-alpha a)) + (when cr (set-clipping-region cr)))) (define clones (make-hasheq)) (define/private (clone clone-x x) diff --git a/collects/racket/draw/unsafe/cairo.rkt b/collects/racket/draw/unsafe/cairo.rkt index 9b8302581c..82c3384aa1 100644 --- a/collects/racket/draw/unsafe/cairo.rkt +++ b/collects/racket/draw/unsafe/cairo.rkt @@ -428,3 +428,59 @@ CAIRO_FILTER_GAUSSIAN) (define/provide CAIRO_CONTENT_COLOR_ALPHA #x3000) + +;; ---------------------------------------- + +(define-cstruct _cairo_path_data_t_header ([type _int] + [length _int])) +(define-cstruct _cairo_path_data_t_point ([x _double] + [y _double])) + +(define _cairo_path_data_t (_union + _cairo_path_data_t_header + _cairo_path_data_t_point)) + +(define-cstruct _cairo_path_t ([status _int] + [data _pointer] + [num_data _int])) + +(define-cairo cairo_path_destroy (_fun _cairo_path_t-pointer -> _void) + #:wrap (deallocator)) + +(define-cairo cairo_copy_path (_fun _cairo_t -> _cairo_path_t-pointer) + #:wrap (allocator cairo_path_destroy)) + +(define-enum 0 + CAIRO_PATH_MOVE_TO + CAIRO_PATH_LINE_TO + CAIRO_PATH_CURVE_TO + CAIRO_PATH_CLOSE_PATH) + +(provide cairo-path->list) + +(define (cairo-path->list path) + (define len (cairo_path_t-num_data path)) + (define data (cairo_path_t-data path)) + (let loop ([i 0]) + (if (= i len) + null + (let ([h (union-ref (ptr-ref data _cairo_path_data_t i) 0)]) + (cons (let ([t (cairo_path_data_t_header-type h)]) + (cond + [(or (= t CAIRO_PATH_MOVE_TO) + (= t CAIRO_PATH_LINE_TO)) + (define a (union-ref (ptr-ref data _cairo_path_data_t (add1 i)) 1)) + (list (if (= t CAIRO_PATH_MOVE_TO) 'move 'line) + (cairo_path_data_t_point-x a) + (cairo_path_data_t_point-y a))] + [(= t CAIRO_PATH_CURVE_TO) + (define a (union-ref (ptr-ref data _cairo_path_data_t (+ 1 i)) 1)) + (define b (union-ref (ptr-ref data _cairo_path_data_t (+ 2 i)) 1)) + (define c (union-ref (ptr-ref data _cairo_path_data_t (+ 3 i)) 1)) + (list 'curve + (cairo_path_data_t_point-x a) (cairo_path_data_t_point-y a) + (cairo_path_data_t_point-x b) (cairo_path_data_t_point-y b) + (cairo_path_data_t_point-x c) (cairo_path_data_t_point-y c))] + [(= t CAIRO_PATH_CLOSE_PATH) + '(close)])) + (loop (+ i (cairo_path_data_t_header-length h)))))))) diff --git a/collects/racket/draw/unsafe/pango.rkt b/collects/racket/draw/unsafe/pango.rkt index 40717871be..f2e72b0a6f 100644 --- a/collects/racket/draw/unsafe/pango.rkt +++ b/collects/racket/draw/unsafe/pango.rkt @@ -185,6 +185,7 @@ (define-pangocairo pango_cairo_show_layout (_pfun _cairo_t PangoLayout -> _void)) (define-pangocairo pango_cairo_show_layout_line (_pfun _cairo_t PangoLayoutLine -> _void)) (define-pangocairo pango_cairo_show_glyph_string (_pfun _cairo_t PangoFont _PangoGlyphString-pointer -> _void)) +(define-pangocairo pango_cairo_layout_line_path (_pfun _cairo_t PangoLayoutLine -> _void)) (define-pango pango_layout_iter_free (_pfun PangoLayoutIter -> _void) #:wrap (deallocator)) diff --git a/collects/scribble/text-render.rkt b/collects/scribble/text-render.rkt index 7cd34bf65c..472a550e0f 100644 --- a/collects/scribble/text-render.rkt +++ b/collects/scribble/text-render.rkt @@ -99,12 +99,13 @@ (if (eq? i 'cont) 0 (apply max d (map string-length i))))) - (apply map list strs))]) + (apply map list strs))] + [x-length (lambda (col) (if (eq? col 'cont) 0 (length col)))]) (for/fold ([indent? #f]) ([row (in-list strs)]) - (let ([h (apply max 0 (map length row))]) + (let ([h (apply max 0 (map x-length row))]) (let ([row* (for/list ([i (in-range h)]) (for/list ([col (in-list row)]) - (if (i . < . (length col)) + (if (i . < . (x-length col)) (list-ref col i) "")))]) (for/fold ([indent? indent?]) ([sub-row (in-list row*)]) @@ -116,7 +117,7 @@ "" col)]) (display col) - (display (make-string (- w (string-length col)) #\space))) + (display (make-string (max 0 (- w (string-length col))) #\space))) #t) (newline) #t))) diff --git a/collects/scribblings/draw/dc-path-class.scrbl b/collects/scribblings/draw/dc-path-class.scrbl index c3a8b1d27c..bbe393f190 100644 --- a/collects/scribblings/draw/dc-path-class.scrbl +++ b/collects/scribblings/draw/dc-path-class.scrbl @@ -264,6 +264,21 @@ If @racket[radius] is less than @racket[-0.5] or more than half of } +@defmethod[(text-outline [font (is-a?/c font%)] + [str string?] + [x real?] + [y real?] + [combine? any/c #f]) + void?]{ + +Closes the @tech{open sub-path}, if any, and adds a @tech{closed + sub-path} to outline @racket[str] using @racket[font]. The + top left of the text is positioned at @racket[x] and @racket[y]. The + @racket[combine?] argument enables kerning and character combinations + as for @xmethod[dc<%> draw-text]. + +} + @defmethod[(translate [x real?] [y real?]) void?]{ diff --git a/collects/slideshow/tutorial-show.rkt b/collects/slideshow/tutorial-show.rkt index bb4abc0afe..3199f35696 100644 --- a/collects/slideshow/tutorial-show.rkt +++ b/collects/slideshow/tutorial-show.rkt @@ -431,7 +431,7 @@ (slide #:title "Arbitrary Drawing" (para "The" (code dc) "function provides an escape hatch to the underlying" - "GRacket toolkit") + (code racket/draw) "library") (para "For example," (code (disk 100)) "is the same as") (code (dc (lambda (dc dx dy) @@ -878,4 +878,4 @@ 0.9) (blank) (para "For further information, search for" - (tt "slideshow") "in Help Desk")) + (tt "slideshow") "in the documentation")) diff --git a/collects/tests/gracket/draw.rkt b/collects/tests/gracket/draw.rkt index 483d59507f..3a6f8cdbe3 100644 --- a/collects/tests/gracket/draw.rkt +++ b/collects/tests/gracket/draw.rkt @@ -65,11 +65,12 @@ (send f show #t))) (define star - (list (make-object point% 30 0) - (make-object point% 48 60) - (make-object point% 0 20) - (make-object point% 60 20) - (make-object point% 12 60))) + ;; uses pairs instead of point%s + (list (cons 30 0) + (cons 48 60) + (cons 0 20) + (cons 60 20) + (cons 12 60))) (define octagon (list (make-object point% 60 60) @@ -658,6 +659,17 @@ (loop (cdr fam) (cdr stl) (cdr wgt) (cdr sze) x (+ y h) #f))))) (send dc set-pen save-pen))) + ;; Text paths: + (let ([p (make-object dc-path%)] + [old-pen (send dc get-pen)] + [old-brush (send dc get-brush)]) + (send p text-outline (make-font #:size 32) "A8" 360 190) + (send dc set-pen "black" 1 'solid) + (send dc set-brush "pink" 'solid) + (send dc draw-path p) + (send dc set-pen old-pen) + (send dc set-brush old-brush)) + ; Bitmap copying: (when (and (not no-bitmaps?) last?) (let ([x 5] [y 165]) @@ -1079,6 +1091,11 @@ [(lam) (let ([r (make-object region% clip-dc)]) (send r set-path lambda-path) (send dc set-clipping-region r))] + [(A) (let ([p (new dc-path%)] + [r (make-object region% clip-dc)]) + (send p text-outline (make-font #:size 256) "A" 10 10) + (send r set-path p) + (send dc set-clipping-region r))] [(rect+poly) (let ([r (mk-poly 'winding)]) (send r union (mk-rect)) (send dc set-clipping-region r))] @@ -1160,7 +1177,8 @@ (let*-values ([(x y w h) (send r get-bounding-box)] [(l) (list x y w h)] [(=~) (lambda (x y) - (<= (- x 2) y (+ x 2)))]) + (or (not y) + (<= (- x 2) y (+ x 2))))]) (unless (andmap =~ l (let ([l (case clip @@ -1169,6 +1187,7 @@ [(poly circle poly-rect) '(0. 60. 180. 180.)] [(wedge) '(26. 60. 128. 90.)] [(lam) '(58. 10. 202. 281.)] + [(A) '(#f #f #f #f)] [(rect+poly rect+circle poly^rect) '(0. -25. 180. 400.)] [(poly&rect) '(100. 60. 10. 180.)] [(roundrect) '(80. 200. 125. 40.)] @@ -1292,14 +1311,14 @@ (send canvas set-kern (send self get-value)))) (make-object choice% "Clip" '("None" "Rectangle" "Rectangle2" "Octagon" - "Circle" "Wedge" "Round Rectangle" "Lambda" + "Circle" "Wedge" "Round Rectangle" "Lambda" "A" "Rectangle + Octagon" "Rectangle + Circle" "Octagon - Rectangle" "Rectangle & Octagon" "Rectangle ^ Octagon" "Polka" "Empty") hp3 (lambda (self event) (set! clip (list-ref - '(none rect rect2 poly circle wedge roundrect lam + '(none rect rect2 poly circle wedge roundrect lam A rect+poly rect+circle poly-rect poly&rect poly^rect polka empty) (send self get-selection))) diff --git a/collects/tests/gracket/record-dc.rkt b/collects/tests/gracket/record-dc.rkt new file mode 100644 index 0000000000..14346568c5 --- /dev/null +++ b/collects/tests/gracket/record-dc.rkt @@ -0,0 +1,59 @@ +#lang racket/base +(require racket/class + racket/draw + racket/draw/private/record-dc) + +(define bm1 (make-bitmap 100 100)) +(define bm2 (make-bitmap 100 100)) +(define bm3 (make-bitmap 100 100)) + +(define dc1 (make-object bitmap-dc% bm1)) +(define dc2 (make-object (record-dc-mixin bitmap-dc%) bm2)) +(define dc3 (make-object bitmap-dc% bm3)) + +(define (config dc) + (send dc set-origin 2 3) + (send dc set-scale 1.1 0.9) + (send dc set-rotation 0.1) + (send dc set-initial-matrix '#(1.0 -0.1 0.1 1.0 1.0 2.0)) + (send dc set-pen "red" 2 'solid) + (send dc set-brush "blue" 'solid) + (send dc set-font (make-font #:size 32)) + (send dc set-smoothing 'smoothed) + (send dc set-text-mode 'solid) + (send dc set-alpha 0.8) + (send dc set-clipping-rect 5 5 95 95)) + +(define (draw dc) + (send dc draw-ellipse 2 2 100 100) + (send dc draw-text "Hello" 10 10)) + +(define (get-bytes bm) + (define w (send bm get-width)) + (define h (send bm get-height)) + (define bstr (make-bytes (* 4 w h))) + (send bm get-argb-pixels 0 0 w h bstr) + bstr) + +(config dc1) +(draw dc1) + +(define pre-bytes (get-bytes bm1)) + +(config dc2) +(send dc2 erase) +(draw dc2) + +(define middle-bytes (get-bytes bm2)) + +(define cms (send dc2 get-recorded-command)) + +(cms dc3) + +(define post-bytes (get-bytes bm3)) + +(unless (equal? pre-bytes middle-bytes) + (error "middle != pre")) + +(unless (equal? pre-bytes post-bytes) + (error "post != pre")) diff --git a/doc/release-notes/racket/HISTORY.txt b/doc/release-notes/racket/HISTORY.txt index 186868f0fb..c57ee134bb 100644 --- a/doc/release-notes/racket/HISTORY.txt +++ b/doc/release-notes/racket/HISTORY.txt @@ -1,5 +1,6 @@ Version 5.2.0.7 Intern strings, etc., only in read-syntax mode, not read mode +racket/draw: add text-outline to dc-path% Version 5.2.0.6 Added pseudo-random-generator-vector? diff --git a/src/Makefile.in b/src/Makefile.in index 5ecbe1076a..a49b16a388 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -39,28 +39,20 @@ all: 3m: cd racket; $(MAKE) 3m $(MAKE) @MAKE_GRACKET@-3m - $(MAKE) @MAKE_FIT@-3m gracket-3m: cd gracket; $(MAKE) 3m -fit-3m: - cd fit; $(MAKE) 3m - no-3m: $(NOOP) cgc: cd racket; $(MAKE) cgc $(MAKE) @MAKE_GRACKET@-cgc - $(MAKE) @MAKE_FIT@-cgc gracket-cgc: cd gracket; $(MAKE) cgc -fit-cgc: - cd fit; $(MAKE) cgc - no-cgc: $(NOOP) @@ -73,8 +65,7 @@ both: SETUP_ARGS = -X "$(DESTDIR)$(collectsdir)" -N "raco setup" -l- setup $(PLT_SETUP_OPTIONS) $(PLT_ISO) @INSTALL_SETUP_FLAGS@ # Pass compile and link flags to `make install' for use by any -# collection-setup actions (currently in "plot") that compile -# and link C code: +# collection-setup actions that compile and link C code: CFLAGS = @CFLAGS@ @COMPFLAGS@ @PREFLAGS@ LDFLAGS = @LDFLAGS@ WITH_ENV_VARS = env CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" @@ -92,7 +83,6 @@ install-common-first: mkdir -p $(ALLDIRINFO) install-common-middle: - $(MAKE) install-@MAKE_FIT@ $(MAKE) @MAKE_COPYTREE@-run $(MAKE) install-@MAKE_GRACKET@-post-collects $(MAKE) lib-finish @@ -100,9 +90,6 @@ install-common-middle: install-common-last: $(MAKE) fix-paths -install-fit: - cd fit; $(MAKE) install - install-no: $(NOOP) diff --git a/src/README b/src/README index d6bf7c5d86..a06fdeddef 100644 --- a/src/README +++ b/src/README @@ -101,14 +101,14 @@ Detailed instructions: remove it (unless you are using an "in-place" build from a repository as described below). - Also, make sure that you have libraries and header files for - Cairo, Pango, and GTk. These libraries are not distributed with - Racket. The configure process checks automatically whether these - libraries are available. + To run `racket/draw' and `racket/gui' programs, you will need + Cairo, Pango, and GTk install. These libraries are not + distributed with Racket, and they are not needed for compilation, + except for building documentation that uses `racket/draw'. - Finally, the content of the "foreign" subdirectory may require GNU - `make'. If the build fails with another variant of `make', please - try using GNU `make'. + The content of the "foreign" subdirectory may require GNU `make' + if no installed "libffi" is detected. If the build fails with + another variant of `make', please try using GNU `make'. 1. Select (or create) a build directory. @@ -175,13 +175,6 @@ Detailed instructions: which includes C compilation, and the Racket build normally uses the C pre-processor directly for some parts of the build. - For cross compilation, set the compiler variables to a compiler for - the target platform compiler, but also set CC_FOR_BUILD to a - compiler for the host platform (for building binaries to execute - during the build process). If the target machine's stack grows up, - you'll have to supply `--enable-stackup'; if the target machine is - big-endian, you may have to supply `--enable-bigendian'. - If you re-run `configure' after running `make', then products of the `make' may be incorrect due to changes in the compiler command line. To be safe, run `make clean' each time after running `configure'. @@ -221,9 +214,10 @@ Detailed instructions: location originally specified with `--prefix'. Finally, the `make install' step compiles ".zo" bytecode files for - installed Racket source, and generates launcher programs like - DrRacket. Use `make plain-install' to install without compiling - ".zo" files or creating launchers. + installed Racket source, generates launcher programs like + DrRacket, and builds documentation. Use `make plain-install' to + install without compiling ".zo" files, creating launchers, or + building documentation. If the installation fails because the target directory cannot be created, or because the target directory is not the one you want, @@ -265,6 +259,12 @@ Cross-compilation requires at least two flags to `configure': The `--enable-racket' flag is needed because building and installing Racket requires running (an intermediate version of) Racket. +You may also need to set CC_FOR_BUILD to a compiler for the host +platform (for building binaries to execute during the build process). +If the target machine's stack grows up, you may have to supply +`--enable-stackup'; if the target machine is big-endian, you may have +to supply `--enable-bigendian'. + ======================================================================== CGC versus 3m ======================================================================== @@ -329,12 +329,12 @@ At a mininum, to port Racket to a new platform, edit "racket/sconfig.h" to provide a platform-specific compilation information. As distributed, "racket/sconfig.h" contains configurations for the following platforms: - Windows (x86) + Windows (x86, x86_64) Mac OS X (PPC, x86, x86_64) Linux (x86, x86_64, PPC, 68k) Cygwin (x86) Solaris (x86, Sparc) - FreeBSD (x86) + FreeBSD (x86, x86_64) OpenBSD (x86) NetBSD (x86) @@ -357,9 +357,8 @@ finalization is handled. Configuration Options --------------------- -By default, Racket is compiled without support for single-precision -floating point numbers. This and other options can be modified by -setting flags in "racket/sconfig.h". +Athough `configure' flags control most options, some configrations +options can be modified by setting flags in "racket/sconfig.h". Modifying Racket ---------------- diff --git a/src/configure b/src/configure index 19a0a811f6..64a8fefeaa 100755 --- a/src/configure +++ b/src/configure @@ -721,7 +721,6 @@ ICP MRLIBINSTALL LIBFINISH MAKE_GRACKET -MAKE_FIT MAKE_COPYTREE MAKE_FINISH WXPRECOMP @@ -1333,7 +1332,6 @@ Optional Features: --enable-foreign support foreign calls (enabled by default) --enable-places support places (3m only; usually enabled by default) --enable-futures support futures (usually enabled by default) - --enable-plot support plot libraries (enabled by default) --enable-float support single-precision floats (enabled by default) --enable-floatinstead use single-precision by default --enable-racket= use as Racket executable to build Racket @@ -1986,13 +1984,6 @@ if test "${enable_futures+set}" = set; then enableval=$enable_futures; fi -# Check whether --enable-plot was given. -if test "${enable_plot+set}" = set; then - enableval=$enable_plot; -else - enable_plot=yes -fi - # Check whether --enable-float was given. if test "${enable_float+set}" = set; then enableval=$enable_float; @@ -2314,7 +2305,6 @@ show_explicitly_enabled "${enable_xonx}" "Unix style" show_explicitly_enabled "${enable_shared}" "Shared libraries" show_explicitly_disabled "${enable_gracket}" GRacket -show_explicitly_disabled "${enable_plot}" Plot fit library if test "$LIBTOOLPROG" != "" ; then echo "=== Libtool program: $LIBTOOLPROG" @@ -8947,7 +8937,6 @@ LIBS="$LIBS $EXTRALIBS" - mk_needed_dir() @@ -9015,14 +9004,6 @@ fi makefiles="$makefiles foreign/Makefile" ac_configure_args="$ac_configure_args$SUB_CONFIGURE_EXTRAS" -if test -d "${srcdir}/fit" && test "${enable_plot}" = "yes" ; then - makefiles="$makefiles - fit/Makefile" - MAKE_FIT=fit -else - MAKE_FIT=no -fi - if test "${enable_gracket}" = "yes" ; then makefiles="$makefiles gracket/Makefile @@ -9794,7 +9775,6 @@ ICP!$ICP$ac_delim MRLIBINSTALL!$MRLIBINSTALL$ac_delim LIBFINISH!$LIBFINISH$ac_delim MAKE_GRACKET!$MAKE_GRACKET$ac_delim -MAKE_FIT!$MAKE_FIT$ac_delim MAKE_COPYTREE!$MAKE_COPYTREE$ac_delim MAKE_FINISH!$MAKE_FINISH$ac_delim WXPRECOMP!$WXPRECOMP$ac_delim @@ -9832,7 +9812,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 46; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 45; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/src/fit/Makefile.in b/src/fit/Makefile.in deleted file mode 100644 index 85cfbf0643..0000000000 --- a/src/fit/Makefile.in +++ /dev/null @@ -1,37 +0,0 @@ - -srcdir = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -libpltdir = @libpltdir@ -collectsdir = @collectsdir@ -builddir = @builddir@ - -ICP=@ICP@ - -CC = @CC@ - -# See ../Makefile about RUN_RACKET_, which -# typically redirects to RUN_THIS_RACKET_: -RUN_THIS_RACKET_CGC = ../racket/racket@CGC@ - -WITH_ENV = env CC="@PLAIN_CC@" CFLAGS="@CFLAGS@ @COMPFLAGS@ @PREFLAGS@" LDFLAGS="@LDFLAGS@" - -FIT_SRCS = $(srcdir)/fit.c $(srcdir)/matrix.c - -XCOLLECTS = # -X ../racket/gc2/xform-collects - -fit-lib: libfit@SO_SUFFIX@ - -3m: - $(MAKE) fit-lib -cgc: - $(MAKE) fit-lib - -libfit@SO_SUFFIX@: - $(WITH_ENV) @RUN_RACKET_CGC@ -c $(srcdir)/build.rkt "libfit" $(FIT_SRCS) - -install: - cd ..; $(ICP) fit/libfit@SO_SUFFIX@ "$(DESTDIR)$(libpltdir)/libfit@SO_SUFFIX@" - diff --git a/src/fit/build.bat b/src/fit/build.bat deleted file mode 100644 index 98186b03d0..0000000000 --- a/src/fit/build.bat +++ /dev/null @@ -1 +0,0 @@ -..\..\racket build.rkt libfit fit.c matrix.c diff --git a/src/fit/build.rkt b/src/fit/build.rkt deleted file mode 100644 index 8bd0b99bb4..0000000000 --- a/src/fit/build.rkt +++ /dev/null @@ -1,32 +0,0 @@ -(module build racket/base - (require racket/path - racket/file - dynext/file - dynext/link - dynext/compile) - - (define-values (libname c-files) - (let ([l (vector->list (current-command-line-arguments))]) - (values (car l) - (cdr l)))) - - (define sys-subpath (system-library-subpath #f)) - - (define so-name (append-extension-suffix libname)) - (parameterize (;; we compile a simple .so, not an extension - [current-standard-link-libraries '()]) - (when (or (not (file-exists? so-name)) - (let ([so-time (file-or-directory-modify-seconds so-name)]) - (for/or ([f c-files]) - ((file-or-directory-modify-seconds f) . > . so-time)))) - (let ([o-files - (for/list ([c-file c-files]) - (let ([o-file (append-object-suffix (path-replace-suffix (file-name-from-path c-file) #""))]) - ;; first #f means not quiet (here and in link-extension) - (compile-extension #f c-file o-file null) - o-file))]) - (let* ([flags (if (string=? "i386-cygwin" (path->string sys-subpath)) - ;; DLL needs every dependence explicit: - '("-lc" "-lm" "-lcygwin" "-lkernel32") - null)]) - (link-extension #f (append o-files flags) so-name)))))) diff --git a/src/fit/dllexport.h b/src/fit/dllexport.h deleted file mode 100644 index b0f4023d2b..0000000000 --- a/src/fit/dllexport.h +++ /dev/null @@ -1,6 +0,0 @@ - -#if (defined(__WIN32__) || defined(WIN32) || defined(_WIN32)) -# define MZ_DLLEXPORT __declspec(dllexport) -#else -# define MZ_DLLEXPORT -#endif diff --git a/src/fit/fit.c b/src/fit/fit.c deleted file mode 100644 index b6f819190d..0000000000 --- a/src/fit/fit.c +++ /dev/null @@ -1,752 +0,0 @@ -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Nonlinear least squares fit according to the - * Marquardt-Levenberg-algorithm - * - * added as Patch to Gnuplot (v3.2 and higher) - * by Carsten Grammes - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Copyright of this module: 1993, 1998 Carsten Grammes - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - * - * 930726: Recoding of the Unix-like raw console I/O routines by: - * Michele Marziani (marziani@ferrara.infn.it) - * drd: start unitialised variables at 1 rather than NEARLY_ZERO - * (fit is more likely to converge if started from 1 than 1e-30 ?) - * - * HBB (Broeker@physik.rwth-aachen.de) : fit didn't calculate the errors - * in the 'physically correct' (:-) way, if a third data column containing - * the errors (or 'uncertainties') of the input data was given. I think - * I've fixed that, but I'm not sure I really understood the M-L-algo well - * enough to get it right. I deduced my change from the final steps of the - * equivalent algorithm for the linear case, which is much easier to - * understand. (I also made some minor, mostly cosmetic changes) - * - * HBB (again): added error checking for negative covar[i][i] values and - * for too many parameters being specified. - * - * drd: allow 3d fitting. Data value is now called fit_z internally, - * ie a 2d fit is z vs x, and a 3d fit is z vs x and y. - * - * Lars Hecking : review update command, for VMS in particular, where - * it is not necessary to rename the old file. - * - * HBB, 971023: lifted fixed limit on number of datapoints, and number - * of parameters. - */ - - -#define FIT_MAIN - -#define NULL 0 - -//#include - - - -#include "matrix.h" -#include "fit.h" -#include -#include -#include - -/* #define STANDARD stderr */ - - -enum marq_res { - OK, ERROR, BETTER, WORSE -}; -typedef enum marq_res marq_res_t; - -#ifdef INFINITY -# undef INFINITY -#endif - -#define INFINITY 1e30 -#define NEARLY_ZERO 1e-30 - - -/* Relative change for derivatives */ -#define DELTA 0.001 - -#define MAX_DATA 2048 -#define MAX_PARAMS 32 -#define MAX_LAMBDA 1e20 -#define MIN_LAMBDA 1e-20 -#define LAMBDA_UP_FACTOR 10 -#define LAMBDA_DOWN_FACTOR 10 - -#define TBOOLEAN int - -# define PLUSMINUS "+/-" - - - -/* HBB 971023: new, allow for dynamic adjustment of these: */ -static UNUSED int max_data; -static UNUSED int max_params; - -static double epsilon = 1e-5; /* convergence limit */ -static int maxiter = 0; /* HBB 970304: maxiter patch */ - -static UNUSED char *FIXED = "# FIXED"; -static UNUSED char *GNUFITLOG = "FIT_LOG"; -static UNUSED char *FITLIMIT = "FIT_LIMIT"; -static UNUSED char *FITSTARTLAMBDA = "FIT_START_LAMBDA"; -static UNUSED char *FITLAMBDAFACTOR = "FIT_LAMBDA_FACTOR"; -static UNUSED char *FITMAXITER = "FIT_MAXITER"; /* HBB 970304: maxiter patch */ -static UNUSED char *FITSCRIPT = "FIT_SCRIPT"; -static UNUSED char *DEFAULT_CMD = "replot"; /* if no fitscript spec. */ - - -static int num_data, num_params; -static UNUSED int columns; -static double *fit_x; -static double *fit_y; -static double *fit_z ; -static double *err_data; -static double *a; - - -/* static fixstr * par_name; */ - -static double startup_lambda = 0; -static double lambda_down_factor = LAMBDA_DOWN_FACTOR; -static double lambda_up_factor = LAMBDA_UP_FACTOR; - - -static void * current_fun; - - -/***************************************************************** - internal vars to store results of fit -*****************************************************************/ - -double rms = 0; -double varience = 0; -double *asym_error; -double *asym_error_percent; - -MZ_DLLEXPORT -double get_rms() -{return rms;} - -MZ_DLLEXPORT -double get_varience() -{return varience;} - -MZ_DLLEXPORT -double * get_asym_error() -{return asym_error;} - -MZ_DLLEXPORT -double * get_asym_error_percent() -{return asym_error_percent;} - - -/***************************************************************** - internal Prototypes -*****************************************************************/ - -/*static void printmatrix __PROTO((double **C, int m, int n)); */ -static UNUSED void print_matrix_and_vectors (double **C, double *d, double *r, int m, int n); -static marq_res_t marquardt (double a[], double **alpha, double *chisq, - double *lambda); -static TBOOLEAN analyze (double a[], double **alpha, double beta[], - double *chisq); -static void calculate (double *zfunc, double **dzda, double a[]); -static void call_scheme (double *par, double *data); - -static TBOOLEAN regress (double a[]); -//static void show_fit (int i, double chisq, double last_chisq, double *a, -// double lambda, FILE * device); - - -/***************************************************************** - New utility routine: print a matrix (for debugging the alg.) -*****************************************************************/ -static UNUSED void printmatrix(C, m, n) -double **C; -int m, n; -{ - int i, j; - - for (i = 0; i < m; i++) { - for (j = 0; j < n - 1; j++); - /* Dblf2("%.8g |", C[i][j]); */ - /* Dblf2("%.8g\n", C[i][j]); */ - } - /* Dblf("\n"); */ -} - -/************************************************************************** - Yet another debugging aid: print matrix, with diff. and residue vector -**************************************************************************/ -static UNUSED void print_matrix_and_vectors(C, d, r, m, n) -double **C; -double *d, *r; -int m, n; -{ - int i, j; - - for (i = 0; i < m; i++) { - for (j = 0; j < n; j++); - /* Dblf2("%8g ", C[i][j]); */ - /* Dblf3("| %8g | %8g\n", d[i], r[i]); */ - } - /* Dblf("\n"); */ -} - - -/***************************************************************** - Marquardt's nonlinear least squares fit -*****************************************************************/ -static marq_res_t marquardt(a, C, chisq, lambda) -double a[]; -double **C; -double *chisq; -double *lambda; -{ - int i, j; - static double *da = 0, /* delta-step of the parameter */ - *temp_a = 0, /* temptative new params set */ - *d = 0, *tmp_d = 0, **tmp_C = 0, *residues = 0; - double tmp_chisq; - - /* Initialization when lambda == -1 */ - - if (*lambda == -1) { /* Get first chi-square check */ - TBOOLEAN analyze_ret; - - temp_a = vec(num_params); - d = vec(num_data + num_params); - tmp_d = vec(num_data + num_params); - da = vec(num_params); - residues = vec(num_data + num_params); - tmp_C = matr(num_data + num_params, num_params); - - analyze_ret = analyze(a, C, d, chisq); - - /* Calculate a useful startup value for lambda, as given by Schwarz */ - /* FIXME: this is doesn't turn out to be much better, really... */ - if (startup_lambda != 0) - *lambda = startup_lambda; - else { - *lambda = 0; - for (i = 0; i < num_data; i++) - for (j = 0; j < num_params; j++) - *lambda += C[i][j] * C[i][j]; - *lambda = sqrt(*lambda / num_data / num_params); - } - - /* Fill in the lower square part of C (the diagonal is filled in on - each iteration, see below) */ - for (i = 0; i < num_params; i++) - for (j = 0; j < i; j++) - C[num_data + i][j] = 0, C[num_data + j][i] = 0; - /* printmatrix(C, num_data+num_params, num_params); */ - return analyze_ret ? OK : ERROR; - } - /* once converged, free dynamic allocated vars */ - - if (*lambda == -2) { - return OK; - } - /* Givens calculates in-place, so make working copies of C and d */ - - for (j = 0; j < num_data + num_params; j++) - memcpy(tmp_C[j], C[j], num_params * sizeof(double)); - memcpy(tmp_d, d, num_data * sizeof(double)); - - /* fill in additional parts of tmp_C, tmp_d */ - - for (i = 0; i < num_params; i++) { - /* fill in low diag. of tmp_C ... */ - tmp_C[num_data + i][i] = *lambda; - /* ... and low part of tmp_d */ - tmp_d[num_data + i] = 0; - } - /* printmatrix(tmp_C, num_data+num_params, num_params); */ - - /* FIXME: residues[] isn't used at all. Why? Should it be used? */ - - Givens(tmp_C, tmp_d, da, residues, num_params + num_data, num_params, 1); - /*print_matrix_and_vectors (tmp_C, tmp_d, residues, - num_params+num_data, num_params); */ - - /* check if trial did ameliorate sum of squares */ - - for (j = 0; j < num_params; j++) - temp_a[j] = a[j] + da[j]; - - if (!analyze(temp_a, tmp_C, tmp_d, &tmp_chisq)) { - /* FIXME: will never be reached: always returns TRUE */ - return ERROR; - } - - if (tmp_chisq < *chisq) { /* Success, accept new solution */ - if (*lambda > MIN_LAMBDA) { - /* (void) putc('/', stderr); */ - *lambda /= lambda_down_factor; - } - *chisq = tmp_chisq; - for (j = 0; j < num_data; j++) { - memcpy(C[j], tmp_C[j], num_params * sizeof(double)); - d[j] = tmp_d[j]; - } - for (j = 0; j < num_params; j++) - a[j] = temp_a[j]; - return BETTER; - } else { /* failure, increase lambda and return */ - /* (void) putc('*', stderr); */ - *lambda *= lambda_up_factor; - return WORSE; - } -} - - -/* FIXME: in the new code, this function doesn't really do enough to be - * useful. Maybe it ought to be deleted, i.e. integrated with - * calculate() ? - */ -/***************************************************************** - compute chi-square and numeric derivations -*****************************************************************/ -static TBOOLEAN analyze(a, C, d, chisq) -double a[]; -double **C; -double d[]; -double *chisq; -{ -/* - * used by marquardt to evaluate the linearized fitting matrix C - * and vector d, fills in only the top part of C and d - * I don't use a temporary array zfunc[] any more. Just use - * d[] instead. - */ - int i, j; - - *chisq = 0; - calculate(d, C, a); - - for (i = 0; i < num_data; i++) { - /* note: order reversed, as used by Schwarz */ - d[i] = (d[i] - fit_z[i]) / err_data[i]; - *chisq += d[i] * d[i]; - for (j = 0; j < num_params; j++) - C[i][j] /= err_data[i]; - } - /* FIXME: why return a value that is always TRUE ? */ - return 1; -} - - -/* To use the more exact, but slower two-side formula, activate the - following line: */ - -#define TWO_SIDE_DIFFERENTIATION - -/***************************************************************** - compute function values and partial derivatives of chi-square -*****************************************************************/ -static void calculate(zfunc, dzda, a) -double *zfunc; -double **dzda; -double a[]; -{ - int k, p; - double tmp_a; - double *tmp_high, *tmp_pars; -#ifdef TWO_SIDE_DIFFERENTIATION - double *tmp_low; -#endif - - tmp_high = vec(num_data); /* numeric derivations */ -#ifdef TWO_SIDE_DIFFERENTIATION - tmp_low = vec(num_data); -#endif - tmp_pars = vec(num_params); - - /* first function values */ - - call_scheme(a, zfunc); - - /* then derivatives */ - - for (p = 0; p < num_params; p++) - tmp_pars[p] = a[p]; - for (p = 0; p < num_params; p++) { - tmp_a = fabs(a[p]) < NEARLY_ZERO ? NEARLY_ZERO : a[p]; - tmp_pars[p] = tmp_a * (1 + DELTA); - call_scheme(tmp_pars, tmp_high); -#ifdef TWO_SIDE_DIFFERENTIATION - tmp_pars[p] = tmp_a * (1 - DELTA); - call_scheme(tmp_pars, tmp_low); -#endif - for (k = 0; k < num_data; k++) -#ifdef TWO_SIDE_DIFFERENTIATION - dzda[k][p] = (tmp_high[k] - tmp_low[k]) / (2 * tmp_a * DELTA); -#else - dzda[k][p] = (tmp_high[k] - zfunc[k]) / (tmp_a * DELTA); -#endif - tmp_pars[p] = a[p]; - } - -} - - -/***************************************************************** - evaluate the scheme function -*****************************************************************/ -static void call_scheme(par, data) -double *par; -double *data; -{ - int rators = 2 + num_params; - double * rands = - (double *) malloc(rators * sizeof(double)); - - int i; - - /* set up the constant params */ - for(i = 0 ; i< num_params; i++) { - rands[i+2] = par[i]; - } - - /* now calculate the function at the existing points */ - for (i = 0; i < num_data; i++) { - rands[0] = fit_x[i]; - rands[1] = fit_y[i]; - - data[i] = ((double (*) (int, double *) )current_fun) // ouch! - (rators, rands); - } - - free(rands); - -} - -/* /\***************************************************************** */ -/* evaluate the scheme function */ -/* *****************************************************************\/ */ -/* static void call_scheme(par, data) */ -/* double *par; */ -/* double *data; */ -/* { */ -/* int rators = 2 + num_params; */ -/* Scheme_Object ** rands = */ -/* scheme_malloc(rators * sizeof(Scheme_Object)); */ - -/* int i; */ - -/* /\* set up the constant params *\/ */ -/* for(i = 0 ; i< num_params; i++) { */ -/* rands[i+2] = scheme_make_double(par[i]); */ -/* } */ - -/* /\* now calculate the function at the existing points *\/ */ -/* for (i = 0; i < num_data; i++) { */ -/* rands[0] = scheme_make_double(fit_x[i]); */ -/* rands[1] = scheme_make_double(fit_y[i]); */ - -/* data[i] = scheme_real_to_double(scheme_apply(current_fun, rators, rands)); */ -/* } */ -/* } */ - -/***************************************************************** - Frame routine for the marquardt-fit -*****************************************************************/ -static TBOOLEAN regress(a) - double a[]; -{ - double **covar, *dpar, **C, chisq, last_chisq, lambda; - int iter, i, j; - marq_res_t res; - - chisq = last_chisq = INFINITY; - C = matr(num_data + num_params, num_params); - lambda = -1; /* use sign as flag */ - iter = 0; /* iteration counter */ - - /* Initialize internal variables and 1st chi-square check */ - - if ((res = marquardt(a, C, &chisq, &lambda)) == ERROR) - return 0; /* an error occurded */ - - res = BETTER; - - /* show_fit(iter, chisq, chisq, a, lambda, STANDARD); */ - - /* MAIN FIT LOOP: do the regression iteration */ - - do { - if (res == BETTER) { - iter++; - last_chisq = chisq; - } - if ((res = marquardt(a, C, &chisq, &lambda)) == BETTER) - {}; - /* show_fit(iter, chisq, last_chisq, a, lambda, STANDARD); */ - } while ((res != ERROR) - && (lambda < MAX_LAMBDA) - && ((maxiter == 0) || (iter <= maxiter)) - && (res == WORSE - || ((chisq > NEARLY_ZERO) - ? ((last_chisq - chisq) / chisq) - : (last_chisq - chisq)) > epsilon - ) - ); - - /* fit done */ - - /* save all the info that was otherwise printed out */ - - rms = sqrt(chisq / (num_data - num_params)); - varience = chisq / (num_data - num_params); - asym_error = malloc (num_params * sizeof (double)); - asym_error_percent = malloc (num_params * sizeof (double)) ; - - /* don't know what the following code does... */ - - /* compute covar[][] directly from C */ - Givens(C, 0, 0, 0, num_data, num_params, 0); - covar = C + num_data; - Invert_RtR(C, covar, num_params); - - dpar = vec(num_params); - for (i = 0; i < num_params; i++) { - /* FIXME: can this still happen ? */ - if (covar[i][i] <= 0.0) /* HBB: prevent floating point exception later on */ - return 0; /* Eex("Calculation error: non-positive diagonal element in covar. matrix"); */ - dpar[i] = sqrt(covar[i][i]); - } - - /* transform covariances into correlations */ - for (i = 0; i < num_params; i++) { - /* only lower triangle needs to be handled */ - for (j = 0; j <= i; j++) - covar[i][j] /= dpar[i] * dpar[j]; - } - - /* scale parameter errors based on chisq */ - chisq = sqrt(chisq / (num_data - num_params)); - for (i = 0; i < num_params; i++) - dpar[i] *= chisq; - - for(i = 0; i< num_params; i++) - { - double temp = - (fabs(a[i]) < NEARLY_ZERO) ? 0.0 : fabs(100.0 * dpar[i] / a[i]); - asym_error[i] = dpar[i]; - asym_error_percent[i] = temp; - } - - return 1; - - - /******** CRAP LEFT OVER FROM GNUPLOT ***********/ - - /* HBB 970304: the maxiter patch: */ - /* - if ((maxiter > 0) && (iter > maxiter)) { - Dblf2("\nMaximum iteration count (%d) reached. Fit stopped.\n", maxiter); - } else { - Dblf2("\nAfter %d iterations the fit converged.\n", iter); - } - - Dblf2("final sum of squares of residuals : %g\n", chisq); - if (chisq > NEARLY_ZERO) { - Dblf2("rel. change during last iteration : %g\n\n", (chisq - last_chisq) / chisq); - } else { - Dblf2("abs. change during last iteration : %g\n\n", (chisq - last_chisq)); - } - - if (res == ERROR) - // Eex("FIT: error occurred during fit"); - */ - /* compute errors in the parameters */ - - /* if (num_data == num_params) { */ -/* int i; */ - -/* Dblf("\nExactly as many data points as there are parameters.\n"); */ -/* Dblf("In this degenerate case, all errors are zero by definition.\n\n"); */ -/* Dblf("Final set of parameters \n"); */ -/* Dblf("======================= \n\n"); */ -/* for (i = 0; i < num_params; i++) */ -/* Dblf3("%-15.15s = %-15g\n", par_name[i], a[i]); */ -/* } else if (chisq < NEARLY_ZERO) { */ -/* int i; */ - -/* Dblf("\nHmmmm.... Sum of squared residuals is zero. Can't compute errors.\n\n"); */ -/* Dblf("Final set of parameters \n"); */ -/* Dblf("======================= \n\n"); */ -/* for (i = 0; i < num_params; i++) */ -/* Dblf3("%-15.15s = %-15g\n", par_name[i], a[i]); */ -/* } else { */ -/* Dblf2("degrees of freedom (ndf) : %d\n", num_data - num_params); */ -/* Dblf2("rms of residuals (stdfit) = sqrt(WSSR/ndf) : %g\n", sqrt(chisq / (num_data - num_params))); */ -/* Dblf2("variance of residuals (reduced chisquare) = WSSR/ndf : %g\n\n", chisq / (num_data - num_params)); */ - -/* /\* get covariance-, Korrelations- and Kurvature-Matrix *\/ */ -/* /\* and errors in the parameters *\/ */ - -/* /\* compute covar[][] directly from C *\/ */ -/* Givens(C, 0, 0, 0, num_data, num_params, 0); */ -/* /\*printmatrix(C, num_params, num_params); *\/ */ - -/* /\* Use lower square of C for covar *\/ */ -/* covar = C + num_data; */ -/* Invert_RtR(C, covar, num_params); */ -/* /\*printmatrix(covar, num_params, num_params); *\/ */ - -/* /\* calculate unscaled parameter errors in dpar[]: *\/ */ -/* dpar = vec(num_params); */ -/* for (i = 0; i < num_params; i++) { */ -/* /\* FIXME: can this still happen ? *\/ */ -/* if (covar[i][i] <= 0.0) /\* HBB: prevent floating point exception later on *\/ */ -/* Eex("Calculation error: non-positive diagonal element in covar. matrix"); */ -/* dpar[i] = sqrt(covar[i][i]); */ -/* } */ - -/* /\* transform covariances into correlations *\/ */ -/* for (i = 0; i < num_params; i++) { */ -/* /\* only lower triangle needs to be handled *\/ */ -/* for (j = 0; j <= i; j++) */ -/* covar[i][j] /= dpar[i] * dpar[j]; */ -/* } */ - -/* /\* scale parameter errors based on chisq *\/ */ -/* chisq = sqrt(chisq / (num_data - num_params)); */ -/* for (i = 0; i < num_params; i++) */ -/* dpar[i] *= chisq; */ - -/* Dblf("Final set of parameters Asymptotic Standard Error\n"); */ -/* Dblf("======================= ==========================\n\n"); */ - -/* for (i = 0; i < num_params; i++) { */ -/* double temp = */ -/* (fabs(a[i]) < NEARLY_ZERO) ? 0.0 : fabs(100.0 * dpar[i] / a[i]); */ -/* Dblf6("%-15.15s = %-15g %-3.3s %-12.4g (%.4g%%)\n", */ -/* par_name[i], a[i], PLUSMINUS, dpar[i], temp); */ -/* } */ - -/* Dblf("\n\ncorrelation matrix of the fit parameters:\n\n"); */ -/* Dblf(" "); */ - -/* for (j = 0; j < num_params; j++) */ -/* Dblf2("%-6.6s ", par_name[j]); */ - -/* Dblf("\n"); */ -/* for (i = 0; i < num_params; i++) { */ -/* Dblf2("%-15.15s", par_name[i]); */ -/* for (j = 0; j <= i; j++) { */ -/* /\* Only print lower triangle of symmetric matrix *\/ */ -/* Dblf2("%6.3f ", covar[i][j]); */ -/* } */ -/* Dblf("\n"); */ -/* } */ - -/* free(dpar); */ -/* } */ - - return 1; -} - - -/***************************************************************** - display actual state of the fit -*****************************************************************/ -/* static void show_fit(i, chisq, last_chisq, a, lambda, device) */ -/* int i; */ -/* double chisq; */ -/* double last_chisq; */ -/* double *a; */ -/* double lambda; */ -/* FILE *device; */ -//{ - /* - int k; - - fprintf(device, "\n\n\ -Iteration %d\n\ -WSSR : %-15g delta(WSSR)/WSSR : %g\n\ -delta(WSSR) : %-15g limit for stopping : %g\n\ -lambda : %g\n\n%s parameter values\n\n", - i, chisq, chisq > NEARLY_ZERO ? (chisq - last_chisq) / chisq : 0.0, - chisq - last_chisq, epsilon, lambda, - (i > 0 ? "resultant" : "initial set of free")); - for (k = 0; k < num_params; k++) - fprintf(device, "%-15.15s = %g\n", par_name[k], a[k]); - */ -//} - - - - - - -/***************************************************************** - Interface to scheme -*****************************************************************/ -MZ_DLLEXPORT -double * do_fit(void * function, - int n_values, - double * x_values, - double * y_values, - double * z_values, - double * errors, - int n_parameters, - double * parameters) { - - /* reset lambda and other parameters if desired */ - int i; - current_fun = function; - - num_data = n_values; - fit_x = x_values; - fit_y = y_values; - fit_z = z_values; /* value is stored in z */ - err_data = errors; - - a = parameters; - num_params = n_parameters; - - /* redim_vec(&a, num_params); */ - /* par_name = (fixstr *) gp_realloc(par_name, (num_params + 1) * sizeof(fixstr), "fit param"); */ - - /* avoid parameters being equal to zero */ - for (i = 0; i < num_params; i++) { - if (a[i] == 0) { - a[i] = NEARLY_ZERO; - } - } - - if(regress(a)) { - gc_cleanup(); - return a; - } - else { /* something went wrong */ - gc_cleanup(); - return NULL; - } -} diff --git a/src/fit/fit.h b/src/fit/fit.h deleted file mode 100644 index 2bdf72c2ee..0000000000 --- a/src/fit/fit.h +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id: fit.h,v 1.5 2005/03/15 23:19:40 eli Exp $ */ - -/* GNUPLOT - fit.h */ - -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Header file: public functions in fit.c - * - * - * Copyright of this module: Carsten Grammes, 1993 - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - */ - -#include "dllexport.h" - -#ifdef __GNUC__ -# define UNUSED __attribute__((unused)) -#else -# define UNUSED -#endif - -MZ_DLLEXPORT -double * do_fit(void * function, - int n_values, - double * x_values, - double * y_values, - double * z_values, - double * errors, - int n_parameters, - double * parameters); - - -MZ_DLLEXPORT -double get_rms(); - -MZ_DLLEXPORT -double get_varience(); - -MZ_DLLEXPORT -double * get_asym_error(); - -MZ_DLLEXPORT -double * get_asym_error_percent(); diff --git a/src/fit/matrix.c b/src/fit/matrix.c deleted file mode 100644 index 76015775db..0000000000 --- a/src/fit/matrix.c +++ /dev/null @@ -1,315 +0,0 @@ -/* NOTICE: Change of Copyright Status - * - * The author of this module, Carsten Grammes, has expressed in - * personal email that he has no more interest in this code, and - * doesn't claim any copyright. He has agreed to put this module - * into the public domain. - * - * Lars Hecking 15-02-1999 - */ - -/* - * Matrix algebra, part of - * - * Nonlinear least squares fit according to the - * Marquardt-Levenberg-algorithm - * - * added as Patch to Gnuplot (v3.2 and higher) - * by Carsten Grammes - * Experimental Physics, University of Saarbruecken, Germany - * - * Internet address: cagr@rz.uni-sb.de - * - * Copyright of this module: Carsten Grammes, 1993 - * - * Permission to use, copy, and distribute this software and its - * documentation for any purpose with or without fee is hereby granted, - * provided that the above copyright notice appear in all copies and - * that both that copyright notice and this permission notice appear - * in supporting documentation. - * - * This software is provided "as is" without express or implied warranty. - */ - -#define NULL 0 -#define null 0 - -#include "fit.h" -#include "matrix.h" -#include -#include - -// create a simple gc malloc... -typedef struct Node { - struct Node * next; - void * ptr; -} Node; - -Node * head = null; - -void * my_gc_malloc(int size) { - void * ptr = malloc(size); - Node * n = (Node *)malloc(sizeof (Node)); - n->ptr = ptr; - n->next = head; - head = n; - return ptr; -} - -void gc_cleanup(){ - while(head) { - Node * current = head; - head = current->next; - free(current->ptr); - free(current); - } -} - - - -/*****************************************************************/ - -#define Swap(a,b) {double temp = (a); (a) = (b); (b) = temp;} -#define WINZIG 1e-30 - - -/***************************************************************** - internal prototypes -*****************************************************************/ - -static int fsign (double x); - -/***************************************************************** - first straightforward vector and matrix allocation functions -*****************************************************************/ -MZ_DLLEXPORT -double *vec (n) -int n; -{ - /* allocates a double vector with n elements */ - double *dp; - if( n < 1 ) - return (double *) NULL; - dp = (double *) my_gc_malloc (n * sizeof(double)); - return dp; -} - - -MZ_DLLEXPORT -double **matr (rows, cols) -int rows; -int cols; -{ - /* allocates a double matrix */ - - register int i; - register double **m; - - if ( rows < 1 || cols < 1 ) - return NULL; - m = (double **) my_gc_malloc (rows * sizeof(double *)); - m[0] = (double *) my_gc_malloc (rows * cols * sizeof(double)); - for ( i = 1; i0 ? 1 : (x < 0) ? -1 : 0) ; -} - -/***************************************************************** - - Solve least squares Problem C*x+d = r, |r| = min!, by Given rotations - (QR-decomposition). Direct implementation of the algorithm - presented in H.R.Schwarz: Numerische Mathematik, 'equation' - number (7.33) - - If 'd == NULL', d is not accesed: the routine just computes the QR - decomposition of C and exits. - - If 'want_r == 0', r is not rotated back (\hat{r} is returned - instead). - -*****************************************************************/ - -MZ_DLLEXPORT -void Givens (C, d, x, r, N, n, want_r) -double **C; -double *d; -double *x; -double *r; -int N; -int n; -int want_r; -{ - int i, j, k; - double w, gamma, sigma, rho, temp; - double epsilon = 1e-5; /* FIXME (?)*/ - -/* - * First, construct QR decomposition of C, by 'rotating away' - * all elements of C below the diagonal. The rotations are - * stored in place as Givens coefficients rho. - * Vector d is also rotated in this same turn, if it exists - */ - for (j = 0; j= 0; i--) { /* solve R*x+d = 0, by backsubstitution */ - double s = d[i]; - r[i] = 0; /* ... and also set r[i] = 0 for i= 0; j--) - for (i = N-1; i >= 0; i--) { - if ((rho = C[i][j]) == 1) { /* reconstruct gamma, sigma from stored rho */ - gamma = 0; - sigma = 1; - } else if (fabs(rho)<1) { - sigma = rho; - gamma = sqrt(1-sigma*sigma); - } else { - gamma = 1/fabs(rho); - sigma = fsign(rho)*sqrt(1-gamma*gamma); - } - temp = gamma*r[j] + sigma*r[i]; /* rotate back indices (i,j) */ - r[i] = -sigma*r[j] + gamma*r[i]; - r[j] = temp; - } -} - - -/* Given a triangular Matrix R, compute (R^T * R)^(-1), by forward - * then back substitution - * - * R, I are n x n Matrices, I is for the result. Both must already be - * allocated. - * - * Will only calculate the lower triangle of I, as it is symmetric - */ - -MZ_DLLEXPORT -void Invert_RtR ( R, I, n) -double **R; -double **I; -int n; -{ - int i, j, k; - - /* fill in the I matrix, and check R for regularity : */ - - for (i = 0; i= k; i--) { /* don't compute upper triangle of A */ - double s = I[i][k]; - for (j = i+1; j