analyzeDir (tail call optimizable?) count total # of files for all files in directory compute md5 checksum create file entry: file obj, relative path, checksum add entry to dictionary indexed by relative path add entry to dictionary indexed by checksum add entry to list of all entries for each subdirectory, analyzeDir return analysis