def METHOD_NAME(
    self,
    context: interfaces.context.ContextInterface,
    config_path: str,
    requirement: interfaces.configuration.ConstructableRequirementInterface,
    layer_name: str,
    progress_callback: constants.ProgressCallback = None,
) -> None:
    """Accepts a context, config_path and SymbolTableRequirement, with a
    constructed layer_name and scans the layer for banners."""
    # Bomb out early if there's no banners
    if not self.banners:
        return
    mss = scanners.MultiStringScanner([x for x in self.banners if x is not None])
    layer = context.layers[layer_name]
    # Check if the Stacker has already found what we're looking for
    if layer.config.get(self.banner_config_key, None):
        banner_list = [
            (0, bytes(layer.config[self.banner_config_key], "raw_unicode_escape"))
        ]  # type: Iterable[Any]
    else:
        # Swap to the physical layer for scanning
        # Only traverse down a layer if it's an intel layer
        # TODO: Fix this so it works for layers other than just Intel
        if isinstance(layer, layers.intel.Intel):
            layer = context.layers[layer.config["memory_layer"]]
        banner_list = layer.scan(
            context=context, scanner=mss, progress_callback=progress_callback
        )
    for _, banner in banner_list:
        vollog.debug(f"Identified banner: {repr(banner)}")
        symbol_files = self.banners.get(banner, None)
        if symbol_files:
            isf_path = symbol_files
            vollog.debug(f"Using symbol library: {symbol_files}")
            clazz = self.symbol_class
            # Set the discovered options
            path_join = interfaces.configuration.path_join
            context.config[
                path_join(config_path, requirement.name, "class")
            ] = clazz
            context.config[
                path_join(config_path, requirement.name, "isf_url")
            ] = isf_path
            context.config[
                path_join(config_path, requirement.name, "symbol_mask")
            ] = layer.address_mask
            # Construct the appropriate symbol table
            requirement.construct(context, config_path)
            break
        else:
            vollog.debug(f"Symbol library path not found for: {banner}")
            # print("Kernel", banner, hex(banner_offset))
    else:
        vollog.debug("No existing banners found")
        # TODO: Fallback to generic regex search?