anchor.diff:  push_as(N, Tail) ->
       push_as(N - 1, [97 | Tail]).
   
  +-spec insert_traversal(char()) -> list().
  +insert_traversal(Symb) ->
  +    [Symb | lists:flatten(lists:map(fun (_) -> [$., $., Symb] end, lists:seq(1, erlamsa_rnd:erand(10))))].
  +
   -spec mutate_text_data(string(), [text_mutators()]) -> string().
   mutate_text_data(Lst, TxtMutators) ->
       mutate_text(erlamsa_rnd:rand_elem(TxtMutators), Lst).
  
positive.code: 
  
  %% 
  %% URI SSRF Mutator
  %%
  
  %% need this wrapper in case if ets process not started (erlamsa_app:start haven't called)
  
negative.code:     {change_scheme(Acc) ++ get_ssrf_uri() ++ T, 1, {uri, success}};
  rand_uri_mutate(T, Acc, 2) ->
      {SSRFHost, SSRFPort} = get_ssrf_ep(), 
      AtAddr = lists:flatten(io_lib:format(erlamsa_rnd:rand_elem([" @~s:~p", "@~s:~p"]), 
                                           [SSRFHost, SSRFPort])
                            ),
      [Domain | Query] = string:tokens(T, "/"),
      Modified = lists:flatten([change_scheme(Acc), "://", Domain, AtAddr, $/, string:join(Query,"/")]),
      {Modified, 1, {uri, success}};
  rand_uri_mutate(T, Acc, 3) ->
      [Domain | Query] = string:tokens(T, "/"),
      Traversals = ["/" | lists:map(fun (_) -> "../" end, lists:seq(1, erlamsa_rnd:erand(10)))],
      NewQuery = Traversals ++ case erlamsa_rnd:erand(4) of
          1 -> string:join(Query, "/");
          2 -> "Windows/win.ini";
          3 -> "etc/shadow";
          4 -> "etc/passwd"
      end,
      {lists:reverse(Acc) ++ "://" ++ Domain ++ lists:flatten(NewQuery), 1, {uri, success}}.
  
  -spec try_uri_mutate(list()) -> {list(), integer(), list()}.
  try_uri_mutate(Lst) -> try_uri_mutate(Lst, []).
  
  -spec try_uri_mutate(list(), list()) -> {list(), integer(), list()}.
  try_uri_mutate([ $:, $/, $/ | T], Acc) ->
      rand_uri_mutate(T, Acc, erlamsa_rnd:erand(3)); 
  try_uri_mutate([], Acc) -> {lists:reverse(Acc), 0, []};
  try_uri_mutate([H|T], Acc) -> 
      try_uri_mutate(T, [H|Acc]).
  