create a new interface called DropoutStackADT for representing a dropout stack. It should contain exactly the same methods as StackADT, and have documentation for the file and each method in proper javadoc. Your file will be different from StackADT since a dropout stack acts differently than a normal stack. When documenting methods that should support throwing an exception, make a note in its javadocdescription. Implement a drop-out stack using a linked structure. You use the LinearNode or LinearDoubleNode classes. Follow the DropoutStackADT interface. See Base_A11Q3.java for a starting place. STACKADT LinearDoubleNode /** * Represents a node in a linked list. * * @author Java Foundations * @version 4.0 */ public class LinearDoubleNode { private LinearDoubleNode next,prev; private T element; /** * Creates an empty node. */ public LinearDoubleNode() { next = null; element = null; prev = null; } /** * Creates a node storing the specified element. * @param elem element to be stored */ public LinearDoubleNode(T elem) { next = null; element = elem; prev = null; } /** * Returns the node that follows this one. * @return reference to next node */ public LinearDoubleNode getNext() { return next; } /** * Sets the node that follows this one. * @param node node to follow this one */ public void setNext(LinearDoubleNode node) { next = node; } /** * Returns the element stored in this node. * @return element stored at the node */ public T getElement() { return element; } /** * Sets the element stored in this node. * @param elem element to be stored at this node */ public void setElement(T elem) { element = elem; } public LinearDoubleNode getPrev(){ return prev; } public void setPrev(LinearDoubleNode node){ prev = node; } } Base File DROP-OUT STACK TESTING The size of the stack is: 4 The stack contains: The size of the stack is 4 The stack contains: Solution public class DropOutStack implements StackADT { private final int DEFAULT_CAPACITY = 10; // refers to the item in the array being indexed private int cIndex; // holds the count of the stack private int count; private T[] stack; public DropOutStack() { cIndex = count = 0; stack = (T[]) (new Object[DEFAULT_CAPACITY]); } public DropOutStack(int initialCapacity) { cIndex = count = 0; stack = (T[]) (new Object[initialCapacity]); } public T peek() throws EmptyCollectionException { if (isEmpty()) throw new EmptyCollectionException(\"Drop-out Stack\"); return stack[(cIndex + stack.length - 1)%stack.length]; } public T pop() throws EmptyCollectionException { if (isEmpty()) throw new EmptyCollectionException(\"Drop-out Stack\"); cIndex = (cIndex + stack.length - 1)%stack.length; T result = stack[cIndex]; stack[cIndex] = null; count--; return result; } public void push(T element) { cIndex = cIndex % stack.length; stack[cIndex] = element; cIndex++; if (count != stack.length) count++; } public int size() { return count; } public boolean isEmpty() { return size() == 0; } public String toString() { String str = \"\"; i.