
    QLLj{p                       d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ  e
e      j                         j                  d   Zedz  Zed	z  Zed
z  Zej(                  j+                  d eedz               ddlmZmZmZ dZdZdZdZdZdZ d#dZ!d$dZ"d%dZ#d&dZ$d'dZ%d(dZ&d)dZ'd)dZ(d*dZ)d+dZ*d,dZ+d-dZ,d.dZ-d/d Z.d0d!Z/e0d"k(  r e/        yy)1a;  Consolidate the generic object/display VM stream producer frontier.

The generic runner at 0x00402321 is now grounded in several separate reviews:
manual movement overlap, object +0xec payloads, active-object delayed scripts,
display/battle VM child streams, and save-selector/selected-root helpers.

This report keeps those surfaces in one place and makes the boundary explicit:
which paths write or feed object +0x40, which paths are only consumers/helpers,
and whether any path currently promotes to a scene/map transition, encounter,
or selected-root route producer.
    )annotationsN)Counter)Path)Any   outwebzHwanse2.exetools)offset_to_varead_sectionsva_to_offseti!#@ 8D i`#@ iy@ iC i/C c                V    t        j                  | dd      S t        |       d      S )N T)quote)htmlescapestrvalues    9tools/build_generic_vm_stream_producer_frontier_review.pyhr   )   s%    ;;U]r$GGE
$GG    c                    | d S d| dS )N0x08x r   s    r   hxr   -   s    =465+&66r   c                p    | j                         s|S t        j                  | j                  d            S )Nutf-8encoding)existsjsonloads	read_text)pathfallbacks     r   	load_jsonr)   1   s*    ;;=::dnngn677r   c                    t        t        | z  i       }t        |t              si S |j	                  d      }t        |t              r|S |S )Nsummary)r)   OUT
isinstancedictget)namedatar+   s      r   
summary_ofr2   7   sC    S4Z$DdD!	hhy!G $/79T9r   c                r    | D ]2  }t        |d         }|t        |d         z   }||cxk  r	|k  s.|c S  4 y )Nrawraw_sizeint)sectionsoffsetsectionstartends        r   section_for_offsetr=   ?   sO     GEN#c'*-..F S N !
 r   c                r    | D ]2  }t        |d         }|t        |d         z   }||cxk  r	|k  s.|c S  4 y )Nvar5   r6   )r8   r?   r:   r;   r<   s        r   section_for_var@   H   sO     GDM"c'*-..BN 
 r   c                &   g }t        d |D        d       }|s|S t        |d         }|t        |d         z   }t        |d         }| || }t        dt        dt	        |      dz
              D ]  }	||	   dk7  rt        j                  d||	d	z         d   }
||	z   }|dz   |
z   }||k7  r<|j                  |t        |      t        |      d
| t        |||	z   dz
        t        |||	z   dz          j                  d      t        |      d        |S )Nc              3  J   K   | ]  }|j                  d       dk(  s|  yw)r0   .textN)r/   ).0r:   s     r   	<genexpr>z$find_direct_calls.<locals>.<genexpr>S   s      SWGKK4G74RSs   ##r4   r5   r?   r         z<ir   rC          )callVa	callVaHextargetVaHexr:   
contextHexclassification)nextr7   rangemaxlenstructunpack_fromappendr   minhexclassify_call_site)exer8   	target_varowstext	raw_startraw_endtext_var1   indexrelcall_vadests                r   find_direct_callsre   Q   s?   !#DSSUYZDDK I#d:.//G$t*oGy!Dq#aTQ/0 
;$  tUQY7:E/{S 9![!)}"!#iU1BR1G"H3wXadiXilnXnKopttuxy"4W"=		

