anchor.diff:  
   %%
   %%
  -up_link_decode(Data, #fsm{socket = Socket0, peer = Peer} = State) ->
  -   {Pckt, #socket{in = Stream} = Socket1} = gen_http_recv(Socket0, Data),
  +up_link_decode(Data, #fsm{socket = Socket0} = State) ->
  +   {Pckt, #socket{in = Stream, peername = Peer} = Socket1} = gen_http_recv(Socket0, Data),
      http_set_state(Stream, Socket1, #http{pack = up_link_message(Pckt, Peer), state = State}).
   
   
  
positive.code:    } = deq:head(Q),
     ?access_http(#{
        req  => {Mthd, Code}
       ,peer => Peer
       ,addr => request_url(Url, HeadA)
       ,ua   => opts:val('User-Agent', opts:val('Server', undefined, HeadB), HeadA)
       ,time => tempus:diff(T)
     }),
     Http;
  
  http_request_log(#http{is = upgrade, http = {_, {_, Url, Head}}, state = #fsm{peer = Peer}} = Http) ->
     Upgrade = lens:get(lens:pair('Upgrade'), Head),
     ?access_http(#{
        req  => {upgrade, Upgrade}
       ,peer => Peer
       ,addr => request_url(Url, Head)
       ,ua   => opts:val('User-Agent', undefined, Head)
     }),
  
negative.code:    uri:path(Path, uri:authority(Authority, uri:new(http))).
  
  %%
  %% lenses
  lens_socket_peername() ->
     lens:c([lens:tuple(#fsm.socket), lens:tuple(#socket.peername)]).
  
  
  %%
  %%
  lens_http_state_queue() ->
     lens:c([lens:tuple(#http.state), lens:tuple(#fsm.queue)]).
  