func (e *TraceErr) OrigError() error {
	err := e.Err
	// this is not an endless loop because I'm being
	// paranoid, this is a safe protection against endless
	// loops
	for i := 0; i < maxHops; i++ {
		newerr, ok := err.(Error)
		if !ok {
			break
		}
		if newerr.OrigError() != err {
			err = newerr.OrigError()
		}
	}
	return err
}
// OrigError returns original wrapped error
OrigError returns original wrapped error
// OrigError returns original wrapped error
func (e *TraceErr) OrigError() error {
	err := e.Err
	for i := 0; i < maxHops; i++ {
		newerr, ok := err.(Error)
		if !ok {
			break
		}
		if newerr.OrigError() != err {
			err = newerr.OrigError()
		}
	}
	return err
}
func ( e * TraceErr ) OrigError ( ) error { err := e . Err for i := 0 ; i < maxHops ; i ++ { newerr , ok := err . ( Error ) if ! ok { break } if newerr . OrigError ( ) != err { err = newerr . OrigError ( ) } } return err }
OrigError returns original wrapped error
OrigError returns original wrapped error
// this is not an endless loop because I'm being // paranoid, this is a safe protection against endless // loops