//# 5 errors, 961 messages
//#
/*
    //#DCCCommand.java:1:1: class: com.dmdirc.addons.dcc.DCCCommand$2
    //#DCCCommand.java:1:1: method: com.dmdirc.addons.dcc.DCCCommand$2.com.dmdirc.addons.dcc.DCCCommand$2__static_init
    //#DCCCommand.java:1:1: class: com.dmdirc.addons.dcc.DCCCommand$1
    //#DCCCommand.java:1:1: method: com.dmdirc.addons.dcc.DCCCommand$1.com.dmdirc.addons.dcc.DCCCommand$1__static_init
    //#DCCCommand.java:1:1: class: com.dmdirc.addons.dcc.DCCCommand
    //#DCCCommand.java:1:1: method: com.dmdirc.addons.dcc.DCCCommand.com.dmdirc.addons.dcc.DCCCommand__static_init
 * 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.addons.dcc;

import com.dmdirc.Main;
import com.dmdirc.Server;
import com.dmdirc.actions.ActionManager;
import com.dmdirc.addons.dcc.actions.DCCActions;
import com.dmdirc.addons.dcc.kde.KFileChooser;
import com.dmdirc.commandparser.CommandArguments;
import com.dmdirc.commandparser.CommandManager;
import com.dmdirc.commandparser.commands.IntelligentCommand;
import com.dmdirc.commandparser.commands.ServerCommand;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.parser.irc.IRCParser;
import com.dmdirc.ui.input.AdditionalTabTargets;
import com.dmdirc.ui.input.TabCompletionType;
import com.dmdirc.ui.interfaces.InputWindow;

import java.io.File;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * This command allows starting dcc chats/file transfers
 *
 * @author Shane "Dataforce" Mc Cormack
 */
public final class DCCCommand extends ServerCommand implements IntelligentCommand {
    //#DCCCommand.java:52: method: DCCPlugin com.dmdirc.addons.dcc.DCCCommand.access$000(DCCCommand)
    //#input(DCCPlugin access$000(DCCCommand)): x0
    //#input(DCCPlugin access$000(DCCCommand)): x0.myPlugin
    //#output(DCCPlugin access$000(DCCCommand)): return_value
    //#pre[1] (DCCPlugin access$000(DCCCommand)): x0 != null
    //#post(DCCPlugin access$000(DCCCommand)): return_value == x0.myPlugin
    //#post(DCCPlugin access$000(DCCCommand)): init'ed(return_value)
    //#DCCCommand.java:52: end of method: DCCPlugin com.dmdirc.addons.dcc.DCCCommand.access$000(DCCCommand)
    //#DCCCommand.java:52: method: void com.dmdirc.addons.dcc.DCCCommand.access$100(DCCCommand, InputWindow, bool, String, Object[])
    //#DCCCommand.java:52: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void access$100(DCCCommand, InputWindow, bool, String, Object[])
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#input(void access$100(DCCCommand, InputWindow, bool, String, Object[])): x0
    //#input(void access$100(DCCCommand, InputWindow, bool, String, Object[])): x1
    //#input(void access$100(DCCCommand, InputWindow, bool, String, Object[])): x2
    //#input(void access$100(DCCCommand, InputWindow, bool, String, Object[])): x3
    //#input(void access$100(DCCCommand, InputWindow, bool, String, Object[])): x4
    //#pre[1] (void access$100(DCCCommand, InputWindow, bool, String, Object[])): x0 != null
    //#DCCCommand.java:52: end of method: void com.dmdirc.addons.dcc.DCCCommand.access$100(DCCCommand, InputWindow, bool, String, Object[])
    //#DCCCommand.java:52: method: void com.dmdirc.addons.dcc.DCCCommand.access$200(DCCCommand, InputWindow, bool, String, Object[])
    //#DCCCommand.java:52: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void access$200(DCCCommand, InputWindow, bool, String, Object[])
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#input(void access$200(DCCCommand, InputWindow, bool, String, Object[])): x0
    //#input(void access$200(DCCCommand, InputWindow, bool, String, Object[])): x1
    //#input(void access$200(DCCCommand, InputWindow, bool, String, Object[])): x2
    //#input(void access$200(DCCCommand, InputWindow, bool, String, Object[])): x3
    //#input(void access$200(DCCCommand, InputWindow, bool, String, Object[])): x4
    //#pre[1] (void access$200(DCCCommand, InputWindow, bool, String, Object[])): x0 != null
    //#DCCCommand.java:52: end of method: void com.dmdirc.addons.dcc.DCCCommand.access$200(DCCCommand, InputWindow, bool, String, Object[])

	/** My Plugin */
	private final DCCPlugin myPlugin;

