package ABC; message A { optional string name = 1; extensions 2 to max; extend B { optional A keyab = 11; } extend C { optional A keyac = 12; } extend D { optional A keyad = 13; } extend A { optional B keyba = 14; } extend C { optional B keybc = 15; } extend D { optional B keybd = 16; } extend A { optional C keyca = 17; } extend B { optional C keycb = 18; } extend D { optional C keycd = 19; } extend A { optional D keyda = 20; } extend B { optional D keydb = 21; } extend C { optional D keydc = 22; } } message B { optional string name = 1; extensions 2 to max; extend B { optional A keyab = 111; } extend C { optional A keyac = 112; } extend D { optional A keyad = 113; } extend A { optional B keyba = 114; } extend C { optional B keybc = 115; } extend D { optional B keybd = 116; } extend A { optional C keyca = 117; } extend B { optional C keycb = 118; } extend D { optional C keycd = 119; } extend A { optional D keyda = 120; } extend B { optional D keydb = 121; } extend C { optional D keydc = 122; } } message C { optional string name = 1; extensions 2 to max; extend B { optional A keyab = 211; } extend C { optional A keyac = 212; } extend D { optional A keyad = 213; } extend A { optional B keyba = 214; } extend C { optional B keybc = 215; } extend D { optional B keybd = 216; } extend A { optional C keyca = 217; } extend B { optional C keycb = 218; } extend D { optional C keycd = 219; } extend A { optional D keyda = 220; } extend B { optional D keydb = 221; } extend C { optional D keydc = 222; } } message D { optional string name = 1; extensions 2 to max; extend B { optional A keyab = 311; } extend C { optional A keyac = 312; } extend D { optional A keyad = 313; } extend A { optional B keyba = 314; } extend C { optional B keybc = 315; } extend D { optional B keybd = 316; } extend A { optional C keyca = 317; } extend B { optional C keycb = 318; } extend D { optional C keycd = 319; } extend A { optional D keyda = 320; } extend B { optional D keydb = 321; } extend C { optional D keydc = 322; } } extend A { repeated B keyab = 1001; repeated C keyac = 1002; repeated D keyad = 1003; } extend B { repeated C keybc = 1011; repeated D keybd = 1012; repeated A keyba = 1013; } extend C { repeated A keyca = 1021; repeated B keycb = 1022; repeated D keycd = 1023; } extend D { repeated A keyda = 1031; repeated B keydb = 1032; repeated C keydc = 1033; }