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
|
<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.2.2 Chrome/134.0.6998.178 Electron/35.1.2 Safari/537.36" version="26.2.2">
<diagram id="WOSjVCChJG0uuKkKcy1j" name="Page-1">
<mxGraphModel dx="3443" dy="1448" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="node5" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>AuthController</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ AuthController(AuthService): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ login(Map&lt;String, String&gt;): ResponseEntity&lt;String&gt;<br/>+ logout(String): ResponseEntity&lt;Object&gt;</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1898" y="952" width="342" height="129" as="geometry" />
</mxCell>
<mxCell id="node13" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>AuthService</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ AuthService(UserAuthDAO, UserService): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ login(String, String): String<br/>+ keyIsValid(String): void<br/>+ keyHasAccessToCupboard(String): void<br/>+ keyHasAccessToUser(String, String): void<br/>+ logout(String): void</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1337" y="930" width="285" height="190" as="geometry" />
</mxCell>
<mxCell id="node12" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>CupboardController</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ CupboardController(CupboardService, AuthService): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ createNeed(Map&lt;String, Object&gt;, String): ResponseEntity&lt;Object&gt;<br/>+ deleteNeed(int, String): ResponseEntity&lt;Object&gt;<br/>- of(Object[]): Object[]<br/>+ getNeed(int): ResponseEntity&lt;Object&gt;<br/>+ checkoutNeeds(List&lt;Map&lt;String, Integer&gt;&gt;, String): ResponseEntity&lt;Object&gt;<br/>+ searchNeeds(String): ResponseEntity&lt;Object&gt;<br/>+ updateNeed(Need, int, String): ResponseEntity&lt;Object&gt;</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> needs: ResponseEntity&lt;Object&gt;</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1771" y="395" width="492" height="235" as="geometry" />
</mxCell>
<mxCell id="node17" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;interface&gt;&gt;</i><br/><b>CupboardDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ deleteNeed(int): boolean<br/>+ getNeed(int): Need<br/>+ addNeed(Need): Need<br/>+ updateNeed(Need): Need</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> needs: Need[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-676" y="440" width="192" height="142" as="geometry" />
</mxCell>
<mxCell id="node2" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>CupboardFileDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ CupboardFileDAO(String, ObjectMapper): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">- needs: Map&lt;Integer, Need&gt;</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ getNeed(int): Need<br/>+ addNeed(Need): Need<br/>- save(): void<br/>+ deleteNeed(int): boolean<br/>- load(): void<br/>- nextId(): int<br/>+ updateNeed(Need): Need</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> needs: Need[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-342" y="383" width="286" height="267" as="geometry" />
</mxCell>
<mxCell id="node16" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>CupboardService</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ CupboardService(AuthService, CupboardDAO): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ checkoutNeed(int, double, String): void<br/>+ createNeed(String, String, String, double, GoalType, boolean, String): Need<br/>+ getNeed(int): Need<br/>+ deleteNeed(int): boolean<br/>+ searchNeeds(String): Need[]<br/>+ updateNeed(Need, int): Need</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> needs: Need[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1185" y="406" width="415" height="210" as="geometry" />
</mxCell>
<mxCell id="node19" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;enumeration&gt;&gt;</i><br/><b>GoalType</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ GoalType(): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ valueOf(String): GoalType<br/>+ values(): GoalType[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-598" y="-180" width="193" height="136" as="geometry" />
</mxCell>
<mxCell id="node9" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>Need</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ Need(String, String, String, double, GoalType, boolean, String): <br/>+ Need(Need): <br/>+ Need(String, String, String, int, double, GoalType, boolean, String): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">- name: String<br/>- type: GoalType<br/>- current: double<br/>- id: int<br/>- maxGoal: double<br/>- filterAttributes: String[]</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ toString(): String<br/>+ incrementCurrent(double): void</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> name: String<br/> id: int<br/> ID: int<br/> type: GoalType<br/> current: double<br/> maxGoal: double<br/> filterAttributes: String[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1173.5" y="-130" width="392" height="309" as="geometry" />
</mxCell>
<mxCell id="node10" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>User</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ User(String, int, List&lt;Integer&gt;, UserType): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">- type: UserType<br/>- username: String<br/>- basket: List&lt;Integer&gt;</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ addToBasket(Need): void<br/>+ withoutPasswordHash(): User<br/>+ verifyPassword(String): boolean<br/>+ create(String, String): User<br/>+ removeBasketNeed(Integer): void<br/>+ toString(): String<br/>+ copyPassword(User): void</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> type: UserType<br/> basket: Integer[]<br/> username: String</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-272" y="1640" width="293" height="320" as="geometry" />
</mxCell>
<mxCell id="node14" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UserAuth</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserAuth(String, String, LocalDateTime): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">~ key: String<br/>~ username: String<br/>~ expiration: LocalDateTime</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ generate(String): UserAuth</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> expiration: LocalDateTime<br/> key: String<br/> username: String</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-237" y="1011" width="282" height="179" as="geometry" />
</mxCell>
<mxCell id="node1" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;interface&gt;&gt;</i><br/><b>UserAuthDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ addUserAuth(UserAuth): void<br/>+ removeUserAuth(String): void<br/>+ getUserAuth(String): UserAuth</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-915" y="952" width="218" height="120" as="geometry" />
</mxCell>
<mxCell id="node3" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UserAuthFIleDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserAuthFIleDAO(ObjectMapper, String): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">- save(): void<br/>- load(): void<br/>+ addUserAuth(UserAuth): void<br/>+ getUserAuth(String): UserAuth<br/>+ removeUserAuth(String): void</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-598" y="930" width="283" height="164" as="geometry" />
</mxCell>
<mxCell id="node11" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UserController</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserController(UserService, AuthService): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ deleteUser(String, String): ResponseEntity&lt;Object&gt;<br/>+ getUserCount(String): ResponseEntity&lt;Object&gt;<br/>+ createUser(Map&lt;String, String&gt;): ResponseEntity&lt;Object&gt;<br/>- of(Object[]): Object[]<br/>+ getUser(String, String): ResponseEntity&lt;Object&gt;<br/>+ updateUser(User, String, String): ResponseEntity&lt;Object&gt;</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1898" y="1539" width="382" height="186" as="geometry" />
</mxCell>
<mxCell id="node4" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;interface&gt;&gt;</i><br/><b>UserDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ updateUser(User): User<br/>+ deleteUser(String): boolean<br/>+ getUser(String): User<br/>+ addUser(User): User</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> users: User[]<br/> userCount: int</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-915" y="1557" width="203" height="150" as="geometry" />
</mxCell>
<mxCell id="node0" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UserFileDAO</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserFileDAO(String, ObjectMapper): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">- users: Map&lt;String, User&gt;</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ addUser(User): User<br/>+ deleteUser(String): boolean<br/>+ updateUser(User): User<br/>- save(): void<br/>+ getUser(String): User<br/>- load(): void</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> users: User[]<br/> userCount: int</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-585" y="1509" width="257" height="246" as="geometry" />
</mxCell>
<mxCell id="node8" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UserService</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserService(UserDAO, CupboardService): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ updateUser(User, String): User<br/>+ deleteUser(String): boolean<br/>+ createUser(String, String): User<br/>+ getUser(String): User</p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;"> userCount: int</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="-1326" y="1549" width="289" height="166" as="geometry" />
</mxCell>
<mxCell id="node18" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;enumeration&gt;&gt;</i><br/><b>UserType</b></p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ UserType(): </p><hr size="1"/><p style="margin:0 0 0 4px;line-height:1.6;">+ valueOf(String): UserType<br/>+ values(): UserType[]</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;" parent="1" vertex="1">
<mxGeometry x="120" y="1750" width="194" height="139.5" as="geometry" />
</mxCell>
<mxCell id="edge8" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.331;exitDx=0;exitDy=0;entryX=0.000;entryY=0.399;entryDx=0;entryDy=0;" parent="1" source="node5" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1510" y="995" />
<mxPoint x="-1450" y="994" />
<mxPoint x="-1450" y="995" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label48" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge8" vertex="1" connectable="0">
<mxGeometry x="-1545" y="968" as="geometry" />
</mxCell>
<mxCell id="label52" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge8" vertex="1" connectable="0">
<mxGeometry x="-1360" y="990" as="geometry" />
</mxCell>
<mxCell id="edge9" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.500;exitDx=0;exitDy=0;entryX=0.000;entryY=0.500;entryDx=0;entryDy=0;" parent="1" source="node13" target="node1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="label54" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge9" vertex="1" connectable="0">
<mxGeometry x="-1008" y="1000" as="geometry" />
</mxCell>
<mxCell id="label58" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge9" vertex="1" connectable="0">
<mxGeometry x="-931" y="985" as="geometry" />
</mxCell>
<mxCell id="edge14" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.425;exitY=1.000;exitDx=0;exitDy=0;entryX=0.382;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node13" target="node8" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="label84" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge14" vertex="1" connectable="0">
<mxGeometry x="-1211" y="1090" as="geometry" />
</mxCell>
<mxCell id="label88" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge14" vertex="1" connectable="0">
<mxGeometry x="-1230" y="1520" as="geometry" />
</mxCell>
<mxCell id="edge18" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.342;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node12" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1525" y="885" />
<mxPoint x="-1239" y="885" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label108" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge18" vertex="1" connectable="0">
<mxGeometry x="-1525" y="632" as="geometry" />
</mxCell>
<mxCell id="label112" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge18" vertex="1" connectable="0">
<mxGeometry x="-1260" y="900" as="geometry" />
</mxCell>
<mxCell id="edge17" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.528;exitDx=0;exitDy=0;entryX=0.000;entryY=0.531;entryDx=0;entryDy=0;" parent="1" source="node12" target="node16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="label102" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge17" vertex="1" connectable="0">
<mxGeometry x="-1270" y="502" as="geometry" />
</mxCell>
<mxCell id="label106" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge17" vertex="1" connectable="0">
<mxGeometry x="-1217" y="502" as="geometry" />
</mxCell>
<mxCell id="edge0" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;" parent="1" source="node2" target="node17" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge5" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.576;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node2" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-199" y="293" />
<mxPoint x="-948" y="293" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge19" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThin;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.552;exitY=0.000;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;jumpStyle=none;startFill=1;" parent="1" source="node2" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-184" y="25" />
<mxPoint x="-510" y="25" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label114" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge19" vertex="1" connectable="0">
<mxGeometry x="-170" y="360" as="geometry" />
</mxCell>
<mxCell id="label118" value="*" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge19" vertex="1" connectable="0">
<mxGeometry x="-777" y="-40" as="geometry" />
</mxCell>
<mxCell id="edge22" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.500;entryY=0.000;entryDx=0;entryDy=0;" parent="1" source="node16" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-978" y="773" />
<mxPoint x="-1194" y="773" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label132" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge22" vertex="1" connectable="0">
<mxGeometry x="-989" y="630" as="geometry" />
</mxCell>
<mxCell id="label136" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge22" vertex="1" connectable="0">
<mxGeometry x="-1205" y="870" as="geometry" />
</mxCell>
<mxCell id="edge15" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.500;exitDx=0;exitDy=0;entryX=0.000;entryY=0.500;entryDx=0;entryDy=0;" parent="1" source="node16" target="node17" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="label90" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge15" vertex="1" connectable="0">
<mxGeometry x="-760" y="511" as="geometry" />
</mxCell>
<mxCell id="label94" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge15" vertex="1" connectable="0">
<mxGeometry x="-703" y="491" as="geometry" />
</mxCell>
<mxCell id="edge23" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node16" target="node9" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge16" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.319;exitDx=0;exitDy=0;entryX=0.000;entryY=0.653;entryDx=0;entryDy=0;" parent="1" source="node9" target="node19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge24" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.998;exitY=0.533;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="node10" target="node18" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="80" y="1816" />
<mxPoint x="80" y="1820" />
</Array>
<mxPoint x="110" y="1823" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="label144" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge24" vertex="1" connectable="0">
<mxGeometry x="30" y="1820" as="geometry" />
</mxCell>
<mxCell id="label148" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge24" vertex="1" connectable="0">
<mxGeometry x="100" y="1790" as="geometry" />
</mxCell>
<mxCell id="edge21" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0;entryY=0.596;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="node3" target="node14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-457" y="1117" />
<mxPoint x="-310" y="1117" />
<mxPoint x="-310" y="1118" />
</Array>
<mxPoint x="-270" y="1120" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="label126" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge21" vertex="1" connectable="0">
<mxGeometry x="-456" y="1091" as="geometry" />
</mxCell>
<mxCell id="label130" value="*" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge21" vertex="1" connectable="0">
<mxGeometry x="-251" y="1103" as="geometry" />
</mxCell>
<mxCell id="edge2" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;jumpStyle=none;" parent="1" source="node3" target="node1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge7" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.987;exitY=0.000;exitDx=0;exitDy=0;entryX=0.000;entryY=0.741;entryDx=0;entryDy=0;" parent="1" source="node11" target="node13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1521" y="1070" />
<mxPoint x="-1337" y="1070" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label42" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge7" vertex="1" connectable="0">
<mxGeometry x="-1532" y="1510" as="geometry" />
</mxCell>
<mxCell id="label46" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge7" vertex="1" connectable="0">
<mxGeometry x="-1360" y="1060" as="geometry" />
</mxCell>
<mxCell id="edge13" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1.000;exitY=0.515;exitDx=0;exitDy=0;" parent="1" source="node11" target="node8" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1370" y="1635" />
<mxPoint x="-1370" y="1635" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label78" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge13" vertex="1" connectable="0">
<mxGeometry x="-1495" y="1614" as="geometry" />
</mxCell>
<mxCell id="label82" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge13" vertex="1" connectable="0">
<mxGeometry x="-1363" y="1636" as="geometry" />
</mxCell>
<mxCell id="edge6" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=1.000;exitDx=0;exitDy=0;entryX=0.005;entryY=0.466;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="node0" target="node10" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-456" y="1790" />
<mxPoint x="-440" y="1790" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label36" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge6" vertex="1" connectable="0">
<mxGeometry x="-470" y="1760" as="geometry" />
</mxCell>
<mxCell id="label40" value="*" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge6" vertex="1" connectable="0">
<mxGeometry x="-290" y="1770" as="geometry" />
</mxCell>
<mxCell id="label41" value="" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge6" vertex="1" connectable="0">
<mxGeometry x="-367" y="1797" as="geometry" />
</mxCell>
<mxCell id="edge1" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;exitX=0.000;exitY=0.500;exitDx=0;exitDy=0;entryX=1.000;entryY=0.500;entryDx=0;entryDy=0;" parent="1" source="node0" target="node4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge12" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.536;entryY=1.000;entryDx=0;entryDy=0;" parent="1" source="node8" target="node16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1181" y="1286" />
<mxPoint x="-963" y="1286" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="label72" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge12" vertex="1" connectable="0">
<mxGeometry x="-1192" y="1524" as="geometry" />
</mxCell>
<mxCell id="label76" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge12" vertex="1" connectable="0">
<mxGeometry x="-950" y="621" as="geometry" />
</mxCell>
<mxCell id="edge20" value="" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=diamondThinstartSize=12;endArrow=openThin;endSize=12;strokeColor=#595959;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="node8" target="node4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="label120" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge20" vertex="1" connectable="0">
<mxGeometry x="-1030" y="1630" as="geometry" />
</mxCell>
<mxCell id="label124" value="1" style="edgeLabel;resizable=0;html=1;align=left;verticalAlign=top;strokeColor=default;" parent="edge20" vertex="1" connectable="0">
<mxGeometry x="-940" y="1610" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
|