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

class Class extends core::Object {
  field core::int field;
  final field core::int finalField;
  constructor •(core::int field, core::int finalField) → self::Class
    : self::Class::field = field, self::Class::finalField = finalField, super core::Object::•()
    ;
  get getter() → core::int
    return this.{self::Class::finalField}{core::int};
}
static method ifCase(dynamic o) → core::int {
  core::print("o = ${o}");
  {
    final synthesized dynamic #0#0 = o;
    final const synthesized core::int #0#1 = #C1;
    if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
      return 1;
    }
  }
  {
    final synthesized dynamic #1#0 = o;
    synthesized core::Object? #1#2;
    synthesized core::bool #1#2#isSet = false;
    final const synthesized core::int #1#4 = #C2;
    final const synthesized core::int #1#6 = #C3;
    if(#1#0 is ({f: core::Object?}) && ((let final dynamic #t1 = (#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t2 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t3 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t4 = (#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t5 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t6 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
      return 2;
    }
  }
  {
    final synthesized dynamic #2#0 = o;
    final const synthesized core::int #2#1 = #C4;
    final const synthesized core::int #2#3 = #C5;
    if(#C4 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) {
      return 3;
    }
  }
  {
    final synthesized dynamic #3#0 = o;
    synthesized core::Object? #3#2;
    synthesized core::bool #3#2#isSet = false;
    final const synthesized core::int #3#4 = #C6;
    if(#3#0 is ({g: core::Object?}) && (let final dynamic #t7 = (#3#2#isSet ?{core::Object?} #3#2 : let final dynamic #t8 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#3#2#isSet ?{core::Object?} #3#2 : let final dynamic #t9 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
      return 4;
    }
  }
  {
    final synthesized dynamic #4#0 = o;
    if(#4#0 is ({a: core::Object?}) && (let final dynamic #t10 = #4#0{({a: core::Object?})}.a{core::Object?}! in true)) {
      return 5;
    }
  }
  {
    final synthesized dynamic #5#0 = o;
    if(#5#0 is ({b: core::Object?}) && (!(#5#0{({b: core::Object?})}.b{core::Object?} == null) && true)) {
      return 6;
    }
  }
  {
    final synthesized dynamic #6#0 = o;
    final const synthesized core::int #6#3 = #C7;
    final const synthesized core::int #6#7 = #C1;
    if(#6#0 is core::List<dynamic> && #6#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C7 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
      return 7;
    }
  }
  {
    final synthesized dynamic #7#0 = o;
    final const synthesized core::int #7#3 = #C7;
    final const synthesized core::int #7#9 = #C2;
    if(#7#0 is core::List<dynamic> && #7#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C7 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C2 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
      return 8;
    }
  }
  {
    final synthesized dynamic #8#0 = o;
    synthesized core::int #8#2;
    synthesized core::bool #8#2#isSet = false;
    final const synthesized core::int #8#3 = #C2;
    final const synthesized core::int #8#9 = #C8;
    final const synthesized core::int #8#12 = #C3;
    if(#8#0 is core::List<dynamic> && (#8#2#isSet ?{core::int} #8#2 : let final dynamic #t11 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C2 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C8 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}((#8#2#isSet ?{core::int} #8#2 : let final dynamic #t12 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
      return 9;
    }
  }
  {
    final synthesized dynamic #9#0 = o;
    final const synthesized core::int #9#3 = #C7;
    final const synthesized core::int #9#7 = #C8;
    final const synthesized core::int #9#10 = #C3;
    synthesized core::List<dynamic> #9#12;
    synthesized core::bool #9#12#isSet = false;
    synthesized dynamic #9#15;
    synthesized core::bool #9#15#isSet = false;
    final const synthesized core::int #9#17 = #C1;
    synthesized dynamic #9#19;
    synthesized core::bool #9#19#isSet = false;
    if(#9#0 is core::List<dynamic> && #9#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C8 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t13 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t14 = (#9#15#isSet ?{dynamic} #9#15 : let final dynamic #t15 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t16 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#9#15#isSet ?{dynamic} #9#15 : let final dynamic #t17 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t18 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t19 = (#9#19#isSet ?{dynamic} #9#19 : let final dynamic #t20 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t21 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#9#19#isSet ?{dynamic} #9#19 : let final dynamic #t22 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t23 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
      return 10;
    }
  }
  {
    final synthesized dynamic #10#0 = o;
    synthesized core::int #10#2;
    synthesized core::bool #10#2#isSet = false;
    final const synthesized core::int #10#3 = #C2;
    final const synthesized core::int #10#7 = #C3;
    final const synthesized core::int #10#10 = #C4;
    synthesized core::List<dynamic> #10#12;
    synthesized core::bool #10#12#isSet = false;
    final const synthesized core::int #10#14 = #C7;
    synthesized dynamic #10#16;
    synthesized core::bool #10#16#isSet = false;
    final const synthesized core::int #10#18 = #C1;
    synthesized dynamic #10#20;
    synthesized core::bool #10#20#isSet = false;
    final const synthesized core::int #10#24 = #C5;
    if(#10#0 is core::List<dynamic> && (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t24 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C3 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C4 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t25 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t26 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t27 = (#10#16#isSet ?{dynamic} #10#16 : let final dynamic #t28 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t29 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t30 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#10#16#isSet ?{dynamic} #10#16 : let final dynamic #t31 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t32 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t33 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t34 = (#10#20#isSet ?{dynamic} #10#20 : let final dynamic #t35 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t36 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t37 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#10#20#isSet ?{dynamic} #10#20 : let final dynamic #t38 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t39 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t40 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}((#10#2#isSet ?{core::int} #10#2 : let final dynamic #t41 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
      return 11;
    }
  }
  {
    final synthesized dynamic #11#0 = o;
    final const synthesized core::int #11#3 = #C1;
    if(#11#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} #11#0{self::Class}.{self::Class::field}{core::int}) {
      return 12;
    }
  }
  {
    final synthesized dynamic #12#0 = o;
    final const synthesized core::int #12#3 = #C7;
    if(#12#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #12#0{self::Class}.{self::Class::finalField}{core::int}) {
      return 13;
    }
  }
  {
    final synthesized dynamic #13#0 = o;
    final const synthesized core::int #13#3 = #C2;
    final const synthesized core::int #13#6 = #C8;
    if(#13#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::field}{core::int} && #C8 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::getter}{core::int}) {
      return 14;
    }
  }
  {
    final synthesized dynamic #14#0 = o;
    if(#14#0 is self::Class) {
      return 15;
    }
  }
  {
    final synthesized dynamic #15#0 = o;
    final const synthesized core::String #15#1 = #C9;
    if(#15#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
      return 16;
    }
  }
  {
    final synthesized dynamic #16#0 = o;
    final const synthesized core::String #16#3 = #C10;
    if(#16#0 is ({e: core::Object?}) && !(#16#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
      return 17;
    }
  }
  {
    final synthesized dynamic #17#0 = o;
    synthesized core::int? #17#4;
    synthesized core::bool #17#4#isSet = false;
    final const synthesized core::int #17#2 = #C3;
    final const synthesized core::int #17#5 = #C11;
    if(#17#0 is core::Map<core::int, core::int> && (!((#17#4#isSet ?{core::int?} #17#4 : let final dynamic #t42 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #17#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && (let core::int? #t43 = #17#4#isSet ?{core::int?} #17#4 : let final dynamic #t44 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?} in #t43 == null ?{core::int} #t43 as{Unchecked} core::int : #t43{core::int}).{core::num::>=}(#C11){(core::num) → core::bool}) {
      return 18;
    }
  }
  {
    final synthesized dynamic #18#0 = o;
    final const synthesized core::int #18#3 = #C1;
    if(#18#0 is core::List<dynamic> && #18#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
      return 19;
    }
  }
  {
    final synthesized dynamic #19#0 = o;
    if(#19#0 is core::bool) {
      return 20;
    }
  }
  {
    final synthesized dynamic #20#0 = o;
    if(#20#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
      return 21;
    }
  }
  {
    final synthesized dynamic #21#0 = o;
    synthesized dynamic #21#4;
    synthesized core::bool #21#4#isSet = false;
    final const synthesized core::int #21#2 = #C12;
    if(#21#0 is core::Map<dynamic, dynamic> && (!((#21#4#isSet ?{dynamic} #21#4 : let final dynamic #t45 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #21#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#21#4#isSet ?{dynamic} #21#4 : let final dynamic #t46 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
      return 22;
    }
  }
  {
    final synthesized dynamic #22#0 = o;
    synthesized dynamic #22#4;
    synthesized core::bool #22#4#isSet = false;
    final const synthesized core::int #22#2 = #C1;
    if(#22#0 is core::Map<dynamic, dynamic> && (!((#22#4#isSet ?{dynamic} #22#4 : let final dynamic #t47 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #22#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#22#4#isSet ?{dynamic} #22#4 : let final dynamic #t48 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
      return 23;
    }
  }
  {
    final synthesized dynamic #23#0 = o;
    synthesized dynamic #23#4;
    synthesized core::bool #23#4#isSet = false;
    final const synthesized core::int #23#2 = #C7;
    {
      hoisted dynamic a;
      if(#23#0 is core::Map<dynamic, dynamic> && (!((#23#4#isSet ?{dynamic} #23#4 : let final dynamic #t49 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #23#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
        a = #23#4#isSet ?{dynamic} #23#4 : let final dynamic #t50 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
        {
          return 24;
        }
      }
    }
  }
  {
    final synthesized dynamic #24#0 = o;
    synthesized dynamic #24#4;
    synthesized core::bool #24#4#isSet = false;
    final const synthesized core::int #24#2 = #C2;
    {
      hoisted core::int b;
      if(#24#0 is core::Map<dynamic, dynamic> && (!((#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t51 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #24#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t52 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
        b = (#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t53 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
        {
          return 25;
        }
      }
    }
  }
  {
    final synthesized dynamic #25#0 = o;
    final const synthesized core::int #25#3 = #C12;
    final const synthesized core::int #25#6 = #C1;
    if(#25#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
      return 26;
    }
  }
  {
    final synthesized dynamic #26#0 = o;
    final const synthesized core::int #26#3 = #C12;
    {
      hoisted dynamic c;
      if(#26#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #26#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) {
        c = #26#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
        {
          return 27;
        }
      }
    }
  }
  {
    final synthesized dynamic #27#0 = o;
    final const synthesized core::int #27#3 = #C12;
    {
      hoisted dynamic d;
      if(#27#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #27#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t54 = d = #27#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
        return 28;
      }
    }
  }
  return 0;
}
static method ifCaseElse(dynamic o) → core::int {
  core::print("o = ${o}");
  {
    final synthesized dynamic #0#0 = o;
    final const synthesized core::int #0#1 = #C1;
    if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
      return 1;
    }
    else {
      final synthesized dynamic #1#0 = o;
      synthesized core::Object? #1#2;
      synthesized core::bool #1#2#isSet = false;
      final const synthesized core::int #1#4 = #C2;
      final const synthesized core::int #1#6 = #C3;
      if(#1#0 is ({f: core::Object?}) && ((let final dynamic #t55 = (#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t56 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t57 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t58 = (#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t59 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#1#2#isSet ?{core::Object?} #1#2 : let final dynamic #t60 = #1#2#isSet = true in #1#2 = #1#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
        return 2;
      }
      else {
        final synthesized dynamic #2#0 = o;
        final const synthesized core::int #2#1 = #C4;
        final const synthesized core::int #2#3 = #C5;
        if(#C4 =={core::num::==}{(core::Object) → core::bool} #2#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #2#0) {
          return 3;
        }
        else {
          final synthesized dynamic #3#0 = o;
          synthesized core::Object? #3#2;
          synthesized core::bool #3#2#isSet = false;
          final const synthesized core::int #3#4 = #C6;
          if(#3#0 is ({g: core::Object?}) && (let final dynamic #t61 = (#3#2#isSet ?{core::Object?} #3#2 : let final dynamic #t62 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#3#2#isSet ?{core::Object?} #3#2 : let final dynamic #t63 = #3#2#isSet = true in #3#2 = #3#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
            return 4;
          }
          else {
            final synthesized dynamic #4#0 = o;
            if(#4#0 is ({a: core::Object?}) && (let final dynamic #t64 = #4#0{({a: core::Object?})}.a{core::Object?}! in true)) {
              return 5;
            }
            else {
              final synthesized dynamic #5#0 = o;
              if(#5#0 is ({b: core::Object?}) && (!(#5#0{({b: core::Object?})}.b{core::Object?} == null) && true)) {
                return 6;
              }
              else {
                final synthesized dynamic #6#0 = o;
                final const synthesized core::int #6#3 = #C7;
                final const synthesized core::int #6#7 = #C1;
                if(#6#0 is core::List<dynamic> && #6#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C7 =={core::num::==}{(core::Object) → core::bool} #6#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
                  return 7;
                }
                else {
                  final synthesized dynamic #7#0 = o;
                  final const synthesized core::int #7#3 = #C7;
                  final const synthesized core::int #7#9 = #C2;
                  if(#7#0 is core::List<dynamic> && #7#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C7 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C2 =={core::num::==}{(core::Object) → core::bool} #7#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
                    return 8;
                  }
                  else {
                    final synthesized dynamic #8#0 = o;
                    synthesized core::int #8#2;
                    synthesized core::bool #8#2#isSet = false;
                    final const synthesized core::int #8#3 = #C2;
                    final const synthesized core::int #8#9 = #C8;
                    final const synthesized core::int #8#12 = #C3;
                    if(#8#0 is core::List<dynamic> && (#8#2#isSet ?{core::int} #8#2 : let final dynamic #t65 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C2 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C8 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #8#0{core::List<dynamic>}.{core::List::[]}((#8#2#isSet ?{core::int} #8#2 : let final dynamic #t66 = #8#2#isSet = true in #8#2 = #8#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
                      return 9;
                    }
                    else {
                      final synthesized dynamic #9#0 = o;
                      final const synthesized core::int #9#3 = #C7;
                      final const synthesized core::int #9#7 = #C8;
                      final const synthesized core::int #9#10 = #C3;
                      synthesized core::List<dynamic> #9#12;
                      synthesized core::bool #9#12#isSet = false;
                      synthesized dynamic #9#15;
                      synthesized core::bool #9#15#isSet = false;
                      final const synthesized core::int #9#17 = #C1;
                      synthesized dynamic #9#19;
                      synthesized core::bool #9#19#isSet = false;
                      if(#9#0 is core::List<dynamic> && #9#0{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(#C7){(core::num) → core::bool} && #C8 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #9#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t67 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t68 = (#9#15#isSet ?{dynamic} #9#15 : let final dynamic #t69 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t70 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#9#15#isSet ?{dynamic} #9#15 : let final dynamic #t71 = #9#15#isSet = true in #9#15 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t72 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t73 = (#9#19#isSet ?{dynamic} #9#19 : let final dynamic #t74 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t75 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#9#19#isSet ?{dynamic} #9#19 : let final dynamic #t76 = #9#19#isSet = true in #9#19 = (#9#12#isSet ?{core::List<dynamic>} #9#12 : let final dynamic #t77 = #9#12#isSet = true in #9#12 = #9#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
                        return 10;
                      }
                      else {
                        final synthesized dynamic #10#0 = o;
                        synthesized core::int #10#2;
                        synthesized core::bool #10#2#isSet = false;
                        final const synthesized core::int #10#3 = #C2;
                        final const synthesized core::int #10#7 = #C3;
                        final const synthesized core::int #10#10 = #C4;
                        synthesized core::List<dynamic> #10#12;
                        synthesized core::bool #10#12#isSet = false;
                        final const synthesized core::int #10#14 = #C7;
                        synthesized dynamic #10#16;
                        synthesized core::bool #10#16#isSet = false;
                        final const synthesized core::int #10#18 = #C1;
                        synthesized dynamic #10#20;
                        synthesized core::bool #10#20#isSet = false;
                        final const synthesized core::int #10#24 = #C5;
                        if(#10#0 is core::List<dynamic> && (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t78 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool} && #C3 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C4 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && ((#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t79 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t80 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t81 = (#10#16#isSet ?{dynamic} #10#16 : let final dynamic #t82 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t83 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t84 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#10#16#isSet ?{dynamic} #10#16 : let final dynamic #t85 = #10#16#isSet = true in #10#16 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t86 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t87 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t88 = (#10#20#isSet ?{dynamic} #10#20 : let final dynamic #t89 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t90 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t91 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#10#20#isSet ?{dynamic} #10#20 : let final dynamic #t92 = #10#20#isSet = true in #10#20 = (#10#12#isSet ?{core::List<dynamic>} #10#12 : let final dynamic #t93 = #10#12#isSet = true in #10#12 = #10#0{core::List<dynamic>}.{core::List::sublist}(2, (#10#2#isSet ?{core::int} #10#2 : let final dynamic #t94 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} #10#0{core::List<dynamic>}.{core::List::[]}((#10#2#isSet ?{core::int} #10#2 : let final dynamic #t95 = #10#2#isSet = true in #10#2 = #10#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic}) {
                          return 11;
                        }
                        else {
                          final synthesized dynamic #11#0 = o;
                          final const synthesized core::int #11#3 = #C1;
                          if(#11#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} #11#0{self::Class}.{self::Class::field}{core::int}) {
                            return 12;
                          }
                          else {
                            final synthesized dynamic #12#0 = o;
                            final const synthesized core::int #12#3 = #C7;
                            if(#12#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #12#0{self::Class}.{self::Class::finalField}{core::int}) {
                              return 13;
                            }
                            else {
                              final synthesized dynamic #13#0 = o;
                              final const synthesized core::int #13#3 = #C2;
                              final const synthesized core::int #13#6 = #C8;
                              if(#13#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::field}{core::int} && #C8 =={core::num::==}{(core::Object) → core::bool} #13#0{self::Class}.{self::Class::getter}{core::int}) {
                                return 14;
                              }
                              else {
                                final synthesized dynamic #14#0 = o;
                                if(#14#0 is self::Class) {
                                  return 15;
                                }
                                else {
                                  final synthesized dynamic #15#0 = o;
                                  final const synthesized core::String #15#1 = #C9;
                                  if(#15#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
                                    return 16;
                                  }
                                  else {
                                    final synthesized dynamic #16#0 = o;
                                    final const synthesized core::String #16#3 = #C10;
                                    if(#16#0 is ({e: core::Object?}) && !(#16#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
                                      return 17;
                                    }
                                    else {
                                      final synthesized dynamic #17#0 = o;
                                      synthesized core::int? #17#4;
                                      synthesized core::bool #17#4#isSet = false;
                                      final const synthesized core::int #17#2 = #C3;
                                      final const synthesized core::int #17#5 = #C11;
                                      if(#17#0 is core::Map<core::int, core::int> && (!((#17#4#isSet ?{core::int?} #17#4 : let final dynamic #t96 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #17#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && (let core::int? #t97 = #17#4#isSet ?{core::int?} #17#4 : let final dynamic #t98 = #17#4#isSet = true in #17#4 = #17#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?} in #t97 == null ?{core::int} #t97 as{Unchecked} core::int : #t97{core::int}).{core::num::>=}(#C11){(core::num) → core::bool}) {
                                        return 18;
                                      }
                                      else {
                                        final synthesized dynamic #18#0 = o;
                                        final const synthesized core::int #18#3 = #C1;
                                        if(#18#0 is core::List<dynamic> && #18#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1) {
                                          return 19;
                                        }
                                        else {
                                          final synthesized dynamic #19#0 = o;
                                          if(#19#0 is core::bool) {
                                            return 20;
                                          }
                                          else {
                                            final synthesized dynamic #20#0 = o;
                                            if(#20#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
                                              return 21;
                                            }
                                            else {
                                              final synthesized dynamic #21#0 = o;
                                              synthesized dynamic #21#4;
                                              synthesized core::bool #21#4#isSet = false;
                                              final const synthesized core::int #21#2 = #C12;
                                              if(#21#0 is core::Map<dynamic, dynamic> && (!((#21#4#isSet ?{dynamic} #21#4 : let final dynamic #t99 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #21#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#21#4#isSet ?{dynamic} #21#4 : let final dynamic #t100 = #21#4#isSet = true in #21#4 = #21#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
                                                return 22;
                                              }
                                              else {
                                                final synthesized dynamic #22#0 = o;
                                                synthesized dynamic #22#4;
                                                synthesized core::bool #22#4#isSet = false;
                                                final const synthesized core::int #22#2 = #C1;
                                                if(#22#0 is core::Map<dynamic, dynamic> && (!((#22#4#isSet ?{dynamic} #22#4 : let final dynamic #t101 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #22#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#22#4#isSet ?{dynamic} #22#4 : let final dynamic #t102 = #22#4#isSet = true in #22#4 = #22#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
                                                  return 23;
                                                }
                                                else {
                                                  final synthesized dynamic #23#0 = o;
                                                  synthesized dynamic #23#4;
                                                  synthesized core::bool #23#4#isSet = false;
                                                  final const synthesized core::int #23#2 = #C7;
                                                  {
                                                    hoisted dynamic a;
                                                    if(#23#0 is core::Map<dynamic, dynamic> && (!((#23#4#isSet ?{dynamic} #23#4 : let final dynamic #t103 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #23#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
                                                      a = #23#4#isSet ?{dynamic} #23#4 : let final dynamic #t104 = #23#4#isSet = true in #23#4 = #23#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
                                                      {
                                                        return 24;
                                                      }
                                                    }
                                                    else {
                                                      final synthesized dynamic #24#0 = o;
                                                      synthesized dynamic #24#4;
                                                      synthesized core::bool #24#4#isSet = false;
                                                      final const synthesized core::int #24#2 = #C2;
                                                      {
                                                        hoisted core::int b;
                                                        if(#24#0 is core::Map<dynamic, dynamic> && (!((#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t105 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #24#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t106 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
                                                          b = (#24#4#isSet ?{dynamic} #24#4 : let final dynamic #t107 = #24#4#isSet = true in #24#4 = #24#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
                                                          {
                                                            return 25;
                                                          }
                                                        }
                                                        else {
                                                          final synthesized dynamic #25#0 = o;
                                                          final const synthesized core::int #25#3 = #C12;
                                                          final const synthesized core::int #25#6 = #C1;
                                                          if(#25#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #25#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
                                                            return 26;
                                                          }
                                                          else {
                                                            final synthesized dynamic #26#0 = o;
                                                            final const synthesized core::int #26#3 = #C12;
                                                            {
                                                              hoisted dynamic c;
                                                              if(#26#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #26#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) {
                                                                c = #26#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
                                                                {
                                                                  return 27;
                                                                }
                                                              }
                                                              else {
                                                                final synthesized dynamic #27#0 = o;
                                                                final const synthesized core::int #27#3 = #C12;
                                                                {
                                                                  hoisted dynamic d;
                                                                  if(#27#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #27#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t108 = d = #27#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
                                                                    return 28;
                                                                  }
                                                                  else {
                                                                    return 0;
                                                                  }
                                                                }
                                                              }
                                                            }
                                                          }
                                                        }
                                                      }
                                                    }
                                                  }
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
static method switchStatement(dynamic o) → core::int {
  core::print("o = ${o}");
  #L1:
  {
    final synthesized dynamic #0#0 = o;
    final const synthesized core::int #0#1 = #C1;
    synthesized core::Object? #0#4;
    synthesized core::bool #0#4#isSet = false;
    final const synthesized core::int #0#6 = #C2;
    final const synthesized core::int #0#8 = #C3;
    final const synthesized core::int #0#10 = #C4;
    final const synthesized core::int #0#12 = #C5;
    synthesized core::Object? #0#15;
    synthesized core::bool #0#15#isSet = false;
    final const synthesized core::int #0#17 = #C6;
    synthesized core::Object? #0#20;
    synthesized core::bool #0#20#isSet = false;
    synthesized core::Object? #0#23;
    synthesized core::bool #0#23#isSet = false;
    synthesized core::int #0#26;
    synthesized core::bool #0#26#isSet = false;
    final const synthesized core::int #0#27 = #C7;
    synthesized dynamic #0#30;
    synthesized core::bool #0#30#isSet = false;
    synthesized dynamic #0#32;
    synthesized core::bool #0#32#isSet = false;
    synthesized core::bool #0#34;
    synthesized core::bool #0#34#isSet = false;
    synthesized core::bool #0#38;
    synthesized core::bool #0#38#isSet = false;
    final const synthesized core::int #0#41 = #C8;
    synthesized dynamic #0#43;
    synthesized core::bool #0#43#isSet = false;
    synthesized core::List<dynamic> #0#47;
    synthesized core::bool #0#47#isSet = false;
    synthesized dynamic #0#50;
    synthesized core::bool #0#50#isSet = false;
    synthesized dynamic #0#53;
    synthesized core::bool #0#53#isSet = false;
    synthesized core::List<dynamic> #0#58;
    synthesized core::bool #0#58#isSet = false;
    synthesized dynamic #0#61;
    synthesized core::bool #0#61#isSet = false;
    synthesized dynamic #0#64;
    synthesized core::bool #0#64#isSet = false;
    synthesized core::int #0#69;
    synthesized core::bool #0#69#isSet = false;
    final const synthesized core::String #0#76 = #C9;
    final const synthesized core::String #0#80 = #C10;
    synthesized core::int? #0#84;
    synthesized core::bool #0#84#isSet = false;
    final const synthesized core::int #0#85 = #C11;
    synthesized dynamic #0#92;
    synthesized core::bool #0#92#isSet = false;
    final const synthesized core::int #0#90 = #C12;
    synthesized dynamic #0#94;
    synthesized core::bool #0#94#isSet = false;
    synthesized dynamic #0#96;
    synthesized core::bool #0#96#isSet = false;
    synthesized dynamic #0#98;
    synthesized core::bool #0#98#isSet = false;
    {
      if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
        {
          return 1;
        }
      }
    }
    {
      if(#0#0 is ({f: core::Object?}) && ((let final dynamic #t109 = (#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t110 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t111 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t112 = (#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t113 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t114 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
        {
          return 2;
        }
      }
    }
    {
      if(#C4 =={core::num::==}{(core::Object) → core::bool} #0#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #0#0) {
        {
          return 3;
        }
      }
    }
    {
      if(#0#0 is ({g: core::Object?}) && (let final dynamic #t115 = (#0#15#isSet ?{core::Object?} #0#15 : let final dynamic #t116 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#0#15#isSet ?{core::Object?} #0#15 : let final dynamic #t117 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
        {
          return 4;
        }
      }
    }
    {
      if(#0#0 is ({a: core::Object?}) && (let final dynamic #t118 = (#0#20#isSet ?{core::Object?} #0#20 : let final dynamic #t119 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?})}.a{core::Object?})! in true)) {
        {
          return 5;
        }
      }
    }
    {
      if(#0#0 is ({b: core::Object?}) && (!((#0#23#isSet ?{core::Object?} #0#23 : let final dynamic #t120 = #0#23#isSet = true in #0#23 = #0#0{({b: core::Object?})}.b{core::Object?}) == null) && true)) {
        {
          return 6;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t121 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t122 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t123 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 7;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34 : let final dynamic #t124 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t125 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t126 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t127 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
        {
          return 8;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38 : let final dynamic #t128 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t129 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t130 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t131 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43 : let final dynamic #t132 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26 : let final dynamic #t133 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
        {
          return 9;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34 : let final dynamic #t134 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t135 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t136 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t137 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t138 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t139 = (#0#50#isSet ?{dynamic} #0#50 : let final dynamic #t140 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t141 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#50#isSet ?{dynamic} #0#50 : let final dynamic #t142 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t143 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t144 = (#0#53#isSet ?{dynamic} #0#53 : let final dynamic #t145 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t146 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#53#isSet ?{dynamic} #0#53 : let final dynamic #t147 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t148 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
        {
          return 10;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38 : let final dynamic #t149 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t150 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t151 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C4 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t152 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t153 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t154 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t155 = (#0#61#isSet ?{dynamic} #0#61 : let final dynamic #t156 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t157 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t158 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#61#isSet ?{dynamic} #0#61 : let final dynamic #t159 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t160 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t161 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t162 = (#0#64#isSet ?{dynamic} #0#64 : let final dynamic #t163 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t164 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t165 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#64#isSet ?{dynamic} #0#64 : let final dynamic #t166 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t167 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t168 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43 : let final dynamic #t169 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26 : let final dynamic #t170 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
        {
          return 11;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69 : let final dynamic #t171 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int})) {
        {
          return 12;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::finalField}{core::int}) {
        {
          return 13;
        }
      }
    }
    {
      if(#0#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69 : let final dynamic #t172 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int}) && #C8 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::getter}{core::int}) {
        {
          return 14;
        }
      }
    }
    {
      if(#0#0 is self::Class) {
        {
          return 15;
        }
      }
    }
    {
      if(#0#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
        {
          return 16;
        }
      }
    }
    {
      if(#0#0 is ({e: core::Object?}) && !(#0#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
        {
          return 17;
        }
      }
    }
    {
      if(#0#0 is core::Map<core::int, core::int> && (!((#0#84#isSet ?{core::int?} #0#84 : let final dynamic #t173 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #0#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && (let core::int? #t174 = #0#84#isSet ?{core::int?} #0#84 : let final dynamic #t175 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?} in #t174 == null ?{core::int} #t174 as{Unchecked} core::int : #t174{core::int}).{core::num::>=}(#C11){(core::num) → core::bool}) {
        {
          return 18;
        }
      }
    }
    {
      if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t176 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C1) {
        {
          return 19;
        }
      }
    }
    {
      if(#0#0 is core::bool) {
        {
          return 20;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
        {
          return 21;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#92#isSet ?{dynamic} #0#92 : let final dynamic #t177 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#0#92#isSet ?{dynamic} #0#92 : let final dynamic #t178 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
        {
          return 22;
        }
      }
    }
    {
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#94#isSet ?{dynamic} #0#94 : let final dynamic #t179 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#0#94#isSet ?{dynamic} #0#94 : let final dynamic #t180 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
        {
          return 23;
        }
      }
    }
    {
      hoisted dynamic a;
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#96#isSet ?{dynamic} #0#96 : let final dynamic #t181 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool}) && (let final dynamic #t182 = a = #0#96#isSet ?{dynamic} #0#96 : let final dynamic #t183 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic} in true)) {
        {
          return 24;
        }
      }
    }
    {
      hoisted core::int b;
      if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t184 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && ((#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t185 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int && (let final dynamic #t186 = b = (#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t187 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int in true))) {
        {
          return 25;
        }
      }
    }
    {
      if(#0#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
        {
          return 26;
        }
      }
    }
    {
      hoisted dynamic c;
      if(#0#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} (#0#20#isSet ?{core::Object?} #0#20 : let final dynamic #t188 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?, b: core::Object?})}.a{core::Object?}) && (let final dynamic #t189 = c = #0#23#isSet ?{core::Object?} #0#23 : let final dynamic #t190 = #0#23#isSet = true in #0#23 = #0#0{({a: core::Object?, b: core::Object?})}.b{core::Object?} in true)) {
        {
          return 27;
        }
      }
    }
    {
      hoisted dynamic d;
      if(#0#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t191 = d = #0#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
        {
          return 28;
        }
      }
    }
    {
      {
        {
          return 0;
        }
      }
    }
  }
}
static method switchExpression(dynamic o) → core::int {
  core::print("o = ${o}");
  return block {
    core::int #t192;
    final synthesized dynamic #0#0 = o;
    final const synthesized core::int #0#1 = #C1;
    synthesized core::Object? #0#4;
    synthesized core::bool #0#4#isSet = false;
    final const synthesized core::int #0#6 = #C2;
    final const synthesized core::int #0#8 = #C3;
    final const synthesized core::int #0#10 = #C4;
    final const synthesized core::int #0#12 = #C5;
    synthesized core::Object? #0#15;
    synthesized core::bool #0#15#isSet = false;
    final const synthesized core::int #0#17 = #C6;
    synthesized core::Object? #0#20;
    synthesized core::bool #0#20#isSet = false;
    synthesized core::Object? #0#23;
    synthesized core::bool #0#23#isSet = false;
    synthesized core::int #0#26;
    synthesized core::bool #0#26#isSet = false;
    final const synthesized core::int #0#27 = #C7;
    synthesized dynamic #0#30;
    synthesized core::bool #0#30#isSet = false;
    synthesized dynamic #0#32;
    synthesized core::bool #0#32#isSet = false;
    synthesized core::bool #0#34;
    synthesized core::bool #0#34#isSet = false;
    synthesized core::bool #0#38;
    synthesized core::bool #0#38#isSet = false;
    final const synthesized core::int #0#41 = #C8;
    synthesized dynamic #0#43;
    synthesized core::bool #0#43#isSet = false;
    synthesized core::List<dynamic> #0#47;
    synthesized core::bool #0#47#isSet = false;
    synthesized dynamic #0#50;
    synthesized core::bool #0#50#isSet = false;
    synthesized dynamic #0#53;
    synthesized core::bool #0#53#isSet = false;
    synthesized core::List<dynamic> #0#58;
    synthesized core::bool #0#58#isSet = false;
    synthesized dynamic #0#61;
    synthesized core::bool #0#61#isSet = false;
    synthesized dynamic #0#64;
    synthesized core::bool #0#64#isSet = false;
    synthesized core::int #0#69;
    synthesized core::bool #0#69#isSet = false;
    final const synthesized core::String #0#76 = #C9;
    final const synthesized core::String #0#80 = #C10;
    synthesized core::int? #0#84;
    synthesized core::bool #0#84#isSet = false;
    final const synthesized core::int #0#85 = #C11;
    synthesized dynamic #0#92;
    synthesized core::bool #0#92#isSet = false;
    final const synthesized core::int #0#90 = #C12;
    synthesized dynamic #0#94;
    synthesized core::bool #0#94#isSet = false;
    synthesized dynamic #0#96;
    synthesized core::bool #0#96#isSet = false;
    synthesized dynamic #0#98;
    synthesized core::bool #0#98#isSet = false;
    #L2:
    {
      {
        if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0) {
          #t192 = 1;
          break #L2;
        }
      }
      {
        if(#0#0 is ({f: core::Object?}) && ((let final dynamic #t193 = (#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t194 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t195 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::>=}(#C2){(core::num) → core::bool}) && (let final dynamic #t196 = (#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t197 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int in ((#0#4#isSet ?{core::Object?} #0#4 : let final dynamic #t198 = #0#4#isSet = true in #0#4 = #0#0{({f: core::Object?})}.f{core::Object?}) as core::int).{core::num::<}(#C3){(core::num) → core::bool}))) {
          #t192 = 2;
          break #L2;
        }
      }
      {
        if(#C4 =={core::num::==}{(core::Object) → core::bool} #0#0 || #C5 =={core::num::==}{(core::Object) → core::bool} #0#0) {
          #t192 = 3;
          break #L2;
        }
      }
      {
        if(#0#0 is ({g: core::Object?}) && (let final dynamic #t199 = (#0#15#isSet ?{core::Object?} #0#15 : let final dynamic #t200 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int in #C6 =={core::num::==}{(core::Object) → core::bool} (#0#15#isSet ?{core::Object?} #0#15 : let final dynamic #t201 = #0#15#isSet = true in #0#15 = #0#0{({g: core::Object?})}.g{core::Object?}) as core::int)) {
          #t192 = 4;
          break #L2;
        }
      }
      {
        if(#0#0 is ({a: core::Object?}) && (let final dynamic #t202 = (#0#20#isSet ?{core::Object?} #0#20 : let final dynamic #t203 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?})}.a{core::Object?})! in true)) {
          #t192 = 5;
          break #L2;
        }
      }
      {
        if(#0#0 is ({b: core::Object?}) && (!((#0#23#isSet ?{core::Object?} #0#23 : let final dynamic #t204 = #0#23#isSet = true in #0#23 = #0#0{({b: core::Object?})}.b{core::Object?}) == null) && true)) {
          #t192 = 6;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t205 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C7 && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t206 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t207 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
          #t192 = 7;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34 : let final dynamic #t208 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t209 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C7 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t210 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t211 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic})) {
          #t192 = 8;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38 : let final dynamic #t212 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t213 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t214 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t215 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43 : let final dynamic #t216 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26 : let final dynamic #t217 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
          #t192 = 9;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#34#isSet ?{core::bool} #0#34 : let final dynamic #t218 = #0#34#isSet = true in #0#34 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t219 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C7){(core::num) → core::bool}) && #C8 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t220 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t221 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t222 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t223 = (#0#50#isSet ?{dynamic} #0#50 : let final dynamic #t224 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t225 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#50#isSet ?{dynamic} #0#50 : let final dynamic #t226 = #0#50#isSet = true in #0#50 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t227 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t228 = (#0#53#isSet ?{dynamic} #0#53 : let final dynamic #t229 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t230 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#53#isSet ?{dynamic} #0#53 : let final dynamic #t231 = #0#53#isSet = true in #0#53 = (#0#47#isSet ?{core::List<dynamic>} #0#47 : let final dynamic #t232 = #0#47#isSet = true in #0#47 = #0#0{core::List<dynamic>}.{core::List::sublist}(2){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool}))) {
          #t192 = 10;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#38#isSet ?{core::bool} #0#38 : let final dynamic #t233 = #0#38#isSet = true in #0#38 = (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t234 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::>=}(#C2){(core::num) → core::bool}) && #C3 =={core::num::==}{(core::Object) → core::bool} (#0#30#isSet ?{dynamic} #0#30 : let final dynamic #t235 = #0#30#isSet = true in #0#30 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) && #C4 =={core::num::==}{(core::Object) → core::bool} (#0#32#isSet ?{dynamic} #0#32 : let final dynamic #t236 = #0#32#isSet = true in #0#32 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) && ((#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t237 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t238 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C7 && (let final dynamic #t239 = (#0#61#isSet ?{dynamic} #0#61 : let final dynamic #t240 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t241 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t242 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int in ((#0#61#isSet ?{dynamic} #0#61 : let final dynamic #t243 = #0#61#isSet = true in #0#61 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t244 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t245 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(0){(core::int) → dynamic}) as core::int).{core::num::<}(#C1){(core::num) → core::bool}) && (let final dynamic #t246 = (#0#64#isSet ?{dynamic} #0#64 : let final dynamic #t247 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t248 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t249 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int in ((#0#64#isSet ?{dynamic} #0#64 : let final dynamic #t250 = #0#64#isSet = true in #0#64 = (#0#58#isSet ?{core::List<dynamic>} #0#58 : let final dynamic #t251 = #0#58#isSet = true in #0#58 = #0#0{core::List<dynamic>}.{core::List::sublist}(2, (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t252 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int, [core::int?]) → core::List<dynamic>}).{core::List::[]}(1){(core::int) → dynamic}) as core::int).{core::num::>}(#C7){(core::num) → core::bool})) && #C5 =={core::num::==}{(core::Object) → core::bool} (#0#43#isSet ?{dynamic} #0#43 : let final dynamic #t253 = #0#43#isSet = true in #0#43 = #0#0{core::List<dynamic>}.{core::List::[]}((#0#26#isSet ?{core::int} #0#26 : let final dynamic #t254 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}).{core::num::-}(1){(core::num) → core::int}){(core::int) → dynamic})) {
          #t192 = 11;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C1 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69 : let final dynamic #t255 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int})) {
          #t192 = 12;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C7 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::finalField}{core::int}) {
          #t192 = 13;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class && #C2 =={core::num::==}{(core::Object) → core::bool} (#0#69#isSet ?{core::int} #0#69 : let final dynamic #t256 = #0#69#isSet = true in #0#69 = #0#0{self::Class}.{self::Class::field}{core::int}) && #C8 =={core::num::==}{(core::Object) → core::bool} #0#0{self::Class}.{self::Class::getter}{core::int}) {
          #t192 = 14;
          break #L2;
        }
      }
      {
        if(#0#0 is self::Class) {
          #t192 = 15;
          break #L2;
        }
      }
      {
        if(#0#0 =={core::Object::==}{(core::Object) → core::bool} #C9) {
          #t192 = 16;
          break #L2;
        }
      }
      {
        if(#0#0 is ({e: core::Object?}) && !(#0#0{({e: core::Object?})}.e{core::Object?} =={core::Object::==}{(core::Object) → core::bool} #C10)) {
          #t192 = 17;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<core::int, core::int> && (!((#0#84#isSet ?{core::int?} #0#84 : let final dynamic #t257 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?}) == null) || null is core::int && #0#0{core::Map<core::int, core::int>}.{core::Map::containsKey}(#C3){(core::Object?) → core::bool}) && (let core::int? #t258 = #0#84#isSet ?{core::int?} #0#84 : let final dynamic #t259 = #0#84#isSet = true in #0#84 = #0#0{core::Map<core::int, core::int>}.{core::Map::[]}(#C3){(core::Object?) → core::int?} in #t258 == null ?{core::int} #t258 as{Unchecked} core::int : #t258{core::int}).{core::num::>=}(#C11){(core::num) → core::bool}) {
          #t192 = 18;
          break #L2;
        }
      }
      {
        if(#0#0 is core::List<dynamic> && (#0#26#isSet ?{core::int} #0#26 : let final dynamic #t260 = #0#26#isSet = true in #0#26 = #0#0{core::List<dynamic>}.{core::List::length}{core::int}) =={core::num::==}{(core::Object) → core::bool} #C1) {
          #t192 = 19;
          break #L2;
        }
      }
      {
        if(#0#0 is core::bool) {
          #t192 = 20;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && o{core::Map<dynamic, dynamic>}.{core::Map::isEmpty}{core::bool}) {
          #t192 = 21;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#92#isSet ?{dynamic} #0#92 : let final dynamic #t261 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C12){(core::Object?) → core::bool}) && (#0#92#isSet ?{dynamic} #0#92 : let final dynamic #t262 = #0#92#isSet = true in #0#92 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C12){(core::Object?) → dynamic}) is core::int) {
          #t192 = 22;
          break #L2;
        }
      }
      {
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#94#isSet ?{dynamic} #0#94 : let final dynamic #t263 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C1){(core::Object?) → core::bool}) && (#0#94#isSet ?{dynamic} #0#94 : let final dynamic #t264 = #0#94#isSet = true in #0#94 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C1){(core::Object?) → dynamic}) is core::String) {
          #t192 = 23;
          break #L2;
        }
      }
      {
        hoisted dynamic a;
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#96#isSet ?{dynamic} #0#96 : let final dynamic #t265 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C7){(core::Object?) → core::bool})) {
          a = #0#96#isSet ?{dynamic} #0#96 : let final dynamic #t266 = #0#96#isSet = true in #0#96 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C7){(core::Object?) → dynamic};
          #t192 = 24;
          break #L2;
        }
      }
      {
        hoisted core::int b;
        if(#0#0 is core::Map<dynamic, dynamic> && (!((#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t267 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) == null) || null is dynamic && #0#0{core::Map<dynamic, dynamic>}.{core::Map::containsKey}(#C2){(core::Object?) → core::bool}) && (#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t268 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) is core::int) {
          b = (#0#98#isSet ?{dynamic} #0#98 : let final dynamic #t269 = #0#98#isSet = true in #0#98 = #0#0{core::Map<dynamic, dynamic>}.{core::Map::[]}(#C2){(core::Object?) → dynamic}) as{Unchecked} core::int;
          #t192 = 25;
          break #L2;
        }
      }
      {
        if(#0#0 is (core::Object?, core::Object?) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$1{core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #0#0{(core::Object?, core::Object?)}.$2{core::Object?}) {
          #t192 = 26;
          break #L2;
        }
      }
      {
        hoisted dynamic c;
        if(#0#0 is ({a: core::Object?, b: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} (#0#20#isSet ?{core::Object?} #0#20 : let final dynamic #t270 = #0#20#isSet = true in #0#20 = #0#0{({a: core::Object?, b: core::Object?})}.a{core::Object?})) {
          c = #0#23#isSet ?{core::Object?} #0#23 : let final dynamic #t271 = #0#23#isSet = true in #0#23 = #0#0{({a: core::Object?, b: core::Object?})}.b{core::Object?};
          #t192 = 27;
          break #L2;
        }
      }
      {
        hoisted dynamic d;
        if(#0#0 is ({c: core::Object?, d: core::Object?}) && #C12 =={core::num::==}{(core::Object) → core::bool} #0#0{({c: core::Object?, d: core::Object?})}.c{core::Object?} && (let final dynamic #t272 = d = #0#0{({c: core::Object?, d: core::Object?})}.d{core::Object?} in true) && d is core::int) {
          #t192 = 28;
          break #L2;
        }
      }
      {
        if(true) {
          #t192 = 0;
          break #L2;
        }
      }
    }
  } =>#t192;
}
static method test(dynamic expected, dynamic value) → dynamic {
  self::expect(expected, self::ifCase(value));
  self::expect(expected, self::ifCaseElse(value));
  self::expect(expected, self::switchStatement(value));
  self::expect(expected, self::switchExpression(value));
}
static method main() → dynamic {
  self::test(0, 0);
  self::test(1, 1);
  self::test(2, ({f: 3}));
  self::test(2, ({f: 4}));
  self::test(3, 6);
  self::test(3, 7);
  self::test(4, ({g: 8}));
  self::test(5, ({a: 1}));
  self::test(6, ({b: 2}));
  self::test(0, ({b: null}));
  self::test(0, core::_GrowableList::_literal2<core::int>(1, 3));
  self::test(7, core::_GrowableList::_literal2<core::int>(1, 2));
  self::test(8, core::_GrowableList::_literal2<core::int>(2, 3));
  self::test(8, core::_GrowableList::_literal3<core::int>(2, 3, 4));
  self::test(8, core::_GrowableList::_literal4<core::int>(2, 3, 4, 5));
  self::test(9, core::_GrowableList::_literal3<core::int>(3, 4, 5));
  self::test(9, core::_GrowableList::_literal4<core::int>(3, 4, 6, 5));
  self::test(10, core::_GrowableList::_literal4<core::int>(4, 5, 0, 3));
  self::test(11, core::_GrowableList::_literal5<core::int>(5, 6, 0, 3, 7));
  self::test(12, new self::Class::•(1, 0));
  self::test(12, new self::Class::•(1, 1));
  self::test(12, new self::Class::•(1, 2));
  self::test(13, new self::Class::•(0, 2));
  self::test(13, new self::Class::•(2, 2));
  self::test(14, new self::Class::•(3, 4));
  self::test(15, new self::Class::•(3, 5));
  self::test(15, new self::Class::•(4, 5));
  self::test(16, "foo");
  self::test(17, ({e: "baz"}));
  self::test(0, ({e: "bar"}));
  self::test(18, <core::int, core::int>{5: 16});
  self::test(18, <core::int, core::int>{5: 17});
  self::test(19, core::_GrowableList::_literal1<core::bool>(true));
  self::test(19, core::_GrowableList::_literal1<core::String>("foo"));
  self::test(20, true);
  self::test(20, false);
  self::test(21, <dynamic, dynamic>{});
  self::test(22, <core::int, core::int>{0: 0});
  self::test(22, <core::int, core::int>{0: 1});
  self::test(0, <core::int, core::String>{0: "foo"});
  self::test(23, <core::int, core::String>{1: "foo"});
  self::test(23, <core::int, core::String>{1: "foo", 2: "bar"});
  self::test(0, <core::int, core::int>{1: 0});
  self::test(24, <core::int, core::String>{2: "foo"});
  self::test(24, <core::int, core::int>{2: 0});
  self::test(25, <core::int, core::int>{3: 0});
  self::test(0, <core::int, core::String>{3: "foo"});
  self::test(26, (0, 1));
  self::test(27, ({a: 0, b: 1}));
  self::test(27, ({a: 0, b: "foo"}));
  self::test(28, ({c: 0, d: 1}));
  self::test(28, ({c: 0, d: 2}));
  self::test(0, ({c: 0, d: "foo"}));
  core::print("success");
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  core::print("${expected} = ${actual} ?");
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual)) {
    throw "Expected ${expected}, actual ${actual}";
  }
}

constants  {
  #C1 = 1
  #C2 = 3
  #C3 = 5
  #C4 = 6
  #C5 = 7
  #C6 = 8
  #C7 = 2
  #C8 = 4
  #C9 = "foo"
  #C10 = "bar"
  #C11 = 16
  #C12 = 0
}

Extra constant evaluation status:
Evaluated: LogicalExpression @ org-dartlang-testcase:///caching.dart:66:26 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:78:16 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:81:16 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:84:16 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:87:16 -> BoolConstant(true)
Evaluated: LogicalExpression @ org-dartlang-testcase:///caching.dart:138:33 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:146:23 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:148:23 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:150:23 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:152:23 -> BoolConstant(true)
Evaluated: LogicalExpression @ org-dartlang-testcase:///caching.dart:202:22 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:210:12 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:212:12 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:214:12 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:216:12 -> BoolConstant(true)
Evaluated: LogicalExpression @ org-dartlang-testcase:///caching.dart:249:17 -> BoolConstant(false)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:253:7 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:254:7 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:255:7 -> BoolConstant(true)
Evaluated: IsExpression @ org-dartlang-testcase:///caching.dart:256:7 -> BoolConstant(true)
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:275:11 -> RecordConstant(const ({f: 3}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:276:11 -> RecordConstant(const ({f: 4}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:279:11 -> RecordConstant(const ({g: 8}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:281:11 -> RecordConstant(const ({a: 1}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:282:11 -> RecordConstant(const ({b: 2}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:283:11 -> RecordConstant(const ({b: null}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:305:12 -> RecordConstant(const ({e: "baz"}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:306:11 -> RecordConstant(const ({e: "bar"}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:329:12 -> RecordConstant(const (0, 1))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:330:12 -> RecordConstant(const ({a: 0, b: 1}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:331:12 -> RecordConstant(const ({a: 0, b: "foo"}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:332:12 -> RecordConstant(const ({c: 0, d: 1}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:333:12 -> RecordConstant(const ({c: 0, d: 2}))
Evaluated: RecordLiteral @ org-dartlang-testcase:///caching.dart:334:11 -> RecordConstant(const ({c: 0, d: "foo"}))
Extra constant evaluation: evaluated: 3095, effectively constant: 34