$ Kr   c                >   t        j                  d|      }g }| j                  |      }|dk7  rnt        ||      }t	        ||      }|r9|7|j                  |t        |      |j                  d      t        |      d       | j                  ||dz         }|dk7  rn|S )Nz<Ir0   )refVarefVaHexr:   rO   r   )	rT   packfindr=   r   rV   r   r/   classify_pointer_ref)rZ   r8   r[   needler\   posr:   ref_vas           r   find_dword_refsrp   o   s    [[y)F!#D
((6
C
)$Xs3h,v)KK# "6
&{{62&:6&B	 hhvsQw' ) Kr   c                N    t        ||      }|y| |||z    j                  d      S )Nr   rJ   )r   rX   )rZ   r8   r?   sizer9   s        r   
read_bytesrs      s2    (B'F~v&**3//r   c                    dddddddddddd	}|j                         D ]  \  }}t        | |z
        d
k  s|c S  d| cxk  rdk  ry d| cxk  rdk  ry d| cxk  rdk  ry d| cxk  rdk  ry yy)Nznested-runner-wrapper-self-callz/opcode-0x2a-linked-object-script-fanout-restorez2opcode-0x2a-linked-object-script-fanout-persistentz#opcode-0x5e-transient-object-createz)generic-object-script-child/linked-runnerz active-object-script-update-loop"active-object-delayed-script-routez active-object-list-script-runner)i#@ iX@ iX@ iz@ iw@ ix@ i-/C i0C i0C i1C i1C     p@ P@ $generic-object-script-handler-familyi /C i 2C z field-active-object-script-routei @ i @ z'save-selector/generic-vm-handler-familyi A i A z'display-or-event-object-consumer-familyunclassified-direct-runner-call)itemsabs)rc   knownr?   labels       r   rY   rY      s    5EH9??68866E [[] 	Ew|!L W*
*5 +W*
*1 +W*
*8 +W*
*8 +,r   c                    d| cxk  rdk  ry d| cxk  rdk  ry d| cxk  rdk  ry	 d
| cxk  rdk  ry d| cxk  rdk  ry yy)Nr   i8	D z!handler-table-entry-or-near-tablei -D i.D zdescriptor/resource-root-tablerw   rx   ry   i  C i `C zfield/object-runtime-code-refi  P i  Z zdata-script-or-resource-pointerzunclassified-pointer-refr   )ro   s    r   rl   rl      sn    V)z)2 *V)z)/ *V)z)5 *V)z). *V)z)0 *%r   c                   ddddddt         dddd	d
ddddt        dz   dddddddddddddddddddddd dg}g }|D ]  }t        j                  t	        |d!               }t        |t        |d"               }|| ||t        |      z    nd#}|j                  |d$   t        t        |d"               |d%   ||k(  |d!   |j                  d&      d'        |S )(Nzgeneric-runner-dispatchi'#@ zLreset stop flag, read object+0x40 stream opcode, dispatch through 0x00440538zc7 05 b8 a1 55 00 00 00 00 00 83 3d b8 a1 55 00 00 0f 85 1d 00 00 00 8b 45 08 50 8b 45 08 8b 40 40 33 c9 8a 08 ff 14 8d 38 05 44 00)idr?   meaningrX   zobject-ec-to-cursor-copyzImanual overlap bridge copies object+0xec payload pointer into object+0x40zY33 c0 a0 33 45 57 00 85 c0 0f 85 14 00 00 00 8b 45 fc 8b 80 ec 00 00 00 8b 4d fc 89 41 40zopcode-5e-cursor-from-payloadiz@ z>opcode 0x5e mode1 loads new object+0x40 from dword [payload+8]zMa1 a8 dd 59 00 89 45 08 8b 45 08 8b 80 ec 00 00 00 8b 40 08 8b 4d 08 89 41 40znested-runner-wrapper	   zv0x00402360 saves current object+0x40, runs a supplied child stream through 0x00402321, then restores the parent cursorzt8b 45 08 8b 40 40 89 45 fc 8b 45 0c 8b 4d 08 89 41 40 8b 45 08 50 e8 9d ff ff ff 83 c4 04 8b 45 fc 8b 4d 08 89 41 40zopcode-0x2a-fanout-list-selectiW@ z`opcode 0x2a reads stream+1 as active-object list index and stream+2 as optional object+0x14 maskzM55 8b ec 83 ec 0c 53 56 57 8b 45 08 8b 40 40 33 c9 8a 48 01 83 e1 7f 89 4d f4z'opcode-0x2a-fanout-restore-child-cursoriX@ zxopcode 0x2a high-bit branch saves target object+0x40, runs stream+4 through 0x00402321, then restores target object+0x40z8b 45 f8 8b 40 40 89 45 fc 8b 45 08 8b 40 40 8b 40 04 8b 4d f8 89 41 40 8b 45 f8 50 e8 6d ca ff ff 83 c4 04 8b 45 fc 8b 4d f8 89 41 40z*opcode-0x2a-fanout-persistent-child-cursoriX@ zuopcode 0x2a normal branch writes stream+4 to target object+0x40 and keeps the advanced target cursor after 0x00402321zP8b 45 08 8b 40 40 8b 40 04 8b 4d f8 89 41 40 8b 45 f8 50 e8 44 ca ff ff 83 c4 04ru   i0C zvfield active object timer route runs object+0x64 through 0x00402321 and stores the advanced cursor back to object+0x64z8b 45 f8 8b 40 40 89 45 fc 8b 45 f8 8b 40 64 8b 4d f8 89 41 40 8b 45 f8 50 e8 73 f2 fc ff 83 c4 04 8b 45 f8 8b 40 40 8b 4d f8 89 41 64 8b 45 fc 8b 4d f8 89 41 40rX   r?   r   r   r   rJ   )r   vaHexr   matchesexpectedHex	actualHex)MANUAL_OVERLAP_BRIDGE_VANESTED_RUNNER_VAbytesfromhexr   r   r7   rS   rV   r   rX   )rZ   r8   snippetsr\   rowexpectedr9   actuals           r   verified_snippetsr      sm    ,e Y		
 -*bn		
 2Wb		
 *"T) P J		
 3yb		
 < R \		
 ? Oe		
 7 P w		
W1Hd "$D 
==SZ1hCI79?9KVfs8}45QT$iCD	N+y>!X-"5z#ZZ_		
	
 Kr   c                 	   t         j                         } t        |       }t        d      }t        d      }t        d      }t        d      }t        d      }t        d      }t        d      }t	        t
        dz  i       }	t	        t
        d	z  i       }
