class ChromeDriverManager extends WebDriverManager {

    private static final String CHROMEDRIVER_DOWNLOAD_OLD_PATTERN = "https://chromedriver.storage.googleapis.com/%s/chromedriver_%s%s.zip";

    @Override
    public DriverManagerType getDriverManagerType() {
        return CHROME;
    }

    @Override
    protected String getDriverName() {
        return "chromedriver";
    }

    @Override
    protected String getDriverVersion() {
        return config().getChromeDriverVersion();
    }

    @Override
    protected String getBrowserVersion() {
        return config().getChromeVersion();
    }

    @Override
    protected void setDriverVersion(String driverVersion) {
        config().setChromeDriverVersion(driverVersion);
    }

    @Override
    protected void setBrowserVersion(String browserVersion) {
        config().setChromeVersion(browserVersion);
    }

    @Override
    protected URL getDriverUrl() {
        return getDriverUrlCkeckingMirror(config().getChromeDriverUrl());
    }

    @Override
    protected Optional<URL> getMirrorUrl() {
        return Optional.of(config().getChromeDriverMirrorUrl());
    }

    @Override
    protected Optional<String> getExportParameter() {
        return Optional.of(config().getChromeDriverExport());
    }

    @Override
    protected void setDriverUrl(URL url) {
        config().setChromeDriverUrl(url);
    }

    @Override
    protected List<URL> getDriverUrls(String driverVersion) throws IOException {
        if (isUseMirror()) {
            return getDriversFromMirror(getMirrorUrl().get(), driverVersion);
        } else {
            String cftUrl = config.getChromeLastGoodVersionsUrl();
            LastGoodVersions versions = Parser.parseJson(getHttpClient(),
                    cftUrl, LastGoodVersions.class);
            return versions.channels.stable.downloads.chromedriver.stream()
                    .map(platformUrl -> {
                        try {
                            return new URL(platformUrl.url);
                        } catch (MalformedURLException e) {
                            throw new WebDriverException(
                                    "Incorrect CfT URL " + platformUrl.url);
                        }
                    }).collect(Collectors.toList());
        }
    }

    @Override
    protected Optional<String> getLatestDriverVersionFromRepository() {
        if (config().isUseBetaVersions()) {
            return empty();
        } else {
            return getDriverVersionFromRepository(empty());
        }
    }

    @Override
    protected Charset getVersionCharset() {
        return StandardCharsets.UTF_8;
    }

    @Override
    protected NamespaceContext getNamespaceContext() {
        return S3_NAMESPACE_CONTEXT;
    }

    @Override
    protected Optional<URL> buildUrl(String driverVersion) {
        return buildUrl(driverVersion, config());
    }

    Optional<URL> buildUrl(String driverVersion, Config config) {
        Optional<URL> optionalUrl = empty();
        if (!config.isUseMirror() && !isNullOrEmpty(driverVersion)) {
            String downloadUrlPattern = config.getChromeDownloadUrlPattern();
            OperatingSystem os = config.getOperatingSystem();
            Architecture arch = config.getArchitecture();
            String archLabel = os.isLinux() ? "64"
                    : arch.toString().toLowerCase(ROOT);
            if (os.isWin() && !X32.equals(arch)) {
                archLabel = "64";
            }
            if (os.isMac() && !ARM64.equals(arch)) {
                archLabel = "x64";
            }
            String separator = os.isMac() ? "-" : "";
            String label = os.getName() + separator + archLabel;

            String builtUrl = String.format(downloadUrlPattern, driverVersion,
                    label, label);
            if (!VersionDetector.isCfT(driverVersion)) {
                archLabel = os.isWin() ? "32" : "64";
                builtUrl = String.format(CHROMEDRIVER_DOWNLOAD_OLD_PATTERN,
                        driverVersion, os.getName(), archLabel);
            }
            log.debug("Using URL built from repository pattern: {}", builtUrl);
            try {
                optionalUrl = Optional.of(new URL(builtUrl));
            } catch (MalformedURLException e) {
                log.warn("Error building URL from pattern {} {}", builtUrl,
                        e.getMessage());
            }
        }
        return optionalUrl;
    }

    @Override
    protected Capabilities getCapabilities() {<FILL_FUNCTION_BODY>}

    @Override
    public WebDriverManager browserInDockerAndroid() {
        this.dockerEnabled = true;
        this.androidEnabled = true;
        return this;
    }

    @Override
    public WebDriverManager exportParameter(String exportParameter) {
        config().setChromeDriverExport(exportParameter);
        return this;
    }

}

        Capabilities options = new ChromeOptions();
        try {
            addDefaultArgumentsForDocker(options);
        } catch (Exception e) {
            log.error(
                    "Exception adding default arguments for Docker, retyring with custom class");
            options = new OptionsWithArguments("chrome", "goog:chromeOptions");
            try {
                addDefaultArgumentsForDocker(options);
            } catch (Exception e1) {
                log.error("Exception getting default capabilities", e);
            }
        }
        return options;
    
