// Path: src/utils/ByteWrapper.java
// public class ByteWrapper {
// 	public byte value;
// 
// 	public ByteWrapper(byte value) {
// 		this.value = value;
// 	}
// }
// 
// Path: src/utils/Hash.java
// public class Hash {
// 	/*
// 	 * comment from C&C: shift value to multiply by with each additional
// 	 * component of the hash function; this number is normally selected to be
// 	 * a smallish prime; 31 and 37 seem to work well
// 	 */
// 	private final static long INC = 92821;
// 	private long hash;
// 
// 	public Hash(Hash other) {
// 		hash = other.value();
// 	}
// 
// 	public Hash(long hash) {
// 		this.hash = hash;
// 	}
// 
// 	public Hash(byte hash) {
// 		this.hash = (hash);
// 	}
// 
// 	public long value() {
// 		return hash;
// 	}
// 
// 	public void plusEqual(long value) {
// 		// += in the C&C code
// 		hash *= INC;
// 		hash += value;
// 	}
// 
// 	public void barEqual(long value) {
// 		// |= in the C&C code
// 		hash += value;
// 	}
// 
// 	public void timesEqual(long value) {
// 		// *= in the C&C code
// 		hash *= value;
// 	}
// }


import utils.ByteWrapper;
import utils.Hash;
		if ( isBasic() ) {
			return (byte) (var + 1);
		} else {
			byte current = (byte) (var + 1);
			byte resNumVars = result.getNumVars();
			byte argNumVars = argument.getNumVars();

			byte max = current;
			if ( resNumVars > max ) { max = resNumVars; }
			if ( argNumVars > max ) { max = argNumVars; }

			return max;
		}
	}

	private Hash eHashBasic() {
		Hash h = new Hash(atom.value());

		if ( ( this.isS() && !this.feature.isFree() ) || !this.isS() ) {
			h.plusEqual(feature.value());
		}

		return h;
	}

	private Hash uHashBasic() {
		return new Hash(atom.value());
	}

	private Hash eHashComplex() {
// Path: src/utils/ByteWrapper.java
// public class ByteWrapper {
// 	public byte value;
// 
// 	public ByteWrapper(byte value) {
// 		this.value = value;
// 	}
// }
// 
// Path: src/utils/Hash.java
// public class Hash {
// 	/*
// 	 * comment from C&C: shift value to multiply by with each additional
// 	 * component of the hash function; this number is normally selected to be
// 	 * a smallish prime; 31 and 37 seem to work well
// 	 */
// 	private final static long INC = 92821;
// 	private long hash;
// 
// 	public Hash(Hash other) {
// 		hash = other.value();
// 	}
// 
// 	public Hash(long hash) {
// 		this.hash = hash;
// 	}
// 
// 	public Hash(byte hash) {
// 		this.hash = (hash);
// 	}
// 
// 	public long value() {
// 		return hash;
// 	}
// 
// 	public void plusEqual(long value) {
// 		// += in the C&C code
// 		hash *= INC;
// 		hash += value;
// 	}
// 
// 	public void barEqual(long value) {
// 		// |= in the C&C code
// 		hash += value;
// 	}
// 
// 	public void timesEqual(long value) {
// 		// *= in the C&C code
// 		hash *= value;
// 	}
// }


// Path: src/lexicon/Category.java
import utils.ByteWrapper;
import utils.Hash;

		if ( isBasic() ) {
			return (byte) (var + 1);
		} else {
			byte current = (byte) (var + 1);
			byte resNumVars = result.getNumVars();
			byte argNumVars = argument.getNumVars();

			byte max = current;
			if ( resNumVars > max ) { max = resNumVars; }
			if ( argNumVars > max ) { max = argNumVars; }

			return max;
		}
	}

	private Hash eHashBasic() {
		Hash h = new Hash(atom.value());

		if ( ( this.isS() && !this.feature.isFree() ) || !this.isS() ) {
			h.plusEqual(feature.value());
		}

		return h;
	}

	private Hash uHashBasic() {
		return new Hash(atom.value());
	}

	private Hash eHashComplex() {
		Hash h = new Hash(result.equivalenceHash);