library;
import self as self;
import "dart:core" as core;

class B<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class C1<X extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic, Y extends (self::C1::Y) → self::C1::X = (core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class C2<X extends (self::C2::Y) → self::C2::X = (core::Null) → dynamic, Y extends (self::C2::X) → self::C2::Y = (core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class C3<X extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic, Y extends (self::C3::X, self::C3::Y) → self::C3::X = (core::Null, core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class C4<X extends (self::C4::X, self::C4::Y) → self::C4::X = (core::Null, core::Null) → dynamic, Y extends (self::C4::X, self::C4::Y) → self::C4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D1<X extends self::B<self::D1::X, self::D1::Y> = self::B<dynamic, dynamic>, Y extends (self::D1::Y) → self::D1::X = (core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D2<X extends self::B<self::D2::X, self::D2::Y> = self::B<dynamic, dynamic>, Y extends (self::D2::X) → self::D2::Y = (core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D3<X extends self::B<self::D3::X, self::D3::Y> = self::B<dynamic, dynamic>, Y extends (self::D3::X, self::D3::Y) → self::D3::X = (core::Null, core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class D4<X extends self::B<self::D4::X, self::D4::Y> = self::B<dynamic, dynamic>, Y extends (self::D4::X, self::D4::Y) → self::D4::Y = (core::Null, core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class E<X extends (self::E::X) → self::E::X = (core::Null) → dynamic> extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
static field self::C1<(core::Null) → dynamic, (core::Null) → dynamic> c1;
static field self::C2<(core::Null) → dynamic, (core::Null) → dynamic> c2;
static field self::C3<(core::Null, core::Null) → dynamic, (core::Null, core::Null) → dynamic> c3;
static field self::C4<(core::Null, core::Null) → dynamic, (core::Null, core::Null) → dynamic> c4;
static field self::D1<self::B<dynamic, dynamic>, (core::Null) → dynamic> d1;
static field self::D2<self::B<dynamic, dynamic>, (core::Null) → dynamic> d2;
static field self::D3<self::B<dynamic, dynamic>, (core::Null, core::Null) → dynamic> d3;
static field self::D4<self::B<dynamic, dynamic>, (core::Null, core::Null) → dynamic> d4;
static field self::E<(core::Null) → dynamic> e;
static method main() → dynamic {}
