public static void main(String[] args) throws IOException {
    	
		/* TODO
		 * add parser for information from pages
		 * identify what problem UI will solve and implement it
		 * 
		 * On hold:
		 * add check if proxy hides the ip
		 * add proxy parsers
		 * 
		 * ideas:
		 * pluging for chrome to use a new proxy for each new site
		 * 
		 */
		LogManager.getLogManager().readConfiguration(LogManager.class.getResourceAsStream("/logger.properties"));
		
		WorkerService wService = WorkerService.getInstance();
		ConfigService cService = ConfigService.getInstance();

		//iterate configs
		for (Config config : cService.getConfigs()) {
			if (config.isInuse()) {
				//initialize worker for each active config and add it to thread service
		    	for (int i = 0; i < config.worker.getThreadsCount(); i++) {
					try {
						AbstractWorker worker = (AbstractWorker) Class.forName(config.worker.getWorker()).getConstructor(Config.class).newInstance(config);
			    		wService.getExecutor().execute(worker);
					} catch (Exception e) {
			    		logger.log(Level.SEVERE, "Worker for config " + config.getName() + " can't be initiated, skipping it", e);
					}
		    	}
	    		logger.log(Level.INFO, "Config " + config.getName() + " was parsed and initiated");
			}
    	}
		
		//do not terminate while threads are running (forever in our case)
		while (!wService.getExecutor().isTerminated()) {
	    	try {
				Thread.sleep(WorkerService.TIMEOUT);
			} catch (InterruptedException e) {
    			Thread.currentThread().interrupt();
			}
		}
		logger.log(Level.INFO, "Shutdown normally");
    }