<mxfile host="Electron" modified="2023-12-14T11:24:40.549Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.8 Chrome/114.0.5735.289 Electron/25.5.0 Safari/537.36" etag="AxjMqMDRlC6rPbmwxSk2" version="21.6.8" type="device">
  <diagram id="Tid6HBYPPwztV8fVNGmj" name="Page-1">
    <mxGraphModel dx="1434" dy="844" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="KYd3yMNsDL3AcNA57vXV-103" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="10" y="60" width="840" height="850" as="geometry" />
        </mxCell>
        <mxCell id="5uYlsp506e-5Ee3GPzSi-49" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="480" y="480" width="300" height="80" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-94" value="" style="group" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1" connectable="0">
          <mxGeometry x="150" y="350" width="300" height="220" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-71" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fillColor=none;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="-20" y="-10" width="320" height="230" as="geometry" />
        </mxCell>
        <mxCell id="42" value="raw tcp msg" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry y="27.5" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="45" value="downstream pipe" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="200" y="15" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-91" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="lICF3bmKFS8WhWq9-VQm-94" source="lICF3bmKFS8WhWq9-VQm-59" target="30" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-59" value="state machine" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="30" y="57.5" width="60" height="25" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-160" value="whole frame" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="87" y="27.5" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-195" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="lICF3bmKFS8WhWq9-VQm-94" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="150" y="175" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-178" value="&lt;font style=&quot;font-size: 50px;&quot;&gt;...&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="100" y="180" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-69" value="raw tcp msg" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry y="110.00000000000001" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-70" value="downstream pipe" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="200" y="118.74000000000001" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-92" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="lICF3bmKFS8WhWq9-VQm-94" source="KYd3yMNsDL3AcNA57vXV-72" target="KYd3yMNsDL3AcNA57vXV-65" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-72" value="state machine" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="27" y="161.24" width="60" height="25" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-73" value="whole frame" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="87" y="125.00000000000001" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-64" value="" style="shape=table;html=1;whiteSpace=wrap;startSize=0;container=1;collapsible=0;childLayout=tableLayout;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="160" y="148.74" width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-65" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;collapsible=0;dropTarget=0;fillColor=none;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="KYd3yMNsDL3AcNA57vXV-64" vertex="1">
          <mxGeometry width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-66" value="whole&lt;br&gt;TCP&lt;br&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="KYd3yMNsDL3AcNA57vXV-65" vertex="1">
          <mxGeometry width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-67" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="KYd3yMNsDL3AcNA57vXV-65" vertex="1">
          <mxGeometry x="40" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-68" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="KYd3yMNsDL3AcNA57vXV-65" vertex="1">
          <mxGeometry x="80" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="17" value="" style="shape=table;html=1;whiteSpace=wrap;startSize=0;container=1;collapsible=0;childLayout=tableLayout;" parent="lICF3bmKFS8WhWq9-VQm-94" vertex="1">
          <mxGeometry x="160" y="44.5" width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="30" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;collapsible=0;dropTarget=0;fillColor=none;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="17" vertex="1">
          <mxGeometry width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="31" value="whole&lt;br&gt;TCP&lt;br&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="30" vertex="1">
          <mxGeometry width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="32" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="30" vertex="1">
          <mxGeometry x="40" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="33" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="30" vertex="1">
          <mxGeometry x="80" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-73" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="480" y="380" width="300" height="80" as="geometry" />
        </mxCell>
        <mxCell id="2" value="TCP&lt;br&gt;server&lt;br&gt;&lt;br&gt;epoll" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="80" y="370" width="40" height="400" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.034;entryY=0.051;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="7" target="2" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="70" y="390" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="7" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="10" y="380" width="20" height="20" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;startArrow=classic;startFill=1;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="9" target="2" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="100" y="469.9999999999999" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="10" y="460" width="20" height="20" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.018;entryY=0.45;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="11" target="2" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="11" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="10" y="540" width="20" height="20" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-57" value="whole UART&lt;br&gt;frame" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="667.5" y="397" width="85" height="45" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-67" value="" style="shape=waypoint;sketch=0;fillStyle=solid;size=6;pointerEvents=1;points=[];fillColor=none;resizable=0;rotatable=0;perimeter=centerPerimeter;snapToPoint=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="810" y="410" width="20" height="20" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-165" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.042;entryY=0.642;entryDx=0;entryDy=0;entryPerimeter=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-57" target="qkgwZPIFRnLG9CClONk3-67" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="720" y="420" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-69" value="blocking receive a whole protocol frame" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="615" y="489.99" width="80" height="58.75" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-71" value="encode" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="525" y="506.87" width="60" height="25" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-72" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-69" target="qkgwZPIFRnLG9CClONk3-71" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="qkgwZPIFRnLG9CClONk3-73" value="TCP client" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry y="350" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-60" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" target="lICF3bmKFS8WhWq9-VQm-59" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="120" y="420" as="sourcePoint" />
            <mxPoint x="360" y="720" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-63" value="thread_1" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="270" y="310" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-64" value="TCP client" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry y="515" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-65" value="TCP client" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry y="432.5" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-146" value="thread_3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="615" y="350" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-150" value="epoll" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="500" y="404" width="35" height="32" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-151" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-103" source="30" target="lICF3bmKFS8WhWq9-VQm-150" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-158" value="MCU" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="780" y="380" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-173" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.55;exitY=0.95;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;shape=link;" parent="KYd3yMNsDL3AcNA57vXV-103" source="lICF3bmKFS8WhWq9-VQm-171" target="qkgwZPIFRnLG9CClONk3-57" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="509" y="255" />
              <mxPoint x="710" y="255" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-171" value="&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;while(sendsize &amp;lt; framesize)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; poll();&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; if (timeout)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return -1;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; send;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="300" width="380" height="300" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-203" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.128;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=classic;startFill=1;endArrow=none;endFill=0;shape=flexArrow;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-72" target="2" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="180" y="526" as="sourcePoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="5uYlsp506e-5Ee3GPzSi-50" value="thread_4" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="595" y="455" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="5uYlsp506e-5Ee3GPzSi-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="5uYlsp506e-5Ee3GPzSi-51" target="qkgwZPIFRnLG9CClONk3-69" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="5uYlsp506e-5Ee3GPzSi-51" value="epoll" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="730" y="504" width="35" height="32" as="geometry" />
        </mxCell>
        <mxCell id="5uYlsp506e-5Ee3GPzSi-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-67" target="5uYlsp506e-5Ee3GPzSi-51" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="820" y="520" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-71" target="kOVlQaIc8lPUFRllz-rx-47" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="515" y="744" as="sourcePoint" />
            <Array as="points">
              <mxPoint x="470" y="519" />
              <mxPoint x="470" y="675" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-59" value="thread_2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="280" y="570" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-46" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fillColor=none;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="535" y="600" width="285" height="250" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-76" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-65" target="lICF3bmKFS8WhWq9-VQm-150" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="470" y="524" />
              <mxPoint x="470" y="420" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-77" value="" style="shape=table;html=1;whiteSpace=wrap;startSize=0;container=1;collapsible=0;childLayout=tableLayout;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="667.5" y="620" width="40" height="50" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-78" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;collapsible=0;dropTarget=0;fillColor=none;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="KYd3yMNsDL3AcNA57vXV-77" vertex="1">
          <mxGeometry width="40" height="50" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-81" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="KYd3yMNsDL3AcNA57vXV-78" vertex="1">
          <mxGeometry width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-83" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-82" target="KYd3yMNsDL3AcNA57vXV-77" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-82" value="timer" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="545" y="629" width="35" height="32" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-84" value="thread_5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="647.5" y="570" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-85" value="read all IO" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="585" y="610" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-87" value="IO_cache" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="730" y="690" width="67.5" height="140" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-94" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-89" target="qkgwZPIFRnLG9CClONk3-57" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-89" value="encode" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1">
          <mxGeometry x="569" y="407.5" width="60" height="25" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-88" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;shape=flexArrow;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-71" target="KYd3yMNsDL3AcNA57vXV-87" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="510" y="519" />
              <mxPoint x="510" y="730" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-97" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-78" target="lICF3bmKFS8WhWq9-VQm-150" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="790" y="645" />
              <mxPoint x="790" y="570" />
              <mxPoint x="517" y="570" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-100" value="" style="group" parent="KYd3yMNsDL3AcNA57vXV-103" vertex="1" connectable="0">
          <mxGeometry x="150" y="600" width="300" height="220" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-181" value="" style="rounded=1;whiteSpace=wrap;html=1;dashed=1;fillColor=none;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="10" width="290" height="220" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-46" value="" style="shape=table;html=1;whiteSpace=wrap;startSize=0;container=1;collapsible=0;childLayout=tableLayout;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="140" y="50" width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-47" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;collapsible=0;dropTarget=0;fillColor=none;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="kOVlQaIc8lPUFRllz-rx-46" vertex="1">
          <mxGeometry width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-48" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="kOVlQaIc8lPUFRllz-rx-47" vertex="1">
          <mxGeometry width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-49" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="kOVlQaIc8lPUFRllz-rx-47" vertex="1">
          <mxGeometry x="40" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-50" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="kOVlQaIc8lPUFRllz-rx-47" vertex="1">
          <mxGeometry x="80" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-51" value="upstream pipe" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="170" y="20" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-52" value="epoll" style="rounded=1;whiteSpace=wrap;html=1;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="40" y="59" width="35" height="32" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-100" source="kOVlQaIc8lPUFRllz-rx-46" target="kOVlQaIc8lPUFRllz-rx-52" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-187" value="" style="shape=table;html=1;whiteSpace=wrap;startSize=0;container=1;collapsible=0;childLayout=tableLayout;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="140" y="145" width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-188" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;top=0;left=0;bottom=0;right=0;collapsible=0;dropTarget=0;fillColor=none;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="lICF3bmKFS8WhWq9-VQm-187" vertex="1">
          <mxGeometry width="120" height="50" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-189" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="lICF3bmKFS8WhWq9-VQm-188" vertex="1">
          <mxGeometry width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-190" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="lICF3bmKFS8WhWq9-VQm-188" vertex="1">
          <mxGeometry x="40" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-191" value="whole TCP&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;frame" style="shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;" parent="lICF3bmKFS8WhWq9-VQm-188" vertex="1">
          <mxGeometry x="80" width="40" height="50" as="geometry">
            <mxRectangle width="40" height="50" as="alternateBounds" />
          </mxGeometry>
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-194" value="upstream pipe" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="170" y="115" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-58" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=2;" parent="KYd3yMNsDL3AcNA57vXV-100" source="lICF3bmKFS8WhWq9-VQm-188" target="kOVlQaIc8lPUFRllz-rx-52" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-45" value="&lt;font style=&quot;font-size: 50px;&quot;&gt;...&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="KYd3yMNsDL3AcNA57vXV-100" vertex="1">
          <mxGeometry x="100" y="180" width="60" height="30" as="geometry" />
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-101" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;dashed=1;dashPattern=8 8;fillColor=#dae8fc;strokeColor=#6c8ebf;exitX=-0.002;exitY=0.719;exitDx=0;exitDy=0;exitPerimeter=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="KYd3yMNsDL3AcNA57vXV-87" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="730" y="790" as="sourcePoint" />
            <mxPoint x="450" y="790" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="3g0CCDWCjrM8qJ0CmiBs-49" value="when request to read IO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="KYd3yMNsDL3AcNA57vXV-101" vertex="1" connectable="0">
          <mxGeometry x="-0.1302" y="1" relative="1" as="geometry">
            <mxPoint x="24" y="-1" as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="KYd3yMNsDL3AcNA57vXV-93" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" parent="KYd3yMNsDL3AcNA57vXV-103" source="lICF3bmKFS8WhWq9-VQm-150" target="KYd3yMNsDL3AcNA57vXV-89" edge="1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="lICF3bmKFS8WhWq9-VQm-201" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="qkgwZPIFRnLG9CClONk3-71" target="lICF3bmKFS8WhWq9-VQm-188" edge="1">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="490" y="519" />
              <mxPoint x="490" y="770" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="kOVlQaIc8lPUFRllz-rx-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;shape=flexArrow;entryX=1.006;entryY=0.763;entryDx=0;entryDy=0;entryPerimeter=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="kOVlQaIc8lPUFRllz-rx-52" target="2" edge="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="120" y="675" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="3g0CCDWCjrM8qJ0CmiBs-46" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=elbowEdgeStyle;dashed=1;dashPattern=8 8;shape=flexArrow;fillColor=#dae8fc;strokeColor=#6c8ebf;elbow=vertical;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="KYd3yMNsDL3AcNA57vXV-103" source="lICF3bmKFS8WhWq9-VQm-150" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="550" y="420" as="sourcePoint" />
            <mxPoint x="764" y="700" as="targetPoint" />
            <Array as="points">
              <mxPoint x="650" y="600" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="3g0CCDWCjrM8qJ0CmiBs-47" value="IO read request" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="3g0CCDWCjrM8qJ0CmiBs-46" vertex="1" connectable="0">
          <mxGeometry x="0.2252" y="-1" relative="1" as="geometry">
            <mxPoint x="-196" y="-1" as="offset" />
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
