#Signature file v4.1
#Version 1.20

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public org.netbeans.modules.selenium2.server.api.Selenium2Server
meth public boolean configureServer()
meth public java.lang.String getServerJarLocation()
meth public static org.netbeans.modules.selenium2.server.api.Selenium2Server getInstance()
meth public void restartServer()
meth public void startServer()
meth public void stopServer()
supr java.lang.Object
hfds INSTANCE,LOGGER

