-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharchitecture.drawio
423 lines (423 loc) · 43.3 KB
/
architecture.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
<mxfile host="app.diagrams.net" modified="2022-06-21T21:02:14.163Z" agent="5.0 (X11)" etag="pD3xy8yAkDWSchpa3Bpq" version="20.0.2" type="github">
<diagram name="Page-1" id="5d7acffa-a066-3a61-03fe-96351882024d">
<mxGraphModel dx="1849" dy="1021" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="#ffffff" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="7b9wjgzVytWzGCj_lMZ8-112" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="720" y="30" width="1150" height="1330" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-114" value="Internal Module dependency graph. Generated with https://erkal.github.io/kite/ and graphviz2drawio." style="shape=note;size=20;whiteSpace=wrap;html=1;align=left;verticalAlign=top;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="-29.45" y="-29" width="1150" height="450" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-96" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Utils</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="134.71" y="216" width="66.58" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-98" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>UserInterfaces</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="314.11" y="144" width="159.78" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-63" style="rounded=1;html=1;exitX=0.199;exitY=0.9;entryX=1;entryY=0.101;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-98" target="7b9wjgzVytWzGCj_lMZ8-96" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="345.90000000000003" y="176.41" />
<mxPoint x="215" y="216" />
<mxPoint x="204.24" y="219.65" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-99" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>PortMessage</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="530.51" y="360" width="142.98" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-100" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>OperatingSystem</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="707.92" y="216" width="184.16" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-64" style="rounded=1;html=1;exitX=0.886;exitY=0.823;entryX=0.0828;entryY=0.104;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-98" target="7b9wjgzVytWzGCj_lMZ8-100" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-68" style="rounded=1;html=1;exitX=0.219;exitY=0.97;entryX=0.716;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-100" target="7b9wjgzVytWzGCj_lMZ8-99" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-101" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>MouseEvent</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="160.20999999999998" y="360" width="137.58" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-65" style="rounded=1;html=1;exitX=0.5;exitY=0.994;entryX=0.639;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-98" target="7b9wjgzVytWzGCj_lMZ8-101" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-102" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Message</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="394.01" y="288" width="103.98" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-66" style="rounded=1;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-98" target="7b9wjgzVytWzGCj_lMZ8-102" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-73" style="rounded=1;html=1;exitX=0.793;exitY=0.907;entryX=0.202;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-102" target="7b9wjgzVytWzGCj_lMZ8-99" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-69" style="rounded=1;html=1;exitX=0.161;exitY=0.871;entryX=1;entryY=0.176;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-100" target="7b9wjgzVytWzGCj_lMZ8-102" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-74" style="rounded=1;html=1;exitX=0.146;exitY=0.858;entryX=0.875;entryY=0.0103;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-102" target="7b9wjgzVytWzGCj_lMZ8-101" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-103" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Main</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="750" y="10" width="68.78" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-77" style="rounded=1;html=1;exitX=0;exitY=0.5;entryX=0.687;entryY=0.022;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-96" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="680" y="30" />
<mxPoint x="380" y="70" />
<mxPoint x="240" y="160" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-78" style="rounded=1;html=1;exitX=0.0301;exitY=0.687;entryX=0.943;entryY=0.124;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-98" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-79" style="rounded=1;html=1;exitX=0.5;exitY=1;entryX=0.571;entryY=-0.066;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;exitDx=0;exitDy=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-99" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="784" y="108" />
<mxPoint x="760" y="160" />
<mxPoint x="699" y="216" />
<mxPoint x="620" y="340" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-80" style="rounded=1;html=1;exitX=0.693;exitY=0.973;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-100" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="802.3" y="107.02999999999997" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-81" style="rounded=1;html=1;exitX=0;exitY=1;entryX=0.607;entryY=0;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;exitDx=0;exitDy=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-102" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="710" y="80" />
<mxPoint x="559" y="144" />
<mxPoint x="457.1" y="278.59000000000003" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-104" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Instrument</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="525.91" y="216" width="126.18" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-67" style="rounded=1;html=1;exitX=0.756;exitY=0.935;entryX=0.125;entryY=0.000556;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-98" target="7b9wjgzVytWzGCj_lMZ8-104" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-86" style="rounded=1;html=1;exitX=0.5;exitY=1;entryX=0.425;entryY=-0.012;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-104" target="7b9wjgzVytWzGCj_lMZ8-99" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="587.39" y="252.14999999999998" />
<mxPoint x="588" y="324" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-87" style="rounded=1;html=1;exitX=0.26;exitY=0.94;entryX=0.866;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-104" target="7b9wjgzVytWzGCj_lMZ8-102" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-82" style="rounded=1;html=1;exitX=0.322;exitY=0.976;entryX=0.953;entryY=0.101;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;exitDx=0;exitDy=0;exitPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-104" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="740" y="160" />
<mxPoint x="646.16" y="219.63" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-105" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Selectors</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="870.11" y="288" width="107.78" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-70" style="rounded=1;html=1;exitX=0.656;exitY=0.979;entryX=0.171;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-100" target="7b9wjgzVytWzGCj_lMZ8-105" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-84" style="rounded=1;html=1;exitX=0.757;exitY=0.934;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-105" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="820" y="110" />
<mxPoint x="901" y="216" />
<mxPoint x="920.3399999999999" y="277.76" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-88" style="rounded=1;html=1;exitX=0.915;exitY=0.779;entryX=0.0392;entryY=0.09;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-104" target="7b9wjgzVytWzGCj_lMZ8-105" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="641.38" y="244.06" />
<mxPoint x="861" y="288" />
<mxPoint x="874.3299999999999" y="291.24" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-106" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>KbdEvent</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="716.41" y="360" width="113.18" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-71" style="rounded=1;html=1;exitX=0.338;exitY=0.974;entryX=0.303;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-100" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="770.13" y="251.07" />
<mxPoint x="735" y="288" />
<mxPoint x="750.7199999999999" y="352.19" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-75" style="rounded=1;html=1;exitX=0.914;exitY=0.784;entryX=0.00928;entryY=0.142;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-102" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-85" style="rounded=1;html=1;exitX=0.856;exitY=0.857;entryX=1;entryY=0.277;jettySize=auto;curved=1;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="813.49" y="102.83999999999997" />
<mxPoint x="1090" y="320" />
<mxPoint x="835.9799999999999" y="369.96" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-89" style="rounded=1;html=1;exitX=0.664;exitY=0.972;entryX=0.247;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-104" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-93" style="rounded=1;html=1;exitX=0.22;exitY=0.917;entryX=0.853;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-105" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-107" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>KbdState</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="744.11" y="288" width="107.78" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-72" style="rounded=1;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-100" target="7b9wjgzVytWzGCj_lMZ8-107" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-94" style="rounded=1;html=1;exitX=0.5;exitY=0.999;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-107" target="7b9wjgzVytWzGCj_lMZ8-106" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-108" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>CommonTypes</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="353.91" y="360" width="158.18" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-76" style="rounded=1;html=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-102" target="7b9wjgzVytWzGCj_lMZ8-108" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-90" style="rounded=1;html=1;exitX=0.392;exitY=0.992;entryX=0.712;entryY=0;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-104" target="7b9wjgzVytWzGCj_lMZ8-108" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="575.41" y="251.7" />
<mxPoint x="507" y="324" />
<mxPoint x="466.59000000000003" y="355.12" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-109" value="<p style='margin:0px;text-align:center;margin-top:4px;;font-size:10.0px;font-family:Times,serif;color:#000000;'>Modely</p>" style="ellipse;verticalAlign=top;align=left;overflow=fill;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeColor=#000000;strokeWidth=1;fillColor=#ffffff;" parent="7b9wjgzVytWzGCj_lMZ8-112" vertex="1">
<mxGeometry x="1011.31" y="144" width="89.38" height="36" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-83" style="rounded=1;html=1;exitX=0.947;exitY=0.737;entryX=0;entryY=0.109;jettySize=auto;curved=0;endArrow=block;dashed=0;endFill=1;" parent="7b9wjgzVytWzGCj_lMZ8-112" source="7b9wjgzVytWzGCj_lMZ8-103" target="7b9wjgzVytWzGCj_lMZ8-109" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="860" y="80" />
<mxPoint x="997" y="144" />
<mxPoint x="1011.12" y="147.91" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-117" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="650" y="520" width="1240" height="870" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-116" value="Elm client data models" style="shape=note;size=20;whiteSpace=wrap;html=1;align=left;verticalAlign=top;" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1">
<mxGeometry width="1240" height="870" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-52" value="" style="group" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1" connectable="0">
<mxGeometry x="90" y="260.5" width="220" height="215" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-35" value="Main
" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;" parent="7b9wjgzVytWzGCj_lMZ8-52" vertex="1">
<mxGeometry width="220" height="215" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-1" value="Model" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="7b9wjgzVytWzGCj_lMZ8-52" vertex="1">
<mxGeometry x="40" y="62.5" width="140" height="90" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-2" value="instrument" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-1" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-5" value="os" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-1" vertex="1">
<mxGeometry y="60" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-46" value="" style="group" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1" connectable="0">
<mxGeometry x="410" y="510.5" width="720" height="245" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-37" value="Operating System" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;" parent="7b9wjgzVytWzGCj_lMZ8-46" vertex="1">
<mxGeometry width="720" height="245" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-10" value="Operating System" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="7b9wjgzVytWzGCj_lMZ8-46" vertex="1">
<mxGeometry x="60" y="45" width="170" height="150" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-11" value="App State" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-10" vertex="1">
<mxGeometry y="30" width="170" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-12" value="Epoch Time in Milliseconds" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-10" vertex="1">
<mxGeometry y="60" width="170" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-13" value="keyboard state" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-10" vertex="1">
<mxGeometry y="90" width="170" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-24" value="screen width" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-10" vertex="1">
<mxGeometry y="120" width="170" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-25" value="<div>Key Code</div>" style="shape=associativeEntity;whiteSpace=wrap;html=1;align=center;" parent="7b9wjgzVytWzGCj_lMZ8-46" vertex="1">
<mxGeometry x="320" y="100" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-26" value="Key State" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="7b9wjgzVytWzGCj_lMZ8-46" vertex="1">
<mxGeometry x="550" y="100" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-27" value="Last Pressed At" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-26" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-28" value="" style="edgeStyle=entityRelationEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToMany;endFill=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="7b9wjgzVytWzGCj_lMZ8-46" source="7b9wjgzVytWzGCj_lMZ8-13" target="7b9wjgzVytWzGCj_lMZ8-25" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="230" y="260" as="sourcePoint" />
<mxPoint x="330" y="160" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-29" value="" style="edgeStyle=entityRelationEdgeStyle;fontSize=12;html=1;endArrow=ERone;endFill=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="7b9wjgzVytWzGCj_lMZ8-46" source="7b9wjgzVytWzGCj_lMZ8-25" target="7b9wjgzVytWzGCj_lMZ8-26" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="480" y="330" as="sourcePoint" />
<mxPoint x="580" y="230" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-36" value="Instrument" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1">
<mxGeometry x="490" y="68" width="450" height="215" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-6" value="Voice" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1">
<mxGeometry x="770" y="100.5" width="140" height="150" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-7" value="Current Pitch" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-6" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-8" value="Current Volume" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-6" vertex="1">
<mxGeometry y="60" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-9" value="Last Note Start Time" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-6" vertex="1">
<mxGeometry y="90" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-14" value="notes" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-6" vertex="1">
<mxGeometry y="120" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-15" value="Model" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="7b9wjgzVytWzGCj_lMZ8-117" vertex="1">
<mxGeometry x="550" y="150.5" width="140" height="90" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-16" value="voices" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" parent="7b9wjgzVytWzGCj_lMZ8-15" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="DIiYUaTUwm1cWWpOMjRm-1" value="active chord" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="7b9wjgzVytWzGCj_lMZ8-15">
<mxGeometry y="60" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-20" value="" style="edgeStyle=entityRelationEdgeStyle;fontSize=12;html=1;endArrow=ERoneToMany;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=-0.007;entryY=0.113;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-117" source="7b9wjgzVytWzGCj_lMZ8-16" target="7b9wjgzVytWzGCj_lMZ8-6" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="640" y="400.5" as="sourcePoint" />
<mxPoint x="740" y="300.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-31" value="" style="edgeStyle=entityRelationEdgeStyle;fontSize=12;html=1;endArrow=ERzeroToOne;startArrow=ERmandOne;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="7b9wjgzVytWzGCj_lMZ8-117" source="7b9wjgzVytWzGCj_lMZ8-2" target="7b9wjgzVytWzGCj_lMZ8-15" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="480" y="360.5" as="sourcePoint" />
<mxPoint x="580" y="260.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-32" value="" style="edgeStyle=entityRelationEdgeStyle;fontSize=12;html=1;endArrow=ERmandOne;startArrow=ERmandOne;rounded=0;exitX=1.021;exitY=0.2;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="7b9wjgzVytWzGCj_lMZ8-117" source="7b9wjgzVytWzGCj_lMZ8-5" target="7b9wjgzVytWzGCj_lMZ8-10" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="410" y="530.5" as="sourcePoint" />
<mxPoint x="510" y="430.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-118" value="<div>Play Sound Data flow</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>Volume correlates with key press duration, pitch is context dependent but partially determined by key code, sound font id is context dependent<br></div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;align=left;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="570" y="1440" width="1370" height="810" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-132" value="Client" style="verticalAlign=top;align=left;spacingTop=8;spacingLeft=2;spacingRight=12;shape=cube;size=10;direction=south;fontStyle=4;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="610" y="1500" width="640" height="710" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-129" value="OperatingSystem" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="965" y="1540" width="220" height="170" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-131" value="Instrument" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="970" y="1820" width="220" height="170" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-134" value="" style="group;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1" connectable="0">
<mxGeometry x="650" y="1540" width="220" height="650" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-125" value="Main" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fillColor=#d5e8d4;strokeColor=#82b366;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry width="220" height="650" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-119" value="<div>KeyDown</div>" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;rounded=0;sketch=0;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="40" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-120" value="<div>KeyUp</div>" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="140" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-121" value="VisibilityChange" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="240" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-122" value="AnimationFrame" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="340" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-123" value="WindowResize" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="440" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-124" value="PortMessage" style="shape=callout;whiteSpace=wrap;html=1;perimeter=calloutPerimeter;" parent="7b9wjgzVytWzGCj_lMZ8-134" vertex="1">
<mxGeometry x="50" y="540" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-136" value="Server" style="verticalAlign=top;align=left;spacingTop=8;spacingLeft=2;spacingRight=12;shape=cube;size=10;direction=south;fontStyle=4;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1270" y="1500" width="640" height="710" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-1" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=25;entryPerimeter=0;curved=1;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-140" target="7b9wjgzVytWzGCj_lMZ8-124" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1820" y="1950" />
<mxPoint x="1820" y="2190" />
<mxPoint x="580" y="2190" />
<mxPoint x="580" y="2105" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-140" value="RoomChannel

