@Override
		public synchronized void contact(T val) {
			lastContact = val;
			doSettled();
		}
Wait for the debouncer to be stable

<p>
If the debouncer has not received a contact event within the event window, it's considered
stable, and this returns a completed future with the value of the last received contact
event. Otherwise, the returned future completes on the next settled event, as in
{@link #settled()}.

@return a future which completes, perhaps immediately, when the debouncer is stable
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncDebouncer.java