t        | |t              }t        | |t              }t        | |t              }t        | |t              }t        | |      }d
dddddddddd|j                  d       d|j                  d       d|j                  d       ddddddd|j                  d       d|j                  d        d!|j                  d"       d#d$dd%d&dd'|j                  d(       d)|j                  d*       d+|j                  d,       d-d.dd/d0dd1|j                  d2d3       d4|j                  d5d3       d6|j                  d7d3       d8|j                  d9d3       d:d;dd<d=dd>|j                  d?       d@|j                  dA       dB|j                  dC       dD|j                  dE       dFdGddHdIddJ|j                  dK       dL|j                  dM       dN|j                  dO       dPdQddRdSddT|j                  dU       dV|j                  dW       dX|j                  dY       dZ|	j                  d[       d\d]dd^d_dd`|
j                  da       db|
j                  dc      xs i j                  dd       dedfdg	}t        t        dg |D                    }i dht        t              dit        t              djt        t              dkt!        |      dl|dm|j                  dnd3      dot#        dp |D              dq|j                  d2d3      dr|j                  d5d3      ds|j                  d7d3      dt|j                  d9d3      dut!        |      dvt!        |      dwt!        |      dxt#        dy |D              dzt!        |      d{t!        |      t#        d| |D              |j                  d      |j                  d      |j                  d*      |j                  dU      d}u xr( |j                  dW      d}u xr |j                  dY      d}u dd~d}ddd|||||||g dg ddS )Nz#object_script_payload_producer.jsonz#manual_movement_trigger_bridge.jsonz0field_active_object_trigger_boundary_review.jsonz$map_animation_tick_route_review.jsonz/field_encounter_tick_route_boundary_review.jsonz.selected_root_live_writer_frontier_review.jsonz-generic_vm_opcode2a_parent_stream_review.jsonz)save_selector_dispatch_table_context.jsonz$battle_display_vm_static_decode.jsonz generic object/display VM runnerzgrounded-consumerFzF0x00402321 reads object+0x40 and dispatches opcode through 0x00440538.zcThis is a consumer/dispatcher. It does not itself select a map, scene root, or encounter formation.z+Hwanse2.exe snippet generic-runner-dispatch)surfacestatusproducerPromotedevidencerouteImpactsourcez)opcode 0x5e object +0xec payload producerzgrounded-non-route-producerzobjectEcProducerFound=objectEcProducerFoundz; mode1 candidates=mode1CandidateCountz ; map CNS refs in payload heads=mapCnsRefCountInPayloadHeadszCreates/transitions transient display/object VM payloads, but current static payload scan does not prove field-map transition payloads.'out/object_script_payload_producer.jsonzmanual movement overlap bridgezgrounded-trigger-consumerzbridgeFound='manualMovementToObjectScriptBridgeFoundz; routeProof=routeProofFoundz; manual opcodes=manualScriptOpcodeCountzsObject overlap can copy object+0xec into object+0x40, but strict inventory found no concrete map transition target.'out/manual_movement_trigger_bridge.jsonz"active object delayed script routezgrounded-indirect-candidateztick route=fieldTickRouteVaHexz; active route grounded=&activeObjectDelayedScriptRouteGroundedz; visible motion producer=visibleMotionProducerFoundzhCan run object+0x64/+0x40 scripts from the field tick, but no animated-map tile-write root is bound yet.(out/map_animation_tick_route_review.jsonz'opcode 0x2a linked-object script fanoutzgrounded-fanout-primitivezhandler table 0x004405e0 -> 0x004057eb; stream+1 selects active-object list slot, stream+2 optionally filters target object+0x14, stream+4 supplies the child script; direct runner calls at 0x004058af and 0x004058d8; active +0xec hits=activeObjectEcOpcode2aCountr   z, raw candidates=rawCandidateCountz, boundary-shaped=boundaryCandidateCountz, promoted=promotedParentProducerCountzExecutes a supplied child stream on linked active objects. This narrows object script propagation, but it is not a root producer without a parent stream source.zSHwanse2.exe opcode 0x2a handler + out/generic_vm_opcode2a_parent_stream_review.jsonz$field active object script inventoryznegative-route-inventoryzstrict initializers=strictInitializerCountz; unique +ec scripts=uniqueObjectEcScriptCountz; route proof scripts=routeProofScriptCountz; map CNS operand scripts=!mapCnsOperandCandidateScriptCountz\Large active-object script inventory exists, but no route/map CNS operand proof is promoted.4out/field_active_object_trigger_boundary_review.jsonzfield encounter tick routeznegative-encounter-producerzknown field windows=knownFieldWindowCountz; promotable calls=/promotableKeyDirectCallsInsideKnownFieldWindowsz; formation exact refs=&formationCandidateExactPointerRefCountzTNo field walking/tick route currently selects battle resources or formation streams.3out/field_encounter_tick_route_boundary_review.jsonzselected-root stream primitivesz grounded-separated-global-streamzselector writer grounded=selectorByteWriterGroundedz; selectedRoot writer grounded=selectedRootWriterGroundedz; executor found=selectedRootExecutorFoundz'; save-selector runtime dispatch proof=0saveSelectorSliceDirectRuntimeDispatchProofFoundzqSelected-root VM primitives use global selectedRoot/current stream flow, not a proven object+0x40 route producer.zbout/selected_root_live_writer_frontier_review.json + out/save_selector_dispatch_table_context.jsonzbattle/display VM child streamszgrounded-battle-display-domainzstatus=r   z; display runner=displayVmRunnerrunnerVaHexzIUseful for battle/effect rendering, but not a field scene/route producer.(out/battle_display_vm_static_decode.jsonc              3  &   K   | ]	  }|d      yw)rO   Nr   rD   r   s     r   rE   zbuild_report.<locals>.<genexpr>|  s     +ZcC0@,A+Zs   genericRunnerVaHexgenericHandlerTableVaHexnestedRunnerVaHexdirectCallCountdirectCallClassificationCountsunclassifiedDirectCallCountrz   linkedObjectFanoutCallCountc              3  \   K   | ]$  }t        |d          j                  d      s!d & yw)rO   zopcode-0x2a-r   N)r   
startswithr   s     r   rE   zbuild_report.<locals>.<genexpr>  s-      +
S1A-B)C)N)N~)^A+
s   ",,opcode2aActiveObjectEcHitCountopcode2aRawCandidateCountopcode2aBoundaryCandidateCount#opcode2aPromotedParentProducerCountpointerRefCountnestedRunnerDirectCallCountnestedRunnerPointerRefCountverifiedSnippetCountc              3  ,   K   | ]  }|d    s	d  yw)r   r   Nr   r   s     r   rE   zbuild_report.<locals>.<genexpr>  s     #L#S^A#L   
verifiedSnippetTotalsurfaceCountc              3  ,   K   | ]  }|d    s	d  yw)r   r   Nr   r   s     r   rE   zbuild_report.<locals>.<genexpr>  s     +]#SI[E\A+]r   Ta  The generic VM stream frontier is now consolidated. 0x00402321/object+0x40 is a grounded dispatcher; all direct calls are now classified, including the nested runner wrapper, opcode 0x2a linked-object fanout, and active-object delayed scripts. Current surfaces remain support/display/object domains or negative route inventories. None promotes to a concrete scene route, map transition, field encounter, or selected-root gameplay producer.)promotedProducerSurfaceCountmanualMovementBridgeFoundr   r   selectedRootPrimitiveGroundedrouteProducerPromoteddecisionz1hwanse-generic-vm-stream-producer-frontier-reviewz9tools/build_generic_vm_stream_producer_frontier_review.pyzBgeneric-vm-stream-frontier-consolidated-no-route-producer-promoted)zlDo not re-open 0x00402321 itself as an unknown; treat it as a grounded generic object/display VM dispatcher.zDo not treat opcode 0x2a as a route producer by itself; it is a linked-object script fanout that still needs a parent stream source.zOpcode 0x2a is absent from the strict active object +0xec script inventory; raw data-section candidates remain review-only until a gameplay parent/root source is found.zgFor scene route, look above selected-root writer/executor primitives for the live root/stream producer.zFor map transition, require an active-object script/root that binds a concrete map target or map resource, not just object+0xec -> +0x40.zcFor encounter, require field walking/tick state to bridge into battle resource/formation consumers.zlFor map animation, require an animated-map object/root that reaches tile-write handlers from the tick route.)	r   r   r   z1out/generic_vm_opcode2a_parent_stream_review.jsonr   r   z2out/selected_root_live_writer_frontier_review.jsonz-out/save_selector_dispatch_table_context.jsonr   )kindr   r   r+   verifiedSnippetsdirectCallRowspointerRefRowsnestedRunnerDirectCallRowsnestedRunnerPointerRefRowssurfacesnextFrontiersourceArtifacts)EXErs   r   r2   r)   r,   re   GENERIC_RUNNER_VArp   r   r   r/   r.   r   r   GENERIC_HANDLER_TABLE_VArS   sum)rZ   r8   object_payloadmanual_bridgeactive_objectmap_tick
field_tickselected_writeropcode2a_parentdispatch_context	battle_vmdirect_callspointer_refsnested_callsnested_refsr   r   direct_call_class_countsr+   s                      r   build_reportr      s   
..
CS!H EFNDEMQRM@AHMNJ !QRO !PQO 'R!RTVW# FFKI$S(4EFL"32CDL$S(4DEL!#x1ABK h/H :) %` AC	
 C3 %(););<S)T(U V$$2$6$67L$M#N O11?1C1CDb1c0df e?	
 81 %}001Z[\ ]+//0ABC D""/"3"34M"N!OQ Q?	
 <3 %hll+@AB C))16^)_(` a++3<<8T+U*VX F@	
 A1 %% &5%8%89VXY%Z$[ \""1"5"56I1"M!N O##2#6#67OQR#S"T U+//0MqQRT ~k	
" >0 %&}'8'89Q'R&S T&&3&7&78S&T%U V''4'8'89P'Q&R S++8+<+<=`+a*bd
 zL	
 43 %&z~~6M'N&O P$$.NN3d$e#f g((27_(`'ac rK	
 98 %+O,?,?@\,]+^ _00?0C0CD`0a/b c""1"5"56Q"R!S T88H8L8LM  9A  8BC
 Oz	
 96 %)--12 3"#,==1B#C#Ir"N"N}"]!^` g@
	
