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

abstract class I1 extends core::Object {
  synthetic constructor •() → self::I1
    ;
  abstract method f(core::int i) → void;
}
abstract class I2 extends core::Object {
  synthetic constructor •() → self::I2
    ;
  abstract method f(core::Object o) → void;
}
abstract class C extends core::Object implements self::I1, self::I2 {
  synthetic constructor •() → self::C
    ;
  abstract forwarding-stub method f(core::Object o) → void;
}
class D extends self::C {
  synthetic constructor •() → self::D
    ;
  method f(core::Object o) → void
    ;
}
abstract class E extends core::Object implements self::I2, self::I1 {
  synthetic constructor •() → self::E
    ;
}
class F extends self::E {
  synthetic constructor •() → self::F
    ;
  method f(core::Object o) → void
    ;
}
static method g1(self::C c) → void
  ;
static method g2(self::E e) → void
  ;
static method main() → dynamic
  ;
