content: // coverage:ignore-file
  // GENERATED CODE - DO NOT MODIFY BY HAND
  // ignore_for_file: type=lint
  // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
  
  part of '../clash_config.dart';
  
  // **************************************************************************
  // FreezedGenerator
  // **************************************************************************
  
  T _$identity<T>(T value) => value;
  
  final _privateConstructorUsedError = UnsupportedError(
      'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#adding-getters-and-methods-to-our-models');
  
  ProxyGroup _$ProxyGroupFromJson(Map<String, dynamic> json) {
    return _ProxyGroup.fromJson(json);
  }
  
  /// @nodoc
  mixin _$ProxyGroup {
    String get name => throw _privateConstructorUsedError;
    @JsonKey(fromJson: GroupType.parseProfileType)
    GroupType get type => throw _privateConstructorUsedError;
    List<String>? get proxies => throw _privateConstructorUsedError;
    List<String>? get use => throw _privateConstructorUsedError;
    int? get interval => throw _privateConstructorUsedError;
    bool? get lazy => throw _privateConstructorUsedError;
    String? get url => throw _privateConstructorUsedError;
    int? get timeout => throw _privateConstructorUsedError;
    @JsonKey(name: "max-failed-times")
    int? get maxFailedTimes => throw _privateConstructorUsedError;
    String? get filter => throw _privateConstructorUsedError;
    @JsonKey(name: "expected-filter")
    String? get excludeFilter => throw _privateConstructorUsedError;
    @JsonKey(name: "exclude-type")
    String? get excludeType => throw _privateConstructorUsedError;
    @JsonKey(name: "expected-status")
    dynamic get expectedStatus => throw _privateConstructorUsedError;
    bool? get hidden => throw _privateConstructorUsedError;
    String? get icon => throw _privateConstructorUsedError;
  
    /// Serializes this ProxyGroup to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of ProxyGroup
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $ProxyGroupCopyWith<ProxyGroup> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $ProxyGroupCopyWith<$Res> {
    factory $ProxyGroupCopyWith(
            ProxyGroup value, $Res Function(ProxyGroup) then) =
        _$ProxyGroupCopyWithImpl<$Res, ProxyGroup>;
    @useResult
    $Res call(
        {String name,
        @JsonKey(fromJson: GroupType.parseProfileType) GroupType type,
        List<String>? proxies,
        List<String>? use,
        int? interval,
        bool? lazy,
        String? url,
        int? timeout,
        @JsonKey(name: "max-failed-times") int? maxFailedTimes,
        String? filter,
        @JsonKey(name: "expected-filter") String? excludeFilter,
        @JsonKey(name: "exclude-type") String? excludeType,
        @JsonKey(name: "expected-status") dynamic expectedStatus,
        bool? hidden,
        String? icon});
  }
  
  /// @nodoc
  class _$ProxyGroupCopyWithImpl<$Res, $Val extends ProxyGroup>
      implements $ProxyGroupCopyWith<$Res> {
    _$ProxyGroupCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of ProxyGroup
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
      Object? type = null,
      Object? proxies = freezed,
      Object? use = freezed,
      Object? interval = freezed,
      Object? lazy = freezed,
      Object? url = freezed,
      Object? timeout = freezed,
      Object? maxFailedTimes = freezed,
      Object? filter = freezed,
      Object? excludeFilter = freezed,
      Object? excludeType = freezed,
      Object? expectedStatus = freezed,
      Object? hidden = freezed,
      Object? icon = freezed,
    }) {
      return _then(_value.copyWith(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
        type: null == type
            ? _value.type
            : type // ignore: cast_nullable_to_non_nullable
                as GroupType,
        proxies: freezed == proxies
            ? _value.proxies
            : proxies // ignore: cast_nullable_to_non_nullable
                as List<String>?,
        use: freezed == use
            ? _value.use
            : use // ignore: cast_nullable_to_non_nullable
                as List<String>?,
        interval: freezed == interval
            ? _value.interval
            : interval // ignore: cast_nullable_to_non_nullable
                as int?,
        lazy: freezed == lazy
            ? _value.lazy
            : lazy // ignore: cast_nullable_to_non_nullable
                as bool?,
        url: freezed == url
            ? _value.url
            : url // ignore: cast_nullable_to_non_nullable
                as String?,
        timeout: freezed == timeout
            ? _value.timeout
            : timeout // ignore: cast_nullable_to_non_nullable
                as int?,
        maxFailedTimes: freezed == maxFailedTimes
            ? _value.maxFailedTimes
            : maxFailedTimes // ignore: cast_nullable_to_non_nullable
                as int?,
        filter: freezed == filter
            ? _value.filter
            : filter // ignore: cast_nullable_to_non_nullable
                as String?,
        excludeFilter: freezed == excludeFilter
            ? _value.excludeFilter
            : excludeFilter // ignore: cast_nullable_to_non_nullable
                as String?,
        excludeType: freezed == excludeType
            ? _value.excludeType
            : excludeType // ignore: cast_nullable_to_non_nullable
                as String?,
        expectedStatus: freezed == expectedStatus
            ? _value.expectedStatus
            : expectedStatus // ignore: cast_nullable_to_non_nullable
                as dynamic,
        hidden: freezed == hidden
            ? _value.hidden
            : hidden // ignore: cast_nullable_to_non_nullable
                as bool?,
        icon: freezed == icon
            ? _value.icon
            : icon // ignore: cast_nullable_to_non_nullable
                as String?,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$ProxyGroupImplCopyWith<$Res>
      implements $ProxyGroupCopyWith<$Res> {
    factory _$$ProxyGroupImplCopyWith(
            _$ProxyGroupImpl value, $Res Function(_$ProxyGroupImpl) then) =
        __$$ProxyGroupImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {String name,
        @JsonKey(fromJson: GroupType.parseProfileType) GroupType type,
        List<String>? proxies,
        List<String>? use,
        int? interval,
        bool? lazy,
        String? url,
        int? timeout,
        @JsonKey(name: "max-failed-times") int? maxFailedTimes,
        String? filter,
        @JsonKey(name: "expected-filter") String? excludeFilter,
        @JsonKey(name: "exclude-type") String? excludeType,
        @JsonKey(name: "expected-status") dynamic expectedStatus,
        bool? hidden,
        String? icon});
  }
  
  /// @nodoc
  class __$$ProxyGroupImplCopyWithImpl<$Res>
      extends _$ProxyGroupCopyWithImpl<$Res, _$ProxyGroupImpl>
      implements _$$ProxyGroupImplCopyWith<$Res> {
    __$$ProxyGroupImplCopyWithImpl(
        _$ProxyGroupImpl _value, $Res Function(_$ProxyGroupImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of ProxyGroup
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
      Object? type = null,
      Object? proxies = freezed,
      Object? use = freezed,
      Object? interval = freezed,
      Object? lazy = freezed,
      Object? url = freezed,
      Object? timeout = freezed,
      Object? maxFailedTimes = freezed,
      Object? filter = freezed,
      Object? excludeFilter = freezed,
      Object? excludeType = freezed,
      Object? expectedStatus = freezed,
      Object? hidden = freezed,
      Object? icon = freezed,
    }) {
      return _then(_$ProxyGroupImpl(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
        type: null == type
            ? _value.type
            : type // ignore: cast_nullable_to_non_nullable
                as GroupType,
        proxies: freezed == proxies
            ? _value._proxies
            : proxies // ignore: cast_nullable_to_non_nullable
                as List<String>?,
        use: freezed == use
            ? _value._use
            : use // ignore: cast_nullable_to_non_nullable
                as List<String>?,
        interval: freezed == interval
            ? _value.interval
            : interval // ignore: cast_nullable_to_non_nullable
                as int?,
        lazy: freezed == lazy
            ? _value.lazy
            : lazy // ignore: cast_nullable_to_non_nullable
                as bool?,
        url: freezed == url
            ? _value.url
            : url // ignore: cast_nullable_to_non_nullable
                as String?,
        timeout: freezed == timeout
            ? _value.timeout
            : timeout // ignore: cast_nullable_to_non_nullable
                as int?,
        maxFailedTimes: freezed == maxFailedTimes
            ? _value.maxFailedTimes
            : maxFailedTimes // ignore: cast_nullable_to_non_nullable
                as int?,
        filter: freezed == filter
            ? _value.filter
            : filter // ignore: cast_nullable_to_non_nullable
                as String?,
        excludeFilter: freezed == excludeFilter
            ? _value.excludeFilter
            : excludeFilter // ignore: cast_nullable_to_non_nullable
                as String?,
        excludeType: freezed == excludeType
            ? _value.excludeType
            : excludeType // ignore: cast_nullable_to_non_nullable
                as String?,
        expectedStatus: freezed == expectedStatus
            ? _value.expectedStatus
            : expectedStatus // ignore: cast_nullable_to_non_nullable
                as dynamic,
        hidden: freezed == hidden
            ? _value.hidden
            : hidden // ignore: cast_nullable_to_non_nullable
                as bool?,
        icon: freezed == icon
            ? _value.icon
            : icon // ignore: cast_nullable_to_non_nullable
                as String?,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$ProxyGroupImpl implements _ProxyGroup {
    const _$ProxyGroupImpl(
        {required this.name,
        @JsonKey(fromJson: GroupType.parseProfileType) required this.type,
        final List<String>? proxies,
        final List<String>? use,
        this.interval,
        this.lazy,
        this.url,
        this.timeout,
        @JsonKey(name: "max-failed-times") this.maxFailedTimes,
        this.filter,
        @JsonKey(name: "expected-filter") this.excludeFilter,
        @JsonKey(name: "exclude-type") this.excludeType,
        @JsonKey(name: "expected-status") this.expectedStatus,
        this.hidden,
        this.icon})
        : _proxies = proxies,
          _use = use;
  
    factory _$ProxyGroupImpl.fromJson(Map<String, dynamic> json) =>
        _$$ProxyGroupImplFromJson(json);
  
    @override
    final String name;
    @override
    @JsonKey(fromJson: GroupType.parseProfileType)
    final GroupType type;
    final List<String>? _proxies;
    @override
    List<String>? get proxies {
      final value = _proxies;
      if (value == null) return null;
      if (_proxies is EqualUnmodifiableListView) return _proxies;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(value);
    }
  
    final List<String>? _use;
    @override
    List<String>? get use {
      final value = _use;
      if (value == null) return null;
      if (_use is EqualUnmodifiableListView) return _use;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(value);
    }
  
    @override
    final int? interval;
    @override
    final bool? lazy;
    @override
    final String? url;
    @override
    final int? timeout;
    @override
    @JsonKey(name: "max-failed-times")
    final int? maxFailedTimes;
    @override
    final String? filter;
    @override
    @JsonKey(name: "expected-filter")
    final String? excludeFilter;
    @override
    @JsonKey(name: "exclude-type")
    final String? excludeType;
    @override
    @JsonKey(name: "expected-status")
    final dynamic expectedStatus;
    @override
    final bool? hidden;
    @override
    final String? icon;
  
    @override
    String toString() {
      return 'ProxyGroup(name: $name, type: $type, proxies: $proxies, use: $use, interval: $interval, lazy: $lazy, url: $url, timeout: $timeout, maxFailedTimes: $maxFailedTimes, filter: $filter, excludeFilter: $excludeFilter, excludeType: $excludeType, expectedStatus: $expectedStatus, hidden: $hidden, icon: $icon)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$ProxyGroupImpl &&
              (identical(other.name, name) || other.name == name) &&
              (identical(other.type, type) || other.type == type) &&
              const DeepCollectionEquality().equals(other._proxies, _proxies) &&
              const DeepCollectionEquality().equals(other._use, _use) &&
              (identical(other.interval, interval) ||
                  other.interval == interval) &&
              (identical(other.lazy, lazy) || other.lazy == lazy) &&
              (identical(other.url, url) || other.url == url) &&
              (identical(other.timeout, timeout) || other.timeout == timeout) &&
              (identical(other.maxFailedTimes, maxFailedTimes) ||
                  other.maxFailedTimes == maxFailedTimes) &&
              (identical(other.filter, filter) || other.filter == filter) &&
              (identical(other.excludeFilter, excludeFilter) ||
                  other.excludeFilter == excludeFilter) &&
              (identical(other.excludeType, excludeType) ||
                  other.excludeType == excludeType) &&
              const DeepCollectionEquality()
                  .equals(other.expectedStatus, expectedStatus) &&
              (identical(other.hidden, hidden) || other.hidden == hidden) &&
              (identical(other.icon, icon) || other.icon == icon));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        name,
        type,
        const DeepCollectionEquality().hash(_proxies),
        const DeepCollectionEquality().hash(_use),
        interval,
        lazy,
        url,
        timeout,
        maxFailedTimes,
        filter,
        excludeFilter,
        excludeType,
        const DeepCollectionEquality().hash(expectedStatus),
        hidden,
        icon);
  
    /// Create a copy of ProxyGroup
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$ProxyGroupImplCopyWith<_$ProxyGroupImpl> get copyWith =>
        __$$ProxyGroupImplCopyWithImpl<_$ProxyGroupImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$ProxyGroupImplToJson(
        this,
      );
    }
  }
  
  abstract class _ProxyGroup implements ProxyGroup {
    const factory _ProxyGroup(
        {required final String name,
        @JsonKey(fromJson: GroupType.parseProfileType)
        required final GroupType type,
        final List<String>? proxies,
        final List<String>? use,
        final int? interval,
        final bool? lazy,
        final String? url,
        final int? timeout,
        @JsonKey(name: "max-failed-times") final int? maxFailedTimes,
        final String? filter,
        @JsonKey(name: "expected-filter") final String? excludeFilter,
        @JsonKey(name: "exclude-type") final String? excludeType,
        @JsonKey(name: "expected-status") final dynamic expectedStatus,
        final bool? hidden,
        final String? icon}) = _$ProxyGroupImpl;
  
    factory _ProxyGroup.fromJson(Map<String, dynamic> json) =
        _$ProxyGroupImpl.fromJson;
  
    @override
    String get name;
    @override
    @JsonKey(fromJson: GroupType.parseProfileType)
    GroupType get type;
    @override
    List<String>? get proxies;
    @override
    List<String>? get use;
    @override
    int? get interval;
    @override
    bool? get lazy;
    @override
    String? get url;
    @override
    int? get timeout;
    @override
    @JsonKey(name: "max-failed-times")
    int? get maxFailedTimes;
    @override
    String? get filter;
    @override
    @JsonKey(name: "expected-filter")
    String? get excludeFilter;
    @override
    @JsonKey(name: "exclude-type")
    String? get excludeType;
    @override
    @JsonKey(name: "expected-status")
    dynamic get expectedStatus;
    @override
    bool? get hidden;
    @override
    String? get icon;
  
    /// Create a copy of ProxyGroup
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$ProxyGroupImplCopyWith<_$ProxyGroupImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  RuleProvider _$RuleProviderFromJson(Map<String, dynamic> json) {
    return _RuleProvider.fromJson(json);
  }
  
  /// @nodoc
  mixin _$RuleProvider {
    String get name => throw _privateConstructorUsedError;
  
    /// Serializes this RuleProvider to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of RuleProvider
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $RuleProviderCopyWith<RuleProvider> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $RuleProviderCopyWith<$Res> {
    factory $RuleProviderCopyWith(
            RuleProvider value, $Res Function(RuleProvider) then) =
        _$RuleProviderCopyWithImpl<$Res, RuleProvider>;
    @useResult
    $Res call({String name});
  }
  
  /// @nodoc
  class _$RuleProviderCopyWithImpl<$Res, $Val extends RuleProvider>
      implements $RuleProviderCopyWith<$Res> {
    _$RuleProviderCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of RuleProvider
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
    }) {
      return _then(_value.copyWith(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$RuleProviderImplCopyWith<$Res>
      implements $RuleProviderCopyWith<$Res> {
    factory _$$RuleProviderImplCopyWith(
            _$RuleProviderImpl value, $Res Function(_$RuleProviderImpl) then) =
        __$$RuleProviderImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call({String name});
  }
  
  /// @nodoc
  class __$$RuleProviderImplCopyWithImpl<$Res>
      extends _$RuleProviderCopyWithImpl<$Res, _$RuleProviderImpl>
      implements _$$RuleProviderImplCopyWith<$Res> {
    __$$RuleProviderImplCopyWithImpl(
        _$RuleProviderImpl _value, $Res Function(_$RuleProviderImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of RuleProvider
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
    }) {
      return _then(_$RuleProviderImpl(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$RuleProviderImpl implements _RuleProvider {
    const _$RuleProviderImpl({required this.name});
  
    factory _$RuleProviderImpl.fromJson(Map<String, dynamic> json) =>
        _$$RuleProviderImplFromJson(json);
  
    @override
    final String name;
  
    @override
    String toString() {
      return 'RuleProvider(name: $name)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$RuleProviderImpl &&
              (identical(other.name, name) || other.name == name));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(runtimeType, name);
  
    /// Create a copy of RuleProvider
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$RuleProviderImplCopyWith<_$RuleProviderImpl> get copyWith =>
        __$$RuleProviderImplCopyWithImpl<_$RuleProviderImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$RuleProviderImplToJson(
        this,
      );
    }
  }
  
  abstract class _RuleProvider implements RuleProvider {
    const factory _RuleProvider({required final String name}) =
        _$RuleProviderImpl;
  
    factory _RuleProvider.fromJson(Map<String, dynamic> json) =
        _$RuleProviderImpl.fromJson;
  
    @override
    String get name;
  
    /// Create a copy of RuleProvider
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$RuleProviderImplCopyWith<_$RuleProviderImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  Tun _$TunFromJson(Map<String, dynamic> json) {
    return _Tun.fromJson(json);
  }
  
  /// @nodoc
  mixin _$Tun {
    bool get enable => throw _privateConstructorUsedError;
    String get device => throw _privateConstructorUsedError;
    @JsonKey(name: "auto-route")
    bool get autoRoute => throw _privateConstructorUsedError;
    TunStack get stack => throw _privateConstructorUsedError;
    @JsonKey(name: "dns-hijack")
    List<String> get dnsHijack => throw _privateConstructorUsedError;
    @JsonKey(name: "route-address")
    List<String> get routeAddress => throw _privateConstructorUsedError;
  
    /// Serializes this Tun to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of Tun
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $TunCopyWith<Tun> get copyWith => throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $TunCopyWith<$Res> {
    factory $TunCopyWith(Tun value, $Res Function(Tun) then) =
        _$TunCopyWithImpl<$Res, Tun>;
    @useResult
    $Res call(
        {bool enable,
        String device,
        @JsonKey(name: "auto-route") bool autoRoute,
        TunStack stack,
        @JsonKey(name: "dns-hijack") List<String> dnsHijack,
        @JsonKey(name: "route-address") List<String> routeAddress});
  }
  
  /// @nodoc
  class _$TunCopyWithImpl<$Res, $Val extends Tun> implements $TunCopyWith<$Res> {
    _$TunCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of Tun
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? enable = null,
      Object? device = null,
      Object? autoRoute = null,
      Object? stack = null,
      Object? dnsHijack = null,
      Object? routeAddress = null,
    }) {
      return _then(_value.copyWith(
        enable: null == enable
            ? _value.enable
            : enable // ignore: cast_nullable_to_non_nullable
                as bool,
        device: null == device
            ? _value.device
            : device // ignore: cast_nullable_to_non_nullable
                as String,
        autoRoute: null == autoRoute
            ? _value.autoRoute
            : autoRoute // ignore: cast_nullable_to_non_nullable
                as bool,
        stack: null == stack
            ? _value.stack
            : stack // ignore: cast_nullable_to_non_nullable
                as TunStack,
        dnsHijack: null == dnsHijack
            ? _value.dnsHijack
            : dnsHijack // ignore: cast_nullable_to_non_nullable
                as List<String>,
        routeAddress: null == routeAddress
            ? _value.routeAddress
            : routeAddress // ignore: cast_nullable_to_non_nullable
                as List<String>,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$TunImplCopyWith<$Res> implements $TunCopyWith<$Res> {
    factory _$$TunImplCopyWith(_$TunImpl value, $Res Function(_$TunImpl) then) =
        __$$TunImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {bool enable,
        String device,
        @JsonKey(name: "auto-route") bool autoRoute,
        TunStack stack,
        @JsonKey(name: "dns-hijack") List<String> dnsHijack,
        @JsonKey(name: "route-address") List<String> routeAddress});
  }
  
  /// @nodoc
  class __$$TunImplCopyWithImpl<$Res> extends _$TunCopyWithImpl<$Res, _$TunImpl>
      implements _$$TunImplCopyWith<$Res> {
    __$$TunImplCopyWithImpl(_$TunImpl _value, $Res Function(_$TunImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of Tun
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? enable = null,
      Object? device = null,
      Object? autoRoute = null,
      Object? stack = null,
      Object? dnsHijack = null,
      Object? routeAddress = null,
    }) {
      return _then(_$TunImpl(
        enable: null == enable
            ? _value.enable
            : enable // ignore: cast_nullable_to_non_nullable
                as bool,
        device: null == device
            ? _value.device
            : device // ignore: cast_nullable_to_non_nullable
                as String,
        autoRoute: null == autoRoute
            ? _value.autoRoute
            : autoRoute // ignore: cast_nullable_to_non_nullable
                as bool,
        stack: null == stack
            ? _value.stack
            : stack // ignore: cast_nullable_to_non_nullable
                as TunStack,
        dnsHijack: null == dnsHijack
            ? _value._dnsHijack
            : dnsHijack // ignore: cast_nullable_to_non_nullable
                as List<String>,
        routeAddress: null == routeAddress
            ? _value._routeAddress
            : routeAddress // ignore: cast_nullable_to_non_nullable
                as List<String>,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$TunImpl implements _Tun {
    const _$TunImpl(
        {this.enable = false,
        this.device = appName,
        @JsonKey(name: "auto-route") this.autoRoute = false,
        this.stack = TunStack.mixed,
        @JsonKey(name: "dns-hijack")
        final List<String> dnsHijack = const ["any:53"],
        @JsonKey(name: "route-address")
        final List<String> routeAddress = const []})
        : _dnsHijack = dnsHijack,
          _routeAddress = routeAddress;
  
    factory _$TunImpl.fromJson(Map<String, dynamic> json) =>
        _$$TunImplFromJson(json);
  
    @override
    @JsonKey()
    final bool enable;
    @override
    @JsonKey()
    final String device;
    @override
    @JsonKey(name: "auto-route")
    final bool autoRoute;
    @override
    @JsonKey()
    final TunStack stack;
    final List<String> _dnsHijack;
    @override
    @JsonKey(name: "dns-hijack")
    List<String> get dnsHijack {
      if (_dnsHijack is EqualUnmodifiableListView) return _dnsHijack;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_dnsHijack);
    }
  
    final List<String> _routeAddress;
    @override
    @JsonKey(name: "route-address")
    List<String> get routeAddress {
      if (_routeAddress is EqualUnmodifiableListView) return _routeAddress;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_routeAddress);
    }
  
    @override
    String toString() {
      return 'Tun(enable: $enable, device: $device, autoRoute: $autoRoute, stack: $stack, dnsHijack: $dnsHijack, routeAddress: $routeAddress)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$TunImpl &&
              (identical(other.enable, enable) || other.enable == enable) &&
              (identical(other.device, device) || other.device == device) &&
              (identical(other.autoRoute, autoRoute) ||
                  other.autoRoute == autoRoute) &&
              (identical(other.stack, stack) || other.stack == stack) &&
              const DeepCollectionEquality()
                  .equals(other._dnsHijack, _dnsHijack) &&
              const DeepCollectionEquality()
                  .equals(other._routeAddress, _routeAddress));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        enable,
        device,
        autoRoute,
        stack,
        const DeepCollectionEquality().hash(_dnsHijack),
        const DeepCollectionEquality().hash(_routeAddress));
  
    /// Create a copy of Tun
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$TunImplCopyWith<_$TunImpl> get copyWith =>
        __$$TunImplCopyWithImpl<_$TunImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$TunImplToJson(
        this,
      );
    }
  }
  
  abstract class _Tun implements Tun {
    const factory _Tun(
            {final bool enable,
            final String device,
            @JsonKey(name: "auto-route") final bool autoRoute,
            final TunStack stack,
            @JsonKey(name: "dns-hijack") final List<String> dnsHijack,
            @JsonKey(name: "route-address") final List<String> routeAddress}) =
        _$TunImpl;
  
    factory _Tun.fromJson(Map<String, dynamic> json) = _$TunImpl.fromJson;
  
    @override
    bool get enable;
    @override
    String get device;
    @override
    @JsonKey(name: "auto-route")
    bool get autoRoute;
    @override
    TunStack get stack;
    @override
    @JsonKey(name: "dns-hijack")
    List<String> get dnsHijack;
    @override
    @JsonKey(name: "route-address")
    List<String> get routeAddress;
  
    /// Create a copy of Tun
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$TunImplCopyWith<_$TunImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  FallbackFilter _$FallbackFilterFromJson(Map<String, dynamic> json) {
    return _FallbackFilter.fromJson(json);
  }
  
  /// @nodoc
  mixin _$FallbackFilter {
    bool get geoip => throw _privateConstructorUsedError;
    @JsonKey(name: "geoip-code")
    String get geoipCode => throw _privateConstructorUsedError;
    List<String> get geosite => throw _privateConstructorUsedError;
    List<String> get ipcidr => throw _privateConstructorUsedError;
    List<String> get domain => throw _privateConstructorUsedError;
  
    /// Serializes this FallbackFilter to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of FallbackFilter
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $FallbackFilterCopyWith<FallbackFilter> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $FallbackFilterCopyWith<$Res> {
    factory $FallbackFilterCopyWith(
            FallbackFilter value, $Res Function(FallbackFilter) then) =
        _$FallbackFilterCopyWithImpl<$Res, FallbackFilter>;
    @useResult
    $Res call(
        {bool geoip,
        @JsonKey(name: "geoip-code") String geoipCode,
        List<String> geosite,
        List<String> ipcidr,
        List<String> domain});
  }
  
  /// @nodoc
  class _$FallbackFilterCopyWithImpl<$Res, $Val extends FallbackFilter>
      implements $FallbackFilterCopyWith<$Res> {
    _$FallbackFilterCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of FallbackFilter
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? geoip = null,
      Object? geoipCode = null,
      Object? geosite = null,
      Object? ipcidr = null,
      Object? domain = null,
    }) {
      return _then(_value.copyWith(
        geoip: null == geoip
            ? _value.geoip
            : geoip // ignore: cast_nullable_to_non_nullable
                as bool,
        geoipCode: null == geoipCode
            ? _value.geoipCode
            : geoipCode // ignore: cast_nullable_to_non_nullable
                as String,
        geosite: null == geosite
            ? _value.geosite
            : geosite // ignore: cast_nullable_to_non_nullable
                as List<String>,
        ipcidr: null == ipcidr
            ? _value.ipcidr
            : ipcidr // ignore: cast_nullable_to_non_nullable
                as List<String>,
        domain: null == domain
            ? _value.domain
            : domain // ignore: cast_nullable_to_non_nullable
                as List<String>,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$FallbackFilterImplCopyWith<$Res>
      implements $FallbackFilterCopyWith<$Res> {
    factory _$$FallbackFilterImplCopyWith(_$FallbackFilterImpl value,
            $Res Function(_$FallbackFilterImpl) then) =
        __$$FallbackFilterImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {bool geoip,
        @JsonKey(name: "geoip-code") String geoipCode,
        List<String> geosite,
        List<String> ipcidr,
        List<String> domain});
  }
  
  /// @nodoc
  class __$$FallbackFilterImplCopyWithImpl<$Res>
      extends _$FallbackFilterCopyWithImpl<$Res, _$FallbackFilterImpl>
      implements _$$FallbackFilterImplCopyWith<$Res> {
    __$$FallbackFilterImplCopyWithImpl(
        _$FallbackFilterImpl _value, $Res Function(_$FallbackFilterImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of FallbackFilter
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? geoip = null,
      Object? geoipCode = null,
      Object? geosite = null,
      Object? ipcidr = null,
      Object? domain = null,
    }) {
      return _then(_$FallbackFilterImpl(
        geoip: null == geoip
            ? _value.geoip
            : geoip // ignore: cast_nullable_to_non_nullable
                as bool,
        geoipCode: null == geoipCode
            ? _value.geoipCode
            : geoipCode // ignore: cast_nullable_to_non_nullable
                as String,
        geosite: null == geosite
            ? _value._geosite
            : geosite // ignore: cast_nullable_to_non_nullable
                as List<String>,
        ipcidr: null == ipcidr
            ? _value._ipcidr
            : ipcidr // ignore: cast_nullable_to_non_nullable
                as List<String>,
        domain: null == domain
            ? _value._domain
            : domain // ignore: cast_nullable_to_non_nullable
                as List<String>,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$FallbackFilterImpl implements _FallbackFilter {
    const _$FallbackFilterImpl(
        {this.geoip = true,
        @JsonKey(name: "geoip-code") this.geoipCode = "CN",
        final List<String> geosite = const ["gfw"],
        final List<String> ipcidr = const ["240.0.0.0/4"],
        final List<String> domain = const [
          "+.google.com",
          "+.facebook.com",
          "+.youtube.com"
        ]})
        : _geosite = geosite,
          _ipcidr = ipcidr,
          _domain = domain;
  
    factory _$FallbackFilterImpl.fromJson(Map<String, dynamic> json) =>
        _$$FallbackFilterImplFromJson(json);
  
    @override
    @JsonKey()
    final bool geoip;
    @override
    @JsonKey(name: "geoip-code")
    final String geoipCode;
    final List<String> _geosite;
    @override
    @JsonKey()
    List<String> get geosite {
      if (_geosite is EqualUnmodifiableListView) return _geosite;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_geosite);
    }
  
    final List<String> _ipcidr;
    @override
    @JsonKey()
    List<String> get ipcidr {
      if (_ipcidr is EqualUnmodifiableListView) return _ipcidr;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_ipcidr);
    }
  
    final List<String> _domain;
    @override
    @JsonKey()
    List<String> get domain {
      if (_domain is EqualUnmodifiableListView) return _domain;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_domain);
    }
  
    @override
    String toString() {
      return 'FallbackFilter(geoip: $geoip, geoipCode: $geoipCode, geosite: $geosite, ipcidr: $ipcidr, domain: $domain)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$FallbackFilterImpl &&
              (identical(other.geoip, geoip) || other.geoip == geoip) &&
              (identical(other.geoipCode, geoipCode) ||
                  other.geoipCode == geoipCode) &&
              const DeepCollectionEquality().equals(other._geosite, _geosite) &&
              const DeepCollectionEquality().equals(other._ipcidr, _ipcidr) &&
              const DeepCollectionEquality().equals(other._domain, _domain));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        geoip,
        geoipCode,
        const DeepCollectionEquality().hash(_geosite),
        const DeepCollectionEquality().hash(_ipcidr),
        const DeepCollectionEquality().hash(_domain));
  
    /// Create a copy of FallbackFilter
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$FallbackFilterImplCopyWith<_$FallbackFilterImpl> get copyWith =>
        __$$FallbackFilterImplCopyWithImpl<_$FallbackFilterImpl>(
            this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$FallbackFilterImplToJson(
        this,
      );
    }
  }
  
  abstract class _FallbackFilter implements FallbackFilter {
    const factory _FallbackFilter(
        {final bool geoip,
        @JsonKey(name: "geoip-code") final String geoipCode,
        final List<String> geosite,
        final List<String> ipcidr,
        final List<String> domain}) = _$FallbackFilterImpl;
  
    factory _FallbackFilter.fromJson(Map<String, dynamic> json) =
        _$FallbackFilterImpl.fromJson;
  
    @override
    bool get geoip;
    @override
    @JsonKey(name: "geoip-code")
    String get geoipCode;
    @override
    List<String> get geosite;
    @override
    List<String> get ipcidr;
    @override
    List<String> get domain;
  
    /// Create a copy of FallbackFilter
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$FallbackFilterImplCopyWith<_$FallbackFilterImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  Dns _$DnsFromJson(Map<String, dynamic> json) {
    return _Dns.fromJson(json);
  }
  
  /// @nodoc
  mixin _$Dns {
    bool get enable => throw _privateConstructorUsedError;
    String get listen => throw _privateConstructorUsedError;
    @JsonKey(name: "prefer-h3")
    bool get preferH3 => throw _privateConstructorUsedError;
    @JsonKey(name: "use-hosts")
    bool get useHosts => throw _privateConstructorUsedError;
    @JsonKey(name: "use-system-hosts")
    bool get useSystemHosts => throw _privateConstructorUsedError;
    @JsonKey(name: "respect-rules")
    bool get respectRules => throw _privateConstructorUsedError;
    bool get ipv6 => throw _privateConstructorUsedError;
    @JsonKey(name: "default-nameserver")
    List<String> get defaultNameserver => throw _privateConstructorUsedError;
    @JsonKey(name: "enhanced-mode")
    DnsMode get enhancedMode => throw _privateConstructorUsedError;
    @JsonKey(name: "fake-ip-range")
    String get fakeIpRange => throw _privateConstructorUsedError;
    @JsonKey(name: "fake-ip-filter")
    List<String> get fakeIpFilter => throw _privateConstructorUsedError;
    @JsonKey(name: "nameserver-policy")
    Map<String, String> get nameserverPolicy =>
        throw _privateConstructorUsedError;
    List<String> get nameserver => throw _privateConstructorUsedError;
    List<String> get fallback => throw _privateConstructorUsedError;
    @JsonKey(name: "proxy-server-nameserver")
    List<String> get proxyServerNameserver => throw _privateConstructorUsedError;
    @JsonKey(name: "fallback-filter")
    FallbackFilter get fallbackFilter => throw _privateConstructorUsedError;
  
    /// Serializes this Dns to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $DnsCopyWith<Dns> get copyWith => throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $DnsCopyWith<$Res> {
    factory $DnsCopyWith(Dns value, $Res Function(Dns) then) =
        _$DnsCopyWithImpl<$Res, Dns>;
    @useResult
    $Res call(
        {bool enable,
        String listen,
        @JsonKey(name: "prefer-h3") bool preferH3,
        @JsonKey(name: "use-hosts") bool useHosts,
        @JsonKey(name: "use-system-hosts") bool useSystemHosts,
        @JsonKey(name: "respect-rules") bool respectRules,
        bool ipv6,
        @JsonKey(name: "default-nameserver") List<String> defaultNameserver,
        @JsonKey(name: "enhanced-mode") DnsMode enhancedMode,
        @JsonKey(name: "fake-ip-range") String fakeIpRange,
        @JsonKey(name: "fake-ip-filter") List<String> fakeIpFilter,
        @JsonKey(name: "nameserver-policy") Map<String, String> nameserverPolicy,
        List<String> nameserver,
        List<String> fallback,
        @JsonKey(name: "proxy-server-nameserver")
        List<String> proxyServerNameserver,
        @JsonKey(name: "fallback-filter") FallbackFilter fallbackFilter});
  
    $FallbackFilterCopyWith<$Res> get fallbackFilter;
  }
  
  /// @nodoc
  class _$DnsCopyWithImpl<$Res, $Val extends Dns> implements $DnsCopyWith<$Res> {
    _$DnsCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? enable = null,
      Object? listen = null,
      Object? preferH3 = null,
      Object? useHosts = null,
      Object? useSystemHosts = null,
      Object? respectRules = null,
      Object? ipv6 = null,
      Object? defaultNameserver = null,
      Object? enhancedMode = null,
      Object? fakeIpRange = null,
      Object? fakeIpFilter = null,
      Object? nameserverPolicy = null,
      Object? nameserver = null,
      Object? fallback = null,
      Object? proxyServerNameserver = null,
      Object? fallbackFilter = null,
    }) {
      return _then(_value.copyWith(
        enable: null == enable
            ? _value.enable
            : enable // ignore: cast_nullable_to_non_nullable
                as bool,
        listen: null == listen
            ? _value.listen
            : listen // ignore: cast_nullable_to_non_nullable
                as String,
        preferH3: null == preferH3
            ? _value.preferH3
            : preferH3 // ignore: cast_nullable_to_non_nullable
                as bool,
        useHosts: null == useHosts
            ? _value.useHosts
            : useHosts // ignore: cast_nullable_to_non_nullable
                as bool,
        useSystemHosts: null == useSystemHosts
            ? _value.useSystemHosts
            : useSystemHosts // ignore: cast_nullable_to_non_nullable
                as bool,
        respectRules: null == respectRules
            ? _value.respectRules
            : respectRules // ignore: cast_nullable_to_non_nullable
                as bool,
        ipv6: null == ipv6
            ? _value.ipv6
            : ipv6 // ignore: cast_nullable_to_non_nullable
                as bool,
        defaultNameserver: null == defaultNameserver
            ? _value.defaultNameserver
            : defaultNameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        enhancedMode: null == enhancedMode
            ? _value.enhancedMode
            : enhancedMode // ignore: cast_nullable_to_non_nullable
                as DnsMode,
        fakeIpRange: null == fakeIpRange
            ? _value.fakeIpRange
            : fakeIpRange // ignore: cast_nullable_to_non_nullable
                as String,
        fakeIpFilter: null == fakeIpFilter
            ? _value.fakeIpFilter
            : fakeIpFilter // ignore: cast_nullable_to_non_nullable
                as List<String>,
        nameserverPolicy: null == nameserverPolicy
            ? _value.nameserverPolicy
            : nameserverPolicy // ignore: cast_nullable_to_non_nullable
                as Map<String, String>,
        nameserver: null == nameserver
            ? _value.nameserver
            : nameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        fallback: null == fallback
            ? _value.fallback
            : fallback // ignore: cast_nullable_to_non_nullable
                as List<String>,
        proxyServerNameserver: null == proxyServerNameserver
            ? _value.proxyServerNameserver
            : proxyServerNameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        fallbackFilter: null == fallbackFilter
            ? _value.fallbackFilter
            : fallbackFilter // ignore: cast_nullable_to_non_nullable
                as FallbackFilter,
      ) as $Val);
    }
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @override
    @pragma('vm:prefer-inline')
    $FallbackFilterCopyWith<$Res> get fallbackFilter {
      return $FallbackFilterCopyWith<$Res>(_value.fallbackFilter, (value) {
        return _then(_value.copyWith(fallbackFilter: value) as $Val);
      });
    }
  }
  
  /// @nodoc
  abstract class _$$DnsImplCopyWith<$Res> implements $DnsCopyWith<$Res> {
    factory _$$DnsImplCopyWith(_$DnsImpl value, $Res Function(_$DnsImpl) then) =
        __$$DnsImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {bool enable,
        String listen,
        @JsonKey(name: "prefer-h3") bool preferH3,
        @JsonKey(name: "use-hosts") bool useHosts,
        @JsonKey(name: "use-system-hosts") bool useSystemHosts,
        @JsonKey(name: "respect-rules") bool respectRules,
        bool ipv6,
        @JsonKey(name: "default-nameserver") List<String> defaultNameserver,
        @JsonKey(name: "enhanced-mode") DnsMode enhancedMode,
        @JsonKey(name: "fake-ip-range") String fakeIpRange,
        @JsonKey(name: "fake-ip-filter") List<String> fakeIpFilter,
        @JsonKey(name: "nameserver-policy") Map<String, String> nameserverPolicy,
        List<String> nameserver,
        List<String> fallback,
        @JsonKey(name: "proxy-server-nameserver")
        List<String> proxyServerNameserver,
        @JsonKey(name: "fallback-filter") FallbackFilter fallbackFilter});
  
    @override
    $FallbackFilterCopyWith<$Res> get fallbackFilter;
  }
  
  /// @nodoc
  class __$$DnsImplCopyWithImpl<$Res> extends _$DnsCopyWithImpl<$Res, _$DnsImpl>
      implements _$$DnsImplCopyWith<$Res> {
    __$$DnsImplCopyWithImpl(_$DnsImpl _value, $Res Function(_$DnsImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? enable = null,
      Object? listen = null,
      Object? preferH3 = null,
      Object? useHosts = null,
      Object? useSystemHosts = null,
      Object? respectRules = null,
      Object? ipv6 = null,
      Object? defaultNameserver = null,
      Object? enhancedMode = null,
      Object? fakeIpRange = null,
      Object? fakeIpFilter = null,
      Object? nameserverPolicy = null,
      Object? nameserver = null,
      Object? fallback = null,
      Object? proxyServerNameserver = null,
      Object? fallbackFilter = null,
    }) {
      return _then(_$DnsImpl(
        enable: null == enable
            ? _value.enable
            : enable // ignore: cast_nullable_to_non_nullable
                as bool,
        listen: null == listen
            ? _value.listen
            : listen // ignore: cast_nullable_to_non_nullable
                as String,
        preferH3: null == preferH3
            ? _value.preferH3
            : preferH3 // ignore: cast_nullable_to_non_nullable
                as bool,
        useHosts: null == useHosts
            ? _value.useHosts
            : useHosts // ignore: cast_nullable_to_non_nullable
                as bool,
        useSystemHosts: null == useSystemHosts
            ? _value.useSystemHosts
            : useSystemHosts // ignore: cast_nullable_to_non_nullable
                as bool,
        respectRules: null == respectRules
            ? _value.respectRules
            : respectRules // ignore: cast_nullable_to_non_nullable
                as bool,
        ipv6: null == ipv6
            ? _value.ipv6
            : ipv6 // ignore: cast_nullable_to_non_nullable
                as bool,
        defaultNameserver: null == defaultNameserver
            ? _value._defaultNameserver
            : defaultNameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        enhancedMode: null == enhancedMode
            ? _value.enhancedMode
            : enhancedMode // ignore: cast_nullable_to_non_nullable
                as DnsMode,
        fakeIpRange: null == fakeIpRange
            ? _value.fakeIpRange
            : fakeIpRange // ignore: cast_nullable_to_non_nullable
                as String,
        fakeIpFilter: null == fakeIpFilter
            ? _value._fakeIpFilter
            : fakeIpFilter // ignore: cast_nullable_to_non_nullable
                as List<String>,
        nameserverPolicy: null == nameserverPolicy
            ? _value._nameserverPolicy
            : nameserverPolicy // ignore: cast_nullable_to_non_nullable
                as Map<String, String>,
        nameserver: null == nameserver
            ? _value._nameserver
            : nameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        fallback: null == fallback
            ? _value._fallback
            : fallback // ignore: cast_nullable_to_non_nullable
                as List<String>,
        proxyServerNameserver: null == proxyServerNameserver
            ? _value._proxyServerNameserver
            : proxyServerNameserver // ignore: cast_nullable_to_non_nullable
                as List<String>,
        fallbackFilter: null == fallbackFilter
            ? _value.fallbackFilter
            : fallbackFilter // ignore: cast_nullable_to_non_nullable
                as FallbackFilter,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$DnsImpl implements _Dns {
    const _$DnsImpl(
        {this.enable = true,
        this.listen = "0.0.0.0:1053",
        @JsonKey(name: "prefer-h3") this.preferH3 = false,
        @JsonKey(name: "use-hosts") this.useHosts = true,
        @JsonKey(name: "use-system-hosts") this.useSystemHosts = true,
        @JsonKey(name: "respect-rules") this.respectRules = false,
        this.ipv6 = false,
        @JsonKey(name: "default-nameserver")
        final List<String> defaultNameserver = const ["223.5.5.5"],
        @JsonKey(name: "enhanced-mode") this.enhancedMode = DnsMode.fakeIp,
        @JsonKey(name: "fake-ip-range") this.fakeIpRange = "198.18.0.1/16",
        @JsonKey(name: "fake-ip-filter") final List<String> fakeIpFilter = const [
          "*.lan",
          "localhost.ptlogin2.qq.com"
        ],
        @JsonKey(name: "nameserver-policy")
        final Map<String, String> nameserverPolicy = const {
          "www.baidu.com": "114.114.114.114",
          "+.internal.crop.com": "10.0.0.1",
          "geosite:cn": "https://doh.pub/dns-query"
        },
        final List<String> nameserver = const [
          "https://doh.pub/dns-query",
          "https://dns.alidns.com/dns-query"
        ],
        final List<String> fallback = const ["tls://8.8.4.4", "tls://1.1.1.1"],
        @JsonKey(name: "proxy-server-nameserver")
        final List<String> proxyServerNameserver = const [
          "https://doh.pub/dns-query"
        ],
        @JsonKey(name: "fallback-filter")
        this.fallbackFilter = const FallbackFilter()})
        : _defaultNameserver = defaultNameserver,
          _fakeIpFilter = fakeIpFilter,
          _nameserverPolicy = nameserverPolicy,
          _nameserver = nameserver,
          _fallback = fallback,
          _proxyServerNameserver = proxyServerNameserver;
  
    factory _$DnsImpl.fromJson(Map<String, dynamic> json) =>
        _$$DnsImplFromJson(json);
  
    @override
    @JsonKey()
    final bool enable;
    @override
    @JsonKey()
    final String listen;
    @override
    @JsonKey(name: "prefer-h3")
    final bool preferH3;
    @override
    @JsonKey(name: "use-hosts")
    final bool useHosts;
    @override
    @JsonKey(name: "use-system-hosts")
    final bool useSystemHosts;
    @override
    @JsonKey(name: "respect-rules")
    final bool respectRules;
    @override
    @JsonKey()
    final bool ipv6;
    final List<String> _defaultNameserver;
    @override
    @JsonKey(name: "default-nameserver")
    List<String> get defaultNameserver {
      if (_defaultNameserver is EqualUnmodifiableListView)
        return _defaultNameserver;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_defaultNameserver);
    }
  
    @override
    @JsonKey(name: "enhanced-mode")
    final DnsMode enhancedMode;
    @override
    @JsonKey(name: "fake-ip-range")
    final String fakeIpRange;
    final List<String> _fakeIpFilter;
    @override
    @JsonKey(name: "fake-ip-filter")
    List<String> get fakeIpFilter {
      if (_fakeIpFilter is EqualUnmodifiableListView) return _fakeIpFilter;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_fakeIpFilter);
    }
  
    final Map<String, String> _nameserverPolicy;
    @override
    @JsonKey(name: "nameserver-policy")
    Map<String, String> get nameserverPolicy {
      if (_nameserverPolicy is EqualUnmodifiableMapView) return _nameserverPolicy;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableMapView(_nameserverPolicy);
    }
  
    final List<String> _nameserver;
    @override
    @JsonKey()
    List<String> get nameserver {
      if (_nameserver is EqualUnmodifiableListView) return _nameserver;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_nameserver);
    }
  
    final List<String> _fallback;
    @override
    @JsonKey()
    List<String> get fallback {
      if (_fallback is EqualUnmodifiableListView) return _fallback;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_fallback);
    }
  
    final List<String> _proxyServerNameserver;
    @override
    @JsonKey(name: "proxy-server-nameserver")
    List<String> get proxyServerNameserver {
      if (_proxyServerNameserver is EqualUnmodifiableListView)
        return _proxyServerNameserver;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_proxyServerNameserver);
    }
  
    @override
    @JsonKey(name: "fallback-filter")
    final FallbackFilter fallbackFilter;
  
    @override
    String toString() {
      return 'Dns(enable: $enable, listen: $listen, preferH3: $preferH3, useHosts: $useHosts, useSystemHosts: $useSystemHosts, respectRules: $respectRules, ipv6: $ipv6, defaultNameserver: $defaultNameserver, enhancedMode: $enhancedMode, fakeIpRange: $fakeIpRange, fakeIpFilter: $fakeIpFilter, nameserverPolicy: $nameserverPolicy, nameserver: $nameserver, fallback: $fallback, proxyServerNameserver: $proxyServerNameserver, fallbackFilter: $fallbackFilter)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$DnsImpl &&
              (identical(other.enable, enable) || other.enable == enable) &&
              (identical(other.listen, listen) || other.listen == listen) &&
              (identical(other.preferH3, preferH3) ||
                  other.preferH3 == preferH3) &&
              (identical(other.useHosts, useHosts) ||
                  other.useHosts == useHosts) &&
              (identical(other.useSystemHosts, useSystemHosts) ||
                  other.useSystemHosts == useSystemHosts) &&
              (identical(other.respectRules, respectRules) ||
                  other.respectRules == respectRules) &&
              (identical(other.ipv6, ipv6) || other.ipv6 == ipv6) &&
              const DeepCollectionEquality()
                  .equals(other._defaultNameserver, _defaultNameserver) &&
              (identical(other.enhancedMode, enhancedMode) ||
                  other.enhancedMode == enhancedMode) &&
              (identical(other.fakeIpRange, fakeIpRange) ||
                  other.fakeIpRange == fakeIpRange) &&
              const DeepCollectionEquality()
                  .equals(other._fakeIpFilter, _fakeIpFilter) &&
              const DeepCollectionEquality()
                  .equals(other._nameserverPolicy, _nameserverPolicy) &&
              const DeepCollectionEquality()
                  .equals(other._nameserver, _nameserver) &&
              const DeepCollectionEquality().equals(other._fallback, _fallback) &&
              const DeepCollectionEquality()
                  .equals(other._proxyServerNameserver, _proxyServerNameserver) &&
              (identical(other.fallbackFilter, fallbackFilter) ||
                  other.fallbackFilter == fallbackFilter));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        enable,
        listen,
        preferH3,
        useHosts,
        useSystemHosts,
        respectRules,
        ipv6,
        const DeepCollectionEquality().hash(_defaultNameserver),
        enhancedMode,
        fakeIpRange,
        const DeepCollectionEquality().hash(_fakeIpFilter),
        const DeepCollectionEquality().hash(_nameserverPolicy),
        const DeepCollectionEquality().hash(_nameserver),
        const DeepCollectionEquality().hash(_fallback),
        const DeepCollectionEquality().hash(_proxyServerNameserver),
        fallbackFilter);
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$DnsImplCopyWith<_$DnsImpl> get copyWith =>
        __$$DnsImplCopyWithImpl<_$DnsImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$DnsImplToJson(
        this,
      );
    }
  }
  
  abstract class _Dns implements Dns {
    const factory _Dns(
        {final bool enable,
        final String listen,
        @JsonKey(name: "prefer-h3") final bool preferH3,
        @JsonKey(name: "use-hosts") final bool useHosts,
        @JsonKey(name: "use-system-hosts") final bool useSystemHosts,
        @JsonKey(name: "respect-rules") final bool respectRules,
        final bool ipv6,
        @JsonKey(name: "default-nameserver") final List<String> defaultNameserver,
        @JsonKey(name: "enhanced-mode") final DnsMode enhancedMode,
        @JsonKey(name: "fake-ip-range") final String fakeIpRange,
        @JsonKey(name: "fake-ip-filter") final List<String> fakeIpFilter,
        @JsonKey(name: "nameserver-policy")
        final Map<String, String> nameserverPolicy,
        final List<String> nameserver,
        final List<String> fallback,
        @JsonKey(name: "proxy-server-nameserver")
        final List<String> proxyServerNameserver,
        @JsonKey(name: "fallback-filter")
        final FallbackFilter fallbackFilter}) = _$DnsImpl;
  
    factory _Dns.fromJson(Map<String, dynamic> json) = _$DnsImpl.fromJson;
  
    @override
    bool get enable;
    @override
    String get listen;
    @override
    @JsonKey(name: "prefer-h3")
    bool get preferH3;
    @override
    @JsonKey(name: "use-hosts")
    bool get useHosts;
    @override
    @JsonKey(name: "use-system-hosts")
    bool get useSystemHosts;
    @override
    @JsonKey(name: "respect-rules")
    bool get respectRules;
    @override
    bool get ipv6;
    @override
    @JsonKey(name: "default-nameserver")
    List<String> get defaultNameserver;
    @override
    @JsonKey(name: "enhanced-mode")
    DnsMode get enhancedMode;
    @override
    @JsonKey(name: "fake-ip-range")
    String get fakeIpRange;
    @override
    @JsonKey(name: "fake-ip-filter")
    List<String> get fakeIpFilter;
    @override
    @JsonKey(name: "nameserver-policy")
    Map<String, String> get nameserverPolicy;
    @override
    List<String> get nameserver;
    @override
    List<String> get fallback;
    @override
    @JsonKey(name: "proxy-server-nameserver")
    List<String> get proxyServerNameserver;
    @override
    @JsonKey(name: "fallback-filter")
    FallbackFilter get fallbackFilter;
  
    /// Create a copy of Dns
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$DnsImplCopyWith<_$DnsImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  GeoXUrl _$GeoXUrlFromJson(Map<String, dynamic> json) {
    return _GeoXUrl.fromJson(json);
  }
  
  /// @nodoc
  mixin _$GeoXUrl {
    String get mmdb => throw _privateConstructorUsedError;
    String get asn => throw _privateConstructorUsedError;
    String get geoip => throw _privateConstructorUsedError;
    String get geosite => throw _privateConstructorUsedError;
  
    /// Serializes this GeoXUrl to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of GeoXUrl
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $GeoXUrlCopyWith<GeoXUrl> get copyWith => throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $GeoXUrlCopyWith<$Res> {
    factory $GeoXUrlCopyWith(GeoXUrl value, $Res Function(GeoXUrl) then) =
        _$GeoXUrlCopyWithImpl<$Res, GeoXUrl>;
    @useResult
    $Res call({String mmdb, String asn, String geoip, String geosite});
  }
  
  /// @nodoc
  class _$GeoXUrlCopyWithImpl<$Res, $Val extends GeoXUrl>
      implements $GeoXUrlCopyWith<$Res> {
    _$GeoXUrlCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of GeoXUrl
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? mmdb = null,
      Object? asn = null,
      Object? geoip = null,
      Object? geosite = null,
    }) {
      return _then(_value.copyWith(
        mmdb: null == mmdb
            ? _value.mmdb
            : mmdb // ignore: cast_nullable_to_non_nullable
                as String,
        asn: null == asn
            ? _value.asn
            : asn // ignore: cast_nullable_to_non_nullable
                as String,
        geoip: null == geoip
            ? _value.geoip
            : geoip // ignore: cast_nullable_to_non_nullable
                as String,
        geosite: null == geosite
            ? _value.geosite
            : geosite // ignore: cast_nullable_to_non_nullable
                as String,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$GeoXUrlImplCopyWith<$Res> implements $GeoXUrlCopyWith<$Res> {
    factory _$$GeoXUrlImplCopyWith(
            _$GeoXUrlImpl value, $Res Function(_$GeoXUrlImpl) then) =
        __$$GeoXUrlImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call({String mmdb, String asn, String geoip, String geosite});
  }
  
  /// @nodoc
  class __$$GeoXUrlImplCopyWithImpl<$Res>
      extends _$GeoXUrlCopyWithImpl<$Res, _$GeoXUrlImpl>
      implements _$$GeoXUrlImplCopyWith<$Res> {
    __$$GeoXUrlImplCopyWithImpl(
        _$GeoXUrlImpl _value, $Res Function(_$GeoXUrlImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of GeoXUrl
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? mmdb = null,
      Object? asn = null,
      Object? geoip = null,
      Object? geosite = null,
    }) {
      return _then(_$GeoXUrlImpl(
        mmdb: null == mmdb
            ? _value.mmdb
            : mmdb // ignore: cast_nullable_to_non_nullable
                as String,
        asn: null == asn
            ? _value.asn
            : asn // ignore: cast_nullable_to_non_nullable
                as String,
        geoip: null == geoip
            ? _value.geoip
            : geoip // ignore: cast_nullable_to_non_nullable
                as String,
        geosite: null == geosite
            ? _value.geosite
            : geosite // ignore: cast_nullable_to_non_nullable
                as String,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$GeoXUrlImpl implements _GeoXUrl {
    const _$GeoXUrlImpl(
        {this.mmdb =
            "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb",
        this.asn =
            "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb",
        this.geoip =
            "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat",
        this.geosite =
            "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"});
  
    factory _$GeoXUrlImpl.fromJson(Map<String, dynamic> json) =>
        _$$GeoXUrlImplFromJson(json);
  
    @override
    @JsonKey()
    final String mmdb;
    @override
    @JsonKey()
    final String asn;
    @override
    @JsonKey()
    final String geoip;
    @override
    @JsonKey()
    final String geosite;
  
    @override
    String toString() {
      return 'GeoXUrl(mmdb: $mmdb, asn: $asn, geoip: $geoip, geosite: $geosite)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$GeoXUrlImpl &&
              (identical(other.mmdb, mmdb) || other.mmdb == mmdb) &&
              (identical(other.asn, asn) || other.asn == asn) &&
              (identical(other.geoip, geoip) || other.geoip == geoip) &&
              (identical(other.geosite, geosite) || other.geosite == geosite));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(runtimeType, mmdb, asn, geoip, geosite);
  
    /// Create a copy of GeoXUrl
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$GeoXUrlImplCopyWith<_$GeoXUrlImpl> get copyWith =>
        __$$GeoXUrlImplCopyWithImpl<_$GeoXUrlImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$GeoXUrlImplToJson(
        this,
      );
    }
  }
  
  abstract class _GeoXUrl implements GeoXUrl {
    const factory _GeoXUrl(
        {final String mmdb,
        final String asn,
        final String geoip,
        final String geosite}) = _$GeoXUrlImpl;
  
    factory _GeoXUrl.fromJson(Map<String, dynamic> json) = _$GeoXUrlImpl.fromJson;
  
    @override
    String get mmdb;
    @override
    String get asn;
    @override
    String get geoip;
    @override
    String get geosite;
  
    /// Create a copy of GeoXUrl
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$GeoXUrlImplCopyWith<_$GeoXUrlImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  mixin _$ParsedRule {
    RuleAction get ruleAction => throw _privateConstructorUsedError;
    String? get content => throw _privateConstructorUsedError;
    String? get ruleTarget => throw _privateConstructorUsedError;
    String? get ruleProvider => throw _privateConstructorUsedError;
    String? get subRule => throw _privateConstructorUsedError;
    bool get noResolve => throw _privateConstructorUsedError;
    bool get src => throw _privateConstructorUsedError;
  
    /// Create a copy of ParsedRule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $ParsedRuleCopyWith<ParsedRule> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $ParsedRuleCopyWith<$Res> {
    factory $ParsedRuleCopyWith(
            ParsedRule value, $Res Function(ParsedRule) then) =
        _$ParsedRuleCopyWithImpl<$Res, ParsedRule>;
    @useResult
    $Res call(
        {RuleAction ruleAction,
        String? content,
        String? ruleTarget,
        String? ruleProvider,
        String? subRule,
        bool noResolve,
        bool src});
  }
  
  /// @nodoc
  class _$ParsedRuleCopyWithImpl<$Res, $Val extends ParsedRule>
      implements $ParsedRuleCopyWith<$Res> {
    _$ParsedRuleCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of ParsedRule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? ruleAction = null,
      Object? content = freezed,
      Object? ruleTarget = freezed,
      Object? ruleProvider = freezed,
      Object? subRule = freezed,
      Object? noResolve = null,
      Object? src = null,
    }) {
      return _then(_value.copyWith(
        ruleAction: null == ruleAction
            ? _value.ruleAction
            : ruleAction // ignore: cast_nullable_to_non_nullable
                as RuleAction,
        content: freezed == content
            ? _value.content
            : content // ignore: cast_nullable_to_non_nullable
                as String?,
        ruleTarget: freezed == ruleTarget
            ? _value.ruleTarget
            : ruleTarget // ignore: cast_nullable_to_non_nullable
                as String?,
        ruleProvider: freezed == ruleProvider
            ? _value.ruleProvider
            : ruleProvider // ignore: cast_nullable_to_non_nullable
                as String?,
        subRule: freezed == subRule
            ? _value.subRule
            : subRule // ignore: cast_nullable_to_non_nullable
                as String?,
        noResolve: null == noResolve
            ? _value.noResolve
            : noResolve // ignore: cast_nullable_to_non_nullable
                as bool,
        src: null == src
            ? _value.src
            : src // ignore: cast_nullable_to_non_nullable
                as bool,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$ParsedRuleImplCopyWith<$Res>
      implements $ParsedRuleCopyWith<$Res> {
    factory _$$ParsedRuleImplCopyWith(
            _$ParsedRuleImpl value, $Res Function(_$ParsedRuleImpl) then) =
        __$$ParsedRuleImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {RuleAction ruleAction,
        String? content,
        String? ruleTarget,
        String? ruleProvider,
        String? subRule,
        bool noResolve,
        bool src});
  }
  
  /// @nodoc
  class __$$ParsedRuleImplCopyWithImpl<$Res>
      extends _$ParsedRuleCopyWithImpl<$Res, _$ParsedRuleImpl>
      implements _$$ParsedRuleImplCopyWith<$Res> {
    __$$ParsedRuleImplCopyWithImpl(
        _$ParsedRuleImpl _value, $Res Function(_$ParsedRuleImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of ParsedRule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? ruleAction = null,
      Object? content = freezed,
      Object? ruleTarget = freezed,
      Object? ruleProvider = freezed,
      Object? subRule = freezed,
      Object? noResolve = null,
      Object? src = null,
    }) {
      return _then(_$ParsedRuleImpl(
        ruleAction: null == ruleAction
            ? _value.ruleAction
            : ruleAction // ignore: cast_nullable_to_non_nullable
                as RuleAction,
        content: freezed == content
            ? _value.content
            : content // ignore: cast_nullable_to_non_nullable
                as String?,
        ruleTarget: freezed == ruleTarget
            ? _value.ruleTarget
            : ruleTarget // ignore: cast_nullable_to_non_nullable
                as String?,
        ruleProvider: freezed == ruleProvider
            ? _value.ruleProvider
            : ruleProvider // ignore: cast_nullable_to_non_nullable
                as String?,
        subRule: freezed == subRule
            ? _value.subRule
            : subRule // ignore: cast_nullable_to_non_nullable
                as String?,
        noResolve: null == noResolve
            ? _value.noResolve
            : noResolve // ignore: cast_nullable_to_non_nullable
                as bool,
        src: null == src
            ? _value.src
            : src // ignore: cast_nullable_to_non_nullable
                as bool,
      ));
    }
  }
  
  /// @nodoc
  
  class _$ParsedRuleImpl implements _ParsedRule {
    const _$ParsedRuleImpl(
        {required this.ruleAction,
        this.content,
        this.ruleTarget,
        this.ruleProvider,
        this.subRule,
        this.noResolve = false,
        this.src = false});
  
    @override
    final RuleAction ruleAction;
    @override
    final String? content;
    @override
    final String? ruleTarget;
    @override
    final String? ruleProvider;
    @override
    final String? subRule;
    @override
    @JsonKey()
    final bool noResolve;
    @override
    @JsonKey()
    final bool src;
  
    @override
    String toString() {
      return 'ParsedRule(ruleAction: $ruleAction, content: $content, ruleTarget: $ruleTarget, ruleProvider: $ruleProvider, subRule: $subRule, noResolve: $noResolve, src: $src)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$ParsedRuleImpl &&
              (identical(other.ruleAction, ruleAction) ||
                  other.ruleAction == ruleAction) &&
              (identical(other.content, content) || other.content == content) &&
              (identical(other.ruleTarget, ruleTarget) ||
                  other.ruleTarget == ruleTarget) &&
              (identical(other.ruleProvider, ruleProvider) ||
                  other.ruleProvider == ruleProvider) &&
              (identical(other.subRule, subRule) || other.subRule == subRule) &&
              (identical(other.noResolve, noResolve) ||
                  other.noResolve == noResolve) &&
              (identical(other.src, src) || other.src == src));
    }
  
    @override
    int get hashCode => Object.hash(runtimeType, ruleAction, content, ruleTarget,
        ruleProvider, subRule, noResolve, src);
  
    /// Create a copy of ParsedRule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$ParsedRuleImplCopyWith<_$ParsedRuleImpl> get copyWith =>
        __$$ParsedRuleImplCopyWithImpl<_$ParsedRuleImpl>(this, _$identity);
  }
  
  abstract class _ParsedRule implements ParsedRule {
    const factory _ParsedRule(
        {required final RuleAction ruleAction,
        final String? content,
        final String? ruleTarget,
        final String? ruleProvider,
        final String? subRule,
        final bool noResolve,
        final bool src}) = _$ParsedRuleImpl;
  
    @override
    RuleAction get ruleAction;
    @override
    String? get content;
    @override
    String? get ruleTarget;
    @override
    String? get ruleProvider;
    @override
    String? get subRule;
    @override
    bool get noResolve;
    @override
    bool get src;
  
    /// Create a copy of ParsedRule
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$ParsedRuleImplCopyWith<_$ParsedRuleImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  Rule _$RuleFromJson(Map<String, dynamic> json) {
    return _Rule.fromJson(json);
  }
  
  /// @nodoc
  mixin _$Rule {
    String get id => throw _privateConstructorUsedError;
    String get value => throw _privateConstructorUsedError;
  
    /// Serializes this Rule to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of Rule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $RuleCopyWith<Rule> get copyWith => throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $RuleCopyWith<$Res> {
    factory $RuleCopyWith(Rule value, $Res Function(Rule) then) =
        _$RuleCopyWithImpl<$Res, Rule>;
    @useResult
    $Res call({String id, String value});
  }
  
  /// @nodoc
  class _$RuleCopyWithImpl<$Res, $Val extends Rule>
      implements $RuleCopyWith<$Res> {
    _$RuleCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of Rule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? id = null,
      Object? value = null,
    }) {
      return _then(_value.copyWith(
        id: null == id
            ? _value.id
            : id // ignore: cast_nullable_to_non_nullable
                as String,
        value: null == value
            ? _value.value
            : value // ignore: cast_nullable_to_non_nullable
                as String,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$RuleImplCopyWith<$Res> implements $RuleCopyWith<$Res> {
    factory _$$RuleImplCopyWith(
            _$RuleImpl value, $Res Function(_$RuleImpl) then) =
        __$$RuleImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call({String id, String value});
  }
  
  /// @nodoc
  class __$$RuleImplCopyWithImpl<$Res>
      extends _$RuleCopyWithImpl<$Res, _$RuleImpl>
      implements _$$RuleImplCopyWith<$Res> {
    __$$RuleImplCopyWithImpl(_$RuleImpl _value, $Res Function(_$RuleImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of Rule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? id = null,
      Object? value = null,
    }) {
      return _then(_$RuleImpl(
        id: null == id
            ? _value.id
            : id // ignore: cast_nullable_to_non_nullable
                as String,
        value: null == value
            ? _value.value
            : value // ignore: cast_nullable_to_non_nullable
                as String,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$RuleImpl implements _Rule {
    const _$RuleImpl({required this.id, required this.value});
  
    factory _$RuleImpl.fromJson(Map<String, dynamic> json) =>
        _$$RuleImplFromJson(json);
  
    @override
    final String id;
    @override
    final String value;
  
    @override
    String toString() {
      return 'Rule(id: $id, value: $value)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$RuleImpl &&
              (identical(other.id, id) || other.id == id) &&
              (identical(other.value, value) || other.value == value));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(runtimeType, id, value);
  
    /// Create a copy of Rule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$RuleImplCopyWith<_$RuleImpl> get copyWith =>
        __$$RuleImplCopyWithImpl<_$RuleImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$RuleImplToJson(
        this,
      );
    }
  }
  
  abstract class _Rule implements Rule {
    const factory _Rule({required final String id, required final String value}) =
        _$RuleImpl;
  
    factory _Rule.fromJson(Map<String, dynamic> json) = _$RuleImpl.fromJson;
  
    @override
    String get id;
    @override
    String get value;
  
    /// Create a copy of Rule
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$RuleImplCopyWith<_$RuleImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  SubRule _$SubRuleFromJson(Map<String, dynamic> json) {
    return _SubRule.fromJson(json);
  }
  
  /// @nodoc
  mixin _$SubRule {
    String get name => throw _privateConstructorUsedError;
  
    /// Serializes this SubRule to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of SubRule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $SubRuleCopyWith<SubRule> get copyWith => throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $SubRuleCopyWith<$Res> {
    factory $SubRuleCopyWith(SubRule value, $Res Function(SubRule) then) =
        _$SubRuleCopyWithImpl<$Res, SubRule>;
    @useResult
    $Res call({String name});
  }
  
  /// @nodoc
  class _$SubRuleCopyWithImpl<$Res, $Val extends SubRule>
      implements $SubRuleCopyWith<$Res> {
    _$SubRuleCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of SubRule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
    }) {
      return _then(_value.copyWith(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$SubRuleImplCopyWith<$Res> implements $SubRuleCopyWith<$Res> {
    factory _$$SubRuleImplCopyWith(
            _$SubRuleImpl value, $Res Function(_$SubRuleImpl) then) =
        __$$SubRuleImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call({String name});
  }
  
  /// @nodoc
  class __$$SubRuleImplCopyWithImpl<$Res>
      extends _$SubRuleCopyWithImpl<$Res, _$SubRuleImpl>
      implements _$$SubRuleImplCopyWith<$Res> {
    __$$SubRuleImplCopyWithImpl(
        _$SubRuleImpl _value, $Res Function(_$SubRuleImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of SubRule
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? name = null,
    }) {
      return _then(_$SubRuleImpl(
        name: null == name
            ? _value.name
            : name // ignore: cast_nullable_to_non_nullable
                as String,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$SubRuleImpl implements _SubRule {
    const _$SubRuleImpl({required this.name});
  
    factory _$SubRuleImpl.fromJson(Map<String, dynamic> json) =>
        _$$SubRuleImplFromJson(json);
  
    @override
    final String name;
  
    @override
    String toString() {
      return 'SubRule(name: $name)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$SubRuleImpl &&
              (identical(other.name, name) || other.name == name));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(runtimeType, name);
  
    /// Create a copy of SubRule
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$SubRuleImplCopyWith<_$SubRuleImpl> get copyWith =>
        __$$SubRuleImplCopyWithImpl<_$SubRuleImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$SubRuleImplToJson(
        this,
      );
    }
  }
  
  abstract class _SubRule implements SubRule {
    const factory _SubRule({required final String name}) = _$SubRuleImpl;
  
    factory _SubRule.fromJson(Map<String, dynamic> json) = _$SubRuleImpl.fromJson;
  
    @override
    String get name;
  
    /// Create a copy of SubRule
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$SubRuleImplCopyWith<_$SubRuleImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  ClashConfigSnippet _$ClashConfigSnippetFromJson(Map<String, dynamic> json) {
    return _ClashConfigSnippet.fromJson(json);
  }
  
  /// @nodoc
  mixin _$ClashConfigSnippet {
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups => throw _privateConstructorUsedError;
    @JsonKey(fromJson: _genRule)
    List<Rule> get rule => throw _privateConstructorUsedError;
    @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
    List<RuleProvider> get ruleProvider => throw _privateConstructorUsedError;
    @JsonKey(name: "sub-rules", fromJson: _genSubRules)
    List<SubRule> get subRules => throw _privateConstructorUsedError;
  
    /// Serializes this ClashConfigSnippet to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of ClashConfigSnippet
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $ClashConfigSnippetCopyWith<ClashConfigSnippet> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $ClashConfigSnippetCopyWith<$Res> {
    factory $ClashConfigSnippetCopyWith(
            ClashConfigSnippet value, $Res Function(ClashConfigSnippet) then) =
        _$ClashConfigSnippetCopyWithImpl<$Res, ClashConfigSnippet>;
    @useResult
    $Res call(
        {@JsonKey(name: "proxy-groups") List<ProxyGroup> proxyGroups,
        @JsonKey(fromJson: _genRule) List<Rule> rule,
        @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
        List<RuleProvider> ruleProvider,
        @JsonKey(name: "sub-rules", fromJson: _genSubRules)
        List<SubRule> subRules});
  }
  
  /// @nodoc
  class _$ClashConfigSnippetCopyWithImpl<$Res, $Val extends ClashConfigSnippet>
      implements $ClashConfigSnippetCopyWith<$Res> {
    _$ClashConfigSnippetCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of ClashConfigSnippet
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? proxyGroups = null,
      Object? rule = null,
      Object? ruleProvider = null,
      Object? subRules = null,
    }) {
      return _then(_value.copyWith(
        proxyGroups: null == proxyGroups
            ? _value.proxyGroups
            : proxyGroups // ignore: cast_nullable_to_non_nullable
                as List<ProxyGroup>,
        rule: null == rule
            ? _value.rule
            : rule // ignore: cast_nullable_to_non_nullable
                as List<Rule>,
        ruleProvider: null == ruleProvider
            ? _value.ruleProvider
            : ruleProvider // ignore: cast_nullable_to_non_nullable
                as List<RuleProvider>,
        subRules: null == subRules
            ? _value.subRules
            : subRules // ignore: cast_nullable_to_non_nullable
                as List<SubRule>,
      ) as $Val);
    }
  }
  
  /// @nodoc
  abstract class _$$ClashConfigSnippetImplCopyWith<$Res>
      implements $ClashConfigSnippetCopyWith<$Res> {
    factory _$$ClashConfigSnippetImplCopyWith(_$ClashConfigSnippetImpl value,
            $Res Function(_$ClashConfigSnippetImpl) then) =
        __$$ClashConfigSnippetImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {@JsonKey(name: "proxy-groups") List<ProxyGroup> proxyGroups,
        @JsonKey(fromJson: _genRule) List<Rule> rule,
        @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
        List<RuleProvider> ruleProvider,
        @JsonKey(name: "sub-rules", fromJson: _genSubRules)
        List<SubRule> subRules});
  }
  
  /// @nodoc
  class __$$ClashConfigSnippetImplCopyWithImpl<$Res>
      extends _$ClashConfigSnippetCopyWithImpl<$Res, _$ClashConfigSnippetImpl>
      implements _$$ClashConfigSnippetImplCopyWith<$Res> {
    __$$ClashConfigSnippetImplCopyWithImpl(_$ClashConfigSnippetImpl _value,
        $Res Function(_$ClashConfigSnippetImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of ClashConfigSnippet
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? proxyGroups = null,
      Object? rule = null,
      Object? ruleProvider = null,
      Object? subRules = null,
    }) {
      return _then(_$ClashConfigSnippetImpl(
        proxyGroups: null == proxyGroups
            ? _value._proxyGroups
            : proxyGroups // ignore: cast_nullable_to_non_nullable
                as List<ProxyGroup>,
        rule: null == rule
            ? _value._rule
            : rule // ignore: cast_nullable_to_non_nullable
                as List<Rule>,
        ruleProvider: null == ruleProvider
            ? _value._ruleProvider
            : ruleProvider // ignore: cast_nullable_to_non_nullable
                as List<RuleProvider>,
        subRules: null == subRules
            ? _value._subRules
            : subRules // ignore: cast_nullable_to_non_nullable
                as List<SubRule>,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$ClashConfigSnippetImpl implements _ClashConfigSnippet {
    const _$ClashConfigSnippetImpl(
        {@JsonKey(name: "proxy-groups")
        final List<ProxyGroup> proxyGroups = const [],
        @JsonKey(fromJson: _genRule) final List<Rule> rule = const [],
        @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
        final List<RuleProvider> ruleProvider = const [],
        @JsonKey(name: "sub-rules", fromJson: _genSubRules)
        final List<SubRule> subRules = const []})
        : _proxyGroups = proxyGroups,
          _rule = rule,
          _ruleProvider = ruleProvider,
          _subRules = subRules;
  
    factory _$ClashConfigSnippetImpl.fromJson(Map<String, dynamic> json) =>
        _$$ClashConfigSnippetImplFromJson(json);
  
    final List<ProxyGroup> _proxyGroups;
    @override
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups {
      if (_proxyGroups is EqualUnmodifiableListView) return _proxyGroups;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_proxyGroups);
    }
  
    final List<Rule> _rule;
    @override
    @JsonKey(fromJson: _genRule)
    List<Rule> get rule {
      if (_rule is EqualUnmodifiableListView) return _rule;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_rule);
    }
  
    final List<RuleProvider> _ruleProvider;
    @override
    @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
    List<RuleProvider> get ruleProvider {
      if (_ruleProvider is EqualUnmodifiableListView) return _ruleProvider;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_ruleProvider);
    }
  
    final List<SubRule> _subRules;
    @override
    @JsonKey(name: "sub-rules", fromJson: _genSubRules)
    List<SubRule> get subRules {
      if (_subRules is EqualUnmodifiableListView) return _subRules;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_subRules);
    }
  
    @override
    String toString() {
      return 'ClashConfigSnippet(proxyGroups: $proxyGroups, rule: $rule, ruleProvider: $ruleProvider, subRules: $subRules)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$ClashConfigSnippetImpl &&
              const DeepCollectionEquality()
                  .equals(other._proxyGroups, _proxyGroups) &&
              const DeepCollectionEquality().equals(other._rule, _rule) &&
              const DeepCollectionEquality()
                  .equals(other._ruleProvider, _ruleProvider) &&
              const DeepCollectionEquality().equals(other._subRules, _subRules));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        const DeepCollectionEquality().hash(_proxyGroups),
        const DeepCollectionEquality().hash(_rule),
        const DeepCollectionEquality().hash(_ruleProvider),
        const DeepCollectionEquality().hash(_subRules));
  
    /// Create a copy of ClashConfigSnippet
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$ClashConfigSnippetImplCopyWith<_$ClashConfigSnippetImpl> get copyWith =>
        __$$ClashConfigSnippetImplCopyWithImpl<_$ClashConfigSnippetImpl>(
            this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$ClashConfigSnippetImplToJson(
        this,
      );
    }
  }
  
  abstract class _ClashConfigSnippet implements ClashConfigSnippet {
    const factory _ClashConfigSnippet(
        {@JsonKey(name: "proxy-groups") final List<ProxyGroup> proxyGroups,
        @JsonKey(fromJson: _genRule) final List<Rule> rule,
        @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
        final List<RuleProvider> ruleProvider,
        @JsonKey(name: "sub-rules", fromJson: _genSubRules)
        final List<SubRule> subRules}) = _$ClashConfigSnippetImpl;
  
    factory _ClashConfigSnippet.fromJson(Map<String, dynamic> json) =
        _$ClashConfigSnippetImpl.fromJson;
  
    @override
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups;
    @override
    @JsonKey(fromJson: _genRule)
    List<Rule> get rule;
    @override
    @JsonKey(name: "rule-providers", fromJson: _genRuleProviders)
    List<RuleProvider> get ruleProvider;
    @override
    @JsonKey(name: "sub-rules", fromJson: _genSubRules)
    List<SubRule> get subRules;
  
    /// Create a copy of ClashConfigSnippet
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$ClashConfigSnippetImplCopyWith<_$ClashConfigSnippetImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  ClashConfig _$ClashConfigFromJson(Map<String, dynamic> json) {
    return _ClashConfig.fromJson(json);
  }
  
  /// @nodoc
  mixin _$ClashConfig {
    @JsonKey(name: "mixed-port")
    int get mixedPort => throw _privateConstructorUsedError;
    Mode get mode => throw _privateConstructorUsedError;
    @JsonKey(name: "allow-lan")
    bool get allowLan => throw _privateConstructorUsedError;
    @JsonKey(name: "log-level")
    LogLevel get logLevel => throw _privateConstructorUsedError;
    bool get ipv6 => throw _privateConstructorUsedError;
    @JsonKey(name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
    FindProcessMode get findProcessMode => throw _privateConstructorUsedError;
    @JsonKey(name: "keep-alive-interval")
    int get keepAliveInterval => throw _privateConstructorUsedError;
    @JsonKey(name: "unified-delay")
    bool get unifiedDelay => throw _privateConstructorUsedError;
    @JsonKey(name: "tcp-concurrent")
    bool get tcpConcurrent => throw _privateConstructorUsedError;
    @JsonKey(fromJson: Tun.safeFormJson)
    Tun get tun => throw _privateConstructorUsedError;
    @JsonKey(fromJson: Dns.safeDnsFromJson)
    Dns get dns => throw _privateConstructorUsedError;
    @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
    GeoXUrl get geoXUrl => throw _privateConstructorUsedError;
    @JsonKey(name: "geodata-loader")
    GeodataLoader get geodataLoader => throw _privateConstructorUsedError;
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups => throw _privateConstructorUsedError;
    List<String> get rule => throw _privateConstructorUsedError;
    @JsonKey(name: "global-ua")
    String? get globalUa => throw _privateConstructorUsedError;
    @JsonKey(name: "external-controller")
    ExternalControllerStatus get externalController =>
        throw _privateConstructorUsedError;
    Map<String, String> get hosts => throw _privateConstructorUsedError;
  
    /// Serializes this ClashConfig to a JSON map.
    Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    $ClashConfigCopyWith<ClashConfig> get copyWith =>
        throw _privateConstructorUsedError;
  }
  
  /// @nodoc
  abstract class $ClashConfigCopyWith<$Res> {
    factory $ClashConfigCopyWith(
            ClashConfig value, $Res Function(ClashConfig) then) =
        _$ClashConfigCopyWithImpl<$Res, ClashConfig>;
    @useResult
    $Res call(
        {@JsonKey(name: "mixed-port") int mixedPort,
        Mode mode,
        @JsonKey(name: "allow-lan") bool allowLan,
        @JsonKey(name: "log-level") LogLevel logLevel,
        bool ipv6,
        @JsonKey(
            name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
        FindProcessMode findProcessMode,
        @JsonKey(name: "keep-alive-interval") int keepAliveInterval,
        @JsonKey(name: "unified-delay") bool unifiedDelay,
        @JsonKey(name: "tcp-concurrent") bool tcpConcurrent,
        @JsonKey(fromJson: Tun.safeFormJson) Tun tun,
        @JsonKey(fromJson: Dns.safeDnsFromJson) Dns dns,
        @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
        GeoXUrl geoXUrl,
        @JsonKey(name: "geodata-loader") GeodataLoader geodataLoader,
        @JsonKey(name: "proxy-groups") List<ProxyGroup> proxyGroups,
        List<String> rule,
        @JsonKey(name: "global-ua") String? globalUa,
        @JsonKey(name: "external-controller")
        ExternalControllerStatus externalController,
        Map<String, String> hosts});
  
    $TunCopyWith<$Res> get tun;
    $DnsCopyWith<$Res> get dns;
    $GeoXUrlCopyWith<$Res> get geoXUrl;
  }
  
  /// @nodoc
  class _$ClashConfigCopyWithImpl<$Res, $Val extends ClashConfig>
      implements $ClashConfigCopyWith<$Res> {
    _$ClashConfigCopyWithImpl(this._value, this._then);
  
    // ignore: unused_field
    final $Val _value;
    // ignore: unused_field
    final $Res Function($Val) _then;
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? mixedPort = null,
      Object? mode = null,
      Object? allowLan = null,
      Object? logLevel = null,
      Object? ipv6 = null,
      Object? findProcessMode = null,
      Object? keepAliveInterval = null,
      Object? unifiedDelay = null,
      Object? tcpConcurrent = null,
      Object? tun = null,
      Object? dns = null,
      Object? geoXUrl = null,
      Object? geodataLoader = null,
      Object? proxyGroups = null,
      Object? rule = null,
      Object? globalUa = freezed,
      Object? externalController = null,
      Object? hosts = null,
    }) {
      return _then(_value.copyWith(
        mixedPort: null == mixedPort
            ? _value.mixedPort
            : mixedPort // ignore: cast_nullable_to_non_nullable
                as int,
        mode: null == mode
            ? _value.mode
            : mode // ignore: cast_nullable_to_non_nullable
                as Mode,
        allowLan: null == allowLan
            ? _value.allowLan
            : allowLan // ignore: cast_nullable_to_non_nullable
                as bool,
        logLevel: null == logLevel
            ? _value.logLevel
            : logLevel // ignore: cast_nullable_to_non_nullable
                as LogLevel,
        ipv6: null == ipv6
            ? _value.ipv6
            : ipv6 // ignore: cast_nullable_to_non_nullable
                as bool,
        findProcessMode: null == findProcessMode
            ? _value.findProcessMode
            : findProcessMode // ignore: cast_nullable_to_non_nullable
                as FindProcessMode,
        keepAliveInterval: null == keepAliveInterval
            ? _value.keepAliveInterval
            : keepAliveInterval // ignore: cast_nullable_to_non_nullable
                as int,
        unifiedDelay: null == unifiedDelay
            ? _value.unifiedDelay
            : unifiedDelay // ignore: cast_nullable_to_non_nullable
                as bool,
        tcpConcurrent: null == tcpConcurrent
            ? _value.tcpConcurrent
            : tcpConcurrent // ignore: cast_nullable_to_non_nullable
                as bool,
        tun: null == tun
            ? _value.tun
            : tun // ignore: cast_nullable_to_non_nullable
                as Tun,
        dns: null == dns
            ? _value.dns
            : dns // ignore: cast_nullable_to_non_nullable
                as Dns,
        geoXUrl: null == geoXUrl
            ? _value.geoXUrl
            : geoXUrl // ignore: cast_nullable_to_non_nullable
                as GeoXUrl,
        geodataLoader: null == geodataLoader
            ? _value.geodataLoader
            : geodataLoader // ignore: cast_nullable_to_non_nullable
                as GeodataLoader,
        proxyGroups: null == proxyGroups
            ? _value.proxyGroups
            : proxyGroups // ignore: cast_nullable_to_non_nullable
                as List<ProxyGroup>,
        rule: null == rule
            ? _value.rule
            : rule // ignore: cast_nullable_to_non_nullable
                as List<String>,
        globalUa: freezed == globalUa
            ? _value.globalUa
            : globalUa // ignore: cast_nullable_to_non_nullable
                as String?,
        externalController: null == externalController
            ? _value.externalController
            : externalController // ignore: cast_nullable_to_non_nullable
                as ExternalControllerStatus,
        hosts: null == hosts
            ? _value.hosts
            : hosts // ignore: cast_nullable_to_non_nullable
                as Map<String, String>,
      ) as $Val);
    }
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @override
    @pragma('vm:prefer-inline')
    $TunCopyWith<$Res> get tun {
      return $TunCopyWith<$Res>(_value.tun, (value) {
        return _then(_value.copyWith(tun: value) as $Val);
      });
    }
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @override
    @pragma('vm:prefer-inline')
    $DnsCopyWith<$Res> get dns {
      return $DnsCopyWith<$Res>(_value.dns, (value) {
        return _then(_value.copyWith(dns: value) as $Val);
      });
    }
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @override
    @pragma('vm:prefer-inline')
    $GeoXUrlCopyWith<$Res> get geoXUrl {
      return $GeoXUrlCopyWith<$Res>(_value.geoXUrl, (value) {
        return _then(_value.copyWith(geoXUrl: value) as $Val);
      });
    }
  }
  
  /// @nodoc
  abstract class _$$ClashConfigImplCopyWith<$Res>
      implements $ClashConfigCopyWith<$Res> {
    factory _$$ClashConfigImplCopyWith(
            _$ClashConfigImpl value, $Res Function(_$ClashConfigImpl) then) =
        __$$ClashConfigImplCopyWithImpl<$Res>;
    @override
    @useResult
    $Res call(
        {@JsonKey(name: "mixed-port") int mixedPort,
        Mode mode,
        @JsonKey(name: "allow-lan") bool allowLan,
        @JsonKey(name: "log-level") LogLevel logLevel,
        bool ipv6,
        @JsonKey(
            name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
        FindProcessMode findProcessMode,
        @JsonKey(name: "keep-alive-interval") int keepAliveInterval,
        @JsonKey(name: "unified-delay") bool unifiedDelay,
        @JsonKey(name: "tcp-concurrent") bool tcpConcurrent,
        @JsonKey(fromJson: Tun.safeFormJson) Tun tun,
        @JsonKey(fromJson: Dns.safeDnsFromJson) Dns dns,
        @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
        GeoXUrl geoXUrl,
        @JsonKey(name: "geodata-loader") GeodataLoader geodataLoader,
        @JsonKey(name: "proxy-groups") List<ProxyGroup> proxyGroups,
        List<String> rule,
        @JsonKey(name: "global-ua") String? globalUa,
        @JsonKey(name: "external-controller")
        ExternalControllerStatus externalController,
        Map<String, String> hosts});
  
    @override
    $TunCopyWith<$Res> get tun;
    @override
    $DnsCopyWith<$Res> get dns;
    @override
    $GeoXUrlCopyWith<$Res> get geoXUrl;
  }
  
  /// @nodoc
  class __$$ClashConfigImplCopyWithImpl<$Res>
      extends _$ClashConfigCopyWithImpl<$Res, _$ClashConfigImpl>
      implements _$$ClashConfigImplCopyWith<$Res> {
    __$$ClashConfigImplCopyWithImpl(
        _$ClashConfigImpl _value, $Res Function(_$ClashConfigImpl) _then)
        : super(_value, _then);
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @pragma('vm:prefer-inline')
    @override
    $Res call({
      Object? mixedPort = null,
      Object? mode = null,
      Object? allowLan = null,
      Object? logLevel = null,
      Object? ipv6 = null,
      Object? findProcessMode = null,
      Object? keepAliveInterval = null,
      Object? unifiedDelay = null,
      Object? tcpConcurrent = null,
      Object? tun = null,
      Object? dns = null,
      Object? geoXUrl = null,
      Object? geodataLoader = null,
      Object? proxyGroups = null,
      Object? rule = null,
      Object? globalUa = freezed,
      Object? externalController = null,
      Object? hosts = null,
    }) {
      return _then(_$ClashConfigImpl(
        mixedPort: null == mixedPort
            ? _value.mixedPort
            : mixedPort // ignore: cast_nullable_to_non_nullable
                as int,
        mode: null == mode
            ? _value.mode
            : mode // ignore: cast_nullable_to_non_nullable
                as Mode,
        allowLan: null == allowLan
            ? _value.allowLan
            : allowLan // ignore: cast_nullable_to_non_nullable
                as bool,
        logLevel: null == logLevel
            ? _value.logLevel
            : logLevel // ignore: cast_nullable_to_non_nullable
                as LogLevel,
        ipv6: null == ipv6
            ? _value.ipv6
            : ipv6 // ignore: cast_nullable_to_non_nullable
                as bool,
        findProcessMode: null == findProcessMode
            ? _value.findProcessMode
            : findProcessMode // ignore: cast_nullable_to_non_nullable
                as FindProcessMode,
        keepAliveInterval: null == keepAliveInterval
            ? _value.keepAliveInterval
            : keepAliveInterval // ignore: cast_nullable_to_non_nullable
                as int,
        unifiedDelay: null == unifiedDelay
            ? _value.unifiedDelay
            : unifiedDelay // ignore: cast_nullable_to_non_nullable
                as bool,
        tcpConcurrent: null == tcpConcurrent
            ? _value.tcpConcurrent
            : tcpConcurrent // ignore: cast_nullable_to_non_nullable
                as bool,
        tun: null == tun
            ? _value.tun
            : tun // ignore: cast_nullable_to_non_nullable
                as Tun,
        dns: null == dns
            ? _value.dns
            : dns // ignore: cast_nullable_to_non_nullable
                as Dns,
        geoXUrl: null == geoXUrl
            ? _value.geoXUrl
            : geoXUrl // ignore: cast_nullable_to_non_nullable
                as GeoXUrl,
        geodataLoader: null == geodataLoader
            ? _value.geodataLoader
            : geodataLoader // ignore: cast_nullable_to_non_nullable
                as GeodataLoader,
        proxyGroups: null == proxyGroups
            ? _value._proxyGroups
            : proxyGroups // ignore: cast_nullable_to_non_nullable
                as List<ProxyGroup>,
        rule: null == rule
            ? _value._rule
            : rule // ignore: cast_nullable_to_non_nullable
                as List<String>,
        globalUa: freezed == globalUa
            ? _value.globalUa
            : globalUa // ignore: cast_nullable_to_non_nullable
                as String?,
        externalController: null == externalController
            ? _value.externalController
            : externalController // ignore: cast_nullable_to_non_nullable
                as ExternalControllerStatus,
        hosts: null == hosts
            ? _value._hosts
            : hosts // ignore: cast_nullable_to_non_nullable
                as Map<String, String>,
      ));
    }
  }
  
  /// @nodoc
  @JsonSerializable()
  class _$ClashConfigImpl implements _ClashConfig {
    const _$ClashConfigImpl(
        {@JsonKey(name: "mixed-port") this.mixedPort = defaultMixedPort,
        this.mode = Mode.rule,
        @JsonKey(name: "allow-lan") this.allowLan = false,
        @JsonKey(name: "log-level") this.logLevel = LogLevel.error,
        this.ipv6 = false,
        @JsonKey(
            name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
        this.findProcessMode = FindProcessMode.off,
        @JsonKey(name: "keep-alive-interval")
        this.keepAliveInterval = defaultKeepAliveInterval,
        @JsonKey(name: "unified-delay") this.unifiedDelay = true,
        @JsonKey(name: "tcp-concurrent") this.tcpConcurrent = true,
        @JsonKey(fromJson: Tun.safeFormJson) this.tun = defaultTun,
        @JsonKey(fromJson: Dns.safeDnsFromJson) this.dns = defaultDns,
        @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
        this.geoXUrl = defaultGeoXUrl,
        @JsonKey(name: "geodata-loader")
        this.geodataLoader = GeodataLoader.memconservative,
        @JsonKey(name: "proxy-groups")
        final List<ProxyGroup> proxyGroups = const [],
        final List<String> rule = const [],
        @JsonKey(name: "global-ua") this.globalUa,
        @JsonKey(name: "external-controller")
        this.externalController = ExternalControllerStatus.close,
        final Map<String, String> hosts = const {}})
        : _proxyGroups = proxyGroups,
          _rule = rule,
          _hosts = hosts;
  
    factory _$ClashConfigImpl.fromJson(Map<String, dynamic> json) =>
        _$$ClashConfigImplFromJson(json);
  
    @override
    @JsonKey(name: "mixed-port")
    final int mixedPort;
    @override
    @JsonKey()
    final Mode mode;
    @override
    @JsonKey(name: "allow-lan")
    final bool allowLan;
    @override
    @JsonKey(name: "log-level")
    final LogLevel logLevel;
    @override
    @JsonKey()
    final bool ipv6;
    @override
    @JsonKey(name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
    final FindProcessMode findProcessMode;
    @override
    @JsonKey(name: "keep-alive-interval")
    final int keepAliveInterval;
    @override
    @JsonKey(name: "unified-delay")
    final bool unifiedDelay;
    @override
    @JsonKey(name: "tcp-concurrent")
    final bool tcpConcurrent;
    @override
    @JsonKey(fromJson: Tun.safeFormJson)
    final Tun tun;
    @override
    @JsonKey(fromJson: Dns.safeDnsFromJson)
    final Dns dns;
    @override
    @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
    final GeoXUrl geoXUrl;
    @override
    @JsonKey(name: "geodata-loader")
    final GeodataLoader geodataLoader;
    final List<ProxyGroup> _proxyGroups;
    @override
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups {
      if (_proxyGroups is EqualUnmodifiableListView) return _proxyGroups;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_proxyGroups);
    }
  
    final List<String> _rule;
    @override
    @JsonKey()
    List<String> get rule {
      if (_rule is EqualUnmodifiableListView) return _rule;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableListView(_rule);
    }
  
    @override
    @JsonKey(name: "global-ua")
    final String? globalUa;
    @override
    @JsonKey(name: "external-controller")
    final ExternalControllerStatus externalController;
    final Map<String, String> _hosts;
    @override
    @JsonKey()
    Map<String, String> get hosts {
      if (_hosts is EqualUnmodifiableMapView) return _hosts;
      // ignore: implicit_dynamic_type
      return EqualUnmodifiableMapView(_hosts);
    }
  
    @override
    String toString() {
      return 'ClashConfig(mixedPort: $mixedPort, mode: $mode, allowLan: $allowLan, logLevel: $logLevel, ipv6: $ipv6, findProcessMode: $findProcessMode, keepAliveInterval: $keepAliveInterval, unifiedDelay: $unifiedDelay, tcpConcurrent: $tcpConcurrent, tun: $tun, dns: $dns, geoXUrl: $geoXUrl, geodataLoader: $geodataLoader, proxyGroups: $proxyGroups, rule: $rule, globalUa: $globalUa, externalController: $externalController, hosts: $hosts)';
    }
  
    @override
    bool operator ==(Object other) {
      return identical(this, other) ||
          (other.runtimeType == runtimeType &&
              other is _$ClashConfigImpl &&
              (identical(other.mixedPort, mixedPort) ||
                  other.mixedPort == mixedPort) &&
              (identical(other.mode, mode) || other.mode == mode) &&
              (identical(other.allowLan, allowLan) ||
                  other.allowLan == allowLan) &&
              (identical(other.logLevel, logLevel) ||
                  other.logLevel == logLevel) &&
              (identical(other.ipv6, ipv6) || other.ipv6 == ipv6) &&
              (identical(other.findProcessMode, findProcessMode) ||
                  other.findProcessMode == findProcessMode) &&
              (identical(other.keepAliveInterval, keepAliveInterval) ||
                  other.keepAliveInterval == keepAliveInterval) &&
              (identical(other.unifiedDelay, unifiedDelay) ||
                  other.unifiedDelay == unifiedDelay) &&
              (identical(other.tcpConcurrent, tcpConcurrent) ||
                  other.tcpConcurrent == tcpConcurrent) &&
              (identical(other.tun, tun) || other.tun == tun) &&
              (identical(other.dns, dns) || other.dns == dns) &&
              (identical(other.geoXUrl, geoXUrl) || other.geoXUrl == geoXUrl) &&
              (identical(other.geodataLoader, geodataLoader) ||
                  other.geodataLoader == geodataLoader) &&
              const DeepCollectionEquality()
                  .equals(other._proxyGroups, _proxyGroups) &&
              const DeepCollectionEquality().equals(other._rule, _rule) &&
              (identical(other.globalUa, globalUa) ||
                  other.globalUa == globalUa) &&
              (identical(other.externalController, externalController) ||
                  other.externalController == externalController) &&
              const DeepCollectionEquality().equals(other._hosts, _hosts));
    }
  
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    int get hashCode => Object.hash(
        runtimeType,
        mixedPort,
        mode,
        allowLan,
        logLevel,
        ipv6,
        findProcessMode,
        keepAliveInterval,
        unifiedDelay,
        tcpConcurrent,
        tun,
        dns,
        geoXUrl,
        geodataLoader,
        const DeepCollectionEquality().hash(_proxyGroups),
        const DeepCollectionEquality().hash(_rule),
        globalUa,
        externalController,
        const DeepCollectionEquality().hash(_hosts));
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @JsonKey(includeFromJson: false, includeToJson: false)
    @override
    @pragma('vm:prefer-inline')
    _$$ClashConfigImplCopyWith<_$ClashConfigImpl> get copyWith =>
        __$$ClashConfigImplCopyWithImpl<_$ClashConfigImpl>(this, _$identity);
  
    @override
    Map<String, dynamic> toJson() {
      return _$$ClashConfigImplToJson(
        this,
      );
    }
  }
  
  abstract class _ClashConfig implements ClashConfig {
    const factory _ClashConfig(
        {@JsonKey(name: "mixed-port") final int mixedPort,
        final Mode mode,
        @JsonKey(name: "allow-lan") final bool allowLan,
        @JsonKey(name: "log-level") final LogLevel logLevel,
        final bool ipv6,
        @JsonKey(
            name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
        final FindProcessMode findProcessMode,
        @JsonKey(name: "keep-alive-interval") final int keepAliveInterval,
        @JsonKey(name: "unified-delay") final bool unifiedDelay,
        @JsonKey(name: "tcp-concurrent") final bool tcpConcurrent,
        @JsonKey(fromJson: Tun.safeFormJson) final Tun tun,
        @JsonKey(fromJson: Dns.safeDnsFromJson) final Dns dns,
        @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
        final GeoXUrl geoXUrl,
        @JsonKey(name: "geodata-loader") final GeodataLoader geodataLoader,
        @JsonKey(name: "proxy-groups") final List<ProxyGroup> proxyGroups,
        final List<String> rule,
        @JsonKey(name: "global-ua") final String? globalUa,
        @JsonKey(name: "external-controller")
        final ExternalControllerStatus externalController,
        final Map<String, String> hosts}) = _$ClashConfigImpl;
  
    factory _ClashConfig.fromJson(Map<String, dynamic> json) =
        _$ClashConfigImpl.fromJson;
  
    @override
    @JsonKey(name: "mixed-port")
    int get mixedPort;
    @override
    Mode get mode;
    @override
    @JsonKey(name: "allow-lan")
    bool get allowLan;
    @override
    @JsonKey(name: "log-level")
    LogLevel get logLevel;
    @override
    bool get ipv6;
    @override
    @JsonKey(name: "find-process-mode", unknownEnumValue: FindProcessMode.always)
    FindProcessMode get findProcessMode;
    @override
    @JsonKey(name: "keep-alive-interval")
    int get keepAliveInterval;
    @override
    @JsonKey(name: "unified-delay")
    bool get unifiedDelay;
    @override
    @JsonKey(name: "tcp-concurrent")
    bool get tcpConcurrent;
    @override
    @JsonKey(fromJson: Tun.safeFormJson)
    Tun get tun;
    @override
    @JsonKey(fromJson: Dns.safeDnsFromJson)
    Dns get dns;
    @override
    @JsonKey(name: "geox-url", fromJson: GeoXUrl.safeFormJson)
    GeoXUrl get geoXUrl;
    @override
    @JsonKey(name: "geodata-loader")
    GeodataLoader get geodataLoader;
    @override
    @JsonKey(name: "proxy-groups")
    List<ProxyGroup> get proxyGroups;
    @override
    List<String> get rule;
    @override
    @JsonKey(name: "global-ua")
    String? get globalUa;
    @override
    @JsonKey(name: "external-controller")
    ExternalControllerStatus get externalController;
    @override
    Map<String, String> get hosts;
  
    /// Create a copy of ClashConfig
    /// with the given fields replaced by the non-null parameter values.
    @override
    @JsonKey(includeFromJson: false, includeToJson: false)
    _$$ClashConfigImplCopyWith<_$ClashConfigImpl> get copyWith =>
        throw _privateConstructorUsedError;
  }
  