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

extension type A(core::int it) {
  abstract extension-type-member representation-field get it() → core::int;
  constructor • = self::A|constructor#;
  constructor tearoff • = self::A|constructor#_#new#tearOff;
}
extension type Ba(self::A% /* erasure=core::int, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::A% /* erasure=core::int, declared=! */;
  constructor • = self::Ba|constructor#;
  constructor tearoff • = self::Ba|constructor#_#new#tearOff;
}
extension type Bb(self::A? /* erasure=core::int? */ it) {
  abstract extension-type-member representation-field get it() → self::A? /* erasure=core::int? */;
  constructor • = self::Bb|constructor#;
  constructor tearoff • = self::Bb|constructor#_#new#tearOff;
}
extension type C<T extends core::Object? = dynamic>(T% it) {
  abstract extension-type-member representation-field get it() → T%;
  constructor • = self::C|constructor#;
  constructor tearoff • = self::C|constructor#_#new#tearOff;
}
extension type Da<T extends core::Object? = dynamic>(self::C<T%>% /* erasure=T%, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::C<T%>% /* erasure=T%, declared=! */;
  constructor • = self::Da|constructor#;
  constructor tearoff • = self::Da|constructor#_#new#tearOff;
}
extension type Db<T extends core::Object? = dynamic>(self::C<T?>% /* erasure=T?, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::C<T?>% /* erasure=T?, declared=! */;
  constructor • = self::Db|constructor#;
  constructor tearoff • = self::Db|constructor#_#new#tearOff;
}
extension type Dc<T extends core::Object? = dynamic>(self::C<T%>? /* erasure=T? */ it) {
  abstract extension-type-member representation-field get it() → self::C<T%>? /* erasure=T? */;
  constructor • = self::Dc|constructor#;
  constructor tearoff • = self::Dc|constructor#_#new#tearOff;
}
extension type E(core::int? it) {
  abstract extension-type-member representation-field get it() → core::int?;
  constructor • = self::E|constructor#;
  constructor tearoff • = self::E|constructor#_#new#tearOff;
}
extension type Fa(self::E% /* erasure=core::int?, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::E% /* erasure=core::int?, declared=! */;
  constructor • = self::Fa|constructor#;
  constructor tearoff • = self::Fa|constructor#_#new#tearOff;
}
extension type Fb(self::E? /* erasure=core::int? */ it) {
  abstract extension-type-member representation-field get it() → self::E? /* erasure=core::int? */;
  constructor • = self::Fb|constructor#;
  constructor tearoff • = self::Fb|constructor#_#new#tearOff;
}
extension type G<T extends core::Object? = dynamic>(T? it) {
  abstract extension-type-member representation-field get it() → T?;
  constructor • = self::G|constructor#;
  constructor tearoff • = self::G|constructor#_#new#tearOff;
}
extension type Ha<T extends core::Object? = dynamic>(self::G<T%>% /* erasure=T?, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::G<T%>% /* erasure=T?, declared=! */;
  constructor • = self::Ha|constructor#;
  constructor tearoff • = self::Ha|constructor#_#new#tearOff;
}
extension type Hb<T extends core::Object? = dynamic>(self::G<T?>% /* erasure=T?, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::G<T?>% /* erasure=T?, declared=! */;
  constructor • = self::Hb|constructor#;
  constructor tearoff • = self::Hb|constructor#_#new#tearOff;
}
extension type Hc<T extends core::Object? = dynamic>(self::G<T%>? /* erasure=T? */ it) {
  abstract extension-type-member representation-field get it() → self::G<T%>? /* erasure=T? */;
  constructor • = self::Hc|constructor#;
  constructor tearoff • = self::Hc|constructor#_#new#tearOff;
}
extension type I<T extends core::Object>(T it) {
  abstract extension-type-member representation-field get it() → T;
  constructor • = self::I|constructor#;
  constructor tearoff • = self::I|constructor#_#new#tearOff;
}
extension type Ja<T extends core::Object>(self::I<T>% /* erasure=T, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::I<T>% /* erasure=T, declared=! */;
  constructor • = self::Ja|constructor#;
  constructor tearoff • = self::Ja|constructor#_#new#tearOff;
}
extension type Jc<T extends core::Object>(self::I<T>? /* erasure=T? */ it) {
  abstract extension-type-member representation-field get it() → self::I<T>? /* erasure=T? */;
  constructor • = self::Jc|constructor#;
  constructor tearoff • = self::Jc|constructor#_#new#tearOff;
}
extension type K<T extends core::Object>(T? it) {
  abstract extension-type-member representation-field get it() → T?;
  constructor • = self::K|constructor#;
  constructor tearoff • = self::K|constructor#_#new#tearOff;
}
extension type La<T extends core::Object>(self::K<T>% /* erasure=T?, declared=! */ it) {
  abstract extension-type-member representation-field get it() → self::K<T>% /* erasure=T?, declared=! */;
  constructor • = self::La|constructor#;
  constructor tearoff • = self::La|constructor#_#new#tearOff;
}
extension type Lc<T extends core::Object>(self::K<T>? /* erasure=T? */ it) {
  abstract extension-type-member representation-field get it() → self::K<T>? /* erasure=T? */;
  constructor • = self::Lc|constructor#;
  constructor tearoff • = self::Lc|constructor#_#new#tearOff;
}
static extension-type-member method A|constructor#(core::int it) → self::A% /* erasure=core::int, declared=! */
  ;
