docs/user/examples/incubator/figures/dt-structure.svg
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="881px" height="297px" viewBox="-0.5 -0.5 881 297" content="<mxfile host="Electron" modified="2024-03-15T12:17:05.311Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.0.4 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" version="24.0.4" etag="TgSg9LhX26nwZsurK-2O" type="device" scale="1" border="0"> <diagram name="Page-1" id="A0zoeHJWJ5ttViKvrhVf"> <mxGraphModel dx="1834" dy="1174" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" math="1" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="2" value="" style="rounded=1;whiteSpace=wrap;html=1;fontSize=8;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="1"> <mxGeometry x="-400" y="80" width="320" height="80" as="geometry" /> </mxCell> <mxCell id="3" value="&amp;nbsp;(Mock) PhysicalTwin" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;verticalAlign=top;align=left;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1"> <mxGeometry x="-400" y="-90" width="410" height="160" as="geometry" /> </mxCell> <mxCell id="4" value="DigitalTwin" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;verticalAlign=top;align=left;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1"> <mxGeometry x="20" y="-90" width="460" height="180" as="geometry" /> </mxCell> <mxCell id="5" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" source="26" target="7" parent="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="90" y="85" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="6" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;entryX=0.5;entryY=0.5;endSize=6;strokeWidth=1;sketch=0;" edge="1" source="24" target="7" parent="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-160" y="10" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="7" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;resizable=0;points=[];outlineConnect=0;sketch=0;" vertex="1" parent="1"> <mxGeometry x="-200" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="8" value="low_level_driver_server" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxGeometry x="-221" y="42.5" width="135" height="20" as="geometry" /> </mxCell> <mxCell id="9" value="&amp;lt;&amp;lt;MessageExchange&amp;gt;&amp;gt;&lt;br&gt;&lt;b&gt;RabbitMQ&lt;/b&gt;" style="html=1;dropTarget=0;" vertex="1" parent="1"> <mxGeometry x="200" y="115" width="190" height="35" as="geometry" /> </mxCell> <mxCell id="10" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" vertex="1" parent="9"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="11" value="«TimeSeriesDB»&lt;br&gt;&lt;b&gt;InfluxDB&lt;/b&gt;" style="html=1;dropTarget=0;" vertex="1" parent="1"> <mxGeometry x="220" y="-136" width="162.5" height="36" as="geometry" /> </mxCell> <mxCell id="12" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" vertex="1" parent="11"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="13" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-92.4;" vertex="1" parent="1"> <mxGeometry x="285" y="63" width="20" height="20" as="geometry" /> </mxCell> <mxCell id="14" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" target="13" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="295" y="114" as="sourcePoint" /> <mxPoint x="70" y="-37" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="15" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=90;" vertex="1" parent="1"> <mxGeometry x="291.25" y="-57" width="20" height="20" as="geometry" /> </mxCell> <mxCell id="16" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" source="11" target="15" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="20" y="80" as="sourcePoint" /> <mxPoint x="70" y="30" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="17" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" source="15" target="28" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="191.25" y="-77" as="sourcePoint" /> <mxPoint x="191.25" y="-57" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="18" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" source="28" target="13" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="191.25" y="-37" as="sourcePoint" /> <mxPoint x="155" y="-7" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="19" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" source="30" target="13" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="262.4974567230281" y="38" as="sourcePoint" /> <mxPoint x="105" y="-12" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="20" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" source="30" target="15" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="262.7631578947369" y="-22" as="sourcePoint" /> <mxPoint x="190.83124346270802" y="103.0087716990115" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="21" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" source="32" target="13" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="352.5" y="38" as="sourcePoint" /> <mxPoint x="190.83124346270802" y="103.0087716990115" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="22" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" source="15" target="32" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="330" y="45.063740085160816" as="sourcePoint" /> <mxPoint x="352.5" y="-22" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="23" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" source="24" target="13" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-75" y="70" as="sourcePoint" /> <mxPoint x="195" y="40" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="24" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center ; font-size: 11px&quot;&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;b&gt;Controller&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr style=&quot;font-size: 11px&quot;&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 11px&quot;&gt;&lt;br&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="-160" y="-26.25" width="160" height="62.5" as="geometry" /> </mxCell> <mxCell id="25" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="24"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="26" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center ; font-size: 13px&quot;&gt;&lt;font style=&quot;font-size: 13px&quot;&gt;&lt;b&gt;Plant&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr style=&quot;font-size: 13px&quot;&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 13px&quot;&gt;&lt;font style=&quot;font-size: 13px&quot;&gt;&lt;font style=&quot;font-size: 13px&quot;&gt;&lt;b&gt;+ T: Int&lt;span style=&quot;white-space: pre&quot;&gt; &lt;/span&gt;# Air temperature&lt;br&gt;+ heater_on: Bool&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 13px&quot;&gt;&lt;font style=&quot;font-size: 13px&quot;&gt;&lt;b&gt;# Status of heater&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="-392.5" y="-42.5" width="170" height="95" as="geometry" /> </mxCell> <mxCell id="27" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="26"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="28" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center ; font-size: 10px&quot;&gt;&lt;font style=&quot;font-size: 10px&quot;&gt;&lt;b&gt;KalmanFilter&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr style=&quot;font-size: 10px&quot;&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 10px&quot;&gt;&lt;font style=&quot;font-size: 10px&quot;&gt;&lt;b&gt;Estimates full Plant state&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 10px&quot;&gt;&lt;font style=&quot;font-size: 10px&quot;&gt;&lt;b&gt;(T and T_heater)&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="30" y="-19.5" width="140" height="55" as="geometry" /> </mxCell> <mxCell id="29" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="28"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="30" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center&quot;&gt;&lt;font style=&quot;font-size: 8px&quot;&gt;&lt;b&gt;SelfAdaptationManager&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr&gt;&lt;p style=&quot;text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px&quot;&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;b&gt;Implements the&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px&quot;&gt;&lt;font style=&quot;font-size: 11px&quot;&gt;&lt;b&gt;self adaptation loop&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="180" y="-19.5" width="140" height="55" as="geometry" /> </mxCell> <mxCell id="31" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="30"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="32" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center ; font-size: 9px&quot;&gt;&lt;font style=&quot;font-size: 9px&quot;&gt;&lt;b&gt;InfluxDataRecorder&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr style=&quot;font-size: 9px&quot;&gt;&lt;p style=&quot;text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px&quot;&gt;&lt;font style=&quot;font-size: 9px&quot;&gt;&lt;b&gt;Convenience service to record&amp;nbsp;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px&quot;&gt;&lt;font style=&quot;font-size: 9px&quot;&gt;&lt;b&gt;all state messages into DB&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="330" y="-19.5" width="140" height="55" as="geometry" /> </mxCell> <mxCell id="33" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="32"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="34" value="Legend:" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;spacing=6;" vertex="1" parent="1"> <mxGeometry x="-400" y="80" width="80" height="30" as="geometry" /> </mxCell> <mxCell id="35" value="&lt;p style=&quot;margin: 6px 0px 0px ; text-align: center ; font-size: 9px&quot;&gt;&lt;font style=&quot;font-size: 9px&quot;&gt;&lt;b&gt;Component&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;hr style=&quot;font-size: 9px&quot;&gt;&lt;p style=&quot;margin: 0px 0px 0px 8px ; font-size: 9px&quot;&gt;&lt;font style=&quot;font-size: 9px&quot;&gt;&lt;b&gt;Main variables, or responsibility.&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;" style="align=left;overflow=fill;html=1;dropTarget=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="-377.5" y="110" width="140" height="40" as="geometry" /> </mxCell> <mxCell id="36" value="" style="shape=component;jettyWidth=8;jettyHeight=4;fontSize=8;" vertex="1" parent="35"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-24" y="4" as="offset" /> </mxGeometry> </mxCell> <mxCell id="37" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=0;" vertex="1" parent="1"> <mxGeometry x="-163.5" y="120" width="20" height="20" as="geometry" /> </mxCell> <mxCell id="38" value="&lt;font style=&quot;font-size: 10px&quot;&gt;&lt;b&gt;interface provided&lt;/b&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="-222.5" y="115" width="40" height="30" as="geometry" /> </mxCell> <mxCell id="39" value="&lt;font style=&quot;font-size: 10px&quot;&gt;&lt;b&gt;interface required&lt;/b&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=0;fontSize=8;" vertex="1" parent="1"> <mxGeometry x="-127.5" y="115" width="50" height="30" as="geometry" /> </mxCell> <mxCell id="40" value="" style="endArrow=none;html=1;rounded=0;fontSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" source="37" target="39" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="112.5" y="120" as="sourcePoint" /> <mxPoint x="162.5" y="70" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="41" value="" style="endArrow=none;html=1;rounded=0;fontSize=8;" edge="1" source="37" target="38" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="112.5" y="120" as="sourcePoint" /> <mxPoint x="162.5" y="70" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="42" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" edge="1" source="8" target="7" parent="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="70" y="100" as="sourcePoint" /> <mxPoint x="120" y="50" as="targetPoint" /> </mxGeometry> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " style="background-color: rgb(255, 255, 255);"><defs><style xmlns="http://www.w3.org/1999/xhtml" id="MJX-SVG-styles">
mjx-container[jax="SVG"] {
 direction: ltr;
}

