anchor.diff:    String inputFile = arguments[arguments.length-2];
     String outputFile = arguments[arguments.length-1];
   
  -  if (isEncoding) {
  +  print("Converting ${inputFile} to ${outputFile}");
  +
  +  try {
       new File(inputFile).readAsBytes()
  -      .then((List<int> bytes) => encodeCsvToPng(bytes, outputFile));
  -  } else {
  -    new File(inputFile).readAsBytes()
  -      .then((List<int> bytes) => decodePngToString(bytes, outputFile));
  +    .then((List<int> bytes) {
  +      isEncoding ? encodeCsvToPng(bytes, outputFile) : decodePngToString(bytes, outputFile);
  +    });
  +  } catch (error, stackTrace) {
  +    print("Caught Exception: ${error}\n${stackTrace}");
     }
  -
     print("Finished!");
   }
  
positive.code:   new File(filename).writeAsBytesSync(encodePng(imageToRender));
  }
  
  void decodePngToString(List<int> bytes, String filename) {
    Image image = decodePng(bytes);
  
    print(UTF8.decode(split4ByteInt(image.data)));
  }
  
  List<int> split4ByteInt(list) {
    var result = new List<int>();
    list.forEach((byte) {
      result.addAll([
  
negative.code: import 'dart:io';
  import 'package:image/image.dart';
  
  const int BYTE_SIZE = 4;
  const int DEFAULT_WIDTH = 200;
  
  /**
   * Takes a file and reads it in as bytes. These
   * are then encoded into an image that is either 200
   * pixels long or the max length possible given the data
   */
  void encodeCsvToPng(List<int> bytes, String filename) {
    int pixelCount = bytes.length ~/ BYTE_SIZE;
    int width = pixelCount < DEFAULT_WIDTH ? pixelCount : DEFAULT_WIDTH;
    int height = pixelCount ~/ width;
  
    if (height <= 0) {
      height = 1;
  