anchor.diff:  valid_utf8_bytes(B) when is_binary(B) ->
       binary_skip_bytes(B, invalid_utf8_indexes(B)).
   
  -%% Interal API
  -
  -%% @spec binary_skip_bytes(B::binary(), L::[integer()]) -> binary()
  +%% Internal API
  +
  +-spec binary_skip_bytes(binary(), [non_neg_integer()]) -> binary().
   %% @doc Return B, but skipping the 0-based indexes in L.
   binary_skip_bytes(B, []) ->
       B;
  
positive.code: %%      invalid bytes.
  
  -module(mochiutf8).
  -export([valid_utf8_bytes/1, codepoint_to_bytes/1]).
  
  %% External API
  
  %% @spec codepoint_to_binary(integer()) -> binary()
  %% @doc Convert a unicode codepoint to UTF-8 bytes.
  codepoint_to_bytes(C) when (C >= 16#00 andalso C =< 16#7f) ->
      %% U+0000 - U+007F - 7 bits
  
negative.code:     binary_skip_bytes(B, L, 0, []).
  
  %% @private
  -spec binary_skip_bytes(binary(), [non_neg_integer()], non_neg_integer(), iolist()) -> binary().
  binary_skip_bytes(B, [], _N, Acc) ->
      iolist_to_binary(lists:reverse([B | Acc]));
  binary_skip_bytes(<<_, RestB/binary>>, [N | RestL], N, Acc) ->
  