<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def configuration_option(*param_decls, **attrs):
 """ Adds configuration file support to a click application. This will create an option of type `click.File` expecting the path to a configuration file. When specified, it overwrites the default values for all other click arguments or options with the corresponding value from the configuration file. The default name of the option is `--config`. By default, the configuration will be read from a configuration directory as determined by `click.get_app_dir`. This decorator accepts the same arguments as `click.option` and `click.Path`. In addition, the following keyword arguments are available: cmd_name : str The command name. This is used to determine the configuration directory. Default: `ctx.info_name` config_file_name : str The name of the configuration file. Default: `'config'`` implicit: bool If 'True' then implicitly create a value for the configuration option using the above parameters. If a configuration file exists in this path it will be applied even if no configuration option was suppplied as a CLI argument or environment variable. If 'False` only apply a configuration file that has been explicitely specified. Default: `False` provider : callable A callable that parses the configuration file and returns a dictionary of the configuration parameters. Will be called as `provider(file_path, cmd_name)`. Default: `configobj_provider()` """

    param_decls = param_decls or ('--config', )
    option_name = param_decls[0]

    def decorator(f):

        attrs.setdefault('is_eager', True)
        attrs.setdefault('help', 'Read configuration from FILE.')
        attrs.setdefault('expose_value', False)
        implicit = attrs.pop('implicit', True)
        cmd_name = attrs.pop('cmd_name', None)
        config_file_name = attrs.pop('config_file_name', 'config')
        provider = attrs.pop('provider', configobj_provider())
        path_default_params = {
            'exists': False,
            'file_okay': True,
            'dir_okay': False,
            'writable': False,
            'readable': True,
        'resolve_path': False
        }
        path_params = {
            k: attrs.pop(k, v)
            for k, v in path_default_params.items()
        }
        attrs['type'] = click.Path(**path_params)
        saved_callback = attrs.pop('callback', None)
        partial_callback = functools.partial(
            configuration_callback, cmd_name, option_name, config_file_name, saved_callback, provider, implicit)
        attrs['callback'] = partial_callback
        return click.option(*param_decls, **attrs)(f)

    return decorator