(List
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('default_port', {[DQ [LIT_CHARS 8080]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('http_version', {[DQ [LIT_CHARS HTTP/1.1]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('wwwoosh_fifo', {[DQ [LIT_CHARS /tmp/wwwoosh_fifo]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('CR', {[SQ <LIT_CHARS "\\r">]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('LF', {[SQ <LIT_CHARS "\\n">]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('CRLF', {[DQ [VarSub CR][VarSub LF]]})])
  (FunctionDef handle_request []
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('app', {[DQ [VarSub 1]]})])
      (Com {[LIT_CHARS read]} {[LIT_CHARS request_line]}      )
      (While
        (AndOr OP_AND_IF
          (Com {[LIT_CHARS read]} {[LIT_CHARS header]}          )
          (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub header]]} {[LIT_DBRACKET_LIKE "="]} {[SQ <LIT_CHARS "\\r">]} {[LIT_DBRACKET_LIKE "]"]}          )
        )
        (List
          (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('header_name', {[DQ [LIT_CHARS HTTP_][ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub header]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS ":">]} {[LIT_CHARS -f]} {[LIT_CHARS 1]}) (Com {[LIT_CHARS tr]} {[SQ <LIT_CHARS a-z->]} {[SQ <LIT_CHARS A-Z_>]}) )]]})])
          (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[{[VarSub header_name] [LIT_DBRACKET_LIKE "="] [DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub header]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS ":">]} {[LIT_CHARS -f]} {[LIT_CHARS 2]}) (Com {[LIT_CHARS sed]} {[SQ <LIT_CHARS "s/^ //">]}) )]]}] bindings=[])
        )
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('REQUEST_METHOD', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub request_line]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS " ">]} {[LIT_CHARS -f]} {[LIT_CHARS 1]}) )]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('HTTP_VERSION', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub request_line]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS " ">]} {[LIT_CHARS -f]} {[LIT_CHARS 3]}) (Com {[LIT_CHARS tr]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS "\\r">]}) )]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('request_path', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub request_line]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS " ">]} {[LIT_CHARS -f]} {[LIT_CHARS 2]}) )]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('PATH_INFO', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub request_path]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS "?">]} {[LIT_CHARS -f]} {[LIT_CHARS 1]}) )]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('QUERY_STRING', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub request_path]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS "?">]} {[LIT_CHARS -f]} {[LIT_CHARS 2]}) )]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('SCRIPT_NAME', {[DQ ]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('SERVER_NAME', {[DQ [LIT_CHARS localhost]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=1 words=[] bindings=[('SERVER_PORT', {[DQ [VarSub port]]})])
      (Com {[DQ [VarSub app]]}      )
    )
  )
  (FunctionDef handle_response []
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_status', {[DQ [LIT_CHARS "200 OK"]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_headers', {[DQ ]})])
      (While
        (AndOr OP_AND_IF
          (Com {[LIT_CHARS read]} {[LIT_CHARS header]}          )
          (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub header]]} {[LIT_DBRACKET_LIKE "="]} {[DQ ]} {[LIT_DBRACKET_LIKE "]"]}          )
        )
        (List
          (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('header_name', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub header]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS ":">]} {[LIT_CHARS -f]} {[LIT_CHARS 1]}) (Com {[LIT_CHARS tr]} {[SQ <LIT_CHARS A-Z>]} {[SQ <LIT_CHARS a-z>]}) )]]})])
          (If
            (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub header_name]]} {[LIT_DBRACKET_LIKE "="]} {[DQ [LIT_CHARS status]]} {[LIT_DBRACKET_LIKE "]"]}            )
            (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_status', {[DQ [ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub header]}) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d]} {[SQ <LIT_CHARS ":">]} {[LIT_CHARS -f]} {[LIT_CHARS 2]}) (Com {[LIT_CHARS sed]} {[SQ <LIT_CHARS "s/^ //">]}) )]]})])
            (ElseTrue)
            (If
              (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub response_headers]]} {[LIT_DBRACKET_LIKE "]"]}              )
              (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_headers', {[DQ [VarSub response_headers][VarSub CRLF][VarSub header]]})])
              (ElseTrue)
              (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_headers', {[DQ [VarSub header]]})])
            )
          )
        )
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('header', {[DQ [LIT_CHARS "Date: "][ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -u]} {[SQ <LIT_CHARS "+%a, %d %b %Y %R:%S GMT">]})]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('response_headers', {[DQ [VarSub response_headers][VarSub CRLF][VarSub header]]})])
      (Com {[LIT_CHARS echo]} {[DQ [VarSub http_version][LIT_CHARS " "][VarSub response_status][VarSub CRLF][VarSub response_headers][VarSub CRLF][VarSub CR]]}      )
      (Com {[LIT_CHARS cat]}      )
    )
  )
  (FunctionDef wwwoosh_run []
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('app', {[DQ [VarSub 1]]})])
      (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub wwwoosh_fifo]]}      )
      (Com {[LIT_CHARS mkfifo]} {[DQ [VarSub wwwoosh_fifo]]}      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('port', {[DQ [VarSub default_port]]})])
      (AndOr OP_AND_IF
        (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 1]} {[LIT_DBRACKET_LIKE "]"]}        )
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('port', {[DQ [VarSub 2]]})])
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('debug', {[DQ ]})])
      (AndOr OP_AND_IF
        (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -gt]} {[LIT_CHARS 2]} {[LIT_DBRACKET_LIKE "]"]}        )
        (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('debug', {[DQ [VarSub 3]]})])
      )
      (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting Wwwoosh on port "][VarSub port][LIT_CHARS ...]]}      )
      (While
        (Com {[LIT_CHARS true]}        )
        (If
          (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub debug]]} {[LIT_DBRACKET_LIKE "]"]}          )
          (Pipeline
            (Com {[LIT_CHARS nc]} {[LIT_CHARS -l]} {[VarSub port]}
              <
              (FilenameRedirectNode filename={[DQ [VarSub wwwoosh_fifo]]} <REDIR_LESS "<"> 0),
              >
            )
            (Com {[LIT_CHARS tee]} {[LIT_CHARS /dev/stderr]}            )
            (Com {[LIT_CHARS handle_request]} {[DQ [VarSub app]]}            )
            (Com {[LIT_CHARS handle_response]}            )
            (Com {[LIT_CHARS tee]} {[LIT_CHARS /dev/stderr]}
              <
              (FilenameRedirectNode filename={[DQ [VarSub wwwoosh_fifo]]} <REDIR_GREAT ">"> 1),
              >
            )
          )
          (ElseTrue)
          (Pipeline
            (Com {[LIT_CHARS nc]} {[LIT_CHARS -l]} {[VarSub port]}
              <
              (FilenameRedirectNode filename={[DQ [VarSub wwwoosh_fifo]]} <REDIR_LESS "<"> 0),
              >
            )
            (Com {[LIT_CHARS handle_request]} {[DQ [VarSub app]]}            )
            (Com {[LIT_CHARS handle_response]}
              <
              (FilenameRedirectNode filename={[DQ [VarSub wwwoosh_fifo]]} <REDIR_GREAT ">"> 1),
              >
            )
          )
        )
      )
    )
  )
)