room:{room_id}
" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1538" y="1860" width="225" height="180" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-141" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=120;exitDy=25;exitPerimeter=0;entryX=0.048;entryY=0.379;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-119" target="7b9wjgzVytWzGCj_lMZ8-129" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-6" value="KeyCode" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="7b9wjgzVytWzGCj_lMZ8-141" vertex="1" connectable="0">
<mxGeometry x="-0.2956" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-142" style="edgeStyle=orthogonalEdgeStyle;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=120;exitDy=25;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=10;entryDy=0;entryPerimeter=0;curved=1;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-120" target="7b9wjgzVytWzGCj_lMZ8-129" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-5" value="KeyCode" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="7b9wjgzVytWzGCj_lMZ8-142" vertex="1" connectable="0">
<mxGeometry x="0.4043" y="-11" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-147" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.038;entryY=0.303;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-144" target="7b9wjgzVytWzGCj_lMZ8-140" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-7" value="Voice, Pitch, Volume, SoundFontIdentity" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="7b9wjgzVytWzGCj_lMZ8-147" vertex="1" connectable="0">
<mxGeometry x="0.0491" y="-1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-144" value="playSound" style="shape=manualInput;whiteSpace=wrap;html=1;dashed=0;size=15;rounded=0;sketch=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="1890" width="100" height="50" as="geometry" />
</mxCell>
<mxCell id="7b9wjgzVytWzGCj_lMZ8-145" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=120;exitDy=25;exitPerimeter=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-120" target="7b9wjgzVytWzGCj_lMZ8-144" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-2" value="<div>KeyCode</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];rotation=0;" parent="7b9wjgzVytWzGCj_lMZ8-145" vertex="1" connectable="0">
<mxGeometry x="-0.1205" y="-1" relative="1" as="geometry">
<mxPoint x="51" y="128" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-3" style="edgeStyle=orthogonalEdgeStyle;curved=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;dashed=1;" parent="1" source="7b9wjgzVytWzGCj_lMZ8-129" target="7b9wjgzVytWzGCj_lMZ8-144" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="lVHipQg_HWDmXE6Zek-G-4" value="<div>Last Pressed At</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="lVHipQg_HWDmXE6Zek-G-3" vertex="1" connectable="0">
<mxGeometry x="-0.239" y="-2" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>