library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

abstract class _B&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_B&Object&M1
    : super core::Object::•()
    ;
  mixin-super-stub method m() → dynamic
    return super.{self::M1::m}();
}
abstract class _B&Object&M1&M2 = self::_B&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_B&Object&M1&M2
    : super self::_B&Object&M1::•()
    ;
  mixin-super-stub method m() → dynamic
    return super.{self::M2::m}();
}
class B extends self::_B&Object&M1&M2 {
  constructor •(dynamic value) → self::B
    : super self::_B&Object&M1&M2::•()
    ;
}
abstract class M1 extends core::Object {
  synthetic constructor •() → self::M1
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print("M1");
}
abstract class M2 extends core::Object {
  synthetic constructor •() → self::M2
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print("M2");
}
abstract class _C&Object&M1 = core::Object with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1
    : super core::Object::•()
    ;
  mixin-super-stub method m() → dynamic
    return super.{self::M1::m}();
}
abstract class _C&Object&M1&M2 = self::_C&Object&M1 with self::M2 /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C&Object&M1&M2
    : super self::_C&Object&M1::•()
    ;
  mixin-super-stub method m() → dynamic
    return super.{self::M2::m}();
}
class C extends self::_C&Object&M1&M2 {
  constructor •(dynamic value) → self::C
    : super self::_C&Object&M1&M2::•()
    ;
}
abstract class G1<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::G1<self::G1::T%>
    : super core::Object::•()
    ;
  method m() → dynamic
    return core::print(self::G1::T%);
}
abstract class _D&Object&G1<S extends core::Object? = dynamic> = core::Object with self::G1<self::_D&Object&G1::S%> /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_D&Object&G1<self::_D&Object&G1::S%>
    : super core::Object::•()
    ;
  mixin-super-stub method m() → dynamic
    return super.{self::G1::m}();
}
class D<S extends core::Object? = dynamic> extends self::_D&Object&G1<self::D::S%> {
  synthetic constructor •() → self::D<self::D::S%>
    : super self::_D&Object&G1::•()
    ;
}
static method main() → dynamic {
  new self::B::•(null).{self::_B&Object&M1&M2::m}(){() → dynamic};
  new self::C::•(null).{self::_C&Object&M1&M2::m}(){() → dynamic};
  new self::D::•<dynamic>().{self::_D&Object&G1::m}(){() → dynamic};
  new self::D::•<core::int>().{self::_D&Object&G1::m}(){() → dynamic};
  new self::D::•<core::List<core::int>>().{self::_D&Object&G1::m}(){() → dynamic};
}
