anchor.diff:  exrop_next([S0|S1]) ->
       {?MASK(58, S0 + S1), ?exrop_next_s(S0, S1, S1_a)}.
   
  -exrop_uniform({Alg, R}) ->
  +exrop_uniform({AlgHandler, R}) ->
       {V, R1} = exrop_next(R),
       %% Waste the lowest bit since it is of lower
       %% randomness quality than the others
  -    {(V bsr (58-53)) * ?TWO_POW_MINUS53, {Alg, R1}}.
  -
  -exrop_uniform(Range, {Alg, R}) ->
  +    {(V bsr (58-53)) * ?TWO_POW_MINUS53, {AlgHandler, R1}}.
  +
  +exrop_uniform(Range, {AlgHandler, R}) ->
       {V, R1} = exrop_next(R),
       MaxMinusRange = ?BIT(58) - Range,
  -    ?uniform_range(Range, Alg, R1, V, MaxMinusRange, I).
  +    ?uniform_range(Range, AlgHandler, R1, V, MaxMinusRange, I).
   
   %% Split a 116 bit constant into two 58 bit words,
   %% a top '1' marks the end of the low word.
  
positive.code: %% =====================================================================
  
  %% Return algorithm and seed so that RNG state can be recreated with seed/1
  -spec export_seed() -> undefined | export_state().
  export_seed() ->
      case get(?SEED_DICT) of
  	{#{type:=Alg}, Seed} -> {Alg, Seed};
  	_ -> undefined
      end.
  
  
negative.code:     %% Fill up to 53 bits, we have at most 52
      B0 = (53 - ?BC(M0, 52)), % Missing bits
      {(((M0 bsl B0) bor (V1 bsr (Bits - B0))) * math:pow(2.0, -1064 - B0)),
       {AlgHandler, R1}};
  uniform_real_s(AlgHandler, Next, M0, BitNo, R1, V1, Bits) ->
      if
          %% Optimize the most probable.
          %% Fill up to 53 bits.
  