<methods>public io.github.bonigarcia.wdm.WebDriverManager arch32() ,public io.github.bonigarcia.wdm.WebDriverManager arch64() ,public io.github.bonigarcia.wdm.WebDriverManager architecture(io.github.bonigarcia.wdm.config.Architecture) ,public io.github.bonigarcia.wdm.WebDriverManager arm64() ,public io.github.bonigarcia.wdm.WebDriverManager avoidBrowserDetection() ,public io.github.bonigarcia.wdm.WebDriverManager avoidDockerLocalFallback() ,public io.github.bonigarcia.wdm.WebDriverManager avoidExport() ,public io.github.bonigarcia.wdm.WebDriverManager avoidExternalConnections() ,public io.github.bonigarcia.wdm.WebDriverManager avoidFallback() ,public io.github.bonigarcia.wdm.WebDriverManager avoidOutputTree() ,public io.github.bonigarcia.wdm.WebDriverManager avoidResolutionCache() ,public io.github.bonigarcia.wdm.WebDriverManager avoidShutdownHook() ,public io.github.bonigarcia.wdm.WebDriverManager avoidTmpFolder() ,public io.github.bonigarcia.wdm.WebDriverManager avoidUseChromiumDriverSnap() ,public io.github.bonigarcia.wdm.WebDriverManager browserInDocker() ,public io.github.bonigarcia.wdm.WebDriverManager browserInDockerAndroid() ,public io.github.bonigarcia.wdm.WebDriverManager browserVersion(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager browserVersionDetectionCommand(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager browserVersionDetectionRegex(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager cachePath(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager capabilities(Capabilities) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager chromedriver() ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager chromiumdriver() ,public io.github.bonigarcia.wdm.WebDriverManager clearDriverCache() ,public io.github.bonigarcia.wdm.WebDriverManager clearResolutionCache() ,public io.github.bonigarcia.wdm.WebDriverManager commandsPropertiesUrl(java.net.URL) ,public synchronized io.github.bonigarcia.wdm.config.Config config() ,public synchronized WebDriver create() ,public synchronized List<WebDriver> create(int) ,public io.github.bonigarcia.wdm.WebDriverManager disableCsp() ,public io.github.bonigarcia.wdm.WebDriverManager disableTracing() ,public io.github.bonigarcia.wdm.WebDriverManager dockerAvoidPulling() ,public io.github.bonigarcia.wdm.WebDriverManager dockerCustomImage(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerDaemonUrl(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerDefaultArgs(java.lang.String) ,public transient io.github.bonigarcia.wdm.WebDriverManager dockerEnvVariables(java.lang.String[]) ,public transient io.github.bonigarcia.wdm.WebDriverManager dockerExtraHosts(java.lang.String[]) ,public io.github.bonigarcia.wdm.WebDriverManager dockerLang(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerNetwork(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerNetworkHost() ,public io.github.bonigarcia.wdm.WebDriverManager dockerPrivateEndpoint(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerRecordingFrameRate(int) ,public io.github.bonigarcia.wdm.WebDriverManager dockerRecordingOutput(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerRecordingOutput(java.nio.file.Path) ,public io.github.bonigarcia.wdm.WebDriverManager dockerRecordingPrefix(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerScreenResolution(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerShmSize(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerStopTimeoutSec(java.lang.Integer) ,public io.github.bonigarcia.wdm.WebDriverManager dockerTimezone(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerTmpfsMount(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager dockerTmpfsSize(java.lang.String) ,public transient io.github.bonigarcia.wdm.WebDriverManager dockerVolumes(java.lang.String[]) ,public io.github.bonigarcia.wdm.WebDriverManager driverRepositoryUrl(java.net.URL) ,public io.github.bonigarcia.wdm.WebDriverManager driverVersion(java.lang.String) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager edgedriver() ,public io.github.bonigarcia.wdm.WebDriverManager enableRecording() ,public io.github.bonigarcia.wdm.WebDriverManager enableVnc() ,public abstract io.github.bonigarcia.wdm.WebDriverManager exportParameter(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager exportParameter(io.github.bonigarcia.wdm.config.DriverManagerType) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager firefoxdriver() ,public io.github.bonigarcia.wdm.WebDriverManager forceDownload() ,public Optional<java.nio.file.Path> getBrowserPath() ,public java.lang.String getDockerBrowserContainerId(WebDriver) ,public java.lang.String getDockerBrowserContainerId() ,public java.net.URL getDockerNoVncUrl(WebDriver) ,public java.net.URL getDockerNoVncUrl() ,public java.nio.file.Path getDockerRecordingPath(WebDriver) ,public java.nio.file.Path getDockerRecordingPath() ,public java.net.URL getDockerSeleniumServerUrl(WebDriver) ,public java.net.URL getDockerSeleniumServerUrl() ,public synchronized io.github.bonigarcia.wdm.docker.DockerService getDockerService() ,public java.lang.String getDockerVncUrl(WebDriver) ,public java.lang.String getDockerVncUrl() ,public java.lang.String getDownloadedDriverPath() ,public java.lang.String getDownloadedDriverVersion() ,public abstract io.github.bonigarcia.wdm.config.DriverManagerType getDriverManagerType() ,public List<java.lang.String> getDriverVersions() ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager getInstance(io.github.bonigarcia.wdm.config.DriverManagerType) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager getInstance(java.lang.String) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager getInstance(Class<? extends WebDriver>) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager getInstance() ,public List<Map<java.lang.String,java.lang.Object>> getLogs(WebDriver) ,public List<Map<java.lang.String,java.lang.Object>> getLogs() ,public WebDriver getWebDriver() ,public List<WebDriver> getWebDriverList() ,public io.github.bonigarcia.wdm.WebDriverManager gitHubToken(java.lang.String) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager iedriver() ,public transient io.github.bonigarcia.wdm.WebDriverManager ignoreDriverVersions(java.lang.String[]) ,public static boolean isDockerAvailable() ,public static boolean isOnline(java.lang.String) ,public static boolean isOnline(java.net.URL) ,public io.github.bonigarcia.wdm.WebDriverManager linux() ,public static org.w3c.dom.Document loadXML(java.io.InputStream) throws org.xml.sax.SAXException, java.io.IOException, javax.xml.parsers.ParserConfigurationException,public io.github.bonigarcia.wdm.WebDriverManager mac() ,public static void main(java.lang.String[]) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager operadriver() ,public io.github.bonigarcia.wdm.WebDriverManager operatingSystem(io.github.bonigarcia.wdm.config.OperatingSystem) ,public io.github.bonigarcia.wdm.WebDriverManager properties(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager proxy(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager proxyPass(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager proxyUser(java.lang.String) ,public synchronized void quit() ,public synchronized void quit(WebDriver) ,public io.github.bonigarcia.wdm.WebDriverManager remoteAddress(java.lang.String) ,public io.github.bonigarcia.wdm.WebDriverManager remoteAddress(java.net.URL) ,public void reset() ,public io.github.bonigarcia.wdm.WebDriverManager resolutionCachePath(java.lang.String) ,public static synchronized io.github.bonigarcia.wdm.WebDriverManager safaridriver() ,public synchronized void setup() ,public void startRecording(WebDriver) ,public void startRecording() ,public void startRecording(WebDriver, java.lang.String) ,public void startRecording(java.lang.String) ,public synchronized void stopDockerRecording() ,public synchronized void stopDockerRecording(WebDriver) ,public void stopRecording(WebDriver) ,public void stopRecording() ,public io.github.bonigarcia.wdm.WebDriverManager timeout(int) ,public io.github.bonigarcia.wdm.WebDriverManager ttl(int) ,public io.github.bonigarcia.wdm.WebDriverManager ttlBrowsers(int) ,public io.github.bonigarcia.wdm.WebDriverManager useBetaVersions() ,public io.github.bonigarcia.wdm.WebDriverManager useLocalCommandsPropertiesFirst() ,public io.github.bonigarcia.wdm.WebDriverManager useMirror() ,public io.github.bonigarcia.wdm.WebDriverManager viewOnly() ,public io.github.bonigarcia.wdm.WebDriverManager watch() ,public io.github.bonigarcia.wdm.WebDriverManager watchAndDisplay() ,public io.github.bonigarcia.wdm.WebDriverManager win() ,public static java.nio.file.Path zipFolder(java.nio.file.Path) <variables>protected static final java.lang.String BROWSER_WATCHER_ID,protected static final java.lang.String CFT_LABEL,protected static final java.lang.String CLI_DOCKER,protected static final java.lang.String CLI_RESOLVER,protected static final java.lang.String CLI_SERVER,protected static final java.lang.String DASH,protected static final java.lang.String IN_DOCKER,protected static final java.lang.String LATEST_RELEASE,protected static final javax.xml.namespace.NamespaceContext S3_NAMESPACE_CONTEXT,protected static final java.lang.String SLASH,protected boolean androidEnabled,protected io.github.bonigarcia.wdm.cache.CacheHandler cacheHandler,protected Capabilities capabilities,protected io.github.bonigarcia.wdm.config.Config config,protected boolean disableCsp,protected boolean displayEnabled,protected boolean dockerEnabled,protected io.github.bonigarcia.wdm.docker.DockerService dockerService,protected java.lang.String downloadedDriverPath,protected java.lang.String downloadedDriverVersion,protected io.github.bonigarcia.wdm.online.Downloader downloader,protected io.github.bonigarcia.wdm.online.HttpClient httpClient,protected boolean isHeadless,protected static final Logger log,protected io.github.bonigarcia.wdm.cache.ResolutionCache resolutionCache,protected java.lang.String resolvedBrowserVersion,protected int retryCount,protected boolean shutdownHook,protected io.github.bonigarcia.wdm.versions.VersionDetector versionDetector,protected boolean watchEnabled,protected io.github.bonigarcia.wdm.webdriver.WebDriverCreator webDriverCreator,protected List<io.github.bonigarcia.wdm.webdriver.WebDriverBrowser> webDriverList