// Path: src/main/java/com/maxmind/geoip2/model/CityResponse.java
// public final class CityResponse extends AbstractCityResponse {
//     @MaxMindDbConstructor
//     public CityResponse(
//             @JsonProperty("city") @MaxMindDbParameter(name = "city") City city,
//             @JsonProperty("continent") @MaxMindDbParameter(name = "continent") Continent continent,
//             @JsonProperty("country") @MaxMindDbParameter(name = "country") Country country,
//             @JsonProperty("location") @MaxMindDbParameter(name = "location") Location location,
//             @JsonProperty("maxmind") @MaxMindDbParameter(name = "maxmind") MaxMind maxmind,
//             @JsonProperty("postal") @MaxMindDbParameter(name = "postal") Postal postal,
//             @JsonProperty("registered_country") @MaxMindDbParameter(name = "registered_country") Country registeredCountry,
//             @JsonProperty("represented_country") @MaxMindDbParameter(name = "represented_country") RepresentedCountry representedCountry,
//             @JsonProperty("subdivisions") @MaxMindDbParameter(name = "subdivisions") ArrayList<Subdivision> subdivisions,
//             @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits
//     ) {
//         super(city, continent, country, location, maxmind, postal, registeredCountry,
//                 representedCountry, subdivisions, traits);
//     }
// 
//     public CityResponse(
//             CityResponse response,
//             String ipAddress,
//             Network network,
//             List<String> locales
//     ) {
//         super(response, ipAddress, network, locales);
//     }
// }
// 
// Path: src/main/java/com/maxmind/geoip2/model/CountryResponse.java
// public final class CountryResponse extends AbstractCountryResponse {
//     @MaxMindDbConstructor
//     public CountryResponse(
//             @JsonProperty("continent") @MaxMindDbParameter(name = "continent") Continent continent,
//             @JsonProperty("country") @MaxMindDbParameter(name = "country") Country country,
//             @JsonProperty("maxmind") @MaxMindDbParameter(name = "maxmind") MaxMind maxmind,
//             @JsonProperty("registered_country") @MaxMindDbParameter(name = "registered_country") Country registeredCountry,
//             @JsonProperty("represented_country") @MaxMindDbParameter(name = "represented_country") RepresentedCountry representedCountry,
//             @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits
//     ) {
//         super(continent, country, maxmind, registeredCountry, representedCountry, traits);
//     }
// 
//     public CountryResponse(
//             CountryResponse response,
//             String ipAddress,
//             Network network,
//             List<String> locales
//     ) {
//         super(response, ipAddress, network, locales);
//     }
// }


import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.model.CountryResponse;
import java.io.IOException;
import java.net.InetAddress;
package com.maxmind.geoip2;



public interface GeoIp2Provider {

    /**
     * @param ipAddress IPv4 or IPv6 address to lookup.
     * @return A Country model for the requested IP address.
     * @throws GeoIp2Exception if there is an error looking up the IP
     * @throws IOException     if there is an IO error
     */
    CountryResponse country(InetAddress ipAddress) throws IOException,
            GeoIp2Exception;

    /**
     * @param ipAddress IPv4 or IPv6 address to lookup.
     * @return A City model for the requested IP address.
     * @throws GeoIp2Exception if there is an error looking up the IP
     * @throws IOException     if there is an IO error
     */
// Path: src/main/java/com/maxmind/geoip2/model/CityResponse.java
// public final class CityResponse extends AbstractCityResponse {
//     @MaxMindDbConstructor
//     public CityResponse(
//             @JsonProperty("city") @MaxMindDbParameter(name = "city") City city,
//             @JsonProperty("continent") @MaxMindDbParameter(name = "continent") Continent continent,
//             @JsonProperty("country") @MaxMindDbParameter(name = "country") Country country,
//             @JsonProperty("location") @MaxMindDbParameter(name = "location") Location location,
//             @JsonProperty("maxmind") @MaxMindDbParameter(name = "maxmind") MaxMind maxmind,
//             @JsonProperty("postal") @MaxMindDbParameter(name = "postal") Postal postal,
//             @JsonProperty("registered_country") @MaxMindDbParameter(name = "registered_country") Country registeredCountry,
//             @JsonProperty("represented_country") @MaxMindDbParameter(name = "represented_country") RepresentedCountry representedCountry,
//             @JsonProperty("subdivisions") @MaxMindDbParameter(name = "subdivisions") ArrayList<Subdivision> subdivisions,
//             @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits
//     ) {
//         super(city, continent, country, location, maxmind, postal, registeredCountry,
//                 representedCountry, subdivisions, traits);
//     }
// 
//     public CityResponse(
//             CityResponse response,
//             String ipAddress,
//             Network network,
//             List<String> locales
//     ) {
//         super(response, ipAddress, network, locales);
//     }
// }
// 
// Path: src/main/java/com/maxmind/geoip2/model/CountryResponse.java
// public final class CountryResponse extends AbstractCountryResponse {
//     @MaxMindDbConstructor
//     public CountryResponse(
//             @JsonProperty("continent") @MaxMindDbParameter(name = "continent") Continent continent,
//             @JsonProperty("country") @MaxMindDbParameter(name = "country") Country country,
//             @JsonProperty("maxmind") @MaxMindDbParameter(name = "maxmind") MaxMind maxmind,
//             @JsonProperty("registered_country") @MaxMindDbParameter(name = "registered_country") Country registeredCountry,
//             @JsonProperty("represented_country") @MaxMindDbParameter(name = "represented_country") RepresentedCountry representedCountry,
//             @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits
//     ) {
//         super(continent, country, maxmind, registeredCountry, representedCountry, traits);
//     }
// 
//     public CountryResponse(
//             CountryResponse response,
//             String ipAddress,
//             Network network,
//             List<String> locales
//     ) {
//         super(response, ipAddress, network, locales);
//     }
// }


// Path: src/main/java/com/maxmind/geoip2/GeoIp2Provider.java
import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.model.CountryResponse;
import java.io.IOException;
import java.net.InetAddress;

package com.maxmind.geoip2;



public interface GeoIp2Provider {

    /**
     * @param ipAddress IPv4 or IPv6 address to lookup.
     * @return A Country model for the requested IP address.
     * @throws GeoIp2Exception if there is an error looking up the IP
     * @throws IOException     if there is an IO error
     */
    CountryResponse country(InetAddress ipAddress) throws IOException,
            GeoIp2Exception;

    /**
     * @param ipAddress IPv4 or IPv6 address to lookup.
     * @return A City model for the requested IP address.
     * @throws GeoIp2Exception if there is an error looking up the IP
     * @throws IOException     if there is an IO error
     */
    CityResponse city(InetAddress ipAddress) throws IOException,