static extension-type-member method A|constructor#_#new#tearOff(core::int it) → self::A% /* erasure=core::int, declared=! */
  return self::A|constructor#(it);
static extension-type-member method Ba|constructor#(self::A% /* erasure=core::int, declared=! */ it) → self::Ba% /* erasure=core::int, declared=! */
  ;
static extension-type-member method Ba|constructor#_#new#tearOff(self::A% /* erasure=core::int, declared=! */ it) → self::Ba% /* erasure=core::int, declared=! */
  return self::Ba|constructor#(it);
static extension-type-member method Bb|constructor#(self::A? /* erasure=core::int? */ it) → self::Bb% /* erasure=core::int?, declared=! */
  ;
static extension-type-member method Bb|constructor#_#new#tearOff(self::A? /* erasure=core::int? */ it) → self::Bb% /* erasure=core::int?, declared=! */
  return self::Bb|constructor#(it);
static extension-type-member method C|constructor#<T extends core::Object? = dynamic>(self::C|constructor#::T% it) → self::C<self::C|constructor#::T%>% /* erasure=self::C|constructor#::T%, declared=! */
  ;
static extension-type-member method C|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::C|constructor#_#new#tearOff::T% it) → self::C<self::C|constructor#_#new#tearOff::T%>% /* erasure=self::C|constructor#_#new#tearOff::T%, declared=! */
  return self::C|constructor#<self::C|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Da|constructor#<T extends core::Object? = dynamic>(self::C<self::Da|constructor#::T%>% /* erasure=self::Da|constructor#::T%, declared=! */ it) → self::Da<self::Da|constructor#::T%>% /* erasure=self::Da|constructor#::T%, declared=! */
  ;
static extension-type-member method Da|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Da|constructor#_#new#tearOff::T%>% /* erasure=self::Da|constructor#_#new#tearOff::T%, declared=! */ it) → self::Da<self::Da|constructor#_#new#tearOff::T%>% /* erasure=self::Da|constructor#_#new#tearOff::T%, declared=! */
  return self::Da|constructor#<self::Da|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Db|constructor#<T extends core::Object? = dynamic>(self::C<self::Db|constructor#::T?>% /* erasure=self::Db|constructor#::T?, declared=! */ it) → self::Db<self::Db|constructor#::T%>% /* erasure=self::Db|constructor#::T?, declared=! */
  ;
static extension-type-member method Db|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Db|constructor#_#new#tearOff::T?>% /* erasure=self::Db|constructor#_#new#tearOff::T?, declared=! */ it) → self::Db<self::Db|constructor#_#new#tearOff::T%>% /* erasure=self::Db|constructor#_#new#tearOff::T?, declared=! */
  return self::Db|constructor#<self::Db|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Dc|constructor#<T extends core::Object? = dynamic>(self::C<self::Dc|constructor#::T%>? /* erasure=self::Dc|constructor#::T? */ it) → self::Dc<self::Dc|constructor#::T%>% /* erasure=self::Dc|constructor#::T?, declared=! */
  ;
static extension-type-member method Dc|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::C<self::Dc|constructor#_#new#tearOff::T%>? /* erasure=self::Dc|constructor#_#new#tearOff::T? */ it) → self::Dc<self::Dc|constructor#_#new#tearOff::T%>% /* erasure=self::Dc|constructor#_#new#tearOff::T?, declared=! */
  return self::Dc|constructor#<self::Dc|constructor#_#new#tearOff::T%>(it);
