def METHOD_NAME(self) -> Optional[List[Tuple[Any, int, ailment.Expr.StackBaseOffset]]]:
    """
    Find the AIL statement that restores the return address from a stack slot.
    :return:    A list of tuples, where each tuple is like (block_addr, statement_idx, load_src), or None if not
                found.
    """
    endpoints = self._func.endpoints
    callouts_and_jumpouts = {n.addr for n in self._func.callout_sites + self._func.jumpout_sites}
    retaddr_restore_stmts = []
    default_cc = DEFAULT_CC[self.project.arch.name](self.project.arch)
    retaddr = default_cc.return_addr
    assert isinstance(retaddr, SimRegArg)
    retaddr_reg = self.project.arch.registers[retaddr.reg_name][0]
    for endpoint in endpoints:
        for endpoint_block in self._get_blocks(endpoint.addr):
            for idx, stmt in enumerate(endpoint_block.statements):
                if (
                    isinstance(stmt, ailment.Stmt.Assignment)
                    and isinstance(stmt.dst, ailment.Expr.Register)
                    and stmt.dst.reg_offset == retaddr_reg
                    and isinstance(stmt.src, ailment.Expr.Load)
                    and isinstance(stmt.src.addr, ailment.Expr.StackBaseOffset)
                ):
                    retaddr_restore_stmts.append((endpoint_block, idx, stmt.src.addr))
                    break
            else:
                if endpoint.addr not in callouts_and_jumpouts:
                    _l.debug("Could not find retaddr restoring statement in function %#x.", endpoint.addr)
                    return None
                else:
                    _l.debug(
                        "No retaddr restoring statement is found at callout/jumpout site %#x. "
                        "Might be expected.",
                        endpoint.addr,
                    )
    return retaddr_restore_stmts