anchor.diff:        DataString :: ascii_string().
   
   mime_decode_to_string(Bin) when is_binary(Bin) ->
  -    mime_decode_binary_to_string(Bin);
  +    mime_decode_to_string(binary_to_list(Bin));
   mime_decode_to_string(List) when is_list(List) ->
       mime_decode_list_to_string(List).
   
  
positive.code: mime_decode_list_to_string_after_eq([], B1, B2, B3) ->
      binary_to_list(<<B1:6,B2:6,(B3 bsr 2):4>>).
  
  mime_decode_binary_to_string(<<0:8, Cs/bits>>) ->
      mime_decode_binary_to_string(Cs);
  mime_decode_binary_to_string(<<C1:8, Cs/bits>>) ->
      case b64d(C1) of
          B1 when is_integer(B1) -> mime_decode_binary_to_string(Cs, B1);
          _ -> mime_decode_binary_to_string(Cs) % eq is padding
      end;
  mime_decode_binary_to_string(<<>>) ->
      [].
  
  mime_decode_binary_to_string(<<0:8, Cs/bits>>, B1) ->
      mime_decode_binary_to_string(Cs, B1);
  mime_decode_binary_to_string(<<C2:8, Cs/bits>>, B1) ->
      case b64d(C2) of
          B2 when is_integer(B2) ->
              mime_decode_binary_to_string(Cs, B1, B2);
          _ -> mime_decode_binary_to_string(Cs, B1) % eq is padding
      end.
  
  mime_decode_binary_to_string(<<0:8, Cs/bits>>, B1, B2) ->
      mime_decode_binary_to_string(Cs, B1, B2);
  mime_decode_binary_to_string(<<C3:8, Cs/bits>>, B1, B2) ->
      case b64d(C3) of
          B3 when is_integer(B3) ->
              mime_decode_binary_to_string(Cs, B1, B2, B3);
          eq=B3 -> mime_decode_binary_to_string_after_eq(Cs, B1, B2, B3);
          _ -> mime_decode_binary_to_string(Cs, B1, B2)
      end.
  
  mime_decode_binary_to_string(<<0:8, Cs/bits>>, B1, B2, B3) ->
      mime_decode_binary_to_string(Cs, B1, B2, B3);
  mime_decode_binary_to_string(<<C4:8, Cs/bits>>, B1, B2, B3) ->
      case b64d(C4) of
          B4 when is_integer(B4) ->
              Bits4x6 = (B1 bsl 18) bor (B2 bsl 12) bor (B3 bsl 6) bor B4,
              Octet1 = Bits4x6 bsr 16,
              Octet2 = (Bits4x6 bsr 8) band 16#ff,
              Octet3 = Bits4x6 band 16#ff,
              [Octet1, Octet2, Octet3 | mime_decode_binary_to_string(Cs)];
          eq ->
              mime_decode_binary_to_string_after_eq(Cs, B1, B2, B3);
          _ -> mime_decode_binary_to_string(Cs, B1, B2, B3)
      end.
  
  mime_decode_binary_to_string_after_eq(<<0:8, Cs/bits>>, B1, B2, B3) ->
      mime_decode_binary_to_string_after_eq(Cs, B1, B2, B3);
  mime_decode_binary_to_string_after_eq(<<C:8, Cs/bits>>=Cs0, B1, B2, B3) ->
      case b64d(C) of
          B when is_integer(B) ->
              %% More valid data, skip the eq as invalid
              case B3 of
                  eq -> mime_decode_binary_to_string(Cs, B1, B2, B);
                  _ -> mime_decode_binary_to_string(Cs0, B1, B2, B3)
              end;
          _ -> mime_decode_binary_to_string_after_eq(Cs, B1, B2, B3)
      end;
  mime_decode_binary_to_string_after_eq(<<>>, B1, B2, eq) ->
      binary_to_list(<<B1:6,(B2 bsr 4):2>>);
  mime_decode_binary_to_string_after_eq(<<>>, B1, B2, B3) ->
      binary_to_list(<<B1:6,B2:6,(B3 bsr 2):4>>).
  
  decode_list([C1 | Cs], A) ->
      case b64d(C1) of
          ws -> decode_list(Cs, A);
  
negative.code: only_ws([C | Cs], A) ->
      case b64d(C) of
          ws -> only_ws(Cs, A);
          _ -> erlang:error(function_clause)
      end.
  
  