"""HYPOTHESIS: the settings applier FUN_18011dc50 ALREADY RAN this session. Evidence:
live model+0x1fd28=0x3c, +0x1fd49=0x96, +0x1fd54=0x1e0 and a mixed 0/1 pattern across
+0x1fd2c..+0x1fd48, none of which a zero-memset could produce, and the disp32 scan
found NO constructor writer for any of those displacements.
FALSIFIER: the model constructor (FUN_180111100 / FUN_18010cdc0, the only two functions
referencing vtable 0x18021c2a0) writes the block through a REBASED pointer (small disp),
which my disp32 scan would miss. Decompile both and look.
CONTROL: FUN_18011dbf0 is a known writer (+0x1fd1c) reached the same way.
"""
import traceback
try:
    for a, tag in [(0x180111100, "vtable-ref-1 (ctor?)"),
                   (0x18010cdc0, "vtable-ref-2 (ctor?)"),
                   (0x18011dc50, "GATE APPLIER"),
                   (0x18011dbf0, "TRADE_PILE_SIZE APPLIER"),
                   (0x180173e00, "settings completion callback")]:
        s = dec(a)
        print("\n" + "="*78)
        print("### %#x  %s   len=%d" % (a, tag, len(s)))
        print("="*78)
        print(s)
except Exception:
    traceback.print_exc()
