func NewDecoder(r io.Reader) *Decoder {
	reader := bufio.NewReader(r)
	return &Decoder{r: reader, stack: make([]interface{}, 0), memo: make(map[string]interface{})}
}
NewDecoder constructs a new Decoder which will decode the pickle stream in r.
package ogórek
import (
	"bufio"
	"bytes"
	"encoding/binary"
	"errors"
	"fmt"
	"io"
	"math"
	"math/big"
	"reflect"
	"strconv"
)
const (
	opMark           byte = '('  
	opStop                = '.'  
	opPop                 = '0'  
	opPopMark             = '1'  
	opDup                 = '2'  
	opFloat               = 'F'  
	opInt                 = 'I'  
	opBinint              = 'J'  
	opBinint1             = 'K'  
	opLong                = 'L'  
	opBinint2             = 'M'  
	opNone                = 'N'  
	opPersid              = 'P'  
	opBinpersid           = 'Q'  
	opReduce              = 'R'  
	opString              = 'S'  
	opBinstring           = 'T'  
	opShortBinstring      = 'U'  
	opUnicode             = 'V'  
	opBinunicode          = 'X'  
	opAppend              = 'a'  
	opBuild               = 'b'  
	opGlobal              = 'c'  
	opDict                = 'd'  
	opEmptyDict           = '}'  
	opAppends             = 'e'  
	opGet                 = 'g'  
	opBinget              = 'h'  
	opInst                = 'i'  
	opLongBinget          = 'j'  
	opList                = 'l'  
	opEmptyList           = ']'  
	opObj                 = 'o'  
	opPut                 = 'p'  
	opBinput              = 'q'  
	opLongBinput          = 'r'  
	opSetitem             = 's'  
	opTuple               = 't'  
	opEmptyTuple          = ')'  
	opSetitems            = 'u'  
	opBinfloat            = 'G'  
	opTrue  = "I01\n"  
	opFalse = "I00\n"  
	opProto    = '\x80'  
	opNewobj   = '\x81'  
	opExt1     = '\x82'  
	opExt2     = '\x83'  
	opExt4     = '\x84'  
	opTuple1   = '\x85'  
	opTuple2   = '\x86'  
	opTuple3   = '\x87'  
	opNewtrue  = '\x88'  
	opNewfalse = '\x89'  
	opLong1    = '\x8a'  
	opLong4    = '\x8b'  
	opShortBinUnicode = '\x8c'  
	opMemoize         = '\x94'  
	opFrame           = '\x95'  
)
var errNotImplemented = errors.New("unimplemented opcode")
var ErrInvalidPickleVersion = errors.New("invalid pickle version")
var errNoMarker = errors.New("no marker in stack")
var errStackUnderflow = errors.New("pickle: stack underflow")
type OpcodeError struct {
	Key byte
	Pos int
}
func (e OpcodeError) Error() string {
	return fmt.Sprintf("Unknown opcode %d (%c) at position %d: %q", e.Key, e.Key, e.Pos, e.Key)
}
type mark struct{}
type None struct{}
type Tuple []interface{}
type Decoder struct {
	r     *bufio.Reader
	stack []interface{}
	memo  map[string]interface{}
	buf bytes.Buffer
	line  []byte
}