summaryrefslogtreecommitdiff
path: root/yaegi-internals
diff options
context:
space:
mode:
Diffstat (limited to 'yaegi-internals')
-rw-r--r--yaegi-internals/ex1_ast_cfg.drawio.svg4
-rw-r--r--yaegi-internals/ex1_cfg.drawio.svg4
-rw-r--r--yaegi-internals/ex1_cfg_loop.drawio.svg4
-rw-r--r--yaegi-internals/ex1_raw_ast.drawio.svg4
-rw-r--r--yaegi-internals/frame1.drawio.svg4
-rw-r--r--yaegi-internals/index.html390
-rw-r--r--yaegi-internals/meta.sh4
-rw-r--r--yaegi-internals/readme.md405
-rw-r--r--yaegi-internals/yaegi_internals_fig1.drawio.svg4
9 files changed, 823 insertions, 0 deletions
diff --git a/yaegi-internals/ex1_ast_cfg.drawio.svg b/yaegi-internals/ex1_ast_cfg.drawio.svg
new file mode 100644
index 0000000..cf15da5
--- /dev/null
+++ b/yaegi-internals/ex1_ast_cfg.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="471px" height="301px" viewBox="-0.5 -0.5 471 301" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-04-04T09:52:23.254Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36&quot; etag=&quot;ajiZ4L5__m9Y7oxOlmHf&quot; version=&quot;21.1.2&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;xVztW_I66fIyG3nHzLhH&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;727&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-1&quot; value=&quot;1: stmt&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;30&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-2&quot; value=&quot;2: :=&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-3&quot; value=&quot;3: a&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;40&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-4&quot; value=&quot;4: 3&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-5&quot; value=&quot;5: if&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-6&quot; value=&quot;6: &amp;amp;gt;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;200&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-7&quot; value=&quot;7: a&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-8&quot; value=&quot;8: 2&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;200&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-9&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-5&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;260&quot; y=&quot;390&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;310&quot; y=&quot;340&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-10&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-2&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;70&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-11&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; target=&quot;kNLiaCNoJibRKC7dolPK-4&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;249&quot; y=&quot;66&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;181&quot; y=&quot;104&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-12&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;160&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-13&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-6&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;250&quot; y=&quot;120&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-14&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.65;entryY=0.033;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.3;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-7&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;170&quot; y=&quot;210&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;240&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-15&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-8&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;228&quot; y=&quot;200&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;169&quot; y=&quot;241&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-16&quot; value=&quot;9: stmt&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-17&quot; value=&quot;10: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-18&quot; value=&quot;11: print&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;220&quot; y=&quot;300&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-19&quot; value=&quot;12: &amp;quot;ok&amp;quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;340&quot; y=&quot;300&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-20&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.317;entryY=0.067;entryDx=0;entryDy=0;exitX=0.617;exitY=0.967;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-5&quot; target=&quot;kNLiaCNoJibRKC7dolPK-16&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;260&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;240&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-21&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-16&quot; target=&quot;kNLiaCNoJibRKC7dolPK-17&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;277&quot; y=&quot;129&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;309&quot; y=&quot;172&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-22&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0.383;exitY=1.033;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-18&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;200&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;240&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-23&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.333;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.65;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-19&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;250&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;281&quot; y=&quot;294&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-24&quot; value=&quot;13: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-25&quot; value=&quot;14: print&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-26&quot; value=&quot;15: &amp;quot;bye&amp;quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;450&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-27&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.317;entryY=0.067;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;70&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-28&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-24&quot; target=&quot;kNLiaCNoJibRKC7dolPK-25&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;291&quot; y=&quot;66&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;389&quot; y=&quot;102&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-29&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-24&quot; target=&quot;kNLiaCNoJibRKC7dolPK-26&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;400&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;400&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-30&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; target=&quot;kNLiaCNoJibRKC7dolPK-6&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;180&quot; y=&quot;140&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;230&quot; y=&quot;90&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-32&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#FF0000;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;410&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;340&quot; y=&quot;360&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-33&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-17&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;252&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;238&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-34&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=0.733;exitY=0.067;exitDx=0;exitDy=0;entryX=0.283;entryY=1.033;entryDx=0;entryDy=0;entryPerimeter=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;261&quot; y=&quot;196&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;299&quot; y=&quot;244&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-kNLiaCNoJibRKC7dolPK-1"><ellipse cx="220" cy="15" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 15px; margin-left: 191px;"><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;">1: stmt</div></div></div></foreignObject><text x="220" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">1: stmt</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-2"><ellipse cx="110" cy="75" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 81px;"><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;">2: :=</div></div></div></foreignObject><text x="110" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">2: :=</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-3"><ellipse cx="30" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 1px;"><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;">3: a</div></div></div></foreignObject><text x="30" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">3: a</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-4"><ellipse cx="110" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 81px;"><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;">4: 3</div></div></div></foreignObject><text x="110" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">4: 3</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-5"><ellipse cx="220" cy="75" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 191px;"><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;">5: if</div></div></div></foreignObject><text x="220" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">5: if</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-6"><ellipse cx="190" cy="145" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 161px;"><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;">6: &gt;</div></div></div></foreignObject><text x="190" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">6: &gt;</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-7"><ellipse cx="110" cy="215" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 81px;"><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;">7: a</div></div></div></foreignObject><text x="110" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">7: a</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-8"><ellipse cx="190" cy="215" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 161px;"><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;">8: 2</div></div></div></foreignObject><text x="190" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">8: 2</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-9"><path d="M 220 30 L 220 53.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 58.88 L 216.5 51.88 L 220 53.63 L 223.5 51.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-10"><path d="M 198.79 25.61 L 136.74 61.22" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 132.18 63.84 L 136.51 57.32 L 136.74 61.22 L 140 63.39 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-11"><path d="M 110 90 L 110 123.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 110 128.88 L 106.5 121.88 L 110 123.63 L 113.5 121.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-12"><path d="M 88.79 85.61 L 44.71 125.71" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 40.83 129.25 L 43.65 121.95 L 44.71 125.71 L 48.36 127.13 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-13"><path d="M 210 90 L 192.85 124.3" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190.5 129 L 190.5 121.17 L 192.85 124.3 L 196.76 124.3 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-14"><path d="M 178 160 L 124.23 197.36" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 119.92 200.35 L 123.67 193.48 L 124.23 197.36 L 127.66 199.23 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-15"><path d="M 190 160 L 190 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 198.88 L 186.5 191.88 L 190 193.63 L 193.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-16"><ellipse cx="270" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 241px;"><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;">9: stmt</div></div></div></foreignObject><text x="270" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">9: stmt</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-17"><ellipse cx="270" cy="215" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 241px;"><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;">10: call</div></div></div></foreignObject><text x="270" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">10: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-18"><ellipse cx="210" cy="285" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 285px; margin-left: 181px;"><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;">11: print</div></div></div></foreignObject><text x="210" y="289" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">11: print</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-19"><ellipse cx="330" cy="285" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 285px; margin-left: 301px;"><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;">12: "ok"</div></div></div></foreignObject><text x="330" y="289" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">12: "ok"</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-20"><path d="M 227.02 89.01 L 255.22 126.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 258.35 131.11 L 251.37 127.59 L 255.22 126.9 L 256.98 123.41 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-21"><path d="M 270 160 L 270 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 270 198.88 L 266.5 191.88 L 270 193.63 L 273.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-22"><path d="M 262.98 230.99 L 234.97 269.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 231.87 273.49 L 233.18 265.78 L 234.97 269.25 L 238.83 269.91 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-23"><path d="M 279 230 L 315.42 265.55" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 319.18 269.22 L 311.73 266.83 L 315.42 265.55 L 316.62 261.82 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-24"><ellipse cx="350" cy="75" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 321px;"><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;">13: call</div></div></div></foreignObject><text x="350" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">13: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-25"><ellipse cx="350" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 321px;"><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;">14: print</div></div></div></foreignObject><text x="350" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">14: print</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-26"><ellipse cx="440" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 411px;"><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;">15: "bye"</div></div></div></foreignObject><text x="440" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">15: "bye"</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-27"><path d="M 241.21 25.61 L 333.05 59.79" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 337.97 61.62 L 330.19 62.46 L 333.05 59.79 L 332.63 55.9 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-28"><path d="M 350 90 L 350 123.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 350 128.88 L 346.5 121.88 L 350 123.63 L 353.5 121.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-29"><path d="M 371.21 85.61 L 434.65 126.55" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 439.06 129.39 L 431.28 128.54 L 434.65 126.55 L 435.08 122.66 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-30"><path d="M 131.21 85.61 L 164.9 129.35" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 168.1 133.51 L 161.06 130.1 L 164.9 129.35 L 166.61 125.83 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-32"><path d="M 211.21 134.39 L 314.41 78.05" fill="none" stroke="#ff0000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 319.02 75.54 L 314.55 81.96 L 314.41 78.05 L 311.2 75.82 Z" fill="#ff0000" stroke="#ff0000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-33"><path d="M 211.21 155.61 L 244.9 199.35" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 248.1 203.51 L 241.06 200.1 L 244.9 199.35 L 246.61 195.83 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-34"><path d="M 283.98 202.01 L 334.24 96.74" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 336.5 92 L 336.64 99.82 L 334.24 96.74 L 330.32 96.81 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/yaegi-internals/ex1_cfg.drawio.svg b/yaegi-internals/ex1_cfg.drawio.svg
new file mode 100644
index 0000000..6cc87c8
--- /dev/null
+++ b/yaegi-internals/ex1_cfg.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="421px" height="95px" viewBox="-0.5 -0.5 421 95" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-04-04T09:52:02.347Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36&quot; etag=&quot;nGrzC8U6nfsKaIXWIYYw&quot; version=&quot;21.1.2&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;xVztW_I66fIyG3nHzLhH&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;727&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-2&quot; value=&quot;2: :=&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-6&quot; value=&quot;6: &amp;amp;gt;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;240&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-17&quot; value=&quot;10: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-24&quot; value=&quot;13: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; vertex=&quot;1&quot; parent=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;480&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-30&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; target=&quot;kNLiaCNoJibRKC7dolPK-6&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;180&quot; y=&quot;140&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;230&quot; y=&quot;90&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-32&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;strokeColor=#FF0000;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;curved=1;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;410&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;340&quot; y=&quot;360&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;390&quot; y=&quot;60&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-33&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-17&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;252&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;238&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-34&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;140&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;299&quot; y=&quot;244&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-kNLiaCNoJibRKC7dolPK-2"><ellipse cx="30" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 1px;"><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;">2: :=</div></div></div></foreignObject><text x="30" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">2: :=</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-6"><ellipse cx="150" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 121px;"><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;">6: &gt;</div></div></div></foreignObject><text x="150" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">6: &gt;</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-17"><ellipse cx="270" cy="78" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 78px; margin-left: 241px;"><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;">10: call</div></div></div></foreignObject><text x="270" y="82" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">10: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-24"><ellipse cx="390" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 361px;"><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;">13: call</div></div></div></foreignObject><text x="390" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">13: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-30"><path d="M 60 28 L 113.63 28" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 118.88 28 L 111.88 31.5 L 113.63 28 L 111.88 24.5 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-32"><path d="M 171.21 17.39 Q 270 -17 362.77 15.3" fill="none" stroke="#ff0000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 367.73 17.03 L 359.97 18.03 L 362.77 15.3 L 362.27 11.42 Z" fill="#ff0000" stroke="#ff0000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-33"><path d="M 171.21 38.61 L 242.82 65.18" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 247.74 67 L 239.96 67.85 L 242.82 65.18 L 242.39 61.29 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-34"><path d="M 291.21 67.39 L 362.82 40.82" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 367.74 39 L 362.39 44.71 L 362.82 40.82 L 359.96 38.15 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/yaegi-internals/ex1_cfg_loop.drawio.svg b/yaegi-internals/ex1_cfg_loop.drawio.svg
new file mode 100644
index 0000000..7928ec0
--- /dev/null
+++ b/yaegi-internals/ex1_cfg_loop.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="421px" height="145px" viewBox="-0.5 -0.5 421 145" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-04-04T12:21:53.129Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36&quot; etag=&quot;r4TE3l_1ITMOUrcHC6Qx&quot; version=&quot;21.1.2&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;xVztW_I66fIyG3nHzLhH&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;727&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-2&quot; value=&quot;2: :=&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-6&quot; value=&quot;6: &amp;amp;gt;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;240&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-17&quot; value=&quot;10: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;140&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-24&quot; value=&quot;13: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;480&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-30&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; target=&quot;kNLiaCNoJibRKC7dolPK-6&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;180&quot; y=&quot;140&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;230&quot; y=&quot;90&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-32&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;strokeColor=#FF0000;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;curved=1;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;410&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;340&quot; y=&quot;360&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;390&quot; y=&quot;60&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-33&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-17&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;252&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;290&quot; y=&quot;238&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-34&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;strokeColor=#00CC00;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;140&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;299&quot; y=&quot;244&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;gsGOXgsebsyc2-BwZNvm-1&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;strokeColor=#00CC00;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;curved=1;&quot; edge=&quot;1&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-24&quot; target=&quot;kNLiaCNoJibRKC7dolPK-2&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;421&quot; y=&quot;154&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;499&quot; y=&quot;126&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;450&quot; y=&quot;220&quot; /&gt;&#10; &lt;mxPoint x=&quot;250&quot; y=&quot;220&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-kNLiaCNoJibRKC7dolPK-2"><ellipse cx="30" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 1px;"><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;">2: :=</div></div></div></foreignObject><text x="30" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">2: :=</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-6"><ellipse cx="150" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 121px;"><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;">6: &gt;</div></div></div></foreignObject><text x="150" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">6: &gt;</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-17"><ellipse cx="270" cy="78" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 78px; margin-left: 241px;"><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;">10: call</div></div></div></foreignObject><text x="270" y="82" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">10: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-24"><ellipse cx="390" cy="28" rx="30" ry="15" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><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: 58px; height: 1px; padding-top: 28px; margin-left: 361px;"><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;">13: call</div></div></div></foreignObject><text x="390" y="32" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">13: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-30"><path d="M 60 28 L 113.63 28" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 118.88 28 L 111.88 31.5 L 113.63 28 L 111.88 24.5 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-32"><path d="M 171.21 17.39 Q 270 -17 362.77 15.3" fill="none" stroke="#ff0000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 367.73 17.03 L 359.97 18.03 L 362.77 15.3 L 362.27 11.42 Z" fill="#ff0000" stroke="#ff0000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-33"><path d="M 171.21 38.61 L 242.82 65.18" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 247.74 67 L 239.96 67.85 L 242.82 65.18 L 242.39 61.29 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-34"><path d="M 291.21 67.39 L 362.82 40.82" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 367.74 39 L 362.39 44.71 L 362.82 40.82 L 359.96 38.15 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-gsGOXgsebsyc2-BwZNvm-1"><path d="M 390 43 Q 330 143 230 143 Q 130 143 34.5 47.5" fill="none" stroke="#00cc00" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 30.79 43.79 L 38.22 46.27 L 34.5 47.5 L 33.27 51.22 Z" fill="#00cc00" stroke="#00cc00" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/yaegi-internals/ex1_raw_ast.drawio.svg b/yaegi-internals/ex1_raw_ast.drawio.svg
new file mode 100644
index 0000000..a15f4f6
--- /dev/null
+++ b/yaegi-internals/ex1_raw_ast.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="471px" height="301px" viewBox="-0.5 -0.5 471 301" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-04-04T09:52:49.799Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36&quot; etag=&quot;xPx_CSjU3CsP79y-tyBY&quot; version=&quot;21.1.2&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;xVztW_I66fIyG3nHzLhH&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;727&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-1&quot; value=&quot;1: stmt&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;30&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-2&quot; value=&quot;2: :=&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-3&quot; value=&quot;3: a&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;40&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-4&quot; value=&quot;4: 3&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-5&quot; value=&quot;5: if&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-6&quot; value=&quot;6: &amp;amp;gt;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;200&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-7&quot; value=&quot;7: a&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-8&quot; value=&quot;8: 2&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;200&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-9&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-5&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;260&quot; y=&quot;390&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;310&quot; y=&quot;340&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-10&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-2&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;70&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-11&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; target=&quot;kNLiaCNoJibRKC7dolPK-4&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;249&quot; y=&quot;66&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;181&quot; y=&quot;104&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-12&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-2&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;160&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-13&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-6&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;250&quot; y=&quot;120&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-14&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.65;entryY=0.033;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.3;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-7&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;170&quot; y=&quot;210&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;240&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-15&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-6&quot; target=&quot;kNLiaCNoJibRKC7dolPK-8&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;228&quot; y=&quot;200&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;169&quot; y=&quot;241&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-16&quot; value=&quot;9: stmt&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-17&quot; value=&quot;10: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;230&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-18&quot; value=&quot;11: print&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;220&quot; y=&quot;300&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-19&quot; value=&quot;12: &amp;quot;ok&amp;quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;340&quot; y=&quot;300&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-20&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.317;entryY=0.067;entryDx=0;entryDy=0;exitX=0.617;exitY=0.967;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-5&quot; target=&quot;kNLiaCNoJibRKC7dolPK-16&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;260&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;240&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-21&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-16&quot; target=&quot;kNLiaCNoJibRKC7dolPK-17&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;277&quot; y=&quot;129&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;309&quot; y=&quot;172&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-22&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0.383;exitY=1.033;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-18&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;200&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;240&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-23&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.333;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.65;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-17&quot; target=&quot;kNLiaCNoJibRKC7dolPK-19&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;250&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;281&quot; y=&quot;294&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-24&quot; value=&quot;13: call&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;90&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-25&quot; value=&quot;14: print&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;360&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-26&quot; value=&quot;15: &amp;quot;bye&amp;quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;450&quot; y=&quot;160&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-27&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0.317;entryY=0.067;entryDx=0;entryDy=0;entryPerimeter=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-1&quot; target=&quot;kNLiaCNoJibRKC7dolPK-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;70&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;270&quot; y=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-28&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-24&quot; target=&quot;kNLiaCNoJibRKC7dolPK-25&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;291&quot; y=&quot;66&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;389&quot; y=&quot;102&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;kNLiaCNoJibRKC7dolPK-29&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;kNLiaCNoJibRKC7dolPK-24&quot; target=&quot;kNLiaCNoJibRKC7dolPK-26&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;400&quot; y=&quot;130&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;400&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-kNLiaCNoJibRKC7dolPK-1"><ellipse cx="220" cy="15" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 15px; margin-left: 191px;"><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;">1: stmt</div></div></div></foreignObject><text x="220" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">1: stmt</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-2"><ellipse cx="110" cy="75" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 81px;"><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;">2: :=</div></div></div></foreignObject><text x="110" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">2: :=</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-3"><ellipse cx="30" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 1px;"><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;">3: a</div></div></div></foreignObject><text x="30" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">3: a</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-4"><ellipse cx="110" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 81px;"><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;">4: 3</div></div></div></foreignObject><text x="110" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">4: 3</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-5"><ellipse cx="220" cy="75" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 191px;"><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;">5: if</div></div></div></foreignObject><text x="220" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">5: if</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-6"><ellipse cx="190" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 161px;"><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;">6: &gt;</div></div></div></foreignObject><text x="190" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">6: &gt;</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-7"><ellipse cx="110" cy="215" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 81px;"><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;">7: a</div></div></div></foreignObject><text x="110" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">7: a</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-8"><ellipse cx="190" cy="215" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 161px;"><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;">8: 2</div></div></div></foreignObject><text x="190" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">8: 2</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-9"><path d="M 220 30 L 220 53.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 58.88 L 216.5 51.88 L 220 53.63 L 223.5 51.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-10"><path d="M 198.79 25.61 L 136.74 61.22" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 132.18 63.84 L 136.51 57.32 L 136.74 61.22 L 140 63.39 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-11"><path d="M 110 90 L 110 123.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 110 128.88 L 106.5 121.88 L 110 123.63 L 113.5 121.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-12"><path d="M 88.79 85.61 L 44.71 125.71" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 40.83 129.25 L 43.65 121.95 L 44.71 125.71 L 48.36 127.13 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-13"><path d="M 210 90 L 192.85 124.3" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190.5 129 L 190.5 121.17 L 192.85 124.3 L 196.76 124.3 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-14"><path d="M 178 160 L 124.23 197.36" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 119.92 200.35 L 123.67 193.48 L 124.23 197.36 L 127.66 199.23 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-15"><path d="M 190 160 L 190 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 198.88 L 186.5 191.88 L 190 193.63 L 193.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-16"><ellipse cx="270" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 241px;"><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;">9: stmt</div></div></div></foreignObject><text x="270" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">9: stmt</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-17"><ellipse cx="270" cy="215" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 215px; margin-left: 241px;"><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;">10: call</div></div></div></foreignObject><text x="270" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">10: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-18"><ellipse cx="210" cy="285" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 285px; margin-left: 181px;"><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;">11: print</div></div></div></foreignObject><text x="210" y="289" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">11: print</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-19"><ellipse cx="330" cy="285" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 285px; margin-left: 301px;"><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;">12: "ok"</div></div></div></foreignObject><text x="330" y="289" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">12: "ok"</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-20"><path d="M 227.02 89.01 L 255.22 126.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 258.35 131.11 L 251.37 127.59 L 255.22 126.9 L 256.98 123.41 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-21"><path d="M 270 160 L 270 193.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 270 198.88 L 266.5 191.88 L 270 193.63 L 273.5 191.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-22"><path d="M 262.98 230.99 L 234.97 269.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 231.87 273.49 L 233.18 265.78 L 234.97 269.25 L 238.83 269.91 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-23"><path d="M 279 230 L 315.42 265.55" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 319.18 269.22 L 311.73 266.83 L 315.42 265.55 L 316.62 261.82 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-24"><ellipse cx="350" cy="75" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 75px; margin-left: 321px;"><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;">13: call</div></div></div></foreignObject><text x="350" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">13: call</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-25"><ellipse cx="350" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 321px;"><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;">14: print</div></div></div></foreignObject><text x="350" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">14: print</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-26"><ellipse cx="440" cy="145" rx="30" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 58px; height: 1px; padding-top: 145px; margin-left: 411px;"><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;">15: "bye"</div></div></div></foreignObject><text x="440" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">15: "bye"</text></switch></g></g><g id="cell-kNLiaCNoJibRKC7dolPK-27"><path d="M 241.21 25.61 L 333.05 59.79" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 337.97 61.62 L 330.19 62.46 L 333.05 59.79 L 332.63 55.9 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-28"><path d="M 350 90 L 350 123.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 350 128.88 L 346.5 121.88 L 350 123.63 L 353.5 121.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-kNLiaCNoJibRKC7dolPK-29"><path d="M 371.21 85.61 L 434.65 126.55" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 439.06 129.39 L 431.28 128.54 L 434.65 126.55 L 435.08 122.66 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/yaegi-internals/frame1.drawio.svg b/yaegi-internals/frame1.drawio.svg
new file mode 100644
index 0000000..eaa406d
--- /dev/null
+++ b/yaegi-internals/frame1.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="602px" height="291px" viewBox="-0.5 -0.5 602 291" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-05-02T15:37:09.311Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.1 Chrome/112.0.5615.87 Electron/24.1.2 Safari/537.36&quot; etag=&quot;9SFcaECSP9dacijr0PgM&quot; version=&quot;21.2.1&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;5na_llSKl-pBBE5rP9AI&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;727&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-46&quot; value=&quot;frame 2&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;460&quot; y=&quot;170&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-33&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;220&quot; y=&quot;280&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;460&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-1&quot; value=&quot;data ptr&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;120&quot; width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-2&quot; value=&quot;type ptr&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;170&quot; y=&quot;120&quot; width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-5&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;160&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-3&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;2HcqKHcNLJ_RsXilhcFv-5&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-4&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;2HcqKHcNLJ_RsXilhcFv-5&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;50&quot; width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-10&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;2HcqKHcNLJ_RsXilhcFv-5&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint y=&quot;120&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint y=&quot;-20&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-6&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;200&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-7&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;2HcqKHcNLJ_RsXilhcFv-6&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-8&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;2HcqKHcNLJ_RsXilhcFv-6&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;50&quot; width=&quot;50&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-9&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; target=&quot;2HcqKHcNLJ_RsXilhcFv-2&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;220&quot; y=&quot;280&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;290&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-11&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;120&quot; y=&quot;280&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;220&quot; y=&quot;280&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-12&quot; value=&quot;&quot; style=&quot;shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;flipH=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;size=0.5;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;120&quot; width=&quot;20&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-13&quot; value=&quot;m return parameters&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;250&quot; y=&quot;120&quot; width=&quot;120&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-14&quot; value=&quot;0&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;115&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-15&quot; value=&quot;m&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;155&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-16&quot; value=&quot;&quot; style=&quot;shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;flipH=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;size=0.5;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;160&quot; width=&quot;20&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-18&quot; value=&quot;n input parameters&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;250&quot; y=&quot;160&quot; width=&quot;110&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-19&quot; value=&quot;m+n&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;195&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-20&quot; value=&quot;&quot; style=&quot;shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;flipH=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;size=0.5;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;230&quot; y=&quot;200&quot; width=&quot;20&quot; height=&quot;80&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-22&quot; value=&quot;m+n+p&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;270&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-23&quot; value=&quot;p local variables&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;250&quot; y=&quot;200&quot; width=&quot;110&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-24&quot; value=&quot;&quot; style=&quot;shape=curlyBracket;whiteSpace=wrap;html=1;rounded=1;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;direction=south;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;90&quot; width=&quot;100&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-25&quot; value=&quot;reflect.Value&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;140&quot; y=&quot;70&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-28&quot; value=&quot;function frame&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;130&quot; y=&quot;300&quot; width=&quot;80&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-29&quot; value=&quot;global frame&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;460&quot; y=&quot;70&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-30&quot; value=&quot;frame 1&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;460&quot; y=&quot;120&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-32&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-2&quot; target=&quot;2HcqKHcNLJ_RsXilhcFv-30&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;350&quot; y=&quot;340&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;400&quot; y=&quot;290&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-34&quot; value=&quot;stack goroutine 1&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;460&quot; y=&quot;330&quot; width=&quot;80&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-35&quot; value=&quot;frame i&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;460&quot; y=&quot;260&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-36&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-35&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;350&quot; y=&quot;340&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;460&quot; y=&quot;220&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-37&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-35&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;549.17&quot; y=&quot;250&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;549&quot; y=&quot;220&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-38&quot; value=&quot;frame 2&amp;#39;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;570&quot; y=&quot;180&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-39&quot; value=&quot;frame j&amp;#39;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;570&quot; y=&quot;260&quot; width=&quot;90&quot; height=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-40&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-39&quot; target=&quot;2HcqKHcNLJ_RsXilhcFv-38&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;560&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;559.17&quot; y=&quot;180&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-41&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-38&quot; target=&quot;2HcqKHcNLJ_RsXilhcFv-39&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;580&quot; y=&quot;270&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;580&quot; y=&quot;245&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-42&quot; value=&quot;stack goroutine 2&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;575&quot; y=&quot;330&quot; width=&quot;80&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-43&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-38&quot; target=&quot;2HcqKHcNLJ_RsXilhcFv-30&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;580&quot; y=&quot;270&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;580&quot; y=&quot;245&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;2HcqKHcNLJ_RsXilhcFv-44&quot; value=&quot;&quot; style=&quot;endArrow=none;dashed=1;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;2HcqKHcNLJ_RsXilhcFv-38&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;660&quot; y=&quot;185&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;550&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-2HcqKHcNLJ_RsXilhcFv-46"><rect x="400" y="100" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 88px; height: 1px; padding-top: 125px; margin-left: 401px;"><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;">frame 2</div></div></div></foreignObject><text x="445" y="129" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">frame 2</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-33"><path d="M 160 210 L 400 100" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="stroke"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-1"><rect x="60" y="50" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 48px; height: 1px; padding-top: 60px; margin-left: 61px;"><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;">data ptr</div></div></div></foreignObject><text x="85" y="64" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">data ptr</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-2"><rect x="110" y="50" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><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: 48px; height: 1px; padding-top: 60px; margin-left: 111px;"><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;">type ptr</div></div></div></foreignObject><text x="135" y="64" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">type ptr</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-3"><rect x="60" y="90" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-4"><rect x="110" y="90" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-10"><path d="M 60 210 L 60 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-7"><rect x="60" y="130" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-8"><rect x="110" y="130" width="50" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-9"><path d="M 160 210 L 160 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-11"><path d="M 60 210 L 160 210" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-12"><path d="M 190 50 L 185 50 Q 180 50 180 57.5 L 180 61.25 Q 180 65 175 65 L 172.5 65 Q 170 65 175 65 L 177.5 65 Q 180 65 180 72.5 L 180 76.25 Q 180 80 185 80 L 190 80" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(180,0)scale(-1,1)translate(-180,0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-13"><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: 118px; height: 1px; padding-top: 65px; margin-left: 192px;"><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: none; white-space: normal; overflow-wrap: normal;">m return parameters</div></div></div></foreignObject><text x="192" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">m return parameters</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-14"><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: 58px; height: 1px; padding-top: 60px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;">0</div></div></div></foreignObject><text x="30" y="64" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">0</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-15"><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: 58px; height: 1px; padding-top: 100px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;">m</div></div></div></foreignObject><text x="30" y="104" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">m</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-16"><path d="M 190 90 L 185 90 Q 180 90 180 97.5 L 180 101.25 Q 180 105 175 105 L 172.5 105 Q 170 105 175 105 L 177.5 105 Q 180 105 180 112.5 L 180 116.25 Q 180 120 185 120 L 190 120" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(180,0)scale(-1,1)translate(-180,0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-18"><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: 108px; height: 1px; padding-top: 105px; margin-left: 192px;"><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: none; white-space: normal; overflow-wrap: normal;">n input parameters</div></div></div></foreignObject><text x="192" y="109" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">n input parameters</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-19"><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: 58px; height: 1px; padding-top: 140px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;">m+n</div></div></div></foreignObject><text x="30" y="144" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">m+n</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-20"><path d="M 190 130 L 185 130 Q 180 130 180 140 L 180 160 Q 180 170 175 170 L 172.5 170 Q 170 170 175 170 L 177.5 170 Q 180 170 180 180 L 180 200 Q 180 210 185 210 L 190 210" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="translate(180,0)scale(-1,1)translate(-180,0)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-22"><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: 58px; height: 1px; padding-top: 215px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;">m+n+p</div></div></div></foreignObject><text x="30" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">m+n+p</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-23"><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: 108px; height: 1px; padding-top: 145px; margin-left: 192px;"><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: none; white-space: normal; overflow-wrap: normal;">p local variables</div></div></div></foreignObject><text x="192" y="149" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">p local variables</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-24"><path d="M 120 -20 L 115 -20 Q 110 -20 110 -10 L 110 20 Q 110 30 105 30 L 102.5 30 Q 100 30 105 30 L 107.5 30 Q 110 30 110 40 L 110 70 Q 110 80 115 80 L 120 80" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,30)" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-25"><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: 58px; height: 1px; padding-top: 15px; margin-left: 81px;"><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: none; white-space: normal; overflow-wrap: normal;">reflect.Value</div></div></div></foreignObject><text x="110" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">reflect.Va...</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-28"><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: 78px; height: 1px; padding-top: 245px; margin-left: 71px;"><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: none; white-space: normal; overflow-wrap: normal;">function frame</div></div></div></foreignObject><text x="110" y="249" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">function frame</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-29"><rect x="400" y="0" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 88px; height: 1px; padding-top: 25px; margin-left: 401px;"><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: none; white-space: normal; overflow-wrap: normal;">global frame</div></div></div></foreignObject><text x="445" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">global frame</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-30"><rect x="400" y="50" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 88px; height: 1px; padding-top: 75px; margin-left: 401px;"><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: none; white-space: normal; overflow-wrap: normal;">frame 1</div></div></div></foreignObject><text x="445" y="79" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">frame 1</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-32"><path d="M 160 50 L 400 50" fill="none" stroke="#6c8ebf" stroke-width="2" stroke-miterlimit="10" stroke-dasharray="2 6" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-34"><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: 78px; height: 1px; padding-top: 275px; margin-left: 401px;"><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: none; white-space: normal; overflow-wrap: normal;">stack goroutine 1</div></div></div></foreignObject><text x="440" y="279" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">stack gorouti...</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-35"><rect x="400" y="190" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 88px; height: 1px; padding-top: 215px; margin-left: 401px;"><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: none; white-space: normal; overflow-wrap: normal;">frame i</div></div></div></foreignObject><text x="445" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">frame i</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-36"><path d="M 400 190 L 400 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-37"><path d="M 490 190 L 489 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-38"><rect x="510" y="110" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 88px; height: 1px; padding-top: 135px; margin-left: 511px;"><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: none; white-space: normal; overflow-wrap: normal;">frame 2'</div></div></div></foreignObject><text x="555" y="139" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">frame 2'</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-39"><rect x="510" y="190" width="90" height="50" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 88px; height: 1px; padding-top: 215px; margin-left: 511px;"><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: none; white-space: normal; overflow-wrap: normal;">frame j'</div></div></div></foreignObject><text x="555" y="219" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">frame j'</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-40"><path d="M 510 190 L 510 160" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-41"><path d="M 600 160 L 600 190" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-42"><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: 78px; height: 1px; padding-top: 275px; margin-left: 516px;"><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: none; white-space: normal; overflow-wrap: normal;">stack goroutine 2</div></div></div></foreignObject><text x="555" y="279" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">stack gorouti...</text></switch></g></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-43"><path d="M 510 110 L 400 100" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g><g id="cell-2HcqKHcNLJ_RsXilhcFv-44"><path d="M 600 110 L 490 100" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="none"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/yaegi-internals/index.html b/yaegi-internals/index.html
new file mode 100644
index 0000000..7981524
--- /dev/null
+++ b/yaegi-internals/index.html
@@ -0,0 +1,390 @@
+<title>Yaegi Internals</title>
+<!-- generated by build.sh. DO NOT EDIT. -->
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<style>
+ body {
+ max-width: 45rem;
+ margin: auto;
+ padding: 0.5em;
+ text-align: justify;
+ }
+ h1 { text-align: center }
+ pre {
+ border: 1px solid;
+ padding: 1ch;
+ border-radius: 5px;
+ overflow: auto;
+ background-color: #eee;
+ }
+</style>
+
+<a href="..">Marc's Programming Notes</a><hr>
+<h1 id="yaegi-internals">Yaegi internals</h1>
+<p><a href="https://github.com/traefik/yaegi">Yaegi</a> is an
+interpreter of the Go language written in Go. This project was started
+in Traefik-Labs initially to provide a simple and practical embedded
+plugin engine for the traefik reverse proxy. Now, more than 200 plugins
+contributed by the community are listed on the public catalog at <a
+href="https://plugins.traefik.io">plugins.traefik.io</a>. The use of
+yaegi extends also to other domains, for example <a
+href="https://github.com/xo/xo">databases</a>, <a
+href="https://github.com/slok/sloth">observability</a>, <a
+href="https://github.com/cyberark/kubesploit">container security</a> and
+many <a
+href="https://github.com/traefik/yaegi/network/dependents?package_id=UGFja2FnZS0yMjc1NTQ3MjIy">others</a>.</p>
+<p>Yaegi is lean and mean, as it delivers in a single package, with no
+external dependency, a complete Go interpreter, compliant with the <a
+href="https://go.dev/ref/spec">Go specification</a>. Lean, but also
+mean: its code is dense, complex, not always idiomatic, and sometimes
+maybe hard to understand.</p>
+<p>This document is here to address that. In the following, after
+getting an overview, we look under the hood, explore the internals and
+discuss the design. Our aim is to provide the essential insights,
+clarify the architecture and the code organization. But first, the
+overview.</p>
+<h2 id="overview-of-architecture">Overview of architecture</h2>
+<p>Let’s see what happens inside yaegi when one executes the following
+line:</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode go"><code class="sourceCode go"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>interp<span class="op">.</span>Eval<span class="op">(</span><span class="st">`print(&quot;hello&quot;, 2+3)`</span><span class="op">)</span></span></code></pre></div>
+<p>The following figure 1 displays the main steps of evaluation:</p>
+<figure>
+<img src="yaegi_internals_fig1.drawio.svg"
+alt="figure 1: steps of evaluation" />
+<figcaption aria-hidden="true">figure 1: steps of
+evaluation</figcaption>
+</figure>
+<ol type="1">
+<li><p>The <em>scanner</em> (provided by the <a
+href="https://pkg.go.dev/go/scanner">go/scanner</a> package) transforms
+a stream of characters (the source code) into a stream of tokens,
+through a <a
+href="https://en.wikipedia.org/wiki/Lexical_analysis">lexical
+analysis</a> step.</p></li>
+<li><p>The <em>parser</em> (provided by the <a
+href="https://pkg.go.dev/go/parser">go/parser</a> package) transforms
+the stream of tokens into an <a
+href="https://en.wikipedia.org/wiki/Abstract_syntax_tree">abstract
+syntax tree</a> or AST, through a <a
+href="https://en.wikipedia.org/wiki/Syntax_analysis">syntax analysis</a>
+step.</p></li>
+<li><p>The <em>analyser</em> (implemented in the <a
+href="https://pkg.go.dev/github.com/traefik/yaegi/interp">yaegi/interp</a>
+package) performs the checks and creation of type, constant, variable
+and function symbols. It also computes the <a
+href="https://en.wikipedia.org/wiki/Control-flow_graph">control-flow
+graphs</a> and memory allocations for symbols, through <a
+href="https://en.wikipedia.org/wiki/Semantic_analysis_(compilers)">semantic
+analysis</a> steps. All those metadata are obtained from and stored to
+the nodes of the AST, making it annotated.</p></li>
+<li><p>The <em>generator</em> (implemented in the <a
+href="https://pkg.go.dev/github.com/traefik/yaegi/interp">yaegi/interp</a>
+package) reads the annotated AST and produces code intructions to be
+executed, through a <a
+href="https://en.wikipedia.org/wiki/Code_generation_%28compiler%29">code
+generation</a> step.</p></li>
+<li><p>The <em>executor</em> (implemented in the <a
+href="https://pkg.go.dev/github.com/traefik/yaegi/interp">yaegi/interp</a>
+package) runs the code instructions in the context of the
+interpreter.</p></li>
+</ol>
+<p>The interpreter is designed as a simple compiler, except that the
+code is generated into memory instead of object files, and with an
+executor module to run the specific instruction format.</p>
+<p>We won’t spend more details on the scanner and the parser, both
+provided by the standard library, and instead examine directly the
+analyser.</p>
+<h2 id="semantic-analysis">Semantic analysis</h2>
+<p>The analyser performs the semantic analysis of the program to
+interpret. This is done in several steps, all consisting of reading from
+and writing to the AST, so we first examine the details and dynamics of
+our AST representation.</p>
+<h3 id="ast-dynamics">AST dynamics</h3>
+<p>Hereafter stands the most important data structure of any compiler,
+interpreter or other language tool, and the function to use it
+(extracted from <a
+href="https://github.com/traefik/yaegi/blob/8de3add6faf471a807182c7b8198fe863debc9d8/interp/interp.go#L284-L296">here</a>).</p>
+<div class="sourceCode" id="cb2"><pre class="sourceCode go"><code class="sourceCode go"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="co">// node defines a node of a (abstract syntax) tree.</span></span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="kw">type</span> node <span class="kw">struct</span> <span class="op">{</span></span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> <span class="co">// Node children</span></span>
+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> child <span class="op">[]*</span>node</span>
+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="co">// Node metadata</span></span>
+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> <span class="op">...</span></span>
+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
+<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a><span class="co">// walk traverses AST n in depth first order, invoking in function</span></span>
+<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a><span class="co">// at node entry and out function at node exit.</span></span>
+<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a><span class="kw">func</span> <span class="op">(</span>n <span class="op">*</span>node<span class="op">)</span> walk<span class="op">(</span>in <span class="kw">func</span><span class="op">(</span>n <span class="op">*</span>node<span class="op">)</span> <span class="dt">bool</span><span class="op">,</span> out <span class="kw">func</span><span class="op">(</span>n <span class="op">*</span>node<span class="op">))</span> <span class="op">{</span></span>
+<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> in <span class="op">!=</span> <span class="ot">nil</span> <span class="op">&amp;&amp;</span> <span class="op">!</span>in<span class="op">(</span>n<span class="op">)</span> <span class="op">{</span></span>
+<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="cf">return</span></span>
+<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
+<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> _<span class="op">,</span> child <span class="op">:=</span> <span class="kw">range</span> n<span class="op">.</span>child <span class="op">{</span></span>
+<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> child<span class="op">.</span>Walk<span class="op">(</span>in<span class="op">,</span> out<span class="op">)</span></span>
+<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
+<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a> <span class="cf">if</span> out <span class="op">!=</span> <span class="ot">nil</span> <span class="op">{</span></span>
+<span id="cb2-19"><a href="#cb2-19" aria-hidden="true" tabindex="-1"></a> out<span class="op">(</span>n<span class="op">)</span></span>
+<span id="cb2-20"><a href="#cb2-20" aria-hidden="true" tabindex="-1"></a> <span class="op">}</span></span>
+<span id="cb2-21"><a href="#cb2-21" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>The above code is deceptively simple. As in many complex systems, an
+important part of the signification is carried by the relationships
+between the elements and the patterns they form. It’s easier to
+understand it by displaying the corresponding graph and consider the
+system as a whole. We can do that using a simple example:</p>
+<div class="sourceCode" id="cb3"><pre class="sourceCode go"><code class="sourceCode go"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>a <span class="op">:=</span> <span class="dv">3</span></span>
+<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> a <span class="op">&gt;</span> <span class="dv">2</span> <span class="op">{</span></span>
+<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span><span class="op">(</span><span class="st">&quot;ok&quot;</span><span class="op">)</span></span>
+<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
+<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span><span class="op">(</span><span class="st">&quot;bye&quot;</span><span class="op">)</span></span></code></pre></div>
+<p>The corresponding AST is:</p>
+<figure>
+<img src="ex1_raw_ast.drawio.svg" alt="figure 2: a raw AST" />
+<figcaption aria-hidden="true">figure 2: a raw AST</figcaption>
+</figure>
+<p>This is the raw AST, with no annotations, as obtained from the
+parser. Each node contains an index number (for labelling purpose only),
+and the node type, computed by the parser from the set of Go grammar
+rules (i.e. “stmt” for “list of <a
+href="https://go.dev/ref/spec#Statements">statements</a>”, “call” for
+“call <a href="https://go.dev/ref/spec#Expressions">expression</a>”, …).
+We also recognize the source tokens as literal values in leaf
+locations.</p>
+<p>Walking the tree consists in visiting the nodes starting from the
+root (node 1), in their numbering order (here from 1 to 15): depth first
+(the children before the siblings) and from left to right. At each node,
+a callback <code>in</code> is invoked at entry (pre-processing) and a
+callback <code>out</code> at exit (post-processing).</p>
+<p>When the <code>in</code> callback executes, only the information
+computed in the sub-trees in the left of the node is available, in
+addition to the pre-processing information computed in the node
+ancestors. The <code>in</code> callback returns a boolean. If the result
+is false, the node sub-tree is skipped, allowing to short-cut
+processing, for example to avoid to dive in function bodies and process
+only function signatures.</p>
+<p>When the <code>out</code> callback executes, the results computed on
+the whole descendant sub-trees are available, which is useful for
+example to compute the size of a composite object defined accross nested
+structures. In the absence of post-processing, multiple tree walks are
+necessary to achieve the same result.</p>
+<p>A semantic analysis step is therefore simply a tree walk with the
+right callbacks. In the case of our interpreter, we have two tree walks
+to perform: the globals and types analysis in <a
+href="https://github.com/traefik/yaegi/blob/master/interp/gta.go">interp/gta.go</a>
+and the control-flow graphs analysis in <a
+href="https://github.com/traefik/yaegi/blob/master/interp/cfg.go">interp/cfg.go</a>.
+In both files, notice the call to <code>root.Walk</code>.</p>
+<p>Note: we have chosen to represent the AST as a uniform node structure
+as opposed to the <a href="https://pkg.go.dev/go/ast#Node">ast.Node</a>
+interface in the Go standard library, implemented by specialized types
+for all the node kinds. The main reason is that the tree walk method <a
+href="https://pkg.go.dev/go/ast#Inspect">ast.Inspect</a> only permits a
+pre-processing callback, not a post-processing one, required for several
+compiling steps. It also seemed simpler at the time to start with this
+uniform structure, and we ended up sticking with it.</p>
+<h3 id="globals-and-types-analysis">Globals and types analysis</h3>
+<p>Our first operation on the AST is to check and register all the
+components of the program declared at global level. This is a partial
+analysis, concerned only about declarations and not function
+implementations.</p>
+<p>This step is necessary because in Go, at global level, symbols can be
+used before being declared (as opposed to Go function bodies, or in C in
+general, where use before declaration is simply forbidden in strict
+mode).</p>
+<p>Allowing out of order symbols is what permits the code to be
+scattered arbitrarily amongst several files in packages without more
+constraints. It is indeed an important feature to let the programer
+organize her code as she wants.</p>
+<p>This step, implemented in <a
+href="https://github.com/traefik/yaegi/blob/master/interp/gta.go">interp/gta.go</a>,
+consists in performing a tree walk with only a pre-processing callback
+(no <code>out</code> function is passed). There are two
+particularities:</p>
+<p>The first is the multiple-pass iterative walk. Indeed, in a first
+global pass, instead of failing with an error whenever an incomplete
+definition is met, the reference to the failing sub-tree is kept in a
+list of nodes to be retried, and the walk finishes going over the whole
+tree. Then, all the problematic sub-trees are iteratively retried until
+all the nodes have been defined, or as long as there is progress. That
+is, if two subsequent iterations lead to the exact same state, it is a
+hint that progress is not being made and it would result in an infinite
+loop, at which point yaegi just stops with an error.</p>
+<p>The second particularity is that despite being in a partial analysis
+step, a full interpretation can still be necessary on an expression
+sub-tree if this one serves to implement a global type definition. For
+example if an array size is computed by an expression as in the
+following valid Go declarations:</p>
+<div class="sourceCode" id="cb4"><pre class="sourceCode go"><code class="sourceCode go"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="kw">const</span> <span class="op">(</span></span>
+<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a> prefix <span class="op">=</span> <span class="st">&quot;/usr&quot;</span></span>
+<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a> path <span class="op">=</span> prefix <span class="op">+</span> <span class="st">&quot;/local/bin&quot;</span></span>
+<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="op">)</span></span>
+<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a><span class="kw">var</span> a <span class="op">[</span><span class="bu">len</span><span class="op">(</span>prefix<span class="op">+</span>path<span class="op">)</span> <span class="op">+</span> <span class="dv">2</span><span class="op">]</span><span class="dt">int</span></span></code></pre></div>
+<p>A paradox is that the compiler needs an interpreter to perform the
+type analysis! Indeed, in the example above, <code>[16]int</code>
+(because <code>len(prefix+path) + 2 = 16</code>) is a specific type in
+itself, distinct from e.g. <code>[14]int</code>. Which means that even
+though we are only at the types analysis phase we already must be able
+to compute the <code>len(prefix+path) + 2</code> expression. In the C
+language it is one of the roles of the <a
+href="https://gcc.gnu.org/onlinedocs/cpp/">pre-processor</a>, which
+means the compiler itself does not need to be able to achieve that. Here
+in Go, the specification forces the compiler implementor to provide and
+use early-on the mechanics involved above, which is usually called
+constant folding optimisation. It is therefore implemented both within
+the standard gc, and whithin yaegi. The same kind of approach is pushed
+to its paroxysm in the <a href="https://ziglang.org">Zig language</a>
+with its <a
+href="https://ziglang.org/documentation/master/#comptime">comptime</a>
+keyword.</p>
+<h3 id="control-flow-graphs">Control-flow graphs</h3>
+<p>After GTA, all the global symbols are properly defined no matter
+their declaration order. We can now proceed with the full code analysis,
+which will be performed by a single tree walk in <a
+href="https://github.com/traefik/yaegi/blob/master/interp/cfg.go">interp/cfg.go</a>.</p>
+<p>Both pre-processing and post-processing callbacks are provided to the
+walk function. Despite being activated in a single pass, multiple kinds
+of data processing are executed:</p>
+<ul>
+<li><p>Types checking and creation. Started in GTA, it is now completed
+also in all function bodies.</p></li>
+<li><p>Analysis of variable scoping: scope levels are opened in
+pre-processing and closed in post-processing, as the nesting of scope
+reflects the AST structure.</p></li>
+<li><p>Precise computing of object sizes and locations.</p></li>
+<li><p>Identification and ordering of actions.</p></li>
+</ul>
+<p>The last point is critical for code generation. It consists in the
+production of control-flow graphs. CFGs are usually represented in the
+form of an intermediate representation (IR), which really is a
+simplified machine independent instruction set, as in the <a
+href="https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html">GCC GIMPLE</a>,
+the <a href="https://llvm.org/docs/LangRef.html">LLVM IR</a> or the <a
+href="https://github.com/golang/go/blob/bf48163e8f2b604f3b9e83951e331cd11edd8495/src/cmd/compile/internal/ssa/README.md">SSA</a>
+form in the Go compiler. In yaegi, no IR is produced, only AST
+annotations are used.</p>
+<p>Let’s use our previous example to explain:</p>
+<figure>
+<img src="ex1_ast_cfg.drawio.svg" alt="figure 3: CFG is in AST" />
+<figcaption aria-hidden="true">figure 3: CFG is in AST</figcaption>
+</figure>
+<p>In the AST, the nodes relevant to the CFG are the <em>action</em>
+nodes (in blue), that is the nodes referring to an arithmetic or a logic
+operation, a function call or a memory operation (assigning a variable,
+accessing an array entry, …).</p>
+<p>Building the CFG consists in identifying action nodes and then find
+their successor (to be stored in node fields <code>tnext</code> and
+<code>fnext</code>). An action node has one successor in the general
+case (shown with a green arrow), or two if the action is associated to a
+conditional branch (green arrow if the test is true, red arrow
+otherwise).</p>
+<p>The rules to determine the successor of an action node are inherent
+to the properties of its neighbours (ancestors, siblings and
+descendants). For example, in the <code>if</code> sub-tree (nodes 5 to
+12), the first action to execute is the condition test, that is, the
+first action in the condition sub-tree, here the node 6. This action
+will have two alternative successors: one to execute if the test is
+true, the other if not. The <em>true</em> successor will be the first
+action in the second child sub-tree of the <code>if</code> node,
+describing the <em>true</em> branch (this sub-tree root is node 9, and
+first action 10). As there is no <code>if</code> <em>false</em> branch
+in our example, the next action of the whole <code>if</code> sub-tree is
+the first action in the <code>if</code> sibling sub-tree, here the node
+13. This node will be therefore the <em>false</em> successor, the first
+action to execute when the <code>if</code> condition fails. Finally the
+node 13 is also the successor of the <em>true</em> branch, the node 10.
+The corresponding implementation is located in a <a
+href="https://github.com/traefik/yaegi/blob/8de3add6faf471a807182c7b8198fe863debc9d8/interp/cfg.go#L1608-L1624">block
+of 16 lines</a> in the post-processing CFG callback. Note that the same
+code also performs dead branch elimination and condition validity
+checking. At this stage, in terms of Control Flow, our AST example can
+now be seen as a simpler representation, such as the following.</p>
+<figure>
+<img src="ex1_cfg.drawio.svg" alt="figure 4: the same CFG isolated" />
+<figcaption aria-hidden="true">figure 4: the same CFG
+isolated</figcaption>
+</figure>
+<p>In our example, the action nodes composing the CFG can do the
+following kind of operations: - defining variables in memory and
+assigning values to them - performing arithmetic or logical operations -
+conditional branching - function calling</p>
+<p>Adding the capacity to jump to a <em>backward</em> location (where
+destination node index is inferior to source’s one, an arrow from right
+to left), thus allowing <em>loops</em>, makes the action set to become
+<a href="https://en.wikipedia.org/wiki/Turing_completeness">Turing
+complete</a>, implementing a universal computing machine.</p>
+<figure>
+<img src="ex1_cfg_loop.drawio.svg" alt="figure 5: a CFG with a loop" />
+<figcaption aria-hidden="true">figure 5: a CFG with a loop</figcaption>
+</figure>
+<p>The character of universality here lies in the cyclic nature of the
+control-flow graph (remark that <code>if</code> statement graphs,
+although appearing cyclic, are not, because the conditional branches are
+mutually exclusives).</p>
+<p>This is not just theoretical. For example, forbidding backward jumps
+was crucial in the design of the Linux <a
+href="https://www.kernel.org/doc/html/latest/bpf/verifier.html">eBPF
+verifier</a>, in order to let user provided (therefore untrusted)
+snippets execute in a kernel system privileged environment and guarantee
+no infinite loops.</p>
+<h2 id="code-generation-and-execution">Code generation and
+execution</h2>
+<p>The compiler implemented in yaegi targets the Go runtime itself, not
+a particular hardware architecture. For each action node in the CFG a
+corresponding closure is generated. The main benefits are: -
+Portability: the generated code runs on any platform where Go is
+supported. - Interoperability: the objects produced by the interpreter
+are directly usable by the host program in the form of reflect values. -
+The memory management in particular the garbage collector, is provided
+by the runtime, and applies also to the values created by the
+interpreter. - The support of runtime type safety, slices, maps,
+channels, goroutines is also provided by the runtime.</p>
+<p>The action templates are located in <a
+href="https://github.com/traefik/yaegi/blob/master/interp/run.go">interp/run.go</a>
+and <a
+href="https://github.com/traefik/yaegi/blob/master/interp/op.go">interp/op.go</a>.
+Generating closures allows to optimize all the cases where a constant is
+used (an operation involving a constant and a variable is cheaper and
+faster than the same operation involving two variables). It also permits
+to hard-code the control-flow graph, that is to pre-define the next
+instruction to execute and avoid useless branch tests.</p>
+<p>The pseudo architecture targeted by the interpreter is in effect a
+virtual <a href="https://en.wikipedia.org/wiki/Stack_machine">stack
+machine</a> where the memory is represented as slices of Go reflect
+values, as shown in the following figure, and where the instructions are
+represented directly by the set of action nodes (the CFG) in the AST.
+Those atomic instructions, also called <em>builtins</em>, are sligthly
+higher level than a real hardware instruction set, because they operate
+directly on Go interfaces (more precisely their reflect representation),
+hiding a lot of low level processing and subtleties provided by the Go
+runtime.</p>
+<figure>
+<img src="frame1.drawio.svg" alt="figure 6: frame organization" />
+<figcaption aria-hidden="true">figure 6: frame organization</figcaption>
+</figure>
+<p>The memory management performed by the interpreter consists to create
+a global frame at a new session (the top of the stack), populated with
+all global values (constants, types, variables and functions). At each
+new interpreted function call, a new frame is pushed on the stack,
+containing the values for all the return value, input parameters and
+local variables of the function.</p>
+<h2 id="conclusion">Conclusion</h2>
+<p>We have described the general architecture of a Go interpreter,
+reusing the existing Go scanner and parser. We have focused on the
+semantic analysis, which is based on AST annotations, up to the
+control-flow graph and code generation. This design leads to a
+consistent and concise compiler suitable for an embedded interpreter. We
+have also provided a succint overview of the virtual stack machine on
+top of the Go runtime, leveraging on the reflection layer provided by
+the Go standard library.</p>
+<p>We can now evolve this design to address different target
+architectures, for example a more efficient virtual machine, already in
+the works.</p>
+<p>Some parts of yaegi have not been detailed yet and will be addressed
+in a next article:</p>
+<ul>
+<li>Integration with pre-compiled packages</li>
+<li>Go Generics</li>
+<li>Recursive types</li>
+<li>Interfaces and methods</li>
+<li>Virtualization and sandboxing</li>
+<li>REPL and interactive use</li>
+</ul>
+<hr>From: Marc Vertes, 03 may 2023
diff --git a/yaegi-internals/meta.sh b/yaegi-internals/meta.sh
new file mode 100644
index 0000000..4eef2a2
--- /dev/null
+++ b/yaegi-internals/meta.sh
@@ -0,0 +1,4 @@
+blog_title="Marc's Programming Notes"
+title="Yaegi Internals"
+author="Marc Vertes"
+date="03 may 2023"
diff --git a/yaegi-internals/readme.md b/yaegi-internals/readme.md
new file mode 100644
index 0000000..efa251d
--- /dev/null
+++ b/yaegi-internals/readme.md
@@ -0,0 +1,405 @@
+# Yaegi internals
+
+[Yaegi] is an interpreter of the Go language written in Go. This project
+was started in Traefik-Labs initially to provide a simple and practical
+embedded plugin engine for the traefik reverse proxy. Now, more than
+200 plugins contributed by the community are listed on the public
+catalog at [plugins.traefik.io]. The use of yaegi extends also to other
+domains, for example [databases], [observability], [container security]
+and many
+[others](https://github.com/traefik/yaegi/network/dependents?package_id=UGFja2FnZS0yMjc1NTQ3MjIy).
+
+Yaegi is lean and mean, as it delivers in a single package, with no
+external dependency, a complete Go interpreter, compliant with the [Go
+specification]. Lean, but also mean: its code is dense, complex, not
+always idiomatic, and sometimes maybe hard to understand.
+
+This document is here to address that. In the following, after getting
+an overview, we look under the hood, explore the internals and discuss
+the design. Our aim is to provide the essential insights, clarify the
+architecture and the code organization. But first, the overview.
+
+## Overview of architecture
+
+Let's see what happens inside yaegi when one executes the following
+line:
+
+```go
+interp.Eval(`print("hello", 2+3)`)
+```
+
+The following figure 1 displays the main steps of evaluation:
+
+![figure 1: steps of evaluation](yaegi_internals_fig1.drawio.svg)
+
+1. The *scanner* (provided by the [go/scanner] package) transforms a
+ stream of characters (the source code) into a stream of tokens,
+ through a [lexical analysis] step.
+
+2. The *parser* (provided by the [go/parser] package) transforms the
+ stream of tokens into an [abstract syntax tree] or AST, through a
+ [syntax analysis] step.
+
+3. The *analyser* (implemented in the [yaegi/interp] package) performs
+ the checks and creation of type, constant, variable and function
+ symbols. It also computes the [control-flow graphs] and memory
+ allocations for symbols, through [semantic analysis] steps. All those
+ metadata are obtained from and stored to the nodes of the AST, making
+ it annotated.
+
+4. The *generator* (implemented in the [yaegi/interp] package) reads the
+ annotated AST and produces code intructions to be executed, through a
+ [code generation] step.
+
+5. The *executor* (implemented in the [yaegi/interp] package) runs the
+ code instructions in the context of the interpreter.
+
+The interpreter is designed as a simple compiler, except that the code
+is generated into memory instead of object files, and with an executor
+module to run the specific instruction format.
+
+We won't spend more details on the scanner and the parser, both provided
+by the standard library, and instead examine directly the analyser.
+
+## Semantic analysis
+
+The analyser performs the semantic analysis of the program to interpret.
+This is done in several steps, all consisting of reading from and
+writing to the AST, so we first examine the details and dynamics of our
+AST representation.
+
+### AST dynamics
+
+Hereafter stands the most important data structure of any compiler,
+interpreter or other language tool, and the function to use it
+(extracted from
+[here](https://github.com/traefik/yaegi/blob/8de3add6faf471a807182c7b8198fe863debc9d8/interp/interp.go#L284-L296)).
+
+```go
+// node defines a node of a (abstract syntax) tree.
+type node struct {
+ // Node children
+ child []*node
+ // Node metadata
+ ...
+}
+
+// walk traverses AST n in depth first order, invoking in function
+// at node entry and out function at node exit.
+func (n *node) walk(in func(n *node) bool, out func(n *node)) {
+ if in != nil && !in(n) {
+ return
+ }
+ for _, child := range n.child {
+ child.Walk(in, out)
+ }
+ if out != nil {
+ out(n)
+ }
+}
+```
+
+The above code is deceptively simple. As in many complex systems, an
+important part of the signification is carried by the relationships
+between the elements and the patterns they form. It's easier to
+understand it by displaying the corresponding graph and consider the
+system as a whole. We can do that using a simple example:
+
+```go
+a := 3
+if a > 2 {
+ print("ok")
+}
+print("bye")
+```
+
+The corresponding AST is:
+
+![figure 2: a raw AST](ex1_raw_ast.drawio.svg)
+
+This is the raw AST, with no annotations, as obtained from the parser.
+Each node contains an index number (for labelling purpose only), and the
+node type, computed by the parser from the set of Go grammar rules (i.e.
+"stmt" for "list of [statements]", "call" for "call [expression]", ...).
+We also recognize the source tokens as literal values in leaf locations.
+
+Walking the tree consists in visiting the nodes starting from the root
+(node 1), in their numbering order (here from 1 to 15): depth first (the
+children before the siblings) and from left to right. At each node, a
+callback `in` is invoked at entry (pre-processing) and a callback `out`
+at exit (post-processing).
+
+When the `in` callback executes, only the information computed in the
+sub-trees in the left of the node is available, in addition to the
+pre-processing information computed in the node ancestors. The `in`
+callback returns a boolean. If the result is false, the node sub-tree is
+skipped, allowing to short-cut processing, for example to avoid to dive
+in function bodies and process only function signatures.
+
+When the `out` callback executes, the results computed on the whole
+descendant sub-trees are available, which is useful for example to
+compute the size of a composite object defined accross nested
+structures. In the absence of post-processing, multiple tree walks are
+necessary to achieve the same result.
+
+A semantic analysis step is therefore simply a tree walk with the right
+callbacks. In the case of our interpreter, we have two tree walks to
+perform: the globals and types analysis in [interp/gta.go] and the
+control-flow graphs analysis in [interp/cfg.go]. In both files, notice
+the call to `root.Walk`.
+
+Note: we have chosen to represent the AST as a uniform node structure
+as opposed to the [ast.Node] interface in the Go standard library,
+implemented by specialized types for all the node kinds. The main
+reason is that the tree walk method [ast.Inspect] only permits a
+pre-processing callback, not a post-processing one, required for
+several compiling steps. It also seemed simpler at the time to start
+with this uniform structure, and we ended up sticking with it.
+
+### Globals and types analysis
+
+Our first operation on the AST is to check and register all the
+components of the program declared at global level. This is a partial
+analysis, concerned only about declarations and not function
+implementations.
+
+This step is necessary because in Go, at global level, symbols can be
+used before being declared (as opposed to Go function bodies, or in C in
+general, where use before declaration is simply forbidden in strict
+mode).
+
+Allowing out of order symbols is what permits the code to be scattered
+arbitrarily amongst several files in packages without more constraints.
+It is indeed an important feature to let the programer organize her code
+as she wants.
+
+This step, implemented in [interp/gta.go], consists in performing a tree
+walk with only a pre-processing callback (no `out` function is passed).
+There are two particularities:
+
+The first is the multiple-pass iterative walk. Indeed, in a first global
+pass, instead of failing with an error whenever an incomplete definition
+is met, the reference to the failing sub-tree is kept in a list of nodes
+to be retried, and the walk finishes going over the whole tree. Then,
+all the problematic sub-trees are iteratively retried until all the
+nodes have been defined, or as long as there is progress. That is, if
+two subsequent iterations lead to the exact same state, it is a hint
+that progress is not being made and it would result in an infinite loop,
+at which point yaegi just stops with an error.
+
+The second particularity is that despite being in a partial analysis
+step, a full interpretation can still be necessary on an expression
+sub-tree if this one serves to implement a global type definition. For
+example if an array size is computed by an expression as in the
+following valid Go declarations:
+
+```go
+const (
+ prefix = "/usr"
+ path = prefix + "/local/bin"
+)
+var a [len(prefix+path) + 2]int
+```
+
+A paradox is that the compiler needs an interpreter to perform the type
+analysis! Indeed, in the example above, `[16]int` (because
+`len(prefix+path) + 2 = 16`) is a specific type in itself, distinct from
+e.g. `[14]int`. Which means that even though we are only at the types
+analysis phase we already must be able to compute the `len(prefix+path)
++ 2` expression. In the C language it is one of the roles of the
+[pre-processor], which means the compiler itself does not need to be
+able to achieve that. Here in Go, the specification forces the compiler
+implementor to provide and use early-on the mechanics involved above,
+which is usually called constant folding optimisation. It is therefore
+implemented both within the standard gc, and whithin yaegi. The same
+kind of approach is pushed to its paroxysm in the [Zig language] with
+its [comptime] keyword.
+
+### Control-flow graphs
+
+After GTA, all the global symbols are properly defined no matter
+their declaration order. We can now proceed with the full code
+analysis, which will be performed by a single tree walk in
+[interp/cfg.go].
+
+Both pre-processing and post-processing callbacks are provided to the
+walk function. Despite being activated in a single pass, multiple kinds
+of data processing are executed:
+
+- Types checking and creation. Started in GTA, it is now completed also
+ in all function bodies.
+
+- Analysis of variable scoping: scope levels are opened in
+ pre-processing and closed in post-processing, as the nesting of scope
+ reflects the AST structure.
+
+- Precise computing of object sizes and locations.
+
+- Identification and ordering of actions.
+
+The last point is critical for code generation. It consists in the
+production of control-flow graphs. CFGs are usually represented in the
+form of an intermediate representation (IR), which really is a
+simplified machine independent instruction set, as in the [GCC GIMPLE],
+the [LLVM IR] or the [SSA] form in the Go compiler. In yaegi, no IR is
+produced, only AST annotations are used.
+
+Let's use our previous example to explain:
+
+![figure 3: CFG is in AST](ex1_ast_cfg.drawio.svg)
+
+In the AST, the nodes relevant to the CFG are the *action* nodes (in
+blue), that is the nodes referring to an arithmetic or a logic
+operation, a function call or a memory operation (assigning a variable,
+accessing an array entry, ...).
+
+Building the CFG consists in identifying action nodes and then find
+their successor (to be stored in node fields `tnext` and `fnext`). An
+action node has one successor in the general case (shown with a green
+arrow), or two if the action is associated to a conditional branch
+(green arrow if the test is true, red arrow otherwise).
+
+The rules to determine the successor of an action node are inherent to
+the properties of its neighbours (ancestors, siblings and descendants).
+For example, in the `if` sub-tree (nodes 5 to 12), the first action to
+execute is the condition test, that is, the first action in the
+condition sub-tree, here the node 6. This action will have two
+alternative successors: one to execute if the test is true, the other
+if not. The *true* successor will be the first action in the second
+child sub-tree of the `if` node, describing the *true* branch (this
+sub-tree root is node 9, and first action 10). As there is no `if`
+*false* branch in our example, the next action of the whole `if`
+sub-tree is the first action in the `if` sibling sub-tree, here the node
+13. This node will be therefore the *false* successor, the first action
+to execute when the `if` condition fails. Finally the node 13 is also
+the successor of the *true* branch, the node 10. The corresponding
+implementation is located in a [block of 16 lines] in the
+post-processing CFG callback. Note that the same code also performs dead
+branch elimination and condition validity checking. At this stage, in
+terms of Control Flow, our AST example can now be seen as a simpler
+representation, such as the following.
+
+![figure 4: the same CFG isolated](ex1_cfg.drawio.svg)
+
+In our example, the action nodes composing the CFG can do the following
+kind of operations:
+- defining variables in memory and assigning values to them
+- performing arithmetic or logical operations
+- conditional branching
+- function calling
+
+Adding the capacity to jump to a *backward* location (where destination
+node index is inferior to source's one, an arrow from right to
+left), thus allowing *loops*, makes the action set to become
+[Turing complete], implementing a universal computing machine.
+
+![figure 5: a CFG with a loop](ex1_cfg_loop.drawio.svg)
+
+The character of universality here lies in the cyclic nature of the
+control-flow graph (remark that `if` statement graphs, although
+appearing cyclic, are not, because the conditional branches are
+mutually exclusives).
+
+This is not just theoretical. For example, forbidding backward jumps was
+crucial in the design of the Linux [eBPF verifier], in order to let user
+provided (therefore untrusted) snippets execute in a kernel system
+privileged environment and guarantee no infinite loops.
+
+## Code generation and execution
+
+The compiler implemented in yaegi targets the Go runtime itself, not a
+particular hardware architecture. For each action node in the CFG a
+corresponding closure is generated. The main benefits are:
+- Portability: the generated code runs on any platform where Go is
+ supported.
+- Interoperability: the objects produced by the interpreter are directly
+ usable by the host program in the form of reflect values.
+- The memory management in particular the garbage collector, is provided
+ by the runtime, and applies also to the values created by the
+ interpreter.
+- The support of runtime type safety, slices, maps, channels, goroutines
+ is also provided by the runtime.
+
+The action templates are located in [interp/run.go] and [interp/op.go].
+Generating closures allows to optimize all the cases where a constant is
+used (an operation involving a constant and a variable is cheaper and
+faster than the same operation involving two variables). It also permits
+to hard-code the control-flow graph, that is to pre-define the next
+instruction to execute and avoid useless branch tests.
+
+The pseudo architecture targeted by the interpreter is in effect a
+virtual [stack machine] where the memory is represented as slices of Go
+reflect values, as shown in the following figure, and where the
+instructions are represented directly by the set of action nodes (the
+CFG) in the AST. Those atomic instructions, also called *builtins*, are
+sligthly higher level than a real hardware instruction set, because they
+operate directly on Go interfaces (more precisely their reflect
+representation), hiding a lot of low level processing and subtleties
+provided by the Go runtime.
+
+![figure 6: frame organization](frame1.drawio.svg)
+
+The memory management performed by the interpreter consists to create a
+global frame at a new session (the top of the stack), populated with all
+global values (constants, types, variables and functions). At each new
+interpreted function call, a new frame is pushed on the stack,
+containing the values for all the return value, input parameters and
+local variables of the function.
+
+## Conclusion
+
+We have described the general architecture of a Go interpreter, reusing
+the existing Go scanner and parser. We have focused on the semantic
+analysis, which is based on AST annotations, up to the control-flow
+graph and code generation. This design leads to a consistent and
+concise compiler suitable for an embedded interpreter. We have also
+provided a succint overview of the virtual stack machine on top of the
+Go runtime, leveraging on the reflection layer provided by the Go
+standard library.
+
+We can now evolve this design to address different target architectures,
+for example a more efficient virtual machine, already in the works.
+
+Some parts of yaegi have not been detailed yet and will be addressed in
+a next article:
+
+- Integration with pre-compiled packages
+- Go Generics
+- Recursive types
+- Interfaces and methods
+- Virtualization and sandboxing
+- REPL and interactive use
+
+[Yaegi]: https://github.com/traefik/yaegi
+[plugins.traefik.io]: https://plugins.traefik.io
+[databases]: https://github.com/xo/xo
+[observability]: https://github.com/slok/sloth
+[container security]: https://github.com/cyberark/kubesploit
+[Go specification]: https://go.dev/ref/spec
+[go/scanner]: https://pkg.go.dev/go/scanner
+[go/parser]: https://pkg.go.dev/go/parser
+[abstract syntax tree]: https://en.wikipedia.org/wiki/Abstract_syntax_tree
+[lexical analysis]: https://en.wikipedia.org/wiki/Lexical_analysis
+[syntax analysis]: https://en.wikipedia.org/wiki/Syntax_analysis
+[semantic analysis]: https://en.wikipedia.org/wiki/Semantic_analysis_(compilers)
+[control-flow graphs]: https://en.wikipedia.org/wiki/Control-flow_graph
+[yaegi/interp]: https://pkg.go.dev/github.com/traefik/yaegi/interp
+[code generation]: https://en.wikipedia.org/wiki/Code_generation_%28compiler%29
+[ast.Node]: https://pkg.go.dev/go/ast#Node
+[ast.Inspect]: https://pkg.go.dev/go/ast#Inspect
+[statements]: https://go.dev/ref/spec#Statements
+[expression]: https://go.dev/ref/spec#Expressions
+[Turing complete]: https://en.wikipedia.org/wiki/Turing_completeness
+[eBPF verifier]: https://www.kernel.org/doc/html/latest/bpf/verifier.html
+[interp/gta.go]: https://github.com/traefik/yaegi/blob/master/interp/gta.go
+[interp/cfg.go]: https://github.com/traefik/yaegi/blob/master/interp/cfg.go
+[interp/run.go]: https://github.com/traefik/yaegi/blob/master/interp/run.go
+[interp/op.go]: https://github.com/traefik/yaegi/blob/master/interp/op.go
+[pre-processor]: https://gcc.gnu.org/onlinedocs/cpp/
+[GCC GIMPLE]: https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html
+[LLVM IR]: https://llvm.org/docs/LangRef.html
+[SSA]: https://github.com/golang/go/blob/bf48163e8f2b604f3b9e83951e331cd11edd8495/src/cmd/compile/internal/ssa/README.md
+[block of 16 lines]: https://github.com/traefik/yaegi/blob/8de3add6faf471a807182c7b8198fe863debc9d8/interp/cfg.go#L1608-L1624
+[Zig language]: https://ziglang.org
+[comptime]: https://ziglang.org/documentation/master/#comptime
+[stack machine]: https://en.wikipedia.org/wiki/Stack_machine
diff --git a/yaegi-internals/yaegi_internals_fig1.drawio.svg b/yaegi-internals/yaegi_internals_fig1.drawio.svg
new file mode 100644
index 0000000..bfe123f
--- /dev/null
+++ b/yaegi-internals/yaegi_internals_fig1.drawio.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!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="641px" height="351px" viewBox="-0.5 -0.5 641 351" content="&lt;mxfile host=&quot;Electron&quot; modified=&quot;2023-04-06T14:17:28.604Z&quot; agent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36&quot; etag=&quot;AdbRRaVimnH_mmBxbIQ9&quot; version=&quot;21.1.2&quot; type=&quot;device&quot;&gt;&#10; &lt;diagram name=&quot;Page-1&quot; id=&quot;7KjBe1GQy4R-MzBecK1R&quot;&gt;&#10; &lt;mxGraphModel dx=&quot;954&quot; dy=&quot;674&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;827&quot; pageHeight=&quot;1169&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#10; &lt;root&gt;&#10; &lt;mxCell id=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-11&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;80&quot; y=&quot;40&quot; width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-1&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-2&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;20&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;20&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-4&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; source=&quot;dklFw9bgWBskkmRMdnWt-1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;30&quot; y=&quot;30&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;30&quot; y=&quot;10&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-5&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.045;exitDx=0;exitDy=0;exitPerimeter=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; source=&quot;dklFw9bgWBskkmRMdnWt-1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;55&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;60&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-6&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; source=&quot;dklFw9bgWBskkmRMdnWt-1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;70&quot; y=&quot;31&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;70&quot; y=&quot;10&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-7&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;100&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;100&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-9&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; source=&quot;dklFw9bgWBskkmRMdnWt-1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;110&quot; y=&quot;30&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;110&quot; y=&quot;10&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-10&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;140&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;140&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-73&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;p&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-76&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;r&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;20&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-77&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;i&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;40&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-78&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;n&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-79&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;t&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;80&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-80&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;(&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;100&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-81&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-75&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;h&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-11&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;140&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-21&quot; value=&quot;stream of characters&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;90&quot; y=&quot;10&quot; width=&quot;140&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-23&quot; value=&quot;tokens&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;430&quot; y=&quot;10&quot; width=&quot;140&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-24&quot; value=&quot;scanner&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;35&quot; width=&quot;100&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-25&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-24&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;300&quot; y=&quot;110&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;350&quot; y=&quot;60&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-26&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-24&quot; target=&quot;dklFw9bgWBskkmRMdnWt-13&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;300&quot; y=&quot;110&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;350&quot; y=&quot;60&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-27&quot; value=&quot;parser&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;620&quot; y=&quot;90&quot; width=&quot;100&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-28&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-13&quot; target=&quot;dklFw9bgWBskkmRMdnWt-27&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;340&quot; y=&quot;220&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;390&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;670&quot; y=&quot;50&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-40&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;95&quot; y=&quot;130&quot; width=&quot;130&quot; height=&quot;100&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-29&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;70&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-30&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#d5e8d4;strokeColor=#82b366;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;30&quot; y=&quot;40&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-31&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#fff2cc;strokeColor=#d6b656;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;110&quot; y=&quot;40&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-32&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#ffe6cc;strokeColor=#d79b00;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry y=&quot;80&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-33&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f8cecc;strokeColor=#b85450;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;80&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-36&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; source=&quot;dklFw9bgWBskkmRMdnWt-30&quot; target=&quot;dklFw9bgWBskkmRMdnWt-29&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;50&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;130&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-37&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; source=&quot;dklFw9bgWBskkmRMdnWt-32&quot; target=&quot;dklFw9bgWBskkmRMdnWt-30&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;10&quot; y=&quot;80&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;30&quot; y=&quot;60&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-38&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; source=&quot;dklFw9bgWBskkmRMdnWt-29&quot; target=&quot;dklFw9bgWBskkmRMdnWt-31&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;210&quot; y=&quot;-30&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-39&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-40&quot; source=&quot;dklFw9bgWBskkmRMdnWt-30&quot; target=&quot;dklFw9bgWBskkmRMdnWt-33&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;50&quot; y=&quot;60&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;210&quot; y=&quot;-30&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-41&quot; value=&quot;Abstract Syntax Tree (AST)&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;431&quot; y=&quot;100&quot; width=&quot;150&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-42&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-27&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;580&quot; y=&quot;170&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;670&quot; y=&quot;170&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-44&quot; value=&quot;analyser&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;150&quot; width=&quot;100&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-45&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;445&quot; y=&quot;130&quot; width=&quot;130&quot; height=&quot;100&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-46&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;70&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-47&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;30&quot; y=&quot;40&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-48&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;110&quot; y=&quot;40&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-49&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry y=&quot;80&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-50&quot; value=&quot;&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;aspect=fixed;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;60&quot; y=&quot;80&quot; width=&quot;20&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-51&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; source=&quot;dklFw9bgWBskkmRMdnWt-47&quot; target=&quot;dklFw9bgWBskkmRMdnWt-46&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;80&quot; y=&quot;50&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;130&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-52&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; source=&quot;dklFw9bgWBskkmRMdnWt-49&quot; target=&quot;dklFw9bgWBskkmRMdnWt-47&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;10&quot; y=&quot;80&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;30&quot; y=&quot;60&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-53&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; source=&quot;dklFw9bgWBskkmRMdnWt-46&quot; target=&quot;dklFw9bgWBskkmRMdnWt-48&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;160&quot; y=&quot;20&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;210&quot; y=&quot;-30&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-54&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-45&quot; source=&quot;dklFw9bgWBskkmRMdnWt-47&quot; target=&quot;dklFw9bgWBskkmRMdnWt-50&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;50&quot; y=&quot;60&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;210&quot; y=&quot;-30&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-55&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-44&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;460&quot; y=&quot;165&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;470&quot; y=&quot;140&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-57&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-44&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;230&quot; y=&quot;165&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-58&quot; value=&quot;annotated AST&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;90&quot; y=&quot;100&quot; width=&quot;150&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-59&quot; value=&quot;generator&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;280&quot; y=&quot;275&quot; width=&quot;100&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-60&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; target=&quot;dklFw9bgWBskkmRMdnWt-59&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;170&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;370&quot; y=&quot;140&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;Array as=&quot;points&quot;&gt;&#10; &lt;mxPoint x=&quot;170&quot; y=&quot;290&quot; /&gt;&#10; &lt;/Array&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-62&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;420&quot; y=&quot;40&quot; width=&quot;160&quot; height=&quot;21.25&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-13&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-15&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; source=&quot;dklFw9bgWBskkmRMdnWt-13&quot; target=&quot;dklFw9bgWBskkmRMdnWt-13&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-310&quot; y=&quot;100&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-310&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-17&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; source=&quot;dklFw9bgWBskkmRMdnWt-13&quot; target=&quot;dklFw9bgWBskkmRMdnWt-13&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-270&quot; y=&quot;101&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-270&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-19&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; source=&quot;dklFw9bgWBskkmRMdnWt-13&quot; target=&quot;dklFw9bgWBskkmRMdnWt-13&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-230&quot; y=&quot;100&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-230&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-83&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;ident&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry y=&quot;-1.25&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-84&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;lpar&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;40&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-85&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;string&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;80&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-82&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;comma&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-62&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-63&quot; value=&quot;&quot; style=&quot;group&quot; parent=&quot;1&quot; vertex=&quot;1&quot; connectable=&quot;0&quot;&gt;&#10; &lt;mxGeometry x=&quot;420&quot; y=&quot;280&quot; width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-64&quot; value=&quot;&quot; style=&quot;rounded=0;whiteSpace=wrap;html=1;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;160&quot; height=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-65&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; source=&quot;dklFw9bgWBskkmRMdnWt-64&quot; target=&quot;dklFw9bgWBskkmRMdnWt-64&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-310&quot; y=&quot;100&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-310&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-66&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; source=&quot;dklFw9bgWBskkmRMdnWt-64&quot; target=&quot;dklFw9bgWBskkmRMdnWt-64&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-270&quot; y=&quot;101&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-270&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-67&quot; value=&quot;&quot; style=&quot;endArrow=none;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; source=&quot;dklFw9bgWBskkmRMdnWt-64&quot; target=&quot;dklFw9bgWBskkmRMdnWt-64&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;-230&quot; y=&quot;100&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;-230&quot; y=&quot;80&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-101&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;add&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-102&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;load&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;40&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-103&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;call&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;80&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-100&quot; value=&quot;&amp;lt;font style=&amp;quot;font-size: 10px;&amp;quot;&amp;gt;print&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;dklFw9bgWBskkmRMdnWt-63&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;120&quot; y=&quot;-2.5&quot; width=&quot;40&quot; height=&quot;22.5&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-68&quot; value=&quot;code instructions&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;431&quot; y=&quot;250&quot; width=&quot;140&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-69&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;&quot; parent=&quot;1&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;380&quot; y=&quot;289.58000000000004&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;420&quot; y=&quot;289.58000000000004&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-70&quot; value=&quot;executor&quot; style=&quot;ellipse;whiteSpace=wrap;html=1;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;620&quot; y=&quot;275&quot; width=&quot;100&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-71&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-64&quot; target=&quot;dklFw9bgWBskkmRMdnWt-70&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;320&quot; y=&quot;190&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;370&quot; y=&quot;140&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-72&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;print(&amp;quot;hello&amp;quot;, 2+3)&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;80&quot; y=&quot;60&quot; width=&quot;160&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-86&quot; value=&quot;&amp;lt;font face=&amp;quot;Courier New&amp;quot;&amp;gt;hello5&amp;lt;/font&amp;gt;&quot; style=&quot;text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;&quot; parent=&quot;1&quot; vertex=&quot;1&quot;&gt;&#10; &lt;mxGeometry x=&quot;640&quot; y=&quot;330&quot; width=&quot;60&quot; height=&quot;30&quot; as=&quot;geometry&quot; /&gt;&#10; &lt;/mxCell&gt;&#10; &lt;mxCell id=&quot;dklFw9bgWBskkmRMdnWt-88&quot; value=&quot;&quot; style=&quot;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;&quot; parent=&quot;1&quot; source=&quot;dklFw9bgWBskkmRMdnWt-70&quot; target=&quot;dklFw9bgWBskkmRMdnWt-86&quot; edge=&quot;1&quot;&gt;&#10; &lt;mxGeometry width=&quot;50&quot; height=&quot;50&quot; relative=&quot;1&quot; as=&quot;geometry&quot;&gt;&#10; &lt;mxPoint x=&quot;460&quot; y=&quot;240&quot; as=&quot;sourcePoint&quot; /&gt;&#10; &lt;mxPoint x=&quot;510&quot; y=&quot;190&quot; as=&quot;targetPoint&quot; /&gt;&#10; &lt;/mxGeometry&gt;&#10; &lt;/mxCell&gt;&#10; &lt;/root&gt;&#10; &lt;/mxGraphModel&gt;&#10; &lt;/diagram&gt;&#10;&lt;/mxfile&gt;&#10;"><defs/><g><g id="cell-dklFw9bgWBskkmRMdnWt-1"><rect x="0" y="30" width="160" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-2"><path d="M 20 50 L 20 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-4"><path d="M 40 50 L 40 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-5"><path d="M 60 50.9 L 60 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-6"><path d="M 80 50 L 80 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-7"><path d="M 100 50 L 100 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-9"><path d="M 120 50 L 120 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-10"><path d="M 140 50 L 140 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-73"><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: 18px; height: 1px; padding-top: 40px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">p</font></div></div></div></foreignObject><text x="10" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">p</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-76"><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: 18px; height: 1px; padding-top: 40px; margin-left: 21px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">r</font></div></div></div></foreignObject><text x="30" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">r</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-77"><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: 18px; height: 1px; padding-top: 40px; margin-left: 41px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">i</font></div></div></div></foreignObject><text x="50" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">i</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-78"><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: 18px; height: 1px; padding-top: 40px; margin-left: 61px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">n</font></div></div></div></foreignObject><text x="70" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">n</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-79"><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: 18px; height: 1px; padding-top: 40px; margin-left: 81px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">t</font></div></div></div></foreignObject><text x="90" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">t</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-80"><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: 18px; height: 1px; padding-top: 40px; margin-left: 101px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">(</font></div></div></div></foreignObject><text x="110" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">(</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-81"><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: 18px; height: 1px; padding-top: 40px; margin-left: 121px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">"</font></div></div></div></foreignObject><text x="130" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">"</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-75"><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: 18px; height: 1px; padding-top: 40px; margin-left: 141px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">h</font></div></div></div></foreignObject><text x="150" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">h</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-21"><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: 138px; height: 1px; padding-top: 15px; margin-left: 11px;"><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: none; white-space: normal; overflow-wrap: normal;">stream of characters</div></div></div></foreignObject><text x="80" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">stream of characters</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-23"><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: 138px; height: 1px; padding-top: 15px; margin-left: 351px;"><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: none; white-space: normal; overflow-wrap: normal;">tokens</div></div></div></foreignObject><text x="420" y="19" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">tokens</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-24"><ellipse cx="250" cy="40" rx="50" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 98px; height: 1px; padding-top: 40px; margin-left: 201px;"><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: none; white-space: normal; overflow-wrap: normal;">scanner</div></div></div></foreignObject><text x="250" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">scanner</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-25"><path d="M 160 40 L 193.63 40" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 198.88 40 L 191.88 43.5 L 193.63 40 L 191.88 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-26"><path d="M 300 40 L 333.63 40" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 338.88 40 L 331.88 43.5 L 333.63 40 L 331.88 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-27"><ellipse cx="590" cy="95" rx="50" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 98px; height: 1px; padding-top: 95px; margin-left: 541px;"><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: none; white-space: normal; overflow-wrap: normal;">parser</div></div></div></foreignObject><text x="590" y="99" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">parser</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-28"><path d="M 500 40 L 590 40 L 590 73.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 590 78.88 L 586.5 71.88 L 590 73.63 L 593.5 71.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-29"><ellipse cx="95" cy="130" rx="10" ry="10" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-30"><ellipse cx="55" cy="170" rx="10" ry="10" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-31"><ellipse cx="135" cy="170" rx="10" ry="10" fill="#fff2cc" stroke="#d6b656" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-32"><ellipse cx="25" cy="210" rx="10" ry="10" fill="#ffe6cc" stroke="#d79b00" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-33"><ellipse cx="85" cy="210" rx="10" ry="10" fill="#f8cecc" stroke="#b85450" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-36"><path d="M 62.07 162.93 L 87.93 137.07" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-37"><path d="M 32.07 202.93 L 47.93 177.07" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-38"><path d="M 102.07 137.07 L 127.93 162.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-39"><path d="M 62.07 177.07 L 77.93 202.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-41"><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: 148px; height: 1px; padding-top: 105px; margin-left: 352px;"><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: none; white-space: normal; overflow-wrap: normal;">Abstract Syntax Tree (AST)</div></div></div></foreignObject><text x="426" y="109" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Abstract Syntax Tree (AST)</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-42"><path d="M 590 110 L 590 160 L 506.37 160" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 501.12 160 L 508.12 156.5 L 506.37 160 L 508.12 163.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-44"><ellipse cx="250" cy="155" rx="50" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 98px; height: 1px; padding-top: 155px; margin-left: 201px;"><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: none; white-space: normal; overflow-wrap: normal;">analyser</div></div></div></foreignObject><text x="250" y="159" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">analyser</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-46"><ellipse cx="445" cy="130" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-47"><ellipse cx="405" cy="170" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-48"><ellipse cx="485" cy="170" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-49"><ellipse cx="375" cy="210" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-50"><ellipse cx="435" cy="210" rx="10" ry="10" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-51"><path d="M 412.07 162.93 L 437.93 137.07" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-52"><path d="M 382.07 202.93 L 397.93 177.07" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-53"><path d="M 452.07 137.07 L 477.93 162.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-54"><path d="M 412.07 177.07 L 427.93 202.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-55"><path d="M 380 155 L 306.37 155" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 301.12 155 L 308.12 151.5 L 306.37 155 L 308.12 158.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-57"><path d="M 200 155 L 156.37 155" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 151.12 155 L 158.12 151.5 L 156.37 155 L 158.12 158.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-58"><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: 148px; height: 1px; padding-top: 105px; margin-left: 11px;"><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: none; white-space: normal; overflow-wrap: normal;">annotated AST</div></div></div></foreignObject><text x="85" y="109" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">annotated AST</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-59"><ellipse cx="250" cy="280" rx="50" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 98px; height: 1px; padding-top: 280px; margin-left: 201px;"><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: none; white-space: normal; overflow-wrap: normal;">generator</div></div></div></foreignObject><text x="250" y="284" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">generator</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-60"><path d="M 90 230 L 90 280 L 193.63 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 198.88 280 L 191.88 283.5 L 193.63 280 L 191.88 276.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-13"><rect x="340" y="30" width="160" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-15"><path d="M 380 50 L 380 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-17"><path d="M 420 50 L 420 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-19"><path d="M 460 50 L 460 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-83"><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: 38px; height: 1px; padding-top: 40px; margin-left: 341px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">ident</font></div></div></div></foreignObject><text x="360" y="44" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">ident</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-84"><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: 38px; height: 1px; padding-top: 39px; margin-left: 381px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">lpar</font></div></div></div></foreignObject><text x="400" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">lpar</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-85"><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: 38px; height: 1px; padding-top: 39px; margin-left: 421px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">string</font></div></div></div></foreignObject><text x="440" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">string</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-82"><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: 38px; height: 1px; padding-top: 39px; margin-left: 461px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">comma</font></div></div></div></foreignObject><text x="480" y="42" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">comma</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-64"><rect x="340" y="270" width="160" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-65"><path d="M 380 290 L 380 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-66"><path d="M 420 290 L 420 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-67"><path d="M 460 290 L 460 270" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-101"><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: 38px; height: 1px; padding-top: 279px; margin-left: 341px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">add</font></div></div></div></foreignObject><text x="360" y="282" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">add</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-102"><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: 38px; height: 1px; padding-top: 279px; margin-left: 381px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">load</font></div></div></div></foreignObject><text x="400" y="282" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">load</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-103"><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: 38px; height: 1px; padding-top: 279px; margin-left: 421px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">call</font></div></div></div></foreignObject><text x="440" y="282" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">call</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-100"><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: 38px; height: 1px; padding-top: 279px; margin-left: 461px;"><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: none; white-space: normal; overflow-wrap: normal;"><font style="font-size: 10px;">print</font></div></div></div></foreignObject><text x="480" y="282" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">print</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-68"><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: 138px; height: 1px; padding-top: 255px; margin-left: 352px;"><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: none; white-space: normal; overflow-wrap: normal;">code instructions</div></div></div></foreignObject><text x="421" y="259" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">code instructions</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-69"><path d="M 300 279.58 L 333.63 279.58" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 338.88 279.58 L 331.88 283.08 L 333.63 279.58 L 331.88 276.08 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-70"><ellipse cx="590" cy="280" rx="50" ry="15" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="none"/><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: 98px; height: 1px; padding-top: 280px; margin-left: 541px;"><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: none; white-space: normal; overflow-wrap: normal;">executor</div></div></div></foreignObject><text x="590" y="284" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">executor</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-71"><path d="M 500 280 L 533.63 280" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 538.88 280 L 531.88 283.5 L 533.63 280 L 531.88 276.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g><g id="cell-dklFw9bgWBskkmRMdnWt-72"><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: 158px; height: 1px; padding-top: 65px; margin-left: 1px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">print("hello", 2+3)</font></div></div></div></foreignObject><text x="80" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">print("hello", 2+3)</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-86"><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: 58px; height: 1px; padding-top: 335px; margin-left: 561px;"><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: none; white-space: normal; overflow-wrap: normal;"><font face="Courier New">hello5</font></div></div></div></foreignObject><text x="590" y="339" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">hello5</text></switch></g></g><g id="cell-dklFw9bgWBskkmRMdnWt-88"><path d="M 590 295 L 590 313.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/><path d="M 590 318.88 L 586.5 311.88 L 590 313.63 L 593.5 311.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="none"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file