anchor.diff:      });
     }
   
  +  bool isMovieFile(String path) {
  +    if(path.endsWith(".mp4")) {
  +      return true;
  +    } else {
  +      return false;
  +    }
  +  }
  + 
  +  String contentType(String path) {
  +    if(path.endsWith(".mp4")){
  +      return "video/mp4";
  +    } else {
  +      return "application/octet-stream";
  +    }
  +  }
  +  async.Future _startResponseHomePage(hetima.HetiSocket socket) {
  +    StringBuffer content = new StringBuffer();
  +    content.write("<html>");
  +    content.write("<body>");
  +    for (String r in _publicFileList.keys) {
  +      content.write("<div><a href=./${r}>${r}</a>");
  +      if(isMovieFile("${r}")) {
  +        content.write("<a href=./${r}?preview=true>(preview)</a></div>");
  +      } else {
  +        content.write("</div>");        
  +      }
  +    }
  +    content.write("</body>");
  +    content.write("</html>");
  +
  +    String cv = content.toString();
  +    List<int> b = convert.UTF8.encode(content.toString());
  +    StringBuffer response = new StringBuffer();
  +    response.write("HTTP/1.1 200 OK\r\n");
  +    response.write("Connection: close\r\n");
  +    response.write("Content-Length: ${b.length}\r\n");
  +    response.write("Content-Type: text/html\r\n");
  +    response.write("\r\n");
  +    return socket.send(convert.UTF8.encode(response.toString())).then((hetima.HetiSendInfo i) {
  +      return socket.send(b);
  +    }).then((hetima.HetiSendInfo i) {
  +      socket.close();
  +    }).catchError((e) {
  +      socket.close();
  +    });
  +  }
  +
     async.Future<hetima.HetiHttpServer> _retryBind() {
       async.Completer<hetima.HetiHttpServer> completer = new async.Completer();
       int portMax = _localPort + 100;
  
positive.code:       });
      });
    }
    void _startResponseFile(hetima.HetiSocket socket, hetima.HetimaFile file) {
      hetima.ArrayBuilder response = new hetima.ArrayBuilder();
      file.getLength().then((int length) {
  
negative.code:     int start = index;
      responseTask() {
        int end = start + 256 * 1024;
        if (end > (index + length)) {
          end = (index + length);
        }
        print("####### ${start} ${end}");
        file.read(start, end).then((hetima.ReadResult readResult) {
          return socket.send(readResult.buffer);
        }).then((hetima.HetiSendInfo i) {
          if (end >= (index + length)) {
            socket.close();
          } else {
            start = end;
  