<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:137.0) Gecko/20100101 Firefox/137.0" version="26.2.9" pages="6">
  <diagram name="3.x" id="93W3reYYHBEfTuUd44ui">
    <mxGraphModel dx="1121" dy="701" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="SeUWsLFjIapJUgc2huG1-1" value="&lt;div&gt;I/O Transport&lt;/div&gt;&lt;div&gt;(NIO2, MINA, Netty)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="60" y="900" width="480" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-11" value="Filter 1" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="780" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-13" value="Filter 2" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="660" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-14" value="Filter n" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="420" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-15" value="InputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="120" y="790" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-16" value="InputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="120" y="670" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-17" value="InputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="120" y="430" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-18" value="OutputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="360" y="430" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-19" value="OutputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="360" y="670" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-20" value="OutputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="360" y="790" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-21" value="AbstractSession" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="260" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-22" value="&lt;div&gt;User Authentication Service&lt;/div&gt;&lt;div&gt;(RFC 4252)&lt;/div&gt;&lt;div&gt;pubkey, password, ...&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="20" width="200" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-23" value="&lt;div&gt;Connection Service&lt;/div&gt;&lt;div&gt;(RFC 4254)&lt;/div&gt;&lt;div&gt;channels, shells, port forwarding, ...&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="320" y="20" width="200" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-24" value="CurrentService" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="240" y="180" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-25" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="600" y="260" width="120" height="610" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-26" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-21" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="520" y="297" as="sourcePoint" />
            <mxPoint x="600" y="300" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-29" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-21" target="SeUWsLFjIapJUgc2huG1-24" edge="1">
          <mxGeometry x="-0.5" y="-10" relative="1" as="geometry">
            <mxPoint x="530" y="310" as="sourcePoint" />
            <mxPoint x="610" y="310" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-30" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-24" target="SeUWsLFjIapJUgc2huG1-23" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="350" y="230" as="sourcePoint" />
            <mxPoint x="510" y="230" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-31" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-24" target="SeUWsLFjIapJUgc2huG1-22" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="340" y="190" as="sourcePoint" />
            <mxPoint x="430" y="110" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-32" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-41" target="SeUWsLFjIapJUgc2huG1-14" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="390" y="540" as="sourcePoint" />
            <mxPoint x="550" y="540" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-33" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-42" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="600" y="699.75" as="sourcePoint" />
            <mxPoint x="520" y="699.75" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-34" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-43" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="600" y="819.75" as="sourcePoint" />
            <mxPoint x="520" y="819.75" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-35" value="handleMessage()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="125" y="310" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-36" value="write()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="365" y="260" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-37" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="530" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-38" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="620" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-39" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="575" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-40" value="&lt;div&gt;Filter Chain&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="615" y="270" width="90" height="40" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-41" value="FilterContext" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="615" y="420" width="95" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-42" value="FilterContext" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="615" y="660" width="95" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-43" value="FilterContext" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="615" y="780" width="95" height="80" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-44" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" source="SeUWsLFjIapJUgc2huG1-42" target="SeUWsLFjIapJUgc2huG1-41" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="670" y="620" as="sourcePoint" />
            <mxPoint x="720" y="570" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-45" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" source="SeUWsLFjIapJUgc2huG1-41" target="SeUWsLFjIapJUgc2huG1-42" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="760" y="670" as="sourcePoint" />
            <mxPoint x="760" y="510" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-46" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" source="SeUWsLFjIapJUgc2huG1-42" target="SeUWsLFjIapJUgc2huG1-43" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="760" y="620" as="sourcePoint" />
            <mxPoint x="760" y="780" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-47" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;endFill=1;startFill=1;startArrow=classicThin;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-43" target="SeUWsLFjIapJUgc2huG1-42" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="790" y="770" as="sourcePoint" />
            <mxPoint x="790" y="610" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-48" value="&lt;div align=&quot;center&quot;&gt;head/first&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeColor=default;" parent="1" vertex="1">
          <mxGeometry x="650" y="320" width="60" height="20" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-49" value="&lt;div align=&quot;center&quot;&gt;tail/last&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeColor=default;" parent="1" vertex="1">
          <mxGeometry x="650" y="360" width="60" height="20" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-50" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="SeUWsLFjIapJUgc2huG1-49" target="SeUWsLFjIapJUgc2huG1-41" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="670" y="460" as="sourcePoint" />
            <mxPoint x="720" y="410" as="targetPoint" />
            <Array as="points">
              <mxPoint x="740" y="370" />
              <mxPoint x="740" y="460" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-51" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-48" target="SeUWsLFjIapJUgc2huG1-43" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="720" y="380" as="sourcePoint" />
            <mxPoint x="760" y="760" as="targetPoint" />
            <Array as="points">
              <mxPoint x="760" y="330" />
              <mxPoint x="760" y="820" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-52" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-1" target="SeUWsLFjIapJUgc2huG1-15" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="160" y="880" as="sourcePoint" />
            <mxPoint x="470" y="670" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-53" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-15" target="SeUWsLFjIapJUgc2huG1-16" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="910" as="sourcePoint" />
            <mxPoint x="190" y="860" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-54" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;dashed=1;" parent="1" source="SeUWsLFjIapJUgc2huG1-16" target="SeUWsLFjIapJUgc2huG1-17" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="800" as="sourcePoint" />
            <mxPoint x="190" y="740" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-56" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-17" target="SeUWsLFjIapJUgc2huG1-35" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="800" as="sourcePoint" />
            <mxPoint x="190" y="740" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-57" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-35" target="SeUWsLFjIapJUgc2huG1-24" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="440" as="sourcePoint" />
            <mxPoint x="190" y="350" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-58" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-36" target="SeUWsLFjIapJUgc2huG1-18" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="440" as="sourcePoint" />
            <mxPoint x="190" y="350" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-59" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-19" target="SeUWsLFjIapJUgc2huG1-20" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="430" y="350" as="sourcePoint" />
            <mxPoint x="430" y="440" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-60" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeColor=#FF0000;strokeWidth=2;" parent="1" target="SeUWsLFjIapJUgc2huG1-1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="420" y="850" as="sourcePoint" />
            <mxPoint x="430" y="800" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-61" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;dashed=1;" parent="1" source="SeUWsLFjIapJUgc2huG1-18" target="SeUWsLFjIapJUgc2huG1-19" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="680" as="sourcePoint" />
            <mxPoint x="190" y="500" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-63" value="&lt;div&gt;I/O port&lt;/div&gt;&lt;div&gt;(socket)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="240" y="1020" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-64" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-63" target="SeUWsLFjIapJUgc2huG1-1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="910" as="sourcePoint" />
            <mxPoint x="190" y="860" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-65" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-1" target="SeUWsLFjIapJUgc2huG1-63" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="310" y="1070" as="sourcePoint" />
            <mxPoint x="190" y="1030" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-67" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="SeUWsLFjIapJUgc2huG1-24" target="SeUWsLFjIapJUgc2huG1-23" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="320" as="sourcePoint" />
            <mxPoint x="280" y="230" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="SeUWsLFjIapJUgc2huG1-68" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="SeUWsLFjIapJUgc2huG1-23" target="SeUWsLFjIapJUgc2huG1-36" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="310" y="190" as="sourcePoint" />
            <mxPoint x="390" y="110" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="JBNKkuUN4tP-uXAIWEEZ-1" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=#0000FF;strokeWidth=2;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="SeUWsLFjIapJUgc2huG1-63">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="269.75" y="1090" as="sourcePoint" />
            <mxPoint x="270" y="1070" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="JBNKkuUN4tP-uXAIWEEZ-2" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=#FF0000;strokeWidth=2;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="SeUWsLFjIapJUgc2huG1-63">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="330" y="1070" as="sourcePoint" />
            <mxPoint x="329.75" y="1090" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="HJg2X-masyxf-9KX4OKN-1" value="next" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="624.5" y="660" width="30" height="20" as="geometry" />
        </mxCell>
        <mxCell id="HJg2X-masyxf-9KX4OKN-2" value="next" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="624.5" y="780" width="30" height="20" as="geometry" />
        </mxCell>
        <mxCell id="HJg2X-masyxf-9KX4OKN-3" value="prev" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="670.5" y="480" width="30" height="20" as="geometry" />
        </mxCell>
        <mxCell id="HJg2X-masyxf-9KX4OKN-4" value="prev" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
          <mxGeometry x="670.5" y="720" width="30" height="20" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="En7fXwvqHPu-NXSdEbMA" name="Context">
    <mxGraphModel dx="1121" dy="701" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="9zoJOaU1kOAghH7AaQmB-1" value="Filter &lt;i&gt;n&lt;/i&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="780" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-2" value="Filter &lt;i&gt;n+1&lt;/i&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="80" y="660" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-3" value="InputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="120" y="790" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-4" value="InputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="120" y="670" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-5" value="OutputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="360" y="670" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-6" value="OutputHandler" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="360" y="790" width="120" height="60" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-7" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="600" y="540" width="120" height="420" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-8" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="579.5" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-9" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="620" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-10" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="600" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-11" value="&lt;div&gt;Filter Chain&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="615" y="549.5" width="90" height="40" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-13" value="FilterContext" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="615" y="660" width="95" height="80" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-14" value="FilterContext" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="615" y="780" width="95" height="80" as="geometry" />
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-15" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" source="9zoJOaU1kOAghH7AaQmB-13" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="670" y="620" as="sourcePoint" />
            <mxPoint x="686.25" y="600" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-16" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" target="9zoJOaU1kOAghH7AaQmB-13" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="638.75" y="600" as="sourcePoint" />
            <mxPoint x="760" y="510" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-17" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" source="9zoJOaU1kOAghH7AaQmB-13" target="9zoJOaU1kOAghH7AaQmB-14" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="760" y="620" as="sourcePoint" />
            <mxPoint x="760" y="780" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-18" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;endFill=1;startFill=1;startArrow=classicThin;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="9zoJOaU1kOAghH7AaQmB-14" target="9zoJOaU1kOAghH7AaQmB-13" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="790" y="770" as="sourcePoint" />
            <mxPoint x="790" y="610" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-23" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=1;dashed=1;dashPattern=1 4;" parent="1" source="9zoJOaU1kOAghH7AaQmB-3" target="9zoJOaU1kOAghH7AaQmB-4" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="910" as="sourcePoint" />
            <mxPoint x="190" y="860" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9zoJOaU1kOAghH7AaQmB-24" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=1;dashed=1;dashPattern=1 4;" parent="1" source="9zoJOaU1kOAghH7AaQmB-5" target="9zoJOaU1kOAghH7AaQmB-6" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="430" y="350" as="sourcePoint" />
            <mxPoint x="430" y="440" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-1" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="615" y="700" as="sourcePoint" />
            <mxPoint x="520" y="699.75" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-2" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" edge="1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="615" y="820" as="sourcePoint" />
            <mxPoint x="520" y="819.75" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-4" value="&lt;div align=&quot;left&quot;&gt;filter&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="520" y="810" width="30" height="10" as="geometry" />
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-5" value="&lt;div align=&quot;left&quot;&gt;filter&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="520" y="690" width="30" height="10" as="geometry" />
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-6" value="&lt;div align=&quot;right&quot;&gt;owner&lt;/div&gt;" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="560" y="700" width="40" height="10" as="geometry" />
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-7" value="&lt;div align=&quot;right&quot;&gt;owner&lt;/div&gt;" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="560" y="820" width="40" height="10" as="geometry" />
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=-0.005;entryY=0.694;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#FF0000;strokeWidth=2;" parent="1" source="9zoJOaU1kOAghH7AaQmB-5" target="9zoJOaU1kOAghH7AaQmB-13" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="520" y="780" as="sourcePoint" />
            <mxPoint x="570" y="730" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-10" value="" style="endArrow=classic;html=1;rounded=0;exitX=-0.005;exitY=0.688;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;strokeColor=#FF0000;exitPerimeter=0;strokeWidth=2;" parent="1" source="9zoJOaU1kOAghH7AaQmB-14" target="9zoJOaU1kOAghH7AaQmB-6" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="490" y="725" as="sourcePoint" />
            <mxPoint x="625" y="726" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="4ae1mWehYuNT-o9Glzmu-11" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.688;exitDx=0;exitDy=0;entryX=0;entryY=0.688;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#FF0000;strokeWidth=2;dashed=1;dashPattern=1 2;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="9zoJOaU1kOAghH7AaQmB-13" target="9zoJOaU1kOAghH7AaQmB-14" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="490" y="725" as="sourcePoint" />
            <mxPoint x="625" y="726" as="targetPoint" />
            <Array as="points">
              <mxPoint x="700" y="715" />
              <mxPoint x="700" y="835" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-1" value="" style="endArrow=classic;html=1;rounded=0;entryX=-0.005;entryY=0.306;entryDx=0;entryDy=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;entryPerimeter=0;" parent="1" source="9zoJOaU1kOAghH7AaQmB-3" target="9zoJOaU1kOAghH7AaQmB-14" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="190" y="800" as="sourcePoint" />
            <mxPoint x="190" y="740" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=-0.005;exitY=0.313;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;exitPerimeter=0;" parent="1" source="9zoJOaU1kOAghH7AaQmB-13" target="9zoJOaU1kOAghH7AaQmB-4" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="250" y="815" as="sourcePoint" />
            <mxPoint x="625" y="814" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-3" value="" style="endArrow=none;html=1;rounded=0;exitX=-0.005;exitY=0.306;exitDx=0;exitDy=0;entryX=0;entryY=0.313;entryDx=0;entryDy=0;entryPerimeter=0;strokeColor=#0000FF;strokeWidth=2;dashed=1;dashPattern=1 2;exitPerimeter=0;edgeStyle=orthogonalEdgeStyle;startArrow=classic;startFill=1;" parent="1" source="9zoJOaU1kOAghH7AaQmB-13" target="9zoJOaU1kOAghH7AaQmB-14" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="625" y="725" as="sourcePoint" />
            <mxPoint x="625" y="845" as="targetPoint" />
            <Array as="points">
              <mxPoint x="650" y="685" />
              <mxPoint x="650" y="805" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-6" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="890" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-7" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="930.5" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-8" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" parent="1" vertex="1">
          <mxGeometry x="295" y="910.5" width="10" height="10" as="geometry" />
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-9" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="685.88" y="920" as="sourcePoint" />
            <mxPoint x="686.13" y="860" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="vVA_tsm4h4jxl43jQiV4-10" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;endFill=1;startFill=1;startArrow=classicThin;" parent="1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="638.63" y="860" as="sourcePoint" />
            <mxPoint x="638.88" y="920" as="targetPoint" />
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="3E4fNF49bOonhBg35vgt" name="SSH transport chain">
    <mxGraphModel dx="804" dy="678" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="jcOvmlgZh9FjUryh4rz4-1" value="IdentFilter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="760" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-2" value="&lt;div align=&quot;left&quot;&gt;If first:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;read SSH protocol ident&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="770" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-3" value="&lt;div&gt;If first:&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;send&lt;/b&gt;&lt;/span&gt; &lt;/span&gt;SSH protocol ident&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="770" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-4" value="CryptFilter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="660" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-5" value="&lt;div align=&quot;left&quot;&gt;If encryption is on:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;decrypt, then &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="670" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-7" value="&lt;div align=&quot;left&quot;&gt;If encryption is on:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;encrypt, then &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="670" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-8" value="CompressionFilter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="560" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-9" value="&lt;div align=&quot;left&quot;&gt;If compression is on:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;b&gt;decompress&lt;/b&gt;&lt;/span&gt;&lt;b&gt;, then &lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="570" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-10" value="&lt;div align=&quot;left&quot;&gt;If compression is on:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;b&gt;compress&lt;/b&gt;&lt;/span&gt;&lt;b&gt;, then &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;send &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0);&quot;&gt;&lt;b&gt;on&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="570" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-12" value="PacketLoggingFilter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="460" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-13" value="&lt;div&gt;log incoming SSH packet&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="470" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-14" value="&lt;div&gt;log outgoing SSH packet&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="470" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-15" value="&lt;div&gt;KexFilter&lt;/div&gt;&lt;div&gt;(KEXINIT, negotiation,&lt;/div&gt;&lt;div&gt;actual KEX, NEWKEYS)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="140" width="540" height="170" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-16" value="&lt;div&gt;If msg is for key exchange:&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;b&gt;handle and &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send reply&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;/b&gt;(may start KEX if msg is&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;/b&gt;SSH_MSG_KEXINIT)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;else if in KEX and msg not allowed:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;fail&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;&lt;b&gt;pass on&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;if need key exchange now:&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;send SSH_MSG_KEXINIT&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="150" width="190" height="150" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-17" value="&lt;div align=&quot;left&quot;&gt;If in key exchange:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;buffer messages from above;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;send&lt;/b&gt; them once KEX is over&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;if need key exchange now:&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;send SSH_MSG_KEXINIT&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="150" width="190" height="150" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-18" value="I/O Transport" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="860" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="jcOvmlgZh9FjUryh4rz4-19" value="AbstractSession" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="60" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="yoY2K659-_JpB-bgtqwU-1" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;flipH=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;strokeWidth=2;" parent="1" vertex="1">
          <mxGeometry x="630" y="140" width="30" height="700" as="geometry" />
        </mxCell>
        <mxCell id="yoY2K659-_JpB-bgtqwU-2" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;SSH Transport Filter&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=90;" parent="1" vertex="1">
          <mxGeometry x="620" y="475" width="150" height="30" as="geometry" />
        </mxCell>
        <mxCell id="sL3bI87Otc73480tJn9R-1" value="InjectIgnoreFilter" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="330" width="540" height="110" as="geometry" />
        </mxCell>
        <mxCell id="sL3bI87Otc73480tJn9R-3" value="&lt;div&gt;if should inject ignore (based on time or #messages since last ignore) &amp;amp;&amp;amp; not a KEX message:&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;b&gt;send SSH_MSG_IGNORE&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
          <mxGeometry x="380" y="340" width="190" height="90" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="YisYAQbi7SsbcS7fZ7XD" name="SSH transport filter">
    <mxGraphModel dx="1121" dy="701" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="GInOKrxfIlBCRgrD41IH-1" value="&lt;div&gt;SSH Transport Filter&lt;/div&gt;&lt;div&gt;(RFC 4253 incl.&lt;/div&gt;&lt;div&gt;key exchange)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="320" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="GInOKrxfIlBCRgrD41IH-2" value="&lt;div align=&quot;left&quot;&gt;If high-level msg:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;handle and &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send reply&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="330" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="GInOKrxfIlBCRgrD41IH-3" value="&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt; &lt;/b&gt;and transparently take care of low-level details&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="330" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="GInOKrxfIlBCRgrD41IH-4" value="I/O Transport" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="420" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="e9VPYIY8Uydfpl_vcXT0-1" value="AbstractSession" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="20" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="EbLgR7Cw_XR9uop6y1On-1" value="handleMessage()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="90" y="50" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="EbLgR7Cw_XR9uop6y1On-2" value="write()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="420" y="50" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="EbLgR7Cw_XR9uop6y1On-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeWidth=2;strokeColor=#0000FF;" parent="1" source="GInOKrxfIlBCRgrD41IH-2" target="EbLgR7Cw_XR9uop6y1On-1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="390" y="320" as="sourcePoint" />
            <mxPoint x="440" y="270" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="EbLgR7Cw_XR9uop6y1On-5" value="&lt;div align=&quot;left&quot;&gt;SSH_MSG_DISCONNECT&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;SSH_MSG_IGNORE&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;SSH_MSG_UNIMPLEMENTED&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;SSH_MSG_DEBUG&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;SSH_MSG_SERVICE_REQUEST&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;SSH_MSG_SERVICE_ACCEPT&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;div align=&quot;left&quot;&gt;RFC 4252 messages (user auth)&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;RFC 4254 messages (connection)&lt;/div&gt;unknown messages&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="160" y="140" width="200" height="130" as="geometry" />
        </mxCell>
        <mxCell id="vZ7YBAahGauW2TGzXRDU-1" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;strokeWidth=2;strokeColor=#FF0000;" parent="1" source="EbLgR7Cw_XR9uop6y1On-2" target="GInOKrxfIlBCRgrD41IH-3" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="155" y="340" as="sourcePoint" />
            <mxPoint x="155" y="90" as="targetPoint" />
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="VRUCrS8l-06pI1JwzTeL" name="Proxy">
    <mxGraphModel dx="1121" dy="1870" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-1" value="SSH Transport Filter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="-1040" width="540" height="80" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-2" value="&lt;div align=&quot;left&quot;&gt;If high-level msg:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;handle and &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send reply&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="-1030" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-3" value="&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt; &lt;/b&gt;and transparently take care of low-level details&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="-1030" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-4" value="I/O Transport" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="-790" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-5" value="" style="group" parent="1" vertex="1" connectable="0">
          <mxGeometry x="40" y="-1120" width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-6" value="AbstractSession" style="rounded=0;whiteSpace=wrap;html=1;" parent="MzAHhzvjKLWb1_eyRlG3-5" vertex="1">
          <mxGeometry width="540" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-7" value="handleMessage()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="MzAHhzvjKLWb1_eyRlG3-5" vertex="1">
          <mxGeometry x="50" y="30" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-8" value="write()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="MzAHhzvjKLWb1_eyRlG3-5" vertex="1">
          <mxGeometry x="380" y="30" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-9" value="Proxy Filter" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="-940" width="540" height="130" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-10" value="&lt;div align=&quot;left&quot;&gt;If proxy protocol msg:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;b&gt;handle and &lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send reply&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 255);&quot;&gt;pass on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="50" y="-905" width="190" height="60" as="geometry" />
        </mxCell>
        <mxCell id="MzAHhzvjKLWb1_eyRlG3-11" value="&lt;div align=&quot;left&quot;&gt;If first and using proxy:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;buffer message&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send&lt;/span&gt; proxy protocol start&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send&lt;/span&gt; message once proxy&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;b&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;tunnel established&lt;/b&gt;&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;else:&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&#x9;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;send on&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
          <mxGeometry x="380" y="-930" width="190" height="110" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="q6-8oHBQRqZUW48CghBg" name="2.x">
    <mxGraphModel dx="1121" dy="701" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="RpgorseLi4abtQ-OvLaq-1" value="&lt;div&gt;I/O Transport&lt;/div&gt;&lt;div&gt;(NIO2, MINA, Netty)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="20" y="480" width="480" height="80" as="geometry" />
        </mxCell>
        <mxCell id="9IJndupuuO0yzY9wfIE2-1" value="&lt;div&gt;I/O port&lt;/div&gt;&lt;div&gt;(socket)&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="200" y="600" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="9IJndupuuO0yzY9wfIE2-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" parent="1" source="9IJndupuuO0yzY9wfIE2-1" edge="1" target="RpgorseLi4abtQ-OvLaq-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="150" y="450" as="sourcePoint" />
            <mxPoint x="140" y="560" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="9IJndupuuO0yzY9wfIE2-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;exitPerimeter=0;" parent="1" target="9IJndupuuO0yzY9wfIE2-1" edge="1" source="RpgorseLi4abtQ-OvLaq-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="380" y="560" as="sourcePoint" />
            <mxPoint x="150" y="570" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="V1fThXO612egQc6p6Pqm-2" value="AbstractSession" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
          <mxGeometry x="40" y="360" width="440" height="80" as="geometry" />
        </mxCell>
        <mxCell id="rbI45LS5nE-T0nOvG1LZ-3" value="handleMessage()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="85" y="410" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rbI45LS5nE-T0nOvG1LZ-4" value="write()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="325" y="360" width="110" height="30" as="geometry" />
        </mxCell>
        <mxCell id="V1fThXO612egQc6p6Pqm-3" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=#0000FF;strokeWidth=2;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="rbI45LS5nE-T0nOvG1LZ-3" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="140" y="480" as="sourcePoint" />
            <mxPoint x="130" y="460" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="V1fThXO612egQc6p6Pqm-4" value="" style="endArrow=classic;html=1;rounded=0;strokeColor=#FF0000;strokeWidth=2;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="rbI45LS5nE-T0nOvG1LZ-4" target="RpgorseLi4abtQ-OvLaq-1" edge="1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="400" y="460" as="sourcePoint" />
            <mxPoint x="360" y="460" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="V1fThXO612egQc6p6Pqm-5" value="&lt;div align=&quot;left&quot;&gt;Handled&lt;/div&gt;&lt;div align=&quot;left&quot;&gt;&lt;ul&gt;&lt;li&gt;SSH protocol ident&lt;/li&gt;&lt;li&gt;encryption&lt;/li&gt;&lt;li&gt;compression&lt;/li&gt;&lt;li&gt;key exchange,&lt;/li&gt;&lt;li&gt;current service,&lt;/li&gt;&lt;li&gt;low-level messages&lt;/li&gt;&lt;li&gt;SSH_MSG_GLOBAL_REQUEST (from RFC 4254)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
          <mxGeometry x="520" y="325" width="220" height="160" as="geometry" />
        </mxCell>
        <mxCell id="V1fThXO612egQc6p6Pqm-8" value="" style="shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;" parent="1" vertex="1">
          <mxGeometry x="500" y="325" width="20" height="150" as="geometry" />
        </mxCell>
        <mxCell id="PZfINOEox0LK10aS5dxq-1" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;strokeColor=#0000FF;strokeWidth=2;" edge="1" parent="1" target="9IJndupuuO0yzY9wfIE2-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="230" y="670" as="sourcePoint" />
            <mxPoint x="210" y="690" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="PZfINOEox0LK10aS5dxq-2" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;" edge="1" parent="1" source="9IJndupuuO0yzY9wfIE2-1">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="390" y="570" as="sourcePoint" />
            <mxPoint x="290" y="670" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-1" value="&lt;div&gt;User Authentication Service&lt;/div&gt;&lt;div&gt;(RFC 4252)&lt;/div&gt;&lt;div&gt;pubkey, password, ...&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="40" y="120" width="200" height="80" as="geometry" />
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-2" value="&lt;div&gt;Connection Service&lt;/div&gt;&lt;div&gt;(RFC 4254)&lt;/div&gt;&lt;div&gt;channels, shells, port forwarding, ...&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="280" y="120" width="200" height="80" as="geometry" />
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-3" value="CurrentService" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
          <mxGeometry x="200" y="280" width="120" height="40" as="geometry" />
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-4" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="QYCdDCDy3RhrupvWHk5Y-3">
          <mxGeometry x="-0.5" y="-10" relative="1" as="geometry">
            <mxPoint x="260" y="360" as="sourcePoint" />
            <mxPoint x="570" y="410" as="targetPoint" />
            <mxPoint as="offset" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-5" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="QYCdDCDy3RhrupvWHk5Y-3" target="QYCdDCDy3RhrupvWHk5Y-2">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="310" y="330" as="sourcePoint" />
            <mxPoint x="470" y="330" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-6" value="" style="endArrow=open;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="QYCdDCDy3RhrupvWHk5Y-3" target="QYCdDCDy3RhrupvWHk5Y-1">
          <mxGeometry x="-1" y="3" relative="1" as="geometry">
            <mxPoint x="300" y="290" as="sourcePoint" />
            <mxPoint x="390" y="210" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-7" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" edge="1" parent="1" target="QYCdDCDy3RhrupvWHk5Y-3" source="rbI45LS5nE-T0nOvG1LZ-3">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="140" y="410" as="sourcePoint" />
            <mxPoint x="150" y="450" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-8" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;strokeColor=#0000FF;strokeWidth=2;" edge="1" parent="1" source="QYCdDCDy3RhrupvWHk5Y-3" target="QYCdDCDy3RhrupvWHk5Y-2">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="150" y="420" as="sourcePoint" />
            <mxPoint x="240" y="330" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="QYCdDCDy3RhrupvWHk5Y-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;strokeColor=#FF0000;strokeWidth=2;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="QYCdDCDy3RhrupvWHk5Y-2" target="rbI45LS5nE-T0nOvG1LZ-4">
          <mxGeometry width="50" height="50" relative="1" as="geometry">
            <mxPoint x="270" y="290" as="sourcePoint" />
            <mxPoint x="420" y="340" as="targetPoint" />
          </mxGeometry>
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
