# Agent brief — implement Blaze Component 0x000A / cmd 0x0005 (FUT hang) (clean-room) ## Clean-room rule (HARD) Derive ONLY from decrypted FIFA17.exe dumps + live /proc/PID/mem (`pgrep -x FIFA17.exe`, live 66672) + our /tmp/blaze_responder.log + blaze_responder_v3b.py. NEVER leaked EA source/headers. ## Where we are — the WIN, and the new hang This session cracked the ENTIRE FIFA17 login+connection gauntlet (each gate = a one-attr/one-value/one-type responder fix). FIFA now: connects, Authentication::login (accepted), full post-login online handshake, and the go-online connection STAYS ALIVE (the CONF-duration "30s" fix cleared "unable to connect"). **NEW HANG:** trying to enter FUT, FIFA spams **Component 0x000A / cmd 0x0005 — 11,459 times** in a tight retry loop, because our Blaze responder has NO handler for component 0x000A and replies EMPTY (16-byte REPLY, 0 payload) → FIFA is not satisfied → immediate resend → hang on a "connecting to FUT" spinner. ## The exact RPC (decoded from /tmp/blaze_rx/) - Fire2 frame: component=**0x000A**, command=**0x0005**, msgType=MESSAGE, userIndex=0. - Request payload (5 bytes) decodes via our heat2 to a single field: **`RSUB` (int) = 1**. (RSUB tag = 6-bit-packed; value 1.) - We reply: `TX ... msgType=REPLY 16B total (0 payload)` — EMPTY. FIFA rejects/retries. - Our responder's known components (blaze_responder_v3b.py ~:193): 0x0001 Auth, 0x0004 GameManager, 0x0005 Redirector, 0x0007 Stats, 0x0009 Util, 0x000F Messaging, 0x0019 AssocLists, 0x001C GameReporting, 0x7802 UserSessions. **0x000A is NOT handled.** (Blaze framework: 0x000A is commonly CensusData; confirm from FIFA's own component registry, do not assume.) ## Questions to answer 1. **What is component 0x000A and cmd 0x0005?** Find FIFA's Blaze component/command REGISTRY (the reflection tables mapping component id -> name and cmd id -> name + request/response TDF class). Name the component (CensusData? a FIFA/OSDK component?) and cmd 0x0005 (subscribe? getData? a poll?). Region hint: FifaOnline::* reflection names live ~0x143900000; the Blaze SDK component dispatch is ~0x146d00000-0x147000000. RSUB is a request field — find the request TDF class with an RSUB member. 2. **What RESPONSE TDF does FIFA's decoder for 0x000A/0x0005 expect**, and what field/value makes FIFA STOP retrying (proceed into FUT) vs an empty reply? Reverse the client-side response handler / the code that reacts to this RPC's reply. Is it a poll-until-a-flag, a subscription ack, a count/list it needs non-empty, or an error-retry on our malformed/empty TDF? 3. **Why 11,459 immediate retries?** Is our EMPTY reply being decoded as an error (so FIFA retries), or is FIFA polling a status until a specific value appears? Determine the minimal reply that ends the loop. 4. **The fix**: the exact blaze_responder_v3b.py handler — register component 0x000A, handle cmd 0x0005, return the correct REPLY TDF (fields + values). Give the Heat2/TDF structure precisely (tags, types, values) and the observable success signal (FIFA stops resending 0x000A/0x0005 and issues the NEXT new RPC / reaches the FUT screen). ## Method / dumps Our Blaze responder: blaze_responder_v3b.py (component dispatch, reply_to(), encode_tdf(), heat2.py). Heat2 TDF codec: heat2.py (tags 4-char 6-bit packed; types 0 int,1 str,2 blob,3 struct,4 list,5 map,6 union). Saved requests: /tmp/blaze_rx/rx_*_000a_0005.bin (21 bytes: 16 hdr + 5 payload). Log: /tmp/blaze_responder.log. Dump FIFA live: /proc/PID/mem, objdump --adjust-vma. To find the response schema, locate cmd 0x0005's response TDF class via FIFA's component reflection, or reverse the client handler that consumes the reply. Every claim needs a VA/bytes/disasm/log line. CLEAN-ROOM: our binaries+logs only.