//# 6 errors, 1,091 messages
//#
/*
    //#ActionModel.java:1:1: class: com.dmdirc.actions.ActionModel
 * 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.actions;

import com.dmdirc.actions.interfaces.ActionType;
import com.dmdirc.Main;
import com.dmdirc.Precondition;
import com.dmdirc.ServerManager;
import com.dmdirc.WritableFrameContainer;
import com.dmdirc.commandparser.parsers.CommandParser;
import com.dmdirc.commandparser.parsers.GlobalCommandParser;
import com.dmdirc.ui.interfaces.InputWindow;
import com.dmdirc.ui.interfaces.Window;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Represents the basic model of an action, and its triggering mechanism.
 * Saving and loading are handled by the Action class.
 *
 * @author chris
 */
public class ActionModel {
    //#ActionModel.java:45: method: com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel__static_init
    //#output(com.dmdirc.actions.ActionModel__static_init): $assertionsDisabled
    //#output(com.dmdirc.actions.ActionModel__static_init): __Descendant_Table[com/dmdirc/actions/ActionModel]
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getConditions()Ljava/util/List;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getGroup()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getNewFormat()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getResponse()[Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getTriggers()[Lcom/dmdirc/actions/interfaces/ActionType;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.isModified()Z
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.resetModified()V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setConditionTree(Lcom/dmdirc/actions/ConditionTree;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setConditions(Ljava/util/List;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setGroup(Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setNewFormat(Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setResponse([Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setTriggers([Lcom/dmdirc/actions/interfaces/ActionType;)V
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.trigger(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#post(com.dmdirc.actions.ActionModel__static_init): $assertionsDisabled == 0
    //#post(com.dmdirc.actions.ActionModel__static_init): __Descendant_Table[com/dmdirc/actions/ActionModel] == &__Dispatch_Table
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getConditionTree()Lcom/dmdirc/actions/ConditionTree; == &getConditionTree
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getConditions()Ljava/util/List; == &getConditions
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getGroup()Ljava/lang/String; == &getGroup
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &getName
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getNewFormat()Ljava/lang/String; == &getNewFormat
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree; == &getRealConditionTree
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getResponse()[Ljava/lang/String; == &getResponse
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.getTriggers()[Lcom/dmdirc/actions/interfaces/ActionType; == &getTriggers
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.isModified()Z == &isModified
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.resetModified()V == &resetModified
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setConditionTree(Lcom/dmdirc/actions/ConditionTree;)V == &setConditionTree
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setConditions(Ljava/util/List;)V == &setConditions
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setGroup(Ljava/lang/String;)V == &setGroup
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V == &setName
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setNewFormat(Ljava/lang/String;)V == &setNewFormat
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setResponse([Ljava/lang/String;)V == &setResponse
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.setTriggers([Lcom/dmdirc/actions/interfaces/ActionType;)V == &setTriggers
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z == &test
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(com.dmdirc.actions.ActionModel__static_init): __Dispatch_Table.trigger(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &trigger
    //#ActionModel.java:45: end of method: com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel__static_init

    /** The group this action belongs to. */
    protected String group;

    /** The name of this action. */
    protected String name;

    /** The ActionTypes that trigger this action. */
    protected ActionType[] triggers;

    /** The commands to execute if this action is triggered. */
    protected String[] response;

    /** The change that should be made to the format string, if any. */
    protected String newFormat;

    /** The conditions for this action. */
    protected List<ActionCondition> conditions = new ArrayList<ActionCondition>();
    
    /** The condition tree used for evaluating conditions. */
    protected ConditionTree conditionTree;
    
    /** Whether this action has been modified or not. */
    protected boolean modified;
    
    /**
     * Creates a new instance of ActionModel with the specified properties.
     *
     * @param group The group the action belongs to
     * @param name The name of the action
     */
    public ActionModel(final String group, final String name) {
    //#ActionModel.java:77: method: void com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel(String, String)
    //#input(void com.dmdirc.actions.ActionModel(String, String)): group
    //#input(void com.dmdirc.actions.ActionModel(String, String)): name
    //#input(void com.dmdirc.actions.ActionModel(String, String)): this
    //#output(void com.dmdirc.actions.ActionModel(String, String)): new ArrayList(ActionModel#1) num objects
    //#output(void com.dmdirc.actions.ActionModel(String, String)): this.conditions
    //#output(void com.dmdirc.actions.ActionModel(String, String)): this.group
    //#output(void com.dmdirc.actions.ActionModel(String, String)): this.name
    //#new obj(void com.dmdirc.actions.ActionModel(String, String)): new ArrayList(ActionModel#1)
    //#post(void com.dmdirc.actions.ActionModel(String, String)): this.conditions == &new ArrayList(ActionModel#1)
    //#post(void com.dmdirc.actions.ActionModel(String, String)): this.group == group
    //#post(void com.dmdirc.actions.ActionModel(String, String)): init'ed(this.group)
    //#post(void com.dmdirc.actions.ActionModel(String, String)): this.name == name
    //#post(void com.dmdirc.actions.ActionModel(String, String)): init'ed(this.name)
    //#post(void com.dmdirc.actions.ActionModel(String, String)): new ArrayList(ActionModel#1) num objects == 1
        this.group = group;
        this.name = name;
    }    
    //#ActionModel.java:80: end of method: void com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel(String, String)
    
    /**
     * Creates a new instance of ActionModel with the specified properties.
     *
     * @param group The group the action belongs to
     * @param name The name of the action
     * @param triggers The triggers to use
     * @param response The response to use
     * @param conditions The conditions to use
     * @param conditionTree The condition tree to use
     * @param newFormat The new formatter to use
     */
    public ActionModel(final String group, final String name,
            final ActionType[] triggers, final String[] response,
            final List<ActionCondition> conditions,
            final ConditionTree conditionTree, final String newFormat) {
    //#ActionModel.java:96: method: void com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): conditionTree
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): conditions
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): group
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): name
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): newFormat
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): response
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): response.length
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): response[0..+Inf]
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): triggers
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): triggers.length
    //#input(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): triggers[0..+Inf]
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ActionType[](ActionModel#2) num objects
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers.length
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers[0..+Inf]
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ArrayList(ActionModel#1) num objects
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new String[](ActionModel#3) num objects
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response.length
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response[0..+Inf]
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.conditionTree
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.conditions
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.group
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.modified
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.name
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.newFormat
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response
    //#output(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers
    //#new obj(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ActionType[](ActionModel#2)
    //#new obj(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ArrayList(ActionModel#1)
    //#new obj(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new String[](ActionModel#3)
    //#pre[6] (void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): response != null
    //#pre[10] (void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): triggers != null
    //#pre[8] (void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): (soft) init'ed(response[0..+Inf])
    //#pre[12] (void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): (soft) init'ed(triggers[0..+Inf])
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.conditionTree == conditionTree
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.conditionTree)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.conditions == conditions
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.conditions)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.group == group
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.group)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.modified == 1
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ActionType[](ActionModel#2) num objects == 1
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new ArrayList(ActionModel#1) num objects == 1
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): new String[](ActionModel#3) num objects == 1
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.name == name
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.name)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.newFormat == newFormat
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.newFormat)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response == &new String[](ActionModel#3)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers == &new ActionType[](ActionModel#2)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers.length == triggers.length
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.triggers.length)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.triggers[0..+Inf] == One-of{triggers[0..+Inf], undefined}
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response.length == response.length
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): init'ed(this.response.length)
    //#post(void com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)): this.response[0..+Inf] == One-of{response[0..+Inf], undefined}
        this.group = group;
        this.name = name;
        this.triggers = triggers.clone();
        this.response = response.clone();
        this.conditions = conditions;
        this.conditionTree = conditionTree;
        this.newFormat = newFormat;
        this.modified = true;
    }
    //#ActionModel.java:105: end of method: void com.dmdirc.actions.ActionModel.com.dmdirc.actions.ActionModel(String, String, ActionType[], String[], List, ConditionTree, String)

    /**
     * Triggers this action.
     *
     * @param format The format of the message that's going to be displayed.
     * @param arguments The arguments from the action that caused this trigger.
     */
    @Precondition({
        "This action has at least one trigger",
        "This action's primary trigger is non-null"
    })
    public void trigger(final StringBuffer format, final Object... arguments) {
        assert(triggers.length > 0);
    //#ActionModel.java:118: method: void com.dmdirc.actions.ActionModel.trigger(StringBuffer, Object[])
    //#ActionModel.java:118: Warning: suspicious precondition
    //#    The precondition for arguments[0].__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#ActionModel.java:118: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    suspicious precondition index: [24]
    //#    Attribs:  Soft
    //#ActionModel.java:118: Warning: suspicious precondition
    //#    The precondition for this.triggers[0].__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    suspicious precondition index: [46]
    //#    Attribs:  Soft
    //#ActionModel.java:118: Warning: suspicious precondition
    //#    The precondition for this.triggers[0].type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    suspicious precondition index: [49]
    //#    Attribs:  Soft
    //#ActionModel.java:118: Warning: suspicious precondition
    //#    The precondition for this.triggers[0].type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    suspicious precondition index: [50]
    //#    Attribs:  Soft
    //#input(void trigger(StringBuffer, Object[])): "$"._tainted
    //#input(void trigger(StringBuffer, Object[])): "${"._tainted
    //#input(void trigger(StringBuffer, Object[])): "-"._tainted
    //#input(void trigger(StringBuffer, Object[])): "."._tainted
    //#input(void trigger(StringBuffer, Object[])): "}"._tainted
    //#input(void trigger(StringBuffer, Object[])): __Descendant_Table[com/dmdirc/actions/ActionModel]
    //#input(void trigger(StringBuffer, Object[])): __Descendant_Table[com/dmdirc/actions/Action]
    //#input(void trigger(StringBuffer, Object[])): __Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): __Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#input(void trigger(StringBuffer, Object[])): __Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): arguments
    //#input(void trigger(StringBuffer, Object[])): arguments.length
    //#input(void trigger(StringBuffer, Object[])): arguments[0]
    //#input(void trigger(StringBuffer, Object[])): arguments[0].__Tag
    //#input(void trigger(StringBuffer, Object[])): arguments[1]
    //#input(void trigger(StringBuffer, Object[])): arguments[1]._tainted
    //#input(void trigger(StringBuffer, Object[])): arguments[1].length
    //#input(void trigger(StringBuffer, Object[])): arguments[2]
    //#input(void trigger(StringBuffer, Object[])): arguments[2]._tainted
    //#input(void trigger(StringBuffer, Object[])): arguments[2].length
    //#input(void trigger(StringBuffer, Object[])): arguments[3..4_294_967_295]
    //#input(void trigger(StringBuffer, Object[])): arguments[3..4_294_967_295].__Tag
    //#input(void trigger(StringBuffer, Object[])): arguments[3..4_294_967_295]._tainted
    //#input(void trigger(StringBuffer, Object[])): arguments[3..4_294_967_295].length
    //#input(void trigger(StringBuffer, Object[])): com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1).length
    //#input(void trigger(StringBuffer, Object[])): com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1)[0..4_294_967_295]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Main.controller
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Server.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/Server.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerManager.__Class_Obj.__Lock
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerManager.me
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerManager.me.servers
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerState.CONNECTED
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/Action.__Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/Action.__Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Descendant_Table[com/dmdirc/actions/ActionCondition]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getArg()I
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getTarget()Ljava/lang/String;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionManager.actionComponents
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[com/dmdirc/actions/ActionSubstitutor]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ActionSubstitutor.__Dispatch_Table.doSubstitution(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$1.$SwitchMap$com$dmdirc$actions$ConditionTree$OPERATION
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.AND
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.NOOP
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.NOT
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.OR
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.VAR
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree.__Descendant_Table[com/dmdirc/actions/ConditionTree]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/ConditionTree.__Dispatch_Table.evaluate([Z)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$1.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$10.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$11.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$12.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$2.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$3.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$4.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$5.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$6.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$7.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$8.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison$9.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$10]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$11]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$12]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$1]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$2]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$3]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$4]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$5]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$6]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$7]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$8]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$9]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/interfaces/ActionComparison]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(void trigger(StringBuffer, Object[])): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(void trigger(StringBuffer, Object[])): format
    //#input(void trigger(StringBuffer, Object[])): format._tainted
    //#input(void trigger(StringBuffer, Object[])): this
    //#input(void trigger(StringBuffer, Object[])): this.__Tag
    //#input(void trigger(StringBuffer, Object[])): this.conditionTree
    //#input(void trigger(StringBuffer, Object[])): this.conditionTree...__Tag
    //#input(void trigger(StringBuffer, Object[])): this.conditionTree...op
    //#input(void trigger(StringBuffer, Object[])): this.conditionTree.__Tag
    //#input(void trigger(StringBuffer, Object[])): this.conditionTree.op
    //#input(void trigger(StringBuffer, Object[])): this.conditions
    //#input(void trigger(StringBuffer, Object[])): this.newFormat
    //#input(void trigger(StringBuffer, Object[])): this.newFormat._tainted
    //#input(void trigger(StringBuffer, Object[])): this.response
    //#input(void trigger(StringBuffer, Object[])): this.response.length
    //#input(void trigger(StringBuffer, Object[])): this.response[0..4_294_967_295]
    //#input(void trigger(StringBuffer, Object[])): this.response[0..4_294_967_295]._tainted
    //#input(void trigger(StringBuffer, Object[])): this.triggers
    //#input(void trigger(StringBuffer, Object[])): this.triggers.length
    //#input(void trigger(StringBuffer, Object[])): this.triggers[0]
    //#input(void trigger(StringBuffer, Object[])): this.triggers[0].__Tag
    //#input(void trigger(StringBuffer, Object[])): this.triggers[0].type
    //#input(void trigger(StringBuffer, Object[])): this.triggers[0].type.__Tag
    //#output(void trigger(StringBuffer, Object[])): com/dmdirc/ServerManager.me
    //#output(void trigger(StringBuffer, Object[])): format._tainted
    //#output(void trigger(StringBuffer, Object[])): new ArrayList(ServerManager#1) num objects
    //#output(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1) num objects
    //#output(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1).__Tag
    //#output(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1).servers
    //#new obj(void trigger(StringBuffer, Object[])): new ArrayList(ServerManager#1)
    //#new obj(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1)
    //#pre[25] (void trigger(StringBuffer, Object[])): init'ed(this.conditionTree)
    //#pre[36] (void trigger(StringBuffer, Object[])): this.conditions != null
    //#pre[43] (void trigger(StringBuffer, Object[])): this.triggers != null
    //#pre[44] (void trigger(StringBuffer, Object[])): this.triggers.length >= 1
    //#pre[45] (void trigger(StringBuffer, Object[])): this.triggers[0] != null
    //#pre[1] (void trigger(StringBuffer, Object[])): (soft) arguments != null
    //#pre[3] (void trigger(StringBuffer, Object[])): (soft) init'ed(arguments[0])
    //#pre[4] (void trigger(StringBuffer, Object[])): (soft) arguments[0].__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[5] (void trigger(StringBuffer, Object[])): (soft) init'ed(arguments[1])
    //#pre[7] (void trigger(StringBuffer, Object[])): (soft) arguments[1].length in {1..4_294_967_295}
    //#pre[9] (void trigger(StringBuffer, Object[])): (soft) init'ed(arguments[2])
    //#pre[11] (void trigger(StringBuffer, Object[])): (soft) arguments[2].length in {1..4_294_967_295}
    //#pre[13] (void trigger(StringBuffer, Object[])): (soft) init'ed(arguments[3..4_294_967_295])
    //#pre[18] (void trigger(StringBuffer, Object[])): (soft) init'ed(com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1)[0..4_294_967_295])
    //#pre[19] (void trigger(StringBuffer, Object[])): (soft) com/dmdirc/Main.controller != null
    //#pre[21] (void trigger(StringBuffer, Object[])): (soft) init'ed(com/dmdirc/ServerManager.me)
    //#pre[24] (void trigger(StringBuffer, Object[])): (soft) this.__Tag in {com/dmdirc/actions/Action, com/dmdirc/actions/ActionModel}
    //#pre[37] (void trigger(StringBuffer, Object[])): (soft) init'ed(this.newFormat)
    //#pre[39] (void trigger(StringBuffer, Object[])): (soft) this.response != null
    //#pre[40] (void trigger(StringBuffer, Object[])): (soft) this.response.length <= 4_294_967_295
    //#pre[41] (void trigger(StringBuffer, Object[])): (soft) init'ed(this.response[0..4_294_967_295])
    //#pre[46] (void trigger(StringBuffer, Object[])): (soft) this.triggers[0].__Tag in {com/dmdirc/actions/CoreActionType, com/dmdirc/actions/interfaces/ActionType, com/dmdirc/addons/dcc/actions/DCCActions}
    //#pre[47] (void trigger(StringBuffer, Object[])): (soft) this.triggers[0].type != null
    //#pre[48] (void trigger(StringBuffer, Object[])): (soft) this.triggers[0].type != null
    //#pre[49] (void trigger(StringBuffer, Object[])): (soft) this.triggers[0].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}
    //#pre[50] (void trigger(StringBuffer, Object[])): (soft) this.triggers[0].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}
    //#presumption(void trigger(StringBuffer, Object[])): com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser(...)@140 != null
    //#presumption(void trigger(StringBuffer, Object[])): com.dmdirc.ui.interfaces.InputWindow:getCommandParser(...)@142 != null
    //#presumption(void trigger(StringBuffer, Object[])): getServerManager(...).servers != null
    //#presumption(void trigger(StringBuffer, Object[])): java.util.List:get(...).__Tag@136 == com/dmdirc/Server
    //#presumption(void trigger(StringBuffer, Object[])): java.util.List:get(...)@136 != null
    //#post(void trigger(StringBuffer, Object[])): init'ed(com/dmdirc/ServerManager.me)
    //#post(void trigger(StringBuffer, Object[])): init'ed(format._tainted)
    //#post(void trigger(StringBuffer, Object[])): new ArrayList(ServerManager#1) num objects <= 1
    //#post(void trigger(StringBuffer, Object[])): new ArrayList(ServerManager#1) num objects == 0
    //#post(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1) num objects <= 1
    //#post(void trigger(StringBuffer, Object[])): new ServerManager(getServerManager#1) num objects == 0
    //#post(void trigger(StringBuffer, Object[])): init'ed(new ServerManager(getServerManager#1).__Tag)
    //#post(void trigger(StringBuffer, Object[])): init'ed(new ServerManager(getServerManager#1).servers)
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.List:size
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:readTerm
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:parseStack
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:getServer
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:getState
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:get
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:getType
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:getArgTypes
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:test
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:evaluate
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(void trigger(StringBuffer, Object[])): Effects-of-calling:appliesTo
    //#test_vector(void trigger(StringBuffer, Object[])): arguments.length: {0}, {1..+Inf}
    //#test_vector(void trigger(StringBuffer, Object[])): format: Addr_Set{null}, Inverse{null}
    //#test_vector(void trigger(StringBuffer, Object[])): this.newFormat: Addr_Set{null}, Inverse{null}
    //#test_vector(void trigger(StringBuffer, Object[])): java.util.List:size(...)@140: {-2_147_483_648..0}, {1..4_294_967_295}
        assert(triggers[0] != null);
        
        final ActionSubstitutor sub = new ActionSubstitutor(triggers[0]);
        
        if (!test(sub, arguments)) {
            return;
        }

        final Window active = Main.getUI().getActiveWindow();
    //#ActionModel.java:127: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.ui.interfaces.UIController:getActiveWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    unanalyzed callee: Window com.dmdirc.ui.interfaces.UIController:getActiveWindow()
        InputWindow cw = null;
        CommandParser cp = null;
    //#ActionModel.java:129: Warning: unused assignment
    //#    Unused assignment into cp
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    Attribs:  Uncertain

        if (arguments.length > 0 && arguments[0] instanceof WritableFrameContainer) {
            cw = ((WritableFrameContainer) arguments[0]).getFrame();
    //#ActionModel.java:132: Warning: call too complex - analysis skipped
    //#    call on InputWindow getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    unanalyzed callee: InputWindow getFrame()
        } else if (active instanceof InputWindow) {
            cw = (InputWindow) active;
        } else if (ServerManager.getServerManager().numServers() > 0) {
            cw = ServerManager.getServerManager().getServers().get(0).getFrame();
        }

        if (cw == null) {
            cp = GlobalCommandParser.getGlobalCommandParser();
    //#ActionModel.java:140: Warning: method not available - call not analyzed
    //#    call on GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    unanalyzed callee: GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
        } else {
            cp = cw.getCommandParser();
    //#ActionModel.java:142: Warning: method not available - call not analyzed
    //#    call on CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    unanalyzed callee: CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
        }

        for (String command : response) {
            cp.parseCommand(cw, sub.doSubstitution(command, arguments));
    //#ActionModel.java:146: Warning: unused assignment in callee
    //#    Unused assignment to (java.lang.StringBuilder:toString(...)._tainted) in doSubstitution
    //#    severity: LOW
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#ActionModel.java:146: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: void trigger(StringBuffer, Object[])
    //#    unanalyzed callee: void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
        }

        if (newFormat != null && format != null) {
            format.setLength(0);
            format.append(newFormat);
        }
    }
    //#ActionModel.java:153: end of method: void com.dmdirc.actions.ActionModel.trigger(StringBuffer, Object[])
    
    /**
     * Tests to see if this action should be triggered or not.
     * 
     * @param sub The ActionsSubstitutor to use to substitute args
     * @param arguments The arguments for the action event
     * @return True if the action should be executed, false otherwise
     */
    public boolean test(final ActionSubstitutor sub, final Object ... arguments) {
        final boolean[] results = new boolean[conditions.size()];
    //#ActionModel.java:163: method: bool com.dmdirc.actions.ActionModel.test(ActionSubstitutor, Object[])
    //#ActionModel.java:163: Warning: suspicious precondition
    //#    The precondition for arguments[0].__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#ActionModel.java:163: Warning: suspicious precondition
    //#    The precondition for sub.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [22]
    //#    Attribs:  Soft
    //#ActionModel.java:163: Warning: suspicious precondition
    //#    The precondition for sub.type.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [25]
    //#    Attribs:  Soft
    //#ActionModel.java:163: Warning: suspicious precondition
    //#    The precondition for sub.type.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [26]
    //#    Attribs:  Soft
    //#ActionModel.java:163: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [28]
    //#    Attribs:  Soft
    //#input(bool test(ActionSubstitutor, Object[])): "$"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "${"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "-"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "."._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "}"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): __Descendant_Table[com/dmdirc/actions/ActionModel]
    //#input(bool test(ActionSubstitutor, Object[])): __Descendant_Table[com/dmdirc/actions/Action]
    //#input(bool test(ActionSubstitutor, Object[])): __Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): __Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#input(bool test(ActionSubstitutor, Object[])): arguments
    //#input(bool test(ActionSubstitutor, Object[])): arguments.length
    //#input(bool test(ActionSubstitutor, Object[])): arguments[0]
    //#input(bool test(ActionSubstitutor, Object[])): arguments[0].__Tag
    //#input(bool test(ActionSubstitutor, Object[])): arguments[1]
    //#input(bool test(ActionSubstitutor, Object[])): arguments[1]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): arguments[1].length
    //#input(bool test(ActionSubstitutor, Object[])): arguments[2]
    //#input(bool test(ActionSubstitutor, Object[])): arguments[2]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): arguments[2].length
    //#input(bool test(ActionSubstitutor, Object[])): arguments[3..4_294_967_295]
    //#input(bool test(ActionSubstitutor, Object[])): arguments[3..4_294_967_295].__Tag
    //#input(bool test(ActionSubstitutor, Object[])): arguments[3..4_294_967_295]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): arguments[3..4_294_967_295].length
    //#input(bool test(ActionSubstitutor, Object[])): com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1).length
    //#input(bool test(ActionSubstitutor, Object[])): com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1)[0..4_294_967_295]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerState.CONNECTED
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/Action.__Dispatch_Table.getRealConditionTree()Lcom/dmdirc/actions/ConditionTree;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Descendant_Table[com/dmdirc/actions/ActionCondition]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getArg()I
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.getTarget()Ljava/lang/String;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionCondition.__Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionManager.actionComponents
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[com/dmdirc/actions/ActionSubstitutor]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Dispatch_Table.doSubstitution(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$1.$SwitchMap$com$dmdirc$actions$ConditionTree$OPERATION
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.AND
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.NOOP
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.NOT
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.OR
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree$OPERATION.VAR
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree.__Descendant_Table[com/dmdirc/actions/ConditionTree]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ConditionTree.__Dispatch_Table.evaluate([Z)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$1.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$10.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$11.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$12.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$2.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$3.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$4.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$5.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$6.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$7.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$8.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$9.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$10]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$11]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$12]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$1]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$2]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$3]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$4]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$5]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$6]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$7]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$8]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$9]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/interfaces/ActionComparison]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): sub
    //#input(bool test(ActionSubstitutor, Object[])): sub.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): sub.type
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.type
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.type.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this
    //#input(bool test(ActionSubstitutor, Object[])): this.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree...__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree...argument
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree...leftArg
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree...op
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree...rightArg
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree.argument
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree.leftArg
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree.op
    //#input(bool test(ActionSubstitutor, Object[])): this.conditionTree.rightArg
    //#input(bool test(ActionSubstitutor, Object[])): this.conditions
    //#output(bool test(ActionSubstitutor, Object[])): return_value
    //#pre[29] (bool test(ActionSubstitutor, Object[])): init'ed(this.conditionTree)
    //#pre[30] (bool test(ActionSubstitutor, Object[])): this.conditions != null
    //#pre[1] (bool test(ActionSubstitutor, Object[])): (soft) arguments != null
    //#pre[3] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(arguments[0])
    //#pre[4] (bool test(ActionSubstitutor, Object[])): (soft) arguments[0].__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[5] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(arguments[1])
    //#pre[7] (bool test(ActionSubstitutor, Object[])): (soft) arguments[1].length in {1..4_294_967_295}
    //#pre[9] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(arguments[2])
    //#pre[11] (bool test(ActionSubstitutor, Object[])): (soft) arguments[2].length in {1..4_294_967_295}
    //#pre[13] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(arguments[3..4_294_967_295])
    //#pre[18] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(com.dmdirc.actions.ConditionTree$1__static_init.new int[](ConditionTree$1__static_init#1)[0..4_294_967_295])
    //#pre[19] (bool test(ActionSubstitutor, Object[])): (soft) sub != null
    //#pre[20] (bool test(ActionSubstitutor, Object[])): (soft) sub.__Tag == com/dmdirc/actions/ActionSubstitutor
    //#pre[21] (bool test(ActionSubstitutor, Object[])): (soft) sub.type != null
    //#pre[22] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.__Tag in {com/dmdirc/actions/CoreActionType, com/dmdirc/actions/interfaces/ActionType, com/dmdirc/addons/dcc/actions/DCCActions}
    //#pre[23] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type != null
    //#pre[24] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type != null
    //#pre[25] (bool test(ActionSubstitutor, Object[])): (soft) sub.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}
    //#pre[26] (bool test(ActionSubstitutor, Object[])): (soft) sub.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}
    //#pre[28] (bool test(ActionSubstitutor, Object[])): (soft) this.__Tag in {com/dmdirc/actions/Action, com/dmdirc/actions/ActionModel}
    //#presumption(bool test(ActionSubstitutor, Object[])): condition.arg@166 >= -1
    //#presumption(bool test(ActionSubstitutor, Object[])): condition.arg@166 < arguments.length
    //#presumption(bool test(ActionSubstitutor, Object[])): condition.comparison.__Tag@166 in {com/dmdirc/actions/CoreActionComparison, com/dmdirc/actions/CoreActionComparison$1, com/dmdirc/actions/CoreActionComparison$10, com/dmdirc/actions/CoreActionComparison$11, com/dmdirc/actions/CoreActionComparison$12, com/dmdirc/actions/CoreActionComparison$2, com/dmdirc/actions/CoreActionComparison$3, com/dmdirc/actions/CoreActionComparison$4, com/dmdirc/actions/CoreActionComparison$5, com/dmdirc/actions/CoreActionComparison$6, com/dmdirc/actions/CoreActionComparison$7, com/dmdirc/actions/CoreActionComparison$8, com/dmdirc/actions/CoreActionComparison$9, com/dmdirc/actions/interfaces/ActionComparison}
    //#presumption(bool test(ActionSubstitutor, Object[])): condition.comparison@166 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): condition.component@166 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...)...__Tag@170 == com/dmdirc/actions/ConditionTree
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...)...argument@170 >= 0
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...)...leftArg@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...)...op@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...)...rightArg@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).__Tag@170 == com/dmdirc/actions/ConditionTree
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).argument@170 in {0..4_294_967_294}
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).argument@170 - java.util.List:size(...)@163 in {-4_294_967_295..-1}
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).leftArg@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).op@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): getRealConditionTree(...).rightArg@170 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): java.util.Iterator:next(...).__Tag@166 == com/dmdirc/actions/ActionCondition
    //#presumption(bool test(ActionSubstitutor, Object[])): java.util.Iterator:next(...)@166 != null
    //#presumption(bool test(ActionSubstitutor, Object[])): java.util.List:size(...)@163 >= 1
    //#post(bool test(ActionSubstitutor, Object[])): init'ed(return_value)
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.List:size
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:readTerm
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:parseStack
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getServer
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getState
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:get
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getType
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getArgTypes
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:test
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.actions.ConditionTree$OPERATION:ordinal
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:evaluate
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:appliesTo
    //#test_vector(bool test(ActionSubstitutor, Object[])): java.util.Iterator:hasNext(...)@166: {0}, {1}
        
        int i = 0;
        for (ActionCondition condition : conditions) {
            results[i++] = condition.test(sub, arguments);
    //#ActionModel.java:167: ?overflow
    //#    i in {-2_147_483_649..4_294_967_294}
    //#    severity: LOW
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_5
    //#    assertion: i in {-2_147_483_649..4_294_967_294}
    //#    VN: i + 1
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296}
    //#    Attribs:  Int  Bad singleton  Bad > Exp
    //#ActionModel.java:167: ?array index out of bounds
    //#    i < results.length
    //#    severity: MEDIUM
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_5
    //#    assertion: i < results.length
    //#    VN: -(i - java.util.List:size(...)@163)
    //#    Expected: {1..+Inf}
    //#    Bad: {0}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Bad < Exp
        }
        
        return getRealConditionTree().evaluate(results);
    //#ActionModel.java:170: ?null dereference
    //#    getRealConditionTree(...) != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_4
    //#    assertion: getRealConditionTree(...) != null
    //#    VN: getRealConditionTree(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#ActionModel.java:170: ?use of default init
    //#    init'ed(getRealConditionTree(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_4
    //#    assertion: init'ed(getRealConditionTree(...).__Tag)
    //#    VN: getRealConditionTree(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#ActionModel.java:170: ?null dereference
    //#    com/dmdirc/actions/ConditionTree.__Descendant_Table[getRealConditionTree(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_4
    //#    assertion: com/dmdirc/actions/ConditionTree.__Descendant_Table[getRealConditionTree(...).__Tag] != null
    //#    VN: com/dmdirc/actions/ConditionTree.__Descendant_Table[getRealConditionTree(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#ActionModel.java:170: ?precondition failure
    //#    com/dmdirc/actions/ConditionTree.evaluate: (soft) init'ed(conditions[0..4_294_967_295])
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionModel
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_4
    //#    assertion: (soft) init'ed(results[0..4_294_967_295])
    //#    callee: bool com/dmdirc/actions/ConditionTree.evaluate(bool[])
    //#    callee assertion: (soft) init'ed(conditions[0..4_294_967_295])
    //#    callee file: ConditionTree.java
    //#    callee precondition index: [5]
    //#    callee srcpos: 131
    //#    VN: results[0..4_294_967_295]
    //#    Expected: {0,1}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Exp in +/-1000  Soft  Bad only invalid
    //#ActionModel.java:170: end of method: bool com.dmdirc.actions.ActionModel.test(ActionSubstitutor, Object[])
    }

    /**
     * Retrieves a list of this action's conditions.
     *
     * @return A list of this action's conditions
     */
    public List<ActionCondition> getConditions() {
        return conditions;
    //#ActionModel.java:179: method: List com.dmdirc.actions.ActionModel.getConditions()
    //#input(List getConditions()): this
    //#input(List getConditions()): this.conditions
    //#output(List getConditions()): return_value
    //#pre[2] (List getConditions()): init'ed(this.conditions)
    //#post(List getConditions()): return_value == this.conditions
    //#post(List getConditions()): init'ed(return_value)
    //#ActionModel.java:179: end of method: List com.dmdirc.actions.ActionModel.getConditions()
    }

    /**
     * Sets this action's conditions.
     *
     * @param conditions A list of conditions to use
     */
    public void setConditions(final List<ActionCondition> conditions) {
        this.conditions = conditions;
    //#ActionModel.java:188: method: void com.dmdirc.actions.ActionModel.setConditions(List)
    //#input(void setConditions(List)): conditions
    //#input(void setConditions(List)): this
    //#output(void setConditions(List)): this.conditions
    //#output(void setConditions(List)): this.modified
    //#post(void setConditions(List)): this.conditions == conditions
    //#post(void setConditions(List)): init'ed(this.conditions)
    //#post(void setConditions(List)): this.modified == 1
        this.modified = true;
    }
    //#ActionModel.java:190: end of method: void com.dmdirc.actions.ActionModel.setConditions(List)

    /**
     * Retrieves this action's triggers.
     *
     * @return The triggers used by this action
     */
    public ActionType[] getTriggers() {
        return triggers == null ? triggers : triggers.clone();
    //#ActionModel.java:198: method: ActionType[] com.dmdirc.actions.ActionModel.getTriggers()
    //#input(ActionType[] getTriggers()): this
    //#input(ActionType[] getTriggers()): this.triggers
    //#input(ActionType[] getTriggers()): this.triggers.length
    //#input(ActionType[] getTriggers()): this.triggers[0..+Inf]
    //#output(ActionType[] getTriggers()): new ActionType[](getTriggers#1) num objects
    //#output(ActionType[] getTriggers()): new ActionType[](getTriggers#1).length
    //#output(ActionType[] getTriggers()): new ActionType[](getTriggers#1)[0..+Inf]
    //#output(ActionType[] getTriggers()): return_value
    //#new obj(ActionType[] getTriggers()): new ActionType[](getTriggers#1)
    //#pre[2] (ActionType[] getTriggers()): init'ed(this.triggers)
    //#pre[4] (ActionType[] getTriggers()): (soft) init'ed(this.triggers[0..+Inf])
    //#post(ActionType[] getTriggers()): return_value == One-of{this.triggers, &new ActionType[](getTriggers#1)}
    //#post(ActionType[] getTriggers()): return_value in Addr_Set{null,&new ActionType[](getTriggers#1)}
    //#post(ActionType[] getTriggers()): new ActionType[](getTriggers#1) num objects <= 1
    //#post(ActionType[] getTriggers()): new ActionType[](getTriggers#1).length == this.triggers.length
    //#post(ActionType[] getTriggers()): init'ed(new ActionType[](getTriggers#1).length)
    //#post(ActionType[] getTriggers()): new ActionType[](getTriggers#1)[0..+Inf] == One-of{this.triggers[0..+Inf], undefined}
    //#ActionModel.java:198: end of method: ActionType[] com.dmdirc.actions.ActionModel.getTriggers()
    }

    /**
     * Sets this action's triggers.
     *
     * @param triggers The new triggers to use
     */
    public void setTriggers(final ActionType[] triggers) {
        this.triggers = triggers.clone();
    //#ActionModel.java:207: method: void com.dmdirc.actions.ActionModel.setTriggers(ActionType[])
    //#input(void setTriggers(ActionType[])): this
    //#input(void setTriggers(ActionType[])): triggers
    //#input(void setTriggers(ActionType[])): triggers.length
    //#input(void setTriggers(ActionType[])): triggers[0..+Inf]
    //#output(void setTriggers(ActionType[])): new ActionType[](setTriggers#1) num objects
    //#output(void setTriggers(ActionType[])): this.triggers.length
    //#output(void setTriggers(ActionType[])): this.triggers[0..+Inf]
    //#output(void setTriggers(ActionType[])): this.modified
    //#output(void setTriggers(ActionType[])): this.triggers
    //#new obj(void setTriggers(ActionType[])): new ActionType[](setTriggers#1)
    //#pre[2] (void setTriggers(ActionType[])): triggers != null
    //#pre[4] (void setTriggers(ActionType[])): (soft) init'ed(triggers[0..+Inf])
    //#post(void setTriggers(ActionType[])): this.modified == 1
    //#post(void setTriggers(ActionType[])): new ActionType[](setTriggers#1) num objects == 1
    //#post(void setTriggers(ActionType[])): this.triggers == &new ActionType[](setTriggers#1)
    //#post(void setTriggers(ActionType[])): this.triggers.length == triggers.length
    //#post(void setTriggers(ActionType[])): init'ed(this.triggers.length)
    //#post(void setTriggers(ActionType[])): possibly_updated(this.triggers[0..+Inf])
        this.modified = true;
    }
    //#ActionModel.java:209: end of method: void com.dmdirc.actions.ActionModel.setTriggers(ActionType[])

    /**
     * Retrieves this action's new format setting.
     *
     * @return The format that this action will use, or null if no change
     */
    public String getNewFormat() {
        return newFormat;
    //#ActionModel.java:217: method: String com.dmdirc.actions.ActionModel.getNewFormat()
    //#input(String getNewFormat()): this
    //#input(String getNewFormat()): this.newFormat
    //#output(String getNewFormat()): return_value
    //#pre[2] (String getNewFormat()): init'ed(this.newFormat)
    //#post(String getNewFormat()): return_value == this.newFormat
    //#post(String getNewFormat()): init'ed(return_value)
    //#ActionModel.java:217: end of method: String com.dmdirc.actions.ActionModel.getNewFormat()
    }

    /**
     * Sets this action's new format setting.
     *
     * @param newFormat The new 'new format' setting
     */
    public void setNewFormat(final String newFormat) {
        this.newFormat = newFormat;
    //#ActionModel.java:226: method: void com.dmdirc.actions.ActionModel.setNewFormat(String)
    //#input(void setNewFormat(String)): newFormat
    //#input(void setNewFormat(String)): this
    //#output(void setNewFormat(String)): this.modified
    //#output(void setNewFormat(String)): this.newFormat
    //#post(void setNewFormat(String)): this.modified == 1
    //#post(void setNewFormat(String)): this.newFormat == newFormat
    //#post(void setNewFormat(String)): init'ed(this.newFormat)
        this.modified = true;
    }
    //#ActionModel.java:228: end of method: void com.dmdirc.actions.ActionModel.setNewFormat(String)

    /**
     * Retrieves this action's response.
     *
     * @return The commands that will be executed if this action is triggered
     */
    public String[] getResponse() {
        return response == null ? response : response.clone();
    //#ActionModel.java:236: method: String[] com.dmdirc.actions.ActionModel.getResponse()
    //#input(String[] getResponse()): this
    //#input(String[] getResponse()): this.response
    //#input(String[] getResponse()): this.response.length
    //#input(String[] getResponse()): this.response[0..+Inf]
    //#output(String[] getResponse()): new String[](getResponse#1) num objects
    //#output(String[] getResponse()): new String[](getResponse#1).length
    //#output(String[] getResponse()): new String[](getResponse#1)[0..+Inf]
    //#output(String[] getResponse()): return_value
    //#new obj(String[] getResponse()): new String[](getResponse#1)
    //#pre[2] (String[] getResponse()): init'ed(this.response)
    //#pre[4] (String[] getResponse()): (soft) init'ed(this.response[0..+Inf])
    //#post(String[] getResponse()): return_value == One-of{this.response, &new String[](getResponse#1)}
    //#post(String[] getResponse()): return_value in Addr_Set{null,&new String[](getResponse#1)}
    //#post(String[] getResponse()): new String[](getResponse#1) num objects <= 1
    //#post(String[] getResponse()): new String[](getResponse#1).length == this.response.length
    //#post(String[] getResponse()): init'ed(new String[](getResponse#1).length)
    //#post(String[] getResponse()): new String[](getResponse#1)[0..+Inf] == One-of{this.response[0..+Inf], undefined}
    //#ActionModel.java:236: end of method: String[] com.dmdirc.actions.ActionModel.getResponse()
    }

    /**
     * Sets this action's response.
     *
     * @param response The new response to use
     */
    public void setResponse(final String[] response) {
        this.response = response.clone();
    //#ActionModel.java:245: method: void com.dmdirc.actions.ActionModel.setResponse(String[])
    //#input(void setResponse(String[])): response
    //#input(void setResponse(String[])): response.length
    //#input(void setResponse(String[])): response[0..+Inf]
    //#input(void setResponse(String[])): this
    //#output(void setResponse(String[])): new String[](setResponse#1) num objects
    //#output(void setResponse(String[])): this.response.length
    //#output(void setResponse(String[])): this.response[0..+Inf]
    //#output(void setResponse(String[])): this.modified
    //#output(void setResponse(String[])): this.response
    //#new obj(void setResponse(String[])): new String[](setResponse#1)
    //#pre[1] (void setResponse(String[])): response != null
    //#pre[3] (void setResponse(String[])): (soft) init'ed(response[0..+Inf])
    //#post(void setResponse(String[])): this.modified == 1
    //#post(void setResponse(String[])): new String[](setResponse#1) num objects == 1
    //#post(void setResponse(String[])): this.response == &new String[](setResponse#1)
    //#post(void setResponse(String[])): this.response.length == response.length
    //#post(void setResponse(String[])): init'ed(this.response.length)
    //#post(void setResponse(String[])): possibly_updated(this.response[0..+Inf])
        this.modified = true;
    }
    //#ActionModel.java:247: end of method: void com.dmdirc.actions.ActionModel.setResponse(String[])

    /**
     * Retrieves this action's group name.
     *
     * @return This action's group name
     */
    public String getGroup() {
        return group;
    //#ActionModel.java:255: method: String com.dmdirc.actions.ActionModel.getGroup()
    //#input(String getGroup()): this
    //#input(String getGroup()): this.group
    //#output(String getGroup()): return_value
    //#pre[2] (String getGroup()): init'ed(this.group)
    //#post(String getGroup()): return_value == this.group
    //#post(String getGroup()): init'ed(return_value)
    //#ActionModel.java:255: end of method: String com.dmdirc.actions.ActionModel.getGroup()
    }
    
    /**
     * Sets the group of this action.
     *
     * @param newGroup The new group for this action
     */
    public void setGroup(final String newGroup) {
        this.group = newGroup;
    //#ActionModel.java:264: method: void com.dmdirc.actions.ActionModel.setGroup(String)
    //#input(void setGroup(String)): newGroup
    //#input(void setGroup(String)): this
    //#output(void setGroup(String)): this.group
    //#output(void setGroup(String)): this.modified
    //#post(void setGroup(String)): this.group == newGroup
    //#post(void setGroup(String)): init'ed(this.group)
    //#post(void setGroup(String)): this.modified == 1
        this.modified = true;
    }
    //#ActionModel.java:266: end of method: void com.dmdirc.actions.ActionModel.setGroup(String)

    /**
     * Retrieves this action's name.
     *
     * @return This action's name
     */
    public String getName() {
        return name;
    //#ActionModel.java:274: method: String com.dmdirc.actions.ActionModel.getName()
    //#input(String getName()): this
    //#input(String getName()): this.name
    //#output(String getName()): return_value
    //#pre[2] (String getName()): init'ed(this.name)
    //#post(String getName()): return_value == this.name
    //#post(String getName()): init'ed(return_value)
    //#ActionModel.java:274: end of method: String com.dmdirc.actions.ActionModel.getName()
    }
    
    /**
     * Sets the name of this action.
     *
     * @param newName The new name for this action
     */
    public void setName(final String newName) {
        this.name = newName;
    //#ActionModel.java:283: method: void com.dmdirc.actions.ActionModel.setName(String)
    //#input(void setName(String)): newName
    //#input(void setName(String)): this
    //#output(void setName(String)): this.modified
    //#output(void setName(String)): this.name
    //#post(void setName(String)): this.modified == 1
    //#post(void setName(String)): this.name == newName
    //#post(void setName(String)): init'ed(this.name)
        this.modified = true;
    }
    //#ActionModel.java:285: end of method: void com.dmdirc.actions.ActionModel.setName(String)

    /**
     * Retrieves the condition tree used for this action. Condition trees may
     * be null, in which case the arguments are conjoined together.
     * 
     * @return This action's condition tree
     */
    public ConditionTree getConditionTree() {
        return conditionTree;
    //#ActionModel.java:294: method: ConditionTree com.dmdirc.actions.ActionModel.getConditionTree()
    //#input(ConditionTree getConditionTree()): this
    //#input(ConditionTree getConditionTree()): this.conditionTree
    //#output(ConditionTree getConditionTree()): return_value
    //#pre[2] (ConditionTree getConditionTree()): init'ed(this.conditionTree)
    //#post(ConditionTree getConditionTree()): return_value == this.conditionTree
    //#post(ConditionTree getConditionTree()): init'ed(return_value)
    //#ActionModel.java:294: end of method: ConditionTree com.dmdirc.actions.ActionModel.getConditionTree()
    }
    
    /**
     * Retrieves a concrete condition tree used for this action. If there is
     * no condition tree defined for this action, returns a conjunction tree
     * for the arguments.
     * 
     * @since 0.6
     * @return A {@link ConditionTree} object for this action
     */
    public ConditionTree getRealConditionTree() {
        return conditionTree == null
    //#ActionModel.java:306: method: ConditionTree com.dmdirc.actions.ActionModel.getRealConditionTree()
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree$OPERATION.AND
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree$OPERATION.NOOP
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree$OPERATION.NOT
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree$OPERATION.OR
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree$OPERATION.VAR
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree.__Descendant_Table[com/dmdirc/actions/ConditionTree]
    //#input(ConditionTree getRealConditionTree()): com/dmdirc/actions/ConditionTree.__Descendant_Table[others]
    //#input(ConditionTree getRealConditionTree()): this
    //#input(ConditionTree getRealConditionTree()): this.conditionTree
    //#input(ConditionTree getRealConditionTree()): this.conditions
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3) num objects
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).__Tag
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).argument
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).leftArg
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).op
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).rightArg
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1) num objects
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).__Tag
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).argument
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).leftArg
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).op
    //#output(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).rightArg
    //#output(ConditionTree getRealConditionTree()): return_value
    //#new obj(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3)
    //#new obj(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1)
    //#pre[2] (ConditionTree getRealConditionTree()): init'ed(this.conditionTree)
    //#pre[3] (ConditionTree getRealConditionTree()): (soft) this.conditions != null
    //#post(ConditionTree getRealConditionTree()): init'ed(return_value)
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3) num objects <= 1
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).__Tag == com/dmdirc/actions/ConditionTree
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).argument == -1
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).leftArg == null
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).op == &com.dmdirc.actions.ConditionTree$OPERATION__static_init.new ConditionTree$OPERATION(ConditionTree$OPERATION__static_init#5)
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(parseStack#3).rightArg == null
    //#post(ConditionTree getRealConditionTree()): init'ed(new ConditionTree(readTerm#1) num objects)
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).__Tag not init'ed, if init'ed
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).argument == 0, if init'ed
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).leftArg == null
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).op == null
    //#post(ConditionTree getRealConditionTree()): new ConditionTree(readTerm#1).rightArg == null
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:pollFirst
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.Character:instanceof
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.Character:charValue
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:isEmpty
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:readTerm
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.ArrayDeque
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:pollLast
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:addFirst
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:parseStack
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:poll
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:add
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.util.Deque:size
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.Integer:parseInt
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(ConditionTree getRealConditionTree()): Effects-of-calling:java.lang.StringBuilder:length
    //#ActionModel.java:306: end of method: ConditionTree com.dmdirc.actions.ActionModel.getRealConditionTree()
                ? ConditionTree.createConjunction(conditions.size()) : conditionTree;
    }

    /**
     * Sets the condition tree used for this action.
     * 
     * @param conditionTree The new condition tree to be used
     */
    public void setConditionTree(final ConditionTree conditionTree) {
        this.conditionTree = conditionTree;
    //#ActionModel.java:316: method: void com.dmdirc.actions.ActionModel.setConditionTree(ConditionTree)
    //#input(void setConditionTree(ConditionTree)): conditionTree
    //#input(void setConditionTree(ConditionTree)): this
    //#output(void setConditionTree(ConditionTree)): this.conditionTree
    //#output(void setConditionTree(ConditionTree)): this.modified
    //#post(void setConditionTree(ConditionTree)): this.conditionTree == conditionTree
    //#post(void setConditionTree(ConditionTree)): init'ed(this.conditionTree)
    //#post(void setConditionTree(ConditionTree)): this.modified == 1
        this.modified = true;
    }    
    //#ActionModel.java:318: end of method: void com.dmdirc.actions.ActionModel.setConditionTree(ConditionTree)
    
    /**
     * Determine if this model has been modified since it was constructed or
     * its modified status was reset.
     * 
     * @return True if this model has been modified, false otherwise
     */
    public boolean isModified() {
        return modified;
    //#ActionModel.java:327: method: bool com.dmdirc.actions.ActionModel.isModified()
    //#input(bool isModified()): this
    //#input(bool isModified()): this.modified
    //#output(bool isModified()): return_value
    //#pre[2] (bool isModified()): init'ed(this.modified)
    //#post(bool isModified()): return_value == this.modified
    //#post(bool isModified()): init'ed(return_value)
    //#ActionModel.java:327: end of method: bool com.dmdirc.actions.ActionModel.isModified()
    }
    
    /**
     * Resets the modified status of this model. After a call to
     * resetModified(), this model will report that it has not been modified,
     * until one of the set* methods is used.
     */
    public void resetModified() {
        this.modified = false;
    //#ActionModel.java:336: method: void com.dmdirc.actions.ActionModel.resetModified()
    //#input(void resetModified()): this
    //#output(void resetModified()): this.modified
    //#post(void resetModified()): this.modified == 0
    }
    //#ActionModel.java:337: end of method: void com.dmdirc.actions.ActionModel.resetModified()
    
    /** {@inheritDoc} */
    @Override
    public String toString() {
        return "[name=" + group + "/" + name + ", triggers="
    //#ActionModel.java:342: method: String com.dmdirc.actions.ActionModel.toString()
    //#input(String toString()): "']"._tainted
    //#input(String toString()): ", "._tainted
    //#input(String toString()): ", format='"._tainted
    //#input(String toString()): ", response="._tainted
    //#input(String toString()): ", triggers="._tainted
    //#input(String toString()): "."._tainted
    //#input(String toString()): "[name="._tainted
    //#input(String toString()): this
    //#input(String toString()): this.conditions
    //#input(String toString()): this.conditions._tainted
    //#input(String toString()): this.group
    //#input(String toString()): this.group._tainted
    //#input(String toString()): this.name
    //#input(String toString()): this.name._tainted
    //#input(String toString()): this.newFormat
    //#input(String toString()): this.newFormat._tainted
    //#input(String toString()): this.response
    //#input(String toString()): this.triggers
    //#output(String toString()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String toString()): return_value
    //#new obj(String toString()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String toString()): init'ed(this.conditions)
    //#pre[5] (String toString()): init'ed(this.group)
    //#pre[8] (String toString()): init'ed(this.name)
    //#pre[10] (String toString()): init'ed(this.newFormat)
    //#pre[12] (String toString()): init'ed(this.response)
    //#pre[13] (String toString()): init'ed(this.triggers)
    //#post(String toString()): java.lang.StringBuilder:toString(...)._tainted == this.conditions._tainted | this.group._tainted | this.name._tainted | One-of{this.conditions._tainted | this.group._tainted | this.name._tainted, this.newFormat._tainted}
    //#post(String toString()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String toString()): return_value == &java.lang.StringBuilder:toString(...)
    //#ActionModel.java:342: end of method: String com.dmdirc.actions.ActionModel.toString()
                + Arrays.toString(triggers) + ", response="
                + Arrays.toString(response) + ", "
                + conditions + ", format='" + newFormat + "']";
    }    
}    //#ActionModel.java:: end of class: com.dmdirc.actions.ActionModel
