├── .gitignore
├── README.md
├── assets
├── first-cti-pss-circl.pdf
└── firstcti2024.png
├── doc
└── diagram
│ ├── pss-overview.excalidraw
│ ├── pss-overview.png
│ ├── pss-overview.svg
│ └── pss-tor-safe-browsing
│ ├── PSS-tor-safe-browsing.excalidraw
│ └── PSS-tor-safe-browsing.png
├── private_search_set
├── README.md
├── __init__.py
├── bloom_filter_base.py
├── bloom_filter_dcso.py
├── cli.py
└── main.py
├── setup.py
└── tests
├── __init__.py
├── test_main.py
└── word_list.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | # Ignore compiled Python files
2 | *.pyc
3 |
4 | # Ignore virtual environment
5 | venv/
6 |
7 | # Ignore IDE files
8 | .vscode/
9 | .idea/
10 |
11 | # Ignore package build directory
12 | dist/
13 | *.egg-info/
14 |
15 | # Ignore cache and log files
16 | __pycache__/
17 | *.log
18 |
19 | # Ignore environment-specific files
20 | .env
21 | .env.*
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Private Search Set (PSS)
2 |
3 | Private Search Set (PSS) is an extension to [standard Bloom filter](https://github.com/hashlookup/fleur) or a standalone hash file to describe and share private set.
4 |
5 | 
6 |
7 | ## FIRST CTI 2024 presentation
8 |
9 | [](https://www.youtube.com/watch?v=Ns-0XhDrQyw)
10 |
11 | [slides](https://raw.githubusercontent.com/hashlookup/private-search-set/main/assets/first-cti-pss-circl.pdf)
12 |
13 | ## Abstract
14 |
15 | The Private Search Set (PSS) is an extension to the standard Bloom filter or a standalone hash file to describe and share private set. It provides features such as fast lookup of values without disclosing the values, easy distribution of private sets to a group of users or organizations, watermarking and tracking down potential leak of a private search set (PSS), offline private search, and flexible meta-format to describe and extend the private search set (PSS).
16 |
17 | ## Features
18 |
19 | - Fast lookup of values (such as indicators, hashes or any text) without disclosing the values
20 | - Easily distribute private sets to a group of users or organisations
21 | - Watermarking and tracking down potential leak of a private search set (PSS)
22 | - Offline private search
23 | - Flexible meta-format to describe and extend the private search set (PSS)
24 |
25 | ## Use-cases
26 |
27 | - Improved privacy and security for users and organisations willing to participate in information sharing communities
28 | - Reduced risk of data breaches and leaks of cyber threat intelligence
29 | - Increased ability to protect sensitive information or information which could be abused such as CSAM (Child Sexual Abuse Material) or personal information leak
30 | - Enhanced ability to share information with trusted parties without compromising privacy
31 |
32 | ## Overview of creation and lookup of PSS
33 |
34 | ~~~~mermaid
35 | flowchart TD
36 | Y["canonize(foobar.onion)"] --> A
37 | A["insert keyhashed(foobar.onion)"] -->|key, Blake2| B[key-hashed]
38 | B --> |insert| C[Distributed PSS file]
39 | B --> |insert| D[Distributed PSS Bloomfilter]
40 | style B fill:#0f0,stroke:#333,stroke-width:4px
41 | style Y fill:#0f0,stroke:#333,stroke-width:4px
42 | style A fill:#0f0,stroke:#333,stroke-width:4px
43 | style Z fill:#fff,stroke:#333,stroke-width:4px
44 | Z["search keyhashed(canonized foobar.onion)"] -->|search| C
45 | Z["search keyhashed(canonized foobar.onion)"] -->|search| D
46 | ~~~~
47 |
48 | ## Meta format
49 |
50 | |Key name|Type|Description|Required|
51 | |:-------|:----|:---|:---:|
52 | |`version`|`number`|Version of the Private Search Set (PSS).|✓|
53 | |`name`|`string`|A concise name used for the directory name.|✓|
54 | |`description`|`string`|Human readable description of the set.|✓|
55 | |`generated-timestamp`|`number`|Generation timestamp in epoch format. |✓|
56 | |`algorithm`|`string`|Keyed-hash message authentication. Available:
- Blake2b
- Blake3
- HMAC-SHA-256
- HMAC-SHA-512 |✓|
57 | |`keyid`|`string`|The reference to the key used in the keyed-hash message authentication algorithm. If the default value is used, then the private shared key `infected`.|✓|
58 | |`filter`|`hash`|The filter description along with its type, format and model.|✓|
59 | |`misp-attribute-types`|`array`|Array of `string` with the types covered by the private search set. Types can be any from types [mentioned in the default MISP types](https://www.circl.lu/doc/misp/categories-and-types/#types). If not specified, `text` type is covered.|-|
60 | |`misp-object-template`|`array`|Array of `string` with the object template name and the version separated with a semicolon such as `person:19`.|-|
61 | |`canonicalization-format`|`string`|Meta function used expressed in Python functions. Such as `lower()[:10]`|-|
62 | |`openpgp-encrypted-key`|`string`|Base64 OpenPGP message encrypting the reference `keyid`. This is optional as the key can be distributed in different means such as dedicated MISP API key or other secure channel.|-|
63 |
64 | ### Meta format `format`
65 |
66 | #### Format type `bloomfilter`
67 |
68 | |Key name|Type|Description|Required|
69 | |:-------|:----|:---|:---:|
70 | |`capacity`|`number`|Capacity of the BloomFilter|✓|
71 | |`fp-probability`|`number`|Probability of false-positive|✓|
72 | |`format`|`string`|Format of the BloomFilter such as `dcso-v1` or `poppy-v2`|✓|
73 | |`match-count`|`number`|Number of count match to confirm if it's a positive match. Default is `1`.|‐|
74 |
75 | ##### List of known `bloomfilter` format
76 |
77 | |Name|Description|
78 | |:-------|:----|
79 | |`dcso-v1`|[DCSO BloomFilter](https://github.com/DCSO/bloom) using 64-bit FNV-1 hash function.|
80 | |`poppy-v2`|[Poppy](https://github.com/hashlookup/poppy) using 64-bit with wyHash.|
81 |
82 | #### Format type `misp-feed-cache`
83 |
84 | ### Sample
85 |
86 | ~~~~json
87 | {
88 | "algorithm": "Blake2",
89 | "format": [
90 | {
91 | "bloomfilter": {
92 | "capacity": 10000,
93 | "format": "dcso-v1",
94 | "fp-probability": 0.001
95 | }
96 | },
97 | {
98 | "misp-feed-cache": {}
99 | }
100 | ],
101 | "canonicalization-format": ".lower",
102 | "description": "List of Tor hidden services containing child sexual abuse material (CSAM).",
103 | "generated-timestamp": 1700731642,
104 | "keyid": "tor-csam-lea",
105 | "misp-attribute-types": [
106 | "text",
107 | "url",
108 | "link"
109 | ],
110 | "version": 1
111 | }
112 |
113 | ~~~~
114 |
115 | ### Feed format
116 |
117 | The feed format is composed of a directory with the following structure:
118 |
119 | - `private-search-set.pss` - Private search as a standalone file. `OneOfrequired`
120 | - `private-search-set.json` - Meta data of the private search file. `required`
121 | - `private-search-set.bloom` - Bloomfilter file of the pss set. `OneOfrequired`
122 |
123 | Those two files can be included in a MISP feed format export. The feed can contain a single Bloom filter set along with meta-data or a hash list file with the hash values or even both files with the meta-data.
124 |
125 | ### MISP Object template
126 |
127 | A private-search-set MISP oject template will be created to be able to share PSS via MISP.
128 |
129 |
--------------------------------------------------------------------------------
/assets/first-cti-pss-circl.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/assets/first-cti-pss-circl.pdf
--------------------------------------------------------------------------------
/assets/firstcti2024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/assets/firstcti2024.png
--------------------------------------------------------------------------------
/doc/diagram/pss-overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/doc/diagram/pss-overview.png
--------------------------------------------------------------------------------
/doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.excalidraw:
--------------------------------------------------------------------------------
1 | {
2 | "type": "excalidraw",
3 | "version": 2,
4 | "source": "https://excalidraw.com",
5 | "elements": [
6 | {
7 | "id": "XxDeHtNvBATUfDa7hb7TP",
8 | "type": "arrow",
9 | "x": 814.8916625976562,
10 | "y": 735.5,
11 | "width": 232,
12 | "height": 86,
13 | "angle": 0,
14 | "strokeColor": "#1e1e1e",
15 | "backgroundColor": "#ffffff",
16 | "fillStyle": "solid",
17 | "strokeWidth": 2,
18 | "strokeStyle": "solid",
19 | "roughness": 1,
20 | "opacity": 100,
21 | "groupIds": [],
22 | "frameId": null,
23 | "roundness": {
24 | "type": 2
25 | },
26 | "seed": 1612627328,
27 | "version": 166,
28 | "versionNonce": 601221760,
29 | "isDeleted": false,
30 | "boundElements": null,
31 | "updated": 1712910507714,
32 | "link": null,
33 | "locked": false,
34 | "points": [
35 | [
36 | 0,
37 | 0
38 | ],
39 | [
40 | -140,
41 | -20
42 | ],
43 | [
44 | -232,
45 | -86
46 | ]
47 | ],
48 | "lastCommittedPoint": null,
49 | "startBinding": null,
50 | "endBinding": null,
51 | "startArrowhead": null,
52 | "endArrowhead": "arrow"
53 | },
54 | {
55 | "type": "line",
56 | "version": 1453,
57 | "versionNonce": 122985856,
58 | "isDeleted": false,
59 | "id": "WOachrRHmD3L-LYK9_5Y6",
60 | "fillStyle": "solid",
61 | "strokeWidth": 2,
62 | "strokeStyle": "solid",
63 | "roughness": 1,
64 | "opacity": 100,
65 | "angle": 0,
66 | "x": 531.2135586478712,
67 | "y": 697.8612748916881,
68 | "strokeColor": "#000000",
69 | "backgroundColor": "#fa5252",
70 | "width": 54.65645735125227,
71 | "height": 49.427311113762016,
72 | "seed": 19461553,
73 | "groupIds": [
74 | "zsVDcUmxfxNvQ39p_Qbl3"
75 | ],
76 | "frameId": null,
77 | "roundness": {
78 | "type": 2
79 | },
80 | "boundElements": [],
81 | "updated": 1712910231592,
82 | "link": null,
83 | "locked": false,
84 | "startBinding": null,
85 | "endBinding": null,
86 | "lastCommittedPoint": null,
87 | "startArrowhead": null,
88 | "endArrowhead": null,
89 | "points": [
90 | [
91 | 0,
92 | 0
93 | ],
94 | [
95 | 27.328228675626136,
96 | 0
97 | ],
98 | [
99 | 27.328228675626136,
100 | -29.942577279799533
101 | ],
102 | [
103 | 19.36291719077515,
104 | -42.38165601765725
105 | ],
106 | [
107 | 1.3584014185758928,
108 | -49.427311113762016
109 | ],
110 | [
111 | -19.541683683918148,
112 | -41.55501884612003
113 | ],
114 | [
115 | -26.608029873842145,
116 | -28.592972329645455
117 | ],
118 | [
119 | -27.328228675626136,
120 | 0
121 | ],
122 | [
123 | 0,
124 | 0
125 | ]
126 | ]
127 | },
128 | {
129 | "type": "rectangle",
130 | "version": 1029,
131 | "versionNonce": 1038413184,
132 | "isDeleted": false,
133 | "id": "uT2GWoD48tf6epHLThsca",
134 | "fillStyle": "solid",
135 | "strokeWidth": 2,
136 | "strokeStyle": "solid",
137 | "roughness": 1,
138 | "opacity": 100,
139 | "angle": 0,
140 | "x": 494.3340767791122,
141 | "y": 669.2137917534682,
142 | "strokeColor": "#000000",
143 | "backgroundColor": "#ced4da",
144 | "width": 73.43160549707883,
145 | "height": 48.95440366471922,
146 | "seed": 1086396305,
147 | "groupIds": [
148 | "imAbhCwxx6lWb68zntQwg",
149 | "zsVDcUmxfxNvQ39p_Qbl3"
150 | ],
151 | "frameId": null,
152 | "roundness": null,
153 | "boundElements": [],
154 | "updated": 1712910231592,
155 | "link": null,
156 | "locked": false
157 | },
158 | {
159 | "type": "ellipse",
160 | "version": 745,
161 | "versionNonce": 1575697792,
162 | "isDeleted": false,
163 | "id": "_HOu4dJmhsOEFo3d87OtX",
164 | "fillStyle": "solid",
165 | "strokeWidth": 2,
166 | "strokeStyle": "solid",
167 | "roughness": 1,
168 | "opacity": 100,
169 | "angle": 0,
170 | "x": 526.9733960773451,
171 | "y": 689.6145101355212,
172 | "strokeColor": "#000000",
173 | "backgroundColor": "#ffffff",
174 | "width": 8.152966900613066,
175 | "height": 8.152966900613066,
176 | "seed": 12189041,
177 | "groupIds": [
178 | "imAbhCwxx6lWb68zntQwg",
179 | "zsVDcUmxfxNvQ39p_Qbl3"
180 | ],
181 | "frameId": null,
182 | "roundness": null,
183 | "boundElements": [],
184 | "updated": 1712910231592,
185 | "link": null,
186 | "locked": false
187 | },
188 | {
189 | "type": "line",
190 | "version": 2095,
191 | "versionNonce": 1218940288,
192 | "isDeleted": false,
193 | "id": "AA4Jcxvqp--Oq5rxEBbv5",
194 | "fillStyle": "solid",
195 | "strokeWidth": 2,
196 | "strokeStyle": "solid",
197 | "roughness": 1,
198 | "opacity": 100,
199 | "angle": 0,
200 | "x": 494.0857275279563,
201 | "y": 714.0695227740624,
202 | "strokeColor": "#000000",
203 | "backgroundColor": "#ced4da",
204 | "width": 83.49394657419327,
205 | "height": 7.473670898671887,
206 | "seed": 5973841,
207 | "groupIds": [
208 | "imAbhCwxx6lWb68zntQwg",
209 | "zsVDcUmxfxNvQ39p_Qbl3"
210 | ],
211 | "frameId": null,
212 | "roundness": {
213 | "type": 2
214 | },
215 | "boundElements": [],
216 | "updated": 1712910231592,
217 | "link": null,
218 | "locked": false,
219 | "startBinding": null,
220 | "endBinding": null,
221 | "lastCommittedPoint": null,
222 | "startArrowhead": null,
223 | "endArrowhead": null,
224 | "points": [
225 | [
226 | 0,
227 | 0
228 | ],
229 | [
230 | -4.98515929759198,
231 | 1.9251768794252322
232 | ],
233 | [
234 | 1.687952724409015,
235 | 5.1419880118885715
236 | ],
237 | [
238 | 71.78898891715771,
239 | 6.574859317330791
240 | ],
241 | [
242 | 78.5087872766013,
243 | 2.6963597159786614
244 | ],
245 | [
246 | 73.23386934933681,
247 | -0.8988115813410963
248 | ],
249 | [
250 | 0,
251 | 0
252 | ]
253 | ]
254 | },
255 | {
256 | "type": "ellipse",
257 | "version": 928,
258 | "versionNonce": 928636288,
259 | "isDeleted": false,
260 | "id": "O1Ri10TXZKR2AoxJ4WpnT",
261 | "fillStyle": "solid",
262 | "strokeWidth": 2,
263 | "strokeStyle": "solid",
264 | "roughness": 1,
265 | "opacity": 100,
266 | "angle": 0,
267 | "x": 507.01045539858205,
268 | "y": 603.5334147076572,
269 | "strokeColor": "#000000",
270 | "backgroundColor": "#ffffff",
271 | "width": 48.95440366471922,
272 | "height": 48.95440366471922,
273 | "seed": 704386353,
274 | "groupIds": [
275 | "FqtM5aEYSYho4QyOeI_OH",
276 | "zsVDcUmxfxNvQ39p_Qbl3"
277 | ],
278 | "frameId": null,
279 | "roundness": null,
280 | "boundElements": [],
281 | "updated": 1712910231592,
282 | "link": null,
283 | "locked": false
284 | },
285 | {
286 | "type": "line",
287 | "version": 1176,
288 | "versionNonce": 994192768,
289 | "isDeleted": false,
290 | "id": "dbX8FIQ3qXXFZVf6444oK",
291 | "fillStyle": "solid",
292 | "strokeWidth": 2,
293 | "strokeStyle": "solid",
294 | "roughness": 1,
295 | "opacity": 100,
296 | "angle": 6.228364428824993,
297 | "x": 514.8263768034508,
298 | "y": 627.1002321049381,
299 | "strokeColor": "#000000",
300 | "backgroundColor": "#ffffff",
301 | "width": 10.651180151949859,
302 | "height": 6.847128326549817,
303 | "seed": 822363921,
304 | "groupIds": [
305 | "FqtM5aEYSYho4QyOeI_OH",
306 | "zsVDcUmxfxNvQ39p_Qbl3"
307 | ],
308 | "frameId": null,
309 | "roundness": {
310 | "type": 2
311 | },
312 | "boundElements": [],
313 | "updated": 1712910231592,
314 | "link": null,
315 | "locked": false,
316 | "startBinding": null,
317 | "endBinding": null,
318 | "lastCommittedPoint": null,
319 | "startArrowhead": null,
320 | "endArrowhead": null,
321 | "points": [
322 | [
323 | 0,
324 | 0
325 | ],
326 | [
327 | 1.7300637594256403,
328 | -4.197246012243889
329 | ],
330 | [
331 | 5.8723596935509175,
332 | -6.847128326549817
333 | ],
334 | [
335 | 8.94509772086767,
336 | -4.528977346204915
337 | ],
338 | [
339 | 10.651180151949859,
340 | -0.8377747112548665
341 | ]
342 | ]
343 | },
344 | {
345 | "type": "line",
346 | "version": 1239,
347 | "versionNonce": 1033928064,
348 | "isDeleted": false,
349 | "id": "fxeyP0vQclw7tzfVgZe29",
350 | "fillStyle": "solid",
351 | "strokeWidth": 2,
352 | "strokeStyle": "solid",
353 | "roughness": 1,
354 | "opacity": 100,
355 | "angle": 6.228364428824993,
356 | "x": 535.5525974805289,
357 | "y": 627.2843723716351,
358 | "strokeColor": "#000000",
359 | "backgroundColor": "#ffffff",
360 | "width": 10.651180151949859,
361 | "height": 6.847128326549817,
362 | "seed": 1877687537,
363 | "groupIds": [
364 | "FqtM5aEYSYho4QyOeI_OH",
365 | "zsVDcUmxfxNvQ39p_Qbl3"
366 | ],
367 | "frameId": null,
368 | "roundness": {
369 | "type": 2
370 | },
371 | "boundElements": [],
372 | "updated": 1712910231592,
373 | "link": null,
374 | "locked": false,
375 | "startBinding": null,
376 | "endBinding": null,
377 | "lastCommittedPoint": null,
378 | "startArrowhead": null,
379 | "endArrowhead": null,
380 | "points": [
381 | [
382 | 0,
383 | 0
384 | ],
385 | [
386 | 1.7300637594256403,
387 | -4.197246012243889
388 | ],
389 | [
390 | 5.8723596935509175,
391 | -6.847128326549817
392 | ],
393 | [
394 | 8.94509772086767,
395 | -4.528977346204915
396 | ],
397 | [
398 | 10.651180151949859,
399 | -0.8377747112548665
400 | ]
401 | ]
402 | },
403 | {
404 | "type": "line",
405 | "version": 1130,
406 | "versionNonce": 2142555520,
407 | "isDeleted": false,
408 | "id": "U1WF5EGFwuPTxvJLuA-ho",
409 | "fillStyle": "solid",
410 | "strokeWidth": 2,
411 | "strokeStyle": "solid",
412 | "roughness": 1,
413 | "opacity": 100,
414 | "angle": 0,
415 | "x": 519.9316623910681,
416 | "y": 637.2863277214279,
417 | "strokeColor": "#000000",
418 | "backgroundColor": "#ffffff",
419 | "width": 20.1816183679401,
420 | "height": 3.885234146418453,
421 | "seed": 104363729,
422 | "groupIds": [
423 | "FqtM5aEYSYho4QyOeI_OH",
424 | "zsVDcUmxfxNvQ39p_Qbl3"
425 | ],
426 | "frameId": null,
427 | "roundness": {
428 | "type": 2
429 | },
430 | "boundElements": [],
431 | "updated": 1712910231592,
432 | "link": null,
433 | "locked": false,
434 | "startBinding": null,
435 | "endBinding": null,
436 | "lastCommittedPoint": null,
437 | "startArrowhead": null,
438 | "endArrowhead": null,
439 | "points": [
440 | [
441 | 0,
442 | 0
443 | ],
444 | [
445 | 9.615848471651368,
446 | 3.885234146418453
447 | ],
448 | [
449 | 20.1816183679401,
450 | 1.170774363360044
451 | ]
452 | ]
453 | },
454 | {
455 | "type": "line",
456 | "version": 957,
457 | "versionNonce": 448732544,
458 | "isDeleted": false,
459 | "id": "IwhKGES-gvWBMM0B_lunP",
460 | "fillStyle": "solid",
461 | "strokeWidth": 2,
462 | "strokeStyle": "solid",
463 | "roughness": 1,
464 | "opacity": 100,
465 | "angle": 0,
466 | "x": 530.5494911836574,
467 | "y": 601.5804260716045,
468 | "strokeColor": "#000000",
469 | "backgroundColor": "#ffffff",
470 | "width": 8.515145651124511,
471 | "height": 3.947472929886246,
472 | "seed": 914584753,
473 | "groupIds": [
474 | "FqtM5aEYSYho4QyOeI_OH",
475 | "zsVDcUmxfxNvQ39p_Qbl3"
476 | ],
477 | "frameId": null,
478 | "roundness": {
479 | "type": 2
480 | },
481 | "boundElements": [],
482 | "updated": 1712910231592,
483 | "link": null,
484 | "locked": false,
485 | "startBinding": null,
486 | "endBinding": null,
487 | "lastCommittedPoint": null,
488 | "startArrowhead": null,
489 | "endArrowhead": null,
490 | "points": [
491 | [
492 | 0,
493 | 0
494 | ],
495 | [
496 | -8.515145651124511,
497 | -3.947472929886246
498 | ]
499 | ]
500 | },
501 | {
502 | "type": "line",
503 | "version": 1016,
504 | "versionNonce": 2147446144,
505 | "isDeleted": false,
506 | "id": "UeajE_XvlMOk5j4DFZWWK",
507 | "fillStyle": "solid",
508 | "strokeWidth": 2,
509 | "strokeStyle": "solid",
510 | "roughness": 1,
511 | "opacity": 100,
512 | "angle": 0,
513 | "x": 532.2500179144015,
514 | "y": 601.0333374292196,
515 | "strokeColor": "#000000",
516 | "backgroundColor": "#ffffff",
517 | "width": 15.029383260869983,
518 | "height": 1.4584180249026597,
519 | "seed": 74692241,
520 | "groupIds": [
521 | "FqtM5aEYSYho4QyOeI_OH",
522 | "zsVDcUmxfxNvQ39p_Qbl3"
523 | ],
524 | "frameId": null,
525 | "roundness": {
526 | "type": 2
527 | },
528 | "boundElements": [],
529 | "updated": 1712910231592,
530 | "link": null,
531 | "locked": false,
532 | "startBinding": null,
533 | "endBinding": null,
534 | "lastCommittedPoint": null,
535 | "startArrowhead": null,
536 | "endArrowhead": null,
537 | "points": [
538 | [
539 | 0,
540 | 0
541 | ],
542 | [
543 | 6.15542029137036,
544 | -1.4003321663419646
545 | ],
546 | [
547 | 15.029383260869983,
548 | -1.4584180249026597
549 | ]
550 | ]
551 | },
552 | {
553 | "type": "line",
554 | "version": 995,
555 | "versionNonce": 2025176448,
556 | "isDeleted": false,
557 | "id": "MxMgw-wmxTmwqwfNYS_Xc",
558 | "fillStyle": "solid",
559 | "strokeWidth": 2,
560 | "strokeStyle": "solid",
561 | "roughness": 1,
562 | "opacity": 100,
563 | "angle": 0,
564 | "x": 529.1940559233951,
565 | "y": 602.5171918468393,
566 | "strokeColor": "#000000",
567 | "backgroundColor": "#ffffff",
568 | "width": 16.03666130004024,
569 | "height": 1.299870475802369,
570 | "seed": 314621041,
571 | "groupIds": [
572 | "FqtM5aEYSYho4QyOeI_OH",
573 | "zsVDcUmxfxNvQ39p_Qbl3"
574 | ],
575 | "frameId": null,
576 | "roundness": {
577 | "type": 2
578 | },
579 | "boundElements": [],
580 | "updated": 1712910231592,
581 | "link": null,
582 | "locked": false,
583 | "startBinding": null,
584 | "endBinding": null,
585 | "lastCommittedPoint": null,
586 | "startArrowhead": null,
587 | "endArrowhead": null,
588 | "points": [
589 | [
590 | 0,
591 | 0
592 | ],
593 | [
594 | -9.399855914802584,
595 | -0.6467955669126702
596 | ],
597 | [
598 | -16.03666130004024,
599 | 0.6530749088896988
600 | ]
601 | ]
602 | },
603 | {
604 | "type": "rectangle",
605 | "version": 1736,
606 | "versionNonce": 481938816,
607 | "isDeleted": false,
608 | "id": "jslh0O8sPlqEClZq7LKt7",
609 | "fillStyle": "solid",
610 | "strokeWidth": 4,
611 | "strokeStyle": "solid",
612 | "roughness": 0,
613 | "opacity": 100,
614 | "angle": 5.5800832337787245,
615 | "x": 1241.7134140715443,
616 | "y": 614.718158659573,
617 | "strokeColor": "#000",
618 | "backgroundColor": "#8da7b6",
619 | "width": 5.57943037374849,
620 | "height": 23.023186577208644,
621 | "seed": 1077315199,
622 | "groupIds": [
623 | "5voitlDDXgNwFzlxQJ1Mv"
624 | ],
625 | "frameId": null,
626 | "roundness": {
627 | "type": 1
628 | },
629 | "boundElements": [],
630 | "updated": 1712910328771,
631 | "link": null,
632 | "locked": false
633 | },
634 | {
635 | "type": "ellipse",
636 | "version": 1351,
637 | "versionNonce": 1327766912,
638 | "isDeleted": false,
639 | "id": "Znr3cV_uxGagjAwiN9smI",
640 | "fillStyle": "solid",
641 | "strokeWidth": 4,
642 | "strokeStyle": "solid",
643 | "roughness": 0,
644 | "opacity": 100,
645 | "angle": 0,
646 | "x": 1218.9495185445949,
647 | "y": 598.4559825044851,
648 | "strokeColor": "#000",
649 | "backgroundColor": "#c5e8fa",
650 | "width": 28.545972970178294,
651 | "height": 28.545972970178294,
652 | "seed": 700407455,
653 | "groupIds": [
654 | "5voitlDDXgNwFzlxQJ1Mv"
655 | ],
656 | "frameId": null,
657 | "roundness": null,
658 | "boundElements": [],
659 | "updated": 1712910328771,
660 | "link": null,
661 | "locked": false
662 | },
663 | {
664 | "type": "line",
665 | "version": 2053,
666 | "versionNonce": 1606708608,
667 | "isDeleted": false,
668 | "id": "7UU7TM2wNYGOEJYsfmPAX",
669 | "fillStyle": "solid",
670 | "strokeWidth": 4,
671 | "strokeStyle": "solid",
672 | "roughness": 0,
673 | "opacity": 100,
674 | "angle": 0,
675 | "x": 1235.753954137039,
676 | "y": 603.5313408386027,
677 | "strokeColor": "#000",
678 | "backgroundColor": "#c5e8fa",
679 | "width": 6.705052254566622,
680 | "height": 11.778855553107247,
681 | "seed": 2025337535,
682 | "groupIds": [
683 | "5voitlDDXgNwFzlxQJ1Mv"
684 | ],
685 | "frameId": null,
686 | "roundness": {
687 | "type": 2
688 | },
689 | "boundElements": [],
690 | "updated": 1712910328771,
691 | "link": null,
692 | "locked": false,
693 | "startBinding": null,
694 | "endBinding": null,
695 | "lastCommittedPoint": null,
696 | "startArrowhead": null,
697 | "endArrowhead": null,
698 | "points": [
699 | [
700 | 0,
701 | 0
702 | ],
703 | [
704 | 3.9321799648410884,
705 | 2.0344095098468937
706 | ],
707 | [
708 | 6.705052254566622,
709 | 6.761943004768085
710 | ],
711 | [
712 | 6.427670413161153,
713 | 11.778855553107247
714 | ]
715 | ]
716 | },
717 | {
718 | "type": "text",
719 | "version": 236,
720 | "versionNonce": 540334720,
721 | "isDeleted": false,
722 | "id": "73u_6auZApSAddc6iw_FX",
723 | "fillStyle": "solid",
724 | "strokeWidth": 2,
725 | "strokeStyle": "solid",
726 | "roughness": 1,
727 | "opacity": 100,
728 | "angle": 0,
729 | "x": 736,
730 | "y": 244,
731 | "strokeColor": "#1e1e1e",
732 | "backgroundColor": "transparent",
733 | "width": 278.2166748046875,
734 | "height": 25,
735 | "seed": 108354347,
736 | "groupIds": [],
737 | "frameId": null,
738 | "roundness": null,
739 | "boundElements": [],
740 | "updated": 1712910604232,
741 | "link": null,
742 | "locked": false,
743 | "fontSize": 20,
744 | "fontFamily": 1,
745 | "text": "Tor Safe Browsing with PSS",
746 | "textAlign": "left",
747 | "verticalAlign": "top",
748 | "containerId": null,
749 | "originalText": "Tor Safe Browsing with PSS",
750 | "lineHeight": 1.25
751 | },
752 | {
753 | "type": "rectangle",
754 | "version": 3372,
755 | "versionNonce": 332008832,
756 | "isDeleted": false,
757 | "id": "V6jZTQsUYoN2mn4Ag-kVh",
758 | "fillStyle": "solid",
759 | "strokeWidth": 4,
760 | "strokeStyle": "solid",
761 | "roughness": 1,
762 | "opacity": 100,
763 | "angle": 0,
764 | "x": 1384.02663883873,
765 | "y": 532.8150514621343,
766 | "strokeColor": "#000000",
767 | "backgroundColor": "#eebfd9",
768 | "width": 87.85825103183927,
769 | "height": 119.73315199366137,
770 | "seed": 683172159,
771 | "groupIds": [
772 | "vMcE5u7k15zDiZan5-a7z",
773 | "kHKq_apePMJvI0Tuau80Y"
774 | ],
775 | "frameId": null,
776 | "roundness": null,
777 | "boundElements": [
778 | {
779 | "id": "TIUy5lsVpFzE_KRGAXNR3",
780 | "type": "arrow"
781 | }
782 | ],
783 | "updated": 1712910864944,
784 | "link": null,
785 | "locked": false
786 | },
787 | {
788 | "type": "rectangle",
789 | "version": 2809,
790 | "versionNonce": 933625216,
791 | "isDeleted": false,
792 | "id": "AJdHTaZCZxpNdxWnQRxYc",
793 | "fillStyle": "solid",
794 | "strokeWidth": 4,
795 | "strokeStyle": "solid",
796 | "roughness": 1,
797 | "opacity": 100,
798 | "angle": 0,
799 | "x": 1422.63742366127,
800 | "y": 546.4061494398103,
801 | "strokeColor": "#000000",
802 | "backgroundColor": "#fff",
803 | "width": 58.3359375,
804 | "height": 35,
805 | "seed": 1119347039,
806 | "groupIds": [
807 | "vMcE5u7k15zDiZan5-a7z",
808 | "kHKq_apePMJvI0Tuau80Y"
809 | ],
810 | "frameId": null,
811 | "roundness": null,
812 | "boundElements": [
813 | {
814 | "type": "text",
815 | "id": "B3PvN4rFC_ujKyZF0KebX"
816 | }
817 | ],
818 | "updated": 1712910784258,
819 | "link": null,
820 | "locked": false
821 | },
822 | {
823 | "type": "text",
824 | "version": 650,
825 | "versionNonce": 487214464,
826 | "isDeleted": false,
827 | "id": "B3PvN4rFC_ujKyZF0KebX",
828 | "fillStyle": "solid",
829 | "strokeWidth": 2,
830 | "strokeStyle": "solid",
831 | "roughness": 1,
832 | "opacity": 100,
833 | "angle": 0,
834 | "x": 1433.0303927927398,
835 | "y": 551.4061494398103,
836 | "strokeColor": "#1e1e1e",
837 | "backgroundColor": "transparent",
838 | "width": 37.54999923706055,
839 | "height": 25,
840 | "seed": 1594229329,
841 | "groupIds": [
842 | "vMcE5u7k15zDiZan5-a7z",
843 | "kHKq_apePMJvI0Tuau80Y"
844 | ],
845 | "frameId": null,
846 | "roundness": null,
847 | "boundElements": [],
848 | "updated": 1712910784258,
849 | "link": null,
850 | "locked": false,
851 | "fontSize": 20,
852 | "fontFamily": 1,
853 | "text": "PSS",
854 | "textAlign": "center",
855 | "verticalAlign": "middle",
856 | "containerId": "AJdHTaZCZxpNdxWnQRxYc",
857 | "originalText": "PSS",
858 | "lineHeight": 1.25
859 | },
860 | {
861 | "type": "rectangle",
862 | "version": 2096,
863 | "versionNonce": 1902419328,
864 | "isDeleted": false,
865 | "id": "N3rXl6_shO-04LCURlt9i",
866 | "fillStyle": "solid",
867 | "strokeWidth": 4,
868 | "strokeStyle": "solid",
869 | "roughness": 0,
870 | "opacity": 100,
871 | "angle": 0,
872 | "x": 1397.833277948665,
873 | "y": 598.7664826268594,
874 | "strokeColor": "#000",
875 | "backgroundColor": "#aedaf5",
876 | "width": 38.34765817030507,
877 | "height": 37.083848102072274,
878 | "seed": 1868372703,
879 | "groupIds": [
880 | "JK52RwLOJuviR9mO8Uw9m",
881 | "vMcE5u7k15zDiZan5-a7z",
882 | "kHKq_apePMJvI0Tuau80Y"
883 | ],
884 | "frameId": null,
885 | "roundness": null,
886 | "boundElements": [],
887 | "updated": 1712910784258,
888 | "link": null,
889 | "locked": false
890 | },
891 | {
892 | "type": "ellipse",
893 | "version": 2579,
894 | "versionNonce": 1710550400,
895 | "isDeleted": false,
896 | "id": "e-NQOHyssdWvdrP_ubz0v",
897 | "fillStyle": "solid",
898 | "strokeWidth": 4,
899 | "strokeStyle": "solid",
900 | "roughness": 0,
901 | "opacity": 100,
902 | "angle": 0,
903 | "x": 1397.7770026525964,
904 | "y": 628.988708466303,
905 | "strokeColor": "#000",
906 | "backgroundColor": "#aedaf5",
907 | "width": 38.39334618154158,
908 | "height": 14.851689701140025,
909 | "seed": 1943299839,
910 | "groupIds": [
911 | "JK52RwLOJuviR9mO8Uw9m",
912 | "vMcE5u7k15zDiZan5-a7z",
913 | "kHKq_apePMJvI0Tuau80Y"
914 | ],
915 | "frameId": null,
916 | "roundness": null,
917 | "boundElements": [],
918 | "updated": 1712910784258,
919 | "link": null,
920 | "locked": false
921 | },
922 | {
923 | "type": "ellipse",
924 | "version": 3080,
925 | "versionNonce": 66796928,
926 | "isDeleted": false,
927 | "id": "uH-ASH0QQCkZpoHamf8iq",
928 | "fillStyle": "solid",
929 | "strokeWidth": 4,
930 | "strokeStyle": "solid",
931 | "roughness": 0,
932 | "opacity": 100,
933 | "angle": 0,
934 | "x": 1397.7997949720443,
935 | "y": 619.3984545115432,
936 | "strokeColor": "#000",
937 | "backgroundColor": "#aedaf5",
938 | "width": 38.39334618154158,
939 | "height": 14.851689701140025,
940 | "seed": 1607282463,
941 | "groupIds": [
942 | "JK52RwLOJuviR9mO8Uw9m",
943 | "vMcE5u7k15zDiZan5-a7z",
944 | "kHKq_apePMJvI0Tuau80Y"
945 | ],
946 | "frameId": null,
947 | "roundness": null,
948 | "boundElements": [],
949 | "updated": 1712910784258,
950 | "link": null,
951 | "locked": false
952 | },
953 | {
954 | "type": "ellipse",
955 | "version": 2890,
956 | "versionNonce": 750226816,
957 | "isDeleted": false,
958 | "id": "25EbGrY1yZopnLiHkyfW0",
959 | "fillStyle": "solid",
960 | "strokeWidth": 4,
961 | "strokeStyle": "solid",
962 | "roughness": 0,
963 | "opacity": 100,
964 | "angle": 0,
965 | "x": 1397.7825313817784,
966 | "y": 609.9851451795173,
967 | "strokeColor": "#000",
968 | "backgroundColor": "#aedaf5",
969 | "width": 38.39334618154158,
970 | "height": 14.851689701140025,
971 | "seed": 1035465535,
972 | "groupIds": [
973 | "JK52RwLOJuviR9mO8Uw9m",
974 | "vMcE5u7k15zDiZan5-a7z",
975 | "kHKq_apePMJvI0Tuau80Y"
976 | ],
977 | "frameId": null,
978 | "roundness": null,
979 | "boundElements": [],
980 | "updated": 1712910784258,
981 | "link": null,
982 | "locked": false
983 | },
984 | {
985 | "type": "ellipse",
986 | "version": 2478,
987 | "versionNonce": 426368384,
988 | "isDeleted": false,
989 | "id": "lFKKnmTkKtQU8ZSiB_qeC",
990 | "fillStyle": "solid",
991 | "strokeWidth": 4,
992 | "strokeStyle": "solid",
993 | "roughness": 0,
994 | "opacity": 100,
995 | "angle": 0,
996 | "x": 1397.829651165862,
997 | "y": 601.3760100378418,
998 | "strokeColor": "#000",
999 | "backgroundColor": "#aedaf5",
1000 | "width": 38.39334618154158,
1001 | "height": 14.851689701140025,
1002 | "seed": 1979003743,
1003 | "groupIds": [
1004 | "JK52RwLOJuviR9mO8Uw9m",
1005 | "vMcE5u7k15zDiZan5-a7z",
1006 | "kHKq_apePMJvI0Tuau80Y"
1007 | ],
1008 | "frameId": null,
1009 | "roundness": null,
1010 | "boundElements": [],
1011 | "updated": 1712910784258,
1012 | "link": null,
1013 | "locked": false
1014 | },
1015 | {
1016 | "type": "ellipse",
1017 | "version": 2715,
1018 | "versionNonce": 1532112256,
1019 | "isDeleted": false,
1020 | "id": "PquJIK6K3vblf0sgLqrK7",
1021 | "fillStyle": "solid",
1022 | "strokeWidth": 4,
1023 | "strokeStyle": "solid",
1024 | "roughness": 0,
1025 | "opacity": 100,
1026 | "angle": 0,
1027 | "x": 1397.8235969120828,
1028 | "y": 592.159601832557,
1029 | "strokeColor": "#000",
1030 | "backgroundColor": "#dff3fd",
1031 | "width": 38.39334618154158,
1032 | "height": 14.851689701140025,
1033 | "seed": 282423167,
1034 | "groupIds": [
1035 | "JK52RwLOJuviR9mO8Uw9m",
1036 | "vMcE5u7k15zDiZan5-a7z",
1037 | "kHKq_apePMJvI0Tuau80Y"
1038 | ],
1039 | "frameId": null,
1040 | "roundness": null,
1041 | "boundElements": [],
1042 | "updated": 1712910784258,
1043 | "link": null,
1044 | "locked": false
1045 | },
1046 | {
1047 | "type": "rectangle",
1048 | "version": 2090,
1049 | "versionNonce": 1538293120,
1050 | "isDeleted": false,
1051 | "id": "cnwH2TATQX7nMCvPeY5d8",
1052 | "fillStyle": "solid",
1053 | "strokeWidth": 4,
1054 | "strokeStyle": "solid",
1055 | "roughness": 0,
1056 | "opacity": 100,
1057 | "angle": 0,
1058 | "x": 1411.5602217856895,
1059 | "y": 612.1767598445502,
1060 | "strokeColor": "#000",
1061 | "backgroundColor": "#aedaf5",
1062 | "width": 38.34765817030507,
1063 | "height": 37.083848102072274,
1064 | "seed": 2064143775,
1065 | "groupIds": [
1066 | "vBnSzBNYNqdFF3f4urW5l",
1067 | "kHKq_apePMJvI0Tuau80Y"
1068 | ],
1069 | "frameId": null,
1070 | "roundness": null,
1071 | "boundElements": [],
1072 | "updated": 1712910784258,
1073 | "link": null,
1074 | "locked": false
1075 | },
1076 | {
1077 | "type": "ellipse",
1078 | "version": 2574,
1079 | "versionNonce": 2132175488,
1080 | "isDeleted": false,
1081 | "id": "bw6yd2uTX3558XN8RBku7",
1082 | "fillStyle": "solid",
1083 | "strokeWidth": 4,
1084 | "strokeStyle": "solid",
1085 | "roughness": 0,
1086 | "opacity": 100,
1087 | "angle": 0,
1088 | "x": 1411.5039464896208,
1089 | "y": 642.3989856839937,
1090 | "strokeColor": "#000",
1091 | "backgroundColor": "#aedaf5",
1092 | "width": 38.39334618154158,
1093 | "height": 14.851689701140025,
1094 | "seed": 1137330623,
1095 | "groupIds": [
1096 | "vBnSzBNYNqdFF3f4urW5l",
1097 | "kHKq_apePMJvI0Tuau80Y"
1098 | ],
1099 | "frameId": null,
1100 | "roundness": null,
1101 | "boundElements": [
1102 | {
1103 | "id": "GNL65DN9iRrPXe6FJiteq",
1104 | "type": "arrow"
1105 | }
1106 | ],
1107 | "updated": 1712910821666,
1108 | "link": null,
1109 | "locked": false
1110 | },
1111 | {
1112 | "type": "ellipse",
1113 | "version": 3076,
1114 | "versionNonce": 1959730560,
1115 | "isDeleted": false,
1116 | "id": "6cJlzODjl28I4CfWRh2C1",
1117 | "fillStyle": "solid",
1118 | "strokeWidth": 4,
1119 | "strokeStyle": "solid",
1120 | "roughness": 0,
1121 | "opacity": 100,
1122 | "angle": 0,
1123 | "x": 1411.5267388090688,
1124 | "y": 632.8087317292338,
1125 | "strokeColor": "#000",
1126 | "backgroundColor": "#aedaf5",
1127 | "width": 38.39334618154158,
1128 | "height": 14.851689701140025,
1129 | "seed": 1685633503,
1130 | "groupIds": [
1131 | "vBnSzBNYNqdFF3f4urW5l",
1132 | "kHKq_apePMJvI0Tuau80Y"
1133 | ],
1134 | "frameId": null,
1135 | "roundness": null,
1136 | "boundElements": [],
1137 | "updated": 1712910784258,
1138 | "link": null,
1139 | "locked": false
1140 | },
1141 | {
1142 | "type": "ellipse",
1143 | "version": 2884,
1144 | "versionNonce": 403664256,
1145 | "isDeleted": false,
1146 | "id": "4Xn11GrfD5LmwIrmVJTK1",
1147 | "fillStyle": "solid",
1148 | "strokeWidth": 4,
1149 | "strokeStyle": "solid",
1150 | "roughness": 0,
1151 | "opacity": 100,
1152 | "angle": 0,
1153 | "x": 1411.509475218803,
1154 | "y": 623.395422397208,
1155 | "strokeColor": "#000",
1156 | "backgroundColor": "#aedaf5",
1157 | "width": 38.39334618154158,
1158 | "height": 14.851689701140025,
1159 | "seed": 572794367,
1160 | "groupIds": [
1161 | "vBnSzBNYNqdFF3f4urW5l",
1162 | "kHKq_apePMJvI0Tuau80Y"
1163 | ],
1164 | "frameId": null,
1165 | "roundness": null,
1166 | "boundElements": [],
1167 | "updated": 1712910784258,
1168 | "link": null,
1169 | "locked": false
1170 | },
1171 | {
1172 | "type": "ellipse",
1173 | "version": 2472,
1174 | "versionNonce": 247840128,
1175 | "isDeleted": false,
1176 | "id": "XYx0dBlkwh7ugwGgHmdDj",
1177 | "fillStyle": "solid",
1178 | "strokeWidth": 4,
1179 | "strokeStyle": "solid",
1180 | "roughness": 0,
1181 | "opacity": 100,
1182 | "angle": 0,
1183 | "x": 1411.5565950028865,
1184 | "y": 614.7862872555324,
1185 | "strokeColor": "#000",
1186 | "backgroundColor": "#aedaf5",
1187 | "width": 38.39334618154158,
1188 | "height": 14.851689701140025,
1189 | "seed": 1271729695,
1190 | "groupIds": [
1191 | "vBnSzBNYNqdFF3f4urW5l",
1192 | "kHKq_apePMJvI0Tuau80Y"
1193 | ],
1194 | "frameId": null,
1195 | "roundness": null,
1196 | "boundElements": [],
1197 | "updated": 1712910784258,
1198 | "link": null,
1199 | "locked": false
1200 | },
1201 | {
1202 | "type": "ellipse",
1203 | "version": 2709,
1204 | "versionNonce": 2050100608,
1205 | "isDeleted": false,
1206 | "id": "Xh-_rWKt2aGuDRuuJMC-v",
1207 | "fillStyle": "solid",
1208 | "strokeWidth": 4,
1209 | "strokeStyle": "solid",
1210 | "roughness": 0,
1211 | "opacity": 100,
1212 | "angle": 0,
1213 | "x": 1411.5505407491073,
1214 | "y": 605.5698790502477,
1215 | "strokeColor": "#000",
1216 | "backgroundColor": "#dff3fd",
1217 | "width": 38.39334618154158,
1218 | "height": 14.851689701140025,
1219 | "seed": 2086924863,
1220 | "groupIds": [
1221 | "vBnSzBNYNqdFF3f4urW5l",
1222 | "kHKq_apePMJvI0Tuau80Y"
1223 | ],
1224 | "frameId": null,
1225 | "roundness": null,
1226 | "boundElements": [],
1227 | "updated": 1712910784258,
1228 | "link": null,
1229 | "locked": false
1230 | },
1231 | {
1232 | "type": "rectangle",
1233 | "version": 927,
1234 | "versionNonce": 1883979136,
1235 | "isDeleted": false,
1236 | "id": "57_CJ-VEYaox04qCg8qCi",
1237 | "fillStyle": "solid",
1238 | "strokeWidth": 1,
1239 | "strokeStyle": "solid",
1240 | "roughness": 1,
1241 | "opacity": 100,
1242 | "angle": 0,
1243 | "x": 722.0176022073244,
1244 | "y": 373.23148305011114,
1245 | "strokeColor": "#000000",
1246 | "backgroundColor": "transparent",
1247 | "width": 345.09761836902214,
1248 | "height": 206.53703389977767,
1249 | "seed": 1336040150,
1250 | "groupIds": [
1251 | "--lagioZikxzHg77RDsUN"
1252 | ],
1253 | "frameId": null,
1254 | "roundness": null,
1255 | "boundElements": [
1256 | {
1257 | "id": "4ydMUZkreQLeF6TqMQbsQ",
1258 | "type": "arrow"
1259 | }
1260 | ],
1261 | "updated": 1712910351968,
1262 | "link": null,
1263 | "locked": false
1264 | },
1265 | {
1266 | "type": "line",
1267 | "version": 711,
1268 | "versionNonce": 1907096192,
1269 | "isDeleted": false,
1270 | "id": "1EWtvWJyK9B4QC3KnJFx0",
1271 | "fillStyle": "solid",
1272 | "strokeWidth": 1,
1273 | "strokeStyle": "solid",
1274 | "roughness": 1,
1275 | "opacity": 100,
1276 | "angle": 0,
1277 | "x": 719.1150757071459,
1278 | "y": 405.15030984914006,
1279 | "strokeColor": "#000000",
1280 | "backgroundColor": "transparent",
1281 | "width": 347.68306508561955,
1282 | "height": 0,
1283 | "seed": 930910230,
1284 | "groupIds": [
1285 | "--lagioZikxzHg77RDsUN"
1286 | ],
1287 | "frameId": null,
1288 | "roundness": {
1289 | "type": 2
1290 | },
1291 | "boundElements": [],
1292 | "updated": 1712910226192,
1293 | "link": null,
1294 | "locked": false,
1295 | "startBinding": null,
1296 | "endBinding": null,
1297 | "lastCommittedPoint": null,
1298 | "startArrowhead": null,
1299 | "endArrowhead": null,
1300 | "points": [
1301 | [
1302 | 0,
1303 | 0
1304 | ],
1305 | [
1306 | 347.68306508561955,
1307 | 0
1308 | ]
1309 | ]
1310 | },
1311 | {
1312 | "type": "ellipse",
1313 | "version": 529,
1314 | "versionNonce": 1258745216,
1315 | "isDeleted": false,
1316 | "id": "v7_JKJZGpkN1mm6vc8_1Y",
1317 | "fillStyle": "solid",
1318 | "strokeWidth": 1,
1319 | "strokeStyle": "solid",
1320 | "roughness": 0,
1321 | "opacity": 100,
1322 | "angle": 0,
1323 | "x": 734.1286742800773,
1324 | "y": 384.7584172888347,
1325 | "strokeColor": "#000000",
1326 | "backgroundColor": "#fa5252",
1327 | "width": 13.497891275692947,
1328 | "height": 13.497891275692947,
1329 | "seed": 685645142,
1330 | "groupIds": [
1331 | "--lagioZikxzHg77RDsUN"
1332 | ],
1333 | "frameId": null,
1334 | "roundness": null,
1335 | "boundElements": [],
1336 | "updated": 1712910226192,
1337 | "link": null,
1338 | "locked": false
1339 | },
1340 | {
1341 | "type": "ellipse",
1342 | "version": 574,
1343 | "versionNonce": 2135468672,
1344 | "isDeleted": false,
1345 | "id": "L8Kojxm6hfLTJnCEs6yBW",
1346 | "fillStyle": "solid",
1347 | "strokeWidth": 1,
1348 | "strokeStyle": "solid",
1349 | "roughness": 0,
1350 | "opacity": 100,
1351 | "angle": 0,
1352 | "x": 761.8228053648602,
1353 | "y": 384.7584172888347,
1354 | "strokeColor": "#000000",
1355 | "backgroundColor": "#fab005",
1356 | "width": 13.497891275692947,
1357 | "height": 13.497891275692947,
1358 | "seed": 689701526,
1359 | "groupIds": [
1360 | "--lagioZikxzHg77RDsUN"
1361 | ],
1362 | "frameId": null,
1363 | "roundness": null,
1364 | "boundElements": [],
1365 | "updated": 1712910226192,
1366 | "link": null,
1367 | "locked": false
1368 | },
1369 | {
1370 | "type": "ellipse",
1371 | "version": 632,
1372 | "versionNonce": 1993162112,
1373 | "isDeleted": false,
1374 | "id": "BDyrz3IzSKqpxR7eBPU7M",
1375 | "fillStyle": "solid",
1376 | "strokeWidth": 1,
1377 | "strokeStyle": "solid",
1378 | "roughness": 0,
1379 | "opacity": 100,
1380 | "angle": 0,
1381 | "x": 790.7332183655735,
1382 | "y": 385.97469920476544,
1383 | "strokeColor": "#000000",
1384 | "backgroundColor": "#40c057",
1385 | "width": 13.497891275692947,
1386 | "height": 13.497891275692947,
1387 | "seed": 1256931286,
1388 | "groupIds": [
1389 | "--lagioZikxzHg77RDsUN"
1390 | ],
1391 | "frameId": null,
1392 | "roundness": null,
1393 | "boundElements": [],
1394 | "updated": 1712910226192,
1395 | "link": null,
1396 | "locked": false
1397 | },
1398 | {
1399 | "type": "image",
1400 | "version": 311,
1401 | "versionNonce": 365910656,
1402 | "isDeleted": false,
1403 | "id": "tfZ9zkIDADJ0tuIZJgTYM",
1404 | "fillStyle": "solid",
1405 | "strokeWidth": 2,
1406 | "strokeStyle": "solid",
1407 | "roughness": 1,
1408 | "opacity": 100,
1409 | "angle": 0,
1410 | "x": 819.8916625976562,
1411 | "y": 427.5,
1412 | "strokeColor": "transparent",
1413 | "backgroundColor": "transparent",
1414 | "width": 138.8853404023438,
1415 | "height": 138.8853404023438,
1416 | "seed": 832184714,
1417 | "groupIds": [
1418 | "--lagioZikxzHg77RDsUN"
1419 | ],
1420 | "frameId": null,
1421 | "roundness": null,
1422 | "boundElements": [],
1423 | "updated": 1712910226192,
1424 | "link": null,
1425 | "locked": false,
1426 | "status": "saved",
1427 | "fileId": "91e708780a61d85dd587d22f067e5266db307c7f",
1428 | "scale": [
1429 | 1,
1430 | 1
1431 | ]
1432 | },
1433 | {
1434 | "type": "line",
1435 | "version": 738,
1436 | "versionNonce": 1967754624,
1437 | "isDeleted": false,
1438 | "id": "GXH0TTH3nLbL7YUq91MeP",
1439 | "fillStyle": "solid",
1440 | "strokeWidth": 1,
1441 | "strokeStyle": "solid",
1442 | "roughness": 1,
1443 | "opacity": 100,
1444 | "angle": 0,
1445 | "x": 719.5072056332772,
1446 | "y": 424.35616648349446,
1447 | "strokeColor": "#000000",
1448 | "backgroundColor": "transparent",
1449 | "width": 347.68306508561955,
1450 | "height": 0,
1451 | "seed": 1857456278,
1452 | "groupIds": [
1453 | "--lagioZikxzHg77RDsUN"
1454 | ],
1455 | "frameId": null,
1456 | "roundness": {
1457 | "type": 2
1458 | },
1459 | "boundElements": [],
1460 | "updated": 1712910226192,
1461 | "link": null,
1462 | "locked": false,
1463 | "startBinding": null,
1464 | "endBinding": null,
1465 | "lastCommittedPoint": null,
1466 | "startArrowhead": null,
1467 | "endArrowhead": null,
1468 | "points": [
1469 | [
1470 | 0,
1471 | 0
1472 | ],
1473 | [
1474 | 347.68306508561955,
1475 | 0
1476 | ]
1477 | ]
1478 | },
1479 | {
1480 | "type": "text",
1481 | "version": 196,
1482 | "versionNonce": 1999580544,
1483 | "isDeleted": false,
1484 | "id": "aRyu512MdMK-i7FQvljwO",
1485 | "fillStyle": "solid",
1486 | "strokeWidth": 2,
1487 | "strokeStyle": "solid",
1488 | "roughness": 1,
1489 | "opacity": 100,
1490 | "angle": 0,
1491 | "x": 724.7916641235352,
1492 | "y": 401,
1493 | "strokeColor": "#1e1e1e",
1494 | "backgroundColor": "transparent",
1495 | "width": 256.3500061035156,
1496 | "height": 25,
1497 | "seed": 812944768,
1498 | "groupIds": [
1499 | "--lagioZikxzHg77RDsUN"
1500 | ],
1501 | "frameId": null,
1502 | "roundness": null,
1503 | "boundElements": [
1504 | {
1505 | "id": "u6MHMEPk9IYyN6aUEoLUN",
1506 | "type": "arrow"
1507 | }
1508 | ],
1509 | "updated": 1712910341244,
1510 | "link": null,
1511 | "locked": false,
1512 | "fontSize": 20,
1513 | "fontFamily": 1,
1514 | "text": "http://verboten.onion.proxy",
1515 | "textAlign": "left",
1516 | "verticalAlign": "top",
1517 | "containerId": null,
1518 | "originalText": "http://verboten.onion.proxy",
1519 | "lineHeight": 1.25
1520 | },
1521 | {
1522 | "type": "rectangle",
1523 | "version": 1008,
1524 | "versionNonce": 982174336,
1525 | "isDeleted": false,
1526 | "id": "3dJ2e94kZ1jRWpMeHS8tX",
1527 | "fillStyle": "solid",
1528 | "strokeWidth": 1,
1529 | "strokeStyle": "solid",
1530 | "roughness": 1,
1531 | "opacity": 100,
1532 | "angle": 0,
1533 | "x": 722.2877241146412,
1534 | "y": 619.2314830501111,
1535 | "strokeColor": "#000000",
1536 | "backgroundColor": "transparent",
1537 | "width": 345.09761836902214,
1538 | "height": 206.53703389977767,
1539 | "seed": 681606528,
1540 | "groupIds": [
1541 | "XS2nkrSt3mnkc6HqdPeUL"
1542 | ],
1543 | "frameId": null,
1544 | "roundness": null,
1545 | "boundElements": [],
1546 | "updated": 1712910744410,
1547 | "link": null,
1548 | "locked": false
1549 | },
1550 | {
1551 | "type": "line",
1552 | "version": 789,
1553 | "versionNonce": 660876672,
1554 | "isDeleted": false,
1555 | "id": "7mnZUlWnCiMV51I4ZBUza",
1556 | "fillStyle": "solid",
1557 | "strokeWidth": 1,
1558 | "strokeStyle": "solid",
1559 | "roughness": 1,
1560 | "opacity": 100,
1561 | "angle": 0,
1562 | "x": 719.3851976144626,
1563 | "y": 651.1503098491401,
1564 | "strokeColor": "#000000",
1565 | "backgroundColor": "transparent",
1566 | "width": 347.68306508561955,
1567 | "height": 0,
1568 | "seed": 179621248,
1569 | "groupIds": [
1570 | "XS2nkrSt3mnkc6HqdPeUL"
1571 | ],
1572 | "frameId": null,
1573 | "roundness": {
1574 | "type": 2
1575 | },
1576 | "boundElements": [],
1577 | "updated": 1712910226192,
1578 | "link": null,
1579 | "locked": false,
1580 | "startBinding": null,
1581 | "endBinding": null,
1582 | "lastCommittedPoint": null,
1583 | "startArrowhead": null,
1584 | "endArrowhead": null,
1585 | "points": [
1586 | [
1587 | 0,
1588 | 0
1589 | ],
1590 | [
1591 | 347.68306508561955,
1592 | 0
1593 | ]
1594 | ]
1595 | },
1596 | {
1597 | "type": "ellipse",
1598 | "version": 607,
1599 | "versionNonce": 308243072,
1600 | "isDeleted": false,
1601 | "id": "of2KAEBbBakNeaJsm52jW",
1602 | "fillStyle": "solid",
1603 | "strokeWidth": 1,
1604 | "strokeStyle": "solid",
1605 | "roughness": 0,
1606 | "opacity": 100,
1607 | "angle": 0,
1608 | "x": 734.398796187394,
1609 | "y": 630.7584172888348,
1610 | "strokeColor": "#000000",
1611 | "backgroundColor": "#fa5252",
1612 | "width": 13.497891275692947,
1613 | "height": 13.497891275692947,
1614 | "seed": 1170152832,
1615 | "groupIds": [
1616 | "XS2nkrSt3mnkc6HqdPeUL"
1617 | ],
1618 | "frameId": null,
1619 | "roundness": null,
1620 | "boundElements": [],
1621 | "updated": 1712910226192,
1622 | "link": null,
1623 | "locked": false
1624 | },
1625 | {
1626 | "type": "ellipse",
1627 | "version": 652,
1628 | "versionNonce": 1434615168,
1629 | "isDeleted": false,
1630 | "id": "1ce5vFPSttb1Tz4QhJgJ2",
1631 | "fillStyle": "solid",
1632 | "strokeWidth": 1,
1633 | "strokeStyle": "solid",
1634 | "roughness": 0,
1635 | "opacity": 100,
1636 | "angle": 0,
1637 | "x": 762.0929272721769,
1638 | "y": 630.7584172888348,
1639 | "strokeColor": "#000000",
1640 | "backgroundColor": "#fab005",
1641 | "width": 13.497891275692947,
1642 | "height": 13.497891275692947,
1643 | "seed": 1258253696,
1644 | "groupIds": [
1645 | "XS2nkrSt3mnkc6HqdPeUL"
1646 | ],
1647 | "frameId": null,
1648 | "roundness": null,
1649 | "boundElements": [],
1650 | "updated": 1712910226192,
1651 | "link": null,
1652 | "locked": false
1653 | },
1654 | {
1655 | "type": "ellipse",
1656 | "version": 710,
1657 | "versionNonce": 403577472,
1658 | "isDeleted": false,
1659 | "id": "f9HHQFgreV-i6XtNTu3eo",
1660 | "fillStyle": "solid",
1661 | "strokeWidth": 1,
1662 | "strokeStyle": "solid",
1663 | "roughness": 0,
1664 | "opacity": 100,
1665 | "angle": 0,
1666 | "x": 791.0033402728902,
1667 | "y": 631.9746992047656,
1668 | "strokeColor": "#000000",
1669 | "backgroundColor": "#40c057",
1670 | "width": 13.497891275692947,
1671 | "height": 13.497891275692947,
1672 | "seed": 1672854912,
1673 | "groupIds": [
1674 | "XS2nkrSt3mnkc6HqdPeUL"
1675 | ],
1676 | "frameId": null,
1677 | "roundness": null,
1678 | "boundElements": [],
1679 | "updated": 1712910226192,
1680 | "link": null,
1681 | "locked": false
1682 | },
1683 | {
1684 | "type": "line",
1685 | "version": 816,
1686 | "versionNonce": 1263979904,
1687 | "isDeleted": false,
1688 | "id": "yEZ4PyBSzYut2WIikjZ1h",
1689 | "fillStyle": "solid",
1690 | "strokeWidth": 1,
1691 | "strokeStyle": "solid",
1692 | "roughness": 1,
1693 | "opacity": 100,
1694 | "angle": 0,
1695 | "x": 719.7773275405939,
1696 | "y": 670.3561664834945,
1697 | "strokeColor": "#000000",
1698 | "backgroundColor": "transparent",
1699 | "width": 347.68306508561955,
1700 | "height": 0,
1701 | "seed": 746872192,
1702 | "groupIds": [
1703 | "XS2nkrSt3mnkc6HqdPeUL"
1704 | ],
1705 | "frameId": null,
1706 | "roundness": {
1707 | "type": 2
1708 | },
1709 | "boundElements": [],
1710 | "updated": 1712910226192,
1711 | "link": null,
1712 | "locked": false,
1713 | "startBinding": null,
1714 | "endBinding": null,
1715 | "lastCommittedPoint": null,
1716 | "startArrowhead": null,
1717 | "endArrowhead": null,
1718 | "points": [
1719 | [
1720 | 0,
1721 | 0
1722 | ],
1723 | [
1724 | 347.68306508561955,
1725 | 0
1726 | ]
1727 | ]
1728 | },
1729 | {
1730 | "type": "text",
1731 | "version": 273,
1732 | "versionNonce": 1416022656,
1733 | "isDeleted": false,
1734 | "id": "qPtXS8T_0CXIerM9m_wcy",
1735 | "fillStyle": "solid",
1736 | "strokeWidth": 2,
1737 | "strokeStyle": "solid",
1738 | "roughness": 1,
1739 | "opacity": 100,
1740 | "angle": 0,
1741 | "x": 725.0617860308519,
1742 | "y": 647,
1743 | "strokeColor": "#1e1e1e",
1744 | "backgroundColor": "transparent",
1745 | "width": 256.3500061035156,
1746 | "height": 25,
1747 | "seed": 656190848,
1748 | "groupIds": [
1749 | "XS2nkrSt3mnkc6HqdPeUL"
1750 | ],
1751 | "frameId": null,
1752 | "roundness": null,
1753 | "boundElements": [],
1754 | "updated": 1712910226192,
1755 | "link": null,
1756 | "locked": false,
1757 | "fontSize": 20,
1758 | "fontFamily": 1,
1759 | "text": "http://verboten.onion.proxy",
1760 | "textAlign": "left",
1761 | "verticalAlign": "top",
1762 | "containerId": null,
1763 | "originalText": "http://verboten.onion.proxy",
1764 | "lineHeight": 1.25
1765 | },
1766 | {
1767 | "id": "eIs4pBsIeS2lbBYMVO3_P",
1768 | "type": "image",
1769 | "x": 847.3916625976562,
1770 | "y": 700,
1771 | "width": 90.00000000000003,
1772 | "height": 90.00000000000003,
1773 | "angle": 0,
1774 | "strokeColor": "transparent",
1775 | "backgroundColor": "#ffffff",
1776 | "fillStyle": "solid",
1777 | "strokeWidth": 2,
1778 | "strokeStyle": "solid",
1779 | "roughness": 1,
1780 | "opacity": 100,
1781 | "groupIds": [
1782 | "XS2nkrSt3mnkc6HqdPeUL"
1783 | ],
1784 | "frameId": null,
1785 | "roundness": null,
1786 | "seed": 945109632,
1787 | "version": 121,
1788 | "versionNonce": 1077295744,
1789 | "isDeleted": false,
1790 | "boundElements": [
1791 | {
1792 | "id": "kHNfnrtrQ3eObLK9gfhEe",
1793 | "type": "arrow"
1794 | }
1795 | ],
1796 | "updated": 1712910434803,
1797 | "link": null,
1798 | "locked": false,
1799 | "status": "saved",
1800 | "fileId": "3c0354edb1c6699d5dddc39861f82e84751e6663",
1801 | "scale": [
1802 | 1,
1803 | 1
1804 | ]
1805 | },
1806 | {
1807 | "type": "line",
1808 | "version": 1780,
1809 | "versionNonce": 422926976,
1810 | "isDeleted": false,
1811 | "id": "x_RfEKlgzP57R46LPI2u-",
1812 | "fillStyle": "solid",
1813 | "strokeWidth": 1,
1814 | "strokeStyle": "solid",
1815 | "roughness": 0,
1816 | "opacity": 50,
1817 | "angle": 0.21948755520879892,
1818 | "x": 1159.8437169165668,
1819 | "y": 547.1244667919952,
1820 | "strokeColor": "#eebefa",
1821 | "backgroundColor": "#eebefa",
1822 | "width": 65.56153549310424,
1823 | "height": 86.02434618404497,
1824 | "seed": 1477122688,
1825 | "groupIds": [
1826 | "PkgXFTGhIazaHYIR0_fqz",
1827 | "FHsd7QaAyapxh3DWBjCaN"
1828 | ],
1829 | "frameId": null,
1830 | "roundness": {
1831 | "type": 2
1832 | },
1833 | "boundElements": [],
1834 | "updated": 1712910290858,
1835 | "link": null,
1836 | "locked": false,
1837 | "startBinding": null,
1838 | "endBinding": null,
1839 | "lastCommittedPoint": null,
1840 | "startArrowhead": null,
1841 | "endArrowhead": null,
1842 | "points": [
1843 | [
1844 | 0,
1845 | 0
1846 | ],
1847 | [
1848 | -5.030197718757853,
1849 | 12.909891407962958
1850 | ],
1851 | [
1852 | -10.318617178790982,
1853 | 22.776008798284742
1854 | ],
1855 | [
1856 | -13.349284456052667,
1857 | 34.056225029988106
1858 | ],
1859 | [
1860 | -14.636680703926142,
1861 | 53.16338467541828
1862 | ],
1863 | [
1864 | -11.867382115399797,
1865 | 62.48840496558488
1866 | ],
1867 | [
1868 | -6.5223951946730585,
1869 | 75.88997115414378
1870 | ],
1871 | [
1872 | 10.034454145650859,
1873 | 86.02434618404497
1874 | ],
1875 | [
1876 | 30.35422379059385,
1877 | 85.55297990358446
1878 | ],
1879 | [
1880 | 44.40245959450504,
1881 | 77.5397531357556
1882 | ],
1883 | [
1884 | 50.9248547891781,
1885 | 62.69171530124922
1886 | ],
1887 | [
1888 | 43.62975669984653,
1889 | 52.86253000305875
1890 | ],
1891 | [
1892 | 33.84493225241774,
1893 | 47.3650754644934
1894 | ],
1895 | [
1896 | 12.665266083293874,
1897 | 38.006830523766034
1898 | ],
1899 | [
1900 | 4.766365719184157,
1901 | 20.740116340262897
1902 | ],
1903 | [
1904 | 1.7560294754889003,
1905 | 9.427325609210408
1906 | ],
1907 | [
1908 | 0,
1909 | 0
1910 | ]
1911 | ]
1912 | },
1913 | {
1914 | "type": "line",
1915 | "version": 1702,
1916 | "versionNonce": 782633600,
1917 | "isDeleted": false,
1918 | "id": "OKbwW1-6itZpTAa_O_N08",
1919 | "fillStyle": "solid",
1920 | "strokeWidth": 1,
1921 | "strokeStyle": "solid",
1922 | "roughness": 0,
1923 | "opacity": 20,
1924 | "angle": 0.21948755520879892,
1925 | "x": 1163.9952735976744,
1926 | "y": 540.5304355418531,
1927 | "strokeColor": "#9c36b5",
1928 | "backgroundColor": "#9c36b5",
1929 | "width": 70.58839779758353,
1930 | "height": 100.42430134705471,
1931 | "seed": 214157952,
1932 | "groupIds": [
1933 | "PkgXFTGhIazaHYIR0_fqz",
1934 | "FHsd7QaAyapxh3DWBjCaN"
1935 | ],
1936 | "frameId": null,
1937 | "roundness": {
1938 | "type": 2
1939 | },
1940 | "boundElements": [],
1941 | "updated": 1712910290858,
1942 | "link": null,
1943 | "locked": false,
1944 | "startBinding": null,
1945 | "endBinding": null,
1946 | "lastCommittedPoint": null,
1947 | "startArrowhead": null,
1948 | "endArrowhead": null,
1949 | "points": [
1950 | [
1951 | 0,
1952 | 0
1953 | ],
1954 | [
1955 | -8.857222695769545,
1956 | 15.94983187346578
1957 | ],
1958 | [
1959 | -14.506789125531862,
1960 | 27.51799170583624
1961 | ],
1962 | [
1963 | -17.735112799681755,
1964 | 40.700313375281645
1965 | ],
1966 | [
1967 | -19.887328582448355,
1968 | 59.8012284473352
1969 | ],
1970 | [
1971 | -16.389977935452634,
1972 | 73.79063103531807
1973 | ],
1974 | [
1975 | -7.781114804386247,
1976 | 88.85614151468427
1977 | ],
1978 | [
1979 | 9.97466540343818,
1980 | 100.42430134705471
1981 | ],
1982 | [
1983 | 31.765850203949974,
1984 | 99.88624740136305
1985 | ],
1986 | [
1987 | 46.831360683316156,
1988 | 90.739330324605
1989 | ],
1990 | [
1991 | 50.70106921513517,
1992 | 74.74451158957555
1993 | ],
1994 | [
1995 | 46.68456309050828,
1996 | 61.15014382234127
1997 | ],
1998 | [
1999 | 36.2904169903138,
2000 | 52.159350214203
2001 | ],
2002 | [
2003 | 17.238516007037788,
2004 | 41.17624480269478
2005 | ],
2006 | [
2007 | 5.303423361028801,
2008 | 25.68558388186304
2009 | ],
2010 | [
2011 | 1.0967752995259668,
2012 | 12.99053517216171
2013 | ],
2014 | [
2015 | 0,
2016 | 0
2017 | ]
2018 | ]
2019 | },
2020 | {
2021 | "type": "line",
2022 | "version": 1084,
2023 | "versionNonce": 847297152,
2024 | "isDeleted": false,
2025 | "id": "nluN45ZekhHwelie3Do09",
2026 | "fillStyle": "solid",
2027 | "strokeWidth": 1,
2028 | "strokeStyle": "solid",
2029 | "roughness": 0,
2030 | "opacity": 80,
2031 | "angle": 0.14384296208148317,
2032 | "x": 1151.3040505340741,
2033 | "y": 592.5122584099801,
2034 | "strokeColor": "#f3f0ff",
2035 | "backgroundColor": "#f3f0ff",
2036 | "width": 54.202462427781136,
2037 | "height": 45.3482371173782,
2038 | "seed": 115767936,
2039 | "groupIds": [
2040 | "PkgXFTGhIazaHYIR0_fqz",
2041 | "FHsd7QaAyapxh3DWBjCaN"
2042 | ],
2043 | "frameId": null,
2044 | "roundness": {
2045 | "type": 2
2046 | },
2047 | "boundElements": [],
2048 | "updated": 1712910290858,
2049 | "link": null,
2050 | "locked": false,
2051 | "startBinding": null,
2052 | "endBinding": null,
2053 | "lastCommittedPoint": null,
2054 | "startArrowhead": null,
2055 | "endArrowhead": null,
2056 | "points": [
2057 | [
2058 | 0,
2059 | 0
2060 | ],
2061 | [
2062 | 5.237799545184842,
2063 | 9.252453963761646
2064 | ],
2065 | [
2066 | 18.229776575702456,
2067 | 19.67430305989671
2068 | ],
2069 | [
2070 | 35.403554299665146,
2071 | 30.484380557783652
2072 | ],
2073 | [
2074 | 52.577332023627875,
2075 | 36.565049150345054
2076 | ],
2077 | [
2078 | 48.53644314740136,
2079 | 45.3482371173782
2080 | ],
2081 | [
2082 | 40.791406134633846,
2083 | 43.996977430142316
2084 | ],
2085 | [
2086 | 22.27066545192899,
2087 | 34.406708544571714
2088 | ],
2089 | [
2090 | 10.149826917762452,
2091 | 27.03744339073084
2092 | ],
2093 | [
2094 | 2.673816877840766,
2095 | 15.620523998189114
2096 | ],
2097 | [
2098 | -1.6251304041532642,
2099 | 0
2100 | ]
2101 | ]
2102 | },
2103 | {
2104 | "type": "line",
2105 | "version": 2039,
2106 | "versionNonce": 1199925888,
2107 | "isDeleted": false,
2108 | "id": "LuLAjRUogIoIU6zzQthO3",
2109 | "fillStyle": "solid",
2110 | "strokeWidth": 1,
2111 | "strokeStyle": "solid",
2112 | "roughness": 0,
2113 | "opacity": 30,
2114 | "angle": 0.04895124137395612,
2115 | "x": 1163.8201113216924,
2116 | "y": 552.3172143606996,
2117 | "strokeColor": "#6741d9",
2118 | "backgroundColor": "#6741d9",
2119 | "width": 43.6288038055354,
2120 | "height": 69.78936394846636,
2121 | "seed": 154348160,
2122 | "groupIds": [
2123 | "PkgXFTGhIazaHYIR0_fqz",
2124 | "FHsd7QaAyapxh3DWBjCaN"
2125 | ],
2126 | "frameId": null,
2127 | "roundness": {
2128 | "type": 2
2129 | },
2130 | "boundElements": [],
2131 | "updated": 1712910290858,
2132 | "link": null,
2133 | "locked": false,
2134 | "startBinding": null,
2135 | "endBinding": null,
2136 | "lastCommittedPoint": null,
2137 | "startArrowhead": null,
2138 | "endArrowhead": null,
2139 | "points": [
2140 | [
2141 | 0,
2142 | 0
2143 | ],
2144 | [
2145 | -3.347412590692311,
2146 | 10.473466523975866
2147 | ],
2148 | [
2149 | -6.866662305144604,
2150 | 18.47759660871188
2151 | ],
2152 | [
2153 | -8.883460524481817,
2154 | 27.62894911451859
2155 | ],
2156 | [
2157 | -9.7401756379398,
2158 | 43.130101726169556
2159 | ],
2160 | [
2161 | -7.8973087207903365,
2162 | 50.69525349686646
2163 | ],
2164 | [
2165 | -4.34041543033244,
2166 | 61.56760326412651
2167 | ],
2168 | [
2169 | 6.677562200511447,
2170 | 69.78936394846636
2171 | ],
2172 | [
2173 | 20.199625656547127,
2174 | 69.40695647477614
2175 | ],
2176 | [
2177 | 29.548212737263153,
2178 | 62.9060294220423
2179 | ],
2180 | [
2181 | 33.8886281675956,
2182 | 50.86019400080015
2183 | ],
2184 | [
2185 | 29.03400722426733,
2186 | 42.88602598300756
2187 | ],
2188 | [
2189 | 22.522564457137847,
2190 | 38.42608094882788
2191 | ],
2192 | [
2193 | 8.428271316968308,
2194 | 30.833974864231458
2195 | ],
2196 | [
2197 | -0.09293818689106788,
2198 | 17.055680511391046
2199 | ],
2200 | [
2201 | -0.22149020606105474,
2202 | 8.05633210939389
2203 | ],
2204 | [
2205 | 0,
2206 | 0
2207 | ]
2208 | ]
2209 | },
2210 | {
2211 | "type": "line",
2212 | "version": 1369,
2213 | "versionNonce": 947133056,
2214 | "isDeleted": false,
2215 | "id": "N3DDlFrQQ5sTRLFaAkWvz",
2216 | "fillStyle": "solid",
2217 | "strokeWidth": 1,
2218 | "strokeStyle": "solid",
2219 | "roughness": 0,
2220 | "opacity": 70,
2221 | "angle": 5.581134327900369,
2222 | "x": 1151.9100849728616,
2223 | "y": 591.7186041392409,
2224 | "strokeColor": "#f3f0ff",
2225 | "backgroundColor": "#f3f0ff",
2226 | "width": 49.58190485258915,
2227 | "height": 41.0328016958292,
2228 | "seed": 2120866432,
2229 | "groupIds": [
2230 | "PkgXFTGhIazaHYIR0_fqz",
2231 | "FHsd7QaAyapxh3DWBjCaN"
2232 | ],
2233 | "frameId": null,
2234 | "roundness": {
2235 | "type": 2
2236 | },
2237 | "boundElements": [],
2238 | "updated": 1712910290858,
2239 | "link": null,
2240 | "locked": false,
2241 | "startBinding": null,
2242 | "endBinding": null,
2243 | "lastCommittedPoint": null,
2244 | "startArrowhead": null,
2245 | "endArrowhead": null,
2246 | "points": [
2247 | [
2248 | 0,
2249 | 0
2250 | ],
2251 | [
2252 | 5.237799545184841,
2253 | 9.252453963761646
2254 | ],
2255 | [
2256 | 16.751082093647234,
2257 | 22.0622715374243
2258 | ],
2259 | [
2260 | 34.862772702872306,
2261 | 33.11973755000102
2262 | ],
2263 | [
2264 | 47.95677444843589,
2265 | 34.18880974435727
2266 | ],
2267 | [
2268 | 46.510874603096866,
2269 | 41.0328016958292
2270 | ],
2271 | [
2272 | 37.75891785394692,
2273 | 40.57345032644236
2274 | ],
2275 | [
2276 | 25.239783487579295,
2277 | 35.73002364676378
2278 | ],
2279 | [
2280 | 14.551634868054743,
2281 | 26.73232123708791
2282 | ],
2283 | [
2284 | 6.22408447161388,
2285 | 16.788459720518034
2286 | ],
2287 | [
2288 | -1.6251304041532642,
2289 | 0
2290 | ]
2291 | ]
2292 | },
2293 | {
2294 | "type": "line",
2295 | "version": 1785,
2296 | "versionNonce": 2014104192,
2297 | "isDeleted": false,
2298 | "id": "R5BOhPwFss0-oj80QUVbe",
2299 | "fillStyle": "solid",
2300 | "strokeWidth": 1,
2301 | "strokeStyle": "solid",
2302 | "roughness": 0,
2303 | "opacity": 50,
2304 | "angle": 0.8590091674223101,
2305 | "x": 1153.1386604272623,
2306 | "y": 558.3185703807861,
2307 | "strokeColor": "#f3f0ff",
2308 | "backgroundColor": "#f3f0ff",
2309 | "width": 26.30003592989374,
2310 | "height": 18.993695303794954,
2311 | "seed": 2034928256,
2312 | "groupIds": [
2313 | "PkgXFTGhIazaHYIR0_fqz",
2314 | "FHsd7QaAyapxh3DWBjCaN"
2315 | ],
2316 | "frameId": null,
2317 | "roundness": {
2318 | "type": 2
2319 | },
2320 | "boundElements": [],
2321 | "updated": 1712910290858,
2322 | "link": null,
2323 | "locked": false,
2324 | "startBinding": null,
2325 | "endBinding": null,
2326 | "lastCommittedPoint": null,
2327 | "startArrowhead": null,
2328 | "endArrowhead": null,
2329 | "points": [
2330 | [
2331 | 0,
2332 | 0
2333 | ],
2334 | [
2335 | 6.105982301565242,
2336 | 5.572186306353746
2337 | ],
2338 | [
2339 | 12.55492933366075,
2340 | 9.888913242975946
2341 | ],
2342 | [
2343 | 18.562839646970097,
2344 | 12.396144017909142
2345 | ],
2346 | [
2347 | 26.30003592989374,
2348 | 13.298823556628545
2349 | ],
2350 | [
2351 | 24.242095285728716,
2352 | 18.993695303794954
2353 | ],
2354 | [
2355 | 21.534445000814113,
2356 | 18.681919818586092
2357 | ],
2358 | [
2359 | 13.102753121281047,
2360 | 15.828823297303897
2361 | ],
2362 | [
2363 | 6.8833237326992815,
2364 | 11.41899291577411
2365 | ],
2366 | [
2367 | 2.717666460511379,
2368 | 4.674875931270824
2369 | ],
2370 | [
2371 | 0,
2372 | 0
2373 | ]
2374 | ]
2375 | },
2376 | {
2377 | "type": "line",
2378 | "version": 1628,
2379 | "versionNonce": 554662528,
2380 | "isDeleted": false,
2381 | "id": "iTGPQMQ_yhEJxo1YwKJw4",
2382 | "fillStyle": "solid",
2383 | "strokeWidth": 1,
2384 | "strokeStyle": "solid",
2385 | "roughness": 0,
2386 | "opacity": 60,
2387 | "angle": 0.21948755520879892,
2388 | "x": 1161.7534700551575,
2389 | "y": 542.5833000269658,
2390 | "strokeColor": "#eebefa",
2391 | "backgroundColor": "#eebefa",
2392 | "width": 68.77605329767091,
2393 | "height": 98.57677556579792,
2394 | "seed": 882195072,
2395 | "groupIds": [
2396 | "PkgXFTGhIazaHYIR0_fqz",
2397 | "FHsd7QaAyapxh3DWBjCaN"
2398 | ],
2399 | "frameId": null,
2400 | "roundness": {
2401 | "type": 2
2402 | },
2403 | "boundElements": [],
2404 | "updated": 1712910290858,
2405 | "link": null,
2406 | "locked": false,
2407 | "startBinding": null,
2408 | "endBinding": null,
2409 | "lastCommittedPoint": null,
2410 | "startArrowhead": null,
2411 | "endArrowhead": null,
2412 | "points": [
2413 | [
2414 | 0,
2415 | 0
2416 | ],
2417 | [
2418 | -8.07080918537474,
2419 | 13.720375615137057
2420 | ],
2421 | [
2422 | -13.720375615137057,
2423 | 25.288535447507517
2424 | ],
2425 | [
2426 | -16.94869928928695,
2427 | 38.47085711695293
2428 | ],
2429 | [
2430 | -19.10091507205355,
2431 | 57.57177218900648
2432 | ],
2433 | [
2434 | -17.5056517030392,
2435 | 72.24224784762407
2436 | ],
2437 | [
2438 | -8.05392228800894,
2439 | 87.633236030493
2440 | ],
2441 | [
2442 | 9.04901123596535,
2443 | 98.57677556579792
2444 | ],
2445 | [
2446 | 32.55226371434478,
2447 | 97.65679114303433
2448 | ],
2449 | [
2450 | 46.74368403318804,
2451 | 89.88592999666514
2452 | ],
2453 | [
2454 | 49.67513822561736,
2455 | 73.25313428191566
2456 | ],
2457 | [
2458 | 46.44373599418248,
2459 | 59.14984585025575
2460 | ],
2461 | [
2462 | 34.21203077365387,
2463 | 49.978446196461384
2464 | ],
2465 | [
2466 | 15.334537452212007,
2467 | 39.546965008336215
2468 | ],
2469 | [
2470 | 4.16141448350231,
2471 | 25.17008657824654
2472 | ],
2473 | [
2474 | 0.47026372561592045,
2475 | 11.333028991018546
2476 | ],
2477 | [
2478 | 0,
2479 | 0
2480 | ]
2481 | ]
2482 | },
2483 | {
2484 | "type": "text",
2485 | "version": 215,
2486 | "versionNonce": 2143595904,
2487 | "isDeleted": false,
2488 | "id": "U2YPm1jsIvYTS3sbylTcP",
2489 | "fillStyle": "solid",
2490 | "strokeWidth": 2,
2491 | "strokeStyle": "solid",
2492 | "roughness": 1,
2493 | "opacity": 100,
2494 | "angle": 0,
2495 | "x": 1181.7916641235352,
2496 | "y": 539,
2497 | "strokeColor": "#1e1e1e",
2498 | "backgroundColor": "transparent",
2499 | "width": 78.5,
2500 | "height": 50,
2501 | "seed": 1526091136,
2502 | "groupIds": [
2503 | "FHsd7QaAyapxh3DWBjCaN"
2504 | ],
2505 | "frameId": null,
2506 | "roundness": null,
2507 | "boundElements": [
2508 | {
2509 | "id": "TIUy5lsVpFzE_KRGAXNR3",
2510 | "type": "arrow"
2511 | }
2512 | ],
2513 | "updated": 1712910864944,
2514 | "link": null,
2515 | "locked": false,
2516 | "fontSize": 20,
2517 | "fontFamily": 1,
2518 | "text": "tor2web\nproxy",
2519 | "textAlign": "center",
2520 | "verticalAlign": "top",
2521 | "containerId": null,
2522 | "originalText": "tor2web\nproxy",
2523 | "lineHeight": 1.25
2524 | },
2525 | {
2526 | "id": "u6MHMEPk9IYyN6aUEoLUN",
2527 | "type": "arrow",
2528 | "x": 576.8916625976562,
2529 | "y": 606.5,
2530 | "width": 180,
2531 | "height": 166,
2532 | "angle": 0,
2533 | "strokeColor": "#1e1e1e",
2534 | "backgroundColor": "#ffffff",
2535 | "fillStyle": "solid",
2536 | "strokeWidth": 2,
2537 | "strokeStyle": "solid",
2538 | "roughness": 1,
2539 | "opacity": 100,
2540 | "groupIds": [],
2541 | "frameId": null,
2542 | "roundness": {
2543 | "type": 2
2544 | },
2545 | "seed": 1985600128,
2546 | "version": 138,
2547 | "versionNonce": 688237184,
2548 | "isDeleted": false,
2549 | "boundElements": null,
2550 | "updated": 1712910354990,
2551 | "link": null,
2552 | "locked": false,
2553 | "points": [
2554 | [
2555 | 0,
2556 | 0
2557 | ],
2558 | [
2559 | 94,
2560 | -46
2561 | ],
2562 | [
2563 | 180,
2564 | -166
2565 | ]
2566 | ],
2567 | "lastCommittedPoint": null,
2568 | "startBinding": null,
2569 | "endBinding": {
2570 | "elementId": "aRyu512MdMK-i7FQvljwO",
2571 | "focus": 0.55949199953964,
2572 | "gap": 14.5
2573 | },
2574 | "startArrowhead": null,
2575 | "endArrowhead": "arrow"
2576 | },
2577 | {
2578 | "id": "4ydMUZkreQLeF6TqMQbsQ",
2579 | "type": "arrow",
2580 | "x": 810.8916625976562,
2581 | "y": 368.5,
2582 | "width": 338,
2583 | "height": 262,
2584 | "angle": 0,
2585 | "strokeColor": "#1e1e1e",
2586 | "backgroundColor": "#ffffff",
2587 | "fillStyle": "solid",
2588 | "strokeWidth": 2,
2589 | "strokeStyle": "solid",
2590 | "roughness": 1,
2591 | "opacity": 100,
2592 | "groupIds": [],
2593 | "frameId": null,
2594 | "roundness": {
2595 | "type": 2
2596 | },
2597 | "seed": 1703660160,
2598 | "version": 207,
2599 | "versionNonce": 1811483264,
2600 | "isDeleted": false,
2601 | "boundElements": null,
2602 | "updated": 1712910903644,
2603 | "link": null,
2604 | "locked": false,
2605 | "points": [
2606 | [
2607 | 0,
2608 | 0
2609 | ],
2610 | [
2611 | 92,
2612 | -68
2613 | ],
2614 | [
2615 | 338,
2616 | 194
2617 | ]
2618 | ],
2619 | "lastCommittedPoint": null,
2620 | "startBinding": {
2621 | "elementId": "57_CJ-VEYaox04qCg8qCi",
2622 | "focus": -0.7358889657499528,
2623 | "gap": 4.731483050111137
2624 | },
2625 | "endBinding": null,
2626 | "startArrowhead": null,
2627 | "endArrowhead": "arrow"
2628 | },
2629 | {
2630 | "type": "text",
2631 | "version": 287,
2632 | "versionNonce": 939743872,
2633 | "isDeleted": false,
2634 | "id": "EExnL0LLXmGmMBfOeVR1P",
2635 | "fillStyle": "solid",
2636 | "strokeWidth": 2,
2637 | "strokeStyle": "solid",
2638 | "roughness": 1,
2639 | "opacity": 100,
2640 | "angle": 0,
2641 | "x": 621.7833251953125,
2642 | "y": 523,
2643 | "strokeColor": "#1e1e1e",
2644 | "backgroundColor": "transparent",
2645 | "width": 41.400001525878906,
2646 | "height": 25,
2647 | "seed": 530594432,
2648 | "groupIds": [],
2649 | "frameId": null,
2650 | "roundness": null,
2651 | "boundElements": [],
2652 | "updated": 1712910613164,
2653 | "link": null,
2654 | "locked": false,
2655 | "fontSize": 20,
2656 | "fontFamily": 1,
2657 | "text": "visit",
2658 | "textAlign": "left",
2659 | "verticalAlign": "top",
2660 | "containerId": null,
2661 | "originalText": "visit",
2662 | "lineHeight": 1.25
2663 | },
2664 | {
2665 | "type": "text",
2666 | "version": 496,
2667 | "versionNonce": 871594624,
2668 | "isDeleted": false,
2669 | "id": "ugB-CWNu3odPDowYYw7fo",
2670 | "fillStyle": "solid",
2671 | "strokeWidth": 2,
2672 | "strokeStyle": "solid",
2673 | "roughness": 1,
2674 | "opacity": 100,
2675 | "angle": 0,
2676 | "x": 1412.1916618347168,
2677 | "y": 684,
2678 | "strokeColor": "#1e1e1e",
2679 | "backgroundColor": "transparent",
2680 | "width": 58.400001525878906,
2681 | "height": 25,
2682 | "seed": 1976482432,
2683 | "groupIds": [],
2684 | "frameId": null,
2685 | "roundness": null,
2686 | "boundElements": [],
2687 | "updated": 1712910909740,
2688 | "link": null,
2689 | "locked": false,
2690 | "fontSize": 20,
2691 | "fontFamily": 1,
2692 | "text": "lookup",
2693 | "textAlign": "left",
2694 | "verticalAlign": "top",
2695 | "containerId": null,
2696 | "originalText": "lookup",
2697 | "lineHeight": 1.25
2698 | },
2699 | {
2700 | "type": "text",
2701 | "version": 531,
2702 | "versionNonce": 885516928,
2703 | "isDeleted": false,
2704 | "id": "zLJJECxPG_Z0cJ2y2Uzey",
2705 | "fillStyle": "solid",
2706 | "strokeWidth": 2,
2707 | "strokeStyle": "solid",
2708 | "roughness": 1,
2709 | "opacity": 100,
2710 | "angle": 0,
2711 | "x": 1245.6916618347168,
2712 | "y": 441,
2713 | "strokeColor": "#1e1e1e",
2714 | "backgroundColor": "transparent",
2715 | "width": 58.33333206176758,
2716 | "height": 25,
2717 | "seed": 1330662784,
2718 | "groupIds": [],
2719 | "frameId": null,
2720 | "roundness": null,
2721 | "boundElements": [],
2722 | "updated": 1712910912441,
2723 | "link": null,
2724 | "locked": false,
2725 | "fontSize": 20,
2726 | "fontFamily": 1,
2727 | "text": "result",
2728 | "textAlign": "left",
2729 | "verticalAlign": "top",
2730 | "containerId": null,
2731 | "originalText": "result",
2732 | "lineHeight": 1.25
2733 | },
2734 | {
2735 | "type": "text",
2736 | "version": 475,
2737 | "versionNonce": 658763136,
2738 | "isDeleted": false,
2739 | "id": "ZhDKds3gMLCdB_RkBvTrh",
2740 | "fillStyle": "solid",
2741 | "strokeWidth": 2,
2742 | "strokeStyle": "solid",
2743 | "roughness": 1,
2744 | "opacity": 100,
2745 | "angle": 0,
2746 | "x": 1119.7249965667725,
2747 | "y": 689,
2748 | "strokeColor": "#1e1e1e",
2749 | "backgroundColor": "transparent",
2750 | "width": 50.20000076293945,
2751 | "height": 25,
2752 | "seed": 1138097536,
2753 | "groupIds": [],
2754 | "frameId": null,
2755 | "roundness": null,
2756 | "boundElements": [],
2757 | "updated": 1712910648595,
2758 | "link": null,
2759 | "locked": false,
2760 | "fontSize": 20,
2761 | "fontFamily": 1,
2762 | "text": "filter",
2763 | "textAlign": "left",
2764 | "verticalAlign": "top",
2765 | "containerId": null,
2766 | "originalText": "filter",
2767 | "lineHeight": 1.25
2768 | },
2769 | {
2770 | "id": "INg2QbNtk1hIN2Ud3g5n5",
2771 | "type": "line",
2772 | "x": 1068.8916625976562,
2773 | "y": 708.5,
2774 | "width": 83,
2775 | "height": 69,
2776 | "angle": 0,
2777 | "strokeColor": "#1e1e1e",
2778 | "backgroundColor": "#ffffff",
2779 | "fillStyle": "solid",
2780 | "strokeWidth": 2,
2781 | "strokeStyle": "solid",
2782 | "roughness": 1,
2783 | "opacity": 100,
2784 | "groupIds": [],
2785 | "frameId": null,
2786 | "roundness": {
2787 | "type": 2
2788 | },
2789 | "seed": 633171328,
2790 | "version": 164,
2791 | "versionNonce": 1566961024,
2792 | "isDeleted": false,
2793 | "boundElements": null,
2794 | "updated": 1712910932949,
2795 | "link": null,
2796 | "locked": false,
2797 | "points": [
2798 | [
2799 | 0,
2800 | 0
2801 | ],
2802 | [
2803 | 50,
2804 | -28
2805 | ],
2806 | [
2807 | 83,
2808 | -69
2809 | ]
2810 | ],
2811 | "lastCommittedPoint": null,
2812 | "startBinding": null,
2813 | "endBinding": null,
2814 | "startArrowhead": null,
2815 | "endArrowhead": null
2816 | },
2817 | {
2818 | "id": "GNL65DN9iRrPXe6FJiteq",
2819 | "type": "arrow",
2820 | "x": 1208.8916625976562,
2821 | "y": 636.5,
2822 | "width": 288,
2823 | "height": 83,
2824 | "angle": 0,
2825 | "strokeColor": "#1e1e1e",
2826 | "backgroundColor": "#ffffff",
2827 | "fillStyle": "solid",
2828 | "strokeWidth": 2,
2829 | "strokeStyle": "solid",
2830 | "roughness": 1,
2831 | "opacity": 100,
2832 | "groupIds": [],
2833 | "frameId": null,
2834 | "roundness": {
2835 | "type": 2
2836 | },
2837 | "seed": 1297214848,
2838 | "version": 620,
2839 | "versionNonce": 1938422400,
2840 | "isDeleted": false,
2841 | "boundElements": null,
2842 | "updated": 1712910899594,
2843 | "link": null,
2844 | "locked": false,
2845 | "points": [
2846 | [
2847 | 0,
2848 | 0
2849 | ],
2850 | [
2851 | 114,
2852 | 72
2853 | ],
2854 | [
2855 | 288,
2856 | 83
2857 | ],
2858 | [
2859 | 249,
2860 | 20
2861 | ]
2862 | ],
2863 | "lastCommittedPoint": null,
2864 | "startBinding": null,
2865 | "endBinding": {
2866 | "elementId": "bw6yd2uTX3558XN8RBku7",
2867 | "focus": -1.1681604357158686,
2868 | "gap": 9.852159189192204
2869 | },
2870 | "startArrowhead": null,
2871 | "endArrowhead": "arrow"
2872 | },
2873 | {
2874 | "id": "TIUy5lsVpFzE_KRGAXNR3",
2875 | "type": "arrow",
2876 | "x": 1379.8916625976562,
2877 | "y": 573.5,
2878 | "width": 153,
2879 | "height": 95,
2880 | "angle": 0,
2881 | "strokeColor": "#1e1e1e",
2882 | "backgroundColor": "#ffffff",
2883 | "fillStyle": "solid",
2884 | "strokeWidth": 2,
2885 | "strokeStyle": "solid",
2886 | "roughness": 1,
2887 | "opacity": 100,
2888 | "groupIds": [],
2889 | "frameId": null,
2890 | "roundness": {
2891 | "type": 2
2892 | },
2893 | "seed": 613870208,
2894 | "version": 306,
2895 | "versionNonce": 1854298752,
2896 | "isDeleted": false,
2897 | "boundElements": null,
2898 | "updated": 1712910882528,
2899 | "link": null,
2900 | "locked": false,
2901 | "points": [
2902 | [
2903 | 0,
2904 | 0
2905 | ],
2906 | [
2907 | -95,
2908 | -95
2909 | ],
2910 | [
2911 | -153,
2912 | -37
2913 | ]
2914 | ],
2915 | "lastCommittedPoint": null,
2916 | "startBinding": {
2917 | "elementId": "V6jZTQsUYoN2mn4Ag-kVh",
2918 | "focus": -0.2782627206819378,
2919 | "gap": 4.134976241073673
2920 | },
2921 | "endBinding": {
2922 | "elementId": "U2YPm1jsIvYTS3sbylTcP",
2923 | "focus": -0.33696500429383514,
2924 | "gap": 2.5
2925 | },
2926 | "startArrowhead": null,
2927 | "endArrowhead": "arrow"
2928 | },
2929 | {
2930 | "id": "n062WfA8BqEGAn0iNlHp7",
2931 | "type": "image",
2932 | "x": 776.5604070322065,
2933 | "y": 155,
2934 | "width": 508.6625111308994,
2935 | "height": 698.0000000000001,
2936 | "angle": 0,
2937 | "strokeColor": "transparent",
2938 | "backgroundColor": "#ffffff",
2939 | "fillStyle": "solid",
2940 | "strokeWidth": 2,
2941 | "strokeStyle": "solid",
2942 | "roughness": 1,
2943 | "opacity": 100,
2944 | "groupIds": [],
2945 | "frameId": null,
2946 | "roundness": null,
2947 | "seed": 736243072,
2948 | "version": 128,
2949 | "versionNonce": 115899776,
2950 | "isDeleted": false,
2951 | "boundElements": null,
2952 | "updated": 1712911290264,
2953 | "link": null,
2954 | "locked": false,
2955 | "status": "saved",
2956 | "fileId": "bc967b68117a93ee92d3564a56d233dbedc82486",
2957 | "scale": [
2958 | 1,
2959 | 1
2960 | ]
2961 | }
2962 | ],
2963 | "appState": {
2964 | "gridSize": null,
2965 | "viewBackgroundColor": "#ffffff"
2966 | },
2967 | "files": {
2968 | "91e708780a61d85dd587d22f067e5266db307c7f": {
2969 | "mimeType": "image/svg+xml",
2970 | "id": "91e708780a61d85dd587d22f067e5266db307c7f",
2971 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDE1MC41IDkxLjEiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDE1MC41IDkxLjEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+CjxnPgoJPGc+CgkJPGcgaWQ9ImxheWVyM18yMl8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKC05MiwtNjMuOTk5Nzc0KSI+CgkJCTxnIGlkPSJsYXllcjVfMjJfIj4KCQkJCTxnIGlkPSJwYXRoMjU1NF8zOF8iPgoJCQkJCTxwYXRoIGZpbGw9IiM2OEIwNDQiIGQ9Ik0xNzYuOSw3MC44bC0yLjQsOS42YzMuNC02LjgsOC45LTExLjksMTUuMi0xNi40Yy00LjYsNS4zLTguOCwxMC42LTExLjMsMTYgICAgICAgYzQuMy02LjEsMTAuMS05LjQsMTYuNi0xMS43Yy04LjcsNy43LTE1LjYsMTYuMS0yMC44LDI0LjRsLTQuMi0xLjhDMTcwLjcsODQuMiwxNzMuMiw3Ny40LDE3Ni45LDcwLjhMMTc2LjksNzAuOHoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjUzNF8xM18iPgoJCQkJCTxwYXRoIGZpbGw9IiNGNUY4REUiIGQ9Ik0xNjUuOCw4OS4xbDcuOSwzLjNjMCwyLTAuMiw4LjIsMS4xLDEwYzEzLjIsMTcsMTEsNTEuMi0yLjcsNTJjLTIwLjgsMC0yOC44LTE0LjEtMjguOC0yNy4xICAgICAgIGMwLTExLjksMTQuMi0xOS43LDIyLjctMjYuN0MxNjguMyw5OC43LDE2Ny45LDk0LjUsMTY1LjgsODkuMUwxNjUuOCw4OS4xeiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTM2XzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzdFNDc5OCIgZD0iTTE3My43LDkyLjNsMi45LDEuNWMtMC4zLDEuOSwwLjEsNi4xLDIsNy4xYzguNCw1LjIsMTYuMiwxMC44LDE5LjMsMTYuNWMxMSwxOS45LTcuNywzOC40LTI0LDM2LjYgICAgICAgYzguOC02LjUsMTEuNC0xOS45LDguMS0zNC42Yy0xLjMtNS43LTMuNC0xMC45LTcuMS0xNi44QzE3My4zLDk5LjksMTczLjksOTYuMywxNzMuNyw5Mi4zTDE3My43LDkyLjN6Ii8+CgkJCQk8L2c+CgkJCTwvZz4KCQkJPGcgaWQ9ImxheWVyNF8yMl8iPgoJCQkJPGcgaWQ9InBhdGgyNTQwXzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3MC41LDEwMS44Yy0wLjYsMy4xLTEuMyw4LjctNCwxMC44Yy0xLjEsMC44LTIuMywxLjYtMy41LDIuNGMtNC45LDMuMy05LjcsNi40LTExLjksMTQuMyAgICAgICBjLTAuNSwxLjctMC4xLDMuNSwwLjMsNS4yYzEuMiw0LjksNC42LDEwLjEsNy4zLDEzLjJjMCwwLjEsMC41LDAuNSwwLjUsMC42YzIuMiwyLjYsMi45LDMuNCwxMS4zLDUuM2wtMC4yLDAuOSAgICAgICBjLTUuMS0xLjMtOS4yLTIuNi0xMS45LTUuNmMwLTAuMS0wLjUtMC41LTAuNS0wLjVjLTIuOC0zLjItNi4zLTguNi03LjUtMTMuN2MtMC41LTItMC45LTMuNi0wLjMtNS43ICAgICAgIGMyLjMtOC4yLDcuMy0xMS41LDEyLjMtMTQuOWMxLjEtMC43LDIuNS0xLjQsMy42LTIuM0MxNjguMywxMTAuMywxNjkuNCwxMDUuNiwxNzAuNSwxMDEuOEwxNzAuNSwxMDEuOHoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjU0Ml8yM18iPgoJCQkJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xNzIuNywxMTQuOGMwLjEsMy41LTAuMyw1LjMsMC42LDcuOGMwLjUsMS41LDIuNCwzLjUsMi45LDUuNWMwLjcsMi42LDEuNSw1LjUsMS41LDcuMyAgICAgICBjMCwyLTAuMSw1LjgtMSw5LjhjLTAuNywzLjMtMi4yLDYuMi00LjgsNy44Yy0yLjctMC41LTUuOC0xLjUtNy42LTMuMWMtMy42LTMuMS02LjctOC4zLTcuMS0xMi44Yy0wLjMtMy43LDMuMS05LjIsNy45LTExLjkgICAgICAgYzQtMi40LDUtNSw1LjktOS40Yy0xLjIsMy44LTIuNCw2LjktNi4zLDljLTUuNywzLTguNiw3LjktOC4zLDEyLjdjMC40LDYuMSwyLjgsMTAuMiw3LjYsMTMuNWMyLDEuNCw1LjgsMi45LDguMiwzLjN2LTAuMyAgICAgICBjMS44LTAuMyw0LjEtMy4zLDUuMy03LjJjMS0zLjYsMS40LTguMSwxLjMtMTFjLTAuMS0xLjctMC44LTUuMy0yLjItOC42Yy0wLjctMS44LTEuOS0zLjYtMi42LTQuOSAgICAgICBDMTczLjEsMTIwLjgsMTczLjEsMTE4LDE3Mi43LDExNC44eiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTQ0XzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3Mi4xLDEyOC41YzAuMSwyLjQsMSw1LjQsMS40LDguNWMwLjMsMi4zLDAuMiw0LjYsMC4xLDYuNmMtMC4xLDIuMy0wLjgsNi41LTEuOSw4LjYgICAgICAgYy0xLTAuNS0xLjQtMS0yLjEtMS44Yy0wLjgtMS4xLTEuNC0yLjMtMS45LTMuNmMtMC40LTEtMC45LTIuMi0xLjEtMy41Yy0wLjMtMi0wLjItNS4yLDIuMS04LjRjMS44LTIuNiwyLjItMi44LDIuOC01LjcgICAgICAgYy0wLjgsMi42LTEuNCwyLjktMy4zLDUuMWMtMi4xLDIuNC0yLjQsNi0yLjQsOC45YzAsMS4yLDAuNSwyLjYsMSwzLjhjMC41LDEuMywxLDIuNywxLjcsMy43YzEuMSwxLjYsMi41LDIuNiwzLjIsMi43ICAgICAgIGMwLDAsMCwwLDAsMGMwLDAsMCwwLDAsMHYtMC4xYzEuMy0xLjUsMi4xLTIuOSwyLjQtNC40YzAuMy0xLjgsMC40LTMuNSwwLjYtNS42YzAuMi0xLjgsMC4xLTQuMS0wLjQtNi41ICAgICAgIEMxNzMuNywxMzMuOCwxNzIuNiwxMzAuNywxNzIuMSwxMjguNUwxNzIuMSwxMjguNXoiLz4KCQkJCTwvZz4KCQkJCTxnIGlkPSJwYXRoMjU1MF8yM18iPgoJCQkJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xNzIuNSw5OWMwLjEsMy41LDAuMywxMCwxLjMsMTIuNmMwLjMsMC45LDIuOCw0LjcsNC41LDkuNGMxLjIsMy4yLDEuNSw2LjIsMS43LDcuMSAgICAgICBjMC44LDMuOC0wLjIsMTAuMy0xLjUsMTYuNGMtMC43LDMuMy0zLDcuNC01LjYsOWwtMC41LDAuOWMxLjUtMC4xLDUuMS0zLjYsNi40LTguMWMyLjItNy41LDMtMTEsMi0xOS40ICAgICAgIGMtMC4xLTAuOC0wLjUtMy42LTEuOC02LjVjLTEuOS00LjUtNC42LTguOC00LjktOS43QzE3My40LDEwOS4zLDE3Mi42LDEwMy4xLDE3Mi41LDk5TDE3Mi41LDk5eiIvPgoJCQkJPC9nPgoJCQkJPGcgaWQ9InBhdGgyNTUyXzIzXyI+CgkJCQkJPHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTE3My43LDkyLjZjLTAuMiwzLjYtMC4yLDYuNCwwLjQsOS4xYzAuNywyLjksNC41LDcuMSw2LjEsMTEuOWMzLDkuMiwyLjIsMjEuMiwwLjEsMzAuNSAgICAgICBjLTAuOCwzLjMtNC42LDguMS04LjUsOS42bDIuOCwwLjdjMS41LTAuMSw1LjUtMy44LDcuMS04YzIuNS02LjcsMy0xNC42LDItMjNjLTAuMS0wLjgtMS40LTgtMi43LTExICAgICAgIGMtMS44LTQuNS00LjctNy43LTUuNy0xMC41Yy0wLjgtMi4xLTEuMS03LjctMC42LTguOEwxNzMuNyw5Mi42eiIvPgoJCQkJPC9nPgoJCQk8L2c+CgkJPC9nPgoJCTxnIGlkPSJwYXRoMjUyOF8xOF8iPgoJCQk8cGF0aCBmaWxsPSIjN0U0Nzk4IiBkPSJNMy44LDguOGg1NC4xYzIsMCwzLjgsMS43LDMuOCwzLjh2MTZjMCwyLjEtMS44LDMuOC0zLjgsMy44SDQ2LjhjLTIuNSwwLTMuNiwxLjQtMy42LDN2NTIuMyAgICAgYzAsMS44LTEuNCwzLjEtMy4xLDMuMUgyMS43Yy0xLjcsMC0zLTEuMy0zLTMuMVYzNC45YzAtMS42LTEuNS0yLjYtMi42LTIuNkgzLjhjLTIuMSwwLTMuOC0xLjctMy44LTMuOHYtMTYgICAgIEMwLDEwLjUsMS43LDguOCwzLjgsOC44eiIvPgoJCTwvZz4KCQk8ZyBpZD0icGF0aDI1MzJfMThfIj4KCQkJPHBhdGggZmlsbD0iIzdFNDc5OCIgZD0iTTE0Mi42LDMwaDQuOGMxLjgsMCwzLjIsMS40LDMuMiwzLjF2MTcuMWMwLDIuMiwwLjEsMy4xLTIuNiwzLjFjLTUuMywwLTcuNywyLjgtNy43LDUuOXYyOC45ICAgICBjMCwxLjMtMS4zLDIuNS0yLjgsMi41aC0xNy4yYy0xLjUsMC0yLjgtMS4xLTIuOC0yLjVWNTUuMmMwLTAuNiwwLTEuNCwwLjEtMS45YzAuOS0xMi4yLDEwLjUtMjEuOSwyMi42LTIzLjIgICAgIEMxNDAuNSwzMC4xLDE0MS45LDMwLDE0Mi42LDMwTDE0Mi42LDMweiIvPgoJCTwvZz4KCTwvZz4KCTxnPgoJCTxwYXRoIGZpbGw9IiMwMTAxMDEiIGQ9Ik0xMDEuNyw0Ni4zYy0yLjktMi42LTYuNS00LjgtMTAuMy02LjljLTEuNy0wLjktNi45LTUtNS4xLTEwLjhsLTEzLjEtNS40bC0wLjksMC43ICAgIGM0LjQsNy45LDIuMSwxMi4xLTAuMSwxMy41Yy00LjQsMy0xMC44LDYuOC0xMy45LDEwLjFjLTYuMSw2LjMtNy45LDEyLjMtNy4zLDIwLjFjMC42LDEwLjEsNy45LDE4LjUsMTcuOCwyMS44ICAgIGM0LjMsMS40LDguMywxLjYsMTIuNywxLjZjNy4xLDAsMTQuNS0xLjksMTkuOC02LjNjNS43LTQuNyw5LTExLjgsOS0xOS4xQzExMC4zLDU4LjMsMTA3LjIsNTEuMywxMDEuNyw0Ni4zeiBNOTkuOCw4My4yICAgIGMtNC45LDQtMTMuNyw2LjgtMTguNCw2LjZjLTUuMi0wLjMtMTAuMy0xLjEtMTQuOC0zLjNjLTcuOS0zLjgtMTMuMS0xMi4xLTEzLjUtMTguOEM1Mi40LDU0LDU5LDUwLjEsNjUuMSw0NS4xICAgIGMzLjQtMi44LDguMi00LjIsMTAuOS05LjJjMC41LTEuMSwwLjgtMy41LDAuMi02Yy0wLjMtMC45LTEuNS0zLjktMi00LjZsOS44LDQuM2MtMS4yLDQuNSwyLjUsOS4yLDUuNSwxMC45ICAgIGMzLDEuNyw3LjcsNC45LDEwLjYsNy41YzUuMSw0LjUsNy43LDEwLjksNy43LDE3LjZDMTA3LjgsNzIuMywxMDUsNzguOSw5OS44LDgzLjJ6Ii8+Cgk8L2c+CjwvZz4KPC9zdmc+",
2972 | "created": 1712908575400,
2973 | "lastRetrieved": 1712910044713
2974 | },
2975 | "3c0354edb1c6699d5dddc39861f82e84751e6663": {
2976 | "mimeType": "image/svg+xml",
2977 | "id": "3c0354edb1c6699d5dddc39861f82e84751e6663",
2978 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiBpZD0ic3ZnMjk4NSIgdmVyc2lvbj0iMS4xIiBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjQgcjk5MzkiIHdpZHRoPSI0ODUuMzM2MjciIGhlaWdodD0iNDg1LjMzNjI3IiBzb2RpcG9kaTpkb2NuYW1lPSI2MDBweC1GcmFuY2Vfcm9hZF9zaWduX0Ixai5zdmdbMV0ucG5nIj4KICA8bWV0YWRhdGEgaWQ9Im1ldGFkYXRhMjk5MSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgICAgICA8ZGM6dGl0bGUvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcyBpZD0iZGVmczI5ODkiLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3IHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiM2NjY2NjYiIGJvcmRlcm9wYWNpdHk9IjEiIG9iamVjdHRvbGVyYW5jZT0iMTAiIGdyaWR0b2xlcmFuY2U9IjEwIiBndWlkZXRvbGVyYW5jZT0iMTAiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIiBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyNzIiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijc0NSIgaWQ9Im5hbWVkdmlldzI5ODciIHNob3dncmlkPSJmYWxzZSIgaW5rc2NhcGU6c25hcC1nbG9iYWw9InRydWUiIGlua3NjYXBlOnNuYXAtZ3JpZHM9InRydWUiIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSIgaW5rc2NhcGU6YmJveC1wYXRocz0idHJ1ZSIgaW5rc2NhcGU6YmJveC1ub2Rlcz0idHJ1ZSIgaW5rc2NhcGU6c25hcC1iYm94LWVkZ2UtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLWJib3gtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpvYmplY3QtcGF0aHM9InRydWUiIGlua3NjYXBlOnNuYXAtaW50ZXJzZWN0aW9uLXBhdGhzPSJ0cnVlIiBpbmtzY2FwZTpvYmplY3Qtbm9kZXM9InRydWUiIGlua3NjYXBlOnNuYXAtc21vb3RoLW5vZGVzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLW1pZHBvaW50cz0idHJ1ZSIgaW5rc2NhcGU6c25hcC1vYmplY3QtbWlkcG9pbnRzPSJ0cnVlIiBpbmtzY2FwZTpzbmFwLWNlbnRlcj0iZmFsc2UiIGZpdC1tYXJnaW4tdG9wPSIwIiBmaXQtbWFyZ2luLWxlZnQ9IjAiIGZpdC1tYXJnaW4tcmlnaHQ9IjAiIGZpdC1tYXJnaW4tYm90dG9tPSIwIiBpbmtzY2FwZTp6b29tPSIwLjU5OTcwMTc2IiBpbmtzY2FwZTpjeD0iMzkwLjU2NDk5IiBpbmtzY2FwZTpjeT0iMjQ0LjM0MzY1IiBpbmtzY2FwZTp3aW5kb3cteD0iODYiIGlua3NjYXBlOndpbmRvdy15PSItOCIgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIj4KICAgIDxpbmtzY2FwZTpncmlkIHR5cGU9Inh5Z3JpZCIgaWQ9ImdyaWQyOTk1IiBlbXBzcGFjaW5nPSI1IiB2aXNpYmxlPSJ0cnVlIiBlbmFibGVkPSJ0cnVlIiBzbmFwdmlzaWJsZWdyaWRsaW5lc29ubHk9InRydWUiIG9yaWdpbng9Ii01Ny4zMzE4NnB4IiBvcmlnaW55PSItNTcuMzMxODZweCIvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxnIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiIGlkPSJsYXllcjEiIGlua3NjYXBlOmxhYmVsPSIxIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01Ny4zMzE4NiwtNTcuMzMxODYpIj4KICAgIDxwYXRoIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgaWQ9InBhdGgyOTk3IiBzb2RpcG9kaTpjeD0iMzAwIiBzb2RpcG9kaTpjeT0iMzAwIiBzb2RpcG9kaTpyeD0iMjQwIiBzb2RpcG9kaTpyeT0iMjQwIiBkPSJNIDU0MCwzMDAgQyA1NDAsNDMyLjU0ODM0IDQzMi41NDgzNCw1NDAgMzAwLDU0MCAxNjcuNDUxNjYsNTQwIDYwLDQzMi41NDgzNCA2MCwzMDAgNjAsMTY3LjQ1MTY2IDE2Ny40NTE2Niw2MCAzMDAsNjAgNDMyLjU0ODM0LDYwIDU0MCwxNjcuNDUxNjYgNTQwLDMwMCB6IiB0cmFuc2Zvcm09Im1hdHJpeCgxLjAwNTg3ODMsMCwwLDEuMDA1ODc4MywtMS43NjM0OSwtMS43NjM0OSkiLz4KICAgIDxwYXRoIHNvZGlwb2RpOnR5cGU9ImFyYyIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDojZmYwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoyLjU7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIgaWQ9InBhdGg0MDA1IiBzb2RpcG9kaTpjeD0iMzA0Ljc1IiBzb2RpcG9kaTpjeT0iMjE0Ljc1IiBzb2RpcG9kaTpyeD0iNDQuNzUiIHNvZGlwb2RpOnJ5PSI0NC43NSIgZD0ibSAzNDkuNSwyMTQuNzUgYyAwLDI0LjcxNDc0IC0yMC4wMzUyNiw0NC43NSAtNDQuNzUsNDQuNzUgLTI0LjcxNDc0LDAgLTQ0Ljc1LC0yMC4wMzUyNiAtNDQuNzUsLTQ0Ljc1IDAsLTI0LjcxNDc0IDIwLjAzNTI2LC00NC43NSA0NC43NSwtNDQuNzUgMjQuNzE0NzQsMCA0NC43NSwyMC4wMzUyNiA0NC43NSw0NC43NSB6IiB0cmFuc2Zvcm09Im1hdHJpeCg1LjEzNjQ0MTEsMCwwLDUuMTM2NDQxMSwtMTI2NS4zMzA0LC04MDMuMDUwNzMpIi8+CiAgICA8cmVjdCBzdHlsZT0iY29sb3I6IzAwMDAwMDtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjIuNTttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiBpZD0icmVjdDQwMDEiIHdpZHRoPSIzNDUiIGhlaWdodD0iODAuNTk5OTk4IiB4PSIxMjcuNSIgeT0iMjU5LjcwMDAxIi8+CiAgPC9nPgo8L3N2Zz4=",
2979 | "created": 1712910185210,
2980 | "lastRetrieved": 1712910185210
2981 | },
2982 | "bc967b68117a93ee92d3564a56d233dbedc82486": {
2983 | "mimeType": "image/svg+xml",
2984 | "id": "bc967b68117a93ee92d3564a56d233dbedc82486",
2985 | "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB3aWR0aD0iMjEwbW0iIGhlaWdodD0iMjk3bW0iIHZpZXdCb3g9IjAgMCAyMTAgMjk3IiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmczMSIgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi41ICgyMDYwZWMxZjlmLCAyMDIwLTA0LTA4KSIgc29kaXBvZGk6ZG9jbmFtZT0icm9sbGVyLnN2ZyI+CiAgPGRlZnMgaWQ9ImRlZnMyNSIvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9ImJhc2UiIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyY29sb3I9IiM2NjY2NjYiIGJvcmRlcm9wYWNpdHk9IjEuMCIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6em9vbT0iMi44IiBpbmtzY2FwZTpjeD0iMjE0LjkxMDEyIiBpbmtzY2FwZTpjeT0iOTQyLjI0NTg4IiBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgc2hvd2dyaWQ9ImZhbHNlIiBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjE0MDMiIGlua3NjYXBlOndpbmRvdy14PSIwIiBpbmtzY2FwZTp3aW5kb3cteT0iMCIgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIvPgogIDxtZXRhZGF0YSBpZD0ibWV0YWRhdGEyOCI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz4KICAgICAgICA8ZGM6dGl0bGUvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZyBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIgaWQ9ImxheWVyMSI+CiAgICA8ZyBpZD0iZzQzIiB0cmFuc2Zvcm09InJvdGF0ZSgxMDUuMDg1ODEsNjYuNTIzODEsNjkuNDU4MzM0KSI+CiAgICAgIDxwYXRoIGQ9Ik0gNjYuNDgwNzQ4LDY5LjI3MDc3NiBDIDY1LjM4ODM4OSw2OS4zNDYwMzcgNjMuMzUyODQ0LDcwLjI4MTk4NyA2My4wNjc4ODgsNzAuNTc1NzAxIDYyLjk5MTg5NCw3MC42NTQwMiA2Mi45Nzc0MTMsNzAuNzQ5MzczIDYyLjk5NzYyMiw3MC44NDY3MTQgNjIuOTg0MDQ5LDcwLjg2NTU1MiA2Mi44NDQ1OTUsNzEuMDY3MTk2IDYyLjgzNzAxOCw3MS4xOTgwMjcgNjIuODE4NTIzLDcxLjUxNzkzNSA2My4wNTgwNzQsNzEuODA5MjY4IDYzLjAzNzc3Myw3Mi4xMzE1MyA2My4wMTUyMDQsNzIuNDg5Njk3IDYyLjY4NjQ1OSw3My4xNjU0MTYgNjIuNjg2NDU5LDczLjE2NTQxNiBMIDYxLjkxMzU1OCw3My4zNjYxNzEgNjEuNjkyNzI2LDczLjI4NTg2OCBDIDYxLjc4OTAzNSw3My4xNzM2OTIgNjEuNzkzMjk1LDczLjE2NjMxNiA2MS44NjMzNjksNzIuOTg0NzQ1IDYxLjkxNjUzNyw3Mi44NDY5NzQgNjEuNTcyMjc1LDcyLjY3MzU2OSA2MS41NzIyNzUsNzIuNjczNTY5IDYxLjU3MjI3NSw3Mi42NzM1NjkgNjEuNTg4NzU4LDcyLjUyMzIyNyA2MS40OTE5NzEsNzIuNTQzMDc2IEwgNjEuMjQxMDI3LDcyLjU5MzI2NSBDIDYxLjExNTE5MSw3Mi41NTkyNzcgNjEuMDQ1ODg5LDcyLjQ1MjYxIDYwLjg0OTU1LDcyLjUwMjkyNiA2MC44NDk1NSw3Mi41MDI5MjYgNjAuNzU1NjUyLDcyLjM5NTM3OCA2MC42Nzg5MDcsNzIuMzYyMzk4IDYwLjMyNjI5Niw3Mi4yMTA4MjMgNjAuMzAyMTY2LDcyLjY2MTA1OSA2MC4xMzY4ODEsNzIuNjQzNDY1IDYwLjIyODE1NCw3Mi42ODgyNDUgNjAuMzAwNTQ0LDcyLjY5MTgxMiA2MC4zNDc2NzUsNzIuNjczNTggNjAuMjQ2MTEyLDcyLjc3OTYzOCA2MC4wOTM5NTIsNzIuOTM3NjU4IDYwLjAyNjQ3LDczLjA4NTEzOSA1OS43NTI1NDcsNzMuNjgzNTQ3IDYwLjA3MDEwMyw3My45NzY1NzMgNTkuOTg2MzIzLDc0LjUxMDUwMiA2MC4wOTEzNjUsNzQuNDUxMTAzIDYwLjEzOTc5NCw3NC4zNjI3OTYgNjAuMTY3MDA0LDc0LjI3OTYzMiA2MC4xMjg4OTksNzQuNjgyNDYgNjAuMzE5NTY1LDc0LjQ3OTM4NSA2MC4zNjc3NTcsNzQuNzYxNDM4IDYwLjUyMTQ3NCw3NC4zNTYyMDMgNjAuMzEwMDA2LDc0LjU5MzQxNyA2MC42ODg5NjEsNzQuMjU5NTUgNjAuNTQ2ODg3LDc0LjQ0NTc4IDYwLjY5NzAwNCw3NC43MzI3NTggNjAuNDg4MjA4LDc0Ljg0MTczOSA2MC44MjIxNjUsNzQuNzk2MTA0IDYwLjk3MjEwNSw3NC4zNjcxODMgNjEuMTgwODA4LDc0LjA2ODgzOSA2MS4yODk5OTYsNzMuOTEyNzg1IDYxLjE1MDk5Miw3NC4wNDgwOTUgNjEuMjUxMDczLDczLjgzNzk3MSA2MS4zNTExMzksNzMuNjI3NzUyIDYxLjY5Mjc0Miw3My43NTc2NjUgNjEuNjkyNzQyLDczLjc1NzY2NSA2MS42OTI3NDIsNzMuNzU3NjY1IDYxLjc2MjY4NSw3NC4wODc2NTMgNjEuODgzNDU5LDc0LjE4OTMwNiA2Mi4wMTEyMzIsNzQuMjk2ODQzIDYyLjM2NTI2NSw3NC4zMDk3NiA2Mi4zNjUyNjUsNzQuMzA5NzYgTCA2Mi42MTYyMSw3NC40MjAxNzMgQyA2Mi4yNDY3OTgsNzQuNDUwMDQgNjEuOTAxODYxLDc0LjUxNTg2NSA2MS43ODMwNjMsNzQuNTkwODE3IDYxLjYxNjgzMyw3NC42OTU3MDMgNjEuNTA3OTQ5LDc0Ljc3OTA2NSA2MS40MjE2OTUsNzQuODYxODI5IDYxLjM3NDgzNyw3NC44NTc0MTEgNjEuMjc0MzczLDc0Ljg1NTE2MiA2MS4yNTEwNTIsNzQuODUxODAyIDYxLjA2MDE2MSw3NC44MjQxOTUgNjAuNjcxMDg1LDc1LjU5NzI2NSA2MC45NDk5Myw3NS42ODQ5NDggTCA2Mi42NzY0NDIsNzYuMjI3IEMgNjIuNTk2NjQxLDc2LjI5NDgwNyA2Mi41MTAyODYsNzYuNDMyMjIxIDYyLjQ5NTc2MSw3Ni40NTc4NyA2Mi40NzY0Miw3Ni40OTIwNjUgNjIuMDIzOTgyLDc3Ljc1Mjc0MSA2Mi4wMjM5ODIsNzcuNzUyNzQxIEwgNjEuOTIzNjA0LDc3LjY0MjMyNSA2MS43MzI4ODUsNzcuNzIyNjI5IDYwLjgwOTQxLDc3LjY0MjMyNSA2MC44OTk3NDksNzcuNTAxNzk0IDYwLjcwOTAyOSw3Ny4zNzEzMDQgQyA2MC43MDkwMjksNzcuMzcxMzA0IDYwLjg4MTc2Myw3Ni4yODg4MTQgNjAuODU5NTk2LDc2LjE0NjcwNyA2MC44MTM2ODUsNzUuODUyMDY3IDYwLjI3NzQwNyw3NS4yNjMzNjkgNjAuMjc3NDA3LDc1LjI2MzM2OSA2MC4zNDY0NjYsNzUuMTIyNjQ4IDYwLjI1NTEyOSw3NC45NzYxOSA2MC4xOTcxMDMsNzQuODkxOTczIDYwLjE0OTM0OCw3NC44MjI1MjggNjAuMTE3MjY4LDc0Ljc3NzYxNSA2MC4xMDY3NjQsNzQuODIxNzA4IDYwLjA4MDE3LDc0LjkzMzg2MiA2MC4xNjQxMjUsNzUuMDU4NDg5IDYwLjA5NjczNiw3NS4wNzI2NTIgNjAuMDk2NzM2LDc1LjA3MjY1MiA2MC4wNzMwNTYsNzUuMTQyODggNTkuOTU2MjA4LDc1LjA0MjU0IDU5Ljg5OTUxMyw3NC45OTM4NTkgNTkuOTI2MDk1LDc0Ljc1MTQ0NSA1OS45MjYwOTUsNzQuNzUxNDQ1IDU5LjkwNzQ2OSw3NC43MjMyMTEgNTkuODk4MzgsNzQuNjYyNjY0IDU5Ljg0NTc5Miw3NC43NDE0MTcgTCA1OS44MjU3MSw3NS4wMDI0MDIgQyA1OS44MjU3MSw3NS4wMDI0MDIgNTkuNzc2NDY2LDc0Ljk1NTQ0NCA1OS43NjU0OCw3NC44ODE5NDggNTkuNzQ5NzY0LDc0Ljc3ODMyOSA1OS43Nzk1Myw3NC42MzM1NDQgNTkuNzE1Mjk0LDc0LjY4MTE5MyA1OS42MzM3MzEsNzQuNzQxNjk1IDU5LjczOTc0Miw3NC45NzY0NjggNTkuNzQ1NDA2LDc1LjAyMjQ3OSA1OS43NTA5MzYsNzUuMDY4NTA4IDU5LjU3NTQzOCw3NC45MjY4MTEgNTkuNTU0Njg5LDc0Ljg1MTgzNiA1OS41MzM5NDYsNzQuNzc2ODYxIDU5LjQ5NTIsNzQuODI2MDY1IDU5LjUxNDUzOSw3NC45MjIwOTkgNTkuNTMzOTA2LDc1LjAxODExOSA1OS45OTA3MzYsNzUuMzMyNTIgNjAuMTY3MDAxLDc1LjM4Mzg0OSA2MC4yODg1MDYsNzUuNDE5MjI0IDYwLjU1NjQxNSw3NS44Mzc0MjUgNjAuNjE4Njk4LDc2LjEyNjY0MSA2MC42NzU5ODgsNzYuMzkyNTQ3IDYwLjUyODM1OSw3Ni45NTk3ODcgNjAuNTI4MzU5LDc2Ljk1OTc4NyA2MC40Njk2MTMsNzYuNDM0MjcyIDYwLjQ1MTMxMiw3NS44OTE0IDU5Ljg4NTk1LDc1LjY4NDk3MiA1OS44OTQ5Miw3NS42MTMyOTEgNTkuNzQwOTUxLDc1LjUwOTUyOSA1OS42NTUwOCw3NS41MDQyOTMgNTkuNDcxOTIyLDc1LjQ5MzEwMSA1OS4zMzM4NzYsNzUuMzEzNTc0IDU5LjMzMzg3Niw3NS4zMTM1NzQgNTkuMzExNDM5LDc1LjE1MDY4OCA1OS4xODg4MSw3NS4wNjAxNDggNTkuMjIzNDYsNzUuMjYzMzg1IDU5LjI2NTYxOSw3NS4zMzc3MDYgNTkuMzAzNzYxLDc1LjQzNDAyOCA1OS4zMDM3NjEsNzUuNDM0MDI4IDU5LjMwMzc2MSw3NS40MzQwMjggNTkuMTIzMzg3LDc1LjIyMDg4NyA1OS4wOTI5NjgsNzUuMTYzMDE1IDU5LjA2MjU4LDc1LjEwNTMzOCA1OC45OTM0NzQsNzUuMTI0NTgyIDU5LjAwMjYyOCw3NS4xODMwOTcgNTkuMDExNjI0LDc1LjI0MTYzMSA1OS4xOTMzNDgsNzUuNTA0MzAxIDU5LjE5MzM0OCw3NS41MDQzMDEgNTkuMTkzMzQ4LDc1LjUwNDMwMSA1OS4wMTU3MDQsNzUuMzk5OTQ5IDU4Ljk2MjQ3NSw3NS4zNjM3NzMgNTguOTA5MjQ2LDc1LjMyNzYzOSA1OC44NzEwNjIsNzUuMjkyMDkyIDU4Ljg2MjEsNzUuMzYzNzczIDU4Ljg1MzEzMSw3NS40MzU0NTkgNTkuMTIwMDY5LDc1LjU2ODE5IDU5LjE5MzM1OCw3NS42MjQ3NTggNTkuMjY2NjMyLDc1LjY4MTMyMSA1OS43ODU2MjgsNzUuNzgzNjY0IDYwLjA1NjYxNCw3NS45NTYwMTYgNjAuMzI3NjAxLDc2LjEyODM1NSA2MC4zMjE3MDEsNzcuMTA3Nzc0IDYwLjI5NzUyMyw3Ny4xNTA1MDQgNjAuMjczMzQsNzcuMTkzMjU2IDYwLjE4NzEwNyw3Ny4xMjAzOTIgNjAuMTg3MTA3LDc3LjEyMDM5MiBMIDYwLjA3NjY5MSw3Ny4yOTEwMzIgSCA1OS45NzYzMTMgTCA1OS45MDYwNDgsNzcuNTMxOTQxIDU5LjcxNTMzMSw3Ny41OTIxNjggNTkuMzUzOTYzLDc3LjQzMTU2MyBDIDU5LjM1Mzk2Myw3Ny40MzE1NjMgNTkuNTg5NzYsNzcuMDYwNzUgNTkuNjI0OTc2LDc2Ljk3OTg2NiA1OS42NjAyMDIsNzYuODk4OTgxIDU5LjMzMzg4MSw3Ni43NDg5OTkgNTkuMzMzODgxLDc2Ljc0ODk5OSA1OS4zMzM4ODEsNzYuNzQ4OTk5IDU5LjMyMDMzNSw3Ni42MjY3MyA1OS4yODM2OSw3Ni41OTg0MzMgNTkuMjQ3MDUsNzYuNTcwMTQ2IDU5LjA1NzgxOCw3Ni42Mjg3MDMgNTguOTYyNDg2LDc2LjY0ODYxOSA1OC44NjcxMTcsNzYuNjY4MzMgNTguOTU2NDI3LDc2LjU0ODI1MiA1OC42MjEyLDc2LjUwODA5MSA1OC41MjMyMjcsNzYuNDk2MjExIDU4LjM4MDI5NCw3Ni41NDgyNDEgNTguMzgwMjk0LDc2LjU0ODI0MSA1OC4zODAyOTQsNzYuNTQ4MjQxIDU4LjE5NzkwNiw3Ni41NTQ5MDkgNTguMTA5MjgxLDc2LjU4ODM5NCA1Ny45NzcwMDgsNzYuNjM4MzM3IDU3Ljc0NzkxMyw3Ni44MTkyNjIgNTcuNzQ3OTEzLDc2LjgxOTI2MiBMIDU3Ljc5ODEwMiw3Ni44NDkzNzQgNTcuNjg3Njg2LDc2Ljk5OTk0MyA1Ny43NTc5NTEsNzcuMDMwMDU1IEMgNTcuNjk5NzA5LDc3LjE3Mzc5MyA1Ny41NzU1MDMsNzcuMzE1NTQxIDU3LjU5NzM0Nyw3Ny40NzE3MjQgTCA1Ny43NDc5MTMsNzcuNDQxNjEyIEMgNTcuNjUwNzE2LDc3LjcxMDY2NyA1Ny43MjYyNDQsNzcuNjkwMDQ1IDU3LjcyNzgzMSw3Ny43NTI3ODggNTcuNzY3NDQyLDc3LjY5NzI3NCA1Ny43NjA5ODQsNzcuNTcyOTExIDU3Ljg1ODMyMSw3Ny42MTIyNiA1Ny44MTc5NjIsNzcuNzgxMjg0IDU3Ljg0MDQ2Miw3Ny45MzAzNDIgNTcuODk4NDcyLDc4LjA3NDAxMSA1Ny45ODI4NzksNzcuOTE4NTEgNTguMDU2OTQxLDc3Ljg2NTczOSA1OC4xMjkzNDIsNzcuODUzMTc5IEwgNTguMTA5MjYsNzcuOTgzNjcyIDU4LjIyOTcxMiw3Ny44ODMyOTQgQyA1OC4yMDM1NzEsNzguMDEwMTI1IDU4LjIyMjc3OSw3OC4wNTM1MzggNTguMjM5NzM5LDc4LjEwNDEyMyA1OC4yODA5MDMsNzguMDA3MTM1IDU4LjMxNTk3Niw3Ny44ODEzMTggNTguNDcwNjA3LDc3Ljg1MzE3OSBMIDU4LjQzMDQ1OSw3Ny45OTM3MDcgQyA1OC40OTQwODMsNzguMDQ1MjM1IDU4Ljg4NjY1Myw3Ny43MDcxOSA1OC45NTI0MjksNzcuNzMyNzI4IDU5LjAzODUzLDc3Ljc2NjE4NCA1OS4zNTM5MzQsNzguMDg0MDQxIDU5LjM1MzkzNCw3OC4wODQwNDEgNTkuMzUzOTM0LDc4LjA4NDA0MSA1OS40OTA4LDc4LjI3MTc0IDU5LjU4NDgwMiw3OC4zMzQ5ODYgNTkuODA2NTIsNzguNDg0MTY4IDYwLjE3Njk5Miw3OC42MjY3NDIgNjAuNTA4Mjc3LDc4LjczNjQ5MSA2MC4xODY3NTUsNzguNzY5MzMxIDU5Ljg5MTUzMyw3OC44MjAxODEgNTkuNzg1NTQxLDc4Ljg4NzA1NyA1OS42MzMwNjQsNzguOTgzMjY1IDU5LjUyODU1OSw3OS4wNzAwNjcgNTkuNDQ0MjU1LDc5LjE0ODA0IDU5LjI2OTM3OCw3OS4xNDIyOTggNTkuMTQzMTMzLDc5LjEyNzk1OCA1OS4xNDMxMzMsNzkuMTI3OTU4IEwgNTguODQyMDEsODAuMjEyMDM1IEMgNTguNzQ0NzYsODAuNTYzODc4IDYxLjU1MDI4NSw4MS4xNjU2NDYgNjIuNzU2Nzg1LDgxLjM0NjMwNCA2Mi45NjM1OTIsODEuMzc3MjY4IDYzLjIzODY5Nyw4MS4xODc3NjMgNjMuMzE4ODkzLDgxLjAxNTA0NSA2My4zMTk5NTEsODEuMDEyNCA2My4zNzYyNiw4MC44ODA2NTYgNjMuMzc5MTE3LDgwLjg3NDUxNyA2My40NDM3NDksODAuOTQyMTQ3IDYzLjUyNDgwMiw4MC45OTg4MjEgNjMuNjIwMDI1LDgxLjAzNTEyMiA2My45ODExMDIsODEuMTcyNzYzIDY0LjQwNjIzNSw4MC45OTM5NCA2NC41NzM2MSw4MC42MzM2MTcgNjQuNzQwOTg2LDgwLjI3MzI4MSA2NC41OTM0MDEsNzkuODY3ODYgNjQuMjMyMzI0LDc5LjczMDIyMyA2NC4xMzg4OTcsNzkuNjk0NjA4IDY0LjAzNzk4Miw3OS42NzU0NDEgNjMuOTQxMjMsNzkuNjgwMDM1IDYzLjk5Mjc3OCw3OS41Njk0NjUgNjQuMDk3MTY3LDc5LjM0NzUwNiA2NC4xNjIwNTksNzkuMjA4MjU2IDY0LjIwODkwNiw3OS4yNDI2NDkgNjQuMjY0ODczLDc5LjI3NjU2NCA2NC4zMjI2NjQsNzkuMjk4NTkzIDY0LjY4Mzc0LDc5LjQzNjIzNCA2NS4xMDg4NzMsNzkuMjU3NDEzIDY1LjI3NjI0OCw3OC44OTcwODggNjUuNDQzNjI0LDc4LjUzNjc2MiA2NS4yODYwMTEsNzguMTMxMzMgNjQuOTI0OTM1LDc3Ljk5MzY5NCA2NC44NjY5Nyw3Ny45NzE2MDEgNjQuODA0MzMsNzcuOTU5ODE0IDY0Ljc0NDI1Myw3Ny45NTM1NDQgNjUuNTE2MzYsNzYuMjk0MTMgNjYuMTUzNDUxLDc0LjkyNDMyOSA2Ni45NDI1MTcsNzMuMjA1NTk2IDY3LjAwMTYyMyw3My4yNTk3NTYgNjcuMDcyMzE3LDczLjMwNTIxMSA2Ny4xNTMzMTQsNzMuMzM2MDg4IDY3LjUxNDM5MSw3My40NzM3MyA2Ny45NDk1NzgsNzMuMjg0ODY1IDY4LjExNjk1Myw3Mi45MjQ1MjkgNjguMjg0MzI4LDcyLjU2NDE5MyA2OC4xMjY3MTYsNzIuMTY4OCA2Ny43NjU2MzksNzIuMDMxMTYzIDY3LjY4MTc5LDcxLjk5OTE5OSA2Ny41OTE2NTksNzEuOTgwMzUzIDY3LjUwNDY1Niw3MS45ODA5NzIgNjcuNTQzMTQzLDcxLjg5NjIyOCA2Ny41Nzk3NTEsNzEuODE4MTg3IDY3LjYxNTA3Myw3MS43NDAwNjYgNjcuNjg2NTkyLDcxLjg1ODcyOSA2Ny43OTMzNTcsNzEuOTU2NjA0IDY3LjkzNjI3Nyw3Mi4wMTEwNzkgNjguMjk3MzU0LDcyLjE0ODcyIDY4LjcyMjQ4Niw3MS45Njk4OTYgNjguODg5ODYyLDcxLjYwOTU3NCA2OS4wNTcyNCw3MS4yNDkyMzcgNjguODk5NjI1LDcwLjg0MzgxNiA2OC41Mzg1NDgsNzAuNzA2MTggNjguMzgzNTYsNzAuNjQ3MDk5IDY4LjIyMDU5OCw3MC42NDg5MjIgNjguMDY2NzY5LDcwLjY5NjE1MiA2OC4wNzIyNDYsNzAuNjgyMTMgNjguMDkzNjQzLDcwLjYyNTIxOCA2OC4wOTY4ODQsNzAuNjE1ODUxIDY4LjI5NzY5NSw3MC4wMzczNjYgNjcuMTI1NDQsNjkuMjkxODI0IDY2LjY5MTYwMiw2OS4yNzA3ODkgNjYuNjI3OTY1LDY5LjI2NzY5NCA2Ni41NTM2MzYsNjkuMjY1NzYyIDY2LjQ4MDgwOSw2OS4yNzA3ODkgWiBNIDYzLjAwNzU2Myw3MC44NzY4MjMgQyA2My4wMzExNjQsNzAuOTYxNjM4IDYzLjA3NTA3Niw3MS4wNTIyMSA2My4xMzgwNTMsNzEuMTM3ODA2IEwgNjMuMDA3NTYzLDcxLjA5NzY1NSBaIE0gNjMuMTk4MjgsNzEuMjA4MDgyIEMgNjMuMzQxOTY0LDcxLjM4MTUzNCA2My41Mjk0ODUsNzEuNTMwODczIDYzLjYyOTg5NCw3MS42MTk2NDEgNjMuNzc2Njk4LDcxLjc0OTQwNiA2NC4zODUzMzMsNzIuMDAzODk1IDY0LjkyNDc2NSw3Mi4yMTE4ODQgNjQuNzY5NjAzLDcyLjI2NDg0MyA2NC42MDEzOTIsNzIuMzA0OTgzIDY0LjU0MzM0Miw3Mi4zMzIzMzggNjQuMzUwNTA2LDcyLjI0ODA4MiA2NC40NjIwNzgsNzIuMjMyMjc4IDY0LjMyMjUwNyw3Mi4zMjIzMTEgNjQuMTY3Njk0LDcyLjQyMjE1NyA2NC4wNzE1NjYsNzMuNzM3NjQ2IDY0LjA3MTU2Niw3My43Mzc2NDYgTCA2My4yMTgzMzgsNzMuNDY2NjM0IDYzLjMwODY3Nyw3My4zMDYwMjkgNjMuMDY3NzcxLDczLjE4NTU3NyA2My4zMTg3MTUsNzIuMjIxOTM4IDYzLjEwNzkyMiw3MS41Nzk1MyA2My4xOTgyNjEsNzEuMjA4MTM0IFogTSA2NS4zODY1MTYsNzIuNDkyOTI1IEMgNjUuNDYxNDA5LDcyLjQ4NzQ0OCA2NS41MDk1MjQsNzIuNTEyNjYzIDY1LjU0NzEyMSw3Mi41NDMxMTMgTCA2NS42Njc1NzUsNzIuNTAyOTYzIEMgNjUuODI0Nzc1LDcyLjU3ODExIDY1Ljg2ODA5NSw3Mi43MzA3MTQgNjUuODA4MTAzLDcyLjkzNDU3OCA2NS42NDY0MTEsNzIuODYwOTQ0IDY1LjQ3MTM0Miw3Mi44MTI1MjggNjUuMzM2MzI1LDcyLjg0NDIzOCA2NS4zMzAwMjgsNzIuODQ1NTYxIDY1LjMyMjQ2LDcyLjg0MjY1MSA2NS4zMTYyNDMsNzIuODQ0MjM4IEwgNjUuMDQ1MjMsNzIuNjEzMzY4IEMgNjUuMjA3MzQ2LDcyLjUzMDg1NSA2NS4zMTE2MTMsNzIuNDk4NDA3IDY1LjM4NjUxNiw3Mi40OTI5MTQgWiBNIDYzLjAxNzU5Niw3Ni40OTc5MjMgQyA2My4wMTc1OTYsNzYuNDk3OTIzIDYzLjM3NjAyNyw3Ni41MjY3MDQgNjMuNjcwMDU4LDc2LjU0ODExMSA2My44NTUzOTQsNzYuNjI1NzY5IDYzLjc4MjU4OCw3Ni44NTgzODggNjMuNTY5NjgxLDc3LjE1MDM4MiA2My40ODU1MDMsNzcuMTMwMzUzIDYzLjQwODMzMiw3Ny4xMjQwMyA2My4zMzg4MSw3Ny4xNDAzNTUgNjMuMDkyNjY2LDc3LjE5ODE3NyA2Mi45MjE4MjcsNzcuNDE5ODM0IDYyLjc5Njc1OSw3Ny42ODI0MDcgNjIuODg1MjUxLDc3LjE2NDMyNiA2My4wMTc1OTMsNzYuNDk3OTQ2IDYzLjAxNzU5Myw3Ni40OTc5NDYgWiIgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIgaWQ9InBhdGg0MDE4Ii8+CiAgICAgIDxwYXRoIGQ9Ik0gNzMuMTEzODUzLDU3LjU2ODI1NSBDIDcxLjk3NTYxNSw1Ny42MDAxNDggNzAuMDk2MjgsNTguMjA2NTYyIDY5Ljc5ODg4OCw1OC40NDYwMSA2OS43MzUxMjMsNTguNDk3MzIzIDY5LjcwODM2MSw1OC41NjI5ODggNjkuNjk5Nzc1LDU4LjYzMzEzMiA2OS42Njc0MDYsNTguNzEyMjE1IDY5LjYxOTQ2Niw1OC43OTg5OCA2OS42MTk0NjYsNTguNzk4OTggNjkuNjE5NDY2LDU4Ljc5ODk4IDY5LjY3MjYwOCw1OC41MjE4ODIgNjkuNjk5MzE3LDU4LjQ2MjE5MiA2OS43MjYwMDYsNTguNDAyNTA3IDY5LjY2NTg3MSw1OC4zNjMwNjkgNjkuNjI1NDg1LDU4LjQwNjM5MSA2OS41ODUwMjUsNTguNDQ5NjM4IDY5LjQ5NjE1Nyw1OC43NTYyNzcgNjkuNDk2MTU3LDU4Ljc1NjI3NyA2OS40OTYxNTcsNTguNzU2Mjc3IDY5LjQ1NDA1NCw1OC41NTE4MDkgNjkuNDQ5NDYxLDU4LjQ4NzYxOSA2OS40NDQ5ODksNTguNDIzNDQ0IDY5LjQ1NjMxMyw1OC4zNzMyODQgNjkuMzk0NDM1LDU4LjQxMDU1MSA2OS4zMzI1NDcsNTguNDQ3Nzk5IDY5LjQwODkzNSw1OC43MjkzNzQgNjkuNDA5NzAyLDU4LjgyMTkyNSA2OS40MTAyMzEsNTguODU5MzU4IDY5LjQ0ODU5LDU4Ljk3MTQyNSA2OS40OTcwOTEsNTkuMDk4MTUgNjkuNDk4MTQ5LDU5LjEwMTg1NCA2OS40OTY4MjYsNTkuMTE0NDQ4IDY5LjQ5ODQxNCw1OS4xMTgyMDUgNjkuNTA1ODQ5LDU5LjE2NTI2NCA2OS40OTczNTYsNTkuMTk1MzIxIDY5LjQ2MzI2Nyw1OS4yMDA4MjIgNjkuNDYzMjY3LDU5LjIwMDgyMiA2OS40NTIzOTIsNTkuMjYzMzkzIDY5LjMzOTk2LDU5LjE1ODEyNiA2OS4yODU0MTksNTkuMTA3MDU2IDY5LjMyMTQ2Niw1OC44NTc1NTkgNjkuMzIxNDY2LDU4Ljg1NzU1OSA2OS4zMDQwNTYsNTguODI4NTY5IDY5LjI5NzIwNCw1OC43ODYwNzQgNjkuMjQxMzE2LDU4Ljg2MjQ4IEwgNjkuMjA2NjI5LDU5LjExNjAzMyBDIDY5LjIwNjYyOSw1OS4xMTYwMzMgNjkuMTU2NDQ4LDU5LjA2Mjc1MSA2OS4xNDg1MjQsNTguOTg4ODY5IDY5LjEzNzIyNiw1OC44ODQ2NzYgNjkuMTgxNzc2LDU4LjczNDgzNyA2OS4xMTU1MzUsNTguNzc5NzA1IDY5LjAzMTQ2Nyw1OC44MzY2NDYgNjkuMTI0MjE0LDU5LjA5NDc3MSA2OS4xMjc3MDYsNTkuMTQwOTk0IDY5LjEzMTMzMSw1OS4xODcyMTcgNjguOTYzMTc1LDU5LjAzNjkxMiA2OC45NDU2NzMsNTguOTYxMTE3IDY4LjkyODE1Nyw1OC44ODUzMTYgNjguODgzNDQsNTguOTE3NTI3IDY4Ljg5ODY2Miw1OS4wMTQyOTMgNjguOTEzOTI4LDU5LjExMTA1NiA2OS4zNTg1ODcsNTkuNDQ5NDggNjkuNTMyNDcxLDU5LjUwODMyMyA2OS42MDI0MTQsNTkuNTMxOTc3IDY5LjYwNDQ1Niw1OS43NzQ2MjYgNjkuNTc0NTMyLDYwLjAyODY3OSA2OS41NjIwMTcsNjAuMDMwNTMxIDY5LjU1NDIzOCw2MC4wNDA2MzggNjkuNTQ1MDkyLDYwLjA0MDUzMiA2OS4zNjYxNDksNjAuMDM3NTY5IDY5LjM4MzQwNSw2MC4xOTEyNzMgNjkuMzgzNDA1LDYwLjE5MTI3MyA2OS4xMzY2NDEsNjAuNTUxMjY1IDY4LjkwNjE3Niw2MC45MjIyNjQgNjguNDMxMjc1LDYxLjIyNTM3MSBMIDY4LjIwMTkxNiw2MS40MjA1MDYgQyA2OC4xNTc4MTgsNjEuMzY4NjU5IDY4LjE0NDc3Nyw2MS40MDE0ODMgNjcuOTIyNjIyLDYxLjQ1NzgwNyBMIDY3Ljg2NTc0Nyw2MS4zNTA2ODMgQyA2Ny44NjU3NDcsNjEuMzUwNjgzIDY4LjA2MDEwNyw2MS4yNzk0OTcgNjguMTkxNzQsNjAuOTI4MzU1IDY4LjIwNzk4NSw2MC44ODQ5OSA2OC4wMjIxMDUsNjAuNjQ2MjMgNjcuODk1ODA0LDYwLjY5NTE0MyA2Ny44NzM1MjYsNjAuNjEyNzQ0IDY3Ljg1MTU3Niw2MC42MTAzNjMgNjcuODA5NDg2LDYwLjU5OTg4MyA2Ny43NDI1OTcsNjAuNTgzMjE0IDY3LjcxMTc2NSw2MC42NDYxMjQgNjcuNzExNzY1LDYwLjY0NjEyNCA2Ny43MTE3NjUsNjAuNjQ2MTI0IDY3LjY3MzgsNjAuNjAyMTMyIDY3LjcyNDQxMiw2MC41MjQ2NjQgNjcuNzQ5NzA2LDYwLjQ4NTkzNyA2Ny40NzgwNTUsNjAuNDk5OTUyIDY3LjM4MTkwOCw2MC41MTU1NjMgNjcuMjg1NzgsNjAuNTMxMTQ3IDY3LjM0MzkzMyw2MC40MjE5NTYgNjcuMDEwNzUxLDYwLjM2NzQzMyA2Ni45MTM0MTMsNjAuMzUxNTMxIDY2Ljc3MTUzLDYwLjQwMjI3MSA2Ni43NzE1Myw2MC40MDIyNzEgNjYuNzcxNTI4LDYwLjQwMjI3MSA2Ni41ODIyMjYsNjAuNDA5OTE3IDY2LjQ5MjIzNiw2MC40Mzk1NzIgNjYuMDQ5MTkyLDYwLjY3MzkyNCA2NS45NDE5MDMsNjEuMDI2NjAzIDY2LjAyMzY1OSw2MS4zMjMyMjcgNjYuMTU5NjYsNjEuODE3NjggNjYuODIxMTQsNjIuMTcwMTU4IDY3LjI4ODgxNyw2MS42MTc0OTcgNjcuMzczMzk0LDYxLjY1NDYyIDY3LjY4MzU1LDYxLjk4NTQyNiA2Ny42ODM1NSw2MS45ODU0MjYgNjcuNjgzNTUsNjEuOTg1NDI2IDY3Ljc5OTM1Miw2Mi4xNzY5OTUgNjcuODkwNTUyLDYyLjI0NDIyMyA2Ny45MTczMiw2Mi4yNjM5MzUgNjcuOTUzMzMyLDYyLjI3OTEwNiA2Ny45ODQ0MjMsNjIuMjk4Nzg4IDY3LjgzNjA0NSw2Mi4zNzE4ODcgNjcuNzMwNDU1LDYyLjQzNzM5IDY3LjY0NDg1Nyw2Mi41MDA3MDIgNjcuNTkzMTgzLDYyLjQ4OTQ1NyA2Ny40ODYwNDYsNjIuNDY4NDIgNjcuNDYxNDM0LDYyLjQ2MTcwMyA2Ny4zMzc3MSw2Mi40Mjc5MzcgNjcuMDg3ODk1LDYyLjczNjQyIDY3LjAxMDc0Myw2Mi45ODIyMTcgTCA2Ny4wMzY2NDYsNjIuNzQ5MzE1IEMgNjcuMDM2NjQ2LDYyLjc0OTMxNSA2Ni44NDkxMTcsNjIuOTU4NzQ0IDY2LjgyNjU1MSw2My4wOTQxMiA2Ni43NzM4OTgsNjMuNDEwMTkyIDY2Ljk4OTkyMyw2My43MjQ1NjkgNjYuOTM1MjA0LDY0LjA0MjgzNyA2Ni44NzQzODUsNjQuMzk2NTMyIDY2LjQ2MzM3Myw2NS4wMzczMjYgNjYuNDYzMzczLDY1LjAzNzMyNiBMIDY1LjY3NTU3Niw2NS4xNDYxMzMgNjUuMzYzMTU2LDY1LjEzNTE4IEMgNjUuNDcwOTI5LDY1LjAzMzk3NyA2NS41ODMwOCw2NC45MzcyMDggNjUuNjcyMjE2LDY0Ljc2NDE4MSA2NS43Mzk4NDEsNjQuNjMyOTA1IDY1LjQyMDIwOCw2NC40Mjc2ODQgNjUuNDIwMjA4LDY0LjQyNzY4NCA2NS40MjAyMDgsNjQuNDI3Njg0IDY1LjQ0OTIwMSw2NC4yNzE4MjggNjUuMzUwODUsNjQuMjgxMDk5IEwgNjUuMDkwOTc0LDY0LjMwNzEzNCBDIDY0Ljk2OTUwNCw2NC4yNTk4NjEgNjQuOTExNjI5LDY0LjE1MDY0OSA2NC43MTEwMzIsNjQuMTc5NjU4IDY0LjcxMTAzMiw2NC4xNzk2NTggNjQuNjIyMTU5LDY0LjA3NDA4NyA2NC41NjAyODgsNjQuMDE3OTY2IDY0LjQ5ODQxMyw2My45NjE4NSA2My45MjI2MTYsNjQuMjc4NDQ4IDYzLjkyMjYxNiw2NC4yNzg0NDggTCA2NC4zMDk2NDksNjQuMTk0Mjk1IEMgNjQuMzA5NjQ5LDY0LjE5NDI5NSA2My45NDQ4OTQsNjQuNDc3Mzk5IDYzLjgyNjQxNCw2NC42NzY1NzcgNjMuNDkwMDIyLDY1LjI0MjE3NyA2My41NTg3MzUsNjYuMDIwMjExIDYzLjQxODI0MSw2Ni41NDIwNzUgNjMuNTY1NjU2LDY2LjM4MDk2IDYzLjY1NTE1NCw2Ni4zMDYyNTIgNjMuNjU1MTU0LDY2LjMwNjI1MiA2My4zNjYyODIsNjYuNzg5ODU3IDYzLjQwNzgwNiw2Ny4xMDEzNTEgNjMuMzE1MjcsNjcuNDgzNzAxIDYzLjMxNTI3LDY3LjQ4MzcwMSA2My41NjI2ODgsNjYuOTA0MjM3IDYzLjYwNzA1Myw2Ni44MzIxNjQgNjMuNzM0NjI0LDY2LjYyNDk2NCA2NC4wODA4NjksNjYuMzYwNTE4IDY0LjA4MDg2OSw2Ni4zNjA1MTggNjQuMTExMjQ4LDY2LjQ2MzUxMiA2My45ODQyNDgsNjYuNzEwMTEyIDYzLjg4NDMzNiw2Ni45MjU3MjEgNjMuODg0MzM2LDY2LjkyNTcyMSA2NC4xNzYzMyw2Ni41OTExMDIgNjQuMjc2MTU4LDY2LjQyODkzOSA2NC4zNzU5OSw2Ni4yNjY3ODEgNjQuNjQzNDI2LDY1Ljc1MjI5NCA2NC43NjUzOTksNjUuNTU0MDY4IDY0Ljg0MTA1MSw2NS40MzExMjQgNjUuMDQzMDUzLDY1LjQ4Mjk0MyA2NS4xMDcyNjcsNjUuNTUzMjc0IDY1LjAyNzkwOCw2NS41OTM4NDggNjQuOTc1NjMxLDY1LjcwMjE2NiA2NC45NzU2MzEsNjUuNzAyMTY2IEwgNjUuMTY5MDc0LDY1Ljc0MDU0OSBDIDY1LjQ2NjQ5Miw2NS45NzM5OTYgNjUuNzQ0NzU0LDY2LjAxNTY2MyA2Ni4wMjgzODcsNjYuMTQwMjI5IEwgNjYuMTg0ODM1LDY2LjIzMTE3MSBDIDY1Ljg5MDY3Miw2Ni4yMjg3OSA2NS42MzAwNTcsNjYuMjQyMzM3IDY1LjUyNDgzMiw2Ni4yOTE4OTYgNjUuMzU4MDE4LDY2LjM3MDQyNyA2NS4yNDAzNTIsNjYuNDQ4MDk4IDY1LjE0NjQyNSw2Ni41MTYzMTUgNjQuOTcyOTk0LDY2LjQ4OTEwNSA2NC44NTA5MzksNjYuNDU0MDM4IDY0Ljg1MDkzOSw2Ni40NTQwMzggTCA2NC40MjIyNjEsNjcuNDk2MTUyIEMgNjQuMjgyNjE2LDY3LjgzMzQxNiA2Ni45OTYxNTQsNjguNzY4NjY2IDY4LjE3MTQwNyw2OS4wOTU4MjMgNjguMzcyODYzLDY5LjE1MTkxNSA2OC42NTgxODcsNjguOTk5OTkzIDY4Ljc1ODk2Nyw2OC44Mzg0MjYgNjguNzYxMzQ4LDY4LjgzNDYxNiA2OC44ODAyNjMsNjguNjUxMDQ1IDY4Ljg4NzUyMyw2OC42Mzk0MzUgNjguOTI3MTY4LDY4LjY3NTEzMyA2OC45NzM5NTcsNjguNzA1MTQ0IDY5LjAyMzkzMSw2OC43MzE2MTMgNjkuMzY1NDAzLDY4LjkxMjQ4IDY5LjgxMTk5Myw2OC43ODYwMzUgNzAuMDIyMjg0LDY4LjQ0ODkzMiA3MC4yMzI1NjksNjguMTExODUzIDcwLjEyNTQ3OSw2Ny42OTkxMyA2OS43ODQwMDUsNjcuNTE4MjYxIDY5LjczMjA1NCw2Ny40OTA3NDQgNjkuNjc1MDIzLDY3LjQ3MTYxNSA2OS42MTkzODksNjcuNDU3OTkxIDY5LjY2OTM2MSw2Ny4zNzgxMjEgNjkuNzYyOTE1LDY3LjIzNzIxNSA2OS44MjEzMDksNjcuMTQzODc4IDY5Ljg2NDM2Nyw2Ny4xODUwODkgNjkuOTEyODQ0LDY3LjIyNTc0NSA2OS45Njg5NjcsNjcuMjU1NDc0IDcwLjMxMDQzOSw2Ny40MzYzNDYgNzAuNzU3MDI5LDY3LjMwOTkwMSA3MC45NjczMiw2Ni45NzI3OTMgNzEuMTc3NjA1LDY2LjYzNTY4NyA3MS4wNjk4OTYsNjYuMjEyOTYyIDcwLjcyODQyMiw2Ni4wMzIwOTMgNzAuNjcyNTQ3LDY2LjAwMjQ5NyA3MC42MTM4MjYsNjUuOTg1OTkgNzAuNTUzNzg3LDY1Ljk3MjQzOCA3MS41MjQ5MTMsNjQuNDE3OTU4IDcyLjMzMzE2Miw2My4xMzc0MjcgNzMuMzI3NDE0LDYxLjUyNzcwMiA3My4zNzkzNTksNjEuNTg4NTAxIDczLjQ0MTgyMiw2MS42NDY0NTggNzMuNTE4MjI5LDYxLjY4NjkyOSA3My44NTk3LDYxLjg2Nzc5MiA3NC4zMDYyOSw2MS43NDEzNDggNzQuNTE2NTgxLDYxLjQwNDI0OCA3NC43MjY4NjksNjEuMDY3MTQyIDc0LjYxOTE2LDYwLjY0NDQxNyA3NC4yNzc2ODMsNjAuNDYzNTQ4IDc0LjE5NTMxNiw2MC40MTk5MjQgNzQuMTEwOTIyLDYwLjM4Nzk3NSA3NC4wMjEwNDgsNjAuMzc4NzcgNzQuMDcxMDUyLDYwLjI5NzA2MiA3NC4xMjE5OTQsNjAuMjIzNjEzIDc0LjE2Nzc4OSw2MC4xNDg0OTMgNzQuMjE2Nzk3LDYwLjIwMTYyMSA3NC4yNzgwMyw2MC4yNDE4ODggNzQuMzQ2NzM5LDYwLjI3ODI3NiA3NC42ODgyMTEsNjAuNDU5MTQ4IDc1LjEzNDgwMSw2MC4zMzI3MDQgNzUuMzQ1MDkyLDU5Ljk5NTU5NSA3NS41NTUzNzUsNTkuNjU4NDkgNzUuNDQ4Mjg1LDU5LjI0NTc5MyA3NS4xMDY4MTEsNTkuMDY0OTI0IDc1LjAxODQwNSw1OS4wMTgxIDc0LjkxNjc1NSw1OC45ODkyODIgNzQuODIwMTA4LDU4Ljk4MTk5MyA3NC44OTY1MDQsNTguNDMyMzc0IDczLjk0NDMxMSw1Ny42NjA1NTggNzMuNTQ3ODg2LDU3LjU5MTk3OCA3My40MjIzMjUsNTcuNTcwMjU1IDczLjI3NjYwOCw1Ny41NjM4MzQgNzMuMTEzOTk1LDU3LjU2ODQwMyBaIE0gNjkuNzIxMzY1LDU4LjgyMjg4MyBDIDY5LjgwNzM2Myw1OS4wOTgwNzYgNzAuMDg4NjYsNTkuNDA5MDk0IDcwLjIxOTA0Niw1OS41NTY1NzIgNzAuMzMzNTYzLDU5LjY4NjA4OSA3MC44MTM1MTIsNTkuOTY4MjM4IDcxLjI4NTk3OSw2MC4yMjUwNjkgNzEuMjY3MDM0LDYwLjIyNjEyNyA3MS4xNTA3ODcsNjAuMjMzNjQxIDcxLjE0NTcxMiw2MC4yMzM2OTQgNzEuMDU5OTc3LDYwLjIzMjYzNiA3MC44OTAxNDEsNjAuNDQ4NjcxIDcwLjg2OTMyOSw2MC40ODIwMDMgNzAuODQ4NTMyLDYwLjUxNTM0IDcwLjM0Nzg2MSw2MS42NTA1MDkgNzAuMzQ3ODYxLDYxLjY1MDUwOSBMIDcwLjI0NzY3NCw2MS42NTY2NzMgNzAuMTM2MjMyLDYxLjY0MzQxOCA2OS4yNTI4OTQsNjEuNTA2Njg0IDY5Ljc5MDM2OCw2MC41OTg2ODcgNjkuOTU4MzgxLDYwLjM4NzIxMSBDIDY5Ljk1ODM4MSw2MC4zODcyMTEgNzAuMDEwMDA3LDYwLjA3NDAyMyA2OS44NzA5OSw2MC4xMTEwMTIgNjkuODU0NjM4LDYwLjExNTMyNSA2OS44NDQ5MjgsNjAuMDg2NTM4IDY5LjgyNzIxNyw2MC4wNTMzNjIgNjkuODY0MjExLDU5LjgzNDMxMSA2OS44NDI5MzMsNTkuNjEyMDkgNjkuNzc3NzU4LDU5LjQxMjc3OSA2OS44Mzk2NzYsNTkuMzc1NTMxIDY5LjgyODI2Miw1OS4xODE3MzcgNjkuNzc5MzQ2LDU5LjExMDk2OSA2OS43MDU2ODMsNTkuMDA0NDQgNjkuNzEwNzA1LDU4Ljg5NjA1OSA2OS43MjEzOTcsNTguODIyODkxIFogTSA3MS4zOTU3MDEsNjAuNzAxMDU0IEMgNzEuMzk1NzAxLDYwLjcwMTA1NCA3MS43OTY0MzksNjAuNjgyNzE4IDcyLjE2ODk5OSw2MC42ODM2NDQgNzIuMjk2MzE5LDYwLjc3OTQxNiA3Mi4zMDgyMTIsNjAuOTM2MDY4IDcyLjIyNjE3OCw2MS4xMjI2MTUgNzIuMDc0OTA4LDYxLjAyOTkxIDcxLjkwMTkwNSw2MC45NTUxMDcgNzEuNzY0MjQyLDYwLjk3MDAxMSA3MS41NDE3NjIsNjAuOTk0MDg4IDcxLjM3MTI4Myw2MS4xNTk2MTQgNzEuMjI1MzY1LDYxLjM2NTIxOSA3MS4zMTM3NzgsNjEuMDExMTU0IDcxLjM5NTY5OSw2MC43MDEwNjIgNzEuMzk1Njk5LDYwLjcwMTA2MiBaIE0gNjcuMTA5MTg2LDYzLjI3NzgzMSA2OC41NTgwNDUsNjMuOTQyOTQxIEMgNjguNDA4NTc3LDY0LjAxMjkxNSA2OC4xMjUyNjYsNjQuMTU4MDM5IDY4LjAxMzYzOCw2NC4yNDc5NzkgNjcuODcwMTcxLDY0LjM2MzU0MSA2Ny43ODQyNjMsNjUuNzUwNDk1IDY3Ljc4NDI2Myw2NS43NTA0OTUgTCA2Ni45NjgxMjksNjUuMzk4NDQgNjcuMjU2MDc1LDY0Ljg0NzcxIDY3LjA2NTI1OCw2NC42ODg0ODYgNjcuMTk0MTIzLDY0LjE2NzY1NCA2Ny4wNTI2MzcsNjMuNTAyNTQ0IDY3LjEwOTIwNSw2My4yNzc4MTUgWiBNIDY4Ljc0Mzk0MSw2NC4wMjIwMjUgNjkuMTU4MjUyLDY0LjIxNzc4NSA2OC44NDA3MjYsNjQuMjg3NjAzIDY4Ljc0MzkzMyw2NC4wMjIwMTQgWiBNIDY5Ljc1MzM4LDY0LjU3MzM5IEMgNjkuNzYyMzc2LDY0LjY4OTUyMyA2OS42NTE2MDgsNjQuODQ5OTA2IDY5LjQ3OTkzMyw2NS4wMzI3MDcgNjkuNDAyNTA4LDY1LjAwNDk4OSA2OS4zMjQzNjMsNjQuOTg4ODE3IDY5LjI1NjQzNyw2NC45OTYxNyA2OS4xOTUyMzgsNjUuMDAyODExIDY5LjE0MzEsNjUuMDIxODYxIDY5LjA4ODU4LDY1LjA0NjcyNyBMIDY5LjExNTU1Nyw2NC45OTQ3ODEgNjguOTQzMDg1LDY0LjY0MzM2MiA2OS43NTMzNzIsNjQuNTczMzkgWiIgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgc3R5bGU9ImZpbGw6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC4yNjQ1ODMzMiIgaWQ9InBhdGg0MDMyIi8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=",
2986 | "created": 1712911276822,
2987 | "lastRetrieved": 1712911276822
2988 | }
2989 | }
2990 | }
--------------------------------------------------------------------------------
/doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/doc/diagram/pss-tor-safe-browsing/PSS-tor-safe-browsing.png
--------------------------------------------------------------------------------
/private_search_set/README.md:
--------------------------------------------------------------------------------
1 | # Private Search Set python library
2 | This library implements the Private Search Set (PSS) concept to facilitate experimentation and hopefully enhance privacy in data sharing. It's aimed at providing a practical approach to manage and check data against privacy-preserving sets.
3 |
4 | # Installation
5 | To install the library, clone the repository and install it in editable mode:
6 | ```sh
7 | git clone https://github.com/hashlookup/private-search-set.git
8 | cd private-search-set
9 | pip install -e .
10 | ```
11 |
12 | # Use
13 | Run the private-search-set CLI with the following options:
14 | ```sh
15 | Usage: private-search-set [OPTIONS]
16 |
17 | Options:
18 | --pss-home PATH PSS working folder. [required]
19 | --json-file PATH Path to the PSS JSON file.
20 | --ingest / --check ingest or check stdin into/against PSS files[required]
21 | --bf force check against the bloom filter over the hashset
22 | --key TEXT specify key content for HMAC operations
23 | --debug / --no-debug print debug information
24 | --help Show this message and exit.
25 |
26 | ```
27 |
28 | ## Ingesting Data
29 | To create and populate a PSS in a directory (e.g., output), use:
30 | ```sh
31 | cat tests/word_list.txt | private-search-set --pss-home=output --ingest --json-file=pss.json
32 | ```
33 | (here we use the json metadata sample as `pss.json`)
34 |
35 | ## Checking Data
36 | To check data against the hashset with `--check`:
37 | ```sh
38 | cat tests/word_list.txt | private-search-set --pss-home=output --check
39 | ```
40 | Force the use of the Bloom filter with `--check --bf`:
41 |
42 | ```sh
43 | cat tests/word_list.txt | private-search-set --pss-home=output --check --bf
44 | ```
45 | In both case, each line printed to `stdout` is a match.
--------------------------------------------------------------------------------
/private_search_set/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/private_search_set/__init__.py
--------------------------------------------------------------------------------
/private_search_set/bloom_filter_base.py:
--------------------------------------------------------------------------------
1 | from abc import ABC, abstractmethod
2 |
3 | class BloomFilterBase(ABC):
4 | @abstractmethod
5 | def __init__(self, parameters):
6 | """Initialize the Bloom filter with given parameters."""
7 | loaded = False
8 | pass
9 |
10 | @abstractmethod
11 | def add(self, data):
12 | """Add data to the Bloom filter."""
13 | pass
14 |
15 | @abstractmethod
16 | def check(self, data):
17 | """Load a Bloom filter from file."""
18 | pass
19 |
20 | @abstractmethod
21 | def load(self, data):
22 | """Load a Bloom filter from file."""
23 | pass
24 |
25 | @abstractmethod
26 | def write(self):
27 | """Write the serialized bloom filter to a file descriptor."""
28 | pass
29 |
--------------------------------------------------------------------------------
/private_search_set/bloom_filter_dcso.py:
--------------------------------------------------------------------------------
1 | from flor import BloomFilter
2 | from private_search_set.bloom_filter_base import BloomFilterBase
3 |
4 | class BloomFilterDCSO(BloomFilterBase):
5 | def __init__(self, parameters):
6 | super().__init__(parameters)
7 | self.bf = BloomFilter(n=parameters['capacity'], p=parameters['fp-probability'])
8 |
9 | def add(self, data):
10 | self.bf.add(data)
11 | pass
12 |
13 | def check(self, data):
14 | return data in self.bf
15 |
16 | def load(self, fd):
17 | self.bf.read(fd)
18 | if self.bf.N == 0:
19 | self.loaded = False
20 | else:
21 | self.loaded = True
22 | pass
23 |
24 | def write(self, fd):
25 | self.bf.write(fd)
26 | pass
--------------------------------------------------------------------------------
/private_search_set/cli.py:
--------------------------------------------------------------------------------
1 | import click
2 |
3 | import pdb
4 | from private_search_set.main import PrivateSearchSet
5 |
6 | @click.pass_context
7 | def ingest_stdin(ctx):
8 | pss = ctx.obj
9 | click.echo("Ingesting stdin to PSS file.")
10 | pss.ingest_stdin(ctx.params["debug"])
11 | pss.write_to_files(ctx.params["pss_home"])
12 |
13 | @click.pass_context
14 | def check_stdin(ctx):
15 | pss = ctx.obj
16 | pss.check_stdin(ctx.params["bf"], ctx.params["debug"])
17 |
18 | @click.command()
19 | @click.option('--pss-home', required=True, type=click.Path(exists=False) , help='PSS working folder.')
20 | @click.option('--json-file', required=False, type=click.Path(exists=True), help='Path to the PSS JSON file.')
21 | @click.option('--ingest/--check', required=True, type=click.BOOL , help='ingest or check stdin into/against PSS files')
22 | @click.option('--bf', required=False, is_flag=True, default=False, help='force check against the bloom filter over the hashset')
23 | @click.option('--key', required=False, type=click.STRING , help='specify key content for HMAC operations')
24 | @click.option('--debug/--no-debug', default=False, help='print debug information')
25 | @click.pass_context
26 | def cli(ctx, json_file, pss_home, ingest, key, bf, debug):
27 | # If a json-file with PSS metadata is provided, load the PSS from the JSON file
28 | # set the key if provided
29 | if json_file:
30 | try:
31 | ctx.obj = PrivateSearchSet.load_from_json_specs(json_file, key, debug)
32 | except ValueError as e:
33 | click.echo(e)
34 | exit(1)
35 | # If pss_home is provided, load the PSS from the files in the folder
36 | # set the key if provided
37 | elif pss_home:
38 | try:
39 | ctx.obj = PrivateSearchSet.load_from_pss_home(pss_home, key, debug)
40 | except ValueError as e:
41 | click.echo(e)
42 | exit(1)
43 | if ingest:
44 | try:
45 | ingest_stdin()
46 | except ValueError as e:
47 | click.echo(e)
48 | exit(1)
49 | else:
50 | try:
51 | check_stdin()
52 | except ValueError as e:
53 | click.echo(e)
54 | exit(1)
55 | pass
56 |
57 | def main():
58 | cli(obj={})
--------------------------------------------------------------------------------
/private_search_set/main.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 | import sys
4 | import hashlib
5 | from private_search_set.bloom_filter_dcso import BloomFilterDCSO
6 |
7 | class PrivateSearchSet:
8 | def __init__(self, algorithm, bloomfilter, canonicalization_format, description, generated_timestamp, keyid, misp_attribute_types, version):
9 | self.algorithm = algorithm
10 | self.bloomfilter = bloomfilter
11 | self.canonicalization_format = canonicalization_format
12 | self.description = description
13 | self.generated_timestamp = generated_timestamp
14 | self.keyid = keyid
15 | self.misp_attribute_types = misp_attribute_types
16 | self.version = version
17 |
18 | def print_private_search_set(private_search_set):
19 | print("Algorithm:", private_search_set.algorithm)
20 | print("Bloomfilter:", private_search_set.bloomfilter)
21 | print("Canonicalization Format:", private_search_set.canonicalization_format)
22 | print("Description:", private_search_set.description)
23 | print("Generated Timestamp:", private_search_set.generated_timestamp)
24 | print("Key ID:", private_search_set.keyid)
25 | print("MISP Attribute Types:", private_search_set.misp_attribute_types)
26 | print("Version:", private_search_set.version)
27 | print("Key:", private_search_set._key)
28 |
29 | def load_from_json_specs(json_file, key, debug):
30 | with open(json_file) as file:
31 | json_data = json.load(file)
32 | data = {k.replace('-', '_'): v for k, v in json_data.items()}
33 | pss = PrivateSearchSet(**data) # Create an instance of the PrivateSearchSet class
34 | if set(data.keys()) == set(pss.__dict__.keys()):
35 | pss.init_filter_and_set()
36 | pss.init_key(key)
37 | if debug:
38 | PrivateSearchSet.print_private_search_set(pss)
39 | return pss
40 | else:
41 | raise ValueError("JSON file does not match the expected format.")
42 |
43 | def load_from_pss_home(pss_home, key, debug):
44 | if os.path.exists(pss_home):
45 | file_path = os.path.join(pss_home, 'private-search-set.json')
46 | if os.path.exists(file_path):
47 | pss = PrivateSearchSet.load_from_json_specs(file_path, key, debug)
48 | else:
49 | raise ValueError("No JSON file found in the PSS home.")
50 | else:
51 | raise ValueError("PSS home does not exist.")
52 | file_path = os.path.join(pss_home, 'private-search-set.bloom')
53 | pss.load_bf_from_file(file_path)
54 | file_path = os.path.join(pss_home, 'private-search-set.pss')
55 | pss._ps = pss.load_pss_from_file(file_path)
56 | return pss
57 |
58 | def load_bf_from_file(self, file_path):
59 | if os.path.exists(file_path):
60 | with open(file_path, 'rb') as f:
61 | self._bf.load(f)
62 |
63 | def load_pss_from_file(self, file_path):
64 | if os.path.exists(file_path):
65 | with open(file_path, 'r') as f:
66 | return set(f.read().splitlines())
67 | else:
68 | return None
69 |
70 | def init_filter_and_set(self):
71 | # init bloom filter
72 | if self.bloomfilter['format'] == 'dcso-v1':
73 | self._bf = BloomFilterDCSO(self.bloomfilter)
74 | else:
75 | raise ValueError("Bloomfilter format not supported.")
76 |
77 | # init the private search set
78 | self._ps = set()
79 |
80 | def init_key(self, key):
81 | if key != None:
82 | self.set_key(key)
83 | else:
84 | self.set_key_from_keyid()
85 |
86 | def set_key(self, key):
87 | self._key = key
88 |
89 | def set_key_from_keyid(self):
90 | # TODO Use the keyid to get the key from the key store
91 | self._key = 'infected'
92 |
93 | def ingest_stdin(self, debug):
94 | # Read bytes from stdin
95 | for line in sys.stdin.buffer.read().splitlines():
96 | self.ingest(line, debug)
97 |
98 | def ingest(self, data, debug):
99 | # HMAC the data
100 | hashed = b''
101 | if self.algorithm == 'Blake2':
102 | # TODO Use a salt
103 | hashed_string = hashlib.blake2b(data, key=self._key.encode()).hexdigest()
104 | hashed_bytes = hashed_string.encode()
105 | else:
106 | raise ValueError("HMAC algorithm not supported.")
107 |
108 | # add the string digest to the private search set
109 | if debug:
110 | print(f"Ingesting in private search set: {hashed_string}")
111 | self._ps.add(hashed_string)
112 | # add the utf8 encoded bytes representation of the hexdigest to the bloom filter
113 | if self.bloomfilter['format'] == 'dcso-v1':
114 | if debug:
115 | print(f"Ingesting in bloom filter: {hashed_bytes}")
116 | self._bf.add(hashed_bytes)
117 |
118 | def check_stdin(self, bf, debug):
119 | # Read bytes from stdin
120 | for line in sys.stdin.buffer.read().splitlines():
121 | # check hashset in priority
122 | if self._ps != None and bf == False:
123 | if debug:
124 | print(f"Checking against private search set: {line}")
125 | if self.check_pss(line):
126 | print(line)
127 | elif self._bf.loaded:
128 | if debug:
129 | print(f"Checking against bloom filter: {line}")
130 | if self.check_bf(line):
131 | print(line)
132 | else:
133 | raise ValueError("No private search set or bloom filter loaded.")
134 |
135 | def check_pss(self, data):
136 | # HMAC the data
137 | hashed = b''
138 | if self.algorithm == 'Blake2':
139 | # TODO Use a salt
140 | hashed_string = hashlib.blake2b(data, key=self._key.encode()).hexdigest()
141 | else:
142 | raise ValueError("HMAC algorithm not supported.")
143 | if hashed_string in self._ps:
144 | return True
145 | else:
146 | return False
147 |
148 | def check_bf(self, data):
149 | # HMAC the data
150 | hashed_bytes = b''
151 | if self.algorithm == 'Blake2':
152 | # TODO Use a salt
153 | hashed_bytes = hashlib.blake2b(data, key=self._key.encode()).hexdigest().encode()
154 | else:
155 | raise ValueError("HMAC algorithm not supported.")
156 |
157 | if self.bloomfilter['format'] == 'dcso-v1':
158 | return self._bf.check(hashed_bytes)
159 | else:
160 | raise ValueError("Bloomfilter format not supported.")
161 |
162 |
163 | def write_to_files(self, pss_home):
164 | if not os.path.exists(pss_home):
165 | os.makedirs(pss_home)
166 | # Write the bloom filter
167 | file_path = os.path.join(pss_home, 'private-search-set.bloom')
168 | with open(file_path, 'wb') as f:
169 | self._bf.write(f)
170 | # Write the JSON file
171 | file_path = os.path.join(pss_home, 'private-search-set.json')
172 | with open(file_path, 'w') as f:
173 | export = {k: v for k, v in self.__dict__.items() if k.startswith('_') != True}
174 | f.write(json.dumps(export))
175 | # Write the private search file
176 | file_path = os.path.join(pss_home, 'private-search-set.pss')
177 | with open(file_path, 'w') as f:
178 | for ps in self._ps:
179 | f.write(f"{ps}\n")
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup, find_packages
2 |
3 | setup(
4 | name="private_search_set",
5 | version="0.1",
6 | packages=find_packages(),
7 | install_requires=[
8 | "flor",
9 | "click",
10 | "hashlib",
11 | ],
12 | entry_points='''
13 | [console_scripts]
14 | private-search-set=private_search_set.cli:main
15 | ''',
16 | )
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/tests/__init__.py
--------------------------------------------------------------------------------
/tests/test_main.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hashlookup/private-search-set/5f0f1535b35fdfce31e4ab09df098d78bd68a751/tests/test_main.py
--------------------------------------------------------------------------------
/tests/word_list.txt:
--------------------------------------------------------------------------------
1 | zygote
2 | zygotene
3 | zygotic
4 | zygotoblast
5 | zygotoid
6 | zygotomere
7 | zygous
8 | zygozoospore
9 | zymase
10 | zyme
11 | zymic
12 | zymin
13 | zymite
14 | zymogen
15 | zymogene
16 | zymogenesis
17 | zymogenic
18 | zymogenous
19 | zymoid
20 | zymologic
21 | zymological
22 | zymologist
23 | zymology
24 | zymolyis
25 | zymolysis
26 | zymolytic
27 | zymome
28 | zymometer
29 | zymomin
30 | zymophore
31 | zymophoric
32 | zymophosphate
33 | zymophyte
34 | zymoplastic
35 | zymoscope
36 | zymosimeter
37 | zymosis
38 | zymosterol
39 | zymosthenic
40 | zymotechnic
41 | zymotechnical
42 | zymotechnics
43 | zymotechny
44 | zymotic
45 | zymotically
46 | zymotize
47 | zymotoxic
48 | zymurgy
49 | zyrenian
50 | zyrian
51 | zyryan
52 | zythem
53 | zythia
54 | zythum
55 | zyzomys
56 | zyzzogeton
57 |
--------------------------------------------------------------------------------