diff --git a/img/FSM.drawio b/img/FSM.drawio
new file mode 100644
index 0000000000000000000000000000000000000000..bd839a9b01be6c20eb7b6840fcbab9fd73e2336d
--- /dev/null
+++ b/img/FSM.drawio
@@ -0,0 +1,150 @@
+<mxfile host="Electron" modified="2023-04-28T15:06:41.325Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36" etag="FiJOiTXp0n2vq3d9UAum" version="21.2.1" type="device">
+  <diagram name="Page-1" id="lufUWjv2mjaYaQ6cVEt1">
+    <mxGraphModel dx="798" dy="1290" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="bw7OO0sNot4gaAuLXok9-1" value="" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="240" y="40" width="160" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-2" value="&lt;font style=&quot;font-size: 21px;&quot; face=&quot;Ubuntu Mono&quot;&gt;Wait Sample&lt;/font&gt;" style="ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="250" y="50" width="140" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-3" value="Store" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="240" y="160" width="160" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-5" value="Processing&lt;br&gt;Loop" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="240" y="280" width="160" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-6" value="Output" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="240" y="400" width="160" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-7" value="Wait End&lt;br&gt;Sample" style="ellipse;whiteSpace=wrap;html=1;fontSize=21;fontFamily=Ubuntu Mono;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+          <mxGeometry x="240" y="520" width="160" height="80" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-8" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-1" target="bw7OO0sNot4gaAuLXok9-3">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="560" y="650" as="sourcePoint" />
+            <mxPoint x="610" y="600" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-9" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-5">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="319.76" y="240" as="sourcePoint" />
+            <mxPoint x="319.76" y="320" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-10" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-6">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="319.76" y="360" as="sourcePoint" />
+            <mxPoint x="320" y="400" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-11" value="" style="endArrow=block;html=1;rounded=0;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-6" target="bw7OO0sNot4gaAuLXok9-7">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="319.76" y="480" as="sourcePoint" />
+            <mxPoint x="319.76" y="560" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-12" value="" style="curved=1;endArrow=block;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;endFill=1;" edge="1" parent="1" source="bw7OO0sNot4gaAuLXok9-7" target="bw7OO0sNot4gaAuLXok9-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="510" y="320" as="sourcePoint" />
+            <mxPoint x="560" y="270" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="320" y="670" />
+              <mxPoint x="170" y="640" />
+              <mxPoint x="180" y="80" />
+              <mxPoint x="230" y="20" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-14" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="300" y="140" as="sourcePoint" />
+            <mxPoint x="340" y="140" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-17" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;Condition 1&lt;/font&gt;" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="bw7OO0sNot4gaAuLXok9-14">
+          <mxGeometry x="0.564" relative="1" as="geometry">
+            <mxPoint x="10" as="offset" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-15" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="300" y="380" as="sourcePoint" />
+            <mxPoint x="340" y="380" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-16" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="300" y="620" as="sourcePoint" />
+            <mxPoint x="340" y="620" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-18" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;Condition 2&lt;/font&gt;" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="1">
+          <mxGeometry x="340.00279069767436" y="380" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-19" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;Condition 3&lt;/font&gt;" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;labelBorderColor=none;fontStyle=2" vertex="1" connectable="0" parent="1">
+          <mxGeometry x="340.00279069767436" y="620" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-20" value="" style="curved=1;endArrow=block;html=1;rounded=0;endFill=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="bw7OO0sNot4gaAuLXok9-1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="350" y="-10" as="sourcePoint" />
+            <mxPoint x="460" y="90" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="330" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-21" value="&lt;font face=&quot;Ubuntu Mono&quot;&gt;&lt;span style=&quot;font-size: 15px;&quot;&gt;Rst = &#39;1&#39;&lt;/span&gt;&lt;/font&gt;" style="edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="1">
+          <mxGeometry x="350.00279069767436" y="-10" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-23" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift = &#39;0&#39;&lt;br&gt;InitAddress = &#39;0&#39;&lt;br&gt;IncrAddress = &#39;0&#39;&lt;br&gt;InitSum = &#39;0&#39;&lt;br&gt;LoadSum = &#39;0&#39;&lt;br&gt;LoadOutput = &#39;1&#39;&lt;br&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;container=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
+          <mxGeometry x="480" y="380" width="240" height="110" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-24" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="400" y="439.77" as="sourcePoint" />
+            <mxPoint x="480" y="439.77" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-33" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
+          <mxGeometry x="480" y="20" width="240" height="110" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-34" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="400" y="79.80999999999995" as="sourcePoint" />
+            <mxPoint x="480" y="79.80999999999995" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-30" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
+          <mxGeometry x="480" y="140" width="240" height="110" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-31" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="400" y="199.80999999999995" as="sourcePoint" />
+            <mxPoint x="480" y="199.80999999999995" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-25" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
+          <mxGeometry x="480" y="260" width="240" height="110" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-27" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="400" y="319.80999999999995" as="sourcePoint" />
+            <mxPoint x="480" y="319.80999999999995" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-36" value="&lt;font style=&quot;font-size: 15px;&quot; face=&quot;Ubuntu Mono&quot;&gt;LoadShift =&amp;nbsp;&lt;br&gt;InitAddress =&amp;nbsp;&lt;br&gt;IncrAddress =&amp;nbsp;&lt;br&gt;InitSum =&amp;nbsp;&lt;br&gt;LoadSum =&amp;nbsp;&lt;br&gt;LoadOutput =&amp;nbsp;&lt;br&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;fontStyle=2;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;" vertex="1" parent="1">
+          <mxGeometry x="480" y="500" width="240" height="110" as="geometry" />
+        </mxCell>
+        <mxCell id="bw7OO0sNot4gaAuLXok9-37" value="" style="endArrow=block;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;dashed=1;" edge="1" parent="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="400" y="559.81" as="sourcePoint" />
+            <mxPoint x="480" y="559.81" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>