public CitiesStatisticsByYears deserialize(JsonElement json, Type type,
			JsonDeserializationContext context) throws JsonParseException {
		JsonObject root = json.getAsJsonObject();
		JsonElement epam = root.get("EPAM");
		TypeToken<Map<String, Map<String, List<Integer>>>> mapToken = new TypeToken<Map<String, Map<String, List<Integer>>>>() {
		};
		Gson gson = new Gson();
		Map<String, Map<String, List<Integer>>> data = gson.fromJson(epam,
				mapToken.getType());

		CitiesStatisticsByYears citiesStatisticsByYears = new CitiesStatisticsByYears();
		Map<Integer, EmployeesStatisticsByCities> statByYears = new TreeMap<Integer, EmployeesStatisticsByCities>();
		for (Map.Entry<String, Map<String, List<Integer>>> entryData : data
				.entrySet()) {
			Integer year = parseYear(entryData.getKey());
			EmployeesStatisticsByCities employeesStatosticsByCities = new EmployeesStatisticsByCities();

			Map<City, EmployeesOnQuarters> statByCities = new HashMap<City, EmployeesOnQuarters>();
			for (Map.Entry<String, List<Integer>> statByCity : entryData
					.getValue().entrySet()) {
				City city = new City();
				city.setCityName(statByCity.getKey());
				EmployeesOnQuarters employeesOnQuarters = new EmployeesOnQuarters();
				employeesOnQuarters.setEmployeesQuantity(statByCity.getValue());
				statByCities.put(city, employeesOnQuarters);
			}
			employeesStatosticsByCities.setStatisticsByCities(statByCities);
			statByYears.put(year, employeesStatosticsByCities);
		}

		citiesStatisticsByYears.setCitiesStatistics(statByYears);
		return citiesStatisticsByYears;
	}