anchor.diff:  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);
  
positive.code:       DataString :: ascii_string().
  
  mime_decode_to_string(Bin) when is_binary(Bin) ->
      mime_decode_binary_to_string(Bin);
  mime_decode_to_string(List) when is_list(List) ->
      mime_decode_list_to_string(List).
  
  
negative.code:         eq when B3 =:= eq -> only_ws_binary(Cs, <<A/binary,B1:6,(B2 bsr 4):2>>);
          eq                -> only_ws_binary(Cs, <<A/binary,B1:6,B2:6,(B3 bsr 2):4>>);
          B4                -> decode_binary(Cs, <<A/binary,B1:6,B2:6,B3:6,B4:6>>)
      end.
  
  only_ws_binary(<<>>, A) ->
      A;
  only_ws_binary(<<C:8, Cs/bits>>, A) ->
      case b64d(C) of
          ws -> only_ws_binary(Cs, A);
          _ -> erlang:error(function_clause)
      end.
  
  decode_list_to_string([C1 | Cs]) ->
  