GnH`  $G+Z\+Z$Z[%b!23%"B'?$@% 	R 01% 	3|,	%
 	)*B% 	&'?'C'CDegh'i% 	&s +
%+
 (
% 	)/*=*=>[]^*_% 	$_%8%89La%P% 	)/*=*=>VXY*Z% 	./B/BC`bc/d% 	3|,% 	&s<'8%  	&s;'7!%" 	#L#L L#%$ 	H%%& 	H'%( ),+]+](]%2%6%67`%a!/!3!34K!L2:,,?g2h <=E I##$@ATII##$?@DH!&S?%GP DMV$&&&2&1


) r   c                   | d   }d| d   fd|d   fd|d   fd|d   fd	|d
   fd|d   fd|d   fd|d   fd|d    d|d    fd|d   fg
}dj                  d |D              }dj                  d | d   D              }dj                  d | d   D              xs d}dj                  d | d   D              xs d}dj                  d  | d!   D              }dj                  d" | d#   D              }dj                  d$ | d%   D              }	t        j                  | d&'      }
d(t        |d)          d*| d+| d,| d-| d.| d/| d0|	 d1t        |
       d2S )3Nr+   r   runnerr   zdirect callsr   zunclassified directr   zopcode 0x2a fanout callsr   z0x2a active +ec hitsr   z0x2a raw candidatesr   zpointer refsr   r   r   /r   zpromoted producersr   r   c              3  X   K   | ]"  \  }}d t        |       dt        |       d $ yw)z<div class='card'><b>z
