<mxfile host="app.diagrams.net" agent="Claude Code">
  <diagram id="realloc-flow" name="realloc流程">
    <mxGraphModel dx="1136" dy="589" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1060" pageHeight="3700" background="light-dark(#ffffff, #121212)" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="TITLE" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=17;" value="realloc 源码执行流程总览（__libc_realloc 入口 + _int_realloc 核心调整）" vertex="1">
          <mxGeometry height="30" width="960" x="20" as="geometry" />
        </mxCell>
        <mxCell id="NOTET" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：realloc 可能原地保留、向 top 扩张、合并空闲 next、或迁移分配 + 复制数据；mmap 块走 mremap / malloc+copy+munmap。" vertex="1">
          <mxGeometry height="24" width="1020" x="20" y="30" as="geometry" />
        </mxCell>
        <mxCell id="R0_ENTRY" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 __libc_realloc(oldmem, bytes)" vertex="1">
          <mxGeometry height="40" width="280" x="40" y="70" as="geometry" />
        </mxCell>
        <mxCell id="R1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="读 __realloc_hook" vertex="1">
          <mxGeometry height="50" width="280" x="40" y="140" as="geometry" />
        </mxCell>
        <mxCell id="R2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="__realloc_hook != NULL ?" vertex="1">
          <mxGeometry height="70" width="280" x="40" y="230" as="geometry" />
        </mxCell>
        <mxCell id="R3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return (*hook)(oldmem, bytes,&lt;br&gt;RETURN_ADDRESS(0))" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="230" as="geometry" />
        </mxCell>
        <mxCell id="R4" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="bytes == 0 且 oldmem != NULL ?&lt;br&gt;（REALLOC_ZERO_BYTES_FREES）" vertex="1">
          <mxGeometry height="80" width="280" x="40" y="340" as="geometry" />
        </mxCell>
        <mxCell id="R5" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="__libc_free(oldmem)&lt;br&gt;return 0" vertex="1">
          <mxGeometry height="50" width="280" x="420" y="340" as="geometry" />
        </mxCell>
        <mxCell id="R6" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="oldmem == 0 ?&lt;br&gt;（等价于 malloc(bytes)）" vertex="1">
          <mxGeometry height="70" width="280" x="40" y="460" as="geometry" />
        </mxCell>
        <mxCell id="R7" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return __libc_malloc(bytes)" vertex="1">
          <mxGeometry height="50" width="280" x="420" y="460" as="geometry" />
        </mxCell>
        <mxCell id="R8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="oldp = mem2chunk(oldmem)&lt;br&gt;oldsize = chunksize(oldp)" vertex="1">
          <mxGeometry height="60" width="280" x="40" y="570" as="geometry" />
        </mxCell>
        <mxCell id="R9" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="chunk_is_mmapped(oldp) ?&lt;br&gt;（决定 ar_ptr 取值）" vertex="1">
          <mxGeometry height="70" width="280" x="40" y="680" as="geometry" />
        </mxCell>
        <mxCell id="R10" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="ar_ptr = NULL" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="680" as="geometry" />
        </mxCell>
        <mxCell id="R11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="ar_ptr = arena_for_chunk(oldp)" vertex="1">
          <mxGeometry height="40" width="280" x="740" y="680" as="geometry" />
        </mxCell>
        <mxCell id="R12" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="(uintptr_t) oldp &gt; (uintptr_t) -oldsize 或&lt;br&gt;misaligned_chunk(oldp) ?&lt;br&gt;（地址回绕 / 未对齐）" vertex="1">
          <mxGeometry height="90" width="280" x="40" y="810" as="geometry" />
        </mxCell>
        <mxCell id="R13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="malloc_printerr(check_action,&lt;br&gt;&quot;realloc(): invalid pointer&quot;)&lt;br&gt;return NULL" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="810" as="geometry" />
        </mxCell>
        <mxCell id="R14" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="checked_request2size(bytes, nb)" vertex="1">
          <mxGeometry height="50" width="280" x="40" y="950" as="geometry" />
        </mxCell>
        <mxCell id="R15" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="chunk_is_mmapped(oldp) ?&lt;br&gt;（mmap 块单独处理）" vertex="1">
          <mxGeometry height="70" width="280" x="40" y="1040" as="geometry" />
        </mxCell>
        <mxCell id="R16" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="newp = mremap_chunk(oldp, nb)&lt;br&gt;newp != NULL ?&lt;br&gt;（HAVE_MREMAP 下尝试 mremap）" vertex="1">
          <mxGeometry height="90" width="280" x="420" y="1040" as="geometry" />
        </mxCell>
        <mxCell id="R17" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return chunk2mem(newp)" vertex="1">
          <mxGeometry height="50" width="280" x="420" y="1180" as="geometry" />
        </mxCell>
        <mxCell id="R18" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="oldsize - SIZE_SZ &gt;= nb ?&lt;br&gt;（空间足够，无需移动）" vertex="1">
          <mxGeometry height="80" width="280" x="740" y="1180" as="geometry" />
        </mxCell>
        <mxCell id="R19" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return oldmem" vertex="1">
          <mxGeometry height="40" width="280" x="740" y="1310" as="geometry" />
        </mxCell>
        <mxCell id="R20" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="newmem = __libc_malloc(bytes)&lt;br&gt;（为 0 则 return 0）&lt;br&gt;memcpy(newmem, oldmem, oldsize - 2*SIZE_SZ)&lt;br&gt;munmap_chunk(oldp)&lt;br&gt;return newmem" vertex="1">
          <mxGeometry height="110" width="280" x="740" y="1400" as="geometry" />
        </mxCell>
        <mxCell id="R21" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="mutex_lock(&amp;ar_ptr-&gt;mutex)" vertex="1">
          <mxGeometry height="50" width="280" x="40" y="1170" as="geometry" />
        </mxCell>
        <mxCell id="R22" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="newp = _int_realloc(ar_ptr, oldp, oldsize, nb)" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="1260" as="geometry" />
        </mxCell>
        <mxCell id="R23" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="mutex_unlock(&amp;ar_ptr-&gt;mutex)" vertex="1">
          <mxGeometry height="50" width="280" x="40" y="1360" as="geometry" />
        </mxCell>
        <mxCell id="R24" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="assert(!newp || chunk_is_mmapped(mem2chunk(newp)) ||&lt;br&gt;ar_ptr == arena_for_chunk(mem2chunk(newp)))" vertex="1">
          <mxGeometry height="60" width="320" x="40" y="1450" as="geometry" />
        </mxCell>
        <mxCell id="R25" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="newp == NULL ?&lt;br&gt;（_int_realloc 失败，去其他 arena 硬试）" vertex="1">
          <mxGeometry height="70" width="280" x="40" y="1550" as="geometry" />
        </mxCell>
        <mxCell id="R26" parent="1" style="shape=parallelogram;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="LIBC_PROBE(memory_realloc_retry)&lt;br&gt;newp = __libc_malloc(bytes)" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1550" as="geometry" />
        </mxCell>
        <mxCell id="R27" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="newp != NULL ?" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1660" as="geometry" />
        </mxCell>
        <mxCell id="R28" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="memcpy(newp, oldmem, oldsize - SIZE_SZ)&lt;br&gt;_int_free(ar_ptr, oldp, 0)" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="1770" as="geometry" />
        </mxCell>
        <mxCell id="R29" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return newp" vertex="1">
          <mxGeometry height="50" width="280" x="40" y="1700" as="geometry" />
        </mxCell>
        <mxCell id="SEC2" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=13;" value="———— 区块二：_int_realloc（核心调整逻辑，由 __libc_realloc 加锁后调用；下方代码在源码中被截断，按 glibc 原版补齐）————" vertex="1">
          <mxGeometry height="26" width="1000" x="20" y="1830" as="geometry" />
        </mxCell>
        <mxCell id="I0_ENTRY" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 _int_realloc(av, oldp, oldsize, nb)" vertex="1">
          <mxGeometry height="40" width="300" x="40" y="1900" as="geometry" />
        </mxCell>
        <mxCell id="I1" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="oldp-&gt;size &lt;= 2*SIZE_SZ 或&lt;br&gt;oldsize &gt;= av-&gt;system_mem ?" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="1970" as="geometry" />
        </mxCell>
        <mxCell id="I2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;realloc(): invalid old size&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="1970" as="geometry" />
        </mxCell>
        <mxCell id="I3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="check_inuse_chunk(av, oldp)&lt;br&gt;assert(!chunk_is_mmapped(oldp))" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="2100" as="geometry" />
        </mxCell>
        <mxCell id="I4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="next = chunk_at_offset(oldp, oldsize)&lt;br&gt;nextsize = chunksize(next)" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="2200" as="geometry" />
        </mxCell>
        <mxCell id="I5" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="next-&gt;size &lt;= 2*SIZE_SZ 或&lt;br&gt;nextsize &gt;= av-&gt;system_mem ?" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="2300" as="geometry" />
        </mxCell>
        <mxCell id="I6" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errstr = &quot;realloc(): invalid next size&quot;&lt;br&gt;goto errout" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="2300" as="geometry" />
        </mxCell>
        <mxCell id="I7" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="oldsize &gt;= nb ?&lt;br&gt;（缩小，可原地保留）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="2430" as="geometry" />
        </mxCell>
        <mxCell id="I8" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="newp = oldp&lt;br&gt;newsize = oldsize" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="2430" as="geometry" />
        </mxCell>
        <mxCell id="I9" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="next == av-&gt;top 且&lt;br&gt;oldsize + nextsize &gt;= nb + MINSIZE ?&lt;br&gt;（向 top 扩张）" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="2560" as="geometry" />
        </mxCell>
        <mxCell id="I10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="set_head_size(oldp, nb | NON_MAIN_ARENA)&lt;br&gt;av-&gt;top = chunk_at_offset(oldp, nb)&lt;br&gt;set_head(av-&gt;top, (newsize-nb) | PREV_INUSE)&lt;br&gt;return chunk2mem(oldp)" vertex="1">
          <mxGeometry height="100" width="300" x="420" y="2560" as="geometry" />
        </mxCell>
        <mxCell id="I11" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="next != av-&gt;top 且 !inuse(next)&lt;br&gt;且 oldsize + nextsize &gt;= nb ?&lt;br&gt;（合并空闲的 next）" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="2710" as="geometry" />
        </mxCell>
        <mxCell id="I12" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="newp = oldp&lt;br&gt;unlink(av, next, bck, fwd)" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="2710" as="geometry" />
        </mxCell>
        <mxCell id="I13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="newmem = _int_malloc(av,&lt;br&gt;nb - MALLOC_ALIGN_MASK)" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="2860" as="geometry" />
        </mxCell>
        <mxCell id="I13B" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="newmem == 0 ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="2960" as="geometry" />
        </mxCell>
        <mxCell id="I13C" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="return 0" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="2960" as="geometry" />
        </mxCell>
        <mxCell id="I14" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="newp = mem2chunk(newmem)&lt;br&gt;newsize = chunksize(newp)" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="3080" as="geometry" />
        </mxCell>
        <mxCell id="I15" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="newp == next ?&lt;br&gt;（新块正好在旧块后面，可合并）" vertex="1">
          <mxGeometry height="80" width="300" x="40" y="3190" as="geometry" />
        </mxCell>
        <mxCell id="I16" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="newsize += oldsize&lt;br&gt;newp = oldp" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="3190" as="geometry" />
        </mxCell>
        <mxCell id="I17" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="copysize = oldsize - SIZE_SZ&lt;br&gt;ncopies = copysize / 8&lt;br&gt;assert(ncopies &gt;= 3)" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="3320" as="geometry" />
        </mxCell>
        <mxCell id="I18" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="ncopies &gt; 9 ?" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="3440" as="geometry" />
        </mxCell>
        <mxCell id="I19" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="memcpy(d, s, copysize)" vertex="1">
          <mxGeometry height="50" width="280" x="420" y="3440" as="geometry" />
        </mxCell>
        <mxCell id="I20" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="手动复制 d+0 .. d+8&lt;br&gt;（按 ncopies 分层 &gt;4 / &gt;6 / &gt;8）" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="3550" as="geometry" />
        </mxCell>
        <mxCell id="I21" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="切分 newp，分割出 remainder 剩余块&lt;br&gt;set_head 设置新块头 / 剩余块头&lt;br&gt;_int_free 释放旧块（若发生迁移）&lt;br&gt;return chunk2mem(newp)&lt;br&gt;&lt;font color=&quot;#999999&quot;&gt;（源码截断处，按 glibc 原版逻辑补齐）&lt;/font&gt;" vertex="1">
          <mxGeometry height="90" width="340" x="40" y="3610" as="geometry" />
        </mxCell>
        <mxCell id="I22" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="errout：&lt;br&gt;malloc_printerr(check_action,&lt;br&gt;errstr, chunk2mem(oldp), av)&lt;br&gt;return NULL" vertex="1">
          <mxGeometry height="90" width="240" x="800" y="3610" as="geometry" />
        </mxCell>
        <mxCell id="e1" edge="1" parent="1" source="R0_ENTRY" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" edge="1" parent="1" source="R1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" edge="1" parent="1" source="R2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" edge="1" parent="1" source="R2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R4" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" edge="1" parent="1" source="R4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R5" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e6" edge="1" parent="1" source="R4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R6" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" edge="1" parent="1" source="R6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R7" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e8" edge="1" parent="1" source="R6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R8" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e9" edge="1" parent="1" source="R8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R9">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e10" edge="1" parent="1" source="R9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R10" value="是（mmap）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e11" edge="1" parent="1" source="R9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R11" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e12" edge="1" parent="1" source="R10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="R12">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e13" edge="1" parent="1" source="R11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="R12">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e14" edge="1" parent="1" source="R12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R13" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e15" edge="1" parent="1" source="R12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R14" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e16" edge="1" parent="1" source="R14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R15">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e17" edge="1" parent="1" source="R15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R16" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e18" edge="1" parent="1" source="R15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R21" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e19" edge="1" parent="1" source="R16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R17" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e20" edge="1" parent="1" source="R16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R18" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e21" edge="1" parent="1" source="R18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R19" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e22" edge="1" parent="1" source="R18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R20" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e23" edge="1" parent="1" source="R21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R22">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e24" edge="1" parent="1" source="R22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R23">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e25" edge="1" parent="1" source="R23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R24">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e26" edge="1" parent="1" source="R24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R25">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e27" edge="1" parent="1" source="R25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="R26" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e28" edge="1" parent="1" source="R25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R29" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e29" edge="1" parent="1" source="R26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="R27">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e30" edge="1" parent="1" source="R27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="R28" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e31" edge="1" parent="1" source="R27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;fontSize=10;" target="R29" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e32" edge="1" parent="1" source="R28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="R29">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie1" edge="1" parent="1" source="I0_ENTRY" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie2" edge="1" parent="1" source="I1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I2" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie3" edge="1" parent="1" source="I1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I3" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie4" edge="1" parent="1" source="I3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie5" edge="1" parent="1" source="I4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie6" edge="1" parent="1" source="I5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I6" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie7" edge="1" parent="1" source="I5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I7" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie8" edge="1" parent="1" source="I7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I8" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie9" edge="1" parent="1" source="I7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I9" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie10" edge="1" parent="1" source="I8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="I21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie11" edge="1" parent="1" source="I9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I10" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie12" edge="1" parent="1" source="I9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I11" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie13" edge="1" parent="1" source="I11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I12" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie14" edge="1" parent="1" source="I11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I13" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie15" edge="1" parent="1" source="I12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="I21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie16" edge="1" parent="1" source="I13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I13B">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie17" edge="1" parent="1" source="I13B" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I13C" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie18" edge="1" parent="1" source="I13B" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I14" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie19" edge="1" parent="1" source="I14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I15">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie20" edge="1" parent="1" source="I15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I16" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie21" edge="1" parent="1" source="I15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="I17" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie22" edge="1" parent="1" source="I16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="I21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie23" edge="1" parent="1" source="I17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="I18">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie24" edge="1" parent="1" source="I18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I19" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie25" edge="1" parent="1" source="I18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="I20" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie26" edge="1" parent="1" source="I19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="I21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie27" edge="1" parent="1" source="I20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="I21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie28" edge="1" parent="1" source="I2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0;entryY=0.5;dashed=1;fontSize=10;" target="I22" value="goto errout">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="ie29" edge="1" parent="1" source="I6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0;entryY=0.5;dashed=1;fontSize=10;" target="I22" value="goto errout">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="560" y="3655" />
            </Array>
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
