'Creates the Surveyor.
:param project:             the angr.Project to analyze.
:param start:               a path (or set of paths) to start the analysis from
:param max_active:          the maximum number of paths to explore at a time
:param max_concurrency:     the maximum number of worker threads
:param pickle_paths:        pickle spilled paths to save memory
:param save_deadends:       save deadended paths
:param enable_veritesting:  use static symbolic execution to speed up exploration
:param veritesting_options: special options to be passed to Veritesting
:param keep_pruned:         keep pruned unsat states'

def __init__(self, project, start=None, max_active=None, max_concurrency=None, pickle_paths=None, save_deadends=None, enable_veritesting=False, veritesting_options=None, keep_pruned=None):

    self._project = project
    self._max_concurrency = (1 if (max_concurrency is None) else max_concurrency)
    self._max_active = (multiprocessing.cpu_count() if (max_active is None) else max_active)
    self._pickle_paths = (False if (pickle_paths is None) else pickle_paths)
    self._save_deadends = (True if (save_deadends is None) else save_deadends)
    self._keep_pruned = (False if (keep_pruned is None) else keep_pruned)
    self._enable_veritesting = enable_veritesting
    self._veritesting_options = ({} if (veritesting_options is None) else veritesting_options)
    self.active = []
    self.deadended = []
    self.spilled = []
    self.errored = []
    self.pruned = []
    self.suspended = []
    self.unconstrained = []
    self.split_paths = {}
    self._current_step = 0
    self._hierarchy = StateHierarchy()
    if isinstance(start, SimState):
        self.active.append(start)
    elif isinstance(start, (tuple, list, set)):
        self.active.extend(start)
    elif (start is None):
        self.active.append(self._project.factory.entry_state())
    else:
        raise AngrError('invalid    "start"    argument')
