func (l *ID) Cmp(r *ID) int {
	if r == nil {
		return -1
	}
	bigL := (*big.Int)(l)
	bigR := (*big.Int)(r)
	return bigL.Cmp(bigR)
}
/*
Cmp compares two IDs.
There are 3 possible return values.
-1 : Argument id is less than calling id.
0: Argument id and calling id are identical.
+1: Argument id is greater than calling id.
Comparison is done on the actual numerical value of the ids.
Not the string representation.
package id
import (
	"bytes"
	"math/big"
)
const (
	charset = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
	base    = 58
)
var (
	lut     [256]byte
	lowbyte = []byte("1")
	prefix  = []byte{'c', '4'}
	idlen   = 90
)
func init() {
	for i := 0; i < len(lut); i++ {
		lut[i] = 0xFF
	}
	for i := 0; i < len(charset); i++ {
		lut[charset[i]] = byte(i)
	}
}
type ID big.Int
func Parse(src string) (*ID, error) {
	return parseBytesID([]byte(src))
}
func (id *ID) String() (s string) {
	return string(id.bytes())
}
func (id *ID) Digest() Digest {
	return NewDigest((*big.Int)(id).Bytes())
}