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

extension type Class1(core::int it) {
  abstract extension-type-member representation-field get it() → core::int;
  constructor • = self::Class1|constructor#;
  constructor tearoff • = self::Class1|constructor#_#new#tearOff;
  constructor named1 = self::Class1|constructor#named1;
  constructor tearoff named1 = self::Class1|constructor#_#named1#tearOff;
  constructor named2 = self::Class1|constructor#named2;
  constructor tearoff named2 = self::Class1|constructor#_#named2#tearOff;
  constructor named3 = self::Class1|constructor#named3;
  constructor tearoff named3 = self::Class1|constructor#_#named3#tearOff;
  constructor named4 = self::Class1|constructor#named4;
  constructor tearoff named4 = self::Class1|constructor#_#named4#tearOff;
  constructor named5 = self::Class1|constructor#named5;
  constructor tearoff named5 = self::Class1|constructor#_#named5#tearOff;
  constructor named6 = self::Class1|constructor#named6;
  constructor tearoff named6 = self::Class1|constructor#_#named6#tearOff;
}
extension type Class2<T extends core::Object? = dynamic>(T% it) {
  abstract extension-type-member representation-field get it() → T%;
  constructor • = self::Class2|constructor#;
  constructor tearoff • = self::Class2|constructor#_#new#tearOff;
  constructor named1 = self::Class2|constructor#named1;
  constructor tearoff named1 = self::Class2|constructor#_#named1#tearOff;
  constructor named2 = self::Class2|constructor#named2;
  constructor tearoff named2 = self::Class2|constructor#_#named2#tearOff;
  constructor named3 = self::Class2|constructor#named3;
  constructor tearoff named3 = self::Class2|constructor#_#named3#tearOff;
  constructor named4 = self::Class2|constructor#named4;
  constructor tearoff named4 = self::Class2|constructor#_#named4#tearOff;
  constructor named5 = self::Class2|constructor#named5;
  constructor tearoff named5 = self::Class2|constructor#_#named5#tearOff;
  constructor named6 = self::Class2|constructor#named6;
  constructor tearoff named6 = self::Class2|constructor#_#named6#tearOff;
}
static extension-type-member method Class1|constructor#(core::int it) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class1|constructor#_#new#tearOff(core::int it) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#(it);
static extension-type-member method Class1|constructor#named1(core::int it, core::int additional) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class1|constructor#_#named1#tearOff(core::int it, core::int additional) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named1(it, additional);
static extension-type-member method Class1|constructor#named2(core::int it, core::int additional) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  {
    core::print(additional);
  }
  return #this;
}
static extension-type-member method Class1|constructor#_#named2#tearOff(core::int it, core::int additional) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named2(it, additional);
static extension-type-member method Class1|constructor#named3(core::int it) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class1|constructor#_#named3#tearOff(core::int it) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named3(it);
static extension-type-member method Class1|constructor#named4(core::int additional, core::int it) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class1|constructor#_#named4#tearOff(core::int additional, core::int it) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named4(additional, it);
static extension-type-member method Class1|constructor#named5(core::int additional, core::int it) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = it;
  {
    core::print(additional);
  }
  return #this;
}
static extension-type-member method Class1|constructor#_#named5#tearOff(core::int additional, core::int it) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named5(additional, it);
static extension-type-member method Class1|constructor#named6(core::String text) → self::Class1% /* erasure=core::int, declared=! */ {
  lowered final self::Class1% /* erasure=core::int, declared=! */ #this = text.{core::String::length}{core::int};
  return #this;
}
static extension-type-member method Class1|constructor#_#named6#tearOff(core::String text) → self::Class1% /* erasure=core::int, declared=! */
  return self::Class1|constructor#named6(text);
static extension-type-member method Class2|constructor#<T extends core::Object? = dynamic>(self::Class2|constructor#::T% it) → self::Class2<self::Class2|constructor#::T%>% /* erasure=self::Class2|constructor#::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#::T%>% /* erasure=self::Class2|constructor#::T%, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class2|constructor#_#new#tearOff<T extends core::Object? = dynamic>(self::Class2|constructor#_#new#tearOff::T% it) → self::Class2<self::Class2|constructor#_#new#tearOff::T%>% /* erasure=self::Class2|constructor#_#new#tearOff::T%, declared=! */
  return self::Class2|constructor#<self::Class2|constructor#_#new#tearOff::T%>(it);
