v1;
package reflect;
pkgpath reflect;
priority 3;
import math math "math";
import runtime runtime "runtime";
import strconv strconv "strconv";
import sync sync "sync";
import unsafe unsafe "unsafe";
init reflect reflect..import 3 math math..import 1 runtime runtime..import 1 strconv strconv..import 2;
func Append (s <type 1 "Value" <type 2 struct { .reflect.typ <type 3 *<type 4 ".reflect.commonType" <type 5 struct { .reflect.kind <type -5>; .reflect.align <type -1>; .reflect.fieldAlign <type -5>; .reflect._ <type -5>; .reflect.size <type -13>; .reflect.hash <type -7>; .reflect.hashfn <type 6 (? <type 7 "unsafe.Pointer" <type 8 *any>>, ? <type -13>)>; .reflect.equalfn <type 9 (? <type 7>, ? <type 7>, ? <type -13>)>; .reflect.string <type 10 *<type -16>>; ? <type 11 *<type 12 ".reflect.uncommonType" <type 13 struct { .reflect.name <type 14 *<type -16>>; .reflect.pkgPath <type 15 *<type -16>>; .reflect.methods <type 16 [] <type 17 ".reflect.method" <type 18 struct { .reflect.name <type 19 *<type -16>>; .reflect.pkgPath <type 20 *<type -16>>; .reflect.mtyp <type 21 *<type 22 ".reflect.runtimeType" <type 4>>>; .reflect.typ <type 21>; .reflect.tfn <type 7>; }>>>; }>
 func (t <type 23 *<type 12>>) .reflect.uncommon () <type 23>;
 func (t <type 23>) PkgPath () <type -16>;
 func (t <type 23>) Name () <type -16>;
 func (t <type 23>) Method (i <type -11>) (m <type 24 "Method" <type 25 struct { Name <type -16>; PkgPath <type -16>; Type <type 26 "Type" <type 27 interface { Align () <type -11>; FieldAlign () <type -11>; Method (? <type -11>) <type 24>; MethodByName (? <type -16>) (? <type 24>, ? <type -15>); NumMethod () <type -11>; Name () <type -16>; PkgPath () <type -16>; Size () <type -13>; String () <type -16>; .reflect.rawString () <type -16>; Kind () <type 28 "Kind" <type -12>
 func (k <type 28>) String () <type -16>;
>; Implements (u <type 26>) <type -15>; AssignableTo (u <type 26>) <type -15>; Bits () <type -11>; ChanDir () <type 29 "ChanDir" <type -11>
 func (d <type 29>) String () <type -16>;
>; IsVariadic () <type -15>; Elem () <type 26>; Field (i <type -11>) <type 30 "StructField" <type 31 struct { Name <type -16>; PkgPath <type -16>; Type <type 26>; Tag <type 32 "StructTag" <type -16>
 func (tag <type 32>) Get (key <type -16>) <type -16>;
>; Offset <type -13>; Index <type 33 [] <type -11>>; Anonymous <type -15>; }>>; FieldByIndex (index <type 34 [] <type -11>>) <type 30>; FieldByName (name <type -16>) (? <type 30>, ? <type -15>); FieldByNameFunc (match <type 35 (? <type -16>) <type -15>>) (? <type 30>, ? <type -15>); In (i <type -11>) <type 26>; Key () <type 26>; Len () <type -11>; NumField () <type -11>; NumIn () <type -11>; NumOut () <type -11>; Out (i <type -11>) <type 26>; .reflect.runtimeType () <type 36 *<type 22>>; .reflect.common () <type 37 *<type 4>>; .reflect.uncommon () <type 38 *<type 12>>; }>>; Func <type 1>; Index <type -11>; }>>);
 func (t <type 23>) NumMethod () <type -11>;
 func (t <type 23>) MethodByName (name <type -16>) (m <type 24>, ok <type -15>);
>>; .reflect.ptrToThis <type 21>; }>
 func (t <type 39 *<type 4>>) .reflect.toType () <type 26>;
 func (t <type 39>) .reflect.rawString () <type -16>;
 func (t <type 39>) String () <type -16>;
 func (t <type 39>) Size () <type -13>;
 func (t <type 39>) Bits () <type -11>;
 func (t <type 39>) Align () <type -11>;
 func (t <type 39>) FieldAlign () <type -11>;
 func (t <type 39>) Kind () <type 28>;
 func (t <type 39>) .reflect.common () <type 39>;
 func (t <type 39>) NumMethod () <type -11>;
 func (t <type 39>) Method (i <type -11>) (m <type 24>);
 func (t <type 39>) MethodByName (name <type -16>) (m <type 24>, ok <type -15>);
 func (t <type 39>) PkgPath () <type -16>;
 func (t <type 39>) Name () <type -16>;
 func (t <type 39>) ChanDir () <type 29>;
 func (t <type 39>) IsVariadic () <type -15>;
 func (t <type 39>) Elem () <type 26>;
 func (t <type 39>) Field (i <type -11>) <type 30>;
 func (t <type 39>) FieldByIndex (index <type 40 [] <type -11>>) <type 30>;
 func (t <type 39>) FieldByName (name <type -16>) (? <type 30>, ? <type -15>);
 func (t <type 39>) FieldByNameFunc (match <type 41 (? <type -16>) <type -15>>) (? <type 30>, ? <type -15>);
 func (t <type 39>) In (i <type -11>) <type 26>;
 func (t <type 39>) Key () <type 26>;
 func (t <type 39>) Len () <type -11>;
 func (t <type 39>) NumField () <type -11>;
 func (t <type 39>) NumIn () <type -11>;
 func (t <type 39>) NumOut () <type -11>;
 func (t <type 39>) Out (i <type -11>) <type 26>;
 func (t <type 39>) .reflect.runtimeType () <type 21>;
 func (ct <type 39>) .reflect.ptrTo () <type 39>;
 func (t <type 39>) Implements (u <type 26>) <type -15>;
 func (t <type 39>) AssignableTo (u <type 26>) <type -15>;
>>; .reflect.val <type 7>; ? <type 42 ".reflect.flag" <type -13>
 func (f <type 42>) .reflect.kind () <type 28>;
 func (f <type 42>) .reflect.mustBe (expected <type 28>);
 func (f <type 42>) .reflect.mustBeExported ();
 func (f <type 42>) .reflect.mustBeAssignable ();
>; }>
 func (v <type 1>) .reflect.iword () <type 43 ".reflect.iword" <type 7>>;
 func (v <type 1>) Addr () <type 1>;
 func (v <type 1>) Bool () <type -15>;
 func (v <type 1>) Bytes () <type 44 [] <type -20>>;
 func (v <type 1>) CanAddr () <type -15>;
 func (v <type 1>) CanSet () <type -15>;
 func (v <type 1>) Call (in <type 45 [] <type 1>>) <type 46 [] <type 1>>;
 func (v <type 1>) CallSlice (in <type 47 [] <type 1>>) <type 48 [] <type 1>>;
 func (v <type 1>) .reflect.call (method <type -16>, in <type 49 [] <type 1>>) <type 50 [] <type 1>>;
 func (v <type 1>) Cap () <type -11>;
 func (v <type 1>) Close ();
 func (v <type 1>) Complex () <type -18>;
 func (v <type 1>) Elem () <type 1>;
 func (v <type 1>) Field (i <type -11>) <type 1>;
 func (v <type 1>) FieldByIndex (index <type 51 [] <type -11>>) <type 1>;
 func (v <type 1>) FieldByName (name <type -16>) <type 1>;
 func (v <type 1>) FieldByNameFunc (match <type 52 (? <type -16>) <type -15>>) <type 1>;
 func (v <type 1>) Float () <type -10>;
 func (v <type 1>) Index (i <type -11>) <type 1>;
 func (v <type 1>) Int () <type -4>;
 func (v <type 1>) CanInterface () <type -15>;
 func (v <type 1>) Interface () (i <type 53 interface { }>);
 func (v <type 1>) InterfaceData () <type 54 [2 ] <type -13>>;
 func (v <type 1>) IsNil () <type -15>;
 func (v <type 1>) IsValid () <type -15>;
 func (v <type 1>) Kind () <type 28>;
 func (v <type 1>) Len () <type -11>;
 func (v <type 1>) MapIndex (key <type 1>) <type 1>;
 func (v <type 1>) MapKeys () <type 55 [] <type 1>>;
 func (v <type 1>) Method (i <type -11>) <type 1>;
 func (v <type 1>) NumMethod () <type -11>;
 func (v <type 1>) MethodByName (name <type -16>) <type 1>;
 func (v <type 1>) NumField () <type -11>;
 func (v <type 1>) OverflowComplex (x <type -18>) <type -15>;
 func (v <type 1>) OverflowFloat (x <type -10>) <type -15>;
 func (v <type 1>) OverflowInt (x <type -4>) <type -15>;
 func (v <type 1>) OverflowUint (x <type -8>) <type -15>;
 func (v <type 1>) Pointer () <type -13>;
 func (v <type 1>) Recv () (x <type 1>, ok <type -15>);
 func (v <type 1>) .reflect.recv (nb <type -15>) (val <type 1>, ok <type -15>);
 func (v <type 1>) Send (x <type 1>);
 func (v <type 1>) .reflect.send (x <type 1>, nb <type -15>) (selected <type -15>);
 func (v <type 1>) Set (x <type 1>);
 func (v <type 1>) SetBool (x <type -15>);
 func (v <type 1>) SetBytes (x <type 56 [] <type -20>>);
 func (v <type 1>) SetComplex (x <type -18>);
 func (v <type 1>) SetFloat (x <type -10>);
 func (v <type 1>) SetInt (x <type -4>);
 func (v <type 1>) SetLen (n <type -11>);
 func (v <type 1>) SetMapIndex (key <type 1>, val <type 1>);
 func (v <type 1>) SetUint (x <type -8>);
 func (v <type 1>) SetPointer (x <type 7>);
 func (v <type 1>) SetString (x <type -16>);
 func (v <type 1>) Slice (beg <type -11>, end <type -11>) <type 1>;
 func (v <type 1>) String () <type -16>;
 func (v <type 1>) TryRecv () (x <type 1>, ok <type -15>);
 func (v <type 1>) TrySend (x <type 1>) <type -15>;
 func (v <type 1>) Type () <type 26>;
 func (v <type 1>) Uint () <type -8>;
 func (v <type 1>) UnsafeAddr () <type -13>;
 func (v <type 1>) .reflect.assignTo (context <type -16>, dst <type 3>, target <type 57 *<type 58 interface { }>>) <type 1>;
>, x ...<type 1>) <type 1>;
func AppendSlice (s <type 1>, t <type 1>) <type 1>;
const Array <type 28> = 17 ;
const Bool <type 28> = 1 ;
const BothDir <type 29> = 3 ;
const Chan <type 28> = 18 ;
type <type 29>;
const Complex128 <type 28> = 16 ;
const Complex64 <type 28> = 15 ;
func Copy (dst <type 1>, src <type 1>) <type -11>;
func DeepEqual (a1 <type 59 interface { }>, a2 <type 59>) <type -15>;
const Float32 <type 28> = 13 ;
const Float64 <type 28> = 14 ;
const Func <type 28> = 19 ;
func Indirect (v <type 1>) <type 1>;
const Int <type 28> = 2 ;
const Int16 <type 28> = 4 ;
const Int32 <type 28> = 5 ;
const Int64 <type 28> = 6 ;
const Int8 <type 28> = 3 ;
const Interface <type 28> = 20 ;
const Invalid <type 28> = 0 ;
type <type 28>;
func MakeChan (typ <type 26>, buffer <type -11>) <type 1>;
func MakeMap (typ <type 26>) <type 1>;
func MakeSlice (typ <type 26>, len <type -11>, cap <type -11>) <type 1>;
const Map <type 28> = 21 ;
type <type 24>;
func Method$equal (key1 <type 8>, key2 <type 8>, key_size <type -13>) <type -15>;
func Method$hash (key <type 8>, key_size <type -13>) <type -13>;
func New (typ <type 26>) <type 1>;
func NewAt (typ <type 26>, p <type 7>) <type 1>;
const Ptr <type 28> = 22 ;
func PtrTo (t <type 26>) <type 26>;
const RecvDir <type 29> = 1 ;
const SendDir <type 29> = 2 ;
const Slice <type 28> = 23 ;
type <type 60 "SliceHeader" <type 61 struct { Data <type -13>; Len <type -11>; Cap <type -11>; }>>;
const String <type 28> = 24 ;
type <type 62 "StringHeader" <type 63 struct { Data <type -13>; Len <type -11>; }>>;
const Struct <type 28> = 25 ;
type <type 30>;
type <type 32>;
type <type 26>;
func TypeOf (i <type 64 interface { }>) <type 26>;
const Uint <type 28> = 7 ;
const Uint16 <type 28> = 9 ;
const Uint32 <type 28> = 10 ;
const Uint64 <type 28> = 11 ;
const Uint8 <type 28> = 8 ;
const Uintptr <type 28> = 12 ;
const UnsafePointer <type 28> = 26 ;
type <type 1>;
type <type 65 "ValueError" <type 66 struct { Method <type -16>; Kind <type 28>; }>
 func (e <type 67 *<type 65>>) Error () <type -16>;
>;
func ValueError$equal (key1 <type 8>, key2 <type 8>, key_size <type -13>) <type -15>;
func ValueError$hash (key <type 8>, key_size <type -13>) <type -13>;
func ValueOf (i <type 68 interface { }>) <type 1>;
func Zero (typ <type 26>) <type 1>;
checksum DD7720796E91D9D24ED12B75BDEA2A714D47B095;
