/*pkg*/ static int myHashCode(Object subtree) {
	if (subtree == null) return 0;
	else if (!(subtree instanceof Node)) {
	    Object[] ary = (Object[])subtree;
	    int nkeys = ary.length >> 1;
	    int hash = 0;
	    for (int i = 0; i < nkeys; ++i) {
		Object key = ary[i], value = ary[i + nkeys];
		int enthash = ((key == null ? 0 : key.hashCode()) ^
			       (value == null ? 0 : value.hashCode()));
		hash += enthash;
	    }
	    return hash;
	} else {
	    Node node = (Node)subtree;
	    int hash = myHashCode(node.left) + myHashCode(node.right);
	    Object key = node.key;
	    if (key instanceof EquivalentMap) {
		ArrayList<Entry> al = ((EquivalentMap)key).contents;
		for (int i = 0, siz = al.size(); i < siz; ++i)
		    hash += al.get(i).hashCode();
	    } else hash += (key == null ? 0 : key.hashCode()) ^		// not 'node.khash'!
			   (node.value == null ? 0 : node.value.hashCode());
	    return hash;
	}
    }