static extension-type-member method E|constructor#(core::int? it) → self::E% /* erasure=core::int?, declared=! */
  ;
static extension-type-member method E|constructor#_#new#tearOff(core::int? it) → self::E% /* erasure=core::int?, declared=! */
  return self::E|constructor#(it);
static extension-type-member method Fa|constructor#(self::E% /* erasure=core::int?, declared=! */ it) → self::Fa% /* erasure=core::int?, declared=! */
  ;
static extension-type-member method Fa|constructor#_#new#tearOff(self::E% /* erasure=core::int?, declared=! */ it) → self::Fa% /* erasure=core::int?, declared=! */
  return self::Fa|constructor#(it);
static extension-type-member method Fb|constructor#_#new#tearOff(self::E? /* erasure=core::int? */ it) → self::Fb% /* erasure=core::int?, declared=! */
  return self::Fb|constructor#(it);
static extension-type-member method Fb|constructor#(self::E? /* erasure=core::int? */ it) → self::Fb% /* erasure=core::int?, declared=! */
  ;
static extension-type-member method G|constructor#<T extends core::Object? = dynamic>(self::G|constructor#::T? it) → self::G<self::G|constructor#::T%>% /* erasure=self::G|constructor#::T?, declared=! */
  ;
static extension-type-member method G|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::G|constructor#_#new#tearOff::T? it) → self::G<self::G|constructor#_#new#tearOff::T%>% /* erasure=self::G|constructor#_#new#tearOff::T?, declared=! */
  return self::G|constructor#<self::G|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Ha|constructor#<T extends core::Object? = dynamic>(self::G<self::Ha|constructor#::T%>% /* erasure=self::Ha|constructor#::T?, declared=! */ it) → self::Ha<self::Ha|constructor#::T%>% /* erasure=self::Ha|constructor#::T?, declared=! */
  ;
static extension-type-member method Ha|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Ha|constructor#_#new#tearOff::T%>% /* erasure=self::Ha|constructor#_#new#tearOff::T?, declared=! */ it) → self::Ha<self::Ha|constructor#_#new#tearOff::T%>% /* erasure=self::Ha|constructor#_#new#tearOff::T?, declared=! */
  return self::Ha|constructor#<self::Ha|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Hb|constructor#<T extends core::Object? = dynamic>(self::G<self::Hb|constructor#::T?>% /* erasure=self::Hb|constructor#::T?, declared=! */ it) → self::Hb<self::Hb|constructor#::T%>% /* erasure=self::Hb|constructor#::T?, declared=! */
  ;
static extension-type-member method Hb|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hb|constructor#_#new#tearOff::T?>% /* erasure=self::Hb|constructor#_#new#tearOff::T?, declared=! */ it) → self::Hb<self::Hb|constructor#_#new#tearOff::T%>% /* erasure=self::Hb|constructor#_#new#tearOff::T?, declared=! */
  return self::Hb|constructor#<self::Hb|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Hc|constructor#<T extends core::Object? = dynamic>(self::G<self::Hc|constructor#::T%>? /* erasure=self::Hc|constructor#::T? */ it) → self::Hc<self::Hc|constructor#::T%>% /* erasure=self::Hc|constructor#::T?, declared=! */
  ;
static extension-type-member method Hc|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::G<self::Hc|constructor#_#new#tearOff::T%>? /* erasure=self::Hc|constructor#_#new#tearOff::T? */ it) → self::Hc<self::Hc|constructor#_#new#tearOff::T%>% /* erasure=self::Hc|constructor#_#new#tearOff::T?, declared=! */
  return self::Hc|constructor#<self::Hc|constructor#_#new#tearOff::T%>(it);
static extension-type-member method I|constructor#<T extends core::Object>(self::I|constructor#::T it) → self::I<self::I|constructor#::T>% /* erasure=self::I|constructor#::T, declared=! */
  ;
static extension-type-member method I|constructor#_#new#tearOff<T extends core::Object>(self::I|constructor#_#new#tearOff::T it) → self::I<self::I|constructor#_#new#tearOff::T>% /* erasure=self::I|constructor#_#new#tearOff::T, declared=! */
  return self::I|constructor#<self::I|constructor#_#new#tearOff::T>(it);