mjx-container[jax="SVG"] > svg {
 overflow: visible;
 min-height: 1px;
 min-width: 1px;
}

mjx-container[jax="SVG"] > svg a {
 fill: blue;
 stroke: blue;
}

mjx-container[jax="SVG"][display="true"] {
 display: block;
 text-align: center;
 margin: 1em 0;
}

mjx-container[jax="SVG"][display="true"][width="full"] {
 display: flex;
}

mjx-container[jax="SVG"][justify="left"] {
 text-align: left;
}

mjx-container[jax="SVG"][justify="right"] {
 text-align: right;
}

g[data-mml-node="merror"] > g {
 fill: red;
 stroke: red;
}

g[data-mml-node="merror"] > rect[data-background] {
 fill: yellow;
 stroke: none;
}

g[data-mml-node="mtable"] > line[data-line], svg[data-table] > g > line[data-line] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {
 stroke-dasharray: 140;
}

g[data-mml-node="mtable"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {
 stroke-linecap: round;
 stroke-dasharray: 0,140;
}

g[data-mml-node="mtable"] > g > svg {
 overflow: visible;
}

[jax="SVG"] mjx-tool {
 display: inline-block;
 position: relative;
 width: 0;
 height: 0;
}

[jax="SVG"] mjx-tool > mjx-tip {
 position: absolute;
 top: 0;
 left: 0;
}

mjx-tool > mjx-tip {
 display: inline-block;
 padding: .2em;
 border: 1px solid #888;
 font-size: 70%;
 background-color: #F8F8F8;
 color: black;
 box-shadow: 2px 2px 5px #AAAAAA;
}

g[data-mml-node="maction"][data-toggle] {
 cursor: pointer;
}

mjx-status {
 display: block;
 position: fixed;
 left: 1em;
 bottom: 1em;
 min-width: 25%;
 padding: .2em .4em;
 border: 1px solid #888;
 font-size: 90%;
 background-color: #F8F8F8;
 color: black;
}

foreignObject[data-mjx-xml] {
 font-family: initial;
 line-height: normal;
 overflow: visible;
}

mjx-container[jax="SVG"] path[data-c], mjx-container[jax="SVG"] use[data-c] {
 stroke-width: 3;
}
</style></defs><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><rect x="0" y="216" width="320" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" pointer-events="all"/></g><g><path d="M 0 60 L 0 46 L 40 46 L 40 60 M 0 60 L 410 60 L 410 206 L 0 206 Z" fill="#f8cecc" stroke="#b85450" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 63px; margin-left: 2px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap;"> (Mock) PhysicalTwin</div></div></div></foreignObject><text x="2" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold"> (Mock) PhysicalTwin</text></switch></g></g><g><path d="M 420 60 L 420 46 L 460 46 L 460 60 M 420 60 L 880 60 L 880 226 L 420 226 Z" fill="#d5e8d4" stroke="#82b366" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 63px; margin-left: 422px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: nowrap;">DigitalTwin</div></div></div></foreignObject><text x="422" y="75" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold">DigitalTwin</text></switch></g></g><g><path d="M 177.5 141 L 200 141" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 240 141 L 213 141" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 205 133 Q 213 133 213 141 Q 213 149 205 149" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="205" cy="141" rx="5" ry="5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><rect x="179" y="178.5" width="135" height="20" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 133px; height: 1px; padding-top: 189px; margin-left: 180px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">low_level_driver_server</div></div></div></foreignObject><text x="247" y="192" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">low_level_driver_server</text></switch></g></g><g><rect x="600" y="251" width="190" height="35" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 269px; margin-left: 695px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><<MessageExchange>><br /><b>RabbitMQ</b></div></div></div></foreignObject><text x="695" y="272" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle"><<MessageExchange>>...</text></switch></g></g><g><path d="M 767 258 L 783 258 L 783 278 L 767 278 L 767 274 L 763 274 L 763 270 L 767 270 L 767 266 L 763 266 L 763 262 L 767 262 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 767 262 L 771 262 L 771 266 L 767 266 M 767 270 L 771 270 L 771 274 L 767 274" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="620" y="0" width="162.5" height="36" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 18px; margin-left: 701px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">«TimeSeriesDB»<br /><b>InfluxDB</b></div></div></div></foreignObject><text x="701" y="22" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">«TimeSeriesDB»...</text></switch></g></g><g><path d="M 759.5 7 L 775.5 7 L 775.5 27 L 759.5 27 L 759.5 23 L 755.5 23 L 755.5 19 L 759.5 19 L 759.5 15 L 755.5 15 L 755.5 11 L 759.5 11 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 759.5 11 L 763.5 11 L 763.5 15 L 759.5 15 M 759.5 19 L 763.5 19 L 763.5 23 L 759.5 23" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="692" cy="209" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" transform="rotate(-92.4,695,209)" pointer-events="all"/><path d="M 695 199 Q 705 199 705 209 Q 705 219 695 219" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(-92.4,695,209)" pointer-events="all"/></g><g><path d="M 695 250 L 695.42 218.99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><ellipse cx="698.25" cy="89" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" transform="rotate(90,701.25,89)" pointer-events="all"/><path d="M 701.25 79 Q 711.25 79 711.25 89 Q 711.25 99 701.25 99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,701.25,89)" pointer-events="all"/></g><g><path d="M 701.25 36 L 701.25 79" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 701.25 99 L 500 116.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 500 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 650 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 650 116.5 L 701.25 99" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 800 171.5 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 701.25 99 L 800 116.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 320 172.25 L 694.58 199.01" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><rect x="240" y="109.75" width="160" height="62.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 162px; height: 63px; padding-top: 110px; margin-left: 240px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 160px; height: 63px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 11px"><font style="font-size: 11px"><b>Controller<br /></b></font></p><hr style="font-size: 11px" /><p style="margin: 0px 0px 0px 8px ; font-size: 11px"><br /></p></div></div></div></foreignObject><text x="240" y="143" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Controller...</text></switch></g></g><g><path d="M 380 113.75 L 396 113.75 L 396 133.75 L 380 133.75 L 380 129.75 L 376 129.75 L 376 125.75 L 380 125.75 L 380 121.75 L 376 121.75 L 376 117.75 L 380 117.75 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 380 117.75 L 384 117.75 L 384 121.75 L 380 121.75 M 380 125.75 L 384 125.75 L 384 129.75 L 380 129.75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="7.5" y="93.5" width="170" height="95" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 172px; height: 95px; padding-top: 94px; margin-left: 8px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 170px; height: 95px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 13px"><font style="font-size: 13px"><b>Plant<br /></b></font></p><hr style="font-size: 13px" /><p style="margin: 0px 0px 0px 8px ; font-size: 13px"><font style="font-size: 13px"><font style="font-size: 13px"><b>+ T: Int<span style="white-space: pre"> </span># Air temperature<br />+ heater_on: Bool </b></font></font></p><p style="margin: 0px 0px 0px 8px ; font-size: 13px"><font style="font-size: 13px"><b># Status of heater</b></font></p></div></div></div></foreignObject><text x="8" y="143" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Plant...</text></switch></g></g><g><path d="M 157.5 97.5 L 173.5 97.5 L 173.5 117.5 L 157.5 117.5 L 157.5 113.5 L 153.5 113.5 L 153.5 109.5 L 157.5 109.5 L 157.5 105.5 L 153.5 105.5 L 153.5 101.5 L 157.5 101.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 157.5 101.5 L 161.5 101.5 L 161.5 105.5 L 157.5 105.5 M 157.5 109.5 L 161.5 109.5 L 161.5 113.5 L 157.5 113.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="430" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 430px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 10px"><font style="font-size: 10px"><b>KalmanFilter<br /></b></font></p><hr style="font-size: 10px" /><p style="margin: 0px 0px 0px 8px ; font-size: 10px"><font style="font-size: 10px"><b>Estimates full Plant state </b></font></p><p style="margin: 0px 0px 0px 8px ; font-size: 10px"><font style="font-size: 10px"><b>(T and T_heater)</b></font></p></div></div></div></foreignObject><text x="430" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">KalmanFilter...</text></switch></g></g><g><path d="M 550 120.5 L 566 120.5 L 566 140.5 L 550 140.5 L 550 136.5 L 546 136.5 L 546 132.5 L 550 132.5 L 550 128.5 L 546 128.5 L 546 124.5 L 550 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 550 124.5 L 554 124.5 L 554 128.5 L 550 128.5 M 550 132.5 L 554 132.5 L 554 136.5 L 550 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="580" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 580px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center"><font style="font-size: 8px"><b>SelfAdaptationManager<br /></b></font></p><hr /><p style="text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px"><font style="font-size: 11px"><b>Implements the </b></font></p><p style="text-align: center ; margin: 0px 0px 0px 8px ; font-size: 11px"><font style="font-size: 11px"><b>self adaptation loop</b></font></p></div></div></div></foreignObject><text x="580" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">SelfAdaptationManager...</text></switch></g></g><g><path d="M 700 120.5 L 716 120.5 L 716 140.5 L 700 140.5 L 700 136.5 L 696 136.5 L 696 132.5 L 700 132.5 L 700 128.5 L 696 128.5 L 696 124.5 L 700 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 700 124.5 L 704 124.5 L 704 128.5 L 700 128.5 M 700 132.5 L 704 132.5 L 704 136.5 L 700 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="730" y="116.5" width="140" height="55" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 55px; padding-top: 117px; margin-left: 730px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 55px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 9px"><font style="font-size: 9px"><b>InfluxDataRecorder<br /></b></font></p><hr style="font-size: 9px" /><p style="text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>Convenience service to record </b></font></p><p style="text-align: justify ; margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>all state messages into DB</b></font></p></div></div></div></foreignObject><text x="730" y="146" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">InfluxDataRecorder...</text></switch></g></g><g><path d="M 850 120.5 L 866 120.5 L 866 140.5 L 850 140.5 L 850 136.5 L 846 136.5 L 846 132.5 L 850 132.5 L 850 128.5 L 846 128.5 L 846 124.5 L 850 124.5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 850 124.5 L 854 124.5 L 854 128.5 L 850 128.5 M 850 132.5 L 854 132.5 L 854 136.5 L 850 136.5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="0" y="216" width="80" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 70px; height: 1px; padding-top: 231px; margin-left: 6px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;">Legend:</div></div></div></foreignObject><text x="6" y="235" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" font-weight="bold">Legend:</text></switch></g></g><g><rect x="22.5" y="246" width="140" height="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 40px; padding-top: 246px; margin-left: 23px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left; width: 140px; height: 40px; overflow: hidden;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; width: 100%; height: 100%; white-space: nowrap;"><p style="margin: 6px 0px 0px ; text-align: center ; font-size: 9px"><font style="font-size: 9px"><b>Component<br /></b></font></p><hr style="font-size: 9px" /><p style="margin: 0px 0px 0px 8px ; font-size: 9px"><font style="font-size: 9px"><b>Main variables, or responsibility.</b></font></p></div></div></div></foreignObject><text x="23" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">Component...</text></switch></g></g><g><path d="M 142.5 250 L 158.5 250 L 158.5 270 L 142.5 270 L 142.5 266 L 138.5 266 L 138.5 262 L 142.5 262 L 142.5 258 L 138.5 258 L 138.5 254 L 142.5 254 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 142.5 254 L 146.5 254 L 146.5 258 L 142.5 258 M 142.5 262 L 146.5 262 L 146.5 266 L 142.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><ellipse cx="243.5" cy="266" rx="7" ry="7" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 246.5 256 Q 256.5 256 256.5 266 Q 256.5 276 246.5 276" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><rect x="177.5" y="251" width="40" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 38px; height: 1px; padding-top: 266px; margin-left: 180px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px"><b>interface provided</b></font></div></div></div></foreignObject><text x="180" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">interface...</text></switch></g></g><g><rect x="272.5" y="251" width="50" height="30" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 48px; height: 1px; padding-top: 266px; margin-left: 275px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px"><b>interface required</b></font></div></div></div></foreignObject><text x="275" y="268" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="8px">interface re...</text></switch></g></g><g><path d="M 256.5 266 L 272.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 236.5 266 L 217.5 266" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/></g><g><path d="M 237.76 178.5 L 208.29 144.77" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/></g></g></svg>