	/**
	 * Creates a new instance of DCCCommand.
	 *
	 * @param plugin The DCC Plugin that this command belongs to
	 */
	public DCCCommand(final DCCPlugin plugin) {
		super();
    //#DCCCommand.java:63: method: void com.dmdirc.addons.dcc.DCCCommand.com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)
    //#DCCCommand.java:63: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.commands.ServerCommand()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)
    //#    unanalyzed callee: void com.dmdirc.commandparser.commands.ServerCommand()
    //#input(void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)): plugin
    //#input(void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)): this
    //#output(void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)): this.myPlugin
    //#post(void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)): this.myPlugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)): init'ed(this.myPlugin)
		myPlugin = plugin;
		CommandManager.registerCommand(this);
    //#DCCCommand.java:65: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.CommandManager:registerCommand(Command)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)
    //#    unanalyzed callee: void com.dmdirc.commandparser.CommandManager:registerCommand(Command)
	}
    //#DCCCommand.java:66: end of method: void com.dmdirc.addons.dcc.DCCCommand.com.dmdirc.addons.dcc.DCCCommand(DCCPlugin)
		
	/** {@inheritDoc} */
	@Override
	public void execute(final InputWindow origin, final Server server,
            final boolean isSilent, final CommandArguments args) {
		if (args.getArguments().length > 1) {
    //#DCCCommand.java:72: method: void com.dmdirc.addons.dcc.DCCCommand.execute(InputWindow, Server, bool, CommandArguments)
    //#DCCCommand.java:72: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): " "._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): " - unable to create listen socket"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "'"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "*Chat: "._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "."._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "127.0.0.1"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): ":"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "CHAT chat "._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "No available sockets in range "._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "Unable to start chat with "._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): "Unknown DCC Type: '"._tainted
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): args
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#2).__Tag
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#2).type
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#4).__Tag
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Main.controller
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/Server.__Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/ActionManager.listeners
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.getHost()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.getPort()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCChatInterface;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/actions/DCCActions.DCC_CHAT_REQUEST_SENT
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): isSilent
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): origin
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): server
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): server.__Tag
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): server.parser
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): this
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): this.myPlugin
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): this.myPlugin.childFrames
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): this.myPlugin.container
    //#input(void execute(InputWindow, Server, bool, CommandArguments)): this.myPlugin.container.__Tag
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/ServerManager.me
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ArrayList(ServerManager#1) num objects
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1) num objects
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).changer
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).config
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).icon
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).listeners
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).notification
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).plugin
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).this$0
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).title
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ListenerList(FrameContainer#1) num objects
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ListenerList(FrameContainer#1).__Lock
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ServerManager(getServerManager#1) num objects
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ServerManager(getServerManager#1).__Tag
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): new ServerManager(getServerManager#1).servers
    //#output(void execute(InputWindow, Server, bool, CommandArguments)): this.myPlugin.container
    //#new obj(void execute(InputWindow, Server, bool, CommandArguments)): new ArrayList(ServerManager#1)
    //#new obj(void execute(InputWindow, Server, bool, CommandArguments)): new DCCPlugin$3(createContainer#1)
    //#new obj(void execute(InputWindow, Server, bool, CommandArguments)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void execute(InputWindow, Server, bool, CommandArguments)): new ListenerList(FrameContainer#1)
    //#new obj(void execute(InputWindow, Server, bool, CommandArguments)): new ServerManager(getServerManager#1)
    //#pre[1] (void execute(InputWindow, Server, bool, CommandArguments)): args != null
    //#pre[3] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#2).type != null
    //#pre[4] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) com/dmdirc/Main.controller != null
    //#pre[6] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[9] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) init'ed(this.myPlugin.container)
    //#pre[11] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) server != null
    //#pre[12] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) server.__Tag == com/dmdirc/Server
    //#pre[13] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) server.parser != null
    //#pre[15] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) this.myPlugin != null
    //#pre[17] (void execute(InputWindow, Server, bool, CommandArguments)): (soft) this.myPlugin.childFrames != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): chat.serverSocket != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@73 >= 1
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@74 >= 2
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@72 != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@73 != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@74 != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)[0]@73 != null
    //#presumption(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.parser.irc.IRCParser:getIRCStringConverter(...)@78 != null
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(this.myPlugin.container)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ArrayList(ServerManager#1) num objects)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1) num objects)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).__Tag)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).changer)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).config)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).icon)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).listeners)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).myWindow)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).notification)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).plugin)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).this$0)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).title)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new DCCPlugin$3(createContainer#1).windowClosing)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new FrameContainer$IconChanger(FrameContainer#2) num objects)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new FrameContainer$IconChanger(FrameContainer#2).__Tag)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new FrameContainer$IconChanger(FrameContainer#2).this$0)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ListenerList(FrameContainer#1) num objects)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ListenerList(FrameContainer#1).__Lock)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ServerManager(getServerManager#1) num objects)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ServerManager(getServerManager#1).__Tag)
    //#post(void execute(InputWindow, Server, bool, CommandArguments)): possibly_updated(new ServerManager(getServerManager#1).servers)
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.File
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getFrame
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.dcc.DCC
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:listen
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getUI
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.InetAddress:getByName
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.InetAddress:getHostAddress
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.InetAddress:getLocalHost
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getType
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:trigger
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getArity
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:triggerActions
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.concurrent.Semaphore
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:connect
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.IOException
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:socketClosed
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:socketOpened
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.net.Socket
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:setIcon
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:readTerm
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:parseStack
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getServer
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getState
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:get
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:getArgTypes
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:test
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:evaluate
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:addLine
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.io.DataOutputStream
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void execute(InputWindow, Server, bool, CommandArguments)): Effects-of-calling:isWindowClosing
    //#test_vector(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@72: {0,1}, {2..+Inf}
    //#test_vector(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.parser.irc.IRCParser:isValidChannelName(...)@78: {1}, {0}
    //#test_vector(void execute(InputWindow, Server, bool, CommandArguments)): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@78: {0}, {1}
    //#test_vector(void execute(InputWindow, Server, bool, CommandArguments)): java.lang.String:equalsIgnoreCase(...)@107: {0}, {1}
    //#test_vector(void execute(InputWindow, Server, bool, CommandArguments)): java.lang.String:equalsIgnoreCase(...)@93: {0}, {1}
			final String type = args.getArguments()[0];
    //#DCCCommand.java:73: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
			final String target = args.getArguments()[1];
    //#DCCCommand.java:74: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
			final IRCParser parser = server.getParser();
			final String myNickname = parser.getMyNickname();
    //#DCCCommand.java:76: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getMyNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getMyNickname()
				
			if (parser.isValidChannelName(target) || parser.getIRCStringConverter().equalsIgnoreCase(target, myNickname)) {
    //#DCCCommand.java:78: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCParser:isValidChannelName(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCParser:isValidChannelName(String)
    //#DCCCommand.java:78: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#DCCCommand.java:78: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
				final Thread errorThread = new Thread(new Runnable() {
    //#DCCCommand.java:79: method: void com.dmdirc.addons.dcc.DCCCommand$1.com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)
    //#input(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): Param_2
    //#input(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): Param_3
    //#input(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): Param_4
    //#input(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this
    //#output(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$myNickname
    //#output(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$parser
    //#output(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$target
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$myNickname == Param_4
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): init'ed(this.val$myNickname)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$parser == Param_2
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): init'ed(this.val$parser)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): this.val$target == Param_3
    //#post(void com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)): init'ed(this.val$target)
    //#DCCCommand.java:79: end of method: void com.dmdirc.addons.dcc.DCCCommand$1.com.dmdirc.addons.dcc.DCCCommand$1(DCCCommand, IRCParser, String, String)
					/** {@inheritDoc} */
					@Override
					public void run() {
						if (parser.getIRCStringConverter().equalsIgnoreCase(target, myNickname)) {
    //#DCCCommand.java:83: method: void com.dmdirc.addons.dcc.DCCCommand$1.run()
    //#DCCCommand.java:83: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$1
    //#    method: void run()
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#DCCCommand.java:83: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$1
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(String, String)
    //#input(void run()): this
    //#input(void run()): this.val$myNickname
    //#input(void run()): this.val$parser
    //#input(void run()): this.val$target
    //#pre[3] (void run()): this.val$parser != null
    //#presumption(void run()): com.dmdirc.parser.irc.IRCParser:getIRCStringConverter(...)@83 != null
    //#test_vector(void run()): com.dmdirc.parser.irc.IRCStringConverter:equalsIgnoreCase(...)@83: {0}, {1}
							JOptionPane.showMessageDialog(null, "You can't DCC yourself.", "DCC Error", JOptionPane.ERROR_MESSAGE);
						} else {
							JOptionPane.showMessageDialog(null, "You can't DCC a channel.", "DCC Error", JOptionPane.ERROR_MESSAGE);
						}
					}
    //#DCCCommand.java:88: end of method: void com.dmdirc.addons.dcc.DCCCommand$1.run()
				});
				errorThread.start();
				return;
			}
			if (type.equalsIgnoreCase("chat")) {
				final DCCChat chat = new DCCChat();
				if (myPlugin.listen(chat)) {
					final DCCChatWindow window = new DCCChatWindow(myPlugin, chat, "*Chat: "+target, myNickname, target);
					
					parser.sendCTCP(target, "DCC", "CHAT chat "+DCC.ipToLong(myPlugin.getListenIP(parser))+" "+chat.getPort());
    //#DCCCommand.java:98: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    basic block: bb_7
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCCommand.java:98: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
					
					ActionManager.processEvent(DCCActions.DCC_CHAT_REQUEST_SENT, null, server, target);
    //#DCCCommand.java:100: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    basic block: bb_7
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
					
					sendLine(origin, isSilent, "DCCChatStarting", target, chat.getHost(), chat.getPort());
    //#DCCCommand.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
					window.getFrame().addLine("DCCChatStarting", target, chat.getHost(), chat.getPort());
    //#DCCCommand.java:103: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:addLine(String, Object[])
				} else {
					sendLine(origin, isSilent, "DCCChatError", "Unable to start chat with "+target+" - unable to create listen socket");
    //#DCCCommand.java:105: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
				}
			} else if (type.equalsIgnoreCase("send")) {
				sendFile(target, origin, server, isSilent, args.getArgumentsAsString(2));
    //#DCCCommand.java:108: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.commandparser.CommandArguments:getArgumentsAsString(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: String com.dmdirc.commandparser.CommandArguments:getArgumentsAsString(int)
			} else {
				sendLine(origin, isSilent, FORMAT_ERROR, "Unknown DCC Type: '"+type+"'");
    //#DCCCommand.java:110: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
			}
		} else {
			sendLine(origin, isSilent, FORMAT_ERROR, "Syntax: dcc <type> <target> [params]");
    //#DCCCommand.java:113: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: void execute(InputWindow, Server, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCCommand:sendLine(InputWindow, bool, String, Object[])
		}
	}
    //#DCCCommand.java:115: end of method: void com.dmdirc.addons.dcc.DCCCommand.execute(InputWindow, Server, bool, CommandArguments)

	/**
	 * Ask for the file to send, then start the send.
	 *
	 * @param target Person this dcc is to.
	 * @param origin The InputWindow this command was issued on
	 * @param server The server instance that this command is being executed on
	 * @param isSilent Whether this command is silenced or not
	 * @param filename The file to send
     * @since 0.6.3m1
	 */
	public void sendFile(final String target, final InputWindow origin, final Server server, final boolean isSilent, final String filename) {
		// New thread to ask the user what file to send
		final File givenFile = new File(filename);
    //#DCCCommand.java:129: method: void com.dmdirc.addons.dcc.DCCCommand.sendFile(String, InputWindow, Server, bool, String)
    //#input(void sendFile(String, InputWindow, Server, bool, String)): filename
    //#input(void sendFile(String, InputWindow, Server, bool, String)): isSilent
    //#input(void sendFile(String, InputWindow, Server, bool, String)): origin
    //#input(void sendFile(String, InputWindow, Server, bool, String)): server
    //#input(void sendFile(String, InputWindow, Server, bool, String)): target
    //#input(void sendFile(String, InputWindow, Server, bool, String)): this
		final Thread dccThread = new Thread(new Runnable() {
    //#DCCCommand.java:130: method: void com.dmdirc.addons.dcc.DCCCommand$2.com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_2
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_3
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_4
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_5
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): Param_6
    //#input(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$givenFile
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$isSilent
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$origin
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$server
    //#output(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$target
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$givenFile == Param_2
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.val$givenFile)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$isSilent == Param_6
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.val$isSilent)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$origin == Param_5
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.val$origin)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$server == Param_4
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.val$server)
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): this.val$target == Param_3
    //#post(void com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)): init'ed(this.val$target)
    //#DCCCommand.java:130: end of method: void com.dmdirc.addons.dcc.DCCCommand$2.com.dmdirc.addons.dcc.DCCCommand$2(DCCCommand, File, String, Server, InputWindow, bool)
			/** {@inheritDoc} */
			@Override
			public void run() {
				final JFileChooser jc = (givenFile.exists()) ? KFileChooser.getFileChooser(myPlugin, givenFile) : KFileChooser.getFileChooser(myPlugin);
    //#DCCCommand.java:134: method: void com.dmdirc.addons.dcc.DCCCommand$2.run()
    //#input(void run()): " "._tainted
    //#input(void run()): " - DMDirc "._tainted
    //#input(void run()): " - unable to create listen socket"._tainted
    //#input(void run()): " 0 "._tainted
    //#input(void run()): " T"._tainted
    //#input(void run()): "" "._tainted
    //#input(void run()): ""._tainted
    //#input(void run()): "&#10;&#10;Closing this window will close all the active DCCs"._tainted
    //#input(void run()): "*Send: "._tainted
    //#input(void run()): "."._tainted
    //#input(void run()): "127.0.0.1"._tainted
    //#input(void run()): ":"._tainted
    //#input(void run()): "From: "._tainted
    //#input(void run()): "No available sockets in range "._tainted
    //#input(void run()): "Recieving: "._tainted
    //#input(void run()): "SEND ""._tainted
    //#input(void run()): "Send file to "._tainted
    //#input(void run()): "Send: "._tainted
    //#input(void run()): "Sending: "._tainted
    //#input(void run()): "Starting DCC Send with: "._tainted
    //#input(void run()): "To: "._tainted
    //#input(void run()): "Unable to start dcc send with "._tainted
    //#input(void run()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#11).__Tag
    //#input(void run()): com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#11).type
    //#input(void run()): com.dmdirc.addons.dcc.actions.DCCEvents__static_init.new DCCEvents(DCCEvents__static_init#31).__Tag
    //#input(void run()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void run()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Main.controller
    //#input(void run()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void run()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/Server.__Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void run()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/actions/ActionManager.killSwitch
    //#input(void run()): com/dmdirc/actions/ActionManager.listeners
    //#input(void run()): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void run()): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[com/dmdirc/addons/dcc/DCC]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCC.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[com/dmdirc/addons/dcc/DCCChat]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChat.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatInterface]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCChat;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend$TransferType.RECEIVE
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend$TransferType.SEND
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.SENDS
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[com/dmdirc/addons/dcc/DCCSend]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.connect()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getFileSize()J
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getPort()I
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getShortFileName()Ljava/lang/String;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getToken()Ljava/lang/String;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.getType()Lcom/dmdirc/addons/dcc/DCCSend$TransferType;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.isTurbo()Z
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.listen(II)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.makeToken()Ljava/lang/String;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileName(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setFileSize(J)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setHandler(Lcom/dmdirc/addons/dcc/DCCSendInterface;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setToken(Ljava/lang/String;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setTurbo(Z)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.setType(Lcom/dmdirc/addons/dcc/DCCSend$TransferType;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketClosed()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSend.__Dispatch_Table.socketOpened()V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendInterface]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendInterface.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Descendant_Table[others]
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketClosed(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.socketOpened(Lcom/dmdirc/addons/dcc/DCCSend;)V
    //#input(void run()): com/dmdirc/addons/dcc/actions/DCCActions.DCC_SEND_REQUEST_SENT
    //#input(void run()): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void run()): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArity()I
    //#input(void run()): com/dmdirc/addons/dcc/kde/KDialogProcess.hasKDialog
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.myPlugin
    //#input(void run()): this.this$0.myPlugin.childFrames
    //#input(void run()): this.this$0.myPlugin.container
    //#input(void run()): this.this$0.myPlugin.container.__Tag
    //#input(void run()): this.this$0.myPlugin.container.myWindow
    //#input(void run()): this.val$givenFile
    //#input(void run()): this.val$isSilent
    //#input(void run()): this.val$origin
    //#input(void run()): this.val$server
    //#input(void run()): this.val$server.__Tag
    //#input(void run()): this.val$server.parser
    //#input(void run()): this.val$target
    //#input(void run()): this.val$target._tainted
    //#output(void run()): com/dmdirc/ServerManager.me
    //#output(void run()): new ArrayList(ServerManager#1) num objects
    //#output(void run()): new DCCPlugin$3(createContainer#1) num objects
    //#output(void run()): new DCCPlugin$3(createContainer#1).__Tag
    //#output(void run()): new DCCPlugin$3(createContainer#1).changer
    //#output(void run()): new DCCPlugin$3(createContainer#1).config
    //#output(void run()): new DCCPlugin$3(createContainer#1).icon
    //#output(void run()): new DCCPlugin$3(createContainer#1).listeners
    //#output(void run()): new DCCPlugin$3(createContainer#1).myWindow
    //#output(void run()): new DCCPlugin$3(createContainer#1).notification
    //#output(void run()): new DCCPlugin$3(createContainer#1).plugin
    //#output(void run()): new DCCPlugin$3(createContainer#1).this$0
    //#output(void run()): new DCCPlugin$3(createContainer#1).title
    //#output(void run()): new DCCPlugin$3(createContainer#1).windowClosing
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void run()): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void run()): new ListenerList(FrameContainer#1) num objects
    //#output(void run()): new ListenerList(FrameContainer#1).__Lock
    //#output(void run()): new ServerManager(getServerManager#1) num objects
    //#output(void run()): new ServerManager(getServerManager#1).__Tag
    //#output(void run()): new ServerManager(getServerManager#1).servers
    //#output(void run()): this.this$0.myPlugin.container
    //#new obj(void run()): new ArrayList(ServerManager#1)
    //#new obj(void run()): new DCCPlugin$3(createContainer#1)
    //#new obj(void run()): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void run()): new ListenerList(FrameContainer#1)
    //#new obj(void run()): new ServerManager(getServerManager#1)
    //#pre[9] (void run()): this.this$0 != null
    //#pre[13] (void run()): this.val$givenFile != null
    //#pre[2] (void run()): (soft) com.dmdirc.addons.dcc.actions.DCCActions__static_init.new DCCActions(DCCActions__static_init#11).type != null
    //#pre[3] (void run()): (soft) com/dmdirc/Main.controller != null
    //#pre[5] (void run()): (soft) init'ed(com/dmdirc/actions/ActionManager.killSwitch)
    //#pre[7] (void run()): (soft) init'ed(this.myPlugin.container)
    //#pre[10] (void run()): (soft) this.myPlugin != null
    //#pre[12] (void run()): (soft) this.myPlugin.childFrames != null
    //#pre[16] (void run()): (soft) this.val$server != null
    //#pre[17] (void run()): (soft) this.val$server.__Tag == com/dmdirc/Server
    //#pre[18] (void run()): (soft) this.val$server.parser != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@154 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@155 != null
    //#presumption(void run()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@165 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@146 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@149 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@162 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@163 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@167 != null
    //#presumption(void run()): javax.swing.JFileChooser:getSelectedFile(...)@171 != null
    //#presumption(void run()): send.serverSocket@162 != null
    //#post(void run()): com/dmdirc/ServerManager.me == old com/dmdirc/ServerManager.me
    //#post(void run()): init'ed(this.myPlugin.container)
    //#post(void run()): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void run()): new DCCPlugin$3(createContainer#1) num objects <= 1
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).__Tag)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).changer)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).config)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).icon)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).listeners)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).myWindow)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).notification)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).plugin)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).this$0)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).title)
    //#post(void run()): init'ed(new DCCPlugin$3(createContainer#1).windowClosing)
    //#post(void run()): new FrameContainer$IconChanger(FrameContainer#2) num objects <= 1
    //#post(void run()): init'ed(new FrameContainer$IconChanger(FrameContainer#2).__Tag)
    //#post(void run()): init'ed(new FrameContainer$IconChanger(FrameContainer#2).this$0)
    //#post(void run()): new ListenerList(FrameContainer#1) num objects <= 1
    //#post(void run()): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#post(void run()): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void run()): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void run()): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void run()): Effects-of-calling:getUI
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin:getDomain
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JFileChooser
    //#unanalyzed(void run()): Effects-of-calling:java.util.concurrent.Semaphore
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void run()): Effects-of-calling:getType
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void run()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void run()): Effects-of-calling:trigger
    //#unanalyzed(void run()): Effects-of-calling:getArity
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.ActionListener:processEvent
    //#unanalyzed(void run()): Effects-of-calling:triggerActions
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCCommand:sendLine
    //#unanalyzed(void run()): Effects-of-calling:java.io.File
    //#unanalyzed(void run()): Effects-of-calling:java.io.File:getAbsolutePath
    //#unanalyzed(void run()): Effects-of-calling:java.io.FileInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setValue
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addNonCriticalCallback
    //#unanalyzed(void run()): Effects-of-calling:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:setLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setMinimum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setMaximum
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JProgressBar:setStringPainted
    //#unanalyzed(void run()): Effects-of-calling:java.io.File:getName
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCPlugin$3
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:getText
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setText
    //#unanalyzed(void run()): Effects-of-calling:getFrame
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getHost
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getByName
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getHostAddress
    //#unanalyzed(void run()): Effects-of-calling:java.net.InetAddress:getLocalHost
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Long:parseLong
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:hashCode
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Math:abs
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Integer:toString
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void run()): Effects-of-calling:listen
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void run()): Effects-of-calling:readTerm
    //#unanalyzed(void run()): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void run()): Effects-of-calling:parseStack
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void run()): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void run()): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void run()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void run()): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void run()): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void run()): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void run()): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void run()): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void run()): Effects-of-calling:getServer
    //#unanalyzed(void run()): Effects-of-calling:getState
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void run()): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void run()): Effects-of-calling:get
    //#unanalyzed(void run()): Effects-of-calling:getArgTypes
    //#unanalyzed(void run()): Effects-of-calling:test
    //#unanalyzed(void run()): Effects-of-calling:evaluate
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:instanceof
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.commandparser.parsers.CommandParser:parseCommand
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer:setLength
    //#unanalyzed(void run()): Effects-of-calling:java.lang.StringBuffer:append
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void run()): Effects-of-calling:connect
    //#unanalyzed(void run()): Effects-of-calling:java.util.concurrent.Semaphore:acquireUninterruptibly
    //#unanalyzed(void run()): Effects-of-calling:java.net.ServerSocket
    //#unanalyzed(void run()): Effects-of-calling:java.util.concurrent.Semaphore:release
    //#unanalyzed(void run()): Effects-of-calling:java.io.IOException
    //#unanalyzed(void run()): Effects-of-calling:socketClosed
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket:getOutputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.PrintWriter
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket:getInputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.InputStreamReader
    //#unanalyzed(void run()): Effects-of-calling:java.io.BufferedReader
    //#unanalyzed(void run()): Effects-of-calling:socketOpened
    //#unanalyzed(void run()): Effects-of-calling:java.net.ServerSocket:getLocalPort
    //#unanalyzed(void run()): Effects-of-calling:java.net.Socket
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(void run()): Effects-of-calling:setIcon
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void run()): Effects-of-calling:addLine
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataOutputStream:close
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataInputStream:close
    //#unanalyzed(void run()): Effects-of-calling:java.io.FileOutputStream
    //#unanalyzed(void run()): Effects-of-calling:java.io.DataOutputStream
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Long:valueOf
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:format
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void run()): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Math:floor
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Double:valueOf
    //#unanalyzed(void run()): Effects-of-calling:isWindowClosing
    //#test_vector(void run()): com.dmdirc.config.ConfigManager:getOptionBool(...)@165: {0}, {1}
    //#test_vector(void run()): java.io.File:exists(...)@134: {0}, {1}
    //#test_vector(void run()): java.io.File:exists(...)@136: {0}, {1}
    //#test_vector(void run()): java.io.File:exists(...)@149: {1}, {0}
    //#test_vector(void run()): java.io.File:isFile(...)@136: {1}, {0}
    //#test_vector(void run()): java.io.File:length(...)@146: {-9_223_372_036_854_775_808..-1, 1..18_446_744_073_709_551_615}, {0}
				int result;
				if (!givenFile.exists() || !givenFile.isFile() ) {
					jc.setDialogTitle("Send file to "+target+" - DMDirc ");
					jc.setFileSelectionMode(JFileChooser.FILES_ONLY);
					jc.setMultiSelectionEnabled(false);
					result = jc.showOpenDialog((JFrame)Main.getUI().getMainWindow());
    //#DCCCommand.java:140: Warning: method not available - call not analyzed
    //#    call on MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: MainWindow com.dmdirc.ui.interfaces.UIController:getMainWindow()
				} else {
					jc.setSelectedFile(givenFile);
					result = JFileChooser.APPROVE_OPTION;
				}
				if (result == JFileChooser.APPROVE_OPTION) {
					if (jc.getSelectedFile().length() == 0) {
						JOptionPane.showMessageDialog(null, "You can't send empty files over DCC.", "DCC Error", JOptionPane.ERROR_MESSAGE);
						return;
					} else if (!jc.getSelectedFile().exists()) {
						JOptionPane.showMessageDialog(null, "Invalid file specified", "DCC Error", JOptionPane.ERROR_MESSAGE);
						return;
					}
					final IRCParser parser = server.getParser();
					DCCSend send = new DCCSend(IdentityManager.getGlobalConfig().getOptionInt(myPlugin.getDomain(), "send.blocksize"));
    //#DCCCommand.java:154: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCCommand.java:154: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCCommand.java:154: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: int com.dmdirc.config.ConfigManager:getOptionInt(String, String)
					send.setTurbo(IdentityManager.getGlobalConfig().getOptionBool(myPlugin.getDomain(), "send.forceturbo"));
    //#DCCCommand.java:155: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCCommand.java:155: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCCommand.java:155: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
					send.setType(DCCSend.TransferType.SEND);
					
					ActionManager.processEvent(DCCActions.DCC_SEND_REQUEST_SENT, null, server, target, jc.getSelectedFile());
    //#DCCCommand.java:158: ?!precondition failure
    //#    com/dmdirc/actions/ActionManager.processEvent: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    basic block: bb_13
    //#    assertion: (soft) undefined in {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    callee: void com/dmdirc/actions/ActionManager.processEvent(ActionType, StringBuffer, Object[])
    //#    callee assertion: (soft) type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#    callee file: ActionManager.java
    //#    callee precondition index: [28]
    //#    callee srcpos: 365
    //#    VN: undefined
    //#    Expected: {340_736, 341_760, 342_528, 343_040, 343_552, 344_064, 344_576, 362_496}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
					
					sendLine(origin, isSilent, FORMAT_OUTPUT, "Starting DCC Send with: "+target);
				
					send.setFileName(jc.getSelectedFile().getAbsolutePath());
					send.setFileSize(jc.getSelectedFile().length());
					
					if (IdentityManager.getGlobalConfig().getOptionBool(myPlugin.getDomain(), "send.reverse")) {
    //#DCCCommand.java:165: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCCommand.java:165: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: String com.dmdirc.addons.dcc.DCCPlugin:getDomain()
    //#DCCCommand.java:165: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
						new DCCSendWindow(myPlugin, send, "Send: "+target, target, parser);
						parser.sendCTCP(target, "DCC", "SEND \""+jc.getSelectedFile().getName()+"\" "+DCC.ipToLong(myPlugin.getListenIP(parser))+" 0 "+send.getFileSize()+" "+send.makeToken()+((send.isTurbo()) ? " T" : ""));
    //#DCCCommand.java:167: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    basic block: bb_14
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCCommand.java:167: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
					} else {
						if (myPlugin.listen(send)) {
							new DCCSendWindow(myPlugin, send, "*Send: "+target, target, parser);
							parser.sendCTCP(target, "DCC", "SEND \""+jc.getSelectedFile().getName()+"\" "+DCC.ipToLong(myPlugin.getListenIP(parser))+" "+send.getPort()+" "+send.getFileSize()+((send.isTurbo()) ? " T" : ""));
    //#DCCCommand.java:171: ?precondition failure
    //#    com/dmdirc/addons/dcc/DCC.ipToLong: ip != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    basic block: bb_19
    //#    assertion: getListenIP(...) != null
    //#    callee: long com/dmdirc/addons/dcc/DCC.ipToLong(String)
    //#    callee assertion: ip != null
    //#    callee file: DCC.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 308
    //#    VN: getListenIP(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#DCCCommand.java:171: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.IRCParser:sendCTCP(String, String, String)
						} else {
							sendLine(origin, isSilent, "DCCSendError", "Unable to start dcc send with "+target+" - unable to create listen socket");
						}
					}
				}
			}
    //#DCCCommand.java:177: end of method: void com.dmdirc.addons.dcc.DCCCommand$2.run()
		}, "openFileThread");
		// Start the thread
		dccThread.start();
	}
    //#DCCCommand.java:181: end of method: void com.dmdirc.addons.dcc.DCCCommand.sendFile(String, InputWindow, Server, bool, String)

	/**
	 * Returns this command's name.
	 *
	 * @return The name of this command
	 */
	@Override
	public String getName() { return "dcc"; }
    //#DCCCommand.java:189: method: String com.dmdirc.addons.dcc.DCCCommand.getName()
    //#output(String getName()): return_value
    //#post(String getName()): return_value == &"dcc"
    //#DCCCommand.java:189: end of method: String com.dmdirc.addons.dcc.DCCCommand.getName()
	
	/**
	 * Returns whether or not this command should be shown in help messages.
	 *
	 * @return True iff the command should be shown, false otherwise
	 */
	@Override
	public boolean showInHelp() { return true; }
    //#DCCCommand.java:197: method: bool com.dmdirc.addons.dcc.DCCCommand.showInHelp()
    //#output(bool showInHelp()): return_value
    //#post(bool showInHelp()): return_value == 1
    //#DCCCommand.java:197: end of method: bool com.dmdirc.addons.dcc.DCCCommand.showInHelp()
	
	/**
	 * Returns a string representing the help message for this command.
	 *
	 * @return the help message for this command
	 */
	@Override
	public String getHelp() { return "dcc - Allows DCC"; }
    //#DCCCommand.java:205: method: String com.dmdirc.addons.dcc.DCCCommand.getHelp()
    //#output(String getHelp()): return_value
    //#post(String getHelp()): return_value == &"dcc - Allows DCC"
    //#DCCCommand.java:205: end of method: String com.dmdirc.addons.dcc.DCCCommand.getHelp()
	
	/**
	 * Returns a list of suggestions for the specified argument, given the list
	 * of previous arguments.
	 * @param arg The argument that is being completed
	 * @param previousArgs The contents of the previous arguments, if any
	 * @return A list of suggestions for the argument
	 */
	@Override
	public AdditionalTabTargets getSuggestions(final int arg, final List<String> previousArgs) {
		final AdditionalTabTargets res = new AdditionalTabTargets();
    //#DCCCommand.java:216: method: AdditionalTabTargets com.dmdirc.addons.dcc.DCCCommand.getSuggestions(int, List)
    //#DCCCommand.java:216: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.AdditionalTabTargets()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: void com.dmdirc.ui.input.AdditionalTabTargets()
    //#input(AdditionalTabTargets getSuggestions(int, List)): arg
    //#input(AdditionalTabTargets getSuggestions(int, List)): com.dmdirc.ui.input.TabCompletionType.CHANNEL
    //#input(AdditionalTabTargets getSuggestions(int, List)): com.dmdirc.ui.input.TabCompletionType.COMMAND
    //#output(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1) num objects
    //#output(AdditionalTabTargets getSuggestions(int, List)): return_value
    //#new obj(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1)
    //#presumption(AdditionalTabTargets getSuggestions(int, List)): init'ed(com.dmdirc.ui.input.TabCompletionType.CHANNEL)
    //#presumption(AdditionalTabTargets getSuggestions(int, List)): init'ed(com.dmdirc.ui.input.TabCompletionType.COMMAND)
    //#post(AdditionalTabTargets getSuggestions(int, List)): return_value == &new AdditionalTabTargets(getSuggestions#1)
    //#post(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1) num objects == 1
    //#test_vector(AdditionalTabTargets getSuggestions(int, List)): arg: {-2_147_483_648..-1, 2..4_294_967_295}, {0}, {1}
		
		if (arg == 0) {
			res.add("SEND");
    //#DCCCommand.java:219: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
			res.add("CHAT");
    //#DCCCommand.java:220: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
			res.excludeAll();
    //#DCCCommand.java:221: Warning: method not available - call not analyzed
    //#    call on AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
		} else if (arg == 1) {
			res.exclude(TabCompletionType.COMMAND);
    //#DCCCommand.java:223: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.AdditionalTabTargets:exclude(TabCompletionType)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: void com.dmdirc.ui.input.AdditionalTabTargets:exclude(TabCompletionType)
			res.exclude(TabCompletionType.CHANNEL);
    //#DCCCommand.java:224: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.AdditionalTabTargets:exclude(TabCompletionType)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: void com.dmdirc.ui.input.AdditionalTabTargets:exclude(TabCompletionType)
		} else {
			res.excludeAll();
    //#DCCCommand.java:226: Warning: method not available - call not analyzed
    //#    call on AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
		}
		
		return res;
    //#DCCCommand.java:229: end of method: AdditionalTabTargets com.dmdirc.addons.dcc.DCCCommand.getSuggestions(int, List)
	}

}

    //#output(com.dmdirc.addons.dcc.DCCCommand$2__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand$2]
    //#output(com.dmdirc.addons.dcc.DCCCommand$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCCommand$2__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCCommand$2__static_init): __Dispatch_Table.run()V == &run
    //#DCCCommand.java:: end of method: com.dmdirc.addons.dcc.DCCCommand$2.com.dmdirc.addons.dcc.DCCCommand$2__static_init
    //#DCCCommand.java:: end of class: com.dmdirc.addons.dcc.DCCCommand$2
    //#output(com.dmdirc.addons.dcc.DCCCommand$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand$1]
    //#output(com.dmdirc.addons.dcc.DCCCommand$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCCommand$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCCommand$1__static_init): __Dispatch_Table.run()V == &run
    //#DCCCommand.java:: end of method: com.dmdirc.addons.dcc.DCCCommand$1.com.dmdirc.addons.dcc.DCCCommand$1__static_init
    //#DCCCommand.java:: end of class: com.dmdirc.addons.dcc.DCCCommand$1
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand]
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.execute(Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;ZLcom/dmdirc/commandparser/CommandArguments;)V
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getHelp()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getSuggestions(ILjava/util/List;)Lcom/dmdirc/ui/input/AdditionalTabTargets;
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.sendFile(Ljava/lang/String;Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;ZLjava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.showInHelp()Z
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCCommand] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.execute(Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;ZLcom/dmdirc/commandparser/CommandArguments;)V == &execute
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getHelp()Ljava/lang/String; == &getHelp
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &getName
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.getSuggestions(ILjava/util/List;)Lcom/dmdirc/ui/input/AdditionalTabTargets; == &getSuggestions
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.sendFile(Ljava/lang/String;Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;ZLjava/lang/String;)V == &sendFile
    //#post(com.dmdirc.addons.dcc.DCCCommand__static_init): __Dispatch_Table.showInHelp()Z == &showInHelp
    //#DCCCommand.java:: end of method: com.dmdirc.addons.dcc.DCCCommand.com.dmdirc.addons.dcc.DCCCommand__static_init
    //#DCCCommand.java:: end of class: com.dmdirc.addons.dcc.DCCCommand
