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

class Class extends core::Object {
  synthetic constructor •() → self::Class*
    ;
}
extension Extension on self::Class* {
  method method1 = self::Extension|method1;
  tearoff method1 = self::Extension|get#method1;
  method method2 = self::Extension|method2;
  tearoff method2 = self::Extension|get#method2;
  method method3 = self::Extension|method3;
  tearoff method3 = self::Extension|get#method3;
  method method4 = self::Extension|method4;
  tearoff method4 = self::Extension|get#method4;
}
static method Extension|method1(final self::Class* #this, {core::bool* b, core::String* s}) → void
  ;
static method Extension|get#method1(final self::Class* #this) → ({b: core::bool*, s: core::String*}) →* void
  return ({core::bool* b, core::String* s}) → void => self::Extension|method1(#this, b: b, s: s);
static method Extension|method2(final self::Class* #this, [core::bool* b, core::String* s]) → void
  ;
static method Extension|get#method2(final self::Class* #this) → ([core::bool*, core::String*]) →* void
  return ([core::bool* b, core::String* s]) → void => self::Extension|method2(#this, b, s);
static method Extension|method3(final self::Class* #this, core::int* i, {core::bool* b, core::String* s}) → void
  ;
static method Extension|get#method3(final self::Class* #this) → (core::int*, {b: core::bool*, s: core::String*}) →* void
  return (core::int* i, {core::bool* b, core::String* s}) → void => self::Extension|method3(#this, i, b: b, s: s);
static method Extension|method4(final self::Class* #this, core::int* i, [core::bool* b, core::String* s]) → void
  ;
static method Extension|get#method4(final self::Class* #this) → (core::int*, [core::bool*, core::String*]) →* void
  return (core::int* i, [core::bool* b, core::String* s]) → void => self::Extension|method4(#this, i, b, s);
static method main() → dynamic
  ;
