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

class A<X extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::X*>*
    : super core::Object::•()
    ;
}
class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
    : super core::Object::•()
    ;
}
class D<X extends core::num* = dynamic, Y extends self::A<self::D::X*>* = dynamic> extends core::Object {
  synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
    : super core::Object::•()
    ;
}
class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
  synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
    : super core::Object::•()
    ;
}
class F<X extends core::num* = dynamic, Y extends () →* self::F::X* = dynamic> extends core::Object {
  synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
    : super core::Object::•()
    ;
}
static field dynamic lc = <self::C<dynamic, dynamic>*>[];
static field dynamic mc = <self::C<dynamic, dynamic>*, self::C<dynamic, dynamic>*>{};
static field dynamic ld = <self::D<dynamic, dynamic>*>[];
static field dynamic md = <self::D<dynamic, dynamic>*, self::D<dynamic, dynamic>*>{};
static field dynamic le = <self::E<dynamic, dynamic>*>[];
static field dynamic me = <self::E<dynamic, dynamic>*, self::E<dynamic, dynamic>*>{};
static field dynamic lf = <self::F<dynamic, dynamic>*>[];
static field dynamic mf = <self::F<dynamic, dynamic>*, self::F<dynamic, dynamic>*>{};
static method main() → dynamic {}
