code: func UnmarshalBinary(b []byte) (interface{}, error) {
  	if len(b) < 1 {
  		return nil, fmt.Errorf("compare: buffer to unmarshal is zero-length")
  	}
  	switch Type(b[0]) {
  	case TypeFalse, TypeTrue:
  		v := new(Bool)
  		return *v, v.UnmarshalBinary(b)
  	case TypeIntegers:
  		v := new(Integers)
  		return *v, v.UnmarshalBinary(b)
  	case TypeStrings:
  		v := new(Strings)
  		return *v, v.UnmarshalBinary(b)
  	case TypeRegexp:
  		v := new(Regexp)
  		return v, v.UnmarshalBinary(b)
  	case TypeCIDRs:
  		v := new(CIDRs)
  		return *v, v.UnmarshalBinary(b)
  	default:
  		return nil, fmt.Errorf("compare: unknown type %d", b[0])
  	}
  }
docs: // comparisons are encoded as a single type byte followed by zero or more bytes
  // that are specific to the comparison type.
  //
  // UINT8 - type
  // UINT8 0..n - bytes