code: func newMainNode(x *sNode, xhc uint32, y *sNode, yhc uint32, lev uint, gen *generation) *mainNode {
  	if lev < exp2 {
  		xidx := (xhc >> lev) & 0x1f
  		yidx := (yhc >> lev) & 0x1f
  		bmp := uint32((1 << xidx) | (1 << yidx))
  
  		if xidx == yidx {
  			// Recurse when indexes are equal.
  			main := newMainNode(x, xhc, y, yhc, lev+w, gen)
  			iNode := &iNode{main: main, gen: gen}
  			return &mainNode{cNode: &cNode{bmp, []branch{iNode}, gen}}
  		}
  		if xidx < yidx {
  			return &mainNode{cNode: &cNode{bmp, []branch{x, y}, gen}}
  		}
  		return &mainNode{cNode: &cNode{bmp, []branch{y, x}, gen}}
  	}
  	l := list.Empty.Add(x).Add(y)
  	return &mainNode{lNode: &lNode{l}}
  }
docs: // newMainNode is a recursive constructor which creates a new mainNode. This
  // mainNode will consist of cNodes as long as the hashcode chunks of the two
  // keys are equal at the given level. If the level exceeds 2^w, an lNode is
  // created.