</b><span>z</span></div>Nr   )rD   kvs      r   rE   zrender_html.<locals>.<genexpr>  s/     fX\XY[\/!vZ!v]Sfs   (*c              3     K   | ]a  }d t        |d          dt        |d          dt        |d          dt        |d          dt        |d          dt        |d          d	 c y
w)<tr><td>r   	</td><td>r   r   r   r   </td><td><code>r   </code></td></tr>Nr   r   s     r   rE   zrender_html.<locals>.<genexpr>  s      
 	Y ! "X  !'()* +Z!" #]#$% &s8}%& '	
s   A'A)r   c           
   3  |   K   | ]4  }d t        |d          dt        |d          dt        |d          d 6 yw)<tr><td><code>rL   </code></td><td>rO   r   rN   r   Nr   r   s     r   rE   zrender_html.<locals>.<genexpr>  s_       	s;'() *%&'( )s<()* +	   :<r   z"<tr><td colspan='3'>none</td></tr>c           
   3  |   K   | ]4  }d t        |d          dt        |d          dt        |d          d 6 yw)r   ri   r   r:   r   rO   z
</td></tr>Nr   r   s     r   rE   zrender_html.<locals>.<genexpr>  s]       	s:'( )Y ! "%&'( )	r   r   c              3     K   | ]R  }d t        |d          dt        |d          dt        |d          dt        |d          dt        |d	          d
 T yw)r   r   z
