def METHOD_NAME(self, *args, prototype=None):
    if prototype is None:
        prototype = self._cc.guess_prototype(args)
    self._base_state.ip = self._addr
    state = self._project.factory.call_state(
        self._addr,
        *args,
        cc=self._cc,
        prototype=prototype,
        base_state=self._base_state,
        ret_addr=self._deadend_addr,
        toc=self._toc,
    )
    def step_func(pg):
        pg2 = pg.prune()
        if len(pg2.active) > 1:
            raise AngrCallableMultistateError("Execution split on symbolic condition!")
        return pg2
    caller = self._project.factory.simulation_manager(state)
    for _ in range(self._max_steps):
        if len(caller.active) == 0:
            break
        if caller.active[0].history.block_count > 100000:
            l.debug("super long path %s", caller.active[0])
            raise AngrCallableError("Super long path")
        caller.step(step_func=step_func if self._concrete_only else None)
    if len(caller.active) > 0:
        raise AngrCallableError("didn't make it to the end of the function")
    caller.unstash(from_stash="deadended")
    caller.prune(filter_func=lambda pt: pt.addr == self._deadend_addr)
    if len(caller.active) == 0:
        raise AngrCallableError("No paths returned from function")
    self.result_path_group = caller.copy()
    if self._perform_merge:
        caller.merge()
    self.result_state = caller.active[0]