This class will be the entry point of the program and contain the main algorithm to analyze the circuits. This means it's not going to be a simple class with getters and setters. but contains more complicated methods that work together to perform the analysis algorithms. The circuit les. the earnings from each concert gig are included under the city This class must have the following private variables: a cityQueue (CircularArrayQueue of type City) - map (Map) - startCity (City) The class must have the following methods: a CanadaTour (public constructor) takes in a string parameter representing the name of a text file to load (one of the tour les). Initialize the map object and then call IoadData() with the input lename. Initialize the city queue. - IoadData (private) takes in a string parameter for the le to load. Use the provided MyFile Reader class to read in this file and read each of the cities (refer back to Assignment 1 to remember how to use this pmvid ed class to read a text file}. The rst line of each le is just header info which can be discarded alter it is read in. After that, the rest of the files are formatted as: city name. at. y. earnings. Create city objects with the info read in from the le, and use an incrementing counter for the city IDs. The rst city in the le is considered the start city for the circuit so point the sta rtCity variable to it. Add each city to the cityQueue and to the map (call the addCity method provided in the Map class). - ndNextCity takes in two parameters: a City variable representing the current city in the tour. and a double variable representing the current amount of money belonging to the band. Go through each element in the cityQueue to determine which one is the closest to the current city (from the first parameter) using the Euclidean distance calculated in the next method (distBetweenCities). You must omit cities that already marked in or out of the stack and the current city itself (otherwise a city will always be the closest city to itself!). If the found city (with the smallest distance to current city) is null. return null. Calculate the ight cost to this city and determine if it is affordable with the band's current money. If so. retum the city. but if it is not affordable then return null. - distBetweenCities takes in two City parameters and must calculate the Euclidean distance between them. This is done by nding the horizontal difference and vertical difference between the cities and then using the Pythagorean Theorem to calculate the hypotenuse. Return the computed distance. - calcFlightCost takes in a double parameter representing the distance between two cities. This method must return the flight fare cost based on the given distance. This is calculated with a piecewise function. For distances under 100.0. the ight is a fixed rate of $127.00. Otherwise. the cost is calculated as 1.25'dist + 32.0 (where dist is the input parameter). Return the computed fare cost. - travel no parameters required. This method will contain the main algorithm for traversing the circuit map. Create two stack objects: one for tracking which cities have been visited on the circuit and one for the amount of money belonging to the band at each leg of the tour. Use the pseudocode below to help with this algorithm. Note that the pseudocode does not include every operation and you will have to embellish it. This method must return the maximum number of cities visited during any part of the tour . main (public static. entry point) takes in the string array parameter "args'l (as always for the main method). Check if there is exactly 1 argument provided and retrieve it. Initialize a new CanadaTour object with this argument and then call the travel method on this object. If there is not 1 argument provided. display a message to indicate this