static extension-type-member method Class2|constructor#named1<T extends core::Object? = dynamic>(self::Class2|constructor#named1::T% it, core::int additional) → self::Class2<self::Class2|constructor#named1::T%>% /* erasure=self::Class2|constructor#named1::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named1::T%>% /* erasure=self::Class2|constructor#named1::T%, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class2|constructor#_#named1#tearOff<T extends core::Object? = dynamic>(self::Class2|constructor#_#named1#tearOff::T% it, core::int additional) → self::Class2<self::Class2|constructor#_#named1#tearOff::T%>% /* erasure=self::Class2|constructor#_#named1#tearOff::T%, declared=! */
  return self::Class2|constructor#named1<self::Class2|constructor#_#named1#tearOff::T%>(it, additional);
static extension-type-member method Class2|constructor#named2<T extends core::Object? = dynamic>(self::Class2|constructor#named2::T% it, core::int additional) → self::Class2<self::Class2|constructor#named2::T%>% /* erasure=self::Class2|constructor#named2::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named2::T%>% /* erasure=self::Class2|constructor#named2::T%, declared=! */ #this = it;
  {
    core::print(additional);
  }
  return #this;
}
static extension-type-member method Class2|constructor#_#named2#tearOff<T extends core::Object? = dynamic>(self::Class2|constructor#_#named2#tearOff::T% it, core::int additional) → self::Class2<self::Class2|constructor#_#named2#tearOff::T%>% /* erasure=self::Class2|constructor#_#named2#tearOff::T%, declared=! */
  return self::Class2|constructor#named2<self::Class2|constructor#_#named2#tearOff::T%>(it, additional);
static extension-type-member method Class2|constructor#named3<T extends core::Object? = dynamic>(self::Class2|constructor#named3::T% it) → self::Class2<self::Class2|constructor#named3::T%>% /* erasure=self::Class2|constructor#named3::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named3::T%>% /* erasure=self::Class2|constructor#named3::T%, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class2|constructor#_#named3#tearOff<T extends core::Object? = dynamic>(self::Class2|constructor#_#named3#tearOff::T% it) → self::Class2<self::Class2|constructor#_#named3#tearOff::T%>% /* erasure=self::Class2|constructor#_#named3#tearOff::T%, declared=! */
  return self::Class2|constructor#named3<self::Class2|constructor#_#named3#tearOff::T%>(it);
static extension-type-member method Class2|constructor#named4<T extends core::Object? = dynamic>(core::int additional, self::Class2|constructor#named4::T% it) → self::Class2<self::Class2|constructor#named4::T%>% /* erasure=self::Class2|constructor#named4::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named4::T%>% /* erasure=self::Class2|constructor#named4::T%, declared=! */ #this = it;
  return #this;
}
static extension-type-member method Class2|constructor#_#named4#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|constructor#_#named4#tearOff::T% it) → self::Class2<self::Class2|constructor#_#named4#tearOff::T%>% /* erasure=self::Class2|constructor#_#named4#tearOff::T%, declared=! */
  return self::Class2|constructor#named4<self::Class2|constructor#_#named4#tearOff::T%>(additional, it);
static extension-type-member method Class2|constructor#named5<T extends core::Object? = dynamic>(core::int additional, self::Class2|constructor#named5::T% it) → self::Class2<self::Class2|constructor#named5::T%>% /* erasure=self::Class2|constructor#named5::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named5::T%>% /* erasure=self::Class2|constructor#named5::T%, declared=! */ #this = it;
  {
    core::print(additional);
  }
  return #this;
}
static extension-type-member method Class2|constructor#_#named5#tearOff<T extends core::Object? = dynamic>(core::int additional, self::Class2|constructor#_#named5#tearOff::T% it) → self::Class2<self::Class2|constructor#_#named5#tearOff::T%>% /* erasure=self::Class2|constructor#_#named5#tearOff::T%, declared=! */
  return self::Class2|constructor#named5<self::Class2|constructor#_#named5#tearOff::T%>(additional, it);
static extension-type-member method Class2|constructor#named6<T extends core::Object? = dynamic>(core::List<self::Class2|constructor#named6::T%> list) → self::Class2<self::Class2|constructor#named6::T%>% /* erasure=self::Class2|constructor#named6::T%, declared=! */ {
  lowered final self::Class2<self::Class2|constructor#named6::T%>% /* erasure=self::Class2|constructor#named6::T%, declared=! */ #this = list.{core::Iterable::first}{self::Class2|constructor#named6::T%};
  return #this;
}
static extension-type-member method Class2|constructor#_#named6#tearOff<T extends core::Object? = dynamic>(core::List<self::Class2|constructor#_#named6#tearOff::T%> list) → self::Class2<self::Class2|constructor#_#named6#tearOff::T%>% /* erasure=self::Class2|constructor#_#named6#tearOff::T%, declared=! */
  return self::Class2|constructor#named6<self::Class2|constructor#_#named6#tearOff::T%>(list);
