anchor.diff:    }
   
     @override
  +  Future<List<Song>> flatten(String path) async {
  +    final url = makeURL(flattenEndpoint + Uri.encodeComponent(path));
  +    final responseBody = await completeRequest(_Method.get, url, authenticate: true);
  +    try {
  +      return (json.decode(utf8.decode(responseBody)) as List).map((c) => Song.fromJson(c)).toList();
  +    } catch (e) {
  +      throw APIError.responseParseError;
  +    }
  +  }
  +
  +  @override
     Future<List<Directory>> random() async {
       final url = makeURL(randomEndpoint);
       final responseBody = await completeRequest(_Method.get, url, authenticate: true);
  
positive.code: abstract class API extends ChangeNotifier {
    State get state;
    Future<List<CollectionFile>> browse(String path);
    Future<List<Directory>> random();
    Future<List<Directory>> recent();
    Uri getImageURI(String path);
  
negative.code: 
  final apiVersionEndpoint = '/api/version/';
  final browseEndpoint = '/api/browse/';
  final flattenEndpoint = '/api/flatten/';
  final randomEndpoint = '/api/random/';
  final recentEndpoint = '/api/recent/';
  final loginEndpoint = '/api/auth/';
  