//# 7 errors, 1,175 messages
//#
/*
    //#CommandLineParser.java:1:1: class: com.dmdirc.commandline.CommandLineParser
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.commandline;

import com.dmdirc.Main;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.updater.components.LauncherComponent;
import com.dmdirc.util.InvalidAddressException;
import com.dmdirc.util.IrcAddress;
import com.dmdirc.util.resourcemanager.DMDircResourceManager;

import java.io.File;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

/**
 * Parses command line arguments for the client.
 *
 * @author Chris
 */
public class CommandLineParser {
    
    /**
     * The arguments that the client supports, in groups of four, in the
     * following order: short option, long option, description, whether or not
     * the option takes an argument.
     */
    private static final Object[][] ARGUMENTS = new Object[][]{
    //#CommandLineParser.java:51: method: com.dmdirc.commandline.CommandLineParser.com.dmdirc.commandline.CommandLineParser__static_init
    //#input(com.dmdirc.commandline.CommandLineParser__static_init): java.lang.Boolean.FALSE
    //#input(com.dmdirc.commandline.CommandLineParser__static_init): java.lang.Boolean.TRUE
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Descendant_Table[com/dmdirc/commandline/CommandLineParser]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.applySettings()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.checkArgument(C)Z
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doConnect(Ljava/lang/String;)V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doDirectory(Ljava/lang/String;)V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doExisting()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doExistingCheck()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doHelp()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doUnknownArg(Ljava/lang/String;)V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doVersion()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.exit()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processArgument(CLjava/lang/String;)V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processArguments()V
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processLongArg(Ljava/lang/String;)C
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processShortArg(Ljava/lang/String;)C
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#10) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#2) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#3) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#4) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#5) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#6) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#7) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#8) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#9) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7].length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): new Object[][](CommandLineParser__static_init#1) num objects
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS.length
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7]
    //#output(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8]
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#10)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#2)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#3)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#4)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#5)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#6)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#7)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#8)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#9)
    //#new obj(com.dmdirc.commandline.CommandLineParser__static_init): new Object[][](CommandLineParser__static_init#1)
    //#presumption(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(java.lang.Boolean.FALSE)
    //#presumption(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(java.lang.Boolean.TRUE)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS == &new Object[][](CommandLineParser__static_init#1)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Descendant_Table[com/dmdirc/commandline/CommandLineParser] == &__Dispatch_Table
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.applySettings()V == &applySettings
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.checkArgument(C)Z == &checkArgument
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doConnect(Ljava/lang/String;)V == &doConnect
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doDirectory(Ljava/lang/String;)V == &doDirectory
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doExisting()V == &doExisting
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doExistingCheck()V == &doExistingCheck
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doHelp()V == &doHelp
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doUnknownArg(Ljava/lang/String;)V == &doUnknownArg
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.doVersion()V == &doVersion
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.exit()V == &exit
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processArgument(CLjava/lang/String;)V == &processArgument
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processArguments()V == &processArguments
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processLongArg(Ljava/lang/String;)C == &processLongArg
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): __Dispatch_Table.processShortArg(Ljava/lang/String;)C == &processShortArg
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#10) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#2) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#3) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#4) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#5) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#6) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#7) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#8) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[](CommandLineParser__static_init#9) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): new Object[][](CommandLineParser__static_init#1) num objects == 1
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7].length == 4
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[8][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][1] == &"check"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][2] == &"Check if an existing instance of DMDirc exists."
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8][3] == java.lang.Boolean.FALSE
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[8][3])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][3] == ARGUMENTS[8][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][3] == ARGUMENTS[8][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][3] == ARGUMENTS[8][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][3] == ARGUMENTS[8][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][3] == ARGUMENTS[8][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[0][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][1] == &"connect"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][2] == &"Connect to the specified server"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0][3] == java.lang.Boolean.TRUE
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[0][3])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][3] == ARGUMENTS[0][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][3] == ARGUMENTS[0][3]
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[1][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][1] == &"directory"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1][2] == &"Use the specified configuration directory"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[2][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][1] == &"existing"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2][2] == &"Try to use an existing instance of DMDirc (use with -c)"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[3][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][1] == &"help"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3][2] == &"Show command line options and exit"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[4][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][1] == &"launcher"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4][2] == &"Specifies the version of DMDirc's launcher"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[5][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][1] == &"portable"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5][2] == &"Enable portable mode"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[6][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][1] == &"disable-reporting"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6][2] == &"Disable automatic error reporting"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): init'ed(ARGUMENTS[7][0])
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][1] == &"version"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7][2] == &"Display client version and exit"
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS.length == 9
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[0] == &new Object[](CommandLineParser__static_init#2)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[1] == &new Object[](CommandLineParser__static_init#3)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[2] == &new Object[](CommandLineParser__static_init#4)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[3] == &new Object[](CommandLineParser__static_init#5)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[4] == &new Object[](CommandLineParser__static_init#6)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[5] == &new Object[](CommandLineParser__static_init#7)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[6] == &new Object[](CommandLineParser__static_init#8)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[7] == &new Object[](CommandLineParser__static_init#9)
    //#post(com.dmdirc.commandline.CommandLineParser__static_init): ARGUMENTS[8] == &new Object[](CommandLineParser__static_init#10)
    //#CommandLineParser.java:51: end of method: com.dmdirc.commandline.CommandLineParser.com.dmdirc.commandline.CommandLineParser__static_init
        {'c', "connect", "Connect to the specified server", Boolean.TRUE},
        {'d', "directory", "Use the specified configuration directory", Boolean.TRUE},
        {'e', "existing", "Try to use an existing instance of DMDirc (use with -c)", Boolean.FALSE},
        {'h', "help", "Show command line options and exit", Boolean.FALSE},
        {'l', "launcher", "Specifies the version of DMDirc's launcher", Boolean.TRUE},
        {'p', "portable", "Enable portable mode", Boolean.FALSE},
        {'r', "disable-reporting", "Disable automatic error reporting", Boolean.FALSE},
        {'v', "version", "Display client version and exit", Boolean.FALSE},
        {'k', "check", "Check if an existing instance of DMDirc exists.", Boolean.FALSE},
    };
    
    /** A list of addresses to autoconnect to. */
    private final List<IrcAddress> addresses = new ArrayList<IrcAddress>();
    
    /** Whether to disable error reporting or not. */
    private boolean disablereporting;
    
    /** The version string passed for the launcher. */
    private String launcherVersion = "";
    
    /** The RMI server we're using. */
    private RemoteInterface server;
    
    /**
     * Creates a new instance of CommandLineParser.
     *
     * @param arguments The arguments to be parsed
     */
    public CommandLineParser(final String ... arguments) {
    //#CommandLineParser.java:80: method: void com.dmdirc.commandline.CommandLineParser.com.dmdirc.commandline.CommandLineParser(String[])
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "        Version: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "   -"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): " "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): " --"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): " <argument>"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): " Update channel: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ""._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "."._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "<Unknown>"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "@"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "Config option not found: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "Invalid address specified: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "Missing parameter for argument: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "Unknown argument: "._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "channel"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "updater"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): "version"._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): arguments
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): arguments.length
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): arguments[0..4_294_967_295]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): arguments[0..4_294_967_295]._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteInterface]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteServer]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[others]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteInterface.__Dispatch_Table.connect(Ljava/util/List;)V
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteServer.SERVER
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteServer.__Dispatch_Table.connect(Ljava/util/List;)V
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/commandline/RemoteServer.com.dmdirc.logger.ErrorLevel.MEDIUM
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): java.io.File.separator
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): java.io.File.separator._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.System.err
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.System.out
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS.length
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295].length
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][0]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][1]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][2]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): ARGUMENTS[0..4_294_967_295][3]
    //#input(void com.dmdirc.commandline.CommandLineParser(String[])): this
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(CommandLineParser#1) num objects
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): this.addresses
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): this.disablereporting
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): this.launcherVersion
    //#output(void com.dmdirc.commandline.CommandLineParser(String[])): this.server
    //#new obj(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(CommandLineParser#1)
    //#new obj(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.commandline.CommandLineParser(String[])): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.commandline.CommandLineParser(String[])): new MapList(ConfigManager#1)
    //#pre[1] (void com.dmdirc.commandline.CommandLineParser(String[])): arguments != null
    //#pre[2] (void com.dmdirc.commandline.CommandLineParser(String[])): arguments.length <= 4_294_967_295
    //#pre[3] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) arguments[0..4_294_967_295] != null
    //#pre[5] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[11] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[12] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[13] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) ARGUMENTS[0..4_294_967_295][0] != null
    //#pre[15] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[17] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[19] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#pre[20] (void com.dmdirc.commandline.CommandLineParser(String[])): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#presumption(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(com.dmdirc.logger.ErrorLevel.MEDIUM)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): this.addresses == &new ArrayList(CommandLineParser#1)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): possibly_updated(this.disablereporting)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(this.launcherVersion)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(this.server)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): new ArrayList(CommandLineParser#1) num objects == 1
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ArrayList(getSources#1) num objects)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1) num objects)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void com.dmdirc.commandline.CommandLineParser(String[])): init'ed(new MapList(ConfigManager#1) num objects)
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.io.PrintStream:print
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.IrcAddress
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.InvalidAddressException:getMessage
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.Main:setConfigDir
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.rmi.registry.LocateRegistry:getRegistry
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.rmi.registry.Registry:lookup
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:processArgument
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.resourcemanager.DMDircResourceManager:getCurrentWorkingDirectory
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.util.IrcAddress:connect
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.rmi.server.UnicastRemoteObject:exportObject
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.rmi.registry.LocateRegistry:createRegistry
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:java.rmi.registry.Registry:rebind
    //#unanalyzed(void com.dmdirc.commandline.CommandLineParser(String[])): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#test_vector(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.String:charAt(...)@92: {0..44, 46..65_535}, {45}
    //#test_vector(void com.dmdirc.commandline.CommandLineParser(String[])): java.lang.String:startsWith(...)@89: {0}, {1}
        boolean inArg = false;
        char previousArg = '.';
        
        for (String arg : arguments) {
            if (inArg) {
                processArgument(previousArg, arg);
                inArg = false;
            } else {
                if (arg.startsWith("--")) {
                    previousArg = processLongArg(arg.substring(2));
                    inArg = checkArgument(previousArg);
                } else if (arg.charAt(0) == '-') {
                    previousArg = processShortArg(arg.substring(1));
                    inArg = checkArgument(previousArg);
                } else {
                    doUnknownArg("Unknown argument: " + arg);
                }
            }
        }
        
        if (inArg) {
            doUnknownArg("Missing parameter for argument: " + previousArg);
        }
        
        if (server != null) {
    //#CommandLineParser.java:105: ?use of default init
    //#    init'ed(this.server)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void com.dmdirc.commandline.CommandLineParser(String[])
    //#    basic block: bb_13
    //#    assertion: init'ed(this.server)
    //#    VN: this.server
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
            try {
                server.connect(addresses);
    //#CommandLineParser.java:107: ?use of default init
    //#    init'ed(this.server.__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void com.dmdirc.commandline.CommandLineParser(String[])
    //#    basic block: bb_15
    //#    assertion: init'ed(this.server.__Tag)
    //#    VN: this.server.__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#CommandLineParser.java:107: ?null dereference
    //#    com/dmdirc/commandline/RemoteInterface.__Descendant_Table[this.server.__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void com.dmdirc.commandline.CommandLineParser(String[])
    //#    basic block: bb_15
    //#    assertion: com/dmdirc/commandline/RemoteInterface.__Descendant_Table[this.server.__Tag] != null
    //#    VN: com/dmdirc/commandline/RemoteInterface.__Descendant_Table[this.server.__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
                System.exit(0);
            } catch (RemoteException ex) {
                Logger.appError(ErrorLevel.MEDIUM,
    //#CommandLineParser.java:110: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void com.dmdirc.commandline.CommandLineParser(String[])
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
                        "Unable to execute remote connection", ex);
            }
        }
        
        RemoteServer.bind();
    }
    //#CommandLineParser.java:116: end of method: void com.dmdirc.commandline.CommandLineParser.com.dmdirc.commandline.CommandLineParser(String[])
    
    /**
     * Checks whether the specified arg type takes an argument. If it does,
     * this method returns true. If it doesn't, the method processes the
     * argument and returns false.
     *
     * @param argument The short code of the argument
     * @return True if the arg requires an argument, false otherwise
     */
    private boolean checkArgument(final char argument) {
        boolean needsArg = false;
    //#CommandLineParser.java:127: method: bool com.dmdirc.commandline.CommandLineParser.checkArgument(char)
    //#input(bool checkArgument(char)): "        Version: "._tainted
    //#input(bool checkArgument(char)): "   -"._tainted
    //#input(bool checkArgument(char)): " "._tainted
    //#input(bool checkArgument(char)): " --"._tainted
    //#input(bool checkArgument(char)): " <argument>"._tainted
    //#input(bool checkArgument(char)): " Update channel: "._tainted
    //#input(bool checkArgument(char)): ""._tainted
    //#input(bool checkArgument(char)): "."._tainted
    //#input(bool checkArgument(char)): "<Unknown>"._tainted
    //#input(bool checkArgument(char)): "@"._tainted
    //#input(bool checkArgument(char)): "Config option not found: "._tainted
    //#input(bool checkArgument(char)): "Invalid address specified: "._tainted
    //#input(bool checkArgument(char)): "Unknown argument: "._tainted
    //#input(bool checkArgument(char)): "channel"._tainted
    //#input(bool checkArgument(char)): "updater"._tainted
    //#input(bool checkArgument(char)): "version"._tainted
    //#input(bool checkArgument(char)): ARGUMENTS
    //#input(bool checkArgument(char)): argument
    //#input(bool checkArgument(char)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(bool checkArgument(char)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(bool checkArgument(char)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteInterface]
    //#input(bool checkArgument(char)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteServer]
    //#input(bool checkArgument(char)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[others]
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigManager.stats
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(bool checkArgument(char)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(bool checkArgument(char)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.identities
    //#input(bool checkArgument(char)): com/dmdirc/config/IdentityManager.managers
    //#input(bool checkArgument(char)): java.io.File.separator
    //#input(bool checkArgument(char)): java.io.File.separator._tainted
    //#input(bool checkArgument(char)): java.lang.System.err
    //#input(bool checkArgument(char)): java.lang.System.out
    //#input(bool checkArgument(char)): ARGUMENTS.length
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295]
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295].length
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][0]
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][1]
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][2]
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(bool checkArgument(char)): ARGUMENTS[0..4_294_967_295][3]
    //#input(bool checkArgument(char)): this
    //#input(bool checkArgument(char)): this.addresses
    //#output(bool checkArgument(char)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(bool checkArgument(char)): java.lang.StringBuilder:toString(...)._tainted
    //#output(bool checkArgument(char)): new ArrayList(getSources#1) num objects
    //#output(bool checkArgument(char)): new ArrayList(getSources#1).__Lock
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).channel
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).network
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).server
    //#output(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1).sources
    //#output(bool checkArgument(char)): new MapList(ConfigManager#1) num objects
    //#output(bool checkArgument(char)): return_value
    //#output(bool checkArgument(char)): this.disablereporting
    //#output(bool checkArgument(char)): this.launcherVersion
    //#output(bool checkArgument(char)): this.server
    //#new obj(bool checkArgument(char)): java.lang.StringBuilder:toString(...)
    //#new obj(bool checkArgument(char)): new ArrayList(getSources#1)
    //#new obj(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1)
    //#new obj(bool checkArgument(char)): new MapList(ConfigManager#1)
    //#pre[2] (bool checkArgument(char)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[8] (bool checkArgument(char)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[9] (bool checkArgument(char)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[10] (bool checkArgument(char)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][0])
    //#pre[12] (bool checkArgument(char)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[14] (bool checkArgument(char)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[16] (bool checkArgument(char)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#pre[17] (bool checkArgument(char)): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[22] (bool checkArgument(char)): (soft) this.addresses != null
    //#post(bool checkArgument(char)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(bool checkArgument(char)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(bool checkArgument(char)): init'ed(return_value)
    //#post(bool checkArgument(char)): possibly_updated(this.disablereporting)
    //#post(bool checkArgument(char)): possibly_updated(this.launcherVersion)
    //#post(bool checkArgument(char)): possibly_updated(this.server)
    //#post(bool checkArgument(char)): new ArrayList(getSources#1) num objects == 0
    //#post(bool checkArgument(char)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(bool checkArgument(char)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(bool checkArgument(char)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(bool checkArgument(char)): new MapList(ConfigManager#1) num objects == 0
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.io.PrintStream:print
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.IrcAddress
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.List:add
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.InvalidAddressException:getMessage
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.Main:setConfigDir
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.rmi.registry.LocateRegistry:getRegistry
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.rmi.registry.Registry:lookup
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:hasOption
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:getOption
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:getSources
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:addListener
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:addConfigManager
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:getTarget
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(bool checkArgument(char)): Effects-of-calling:com.dmdirc.util.resourcemanager.DMDircResourceManager:getCurrentWorkingDirectory
        
        for (int i = 0; i < ARGUMENTS.length; i++) {
            if (argument == ARGUMENTS[i][0]) {
                needsArg = (Boolean) ARGUMENTS[i][3];
                break;
            }
        }
        
        if (needsArg) {
            return true;
        } else {
            processArgument(argument, null);
    //#CommandLineParser.java:139: ?!precondition failure
    //#    com/dmdirc/commandline/CommandLineParser.processArgument: (soft) param != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: bool checkArgument(char)
    //#    basic block: bb_8
    //#    assertion: (soft) false
    //#    callee: void com/dmdirc/commandline/CommandLineParser.processArgument(char, String)
    //#    callee assertion: (soft) param != null
    //#    callee file: CommandLineParser.java
    //#    callee precondition index: [21]
    //#    callee srcpos: 190
    //#    VN: null
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Soft
            
            return false;
    //#CommandLineParser.java:141: end of method: bool com.dmdirc.commandline.CommandLineParser.checkArgument(char)
        }
    }
    
    /**
     * Processes the specified string as a single long argument.
     *
     * @param arg The string entered
     * @return The short form of the corresponding argument
     */
    private char processLongArg(final String arg) {
        for (int i = 0; i < ARGUMENTS.length; i++) {
    //#CommandLineParser.java:152: method: char com.dmdirc.commandline.CommandLineParser.processLongArg(String)
    //#input(char processLongArg(String)): "   -"._tainted
    //#input(char processLongArg(String)): " "._tainted
    //#input(char processLongArg(String)): " --"._tainted
    //#input(char processLongArg(String)): " <argument>"._tainted
    //#input(char processLongArg(String)): ""._tainted
    //#input(char processLongArg(String)): "Unknown argument: "._tainted
    //#input(char processLongArg(String)): ARGUMENTS
    //#input(char processLongArg(String)): arg
    //#input(char processLongArg(String)): arg._tainted
    //#input(char processLongArg(String)): java.lang.System.out
    //#input(char processLongArg(String)): ARGUMENTS.length
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295]
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295].length
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][0]
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][1]
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][2]
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(char processLongArg(String)): ARGUMENTS[0..4_294_967_295][3]
    //#input(char processLongArg(String)): this
    //#output(char processLongArg(String)): return_value
    //#pre[1] (char processLongArg(String)): (soft) arg != null
    //#pre[3] (char processLongArg(String)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[4] (char processLongArg(String)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[5] (char processLongArg(String)): (soft) ARGUMENTS[0..4_294_967_295][0] != null
    //#pre[7] (char processLongArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[9] (char processLongArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[11] (char processLongArg(String)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#post(char processLongArg(String)): init'ed(return_value)
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(char processLongArg(String)): Effects-of-calling:java.io.PrintStream:print
    //#test_vector(char processLongArg(String)): java.lang.String:equalsIgnoreCase(...)@153: {0}, {1}
            if (arg.equalsIgnoreCase((String) ARGUMENTS[i][1])) {
                return (Character) ARGUMENTS[i][0];
            }
        }
        
        doUnknownArg("Unknown argument: " + arg);
        exit();
        
        return '.';
    //#CommandLineParser.java:161: end of method: char com.dmdirc.commandline.CommandLineParser.processLongArg(String)
    }
    
    /**
     * Processes the specified string as a single short argument.
     *
     * @param arg The string entered
     * @return The short form of the corresponding argument
     */
    private char processShortArg(final String arg) {
        for (int i = 0; i < ARGUMENTS.length; i++) {
    //#CommandLineParser.java:171: method: char com.dmdirc.commandline.CommandLineParser.processShortArg(String)
    //#input(char processShortArg(String)): "   -"._tainted
    //#input(char processShortArg(String)): " "._tainted
    //#input(char processShortArg(String)): " --"._tainted
    //#input(char processShortArg(String)): " <argument>"._tainted
    //#input(char processShortArg(String)): ""._tainted
    //#input(char processShortArg(String)): "Unknown argument: "._tainted
    //#input(char processShortArg(String)): ARGUMENTS
    //#input(char processShortArg(String)): arg
    //#input(char processShortArg(String)): arg._tainted
    //#input(char processShortArg(String)): java.lang.System.out
    //#input(char processShortArg(String)): ARGUMENTS.length
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295]
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295].length
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][0]
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][1]
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][2]
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(char processShortArg(String)): ARGUMENTS[0..4_294_967_295][3]
    //#input(char processShortArg(String)): this
    //#output(char processShortArg(String)): return_value
    //#pre[1] (char processShortArg(String)): (soft) arg != null
    //#pre[3] (char processShortArg(String)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[4] (char processShortArg(String)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[5] (char processShortArg(String)): (soft) ARGUMENTS[0..4_294_967_295][0] != null
    //#pre[7] (char processShortArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[9] (char processShortArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[11] (char processShortArg(String)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#post(char processShortArg(String)): init'ed(return_value)
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(char processShortArg(String)): Effects-of-calling:java.io.PrintStream:print
    //#test_vector(char processShortArg(String)): java.lang.String:equals(...)@172: {0}, {1}
            if (arg.equals(String.valueOf(ARGUMENTS[i][0]))) {
                return (Character) ARGUMENTS[i][0];
            }
        }
        
        doUnknownArg("Unknown argument: " + arg);
        exit();
        
        return '.';
    //#CommandLineParser.java:180: end of method: char com.dmdirc.commandline.CommandLineParser.processShortArg(String)
    }
    
    /**
     * Processes the sepcified command-line argument.
     *
     * @param arg The short form of the argument used
     * @param param The (optional) string parameter for the option
     */
    private void processArgument(final char arg, final String param) {
        switch (arg) {
    //#CommandLineParser.java:190: method: void com.dmdirc.commandline.CommandLineParser.processArgument(char, String)
    //#input(void processArgument(char, String)): "        Version: "._tainted
    //#input(void processArgument(char, String)): "   -"._tainted
    //#input(void processArgument(char, String)): " "._tainted
    //#input(void processArgument(char, String)): " --"._tainted
    //#input(void processArgument(char, String)): " <argument>"._tainted
    //#input(void processArgument(char, String)): " Update channel: "._tainted
    //#input(void processArgument(char, String)): ""._tainted
    //#input(void processArgument(char, String)): "."._tainted
    //#input(void processArgument(char, String)): "<Unknown>"._tainted
    //#input(void processArgument(char, String)): "@"._tainted
    //#input(void processArgument(char, String)): "Config option not found: "._tainted
    //#input(void processArgument(char, String)): "Invalid address specified: "._tainted
    //#input(void processArgument(char, String)): "Unknown argument: "._tainted
    //#input(void processArgument(char, String)): "channel"._tainted
    //#input(void processArgument(char, String)): "updater"._tainted
    //#input(void processArgument(char, String)): "version"._tainted
    //#input(void processArgument(char, String)): ARGUMENTS
    //#input(void processArgument(char, String)): arg
    //#input(void processArgument(char, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void processArgument(char, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void processArgument(char, String)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteInterface]
    //#input(void processArgument(char, String)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteServer]
    //#input(void processArgument(char, String)): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[others]
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigManager.stats
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void processArgument(char, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void processArgument(char, String)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.identities
    //#input(void processArgument(char, String)): com/dmdirc/config/IdentityManager.managers
    //#input(void processArgument(char, String)): java.io.File.separator
    //#input(void processArgument(char, String)): java.io.File.separator._tainted
    //#input(void processArgument(char, String)): java.lang.System.err
    //#input(void processArgument(char, String)): java.lang.System.out
    //#input(void processArgument(char, String)): ARGUMENTS.length
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295]
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295].length
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][0]
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][1]
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][2]
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(void processArgument(char, String)): ARGUMENTS[0..4_294_967_295][3]
    //#input(void processArgument(char, String)): param
    //#input(void processArgument(char, String)): param._tainted
    //#input(void processArgument(char, String)): this
    //#input(void processArgument(char, String)): this.addresses
    //#output(void processArgument(char, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void processArgument(char, String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void processArgument(char, String)): new ArrayList(getSources#1) num objects
    //#output(void processArgument(char, String)): new ArrayList(getSources#1).__Lock
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).network
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).server
    //#output(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void processArgument(char, String)): new MapList(ConfigManager#1) num objects
    //#output(void processArgument(char, String)): this.disablereporting
    //#output(void processArgument(char, String)): this.launcherVersion
    //#output(void processArgument(char, String)): this.server
    //#new obj(void processArgument(char, String)): java.lang.StringBuilder:toString(...)
    //#new obj(void processArgument(char, String)): new ArrayList(getSources#1)
    //#new obj(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void processArgument(char, String)): new MapList(ConfigManager#1)
    //#pre[2] (void processArgument(char, String)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[8] (void processArgument(char, String)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[9] (void processArgument(char, String)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[10] (void processArgument(char, String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][0])
    //#pre[12] (void processArgument(char, String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[14] (void processArgument(char, String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[16] (void processArgument(char, String)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#pre[17] (void processArgument(char, String)): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[21] (void processArgument(char, String)): (soft) param != null
    //#pre[24] (void processArgument(char, String)): (soft) this.addresses != null
    //#presumption(void processArgument(char, String)): com.dmdirc.util.resourcemanager.DMDircResourceManager:getCurrentWorkingDirectory(...)@210 != null
    //#post(void processArgument(char, String)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(void processArgument(char, String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void processArgument(char, String)): possibly_updated(this.disablereporting)
    //#post(void processArgument(char, String)): possibly_updated(this.launcherVersion)
    //#post(void processArgument(char, String)): possibly_updated(this.server)
    //#post(void processArgument(char, String)): new ArrayList(getSources#1) num objects == 0
    //#post(void processArgument(char, String)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void processArgument(char, String)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void processArgument(char, String)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void processArgument(char, String)): new MapList(ConfigManager#1) num objects == 0
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.io.PrintStream:print
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.util.IrcAddress
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.util.InvalidAddressException:getMessage
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.Main:setConfigDir
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.rmi.registry.LocateRegistry:getRegistry
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.rmi.registry.Registry:lookup
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:hasOption
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:getOption
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:getSources
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:addListener
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:addConfigManager
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:getTarget
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void processArgument(char, String)): Effects-of-calling:java.util.Collections:sort
    //#test_vector(void processArgument(char, String)): arg: {99}, {100}, {101}, {104}, {107}, {108}, {112}, {114}, {118}, {0..98, 102,103, 105,106, 109..111, 113, 115..117, 119..65_535}
        case 'c':
            doConnect(param);
            break;
        case 'd':
            doDirectory(param);
            break;
        case 'e':
            doExisting();
            break;
        case 'k':
            doExistingCheck();
            break;
        case 'h':
            doHelp();
            break;
        case 'l':
            launcherVersion = param;
            break;
        case 'p':
            doDirectory(DMDircResourceManager.getCurrentWorkingDirectory());
    //#CommandLineParser.java:210: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.resourcemanager.DMDircResourceManager:getCurrentWorkingDirectory()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void processArgument(char, String)
    //#    unanalyzed callee: String com.dmdirc.util.resourcemanager.DMDircResourceManager:getCurrentWorkingDirectory()
            break;
        case 'r':
            disablereporting = true;
            break;
        case 'v':
            doVersion();
            break;
        default:
            // This really shouldn't ever happen, but we'll handle it nicely
            // anyway.
            
            doUnknownArg("Unknown argument: " + arg);
            break;
        }
    }
    //#CommandLineParser.java:225: end of method: void com.dmdirc.commandline.CommandLineParser.processArgument(char, String)
    
    /**
     * Informs the user that they entered an unknown argument, prints the
     * client help, and exits.
     *
     * @param message The message about the unknown argument to be displayed
     */
    private void doUnknownArg(final String message) {
        System.out.println(message);
    //#CommandLineParser.java:234: method: void com.dmdirc.commandline.CommandLineParser.doUnknownArg(String)
    //#input(void doUnknownArg(String)): "   -"._tainted
    //#input(void doUnknownArg(String)): " "._tainted
    //#input(void doUnknownArg(String)): " --"._tainted
    //#input(void doUnknownArg(String)): " <argument>"._tainted
    //#input(void doUnknownArg(String)): ""._tainted
    //#input(void doUnknownArg(String)): ARGUMENTS
    //#input(void doUnknownArg(String)): java.lang.System.out
    //#input(void doUnknownArg(String)): message
    //#input(void doUnknownArg(String)): ARGUMENTS.length
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295]
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295].length
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][0]
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][1]
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][2]
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(void doUnknownArg(String)): ARGUMENTS[0..4_294_967_295][3]
    //#input(void doUnknownArg(String)): this
    //#pre[2] (void doUnknownArg(String)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[3] (void doUnknownArg(String)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[4] (void doUnknownArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][0])
    //#pre[6] (void doUnknownArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[8] (void doUnknownArg(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[10] (void doUnknownArg(String)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#presumption(void doUnknownArg(String)): java.lang.System.out != null
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void doUnknownArg(String)): Effects-of-calling:java.io.PrintStream:print
        System.out.println();
        doHelp();
    }
    //#CommandLineParser.java:237: end of method: void com.dmdirc.commandline.CommandLineParser.doUnknownArg(String)
    
    /**
     * Exits DMDirc.
     */
    private void exit() {
        System.exit(0);
    //#CommandLineParser.java:243: method: void com.dmdirc.commandline.CommandLineParser.exit()
    //#CommandLineParser.java:243: ?never returns: method always exits the program: void exit().
    }
    //#CommandLineParser.java:244: end of method: void com.dmdirc.commandline.CommandLineParser.exit()
    
    /**
     * Handles the --connect argument.
     *
     * @param address The address the user told us to connect to
     */
    private void doConnect(final String address) {
        IrcAddress myAddress = null;
    //#CommandLineParser.java:252: method: void com.dmdirc.commandline.CommandLineParser.doConnect(String)
    //#CommandLineParser.java:252: Warning: unused assignment
    //#    Unused assignment into myAddress
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doConnect(String)
    //#    Attribs:  Uncertain
    //#input(void doConnect(String)): "   -"._tainted
    //#input(void doConnect(String)): " "._tainted
    //#input(void doConnect(String)): " --"._tainted
    //#input(void doConnect(String)): " <argument>"._tainted
    //#input(void doConnect(String)): ""._tainted
    //#input(void doConnect(String)): "Invalid address specified: "._tainted
    //#input(void doConnect(String)): ARGUMENTS
    //#input(void doConnect(String)): address
    //#input(void doConnect(String)): java.lang.System.out
    //#input(void doConnect(String)): ARGUMENTS.length
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295]
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295].length
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][0]
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][1]
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][2]
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(void doConnect(String)): ARGUMENTS[0..4_294_967_295][3]
    //#input(void doConnect(String)): this
    //#input(void doConnect(String)): this.addresses
    //#pre[2] (void doConnect(String)): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[3] (void doConnect(String)): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[4] (void doConnect(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][0])
    //#pre[6] (void doConnect(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[8] (void doConnect(String)): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[10] (void doConnect(String)): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#pre[12] (void doConnect(String)): (soft) this.addresses != null
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.io.PrintStream:println
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.Boolean:booleanValue
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void doConnect(String)): Effects-of-calling:java.io.PrintStream:print
        
        try {
            myAddress = new IrcAddress(address);
    //#CommandLineParser.java:255: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.IrcAddress(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doConnect(String)
    //#    unanalyzed callee: void com.dmdirc.util.IrcAddress(String)
            addresses.add(myAddress);
        } catch (InvalidAddressException ex) {
            doUnknownArg("Invalid address specified: " + ex.getMessage());
    //#CommandLineParser.java:258: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.util.InvalidAddressException:getMessage()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doConnect(String)
    //#    unanalyzed callee: String com.dmdirc.util.InvalidAddressException:getMessage()
        }
    }
    //#CommandLineParser.java:260: end of method: void com.dmdirc.commandline.CommandLineParser.doConnect(String)
    
    /**
     * Handles the --existing argument.
     */
    private void doExisting() {
        server = RemoteServer.getServer();
    //#CommandLineParser.java:266: method: void com.dmdirc.commandline.CommandLineParser.doExisting()
    //#input(void doExisting()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteInterface]
    //#input(void doExisting()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteServer]
    //#input(void doExisting()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[others]
    //#input(void doExisting()): java.lang.System.err
    //#input(void doExisting()): this
    //#output(void doExisting()): this.server
    //#presumption(void doExisting()): java.lang.System.err != null
    //#post(void doExisting()): init'ed(this.server)
    //#unanalyzed(void doExisting()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doExisting()): Effects-of-calling:java.rmi.registry.LocateRegistry:getRegistry
    //#unanalyzed(void doExisting()): Effects-of-calling:java.rmi.registry.Registry:lookup
        
        if (server == null) {
            System.err.println("Unable to connect to existing instance");
        }
    }
    //#CommandLineParser.java:271: end of method: void com.dmdirc.commandline.CommandLineParser.doExisting()
    
    /**
     * Handles the --check argument.
     */
    private void doExistingCheck() {
        if (RemoteServer.getServer() == null) {
    //#CommandLineParser.java:277: method: void com.dmdirc.commandline.CommandLineParser.doExistingCheck()
    //#CommandLineParser.java:277: ?never returns: method always exits the program: void doExistingCheck().
    //#input(void doExistingCheck()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteInterface]
    //#input(void doExistingCheck()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[com/dmdirc/commandline/RemoteServer]
    //#input(void doExistingCheck()): com/dmdirc/commandline/RemoteInterface.__Descendant_Table[others]
    //#input(void doExistingCheck()): java.lang.System.out
    //#presumption(void doExistingCheck()): java.lang.System.out != null
    //#unanalyzed(void doExistingCheck()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doExistingCheck()): Effects-of-calling:java.rmi.registry.LocateRegistry:getRegistry
    //#unanalyzed(void doExistingCheck()): Effects-of-calling:java.rmi.registry.Registry:lookup
            System.out.println("Existing instance not found.");
            System.exit(1);
        } else {
            System.out.println("Existing instance found.");
            System.exit(0);
        }
    }
    //#CommandLineParser.java:284: end of method: void com.dmdirc.commandline.CommandLineParser.doExistingCheck()
    
    /**
     * Sets the config directory to the one specified.
     *
     * @param dir The new config directory
     */
    private void doDirectory(final String dir) {
        if (dir.endsWith(File.separator)) {
    //#CommandLineParser.java:292: method: void com.dmdirc.commandline.CommandLineParser.doDirectory(String)
    //#input(void doDirectory(String)): dir
    //#input(void doDirectory(String)): dir._tainted
    //#input(void doDirectory(String)): java.io.File.separator
    //#input(void doDirectory(String)): java.io.File.separator._tainted
    //#pre[1] (void doDirectory(String)): dir != null
    //#presumption(void doDirectory(String)): init'ed(java.io.File.separator)
    //#test_vector(void doDirectory(String)): java.lang.String:endsWith(...)@292: {0}, {1}
            Main.setConfigDir(dir);
    //#CommandLineParser.java:293: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Main:setConfigDir(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doDirectory(String)
    //#    unanalyzed callee: void com.dmdirc.Main:setConfigDir(String)
        } else {
            Main.setConfigDir(dir + File.separator);
    //#CommandLineParser.java:295: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Main:setConfigDir(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doDirectory(String)
    //#    unanalyzed callee: void com.dmdirc.Main:setConfigDir(String)
        }
    }
    //#CommandLineParser.java:297: end of method: void com.dmdirc.commandline.CommandLineParser.doDirectory(String)
    
    /**
     * Prints out the client version and exits.
     */
    private void doVersion() {
        System.out.println("DMDirc - a cross-platform, open-source IRC client.");
    //#CommandLineParser.java:303: method: void com.dmdirc.commandline.CommandLineParser.doVersion()
    //#input(void doVersion()): "        Version: "._tainted
    //#input(void doVersion()): " Update channel: "._tainted
    //#input(void doVersion()): ""._tainted
    //#input(void doVersion()): "."._tainted
    //#input(void doVersion()): "<Unknown>"._tainted
    //#input(void doVersion()): "@"._tainted
    //#input(void doVersion()): "Config option not found: "._tainted
    //#input(void doVersion()): "channel"._tainted
    //#input(void doVersion()): "updater"._tainted
    //#input(void doVersion()): "version"._tainted
    //#input(void doVersion()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void doVersion()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void doVersion()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void doVersion()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void doVersion()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void doVersion()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void doVersion()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void doVersion()): com/dmdirc/config/ConfigManager.stats
    //#input(void doVersion()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void doVersion()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void doVersion()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void doVersion()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void doVersion()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void doVersion()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void doVersion()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void doVersion()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void doVersion()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void doVersion()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.identities
    //#input(void doVersion()): com/dmdirc/config/IdentityManager.managers
    //#input(void doVersion()): java.lang.System.out
    //#input(void doVersion()): this
    //#output(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void doVersion()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void doVersion()): new ArrayList(getSources#1) num objects
    //#output(void doVersion()): new ArrayList(getSources#1).__Lock
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).network
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).server
    //#output(void doVersion()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void doVersion()): new MapList(ConfigManager#1) num objects
    //#new obj(void doVersion()): java.lang.StringBuilder:toString(...)
    //#new obj(void doVersion()): new ArrayList(getSources#1)
    //#new obj(void doVersion()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void doVersion()): new MapList(ConfigManager#1)
    //#pre[4] (void doVersion()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void doVersion()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void doVersion()): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void doVersion()): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void doVersion()): getGlobalConfig(...).sources != null
    //#presumption(void doVersion()): getGlobalConfig(...).sources != null
    //#presumption(void doVersion()): java.lang.System.out != null
    //#post(void doVersion()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void doVersion()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void doVersion()): new ArrayList(getSources#1) num objects == 0
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void doVersion()): new MapList(ConfigManager#1) num objects == 0
    //#post(void doVersion()): new ArrayList(getSources#1) num objects <= 1
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void doVersion()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void doVersion()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void doVersion()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void doVersion()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void doVersion()): Effects-of-calling:hasOption
    //#unanalyzed(void doVersion()): Effects-of-calling:getOption
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void doVersion()): Effects-of-calling:getSources
    //#unanalyzed(void doVersion()): Effects-of-calling:addListener
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void doVersion()): Effects-of-calling:addConfigManager
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void doVersion()): Effects-of-calling:getTarget
    //#unanalyzed(void doVersion()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void doVersion()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void doVersion()): Effects-of-calling:java.util.Collections:sort
        System.out.println();
        System.out.println("        Version: "
                + IdentityManager.getGlobalConfig().getOption("version", "version"));
        System.out.println(" Update channel: "
                + IdentityManager.getGlobalConfig().getOption("updater", "channel"));
        exit();
    }
    //#CommandLineParser.java:310: end of method: void com.dmdirc.commandline.CommandLineParser.doVersion()
    
    /**
     * Prints out client help and exits.
     */
    private void doHelp() {
        System.out.println("Usage: java -jar DMDirc.jar [options]");
    //#CommandLineParser.java:316: method: void com.dmdirc.commandline.CommandLineParser.doHelp()
    //#input(void doHelp()): "   -"._tainted
    //#input(void doHelp()): " "._tainted
    //#input(void doHelp()): " --"._tainted
    //#input(void doHelp()): " <argument>"._tainted
    //#input(void doHelp()): ""._tainted
    //#input(void doHelp()): ARGUMENTS
    //#input(void doHelp()): java.lang.System.out
    //#input(void doHelp()): ARGUMENTS.length
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295]
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295].length
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][0]
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][0]._tainted
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][1]
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][1]._tainted
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][2]
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][2]._tainted
    //#input(void doHelp()): ARGUMENTS[0..4_294_967_295][3]
    //#input(void doHelp()): this
    //#pre[1] (void doHelp()): (soft) ARGUMENTS[0..4_294_967_295] != null
    //#pre[2] (void doHelp()): (soft) ARGUMENTS[0..4_294_967_295].length >= 4
    //#pre[3] (void doHelp()): (soft) init'ed(ARGUMENTS[0..4_294_967_295][0])
    //#pre[5] (void doHelp()): (soft) init'ed(ARGUMENTS[0..4_294_967_295][1])
    //#pre[7] (void doHelp()): (soft) init'ed(ARGUMENTS[0..4_294_967_295][2])
    //#pre[9] (void doHelp()): (soft) ARGUMENTS[0..4_294_967_295][3] != null
    //#presumption(void doHelp()): java.lang.System.out != null
        System.out.println();
        System.out.println("Valid options:");
        System.out.println();
        
        int maxLength = 0;
        
        for (Object[] arg : ARGUMENTS) {
            final String needsArg = ((Boolean) arg[3]) ? " <argument>" : "";
            
            if ((arg[1] + needsArg).length() > maxLength) {
                maxLength = (arg[1] + needsArg).length();
            }
        }
        
        for (Object[] arg : ARGUMENTS) {
            final String needsArg = ((Boolean) arg[3]) ? " <argument>" : "";
            final StringBuilder desc = new StringBuilder(maxLength + 1);
    //#CommandLineParser.java:333: ?overflow
    //#    maxLength in {-2_147_483_649..4_294_967_294}
    //#    severity: LOW
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void doHelp()
    //#    basic block: bb_14
    //#    assertion: maxLength in {-2_147_483_649..4_294_967_294}
    //#    VN: maxLength + 1
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296}
    //#    Attribs:  Int  Bad singleton  Bad > Exp
            
            desc.append(arg[1]);
            
            while (desc.length() < maxLength + 1) {
                desc.append(' ');
            }
            
            System.out.print("   -" + arg[0] + needsArg);
            System.out.println(" --" + desc + needsArg + " " + arg[2]);
            System.out.println();
        }
        
        exit();
    }
    //#CommandLineParser.java:347: end of method: void com.dmdirc.commandline.CommandLineParser.doHelp()
    
    /**
     * Applies any applicable settings to the config identity.
     */
    public void applySettings() {
        if (disablereporting) {
    //#CommandLineParser.java:353: method: void com.dmdirc.commandline.CommandLineParser.applySettings()
    //#input(void applySettings()): " to "._tainted
    //#input(void applySettings()): ""._tainted
    //#input(void applySettings()): "."._tainted
    //#input(void applySettings()): ": setting "._tainted
    //#input(void applySettings()): "<Unknown>"._tainted
    //#input(void applySettings()): "@"._tainted
    //#input(void applySettings()): "Config option not found: "._tainted
    //#input(void applySettings()): "Unnamed"._tainted
    //#input(void applySettings()): "noerrorreporting"._tainted
    //#input(void applySettings()): "temp"._tainted
    //#input(void applySettings()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void applySettings()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void applySettings()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getScope(Ljava/lang/String;Ljava/lang/String;)Lcom/dmdirc/config/Identity;
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.__Dispatch_Table.removeIdentity(Lcom/dmdirc/config/Identity;)V
    //#input(void applySettings()): com/dmdirc/config/ConfigManager.stats
    //#input(void applySettings()): com/dmdirc/config/ConfigTarget$TYPE.GLOBAL
    //#input(void applySettings()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void applySettings()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void applySettings()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void applySettings()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void applySettings()): com/dmdirc/config/Identity.DOMAIN
    //#input(void applySettings()): com/dmdirc/config/Identity.LOGGER
    //#input(void applySettings()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void applySettings()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.getDomains()Ljava/util/Set;
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.getOptions(Ljava/lang/String;)Ljava/util/Map;
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.removeListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.setOption(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.setOption(Ljava/lang/String;Ljava/lang/String;Z)V
    //#input(void applySettings()): com/dmdirc/config/Identity.__Dispatch_Table.unsetOption(Ljava/lang/String;Ljava/lang/String;)V
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.__Tag
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.file
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig.__Tag
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig.listeners
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig.sources
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.listeners
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.myTarget
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.myTarget.__Tag
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.config.myTarget.type
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.identities
    //#input(void applySettings()): com/dmdirc/config/IdentityManager.managers
    //#input(void applySettings()): this
    //#input(void applySettings()): this.disablereporting
    //#input(void applySettings()): this.launcherVersion
    //#output(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#output(void applySettings()): com/dmdirc/config/IdentityManager.config.needSave
    //#output(void applySettings()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void applySettings()): new ArrayList(getSources#1) num objects
    //#output(void applySettings()): new ArrayList(getSources#1).__Lock
    //#output(void applySettings()): new ConfigManager(setOption#2*) num objects
    //#output(void applySettings()): new ConfigManager(setOption#2*).__Tag
    //#output(void applySettings()): new ConfigManager(setOption#2*).channel
    //#output(void applySettings()): new ConfigManager(setOption#2*).ircd
    //#output(void applySettings()): new ConfigManager(setOption#2*).listeners
    //#output(void applySettings()): new ConfigManager(setOption#2*).network
    //#output(void applySettings()): new ConfigManager(setOption#2*).server
    //#output(void applySettings()): new ConfigManager(setOption#2*).sources
    //#output(void applySettings()): new MapList(ConfigManager#1) num objects
    //#new obj(void applySettings()): java.lang.StringBuilder:toString(...)
    //#new obj(void applySettings()): new ArrayList(getSources#1)
    //#new obj(void applySettings()): new ConfigManager(setOption#2*)
    //#new obj(void applySettings()): new MapList(ConfigManager#1)
    //#pre[19] (void applySettings()): init'ed(this.disablereporting)
    //#pre[20] (void applySettings()): this.launcherVersion != null
    //#pre[1] (void applySettings()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[4] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config != null
    //#pre[6] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config.__Tag == com/dmdirc/config/Identity
    //#pre[7] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config.file != null
    //#pre[12] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config.listeners != null
    //#pre[13] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config.myTarget != null
    //#pre[14] (void applySettings()): (soft) com/dmdirc/config/IdentityManager.config.myTarget.__Tag == com/dmdirc/config/ConfigTarget
    //#pre[15] (void applySettings()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.myTarget.type)
    //#pre[16] (void applySettings()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#post(void applySettings()): com/dmdirc/config/IdentityManager.config.globalConfig == One-of{old com/dmdirc/config/IdentityManager.config.globalConfig, &new ConfigManager(setOption#2*)}
    //#post(void applySettings()): init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#post(void applySettings()): possibly_updated(com/dmdirc/config/IdentityManager.config.needSave)
    //#post(void applySettings()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void applySettings()): new ArrayList(getSources#1) num objects <= 1
    //#post(void applySettings()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void applySettings()): new ConfigManager(setOption#2*) num objects <= 1
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).__Tag)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).channel)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).ircd)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).listeners)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).network)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).server)
    //#post(void applySettings()): init'ed(new ConfigManager(setOption#2*).sources)
    //#post(void applySettings()): new MapList(ConfigManager#1) num objects <= 1
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.interfaces.ConfigChangeListener:configChanged
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomains
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void applySettings()): Effects-of-calling:hasOption
    //#unanalyzed(void applySettings()): Effects-of-calling:getOption
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.logging.Logger:finer
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void applySettings()): Effects-of-calling:getSources
    //#unanalyzed(void applySettings()): Effects-of-calling:addListener
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void applySettings()): Effects-of-calling:addConfigManager
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void applySettings()): Effects-of-calling:getDomains
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void applySettings()): Effects-of-calling:getOptions
    //#unanalyzed(void applySettings()): Effects-of-calling:equals
    //#unanalyzed(void applySettings()): Effects-of-calling:removeListener
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void applySettings()): Effects-of-calling:setOption
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void applySettings()): Effects-of-calling:getTarget
    //#unanalyzed(void applySettings()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void applySettings()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void applySettings()): Effects-of-calling:java.util.Collections:sort
    //#test_vector(void applySettings()): this.disablereporting: {0}, {1}
    //#test_vector(void applySettings()): java.lang.String:isEmpty(...)@357: {1}, {0}
            IdentityManager.getConfigIdentity().setOption("temp", "noerrorreporting", true);
        }
        
        if (!launcherVersion.isEmpty()) {
            LauncherComponent.setLauncherInfo(launcherVersion);
    //#CommandLineParser.java:358: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.updater.components.LauncherComponent:setLauncherInfo(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void applySettings()
    //#    unanalyzed callee: void com.dmdirc.updater.components.LauncherComponent:setLauncherInfo(String)
        }
    }
    //#CommandLineParser.java:360: end of method: void com.dmdirc.commandline.CommandLineParser.applySettings()
    
    /**
     * Processes arguments once the client has been loaded properly.
     * This allows us to auto-connect to servers, etc.
     */
    public void processArguments() {
        for (IrcAddress address : addresses)  {
    //#CommandLineParser.java:367: method: void com.dmdirc.commandline.CommandLineParser.processArguments()
    //#input(void processArguments()): this
    //#input(void processArguments()): this.addresses
    //#pre[2] (void processArguments()): this.addresses != null
    //#presumption(void processArguments()): java.util.Iterator:next(...)@367 != null
    //#test_vector(void processArguments()): java.util.Iterator:hasNext(...)@367: {0}, {1}
            address.connect();
    //#CommandLineParser.java:368: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.IrcAddress:connect()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.commandline.CommandLineParser
    //#    method: void processArguments()
    //#    unanalyzed callee: void com.dmdirc.util.IrcAddress:connect()
        }
    }
    //#CommandLineParser.java:370: end of method: void com.dmdirc.commandline.CommandLineParser.processArguments()
    
}
    //#CommandLineParser.java:: end of class: com.dmdirc.commandline.CommandLineParser