<br><code>r   r   r   r   r   r   r   r   Nr   r   s     r   rE   zrender_html.<locals>.<genexpr>  s}       	T|nJqW&7 8Y ! "Y ! "s;'() *		s   AAr   c              3  :   K   | ]  }d t        |       d  yw)z<li>z</li>Nr   rD   items     r   rE   zrender_html.<locals>.<genexpr>  s     PagYe,P   r   c              3  :   K   | ]  }d t        |       d  yw)z
<li><code>z</code></li>Nr   r  s     r   rE   zrender_html.<locals>.<genexpr>  s     at*QtWI\:ar  r   F)ensure_asciia  <!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Generic VM Stream Producer Frontier</title>
  <style>
    body { margin:0; background:#101318; color:#edf1f7; font-family:system-ui,sans-serif; }
    main { max-width:1320px; margin:0 auto; padding:24px; }
    a { color:#8ecbff; }
    .nav { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:16px; }
    .chip { border:1px solid #334155; border-radius:999px; padding:6px 10px; text-decoration:none; background:#161b22; }
    .summary { display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:12px; margin:16px 0; }
    .card { border:1px solid #2b3544; border-radius:8px; padding:12px; background:#161b22; }
    .card b { display:block; color:#9fb1c9; font-size:12px; text-transform:uppercase; }
    .card span { display:block; margin-top:8px; font-size:18px; overflow-wrap:anywhere; }
    section { border:1px solid #273244; border-radius:10px; padding:16px; margin:16px 0; background:#141922; overflow:auto; }
    table { border-collapse:collapse; width:100%; min-width:980px; font-size:13px; }
    th,td { border-bottom:1px solid #283342; padding:8px; text-align:left; vertical-align:top; }
    th { color:#b9c7dc; background:#111722; }
    code { color:#dbeafe; overflow-wrap:anywhere; }
    pre { white-space:pre-wrap; background:#0b0f14; border:1px solid #253044; border-radius:8px; padding:12px; max-height:360px; overflow:auto; }
  </style>
</head>
<body>
<main>
  <div class="nav">
    <a class="chip" href="index.html">index</a>
    <a class="chip" href="static_analysis_remaining_work.html">remaining work</a>
    <a class="chip" href="save_selector_dispatch_table_context.html">dispatch table context</a>
    <a class="chip" href="global_mode_state_frontier_review.html">mode/state frontier</a>
    <a class="chip" href="generic_vm_opcode2a_parent_stream_review.html">opcode 0x2a parent streams</a>
  </div>
  <h1>Generic VM Stream Producer Frontier</h1>
  <p>r   z</p>
  <div class="summary">z</div>
  <section>
    <h2>Surfaces</h2>
    <table><thead><tr><th>surface</th><th>status</th><th>producer promoted</th><th>evidence</th><th>route impact</th><th>source</th></tr></thead><tbody>z</tbody></table>
  </section>
  <section>
    <h2>Verified Snippets</h2>
    <table><thead><tr><th>snippet</th><th>matches</th><th>meaning</th><th>actual bytes</th></tr></thead><tbody>z</tbody></table>
  </section>
  <section>
    <h2>Direct Calls to 0x00402321</h2>
    <table><thead><tr><th>call</th><th>classification</th><th>context</th></tr></thead><tbody>z</tbody></table>
  </section>
  <section>
    <h2>Dword Refs to 0x00402321</h2>
    <table><thead><tr><th>ref</th><th>section</th><th>classification</th></tr></thead><tbody>zM</tbody></table>
  </section>
  <section>
    <h2>Next Frontier</h2>
    <ul>zE</ul>
  </section>
  <section>
    <h2>Source Artifacts</h2>
    <ul>z</ul>
  </section>
  <section>
    <h2>Raw JSON</h2>
    <pre id="payload"></pre>
  </section>
</main>
<script type="application/json" id="report-json">a  </script>
<script>
  const data = JSON.parse(document.getElementById("report-json").textContent);
  document.getElementById("payload").textContent = JSON.stringify(data, null, 2);
  window.HWANSE_GENERIC_VM_STREAM_PRODUCER_FRONTIER_REVIEW = data;
</script>
</body>
</html>
)joinr$   dumpsr   )reportr+   cards	card_htmlsurface_rows	call_rowsref_rowssnippet_rowsfrontier	artifactspayloads              r   render_htmlr    s\   YG	6(#$	7/01	!234	(E FG	#W-J%KL	)I!JK	(C DE	!234	 678'BX:Y9Z[\	w'EFGE f`effI77 
 *%
 
L   *+  . 
.  ww  *+  . 
.  77  ,- L wwP9OPPHavN_G`aaIjje4G"D 
 !{ #Y Zf  Yg gp q}o} ~_ `i^i j^ _g]g h	 

 	 
 2 34G* >CI Ir   c                 F   t               } t        j                  d       t        j                  d       t        dz  j	                  t        j                  | dd      dz   d	       t        d
z  j	                  t        |       d	       t        d| d   d    d       y )NT)exist_okz/generic_vm_stream_producer_frontier_review.jsonF   )r  indent
r    r!   z/generic_vm_stream_producer_frontier_review.htmlz+wrote generic VM stream producer frontier (r+   r   z promoted producers))	r   r,   mkdirWEB
write_textr$   r
  r  print)r  s    r   mainr  I  s    ^FIItIIItI<<HH

6a84? I  	<<HHF I  
	9<=>>R	Tr   __main__)r   r   returnr   )r   z
int | Noner!  z
str | None)r'   r   r(   r   r!  r   )r0   r   r!  dict[str, Any])r8   list[dict[str, Any]]r9   r7   r!  dict[str, Any] | None)r8   r#  r?   r7   r!  r$  )rZ   r   r8   r#  r[   r7   r!  r#  )
rZ   r   r8   r#  r?   r7   rr   r7   r!  r   )rc   r7   r!  r   )ro   r7   r!  r   )rZ   r   r8   r#  r!  r#  )r!  r"  )r  r"  r!  r   )r!  None)1__doc__
__future__r   r   r$   rT   syscollectionsr   pathlibr   typingr   __file__resolveparentsROOTr,   r  r   r'   insertr   probe_exe_scene_tablesr   r   r   r   r   r   OBJECT_EC_PRODUCER_HANDLER_VAr   %ACTIVE_OBJECT_DELAYED_SCRIPT_ROUTE_VAr   r   r)   r2   r=   r@   re   rp   rs   rY   rl   r   r   r  r  __name__r   r   r   <module>r5     s  
 #    
    H~''*
Ul
Ul
] 3tg~& ' L L  %   * % (2 %H78:<(0-8&BJK\D$ zF r   