anchor.diff:      [Name|node_names(T)].
   
   %% @private
  -populate_graph(Nodes, Graph) ->
  -    %% Get bucket name.
  -    BucketName = bucket_name(),
  -
  +populate_graph(State, Nodes, Graph) ->
       lists:foldl(
           fun(Node, OrphanedNodes) ->
               File = prefix(atom_to_list(Node)),
               try
  -                Result = erlcloud_s3:get_object(BucketName, File),
  -                Body = proplists:get_value(content, Result, undefined),
  -                case Body of
  +                case download_artifact(State, File) of
                       undefined ->
                           OrphanedNodes;
  -                    _ ->
  +                    Body ->
                           Membership = binary_to_term(Body),
                           case Membership of
                               [Node] ->
  
positive.code:                           attempted_nodes=AttemptedNodes}};
  
  handle_info(?ARTIFACT_MESSAGE, State) ->
      %% Get bucket name.
      BucketName = bucket_name(),
  
      %% Get current membership.
      {ok, Nodes} = lasp_peer_service:members(),
  
      %% Store membership.
      Node = prefix(atom_to_list(node())),
      Membership = term_to_binary(Nodes),
      try
          erlcloud_s3:put_object(BucketName, Node, Membership)
      catch
          _:{aws_error, Error} ->
              lager:info("Could not upload artifact: ~p", [Error])
      end,
  
      schedule_artifact_upload(),
  
  
negative.code: 
      %% Build the graph.
      Graph = digraph:new(),
      Orphaned = populate_graph(State, Nodes, Graph),
  
      {SymmetricViews, VisitedNames} = breath_first(node(), Graph, ordsets:new()),
      AllNodesVisited = length(Nodes) == length(VisitedNames),
  