Files
network-diagrams-tool/UML/UML.svg
T
2026-02-25 09:39:47 +03:00

107 lines
41 KiB
XML

<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="v0.7.1" preserveAspectRatio="xMinYMin meet" viewBox="0 0 1556 2177"><svg class="d2-2989399089 d2-svg" width="1556" height="2177" viewBox="-89 -89 1556 2177"><rect x="-89.000000" y="-89.000000" width="1556.000000" height="2177.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-2989399089 .text-italic {
font-family: "d2-2989399089-font-italic";
}
@font-face {
font-family: d2-2989399089-font-italic;
src: url("data:application/font-woff;base64,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");
}
.d2-2989399089 .text-mono {
font-family: "d2-2989399089-font-mono";
}
@font-face {
font-family: d2-2989399089-font-mono;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-2989399089 .fill-N1{fill:#0A0F25;}
.d2-2989399089 .fill-N2{fill:#676C7E;}
.d2-2989399089 .fill-N3{fill:#9499AB;}
.d2-2989399089 .fill-N4{fill:#CFD2DD;}
.d2-2989399089 .fill-N5{fill:#DEE1EB;}
.d2-2989399089 .fill-N6{fill:#EEF1F8;}
.d2-2989399089 .fill-N7{fill:#FFFFFF;}
.d2-2989399089 .fill-B1{fill:#0D32B2;}
.d2-2989399089 .fill-B2{fill:#0D32B2;}
.d2-2989399089 .fill-B3{fill:#E3E9FD;}
.d2-2989399089 .fill-B4{fill:#E3E9FD;}
.d2-2989399089 .fill-B5{fill:#EDF0FD;}
.d2-2989399089 .fill-B6{fill:#F7F8FE;}
.d2-2989399089 .fill-AA2{fill:#4A6FF3;}
.d2-2989399089 .fill-AA4{fill:#EDF0FD;}
.d2-2989399089 .fill-AA5{fill:#F7F8FE;}
.d2-2989399089 .fill-AB4{fill:#EDF0FD;}
.d2-2989399089 .fill-AB5{fill:#F7F8FE;}
.d2-2989399089 .stroke-N1{stroke:#0A0F25;}
.d2-2989399089 .stroke-N2{stroke:#676C7E;}
.d2-2989399089 .stroke-N3{stroke:#9499AB;}
.d2-2989399089 .stroke-N4{stroke:#CFD2DD;}
.d2-2989399089 .stroke-N5{stroke:#DEE1EB;}
.d2-2989399089 .stroke-N6{stroke:#EEF1F8;}
.d2-2989399089 .stroke-N7{stroke:#FFFFFF;}
.d2-2989399089 .stroke-B1{stroke:#0D32B2;}
.d2-2989399089 .stroke-B2{stroke:#0D32B2;}
.d2-2989399089 .stroke-B3{stroke:#E3E9FD;}
.d2-2989399089 .stroke-B4{stroke:#E3E9FD;}
.d2-2989399089 .stroke-B5{stroke:#EDF0FD;}
.d2-2989399089 .stroke-B6{stroke:#F7F8FE;}
.d2-2989399089 .stroke-AA2{stroke:#4A6FF3;}
.d2-2989399089 .stroke-AA4{stroke:#EDF0FD;}
.d2-2989399089 .stroke-AA5{stroke:#F7F8FE;}
.d2-2989399089 .stroke-AB4{stroke:#EDF0FD;}
.d2-2989399089 .stroke-AB5{stroke:#F7F8FE;}
.d2-2989399089 .background-color-N1{background-color:#0A0F25;}
.d2-2989399089 .background-color-N2{background-color:#676C7E;}
.d2-2989399089 .background-color-N3{background-color:#9499AB;}
.d2-2989399089 .background-color-N4{background-color:#CFD2DD;}
.d2-2989399089 .background-color-N5{background-color:#DEE1EB;}
.d2-2989399089 .background-color-N6{background-color:#EEF1F8;}
.d2-2989399089 .background-color-N7{background-color:#FFFFFF;}
.d2-2989399089 .background-color-B1{background-color:#0D32B2;}
.d2-2989399089 .background-color-B2{background-color:#0D32B2;}
.d2-2989399089 .background-color-B3{background-color:#E3E9FD;}
.d2-2989399089 .background-color-B4{background-color:#E3E9FD;}
.d2-2989399089 .background-color-B5{background-color:#EDF0FD;}
.d2-2989399089 .background-color-B6{background-color:#F7F8FE;}
.d2-2989399089 .background-color-AA2{background-color:#4A6FF3;}
.d2-2989399089 .background-color-AA4{background-color:#EDF0FD;}
.d2-2989399089 .background-color-AA5{background-color:#F7F8FE;}
.d2-2989399089 .background-color-AB4{background-color:#EDF0FD;}
.d2-2989399089 .background-color-AB5{background-color:#F7F8FE;}
.d2-2989399089 .color-N1{color:#0A0F25;}
.d2-2989399089 .color-N2{color:#676C7E;}
.d2-2989399089 .color-N3{color:#9499AB;}
.d2-2989399089 .color-N4{color:#CFD2DD;}
.d2-2989399089 .color-N5{color:#DEE1EB;}
.d2-2989399089 .color-N6{color:#EEF1F8;}
.d2-2989399089 .color-N7{color:#FFFFFF;}
.d2-2989399089 .color-B1{color:#0D32B2;}
.d2-2989399089 .color-B2{color:#0D32B2;}
.d2-2989399089 .color-B3{color:#E3E9FD;}
.d2-2989399089 .color-B4{color:#E3E9FD;}
.d2-2989399089 .color-B5{color:#EDF0FD;}
.d2-2989399089 .color-B6{color:#F7F8FE;}
.d2-2989399089 .color-AA2{color:#4A6FF3;}
.d2-2989399089 .color-AA4{color:#EDF0FD;}
.d2-2989399089 .color-AA5{color:#F7F8FE;}
.d2-2989399089 .color-AB4{color:#EDF0FD;}
.d2-2989399089 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2989399089);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2989399089);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2989399089);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2989399089);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2989399089);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2989399089);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2989399089);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2989399089);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="VG9wb2xvZ3k="><g class="shape" ><rect x="213.000000" y="12.000000" width="566.000000" height="460.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="213.000000" y="12.000000" width="566.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="496.000000" y="62.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Topology</text><text x="223.000000" y="132.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="132.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">devices</text><text x="759.000000" y="132.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Dict[str, Device]</text><text x="223.000000" y="178.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="178.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">networks</text><text x="759.000000" y="178.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Dict[str, Network]</text><line x1="213.000000" x2="779.000000" y1="196.000000" y2="196.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /><text x="223.000000" y="224.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="224.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__init__(self)</text><text x="759.000000" y="224.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="223.000000" y="270.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="270.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">add_device(self, device: Device)</text><text x="759.000000" y="270.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="223.000000" y="316.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="316.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">rm_device(self, device: Device)</text><text x="759.000000" y="316.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="223.000000" y="362.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="362.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">add_network(self, network: Network)</text><text x="759.000000" y="362.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="223.000000" y="408.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="408.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">rm_network(self, network: Network)</text><text x="759.000000" y="408.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="223.000000" y="454.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="243.000000" y="454.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__repr__(self)</text><text x="759.000000" y="454.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text></g></g><g class="TmV0d29yaw=="><g class="shape" ><rect x="12.000000" y="724.000000" width="638.000000" height="506.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="12.000000" y="724.000000" width="638.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="331.000000" y="774.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Network</text><text x="22.000000" y="844.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="844.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">name</text><text x="630.000000" y="844.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text><text x="22.000000" y="890.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="890.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">interfaces</text><text x="630.000000" y="890.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">List[Interface]</text><text x="22.000000" y="936.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="936.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">vlan</text><text x="630.000000" y="936.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><text x="22.000000" y="982.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="982.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">network_ip</text><text x="630.000000" y="982.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><text x="22.000000" y="1028.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="1028.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">subnet_mask</text><text x="630.000000" y="1028.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><line x1="12.000000" x2="650.000000" y1="1046.000000" y2="1046.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /><text x="22.000000" y="1074.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="1074.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__init__(self, ...)</text><text x="630.000000" y="1074.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="22.000000" y="1120.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="1120.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">add_interface(self, interface: Interface)</text><text x="630.000000" y="1120.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="22.000000" y="1166.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="1166.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">rm_interface(self, interface: Interface)</text><text x="630.000000" y="1166.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="22.000000" y="1212.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="42.000000" y="1212.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__repr__(self)</text><text x="630.000000" y="1212.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text></g></g><g class="SG9zdA=="><g class="shape" ><rect x="785.000000" y="552.000000" width="162.000000" height="92.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="785.000000" y="552.000000" width="162.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="866.000000" y="602.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Host</text><line x1="785.000000" x2="947.000000" y1="644.000000" y2="644.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /></g></g><g class="Um91dGVy"><g class="shape" ><rect x="967.000000" y="552.000000" width="189.000000" height="92.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="967.000000" y="552.000000" width="189.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="1061.500000" y="602.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Router</text><line x1="967.000000" x2="1156.000000" y1="644.000000" y2="644.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /></g></g><g class="U3dpdGNo"><g class="shape" ><rect x="1176.000000" y="552.000000" width="190.000000" height="92.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="1176.000000" y="552.000000" width="190.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="1271.000000" y="602.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Switch</text><line x1="1176.000000" x2="1366.000000" y1="644.000000" y2="644.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /></g></g><g class="RGV2aWNl"><g class="shape" ><rect x="670.000000" y="754.000000" width="638.000000" height="414.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="670.000000" y="754.000000" width="638.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="989.000000" y="804.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Device</text><text x="680.000000" y="874.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="874.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">name</text><text x="1288.000000" y="874.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text><text x="680.000000" y="920.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="920.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">role</text><text x="1288.000000" y="920.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text><text x="680.000000" y="966.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="966.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">interfaces</text><text x="1288.000000" y="966.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Dict[str, Interface]</text><line x1="670.000000" x2="1308.000000" y1="984.000000" y2="984.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /><text x="680.000000" y="1012.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="1012.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__init__(self, name: str)</text><text x="1288.000000" y="1012.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="680.000000" y="1058.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="1058.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">add_interface(self, interface: Interface)</text><text x="1288.000000" y="1058.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="680.000000" y="1104.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="1104.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">rm_interface(self, interface: Interface)</text><text x="1288.000000" y="1104.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="680.000000" y="1150.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="700.000000" y="1150.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__repr__(self)</text><text x="1288.000000" y="1150.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text></g></g><g class="VmlydHVhbEludGVyZmFjZQ=="><g class="shape" ><rect x="926.000000" y="1401.000000" width="334.000000" height="92.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="926.000000" y="1401.000000" width="334.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="1093.000000" y="1451.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">VirtualInterface</text><line x1="926.000000" x2="1260.000000" y1="1493.000000" y2="1493.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /></g></g><g class="SW50ZXJmYWNl"><g class="shape" ><rect x="642.000000" y="1573.000000" width="431.000000" height="414.000000" stroke="#0A0F25" fill="#FFFFFF" class=" stroke-N1 fill-N7" style="stroke-width:2;" /><rect x="642.000000" y="1573.000000" width="431.000000" height="92.000000" fill="#0A0F25" class="class_header fill-N1" /><text x="857.500000" y="1623.500000" fill="#FFFFFF" class="text-mono fill-N7" style="text-anchor:middle;font-size:24px;">Interface</text><text x="652.000000" y="1693.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1693.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">name</text><text x="1053.000000" y="1693.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text><text x="652.000000" y="1739.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1739.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">ip_address</text><text x="1053.000000" y="1739.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><text x="652.000000" y="1785.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1785.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">network</text><text x="1053.000000" y="1785.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><text x="652.000000" y="1831.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1831.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">default_gateway</text><text x="1053.000000" y="1831.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Optional[str]</text><text x="652.000000" y="1877.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1877.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">device</text><text x="1053.000000" y="1877.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">Device</text><line x1="642.000000" x2="1073.000000" y1="1895.000000" y2="1895.000000" stroke="#0A0F25" class=" stroke-N1" style="stroke-width:1" /><text x="652.000000" y="1923.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1923.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__init__(self, ...)</text><text x="1053.000000" y="1923.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">void</text><text x="652.000000" y="1969.000000" fill="#0D32B2" class="text-mono fill-B2" style="text-anchor:start;font-size:20px">+</text><text x="672.000000" y="1969.000000" fill="#0A0F25" class="text-mono fill-N1" style="text-anchor:start;font-size:20px">__repr__(self)</text><text x="1053.000000" y="1969.000000" fill="#4A6FF3" class="text-mono fill-AA2" style="text-anchor:end;font-size:20px">str</text></g></g><g class="KEhvc3QgLSZndDsgRGV2aWNlKVswXQ=="><marker id="mk-d2-2989399089-3777340426" markerWidth="13.000000" markerHeight="15.000000" refX="10.000000" refY="7.500000" viewBox="0.000000 0.000000 13.000000 15.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="1.000000,1.000000 12.000000,7.500000 1.000000,14.000000" stroke="#0D32B2" fill="#FFFFFF" class="connection stroke-B1 fill-N7" stroke-width="2" /> </marker><path d="M 925.200012 646.000000 L 925.200012 751.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2989399089-3777340426)" mask="url(#d2-2989399089)" /></g><g class="KFJvdXRlciAtJmd0OyBEZXZpY2UpWzBd"><path d="M 1052.800049 646.000000 L 1052.800049 751.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2989399089-3777340426)" mask="url(#d2-2989399089)" /></g><g class="KFN3aXRjaCAtJmd0OyBEZXZpY2UpWzBd"><path d="M 1271.599976 646.000000 L 1271.599976 751.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2989399089-3777340426)" mask="url(#d2-2989399089)" /></g><g class="KFZpcnR1YWxJbnRlcmZhY2UgLSZndDsgSW50ZXJmYWNlKVswXQ=="><path d="M 965.765991 1495.000000 L 965.765991 1569.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2989399089-3777340426)" mask="url(#d2-2989399089)" /></g><g class="KERldmljZSAtLSBJbnRlcmZhY2UpWzBd"><path d="M 858.015991 1171.000000 L 858.015991 1571.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" mask="url(#d2-2989399089)" /><text x="858.000000" y="1377.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">has</text><text x="875.500000" y="1190.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1..*</text><text x="867.500000" y="1563.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1</text></g><g class="KERldmljZSAtLSBWaXJ0dWFsSW50ZXJmYWNlKVswXQ=="><path d="M 1093.000000 1171.000000 L 1093.000000 1399.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" mask="url(#d2-2989399089)" /><text x="1093.000000" y="1291.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">has</text><text x="1110.500000" y="1190.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1..*</text><text x="1102.500000" y="1391.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1</text></g><g class="KFRvcG9sb2d5IC0tIE5ldHdvcmspWzBd"><path d="M 331.000000 474.000000 L 331.000000 722.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" mask="url(#d2-2989399089)" /><text x="331.000000" y="604.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">has</text><text x="348.500000" y="493.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1..*</text><text x="340.500000" y="714.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1</text></g><g class="KFRvcG9sb2d5IC0tIERldmljZSlbMF0="><path d="M 677.700012 474.000000 L 677.700012 674.000000 S 677.700012 684.000000 687.700012 684.000000 L 787.599976 684.000000 S 797.599976 684.000000 797.599976 694.000000 L 797.599976 753.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" mask="url(#d2-2989399089)" /><text x="678.000000" y="679.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">has</text><text x="695.500000" y="493.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1..*</text><text x="807.500000" y="745.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1</text></g><g class="KE5ldHdvcmsgLS0gSW50ZXJmYWNlKVswXQ=="><path d="M 331.000000 1232.000000 L 331.000000 1523.000000 S 331.000000 1533.000000 341.000000 1533.000000 L 740.265991 1533.000000 S 750.265991 1533.000000 750.265991 1543.000000 L 750.265991 1571.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" mask="url(#d2-2989399089)" /><text x="409.000000" y="1539.000000" fill="#676C7E" class="text-italic fill-N2" style="text-anchor:middle;font-size:16px">has</text><text x="348.500000" y="1251.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1..*</text><text x="759.500000" y="1563.000000" fill="#0A0F25" class="text-italic fill-N1" style="text-anchor:middle;font-size:16px">1</text></g><mask id="d2-2989399089" maskUnits="userSpaceOnUse" x="-89" y="-89" width="1556" height="2177">
<rect x="-89" y="-89" width="1556" height="2177" fill="white"></rect>
<rect x="844.000000" y="1361.000000" width="28" height="21" fill="black"></rect>
<rect x="1079.000000" y="1275.000000" width="28" height="21" fill="black"></rect>
<rect x="317.000000" y="588.000000" width="28" height="21" fill="black"></rect>
<rect x="664.000000" y="663.000000" width="28" height="21" fill="black"></rect>
<rect x="395.000000" y="1523.000000" width="28" height="21" fill="black"></rect>
</mask></svg></svg>