GOOF----LE-8-2.0]4hI] gguile  gdefine-module*   gweb gserver  gfilenameS fweb/server.scm gimportsS gsrfi gsrfi-9     ggnu     grnrs g bytevectors   gice-9 g binary-ports   grequest   gresponse   !gsystem "grepl #gerror-handling $!"# %$ &gcontrol '& (' )giconv *) +* , %(+  -gexportsS .gdefine-server-impl /glookup-server-impl 0gmake-server-impl 1g server-impl? 2gserver-impl-name 3gserver-impl-open 4gserver-impl-read 5gserver-impl-write 6gserver-impl-close 7g open-server 8g read-client 9ghandle-request :gsanitize-response ;g write-client g run-server ?./0123456789:;<=> @gset-current-module A@ B@ Cg gettimeofday Dg*timer* Egpk Fg print-elapsed Ggmake-syntax-transformer HG IG Jg debug-elapsed Kgmacro Lg $sc-dispatch ML NL Og_ Pgany QOP Rg *time-debug?* Sg syntax-object Tgtop UT Vgribcage Wgwho XW YU Zf l-1e6f79399-8 [Z \VXY[ ]V ^gx _^ `f l-1e6f79399-5 a` bV_Ya cU\]b dghygiene ed fSFce gg *unspecified* hSgce igsyntax-violation ji ki lf-source expression failed to match any pattern mg server-impl ng%make-server-impl-procedure oOPPPPP pglambda qgm-1e6f79399-12 rqT sg t-1e6f79399-d tg t-1e6f79399-e ug t-1e6f79399-f vgt-1e6f79399-10 wgt-1e6f79399-11 xstuvw yrrrrr zfl-1e6f79399-17 {fl-1e6f79399-18 |fl-1e6f79399-19 }fl-1e6f79399-1a ~fl-1e6f79399-1b z{|}~ Vxy r fl-1e6f79399-14  V_ gshift g proc-name gargs  UU fl-1e8ba8b5a-2ba fl-1e8ba8b5a-2bb  V gkey gvalue gname gformals gbody  UUUUU fl-1e8ba8b5a-2ad fl-1e8ba8b5a-2ae fl-1e8ba8b5a-2af fl-1e8ba8b5a-2b0 fl-1e8ba8b5a-2b1  V gmake-procedure-name  U fl-1e8ba8b5a-29d  V fl-1e8ba8b5a-29c  V_Y r]]]]]  d   Sp U] Se gopen Se gread Se gwrite Se gclose Se  g make-struct g m-1e6f79399-b T gt-1e8ba8b5a-38d gt-1e8ba8b5a-38c gt-1e8ba8b5a-38b  gm-1e8ba8b5a-38e T  fl-1e8ba8b5a-392 fl-1e8ba8b5a-393 fl-1e8ba8b5a-394  V g ctor-args  fl-1e8ba8b5a-37a  VY gctor gfield  fl-1e8ba8b5a-376 fl-1e8ba8b5a-377  V gform g type-name gconstructor-spec g field-names  UUUU fl-1e8ba8b5a-36b fl-1e8ba8b5a-36c fl-1e8ba8b5a-36d fl-1e8ba8b5a-36e  V g record-layout gfunctional-setters gsetters gcopier ggetters g constructor ggetter-identifiers gfield-identifiers  UUUUUUUU fl-1e8ba8b5a-343 fl-1e8ba8b5a-341 fl-1e8ba8b5a-33f fl-1e8ba8b5a-33d fl-1e8ba8b5a-33b fl-1e8ba8b5a-339 fl-1e8ba8b5a-337 fl-1e8ba8b5a-335  V fl-1e8ba8b5a-334  V_Y ]]]]]] S Sme S    geach-any O i i fWrong number of arguments g identifier?   U] Sne grecord-type-vtable   g pwpwpwpwpw gdefault-record-printer     gset-struct-vtable-name!        gvtable-offset-user      g%server-impl?-procedure gm-1e6f79399-27 T gt-1e6f79399-26   fl-1e6f79399-2c  V fl-1e6f79399-29  V_ ]]]]]  Sp gobj gt-1e8ba8b5a-47e gt-1e8ba8b5a-478  gt-1e8ba8b5a-479 !gt-1e8ba8b5a-47a "gt-1e8ba8b5a-47d #gt-1e8ba8b5a-47c $gt-1e8ba8b5a-47b % !"#$ &gm-1e8ba8b5a-47f '&T (''''''' )fl-1e8ba8b5a-483 *fl-1e8ba8b5a-484 +fl-1e8ba8b5a-485 ,fl-1e8ba8b5a-486 -fl-1e8ba8b5a-487 .fl-1e8ba8b5a-488 /fl-1e8ba8b5a-489 0)*+,-./ 1V%(0 2g copier-id 32 4fl-1e8ba8b5a-476 54 6V3Y5 7g ctor-name 87 9fl-1e8ba8b5a-46e :9 ;V8Y: < =fl-1e8ba8b5a-46c >= ?V<Y> @glayout A@ Bfl-1e8ba8b5a-46a CB DVAYC Eg immutable? FE Gfl-1e8ba8b5a-468 HG IVFYH Jg field-count KJ Lfl-1e8ba8b5a-466 ML NVKYM Og getter-ids PO Qfl-1e8ba8b5a-463 RQ SVPYR Tg field-ids UT Vfl-1e8ba8b5a-460 WV XVUYW Ygpredicate-name Zg field-spec [EYZ \UUUUUU ]fl-1e8ba8b5a-453 ^fl-1e8ba8b5a-454 _fl-1e8ba8b5a-455 `fl-1e8ba8b5a-456 afl-1e8ba8b5a-457 bfl-1e8ba8b5a-458 c]^_`ab dV[\c e]]1]]]]6];]?]D]I]N]S]Xd fSe gf hgand iShe jgstruct? kSje lkf mgeq? nSme og struct-vtable pSoe qpf rU] sSmre tnqs uilt vgu wU] xSwe ygthrow-bad-struct zy {y |g%server-impl-name-procedure }gfree-id ~g %%on-error gm-1e6f79399-33 T  fl-1e6f79399-35  V_ ]]]]]  S~ } P g%%type gt-1e8ba8b5a-3a5 gt-1e8ba8b5a-3a6 gt-1e8ba8b5a-3a7 gt-1e8ba8b5a-3a8 gt-1e8ba8b5a-3a9 gt-1e8ba8b5a-3aa gt-1e8ba8b5a-3ab  gm-1e8ba8b5a-3ac T  fl-1e8ba8b5a-3b0 fl-1e8ba8b5a-3b1 fl-1e8ba8b5a-3b2 fl-1e8ba8b5a-3b3 fl-1e8ba8b5a-3b4 fl-1e8ba8b5a-3b5 fl-1e8ba8b5a-3b6  V ggetter gindex  fl-1e8ba8b5a-3a3 fl-1e8ba8b5a-3a4  V O2 UUU fl-1e8ba8b5a-39e fl-1e8ba8b5a-39f fl-1e8ba8b5a-3a0  V ]]]]]] S } OP gck gerr gs   fl-1e6f79399-38 fl-1e6f79399-39  V ]]]]]  S gquote S U] Sme   g%%index S } OP fl-1e6f79399-3d fl-1e6f79399-3e  V ]]]]]  S S ] S e   g%%copier S } OP fl-1e6f79399-42 fl-1e6f79399-43  V ]]]]]  S S g%%server-impl-set-fields U] Se   gt-1e6f79399-32  fl-1e6f79399-47  V ]]]]]  Sp ]]]]]] S  gif S Sm So  U] Sme  g struct-ref S ] S e  Sy S S2e     U] S|e g%server-impl-open-procedure gm-1e6f79399-4e T  fl-1e6f79399-50  V_ ]]]]]  S~  }   P  ]]]]]]  S   }  O  P  fl-1e6f79399-53 fl-1e6f79399-54  V ]]]]]  S S U] Sme   S  } O P fl-1e6f79399-58 fl-1e6f79399-59   !V  "!]]]]]  #S" $S" %!] &S %e '$& (' )S  *}) +O *P ,fl-1e6f79399-5d -fl-1e6f79399-5e .,- /V. 0/]]]]]  1S0 2S0 3U/] 4S3e 524 65 7gt-1e6f79399-4d 87 9fl-1e6f79399-62 :9 ;V8: <;]]]]]  =Sp< >;]]]]]] ?S> @? AS> BSm> CSo> DC? EU;] FSmEe GBDF HS> I;] JS Ie KH?J LSy> MS> NS3Ee OMN PL?O QAGKP R=@Q SU] TSSe Ug%server-impl-read-procedure Vgm-1e6f79399-69 WVT XW Yfl-1e6f79399-6b ZY [V_XZ \W][]]]]  ]S~\ ^}] _^P `][]]]]] aS` b}a cO_bP dWW efl-1e6f79399-6e ffl-1e6f79399-6f gef hVdg iWh][]]]]  jSi kSi lUh][ mSmle nkm on pS` q}p rO_qP sfl-1e6f79399-73 tfl-1e6f79399-74 ust vVdu wWv][]]]]  xSw ySw zv][ {S ze |y{ }| ~S` }~ O_P fl-1e6f79399-78 fl-1e6f79399-79  Vd W][]]]]  S S U][ Se   gt-1e6f79399-68  fl-1e6f79399-7d  VX W][]]]]  Sp ][]]]]] S  S Sm So  U][ Sme  S ][ S e  Sy S S4e     U][ SUe g%server-impl-write-procedure gm-1e6f79399-84 T  fl-1e6f79399-86  V_ ]]]]]  S~ } P ]]]]]] S } OP  fl-1e6f79399-89 fl-1e6f79399-8a  V ]]]]]  S S U] Sme   S } OP fl-1e6f79399-8e fl-1e6f79399-8f  V ]]]]]  S S ] S e   S } OP fl-1e6f79399-93 fl-1e6f79399-94  V ]]]]]  S S U] Se   gt-1e6f79399-83  fl-1e6f79399-98  V ]]]]]  Sp ]]]]]] S  S Sm So  U] Sme  S ] S e  Sy S S5e     U] Se g%server-impl-close-procedure gm-1e6f79399-9f T  fl-1e6f79399-a1  V_ ]]]]]  S~ }  P  ]]]]]]  S   }   O  P  fl-1e6f79399-a4 fl-1e6f79399-a5  V ]]]]]  S S U] Sme   S  } O P fl-1e6f79399-a9 fl-1e6f79399-aa   V ! ]]]]]  "S! #S! $ ] %S $e &#% '& (S  )}( *O )P +fl-1e6f79399-ae ,fl-1e6f79399-af -+, .V- /.]]]]]  0S/ 1S/ 2U.] 3S2e 413 54 6gt-1e6f79399-9e 76 8fl-1e6f79399-b3 98 :V79 ;:]]]]]  <Sp; =:]]]]]] >S= ?> @S= ASm= BSo= CB> DU:] ESmDe FACE GS= H:] IS He JG>I KSy= LS= MS6De NLM OK>N P@FJO Q<?P RU] SSRe Tgeach UPP VTU WPV XPW YPX Zg %%set-fields [gdummy \gcheck? ]gexpr ^[\] _gm-1e6f79399-ba `_T a` bfl-1e6f79399-bf cfl-1e6f79399-c0 dfl-1e6f79399-c1 efl-1e6f79399-c2 ffl-1e6f79399-c3 gbcdef hV^ag i` jfl-1e6f79399-bc kj lV_ik mgt-1e8ba8b5a-3c4 ngt-1e8ba8b5a-3c6 ogt-1e8ba8b5a-3c5 pmno qgm-1e8ba8b5a-3c7 rqT srrr tfl-1e8ba8b5a-3cb ufl-1e8ba8b5a-3cc vfl-1e8ba8b5a-3cd wtuv xVpsw yfl-1e8ba8b5a-3c1 zfl-1e8ba8b5a-3c2 {fl-1e8ba8b5a-3c3 |yz{ }V| ~h]l]x]]]}  SZ~ Uh]l Sme S2e S3e S4e S5e S6e  gmap   glist PPPPPP gdefine [ gm-1e6f79399-e7 T UUUUU fl-1e6f79399-ec fl-1e6f79399-ed fl-1e6f79399-ee fl-1e6f79399-ef fl-1e6f79399-f0 fl-1e6f79399-f1  V  fl-1e6f79399-e9  V_ U] Se S0e Se g module-ref gresolve-module gerror f expected a server impl in module f"expected a server-impl or a symbol gcall-with-error-handling g pass-keysS gquit g interrupt  gon-errorS g batch-mode? g backtrace gdebug g post-errorS g    g assoc-set! g copy-tree g%%-set-fields gextend-response gbuild-response gversionS g    grequest-version gheadersS gresponse-version gstring? gresponse-content-type g text/plain  gassq-ref gcharset g content-type gappend   futf-8 gstring->bytevector g procedure? gcall-with-encoded-output-string g bytevector? gresponse-content-length gbytevector-length fbad content-length gcontent-length grequest-method gHEAD gresponse-must-not-include-body? f4response with this status code must not include body funexpected body type gvu8 j gadapt-response-version gwith-stack-and-prompt gcodeS g provided? gposix gcatch g sigaction gSIGINT gthrow gcall-with-sigint gdefault-prompt-tag g %start-stack   ghttpC5hs]4   ,-?54B>"G4Ci5DRCEDh@] 454B@>"G Cgwho  :gt  :gfilenamefweb/server.scm i  j  j  k   k   k   k   k  " l  % l  & l  ' k , k  8 m   : gnameg print-elapsedCFR4IJKNQRfhhT]$CCLgwho  gfilenamefweb/server.scm  v    Cklh(a] 45$@6Ygx  "gtmp "gfilenamefweb/server.scm s   " C5JRmh]Cgname  gopen  gread   gwrite   gclose   gfilenamefweb/server.scm z    gnameg%make-server-impl-procedureCnR4I0KNoh]Cg t-1e6f79399-d  g t-1e6f79399-e  g t-1e6f79399-f   gt-1e6f79399-10   gt-1e6f79399-11      C0hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    Ch]C   Ckl hp]45$@45$ O@45$4O?$@  6  6zgx  ngtmp ngtmp  " ngtmp  > ngfilenamefweb/server.scm z   n C50Rm4 m>"G nimRmhv]$CCngobj  gfilenamefweb/server.scm z    gnameg%server-impl?-procedureCR4I1KNQvh6]C.gt-1e6f79399-26    C1hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    Cxh]C   Ckl hp]45$@45$ O@45$4O?$@  6  6zgx  ngtmp ngtmp  " ngtmp  > ngfilenamefweb/server.scm z   n C51Rm{2hx]& C6pgs  gfilenamefweb/server.scm z    gnameg%server-impl-name-procedureC|R4I2KNh:]C2gerr  gs    Ch:]C2gerr  gs    Ch:]C2gerr  gs    CQh6]C.gt-1e6f79399-32    C2hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    Ch]C   Cklh]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamefweb/server.scm z   C52Rm{3hx]& C6pgs  gfilenamefweb/server.scm z    gnameg%server-impl-open-procedureCR4I3KNh:]C2gerr  gs    C#(h:]C2gerr  gs    C+16h:]C2gerr  gs    CQRh6]C.gt-1e6f79399-4d    C3hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    CTh]C   Cklh]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamefweb/server.scm z   C53Rm{4h x]& C6pgs  gfilenamefweb/server.scm z    gnameg%server-impl-read-procedureCUR4I4KNcjoh:]C2gerr  gs    Crx}h:]C2gerr  gs    Ch:]C2gerr  gs    CQh6]C.gt-1e6f79399-68    C4hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    Ch]C   Cklh]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamefweb/server.scm z   C54Rm{5h y]& C6qgs  gfilenamefweb/server.scm z    gnameg%server-impl-write-procedureCR4I5KNh:]C2gerr  gs    Ch:]C2gerr  gs    Ch:]C2gerr  gs    CQh6]C.gt-1e6f79399-83    C5hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    Ch]C   Cklh]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamefweb/server.scm z   C55Rm{6h y]& C6qgs  gfilenamefweb/server.scm z    gnameg%server-impl-close-procedureCR4I6KN h:]C2gerr  gs    C"'h:]C2gerr  gs    C*05h:]C2gerr  gs    CQQh6]C.gt-1e6f79399-9e    C6hQ]L6Iga  gfilenamefweb/server.scm  z   COhA]L69gfilenamefweb/server.scm  z    CSh]C   Cklh]145$@45$@45$@45$ @4 5$  O@4 5$4 O?$@66gx  gtmp gtmp  " gtmp  9 gtmp  P gtmp  g gtmp  gfilenamefweb/server.scm z   C56R4IKNYh v]45Cngdummy  gcheck?  gs   ggetter   gexpr      Cklh(] 45$@6gx  "gtmp "gfilenamefweb/server.scm z   " g macro-typeg syntax-rulesgpatternsgcheck?gsggettergexprg...C5R4I.KNh ]Cgdummy  gname  gopen   gread   gwrite   gclose      Cklh(] 45$@6gx  "gtmp "gfilenamefweb/server.scm   " g macro-typeg syntax-rulesgpatternsgnamegopengreadgwritegcloseC5.Rm hx] "T$E4455"6$&C""6$&C""gimpl  ugimpl " Rgfilenamefweb/server.scm        ,   "  "  ,  . 4 7 7  : >  A V Z  Z  ]  a  d   u gnameglookup-server-implg documentationkLook up a server implementation. If IMPL is a server implementation already, it is returned directly. If it is a symbol, the binding named IMPL in the  (web server IMPL) module is looked up. Otherwise an error is signaled. Currently a server implementation is a somewhat opaque type, useful only for passing to other procedures in this module, like  read-client .C/Rm{3h i]& " 45@agimpl  g open-params  gfilenamefweb/server.scm    gnameg open-serverg documentationkOpen a server for the given implementation. Return one value, the new server object. The implementation's  open procedure is applied to OPEN-PARAMS, which should be a list.C7Rm{4h(K]L& L " 4L5L6Cgfilenamefweb/server.scm     ! Ch]-13DUg_ gfilenamefweb/server.scm     C h0 ]O45$"  6gimpl  *gserver  *gfilenamefweb/server.scm        $ + *   * gnameg read-clientg documentationk G4L> GDgresponse  ?gbody  ?gstate   ?gresponse  0 ?gbody  0 ?gfilenamefweb/server.scm         "   3  ?    ? Chf-134 5LD^g_ gfilenamefweb/server.scm   !   !   C h8]O45$"  O6ghandler  3grequest  3gbody   3gstate   3gfilenamefweb/server.scm          "  (  + 3    3 gnameghandle-requestg documentationf"Handle a given request, returning the response and body. The response and response body are produced by calling the given HANDLER with REQUEST and BODY as arguments. The elements of STATE are also passed to HANDLER as arguments, and may be returned as additional values. The new STATE, collected from the HANDLER's return values, is then returned as a list. The idea is that a server loop receives a handler from the user, along with whatever state values the user is interested in, allowing the user's handler to explicitly manage its state.C9Rm{5h(K]L& L " 4L5LLLL6Cgfilenamefweb/server.scm *   +   ' Ch]-13DUg_ gfilenamefweb/server.scm .  .  C h0]O45$"  6gimpl  0gserver  0gclient   0gresponse   0gbody   0gfilenamefweb/server.scm $  ,   -  " -  $ - * - + 0 )   0 gnameg write-clientg documentationfWrite an HTTP response and body to CLIENT. If the server and client support persistent connections, it is the implementation's responsibility to keep track of the client thereafter, presumably by attaching it to the SERVER argument somehow.C;Rm{6h(]&  " 456gimpl  !gserver  !gfilenamefweb/server.scm 1  4   ! gnameg close-serverg documentationkRelease resources allocated by a previous invocation of  open-server .C   @  ?    Ch o]M$ MM66ggfilenamefweb/server.scm B   C   E (  E 6  E   G    Ch o]M$ MM66ggfilenamefweb/server.scm B   C   E (  E 6  E   G    Ch o]M$ MM66ggfilenamefweb/server.scm B   C   E (  E 6  E   G    Ch`K]LOLO4LO>"GV4L>X4LO>"GCX4LO>"GFCgfilenamefweb/server.scm <  =   \ Chk-13L6cgk g_ gfilenamefweb/server.scm H H  Ch ] HOO6gthunk  g handler-thunk  ghandler   gfilenamefweb/server.scm 9   :  ;   ;    C"hz]6rgthunk  g handler-thunk  gfilenamefweb/server.scm 8   8 $   CRhK]L6Cgfilenamefweb/server.scm L   L /   ChC]LO6;gfilenamefweb/server.scm  L    ChK]LL6Cgfilenamefweb/server.scm N -  N 8   Ch8]45U4O>XCXFGO6gthunk  1gk  1gproc   1gfilenamefweb/server.scm J  K  K  1 N   1 gnamegwith-stack-and-promptCR89;hX]44> G$74> G 4>"G CC ghandler  Xgimpl  Xgserver   Xgstate   Xgclient   Xgrequest   Xgbody   Xgresponse  / Ugbody  / Ugstate / U gfilenamefweb/server.scm Q  X   V   [   ^  2 \ 9 a   X gnamegserve-one-clientg documentationfRead one request from SERVER, call HANDLER on the request and body, and write the response to the client. Return the new state produced by the handler procedure.C=R/7=h(z]"4LLL5"L"rgstate  gfilenamefweb/server.scm              ! C<hT]4LL>"GDLgfilenamefweb/server.scm           ChP-.13##4545OO6ghandler Mgimpl Mg open-params  Mgstate  Mgimpl  & Mgserver  1 Mgfilenamefweb/server.scm f  f .  f B   &   )   1   M   M  gnameg run-serverg documentationk Run Guile's built-in web server. HANDLER should be a procedure that takes two or more arguments, the HTTP request and request body, and returns two or more values, the response and response body. For example, here is a simple "Hello, World!" server: @example (define (handler request body) (values '((content-type . (text/plain))) "Hello, World!")) (run-server handler) @end example The response and body will be run through  sanitize-response before sending back to the client. Additional arguments to HANDLER are taken from STATE. Additional return values are accumulated into a new STATE, which will be used for subsequent requests. In this way a handler can explicitly manage its state. The default server implementation is  http , which accepts OPEN-PARAMS like  (#:port 8081) , among others. See "Web Server" in the manual, for more information.C>RCgm  ,grtd  gfilenamefweb/server.scm  J - h  6 h u i  z - 14 7 9; M R  V% $ X$ 1 X% 7 X- 7  X/ 7 X3 7  ] 6 _ J b| Q r f   r C6