anchor.diff:  filter_headers([{<<"content-length">>, _}|Headers], Acc) ->
     filter_headers(Headers, Acc);
   filter_headers([{<<"date">>, _}|Headers], Acc) ->
  +  filter_headers(Headers, Acc);
  +filter_headers([{<<"transfer-encoding">>, _}|Headers], Acc) ->
     filter_headers(Headers, Acc);
   filter_headers([Header|Headers], Acc) ->
     filter_headers(Headers, [Header|Acc]).
  
positive.code:                              res_headers = FilteredHeaders}, fun reply/2)
    end.
  
  reply(Req, State = #state{res_status = Status, res_headers = Headers, res_has_body = true}) ->
    {ok, Req2} = cowboy_req:chunked_reply(Status, Headers, Req),
    next(Req2, State, fun res_body/2);
  reply(Req, State = #state{res_status = Status, res_headers = Headers}) ->
    {ok, Req2} = cowboy_req:reply(Status, Headers, Req),
    terminate(Req2, State).
  
  res_body(Req, State) ->
    case exported(Req, State, res_body, 3) of
      true ->
        next(Req, State, fun transform_res_body/2);
      _ ->
        next(Req, State, fun chunk_res_body/2)
    end.
  
  transform_res_body(Req, State = #state{conn = Conn, ref = Ref, timeout = Timeout}) ->
    case gun:await_body(Conn, Ref, Timeout) of
      {ok, Body} ->
        {Body2, Req2, HandlerState} = call(Req, State, res_body, Body),
        send(Req2, State#state{handler_state = HandlerState}, Body2, fun terminate/2);
      {error, timeout} ->
        next(Req, State, 504);
      {error, Reason} ->
  
negative.code:       terminate(Req, State);
      {error, Reason} ->
        error_terminate(Req, State, error, Reason, send, 4)
    end;
  send(Req, State = #state{res_status = Status, res_headers = Headers}, Data, Next) ->
    {ok, Req2} = cowboy_req:reply(Status, Headers, Data, Req),
    next(Req2, State, Next).
  
  exported(_Req, _State = #state{handler = Handler}, Callback, Arity) ->
    erlang:function_exported(Handler, Callback, Arity).
  