code: func NewClientContext(cred *sspi.Credentials) (*ClientContext, []byte, error) {
  	negotiate := make([]byte, PackageInfo.MaxToken)
  	c := sspi.NewClientContext(cred, sspi.ISC_REQ_CONNECTION)
  	authCompleted, n, err := updateContext(c, negotiate, nil)
  	if err != nil {
  		return nil, nil, err
  	}
  	if authCompleted {
  		c.Release()
  		return nil, nil, errors.New("ntlm authentication should not be completed yet")
  	}
  	if n == 0 {
  		c.Release()
  		return nil, nil, errors.New("ntlm token should not be empty")
  	}
  	negotiate = negotiate[:n]
  	return &ClientContext{sctxt: c}, negotiate, nil
  }
docs: // NewClientContext creates new client context. It uses client
  // credentials cred generated by AcquireCurrentUserCredentials or
  // AcquireUserCredentials and, if successful, outputs negotiate
  // message. Negotiate message needs to be sent to the server to
  // start NTLM negotiation sequence.