summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-03-14 12:55:26 +0000
committerAndrej Mihajlov <and@codeispoetry.ru>2017-03-14 12:55:26 +0000
commit6151536102ddba7248920d27ee6ba2f4864a610d (patch)
tree54fb9773a8a4630cfce18018d0b7524c78445ebf
parentbe8879413570ecf002b9d70f05eb38a67b8206ca (diff)
downloadmullvadvpn-6151536102ddba7248920d27ee6ba2f4864a610d.tar.xz
mullvadvpn-6151536102ddba7248920d27ee6ba2f4864a610d.zip
Update XML/PNG diagrams
-rw-r--r--README images/app-diagram.pngbin42370 -> 44230 bytes
-rw-r--r--README images/app-diagram.svg2
-rw-r--r--README images/app-diagram.xml3
3 files changed, 2 insertions, 3 deletions
diff --git a/README images/app-diagram.png b/README images/app-diagram.png
index 3085772fad..17d634be5e 100644
--- a/README images/app-diagram.png
+++ b/README images/app-diagram.png
Binary files differ
diff --git a/README images/app-diagram.svg b/README images/app-diagram.svg
deleted file mode 100644
index 56314b71b3..0000000000
--- a/README images/app-diagram.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<!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" width="1027px" height="652px" version="1.1" content="&lt;mxfile type=&quot;device&quot; userAgent=&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8&quot; version=&quot;6.3.1&quot; editor=&quot;www.draw.io&quot;&gt;&lt;diagram name=&quot;Page-1&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;"><defs/><g transform="translate(0.5,0.5)"><rect x="418" y="181" width="520" height="430" fill="#ffffff" stroke="#a680b8" stroke-dasharray="3 3" pointer-events="none"/><rect x="438" y="226" width="480" height="365" fill="#fff2cc" stroke="#ffd966" pointer-events="none"/><rect x="40" y="181" width="280" height="430" fill="#ccffff" stroke="#00cccc" stroke-dasharray="3 3" pointer-events="none"/><path d="M 238 56 L 351.63 56" fill="none" stroke="#a680b8" stroke-miterlimit="10" pointer-events="none"/><path d="M 356.88 56 L 349.88 58.33 L 351.63 56 L 349.88 53.67 Z" fill="#a680b8" stroke="#a680b8" stroke-miterlimit="10" pointer-events="none"/><path d="M 148 101 L 148 219.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 148 224.88 L 145.67 217.88 L 148 219.63 L 150.33 217.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(127.5,148.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">dispatch</div></div></foreignObject><text x="21" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">dispatch</text></switch></g><rect x="118" y="41" width="120" height="60" fill="#dae8fc" stroke="#6c8ebf" stroke-width="3" pointer-events="none"/><g transform="translate(154.5,64.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="47" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 48px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Backend</div></div></foreignObject><text x="24" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Backend</text></switch></g><path d="M 358 86 L 244.37 86" fill="none" stroke="#a680b8" stroke-miterlimit="10" pointer-events="none"/><path d="M 239.12 86 L 246.12 83.67 L 244.37 86 L 246.12 88.33 Z" fill="#a680b8" stroke="#a680b8" stroke-miterlimit="10" pointer-events="none"/><rect x="358" y="41" width="120" height="60" fill="#e1d5e7" stroke="#9673a6" stroke-width="3" pointer-events="none"/><g transform="translate(407.5,64.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="20" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 21px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">IPC</div></div></foreignObject><text x="10" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">IPC</text></switch></g><g transform="translate(273.5,65.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="50" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 51px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">messages</div></div></foreignObject><text x="25" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">messages</text></switch></g><path d="M 598 394 L 751.63 394" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 756.88 394 L 749.88 396.33 L 751.63 394 L 749.88 391.67 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(638.5,381.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="78" height="24" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;"><font color="#330000">data and action <br />mapping</font></div></div></foreignObject><text x="39" y="18" fill="#FFFFFF" text-anchor="middle" font-size="11px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="478" y="364" width="120" height="60" fill="#f8cecc" stroke="#b85450" stroke-width="3" pointer-events="none"/><g transform="translate(496.5,380.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="83" height="26" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 84px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Decorator<br />(redux.connect)</div></div></foreignObject><text x="42" y="19" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Decorator&lt;br&gt;(redux.connect)</text></switch></g><path d="M 878 394 L 978 394 L 978 151 L 388 151 L 388 256 L 244.37 256" fill="none" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><path d="M 239.12 256 L 246.12 253.67 L 244.37 256 L 246.12 258.33 Z" fill="#ea6b66" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(661.5,145.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">dispatch</div></div></foreignObject><text x="21" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">dispatch</text></switch></g><rect x="758" y="364" width="120" height="60" fill="#f8cecc" stroke="#b85450" stroke-width="3" pointer-events="none"/><g transform="translate(768.5,387.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="98" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 99px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Visual Component</div></div></foreignObject><text x="49" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Visual Component</text></switch></g><path d="M 208 533 L 538 533 L 538 430.37" fill="none" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><path d="M 538 425.12 L 540.33 432.12 L 538 430.37 L 535.67 432.12 Z" fill="#ea6b66" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(344.5,527.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="68" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">state bindings</div></div></foreignObject><text x="34" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">state bindings</text></switch></g><path d="M 208 226 L 208 107.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 208 102.12 L 210.33 109.12 L 208 107.37 L 205.67 109.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(197.5,148.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="22" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">calls</div></div></foreignObject><text x="11" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">calls</text></switch></g><g transform="translate(427.5,196.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="105" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 106px; white-space: nowrap; word-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">USER INTERFACE</div></div></foreignObject><text x="53" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">USER INTERFACE</text></switch></g><g transform="translate(51.5,195.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="42" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 43px; white-space: nowrap; word-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">REDUX</div></div></foreignObject><text x="21" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">REDUX</text></switch></g><path d="M 208 522 L 338 522 L 338 409 L 431.63 409" fill="none" stroke="#9999ff" stroke-miterlimit="10" pointer-events="none"/><path d="M 436.88 409 L 429.88 411.33 L 431.63 409 L 429.88 406.67 Z" fill="#9999ff" stroke="#9999ff" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(309.5,474.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="56" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">router state</div></div></foreignObject><text x="28" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">router state</text></switch></g><path d="M 148 512 C 148 502.67 208 502.67 208 512 L 208 554 C 208 563.33 148 563.33 148 554 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><path d="M 148 512 C 148 519 208 519 208 512 M 148 515.5 C 148 522.5 208 522.5 208 515.5 M 148 519 C 148 526 208 526 208 519" fill="none" stroke="#d6b656" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(163.5,535.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="29" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 30px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Store</div></div></foreignObject><text x="15" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Store</text></switch></g><rect x="118" y="364.42" width="120" height="60" fill="#cdeb8b" stroke="#36393d" stroke-width="3" pointer-events="none"/><g transform="translate(152.5,387.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="51" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 52px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Reducers</div></div></foreignObject><text x="26" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Reducers</text></switch></g><rect x="118" y="226" width="120" height="60" fill="#ffff88" stroke="#36393d" stroke-width="3" pointer-events="none"/><g transform="translate(158.5,249.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="39" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 40px; white-space: nowrap; word-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Actions</div></div></foreignObject><text x="20" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Actions</text></switch></g><path d="M 178 424 L 178 498.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 178 503.88 L 175.67 496.88 L 178 498.63 L 180.33 496.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(157.5,453.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="47" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">new state</div></div></foreignObject><text x="24" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">new state</text></switch></g><path d="M 178 286 L 178 357.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 178 362.88 L 175.67 355.88 L 178 357.63 L 180.33 355.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(148.5,317.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="61" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">state update</div></div></foreignObject><text x="31" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">state update</text></switch></g><g transform="translate(452.5,238.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="51" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 52px; white-space: nowrap; word-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">ROUTER</div></div></foreignObject><text x="26" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">ROUTER</text></switch></g><path d="M 438 317 L 398 317 L 398 241 L 244.37 241" fill="none" stroke="#9999ff" stroke-miterlimit="10" pointer-events="none"/><path d="M 239.12 241 L 246.12 238.67 L 244.37 241 L 246.12 243.33 Z" fill="#9999ff" stroke="#9999ff" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(303.5,233.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">router actions</div></div></foreignObject><text x="34" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">router actions</text></switch></g><path d="M 238 271 L 368 271 L 368 394 L 471.63 394" fill="none" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><path d="M 476.88 394 L 469.88 396.33 L 471.63 394 L 469.88 391.67 Z" fill="#ea6b66" stroke="#ea6b66" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(331.5,323.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="73" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">action bindings</div></div></foreignObject><text x="37" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">action bindings</text></switch></g><g transform="translate(454.5,254.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="113" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; width: 114px; white-space: nowrap; word-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">manages active screen</div></div></foreignObject><text x="57" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">manages active screen</text></switch></g><g transform="translate(53.5,212.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="54" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(51, 0, 0); line-height: 1.2; vertical-align: top; width: 55px; white-space: nowrap; word-wrap: normal;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">state mgmt</div></div></foreignObject><text x="27" y="11" fill="#330000" text-anchor="middle" font-size="11px" font-family="Helvetica">state mgmt</text></switch></g></g></svg> \ No newline at end of file
diff --git a/README images/app-diagram.xml b/README images/app-diagram.xml
index f21af68f14..b8a41198ea 100644
--- a/README images/app-diagram.xml
+++ b/README images/app-diagram.xml
@@ -1 +1,2 @@
-<mxfile type="device" userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8" version="6.3.1" editor="www.draw.io"><diagram name="Page-1">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</diagram></mxfile> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<mxfile type="device" userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8" version="6.3.1" editor="www.draw.io"><diagram name="Page-1">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</diagram></mxfile> \ No newline at end of file