code: public Set<T> resolve(Matcher<T> matcher) throws IOException {
  		Set<T> classes = new HashSet<T>();
  		
  		for (URL url : paths) {
  			if (url.toString().endsWith(".jar")) {
  //				System.out.println(url);
  				JarFile jarFile = new JarFile(URLDecoder.decode(url.getPath(), "UTF-8"));
  				Manifest manifest = jarFile.getManifest();
  				
  				if (manifest != null) {
  //					System.out.println(manifest);
  					Attributes mainAttributes = manifest.getMainAttributes();
  					
  					if (mainAttributes != null) {
  //						System.out.println(mainAttributes);
  						String classpath = mainAttributes.getValue(Name.CLASS_PATH);
  						
  						if (classpath != null) {
  //							System.out.println(classpath);
  							StringTokenizer stringTokenizer = new StringTokenizer(classpath);
  							
  							while (stringTokenizer.hasMoreTokens()) {
  								String token = stringTokenizer.nextToken();
  								URL entry = new URL(url, token);
  								
  								if (entry.toString().endsWith("/")) {
  //									System.out.println(entry);
  									classes.addAll(getMatchedClasses(matcher, new File(URLDecoder.decode(entry.getPath(), "UTF-8"))));
  								} else {
  //									System.out.println(entry);
  									classes.addAll(getMatchedClasses(matcher, new JarFile(URLDecoder.decode(entry.getPath(), "UTF-8"))));
  								}
  							}
  						}
  					}
  				}
  				
  				classes.addAll(getMatchedClasses(matcher, jarFile));
  			} else {
  				File base = new File(URLDecoder.decode(url.getPath(), "UTF-8"));
  				classes.addAll(getMatchedClasses(matcher, base));
  			}
  		}
  		
  		return classes;
  	}
docs: Resolves the {@code Class}es that matches to the specified {@code Matcher}.
  
  @param matcher {@code Matcher}.
  @return {@code Class}es that matches to the specified {@code Matcher}.
  @throws IOException If any I/O access fails while traversing the search
  path.