I am very confused by this task. There seems to be a lot in the provided code that I do not understand. 1. public static void main(String... args) throws IOException { The argument to the main function is "String... args". IntelliJ does not report this as an error. I thought it was suppused to be "String[] args" 2. The main function has 2 instructions as arguments. I am not familiar with try taking instructions. try ( FileOutputStream outputStream = new FileOutputStream(args[0]); InputStream is = Solution.class.getClassLoader().getResourceAsStream(args[1]); ) { and what arguments, args[0] and args[1] are we meant to provide? 3. When I try to run the provided code I get the error: Exception in thread "main" java.lang.NullPointerException at com.codegym.task.task19.task1928.Solution.main(Solution.java:23) Line 23 is: byte[] b = new byte[is.available()]; I suppose this is linked to the args provided when running the main Solution class? 4. Solution.class.getClassLoader().getResourceAsStream(args[1]); what does this do? I don't get the feeling that my progress at CodeGym has made me familiar with the code in this example.