@ ProgramNode (location: (0...118))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...118))
    └── body: (length: 9)
        ├── @ CallNode (location: (0...1))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (0...1) = "a"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: variable_call
        │   └── name: "a"
        ├── @ CallNode (location: (13...14))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (13...14) = "b"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: variable_call
        │   └── name: "b"
        ├── @ CallNode (location: (16...17))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (16...17) = "c"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: variable_call
        │   └── name: "c"
        ├── @ CallNode (location: (28...29))
        │   ├── receiver: ∅
        │   ├── call_operator_loc: ∅
        │   ├── message_loc: (28...29) = "d"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: variable_call
        │   └── name: "d"
        ├── @ CallNode (location: (31...47))
        │   ├── receiver:
        │   │   @ CallNode (location: (31...32))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (31...32) = "e"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "e"
        │   ├── call_operator_loc: (45...46) = "."
        │   ├── message_loc: (46...47) = "f"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "f"
        ├── @ CallNode (location: (49...64))
        │   ├── receiver:
        │   │   @ CallNode (location: (49...50))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (49...50) = "g"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "g"
        │   ├── call_operator_loc: (62...63) = "."
        │   ├── message_loc: (63...64) = "h"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "h"
        ├── @ CallNode (location: (66...80))
        │   ├── receiver:
        │   │   @ CallNode (location: (66...67))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (66...67) = "i"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "i"
        │   ├── call_operator_loc: (78...79) = "."
        │   ├── message_loc: (79...80) = "j"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "j"
        ├── @ CallNode (location: (82...98))
        │   ├── receiver:
        │   │   @ CallNode (location: (82...83))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (82...83) = "k"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "k"
        │   ├── call_operator_loc: (96...97) = "."
        │   ├── message_loc: (97...98) = "l"
        │   ├── opening_loc: ∅
        │   ├── arguments: ∅
        │   ├── closing_loc: ∅
        │   ├── block: ∅
        │   ├── flags: ∅
        │   └── name: "l"
        └── @ CallNode (location: (100...118))
            ├── receiver:
            │   @ CallNode (location: (100...101))
            │   ├── receiver: ∅
            │   ├── call_operator_loc: ∅
            │   ├── message_loc: (100...101) = "m"
            │   ├── opening_loc: ∅
            │   ├── arguments: ∅
            │   ├── closing_loc: ∅
            │   ├── block: ∅
            │   ├── flags: variable_call
            │   └── name: "m"
            ├── call_operator_loc: (115...117) = "&."
            ├── message_loc: (117...118) = "n"
            ├── opening_loc: ∅
            ├── arguments: ∅
            ├── closing_loc: ∅
            ├── block: ∅
            ├── flags: safe_navigation
            └── name: "n"
