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

import "dart:async";

typedef Bar<V extends core::Object? = dynamic, contravariant U extends self::A> = (U) → V%;
abstract class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  abstract method foo<T extends core::Object? = dynamic>(self::B<self::A::foo::T%> b) → self::A::foo::T%;
}
class B<X extends core::Object? = dynamic> extends core::Object {
  constructor •(self::B::X% x) → self::B<self::B::X%>
    : super core::Object::•()
    ;
}
class C<Y extends core::Object? = dynamic> extends core::Object {
  final field (self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar;
  constructor •((self::D<self::C::Y%>) → FutureOr<self::C::Y%>% bar) → self::C<self::C::Y%>
    : self::C::bar = bar, super core::Object::•()
    ;
}
abstract class D<W extends core::Object? = dynamic> extends core::Object implements self::A {
  synthetic constructor •() → self::D<self::D::W%>
    : super core::Object::•()
    ;
}
static final field self::C<core::int> baz = new self::C::•<core::int>((self::D<core::int> a) → FutureOr<core::int> {
  return a.{self::A::foo}<FutureOr<core::int>>(new self::B::•<FutureOr<core::int>>(asy::Future::value<core::int>(0))){(self::B<FutureOr<core::int>>) → FutureOr<core::int>};
});
static method main() → dynamic {}