static extension-type-member method Ja|constructor#<T extends core::Object>(self::I<self::Ja|constructor#::T>% /* erasure=self::Ja|constructor#::T, declared=! */ it) → self::Ja<self::Ja|constructor#::T>% /* erasure=self::Ja|constructor#::T, declared=! */
  ;
static extension-type-member method Ja|constructor#_#new#tearOff<T extends core::Object>(self::I<self::Ja|constructor#_#new#tearOff::T>% /* erasure=self::Ja|constructor#_#new#tearOff::T, declared=! */ it) → self::Ja<self::Ja|constructor#_#new#tearOff::T>% /* erasure=self::Ja|constructor#_#new#tearOff::T, declared=! */
  return self::Ja|constructor#<self::Ja|constructor#_#new#tearOff::T>(it);
static extension-type-member method Jc|constructor#<T extends core::Object>(self::I<self::Jc|constructor#::T>? /* erasure=self::Jc|constructor#::T? */ it) → self::Jc<self::Jc|constructor#::T>% /* erasure=self::Jc|constructor#::T?, declared=! */
  ;
static extension-type-member method Jc|constructor#_#new#tearOff<T extends core::Object>(self::I<self::Jc|constructor#_#new#tearOff::T>? /* erasure=self::Jc|constructor#_#new#tearOff::T? */ it) → self::Jc<self::Jc|constructor#_#new#tearOff::T>% /* erasure=self::Jc|constructor#_#new#tearOff::T?, declared=! */
  return self::Jc|constructor#<self::Jc|constructor#_#new#tearOff::T>(it);
static extension-type-member method K|constructor#<T extends core::Object>(self::K|constructor#::T? it) → self::K<self::K|constructor#::T>% /* erasure=self::K|constructor#::T?, declared=! */
  ;
static extension-type-member method K|constructor#_#new#tearOff<T extends core::Object>(self::K|constructor#_#new#tearOff::T? it) → self::K<self::K|constructor#_#new#tearOff::T>% /* erasure=self::K|constructor#_#new#tearOff::T?, declared=! */
  return self::K|constructor#<self::K|constructor#_#new#tearOff::T>(it);
static extension-type-member method La|constructor#<T extends core::Object>(self::K<self::La|constructor#::T>% /* erasure=self::La|constructor#::T?, declared=! */ it) → self::La<self::La|constructor#::T>% /* erasure=self::La|constructor#::T?, declared=! */
  ;
static extension-type-member method La|constructor#_#new#tearOff<T extends core::Object>(self::K<self::La|constructor#_#new#tearOff::T>% /* erasure=self::La|constructor#_#new#tearOff::T?, declared=! */ it) → self::La<self::La|constructor#_#new#tearOff::T>% /* erasure=self::La|constructor#_#new#tearOff::T?, declared=! */
  return self::La|constructor#<self::La|constructor#_#new#tearOff::T>(it);
static extension-type-member method Lc|constructor#<T extends core::Object>(self::K<self::Lc|constructor#::T>? /* erasure=self::Lc|constructor#::T? */ it) → self::Lc<self::Lc|constructor#::T>% /* erasure=self::Lc|constructor#::T?, declared=! */
  ;
static extension-type-member method Lc|constructor#_#new#tearOff<T extends core::Object>(self::K<self::Lc|constructor#_#new#tearOff::T>? /* erasure=self::Lc|constructor#_#new#tearOff::T? */ it) → self::Lc<self::Lc|constructor#_#new#tearOff::T>% /* erasure=self::Lc|constructor#_#new#tearOff::T?, declared=! */
  return self::Lc|constructor#<self::Lc|constructor#_#new#tearOff::T>(it);
static method testA(Never n) → dynamic
  ;
static method testBa(Never n) → dynamic
  ;
static method testC<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testDa<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testDb<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testDc<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testE(Never n) → dynamic
  ;
static method testF(Never n) → dynamic
  ;
static method testG<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testHa<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testHb<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testHc<S extends core::Object? = dynamic, U extends core::Object>(Never n) → dynamic
  ;
static method testI<U extends core::Object>(Never n) → dynamic
  ;
static method testJa<U extends core::Object>(Never n) → dynamic
  ;
static method testJc<U extends core::Object>(Never n) → dynamic
  ;
static method testK<U extends core::Object>(Never n) → dynamic
  ;
static method testLa<U extends core::Object>(Never n) → dynamic
  ;
static method testLc<U extends core::Object>(Never n) → dynamic
  ;
