func UnmarshalJSONCaseInsensitive(v interface{}, stream io.Reader) error {
	var out interface{}
	decoder := json.NewDecoder(stream)
	decoder.UseNumber()
	err := decoder.Decode(&out)
	if err == io.EOF {
		return nil
	} else if err != nil {
		return err
	}
	return unmarshaler{
		caseInsensitive: true,
	}.unmarshalAny(reflect.ValueOf(v), out, "")
}
UnmarshalJSONCaseInsensitive reads a stream and unmarshals the result into the
object v. Ignores casing for structure members.
package jsonutil
import (
	"bytes"
	"encoding/base64"
	"encoding/json"
	"fmt"
	"io"
	"math/big"
	"reflect"
	"strings"
	"time"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awserr"
	"github.com/aws/aws-sdk-go/private/protocol"
)
var millisecondsFloat = new(big.Float).SetInt64(1e3)
func UnmarshalJSONError(v interface{}, stream io.Reader) error {
	var errBuf bytes.Buffer
	body := io.TeeReader(stream, &errBuf)
	err := json.NewDecoder(body).Decode(v)
	if err != nil {
		msg := "failed decoding error message"
		if err == io.EOF {
			msg = "error message missing"
			err = nil
		}
		return awserr.NewUnmarshalError(err, msg, errBuf.Bytes())
	}
	return nil
}
func UnmarshalJSON(v interface{}, stream io.Reader) error {
	var out interface{}
	decoder := json.NewDecoder(stream)
	decoder.UseNumber()
	err := decoder.Decode(&out)
	if err == io.EOF {
		return nil
	} else if err != nil {
		return err
	}
	return unmarshaler{}.unmarshalAny(reflect.ValueOf(v), out, "")
}