retold-data-service 2.1.1 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/BUILDING-AND-PUBLISHING.md +2 -2
  2. package/Dockerfile +1 -1
  3. package/README.md +12 -27
  4. package/build-all.js +66 -0
  5. package/diagrams/architecture.excalidraw +2966 -0
  6. package/diagrams/architecture.mmd +17 -0
  7. package/diagrams/architecture.svg +2 -0
  8. package/docs/README.md +12 -12
  9. package/docs/_brand.json +18 -0
  10. package/docs/_cover.md +1 -1
  11. package/docs/_topbar.md +1 -1
  12. package/docs/_version.json +3 -3
  13. package/docs/api/reference.md +8 -8
  14. package/docs/architecture.md +6 -84
  15. package/docs/diagrams/component-diagram.excalidraw +2807 -0
  16. package/docs/diagrams/component-diagram.mmd +14 -0
  17. package/docs/diagrams/component-diagram.svg +2 -0
  18. package/docs/diagrams/component-stack.excalidraw +1169 -0
  19. package/docs/diagrams/component-stack.mmd +6 -0
  20. package/docs/diagrams/component-stack.svg +2 -0
  21. package/docs/diagrams/hook-execution-order.excalidraw +3230 -0
  22. package/docs/diagrams/hook-execution-order.mmd +19 -0
  23. package/docs/diagrams/hook-execution-order.svg +2 -0
  24. package/docs/diagrams/initialization-flow.excalidraw +1800 -0
  25. package/docs/diagrams/initialization-flow.mmd +22 -0
  26. package/docs/diagrams/initialization-flow.svg +2 -0
  27. package/docs/index.html +6 -7
  28. package/docs/lifecycle-hooks.md +2 -21
  29. package/docs/retold-catalog.json +141 -141
  30. package/docs/retold-keyword-index.json +6818 -1608
  31. package/package.json +130 -96
  32. package/source/services/RetoldDataService-Brand.js +13 -0
  33. package/source/services/comprehension-loader/pict-app/Pict-Application-ComprehensionLoader.js +65 -15
  34. package/source/services/comprehension-loader/pict-app/providers/Pict-Provider-ComprehensionLoader.js +2 -2
  35. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Layout.js +68 -114
  36. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Load.js +29 -29
  37. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Schema.js +3 -3
  38. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Session.js +2 -2
  39. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-SettingsPanel.js +62 -0
  40. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Shell.js +142 -0
  41. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-Source.js +7 -7
  42. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusBar.js +125 -0
  43. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-StatusDetail.js +89 -0
  44. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-Nav.js +42 -0
  45. package/source/services/comprehension-loader/pict-app/views/PictView-ComprehensionLoader-TopBar-User.js +48 -0
  46. package/source/services/comprehension-loader/web/comprehension-loader.js +5475 -6243
  47. package/source/services/comprehension-loader/web/comprehension-loader.js.map +1 -1
  48. package/source/services/comprehension-loader/web/comprehension-loader.min.js +75 -1
  49. package/source/services/comprehension-loader/web/comprehension-loader.min.js.map +1 -1
  50. package/source/services/comprehension-loader/web/favicons/favicon-dark.svg +13 -0
  51. package/source/services/comprehension-loader/web/favicons/favicon-light.svg +13 -0
  52. package/source/services/comprehension-loader/web/favicons/favicon.svg +13 -0
  53. package/source/services/comprehension-loader/web/index.html +3 -0
  54. package/source/services/comprehension-loader/web/pict.min.js +12 -0
  55. package/source/services/data-cloner/DataCloner-Command-Headless.js +2 -1
  56. package/source/services/data-cloner/DataCloner-Command-Sync.js +110 -75
  57. package/source/services/data-cloner/pict-app/Pict-Application-DataCloner.js +70 -47
  58. package/source/services/data-cloner/pict-app/providers/Pict-Provider-DataCloner.js +3 -3
  59. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Connection.js +1 -1
  60. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Deploy.js +5 -5
  61. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Export.js +11 -11
  62. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Layout.js +89 -135
  63. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Schema.js +3 -3
  64. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Session.js +2 -2
  65. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-SettingsPanel.js +61 -0
  66. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Shell.js +136 -0
  67. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusBar.js +117 -0
  68. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-StatusDetail.js +81 -0
  69. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-Sync.js +38 -38
  70. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-Nav.js +42 -0
  71. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-TopBar-User.js +48 -0
  72. package/source/services/data-cloner/pict-app/views/PictView-DataCloner-ViewData.js +5 -5
  73. package/source/services/data-cloner/web/data-cloner.js +5855 -8067
  74. package/source/services/data-cloner/web/data-cloner.js.map +1 -1
  75. package/source/services/data-cloner/web/data-cloner.min.js +75 -1
  76. package/source/services/data-cloner/web/data-cloner.min.js.map +1 -1
  77. package/source/services/data-cloner/web/favicons/favicon-dark.svg +13 -0
  78. package/source/services/data-cloner/web/favicons/favicon-light.svg +13 -0
  79. package/source/services/data-cloner/web/favicons/favicon.svg +13 -0
  80. package/source/services/data-cloner/web/favicons/favicons/favicon-dark.svg +13 -0
  81. package/source/services/data-cloner/web/favicons/favicons/favicon-light.svg +13 -0
  82. package/source/services/data-cloner/web/favicons/favicons/favicon.svg +13 -0
  83. package/source/services/data-cloner/web/index.html +3 -0
  84. package/source/services/data-cloner/web/pict.min.js +12 -0
  85. package/test/Bundles_smoke_tests.js +43 -0
  86. package/test/ComprehensionLoader_smoke_tests.js +95 -0
  87. package/test/DataCloner-RuntimeOverrides_tests.js +344 -0
  88. package/test/DataCloner_smoke_tests.js +87 -0
  89. package/docs/css/docuserve.css +0 -327
@@ -0,0 +1,6 @@
1
+ graph TD
2
+ AppCode["Your Application Code<br/>- Configure options<br/>- Override lifecycle hooks<br/>- Inject behaviors"] --> RetoldDataService["Retold Data Service<br/>- Loads Stricture model<br/>- Creates DAL per entity<br/>- Creates MeadowEndpoints per entity<br/>- Manages service lifecycle"]
3
+ RetoldDataService --> Orator["Orator (API Server)<br/>- HTTP server via Restify<br/>- Route registration<br/>- Request handling"]
4
+ Orator --> MeadowEndpoints["Meadow Endpoints (REST Layer)<br/>- CRUD route handlers<br/>- Behavior injection hooks<br/>- Session management<br/>- Authorization enforcement"]
5
+ MeadowEndpoints --> Meadow["Meadow (Data Access)<br/>- Schema management<br/>- Query building via FoxHound<br/>- Provider-based query execution<br/>- Audit stamping and soft deletes"]
6
+ Meadow --> StorageProvider["Storage Provider<br/>MySQL | SQLite | MSSQL | ALASQL"]
@@ -0,0 +1,2 @@
1
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 449 1263" width="449" height="1263"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2c63PbuFx1MDAxMcC/56/g+L6kM7FcdTAwMGVvXHUwMDAy+WbHdpOZ5C5cdTAwMTel0+m0N1x1MDAxZFqCLda0qKMoP+4u/3uX0INcdTAwMDQli4BFO3QrJ5NIIInHYlx1MDAxN/tcdTAwMDN26T9eXHUwMDA1wUF+P9FcdTAwMDdvg1x1MDAwM303iJJ4mEW3XHUwMDA3b4ryXHUwMDFinU3jdFxml4j5Pk1n2cDcOcrzydtcdTAwMWZ/xCTsIfiD33KuJJ4/pVx1MDAxM32tx/lcdTAwMTTu+yd8XHUwMDBmgj/Mv3AlXHUwMDFlXHUwMDE2z05H0URcdTAwMWZcdTAwMWVNJu/SoT5E5ud8ap41dy17k+lBXHUwMDFljS9cdTAwMTNdXrqD8pCsvt7DVyxWX2/jYT6CXCKK5apspOPLUV7cR8rCea1vXHUwMDAztCqZ5ll6pd+lSZpcdTAwMTVN/4CP8Vx1MDAxOaFlw+fR4OoyS2fj4eqePIvG00mUwVDL+y7iJOnn96Z2XHUwMDEwXHUwMDE3XGLzoNbG31x1MDAxN50ktfKHnoJGL0djPS3EiVel6SRcdTAwMWHEuVx1MDAxOT8qR1H0cPJhaCT/a9mnLLrWXHUwMDFmXG7Rj2dJUq14PFxcVLycoVL6dFHyreym1kVcdTAwMWSMsFVRTT+qZT+lY6MpWCnMXHSTlSmJpyegXCK5qe1cIkqmupRy0aXTuvpUVaiiRkl0rpOaXHUwMDFhXHJcdTAwMDYrwVmqlOu7/GB14dubbfVGWZberur9ovM0XHUwMDE5nkR51NfZTTxYtiRHm1syT1eaWnwqZ2M2XHUwMDE5RvOx41BcIsapUlxmk3JcdTAwMGWTeHxVn6okXHUwMDFkXFxtXHUwMDEwVzxcdTAwMWXqO9Momre4XHUwMDE4WM3eXHUwMDFhXHUwMDA0ZVx1MDAwYskyNYksU6No3dRcdTAwMTDZYGpcdTAwMTWV7IKp4S6ZmnVhaVPMy6ZCKZVcdTAwMTSKP8qknkRcdTAwMTON6oBA/1x1MDAwMVx1MDAwZVwiXHUwMDAwTUviQZRDj4NC5f41PoT/x1x1MDAxN/HlLNNBOikuTIvCn2FcXFk81EFcdTAwMTJf6MH9INHBKE2vzLVcdTAwMGbj/8DyXHUwMDFmnOtRdFx1MDAxM6dZxT1cXKTjvFx1MDAxZv9eXGKi0tmi9Cy6jpNiorjVsaMkvizkeTBcdTAwMDBcdTAwMTno7KAq1lx1MDAxYzqarG64jofDqrs5j6ZcdTAwMWGkYNaxss5cdTAwMDE0XHUwMDE1QWn2wcmdpVl8XHUwMDE5j6Pk6zPKKJrl6Vx1MDAxNz2dSynPZro6qfr9ylB7pFx1MDAxY1a5muBtq8l8uFx1MDAwZi2LXCJ19uNcdTAwMTXHXcxcdTAwMTmhpVxyLFdcdTAwMTdG1IbVhdNOrS4v1ZFcdTAwMTOGqpbQ6MhDzFx1MDAxOFx1MDAwNcorp61VR/6QRqlp11xcukNT6038nEV5mi1a0rJL8ECa4cFhcrZgRIVcdTAwMTiNpTO5bumYbrD0yurUXHUwMDA1S+88R1C+Zr7bTJpgpFx1MDAwNEEy7Fx1MDAxZUjMXHUwMDE1Lig0LlioXFzh8T6m0XBcdTAwMWH08yxcdTAwMWXkhaO8XHUwMDA2e06M78w0dGFcdTAwMWGcXHUwMDFjfVxmJjpcdTAwMGKgkyDr6pVPOlx1MDAxYaa3p+PhJI1hXHUwMDA0tbs+RePoXHUwMDEy7prO2yq9bde5w8VcdTAwMTHXXHSkg8LdXHJYaDOwWOvvhcdpQ2itXazyvdxcdTAwMDOVZfvjhpYphVx1MDAwYlm1m+bjXHUwMDA2SYhcblx1MDAxOXlcIkqx1Ch7XHUwMDAwXHUwMDE4/NGkJV5waGlRb81gXHUwMDE37Vxcd+pQgzVzyUPTse1Mg9tcdTAwMDat8JpBk0rZ/lDjsTCipPKxXFyCOMJMcIxcdTAwMWVjuU9cbiNzLVx1MDAwYl5cdTAwMWZ9/mD8pc7+Uri191+/fjY+XHKc3U1cdTAwMWNcdTAwMDXgv/L4wni8L+ks10GmL2OYXHUwMDFjs8s3pfq3XHUwMDE53Fx1MDAxM4yi8Vx1MDAxMLpx2XW2eNBn1oHi6Vx1MDAwNbRcdTAwMWJcdTAwMWbwZj7YvCCCqriCXHUwMDAyt9dcdTAwMTWhyu8rUOCb1pX9cUYroCCZXHUwMDFmKFBKKH0yTtisToOrtoChXHUwMDE1N+7QTr2B+fflXHUwMDFl465LuCCacaFxVrZwg6CWfYdIrds35Vx1MDAxYux7f4jhXHUwMDE5XGbxO8TAIWNCMFo5Pu5cbjfM1S0ot8Wvv5z2v1x1MDAwNlx1MDAxZqP7hYN89+VvJ0FmXFyhcXkwsqL4eHGgXHUwMDFmxOaAv4hcdTAwMTGszvz7ILii4NrsqYtxXHUwMDE0pUezfFx1MDAwNE7593lAQY8v0mxgLnZcdTAwMWQxmt1unTU6JdTdsCR0xZKFWCbSmUaovVopun7kSlXp+/Y00jKNKORFIypcdTAwMDRcdTAwMWNcdTAwMTGcPSmNLMNcdTAwMWOqLVxiaVx1MDAwNVx1MDAwZZzbOexcdTAwMDPxgHl+ztKbeKiX+5JcdTAwMDR3XHRCpCuErE/GXHUwMDE29mDYtuaKh1xcWXMlV2PPXHUwMDFlj2VcdTAwMGaiQlx1MDAxZrNccpVkXHUwMDFjI0JcdTAwMWVjts+BXHUwMDFlr81cdTAwMTn/0WBcdTAwMDBDNs6xP1x1MDAxOOnrqObofpnp7D44n8XJXHUwMDEwNt1mq36W3r0vOlxcXFxeXHUwMDE5XFzh14fBb+ZufadcdTAwMDez5b79aDaM82CaR9eTolx1MDAwMvC6wTS9yIOhkUXnczdcdTAwMWV0slx1MDAwZrBH16S6XHUwMDFihahmXG7ZvPJcdTAwMGVunXGE2Vx1MDAxMWCM5fqpK1xyN4SAw31cdTAwMTSllaRN4Ze0iVx1MDAxOVwinFDUOo+8OId+1OzQXHUwMDFmXHUwMDE4xlx1MDAwNljf4NlrhkFcYultODjcZFx1MDAxYWRcdTAwMWaP8PLtoa9ccmCKXHUwMDA1XHUwMDEzj8t3elrnft//5WPwZ1x1MDAwMP/GsMv9M/jUn1x1MDAxN1x1MDAxY308glx1MDAwZlx1MDAxYt1tJduuXHUwMDE1d5unXHUwMDEzP19rXHJwzbG6jmg3V3e8zZi9k8RqK5Nl14TayI7ZenYj6m04LlQ+Vk1Ow5OQ/d84vI0pT4hXlbT52F8ygjBR3Ul5mm+eLcdZflxuytk3X1aff33TfDdcdTAwMTZNt1x1MDAxZqJcdTAwMWVCjHGJXHUwMDA1loJcdTAwMGJcdTAwMTBPyKwqVE+GvMj9XHUwMDE0ISygiDKXKsv7XHUwMDA1oqLM4Ch+XGLtcaykQkQgQbFLdTQs/1wiJUKrOtFTgpR/lUuF0C5CmIY4ZFhKSatcdTAwMTVS1COUYiUwV+COkVxmXWpUjKKQhFxiXHUwMDFlXHUwMDA19Vxu7Vx1MDAxYWmPckWVOaRcdTAwMGVcdTAwMTFz6VwirlxmiStki5CKXlUkzEWIWEhcdTAwMDS6XHUwMDBmw1x0YVi8jFSYXG5VjyimXGLjXHUwMDFjXHUwMDA0XHUwMDAytzlUXGKS4YhJhJFcblx1MDAxOXyweshIb65RXFwoXHUwMDEywq7aRVx1MDAxM4nVJ8ZdXHUwMDFlUZiphTpxVYZXTVx1MDAwNWFcdTAwMGaGgilbTI1LfdbEM0GseeSoXHUwMDA3taCQL1xmxmVcdTAwMWWr80RlXHUwMDE5MzL10V5Vc1x1MDAwNXGoj6GVREWoJLFsgYve3OS4XHUwMDEwXHUwMDFjJlS6VEiFVEpcblwiXHRcdTAwMGahPmtcdTAwMGW46kE7XHUwMDE1xXGp0Fx1MDAxYVx1MDAxM7ZGLKhtzC6mxSSRnFx1MDAxMjI3IWrNiFx1MDAxML2FXHUwMDA2UkWFy3yAtsxVvNBcdTAwMGJWOe4pfsLC7irtuZiBJa/Q+1x0VVnRX9WehO3FNH+XXl/HObiaz4WbWHOCeZTlx1x1MDAwMDhFsoS1IyySN1x1MDAwYj+dZudxXtlQLd/OdHp3xaDCXdm25Wl6XHUwMDFj1tA3ayVr4yk3o3o83LmvXHUwMDBl+a4t99rI+KhAvFx1MDAxMWxb6zNcdTAwMDBjql6rs6BOztPbrVx1MDAxYsx3zUzqnlx1MDAxZLhcdTAwMWRJq8Bp3ueT68msvCcko4VbXHUwMDE0SMJcdTAwMWaiXHUwMDBmcYmue0x9JKZy7JmZT1xixpx3KKj9XTGV9Fx1MDAwMNtxaDBcdTAwMGJgXHUwMDAz4apWmjpqnNrs7a0u1KBcdTAwMTRRv6d9XHUwMDE5tHE4NVxihd3j7lXaXHUwMDE0ylx1MDAxYmmjuUZRw5vda6xxqGicxcYqbVx1MDAxMqWw2/Ga2mZcbrVvt5hTKNWCatexk/p1qU6ZzShuP+7LlPbTvlx1MDAwMGk97Y2L9tM2XHUwMDFjetq0N1x1MDAwYtpP+93eXHRcbnx+smqDXHUwMDA3XHUwMDFmylF+WVx1MDAxMHjSXGaBrlx1MDAxOZ9+XGIo0Hq0YY+Ay9JWXHUwMDExsLL7dzqphHVTUaDAPVx1MDAwMlx1MDAxNj/+XGLYfJ6yXHUwMDA1XHUwMDAxkfRzk3VcdTAwMDSkjd7Gl1x1MDAwMZv9lzdcdTAwMDK2XHUwMDAwbLWTyFx1MDAxNjDVRkC1O6Z+T1x1MDAwMlxmcfORmTdcdTAwMDA2bi+28Vx1MDAxZt9cdP+4L3za/Cc9W99cdTAwMDNg8IxcdTAwMDD4TCjVXHUwMDA29TWmjb8s/Dttxj/XXFxbP/yTXHUwMDFiflx1MDAxNcc+LN1GXCIp84I9Wrz9SmWHXHUwMDEySb8n69lBac5h7bfM1SY9qpp9klx1MDAxZJJGRaxrN/az/VI9smfTILj1ZsdlXHUwMDA1pYF+7Ci3/3mgX0y6XHUwMDE5XHUwMDA17ZA0QIg1I95cdTAwMWNYXHUwMDBiSFc031TnXHUwMDBigbVwNLXDhI8gQO9gtFx1MDAxZItcdTAwMTZAXGY2hHpcdTAwMWZcZvpcdTAwMDWjkcNcdTAwMDR6xKJcdTAwMWQ4zVxuRUtcIrZFol2w0StcdTAwMTLtXHUwMDAyku1GomuBaIXtPFx1MDAxOX/WtEPRmHE7kuxNn76R6C5cdTAwMDain1x1MDAxYuvaQ9H1l1x1MDAwN15cdTAwMTaBnrlcdTAwMTJoc9K2V1ok2vDrV/ZcdTAwMDDaRrYz93qTXHR4XHUwMDAz3DCQ1lx1MDAxZUBcdTAwMDPvtEhcdTAwMDdcdTAwMDL1y4os3IhLje6JkS5cZuqXXHUwMDE5XHRcdTAwMDTYemZkc7zXMzWStJxcdTAwMWHJYOJcdTAwMWNq9MiNdKHRp86NdIpTf9/kyGbe80yOdEBSz+xIXHUwMDA3JvVLj8RO+Zvu6ZHNUOqZICldMlb/XHUwMDE3XHUwMDEyJJ+J8drA0cZXNV9cdTAwMTaX/vXxr9/9O4/z6nuo7i/hYVx1MDAxNTq/hLd/wd7zN1x1MDAxNJfvoTlcdTAwMDXBJeJcXFx01Z0g+PIlvIXard7jfpaX3Nt96+7hIez2mt37hdG+WqzVXHUwMDA30WTSz2FcdTAwMDJWy1x1MDAxYShVPKzJaF6W60kpXHUwMDFmU/RcdFa/03F0ntQn4+Am1rfH6zb0w9nxWXh6ulx1MDAxOM1iXHUwMDFlP82SPO6D5phf/WNeny76Z1x1MDAxNpbCwPSi6Nt/XHUwMDAx5kUndSJ9<!-- payload-end --><pict-renderer-graph:source xmlns:pict-renderer-graph="https://fable-retold.github.io/pict-renderer-graph/ns/v1"><![CDATA[{"type":"flowgraph","mermaid":"graph TD\n AppCode[\"Your Application Code<br/>- Configure options<br/>- Override lifecycle hooks<br/>- Inject behaviors\"] --> RetoldDataService[\"Retold Data Service<br/>- Loads Stricture model<br/>- Creates DAL per entity<br/>- Creates MeadowEndpoints per entity<br/>- Manages service lifecycle\"]\n RetoldDataService --> Orator[\"Orator (API Server)<br/>- HTTP server via Restify<br/>- Route registration<br/>- Request handling\"]\n Orator --> MeadowEndpoints[\"Meadow Endpoints (REST Layer)<br/>- CRUD route handlers<br/>- Behavior injection hooks<br/>- Session management<br/>- Authorization enforcement\"]\n MeadowEndpoints --> Meadow[\"Meadow (Data Access)<br/>- Schema management<br/>- Query building via FoxHound<br/>- Provider-based query execution<br/>- Audit stamping and soft deletes\"]\n Meadow --> StorageProvider[\"Storage Provider<br/>MySQL | SQLite | MSSQL | ALASQL\"]\n","style":"notebook"}]]></pict-renderer-graph:source></metadata><defs><style class="style-fonts">
2
+ @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,d09GMgABAAAAACAwAA4AAAAAOKgAAB/aAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbkCgcegZgAHwRCArVML8hC2gAATYCJAOBTAQgBYMYByAbQCwjA8HGAQhC+PBkf3nAk4XmPctpZbRBHf5h0dXOCPLIl3SJi6U7rsHHQYxf5c4ISWaH5+f2f+69273rggUbMGLEqFgUIzZiRA9plRSM5j0xirDr+QzCCqzH8/sKbYwv+sKI4Pncdv/doLnZLdFCCQQTKcrz5O3tb5VZd4EHlidB0IQT6y4gmyFr+rXkAGnMrsnBOrf4eTulHnQL4P8vnW/SpLNbys8hdYQVV2jH1971V/Sr9m37QGDLJDB9hwwBgt3V/V9OK+mquv6qEhgaLMt2aMBOZ8YDAIaBU3beHPe+x/jqXIWmkGUZQttx2gk3D1Gp6u3lsP+3ltpMgNwEVGRY5kU4FipCxZi/P/hnj9VCSKG7vbCbsEMWMi+aSoDjbk+1LsJXip6QtbZVurbJiLRO4hd47MGHUTTEn4k0NzPgcO3ynprgpQAEAAoDBKM0XjBIKIO+FAAkwXRwuyUlC4iuiU1jgOhuqhgNRN09rg6I4AAAgofjqWiqAwQSvBcGXgKgIAKIphY8fXjvKPSfr4hJVlb9CcBWG/eMPz7hdI/nYqQu75wa6XpPuDf3UNfvR0zILLZheUhtBIh7p4CJSOIf/HupsO9r9twmEN7r9/xHGMHXjLM8RaPv7BTymagraRpAP3sqzrIQeJ1426JIAVrQqNwZUElcAlucCUz87G+JP6cc5F7I/K/oe48QKnpyQYd5JnHwUn69iVrcOxh/7Pe8jCOTqMhzZaEw8ztMAlwKxzAi4mNT0TGwsHFw8fAJiIhJSMkoqHjz4StAII2gNHR2RDAWDggTaYpkOji1xRhppw9HBGMfnhA6iLtIImFkrP98GAoeNio++2joBGoKQUsUZD6QEWt3hI0HWu4FS4OMspaHAzBGeQCYWABgE4f5QlzAy+sdwmSAVMdRE6tzCLNNJjRBZtqSKeqIQBcdGCmJSeOW1jKYw6hAjsA4hM4hTA7hcBi/LI6QCErMiTw4noqjfDhKzTEaQSDFdo7f7iTYH1ci1EhCXq+pcoMSMM6B4o4RiEc/eg9PGY1DJJ04YCfA/VsmC+qAR8i8fAMAki8PCZ0g1CdupMlLmg5rGhggM6W2fgP42gq1yoD1AADQS+OXFTE6ok4bAV3aONUHL8OAQMmoBbJIksolzyRTRkHynZXWs0nhYG7wX9Tx8GvPPvPUgccfuB8ENjTWbQOgnbLKsnqAtgGMDzGL8M4mdfgQVbUcJ8Hy/ZbzlvHE75Mn73aFBHm6uAYe2270bE4tHhVb7qGOlkdq69MdWQYtx5sfHkdTczKzjSIJT5XCD2MUevrRg5jhuoJkq6MgKVlrdW87zbtoZ4tvO1d+kSAKA0C8W8h+/RNMu2N4ED0IRs4IH3YTOKyCO5b9hudROf/DOCFqTjEnTmw/cqthBFGEtn/F8bM2qvTZvPEmu6DJh4L02/QDpuMQz9VwBQf3SA2n038D4cUW75BAZ6WVsUymAKnhxQXgrwByutS7kSyJODg6MoINsrTaeqR2cNOH8SaTCOnQcRxMNuBKd0EsUTfwAf+lZ9Esimj7Lf+4jwxWDNBZhRpwUgzGZGKVSL/9az2tBZyLtNB3a9Bsuq5Lij65h9rLPH4Sx3mLMaugje3erk+yinEZ/RCdHxhOxVOehSLGWIH9kZIOQ3onKV+orfnybVn+A/yV8zzF5TUulD6r65DWpU1LjRiJrwUv+8qOqQdNb8WExwOAaX9o74KhJWEtWhb2BNMazJ7nzRbjOYlm6L0cv/f6jlpAeL/FZb8nUjyhrZaL9/UEadzMsT1W7cK20R8y3T5xFdwMWfGHH3qV5ZqKfCzlV6841QhHsWppC5GqoNEtCEJWYL3XE2H43JPTtEQR3VI9i36h8sMMSemzJsP362Gf8BU4IDuBhqmUqB4JYVWud4zPqVEG7ym3w0rG4BddKO3FerROS4EqUgAIG5bBx48Bp6S7ICyzfGQx/XAv7jwwRTOksb5UyQckLSYOOFUQGp5KavwjoRbVVUabeReQQcYycAK1dxum4Y0zuHpdMdcdGmgHYG+y7MKYpP015bY3oW3ZocGO7Dd6cnBglfloDZB1NOUg/YN557SkQisF7w+0XVAqsoSypXCzw4C2gg5o/19vd7P4Vq+kiTCqLiswVVABUqT42irNekllQktcl8jzHFzP91Ts92272VQgA/A2KmBLfZbATV9TDq5OdeiEDiYfsgrAp6hscrV3s8erwMG8ubPiYXqyVHkojKDhkiHdI62Z+ogB+l2gUo60Vb2TFzohptBxJC/M/IcDUuxvk5jrzPWAxEp4yGBWPF/j/bvkYwMDtG27abtQPBcbyzdFHAgjEUaCNM5HGjm42VVYBD1T5/aE6hA3aYQpxtGaZkkPMA2/A15zrpJP66UwKTbvRVW1J728VjFhxcjFPhZdnv/xyKi6a/7iToGXcChl/RP1IqBv+5huRpej/Lx6Xu7WiGmtIAsjvj7GYDIJ5cia+4sHjg+rlbMss1m+2UdAP1BHC2TbPlz8thSWRNoYkoabuGlAdjwLAxuwA8i0uv5/k9xW/LfOSm3wK5g0ZPnsZ7Lg6VTMvbCkz3y4R9q0tAiZqoI9bPcqsOFfTfcJu+baBecD94xkrszTAyxem56pua+dAjkMfH27VgcT5tb+ATn/xoIXHuM+jLhNpXSppH+Yzazl3ex9FVVUqOsEkiHFeJAIL8hGn9QqxXWZRLR92kh+Mef41kDjzwhZUrwnke+iBmRTUerNcR6bzWZTSx+MNNX1Ab8zKsh5OZ7QfZ7y597WsbCu6DEnTrtxIb6dlPUMySQ637X+0mP6568o8KVVFgYK9/uQMTB9LzqNseWpRJ8V7/5miyxIwGmw09CZuJMOwtni/Rob1XtlmUVUh6GlRZ3EkzwFNkYbimYGpkrNkM8bYowlipMe5tCvuQrL7u5yLRVGIKi02zImwrSn4mFHKRf2t7TDSzNHmsosshLNKKnAOTLRg54cl/d5A4ncWlMVm0cObnQVWAWyuBUIfdhLtXzxq/PAbbk94poBJ8EE7fH8v7EW5fPIEkErC3Wm6yY6D28GLIFMDasZL/AfD9Zq0KG4Lgu9gnSVQgeaOSa5WIe4GdUCy+w3bZFWXDNhTVsP7m+0go3Eo/bX3fnZwnz1ppxcq5eI2+J5VJBO9plquLxzJ6Pf38aJ6HCYM6p6ycNsocBHaGN01hy4Gd/KwbR5j7indX346NUrolSejvJRoIYAfZekhO/B5s951Qlw9H4eWz0aSWplU4UCk5gbfpVUt7HWfq33muy0N2gi5MSiUxzd7Cj9NbyDZy2mYxwBKpC9XLvaNx831b9EmlbGgeJejCfizcrtEt+Kbo7ZW5kCH7wbSuP43e2H75Xvlpp3sfi2OTNyzhE54fo6Kq+N5IN34WSYO9pl5tQRl2LiWvHElGN6PK0Pv1yWZUa7W0xOgFXgQ5jlMSmK0Cc7VjGd5jY2701oGPAenJOdAhnvqNSPNWX3v7+vYjDWU2vp8GMejExNyyMRTltv4lXeOc9TU1G+gPTrCpQChN8pTnZzCGgz6YIcafGHUZ3X84Vma8BUg/7h/CqDq5Bdc90Ns1+HDFYrqMAiy0Gr4dGh2Ob6lN9+iz3PcxxEMMJCxTcqlzoqfym+aevK9lt8i4OfSdEzknOTPAcviell6sDfWWFBmHMSG0mJNNUNtrDq+JKAo+Dk/O0T/TBGTvBlwfnU8D/wwa5W7BtJ+yCY9rDNaGPKScy5zhN8LmkP4/mz314Qlpx7EdKm5oMr7cPDPNm/vmdJVonnldmyE49JoNRspvYzG32dlnZblp58pMeFLmb5rIpjLZK6VM0CoqLX2panIj0RtxKk88rBXZJGjElR3O1qBFjd6NyS/TbSI3wQ3rzRWuoXzHzBWwrjhLXNn6qG3S6uhX1S6NzqudtyrODQu6DxbSNuZEM2ICz7igsGuFrZeYjrco/wWIEnutrPkv3eTwQNdJaDCdZaJKmOJAcHVCYTurwj4Z6j2aCrulIE2K/e/j/bT/W4QS/ULyAdv27XBjjtP61rIdLcarlj4tIAGeAQzqrodyXaw/nXaHsCh1PAGyKC2P98WIZzlc/QZ+9s+Cs1xSTDSJ19q5cqLZ6+dbYSvXCulH+fLcYNIVL+U9xMQ+G+0qPzcpXR4U9YzQaEHXEMKoa0JlcFg2/2Ykk82uaWYnCX0em3Z8pX3r1zOZcUzBQYkNom9/4KcBdGGgW2b7vfiCv9eFpLjaS9SIjJkVS1J21665aOj8MfkLakTQpOVpdpkbT8W2UdrhtZbAxy8Nie9vuAPj4X522gKjfjF3eruwLf7Rmul6RikgFMCbstwhv0m/27bX9ZmmsU43fKH6LSZ9vELHFYUGz4kmFqgUJLQLT+gIkpjnYwgtXw1/dwugqDAeGWK+WAwXigsXtF4u2WkEX23dsyoXKMOnqjxkoaLVDoID1X+bWh73s5JE6I5wkF/bU4OchhFVyyeLjomvEbqVHTCy4tudQsD6JghInKtXfgTdo0SZ+ZE5OQhxMJcxHD4yxAu7/ZrEJ/LyOfi7e39WNBS/7YbsPTmo85wp4XJQnJ5IC2kyOavKudIAjwoUbae8tHwpDn5VXxQjpPlDjPeaI8liFm14YvZflQhMGtMble9WVOkDbjA4p1JGqLsGTiRZ5liSOkQmDsLGOAuEtmLHFGoDLcH6hMCTeVbHgB+Cdk/2uStewf1BORvhoqUDhfixs7whgijecq5kbV6NKUaNI+8Gr90vY86mlUz1/roC8hgz57Bm3bV8NMt5DZa9MLYu6jpcwVfDwl59MJFc9Bn+2FsPJkM5zP/mSAJycB0In07Berev3KpI5yyKCGytsAtQ5Mm9XizOCNDZroKRfidpUYQsXzkMb5nto4ipKnfOn/g6cC1EAHBvPhsB6O/eDjgftTqyz596F5fpzJsjW//h8ER8mmjqMfZlY1mR8Wf4ImFJlM6ViQNmi48a9t2TsXKZnZnngsI225XqViFrfFI/EcW7ZpXMmYwwnm+UQDtdS09W0P43TKb4xl536cS5kJ6gextyibAFnnQcp1tSM7xBsxA3O1NLsxe95x0xfAvP9/WAjQuhqoflhb5GEaIx8lXEbM9Qja1ZtVBWouM1ft9ODbXvM573uwe6UbNpWdyRupnNHFK/Xp+NUEhC91/+NxSZQhCWmZC1pimsNbySFT7qOhR8rLtzN2eLGdl4pz3rVsfLMu0Gz8yCmE2qD6hh7OUYDV0L08UQiCy0QraTCr88xsFUSGfvo3WJvKTMITstirzm9F36INMkPztX3lwRqQo/koN94KzmtYC4zAoEsxoZgZr5O3NKT872Qcj7hgInKaNkBGFgILrq5cyr1MQliEu51njYF4LXxHnww5Q5uoE/PZVunbMVmo6YekQr0nw5tpYB2Jylp9qMFkwDupjOKZXb7PlKFchrGSM3G8FVEQVwsZq6IknHJksv39TLg7I/hshjBxNtfSUhDzKXEckWyDb4ClUNws36FDBtc6bk1BlyFfL6lqlqFwKwMH35ebP9RN95n6qwM+Kao2MhkAurTPXJ01v2iISSp88vydOX9FmjNMXyfpBkgGugRh0yyuicIJ6TOSBSBJ/pJwuL38ch/c42zM6O9H8cyWT/lVJAtM4hNOW4lnIeC1+U6fvujbYvLmD0bZHG/anHSXJcPipTtccsN69+KN0nP39NJy5gK6crzl6eT1pMqEUJbFheHTQ+w5o9oL6iSYKeIYpE+A8nEGdlKd3ZuYeQxsoHC+u9wWdGE8lkcwErA8V4n2Hl5n8iYeYFiHuA937Os+vaddtEEVsWz5ij/wiZGDm0JUvfU4C3+LkbfvawVW1VCpDkCKJSZ6D6lnwHjm96qI4YxpuGstfIdYleF1aKYNd9ndqIOlTpRR3oLi05As+uUHCZO2dyyiD5Wez9s8Y2w6aGFsSuGgRZRTn+3oya1ye2sGJrvYTxds5U/Oib16tu/Q9ixnO/UPy6hFcNvK3xJTy4ml7FIiPNbDy4SRhRHCkCf/ldIah9vlKqSUif3jQosvYOLdO0BPdhvRqUJKkwz4ScrfLCQOAdX91ZxYreS24av9Bc4JDEVhQm4QOQ/KgAcQ9hbGO+GYJgKNaJV7QiaIeohFMHDBR41kKmLjBxXUOJWR5ULez4MQAufUiyEHjWgWqx3scX0ykCeMnNJZJcwK3ME8bKY32v6hEUykcTTmvtQwQpi/e3oKFzBOQ++6gI1ZIX913BUk3cm4UqXqe4GyEVEowjAyEMgEtckeNxB0KA7+1TmGyoS6TofvxHznuYebOPhgJBjPLZMuA371gUFsp/VWEDptOM3TpGBlfvgErj3EvziAgJZAD5cHktmbqfZtT3LfqIskbGJe3SOlHMpHczZkzM+YCphP5TQiMloD/mcbun/B7nwftZPtXhmIZY8DmBqZYeKbS+qacxX6iKAYiEjPFjvjNios4Ij8PHI1tJQ7c9nEjWnJXpkErqnQyO4+cZ+MXbHO+QWeolQl/I007ZTmFCxHc3kNPIBr6tzI2GI+SNRBoLcNGx25nofDW2NBbIq6SxipPu3+WR62sgltflARb0Z3Hk+CGk0aHaQhLPUSJitslUWpgRlSey7N2/yHe2QCP+QPsWnIPyetY6IouMF7NLTtp+ye1ADu2sRU76AtVRNnDLwGleyiQMhAyreLF6X8C2f6Hp4YFRUuou53rXGha9Cx7DLlYn9LMbc/GeRYPtw/LyivNygXagUpsXwgu9DE5E4Y9M5hNTPv696eaeXPAmRgSY/by1R2BW3G6UfCve4CiqgMJonBkwWSbZpQ46mTfwMEJ3sz5KKpVdt7Bun6p5rqQFReWU1IiqzpK1fl8YTRB7JCf/R18WyTtTWl5G1lKn3mB4QdkH72Meu1c+iVrZLZ6FYivGU+e4NYlnddZeHVF4zr9nsN+hbHFj84T/MEqF9o+w6d8CdXTU4FMBVkRoIpEOFK+K1/q13O5hTLJ7b83Lfl8otRXNlf36gbVTuDpvrdCgjTs9gvY3IpxDrcVhifHC6TsbmvkZ/dpBbCXth6FDIpOPRml/45Tu3W7q9Mxju9nPiZXvmBLmv4DQl9V//HR3NCycMG/Ew0tz3BaY03rWRBkKxyBp6hNlcAoWY4TbF9Z4EXQzPivTwE2vnGWwfZiY86lmeaQ1xjfSbH0a+t7Wl0BkOTkUN358+wgqauT4ZTS8vadWR8RztcCDnZ1cF7poTtT5WQ0FOrk6XNHeGJabOK3+rjxlaAXqFRWwGl4dm48xpaYbDTxHBA0xo9v7d5celxHp/K1Msz+YWYDl8xC9nQwMA3kGzQiB3nj1rkUgK0ktGwsYGylcLG6+7r8I+wHPAXgURctQkRTFccZZwDmik5nSaQnGTnl6LzxiKqBm9EHaGd93zgXWsI1/DhNhEjOaX2dlXdwwtqxYNuSkTdhMrKO+rFm72m2vmww4/NhAeQFWpc41y1kObSlAb4Lm5Z+LZqLs3Y18rfD27FkcfWMNjcAh6o+ovJ9DKCbZ4//WL/K5KbrOIxzXQyQnIvF1KJziz1icZztFmmuFCD3ifte1dIR/jPk84P/rSzkqNBWo6WsKsPXAKn0ft6gffC2usOF9cP8jMfDihXdNroDoxZsyrqt8KCRfw0vqJAsJDmwH0GeP+yHZYzyrCfeHofY2OWoYh5DZpSYUMmYGF2nLY7t78BVyMCJHK5VW3XEAuhzKlolpj7jMqtvcVcTpK8wNNnS+gLEOcM5QNP2yqpxqmIapi7PCUsJC+bMTjp18EspvXNo3UBSgfxpOWO6wIzHxRSB0Tpr0Yxbn5CLXWL23glPg90g/LKoUTV4ABy8W30xaUPO1/6hh2FDbFbXod+ToX6RuObwjDBhCKwjRVyfnjPRzQ9HiM6fpiURhmx+yYgGDIRQ4N55WksRjEcd+hFhnh5GHCqKKOV0lSlzh2UIxHr7J6PwzHO2GfCujq6NenMYNiWhv1y/vucgPil3I2wlZhVoQU+56yysjYhPUXwatRAY3qiNy49D+FxtWPunKdtL0v5gT1z8KaxSaXg3Gt38tIdOIPa5JX/aDy++a2e5AFn/q1d1MjlXAit2gh6SZ0fZrepJ3FZxhmTtudxp3tJGR0x/dBonjB9niCsv7m7yQlP3vbDzvcs/JiQ3rvP3WeVGzKh1uCY8CZqGsF28ZekKez3l5Yn+IPXXLGRu8GbL2wl4AlRkulk7FYq4PxsS2T+2NU6YZqbzzpq6nqvQMBwGzG1mIVLhxdFhMTOjrGRwnOr36dFWgGeHEzGjz9gdn59NdqiMMXGJu2sPMK8qZQZOCVSQutaZHu7EojXGoe0hjZeVr76VsAD8JJL8L7s38SnGx8cVY8OS6qmUq6S+XMUAMFRg7TBcDILKYB5tC9qNj7K0FnaA4Hvj4doOu51Iua25DdkaHk8uY0jzV0vyfWDIlnmRrD41L2PHjLStjY3m+nMWKqbEzrJayIUzcxhzhb8tgVQPcSYE8vFRB4Pvc/9yR1bfymQoAiC4CB1LdizTm/xDylZ5uRJtVn6nQMC5eDYcQJGG2Rkq8+mpoXmpdnSD/Nos3KpkCkiVLp/vs87mpZaSLPton24u0obdFXAczzOB9vFN0aZF+iD/91GYaJVCGr5cHqc88wP4MlgfGl+ksfp3UPTzDTDMNzq4y5X+B2CYAIKF4VcDTAPzv6GjPZlESZiHuHIGMhCWhR8QImHHWiNqsAL2mQDM9n8wTvQVAEVI5F/FcHkPwIm8iRSeDoesZKogdTD2NIkCDHL9m6mThoEk8CWUuU6+HUMj9JZUBK+5vP9XPWht5zIZnZ85sj1vUvsA4Q8KOekx2pvyvjTWd/rVvMCp8CjiCGZpgnMtY612pSn3fCtxBxyMxwCIra2ZD7oh0lCVmUVS1/ovcfGV6AEuT4yPIOtSWvcaDomTSIv9cCnIkSG8YXsTK0/LRIy9l3xyq73GtbJN9d2jO7ztLpY6cgpSPRIVg1u4fxqTiR9xtXU+tXs0fuuSLTPSRzUWnYnjp0qeVvRECxL9s3mJUVZyPoNVZAiSxMgPXeEmdVpIvj4kyHS2Bd9o8GapoaG4ezjTB8raTsBVIqgjEKiafqL82wzFetu8Qy2faVMe1aXoBjOCFuLI8Ltcqw2prxrZcSyE3FibpLNkrVH9Y6cTF8/lTYJrCp7kLy/gJJPbUYc59L4+2HfpqOQO3OCFJ8eNYn5H9ymvZOTgrHZKBnG6ont8L5oYQIh6m9w4cZItuErJMbh4j7DFly9P0xJiugGi726aSYOvldB4WsVVGjzBv7WBQVtJRw8UbTQxqHssE6dS2Kr5oEmHnVBdOzWkaF4GpKE8GAT0JvZV1RRoY89tvTqyJL/dYe3Bq5LNbhE+nBL2UUxOva/QmUmHpYjL0P6Ta02bsYsfPqLfS2fr12e9f55v+tlbqSh+B7GbJRPmwY4a6hAdfGAijzZm2PLNp6+TvToLbt51xjNzqUMRFUdquZt0fggDZWqkOFe/dDWn8FM93sLo5dfZKFHkRx7Rd8qwoJfO/v1P5rH10yx4lo4ewaGbqfrSidHpjobZdPAMAXFYvRzH0yvEGTACZMnSmVb+trDtTs6BZCZ7KKimndsRchMKyLTwEpVTFDGn2W+Z4gex+yVErtv1O+7MQRXupkmD/L3jsLFU62vvrDywB2Meebw+agioXPveL7HTKCIHCi/tyC0jcLRs2cfWvf6/heFIGfDWtHVgsv/ZqIremW4gRQ6djdKP8GUZS5aEHlbv41ZLjcG61EM/EJDZORLhpHq5bPqtbHQGhj1pjL9FcycGVgrM6vIY6oFv9TPmJOsb6q8540kGeXJqD/L45ymYk1IZl/039B610u3rmOPtTHMrjAkWP4Y4Y4XZ8RUA1v8Rseq0bia5DZHpSFqSd7Liuy73YG88dkEXGM3Y87PcZluHbJhXIYh2rh02VTuFQYzQ2ZmRUAI7GfaWlkQrzNzebYo5kRZ2WXtpwDRx4H0tiWL8wyPGCSYd26e0SW4GQTuNMuWquSU4uhFu+K7Ll63RMuFo66IC8bo3SQbf4Yv8/0MK+r/AimlBVj/mrTy7rWcL9GOKpwpbmHmFIFEkTopoTHsGRyjahD0JOwOjYwhJniJSEDPf6MlxvRG1rfP+Vy9jbSyUjLzD9eLLLf1N0PHKaRjZwm1lfzm324o7l1gm1n/ZEWR+Js5CYH4n7ewmzxfMLzzBDHFVyzEs4gMvoTIkL8TCK9ZYO65JqoPiRFNEAqmwWNwWaSlXEIRfk8Cf6fs6mWU4OJXyDk/siER5II98oh8FHWxRvIcPLb9hhc4fjvO+ORR7CzmjgpSDK95Xyc0JoIddG7CSDOmpEaup1+4tw01g46mX8qdaObzqL962ekdd/vfiAA80OkXTD4dsa+EHveWQEYeAADAyEQ/EwAA3Nv0ePL3H79Nxj3CRQMACAAWaPzfQQDPStK/ftkEQAD/FtouA2aoAwDoMAhIF/DNasC2BQD4IyDDLYDfFECFz4BQS4FaPPAnB56kgAp/AxzfsRwBegQAL3eBHa4DRCQPQPAw0AgDgXTAmz8IzwcgUwTUhECcl98/8gf+IkF4vQGM2L5vg7kgsEZAmOUgDg1EywXBhCCSeDWfskZIpHyjBkUpJFRAzX6BcQB6WEITR178Ocqy8a1n+VrXoKBJoBsAHYzG5ENAjThyx7hYCOE4UQij6SlE+GkvxFEqK8RLoCQUzwuA2QSjuI1Ro1K9OuMEylChSsukz61J9s1s0pziIlImhEbwsRnLmvdN1KBaYMq0FBrkayx060hq8gpkMlm4SSarNJlQSF5M/CoZw2wwMaGakl5dE/kWSB1mqOBOYReVpQtkRKm83Oc2ngam3hjOlonrzfeoIlgFtSKinAYC9X3/ZgAAAAA=); }</style></defs><g stroke-linecap="round" transform="translate(66 10) rotate(0 159 64)"><path d="M32 0 C84.48 -2.97, 133.29 -2.57, 286 0 M32 0 C114.79 -1.94, 197.46 -1.52, 286 0 M286 0 C307.26 -1.62, 316.66 10.68, 318 32 M286 0 C306.48 1.07, 320.12 11.11, 318 32 M318 32 C319.07 46.38, 317.44 59.91, 318 96 M318 32 C318.15 55.87, 317.93 78.19, 318 96 M318 96 C316.43 117.55, 306.58 128.62, 286 128 M318 96 C317.08 118.67, 306.22 128.81, 286 128 M286 128 C224.05 128.51, 160.58 129.04, 32 128 M286 128 C207.37 129.38, 130.02 128.3, 32 128 M32 128 C12.64 128.12, -0.52 119.05, 0 96 M32 128 C11.75 127.44, -2.04 119.04, 0 96 M0 96 C0.01 81.4, 0.11 71.45, 0 32 M0 96 C-0.15 82.53, 0.39 70.18, 0 32 M0 32 C-1.17 11.16, 10.82 -0.54, 32 0 M0 32 C1.48 8.81, 10.38 -0.17, 32 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(74 24) rotate(0 151 50)"><text x="151" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Your Application Code</text><text x="151" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Configure options</text><text x="151" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Override lifecycle hooks</text><text x="151" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Inject behaviors</text></g><g stroke-linecap="round" transform="translate(10 228) rotate(0 214.5 76.5)"><path d="M32 0 C105.23 1.66, 179.57 1.55, 397 0 M32 0 C133.71 0.68, 235.45 0.91, 397 0 M397 0 C416.97 1.01, 429.94 11.24, 429 32 M397 0 C417.72 -1, 428.33 9.92, 429 32 M429 32 C427.98 47.99, 430.9 68.96, 429 121 M429 32 C429.77 56.54, 429.64 81.96, 429 121 M429 121 C429.89 140.68, 416.51 154.14, 397 153 M429 121 C430.69 141.31, 419.83 151.94, 397 153 M397 153 C264.26 153.2, 134 153.76, 32 153 M397 153 C252.5 151.07, 107.34 151.87, 32 153 M32 153 C11.82 154.01, -0.18 142.97, 0 121 M32 153 C10.72 151.08, 0.8 140.13, 0 121 M0 121 C1.79 98.6, 1.32 78.49, 0 32 M0 121 C-0.26 90.78, 0.12 60.08, 0 32 M0 32 C-1.38 11.81, 12.3 0.11, 32 0 M0 32 C0.62 12.7, 12.46 0.29, 32 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(18 242) rotate(0 206.5 62.5)"><text x="206.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Retold Data Service</text><text x="206.5" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Loads Stricture model</text><text x="206.5" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Creates DAL per entity</text><text x="206.5" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Creates MeadowEndpoints per entity</text><text x="206.5" y="117.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Manages service lifecycle</text></g><g stroke-linecap="round" transform="translate(71 471) rotate(0 153.5 64)"><path d="M32 0 C81.99 1.01, 130.76 -1.31, 275 0 M32 0 C103.43 1, 173.6 0.94, 275 0 M275 0 C297.45 -1.42, 308.22 9.03, 307 32 M275 0 C296.5 -0.9, 305.5 12.05, 307 32 M307 32 C306.32 54.17, 305.65 76.47, 307 96 M307 32 C306.47 47.39, 306.17 63.17, 307 96 M307 96 C307.16 115.36, 297.28 128.91, 275 128 M307 96 C306.63 118.51, 296.58 125.87, 275 128 M275 128 C201.61 130.44, 127.65 130.11, 32 128 M275 128 C181.55 129.27, 87.71 129.13, 32 128 M32 128 C8.93 126.72, -1.82 119.03, 0 96 M32 128 C8.56 129.51, 0.74 119.1, 0 96 M0 96 C1.2 74.43, -1.38 58.5, 0 32 M0 96 C0.4 82.09, 0.37 68.83, 0 32 M0 32 C1.6 10.65, 11.4 -0.87, 32 0 M0 32 C-0.44 9.57, 9.15 0.46, 32 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(79 485) rotate(0 145.5 50)"><text x="145.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Orator (API Server)</text><text x="145.5" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- HTTP server via Restify</text><text x="145.5" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Route registration</text><text x="145.5" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Request handling</text></g><g stroke-linecap="round" transform="translate(49 689) rotate(0 175.5 76.5)"><path d="M32 0 C91.22 -2.32, 148.12 -1.57, 319 0 M32 0 C103.48 -1.07, 175.49 -1.8, 319 0 M319 0 C342.2 -1.24, 350.31 8.7, 351 32 M319 0 C340.93 -0.15, 352.94 9.26, 351 32 M351 32 C351.64 52.01, 352.39 76.33, 351 121 M351 32 C350.77 61, 350.33 87.92, 351 121 M351 121 C349.86 140.76, 340.82 152.24, 319 153 M351 121 C351.46 142.7, 340.41 152.32, 319 153 M319 153 C234.77 153.52, 152.24 151.49, 32 153 M319 153 C257.04 152.82, 195.19 152.3, 32 153 M32 153 C12.62 151.23, 0.97 143.77, 0 121 M32 153 C10.53 154.19, -1.77 143.45, 0 121 M0 121 C-1.45 101.24, -1.25 84.79, 0 32 M0 121 C0.23 102.82, 1.31 85.89, 0 32 M0 32 C-0.35 9.65, 8.98 0.92, 32 0 M0 32 C0.67 9.25, 12.39 1.95, 32 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(57 703) rotate(0 167.5 62.5)"><text x="167.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Meadow Endpoints (REST Layer)</text><text x="167.5" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- CRUD route handlers</text><text x="167.5" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Behavior injection hooks</text><text x="167.5" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Session management</text><text x="167.5" y="117.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Authorization enforcement</text></g><g stroke-linecap="round" transform="translate(27 932) rotate(0 198 76.5)"><path d="M32 0 C100.02 3.05, 167.28 0.98, 364 0 M32 0 C154.37 -1, 277.74 -0.92, 364 0 M364 0 C385.36 -1.49, 396.05 10.34, 396 32 M364 0 C384.06 1.33, 396.05 11.95, 396 32 M396 32 C397.11 59.51, 395.59 83.07, 396 121 M396 32 C396.38 57.49, 396.9 83.36, 396 121 M396 121 C394.58 140.85, 386.86 153.03, 364 153 M396 121 C396.3 141.87, 386.35 154.93, 364 153 M364 153 C288.76 151.43, 211.98 150.44, 32 153 M364 153 C242.73 154.89, 121.55 155.33, 32 153 M32 153 C11.4 153.98, -1.58 143.43, 0 121 M32 153 C9.97 153.13, -1 144.62, 0 121 M0 121 C-0.28 99.59, -1.19 79.56, 0 32 M0 121 C-1.2 86.61, -1.02 52.61, 0 32 M0 32 C1.81 9.44, 11.89 -1.55, 32 0 M0 32 C0.25 9.18, 8.81 0.3, 32 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(35 946) rotate(0 190 62.5)"><text x="190" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Meadow (Data Access)</text><text x="190" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Schema management</text><text x="190" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Query building via FoxHound</text><text x="190" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Provider-based query execution</text><text x="190" y="117.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Audit stamping and soft deletes</text></g><g stroke-linecap="round" transform="translate(38 1175) rotate(0 186.5 39)"><path d="M19.5 0 C86.84 3.03, 155.6 3.34, 353.5 0 M19.5 0 C88.03 -1.95, 155.9 -2.47, 353.5 0 M353.5 0 C366.54 -0.45, 374.81 7.61, 373 19.5 M353.5 0 C364.4 0.53, 372.32 7.21, 373 19.5 M373 19.5 C372.33 30.28, 373.19 45.38, 373 58.5 M373 19.5 C372.44 33.05, 372.2 46.7, 373 58.5 M373 58.5 C371.24 71.77, 365.11 77.81, 353.5 78 M373 58.5 C373.51 70.75, 366.02 79.01, 353.5 78 M353.5 78 C261.63 77.34, 171.86 78.33, 19.5 78 M353.5 78 C239.31 75.35, 126.63 75.94, 19.5 78 M19.5 78 C5 78.62, 0.45 70.32, 0 58.5 M19.5 78 C7.21 76.74, 1.55 72.46, 0 58.5 M0 58.5 C-0.26 47, -0.9 37.53, 0 19.5 M0 58.5 C-1.11 49.34, 0.17 39.39, 0 19.5 M0 19.5 C0.26 6.85, 4.6 -0.86, 19.5 0 M0 19.5 C-0.33 4.6, 5.36 -1.27, 19.5 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(38 1216.5) rotate(0 186.5 10)"><text x="186.5" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">MySQL | SQLite | MSSQL | ALASQL</text></g><g stroke-linecap="round"><g transform="translate(225 138) rotate(0 -0.10163222927674553 45)"><path d="M0 0 C1.31 4.81, -1.08 5.46, 0 16 M0 0 C-0.11 5.83, 0.32 11.2, 0 16 M0 16 C0.09 17.36, 0.19 18.83, 0 19.88 M0 16 C-0.07 17.08, -0.14 17.94, 0 19.88 M0 19.88 C-0.02 20.62, -0.19 21.79, -0.02 23.52 M0 19.88 C-0.01 20.82, 0.02 21.96, -0.02 23.52 M-0.02 23.52 C-0.17 24.49, 0.14 25.46, -0.04 26.96 M-0.02 23.52 C-0.06 24.27, 0.07 24.91, -0.04 26.96 M-0.04 26.96 C0.04 27.58, 0.13 28.97, -0.06 30.23 M-0.04 26.96 C-0.07 27.73, 0.11 28.73, -0.06 30.23 M-0.06 30.23 C-0.04 30.71, 0.01 31.55, -0.09 33.36 M-0.06 30.23 C-0.01 31.4, -0.19 32.5, -0.09 33.36 M-0.09 33.36 C-0.32 34.17, -0.19 34.84, -0.13 36.37 M-0.09 33.36 C-0.21 34.27, -0.09 35.31, -0.13 36.37 M-0.13 36.37 C0.07 36.8, -0.09 37.38, -0.17 39.29 M-0.13 36.37 C-0.1 37.28, -0.15 38.11, -0.17 39.29 M-0.17 39.29 C-0.12 39.74, -0.37 40.69, -0.21 42.16 M-0.17 39.29 C-0.04 40.23, -0.15 41.24, -0.21 42.16 M-0.21 42.16 C-0.26 42.88, -0.34 43.5, -0.25 45 M-0.21 42.16 C-0.13 43.07, -0.23 43.9, -0.25 45 M-0.25 45 C-0.1 45.71, -0.36 46.33, -0.29 47.84 M-0.25 45 C-0.18 45.99, -0.35 46.74, -0.29 47.84 M-0.29 47.84 C-0.57 49.11, -0.16 49.94, -0.33 50.71 M-0.29 47.84 C-0.26 48.54, -0.46 49.26, -0.33 50.71 M-0.33 50.71 C-0.19 51.47, -0.05 52.34, -0.37 53.63 M-0.33 50.71 C-0.21 51.46, -0.42 52.07, -0.37 53.63 M-0.37 53.63 C-0.63 54.54, -0.5 55.91, -0.41 56.64 M-0.37 53.63 C-0.36 54.69, -0.27 56.11, -0.41 56.64 M-0.41 56.64 C-0.61 57.85, -0.3 59.19, -0.44 59.77 M-0.41 56.64 C-0.52 57.69, -0.55 58.67, -0.44 59.77 M-0.44 59.77 C-0.31 60.42, -0.23 61.62, -0.46 63.04 M-0.44 59.77 C-0.4 60.65, -0.55 61.72, -0.46 63.04 M-0.46 63.04 C-0.15 64.16, -0.22 64.93, -0.48 66.48 M-0.46 63.04 C-0.32 64.06, -0.56 64.79, -0.48 66.48 M-0.48 66.48 C-0.5 67.59, -0.6 68.96, -0.5 70.12 M-0.48 66.48 C-0.5 67.72, -0.46 68.6, -0.5 70.12 M-0.5 70.12 C-0.55 71.17, -0.71 71.74, -0.5 74 M-0.5 70.12 C-0.37 71.07, -0.51 71.64, -0.5 74 M-0.5 74 C0.8 77.03, -0.26 80.64, -0.5 90 M-0.5 74 C-0.45 79.92, 0.14 86.15, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(225 138) rotate(0 -0.10163222927674553 45)"><path d="M-2.68 82.3 C-1.59 84.65, -2.35 84.91, -0.5 90 M-2.68 82.3 C-1.96 85.09, -0.96 87.66, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(225 138) rotate(0 -0.10163222927674553 45)"><path d="M2.77 82.7 C2.76 84.96, 0.91 85.14, -0.5 90 M2.77 82.7 C1.55 85.4, 0.59 87.83, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(224.5 381) rotate(0 0.12337998576340681 45)"><path d="M0 0 C0.75 2.84, -1.36 7.71, 0 16 M0 0 C-0.44 4.43, 0.11 8.38, 0 16 M0 16 C-0.13 17.21, 0 18.95, 0 19.88 M0 16 C-0.02 17.41, -0.14 18.73, 0 19.88 M0 19.88 C0.33 21.11, -0.32 22.09, 0 23.52 M0 19.88 C0.15 21.25, 0.16 22.57, 0 23.52 M0 23.52 C0.22 24.15, 0.16 25.24, 0 26.96 M0 23.52 C0.06 24.68, -0.07 26.07, 0 26.96 M0 26.96 C-0.21 27.82, 0.01 28.84, 0 30.23 M0 26.96 C-0.1 27.74, 0.15 28.41, 0 30.23 M0 30.23 C0.07 31.18, 0.15 32.78, 0 33.36 M0 30.23 C0.09 31.02, -0.03 31.81, 0 33.36 M0 33.36 C0.26 34.33, 0.28 35.91, 0 36.37 M0 33.36 C-0.01 34.35, 0.14 35.51, 0 36.37 M0 36.37 C-0.15 37.68, -0.26 38.6, 0 39.29 M0 36.37 C-0.11 37.2, 0.07 38.06, 0 39.29 M0 39.29 C0.13 40.14, 0.24 41.27, 0 42.16 M0 39.29 C-0.08 40.21, -0.01 41.11, 0 42.16 M0 42.16 C-0.21 42.71, -0.24 43.33, 0 45 M0 42.16 C0.14 43.01, 0.05 43.98, 0 45 M0 45 C-0.19 46.01, -0.28 46.6, 0 47.84 M0 45 C0.01 46.06, 0.04 47.22, 0 47.84 M0 47.84 C0.27 48.73, 0.03 49.63, 0 50.71 M0 47.84 C0.13 48.89, 0.05 50.06, 0 50.71 M0 50.71 C0.23 51.52, 0.2 52.25, 0 53.63 M0 50.71 C-0.02 51.49, -0.05 52.3, 0 53.63 M0 53.63 C-0.12 54.77, -0.32 55.62, 0 56.64 M0 53.63 C-0.06 54.69, -0.11 55.61, 0 56.64 M0 56.64 C-0.12 57.38, 0.21 58.67, 0 59.77 M0 56.64 C0.14 57.79, 0.08 58.83, 0 59.77 M0 59.77 C0.16 60.33, 0.31 61.67, 0 63.04 M0 59.77 C0.08 60.52, 0.07 61.33, 0 63.04 M0 63.04 C-0.31 64.44, 0.07 65.07, 0 66.48 M0 63.04 C-0.01 63.86, -0.12 64.51, 0 66.48 M0 66.48 C0.15 67.45, 0.33 68.86, 0 70.12 M0 66.48 C-0.02 67.44, 0.03 68.7, 0 70.12 M0 70.12 C0.1 71.54, 0.15 72.49, 0 74 M0 70.12 C0.07 71.1, -0.08 72.49, 0 74 M0 74 C1.31 77.72, 0.51 79.41, 0 90 M0 74 C-0.63 79.21, -0.07 85.81, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 381) rotate(0 0.12337998576340681 45)"><path d="M-3 82.58 C-2.02 83.86, -2.46 86.18, 0 90 M-3 82.58 C-2.43 84.65, -1.38 86.47, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 381) rotate(0 0.12337998576340681 45)"><path d="M2.47 82.39 C2.34 83.75, 0.79 86.11, 0 90 M2.47 82.39 C1.61 84.5, 1.24 86.37, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(224.5 599) rotate(0 0.26358936603206473 45)"><path d="M0 0 C1.31 3.08, 1.15 7.32, 0 16 M0 0 C0.58 3.68, -0.52 7.18, 0 16 M0 16 C0.11 16.82, -0.22 17.91, 0 19.88 M0 16 C0.13 16.71, 0.09 17.67, 0 19.88 M0 19.88 C0.18 20.96, 0.13 22.04, 0 23.52 M0 19.88 C-0.01 20.98, 0 22.05, 0 23.52 M0 23.52 C-0.22 24.37, -0.02 24.89, 0 26.96 M0 23.52 C0.01 24.98, 0.13 26.17, 0 26.96 M0 26.96 C-0.07 28.31, -0.17 29.03, 0 30.23 M0 26.96 C-0.13 27.74, -0.12 28.89, 0 30.23 M0 30.23 C-0.25 31.47, -0.19 32.24, 0 33.36 M0 30.23 C0.04 31.06, 0.06 32.18, 0 33.36 M0 33.36 C-0.22 34.41, 0 35.33, 0 36.37 M0 33.36 C0.08 34.42, 0.01 35.51, 0 36.37 M0 36.37 C0.24 37.71, -0.1 38.4, 0 39.29 M0 36.37 C-0.05 37.01, 0.1 37.55, 0 39.29 M0 39.29 C0.05 40.58, -0.05 41.11, 0 42.16 M0 39.29 C-0.03 40.4, -0.04 41.51, 0 42.16 M0 42.16 C-0.07 43.47, 0.23 44.28, 0 45 M0 42.16 C0.13 43, 0.03 43.47, 0 45 M0 45 C0.17 46.04, -0.2 47.05, 0 47.84 M0 45 C-0.07 45.71, 0.08 46.47, 0 47.84 M0 47.84 C0.26 49.12, -0.05 50.23, 0 50.71 M0 47.84 C-0.04 48.55, 0.09 49.62, 0 50.71 M0 50.71 C0.14 51.56, 0.03 52.33, 0 53.63 M0 50.71 C0.01 51.83, -0.09 52.81, 0 53.63 M0 53.63 C-0.03 54.5, -0.1 55.8, 0 56.64 M0 53.63 C0.12 54.3, -0.1 55.3, 0 56.64 M0 56.64 C-0.13 57.66, -0.21 58.36, 0 59.77 M0 56.64 C-0.12 57.85, 0.13 58.86, 0 59.77 M0 59.77 C0.02 60.66, 0.25 61.09, 0 63.04 M0 59.77 C0.04 60.81, -0.07 61.45, 0 63.04 M0 63.04 C-0.27 64.04, 0.31 65.83, 0 66.48 M0 63.04 C0.03 64.02, -0.09 65.17, 0 66.48 M0 66.48 C-0.24 67.62, -0.16 69.45, 0 70.12 M0 66.48 C0.1 67.68, -0.1 68.62, 0 70.12 M0 70.12 C-0.05 70.66, -0.16 71.74, 0 74 M0 70.12 C-0.22 71.59, -0.17 72.66, 0 74 M0 74 C-0.71 79.41, -0.31 85.44, 0 90 M0 74 C0.49 78.66, -0.04 82.69, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 599) rotate(0 0.26358936603206473 45)"><path d="M-2.64 82.45 C-1.45 83.9, -0.99 85.93, 0 90 M-2.64 82.45 C-1.71 84.15, -1.62 85.8, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 599) rotate(0 0.26358936603206473 45)"><path d="M2.83 82.52 C2.91 83.95, 2.25 85.97, 0 90 M2.83 82.52 C2.43 84.26, 1.19 85.89, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(224.5 842) rotate(0 0.22008438107090456 45)"><path d="M0 0 C1.06 3.22, 0.2 7.74, 0 16 M0 0 C0.77 5.36, -0.58 10.04, 0 16 M0 16 C0.23 17.16, 0.29 18.5, 0 19.88 M0 16 C0.18 16.82, 0.06 18.06, 0 19.88 M0 19.88 C-0.28 20.58, -0.21 21.59, 0.02 23.52 M0 19.88 C0.06 21.25, -0.14 22.84, 0.02 23.52 M0.02 23.52 C-0.33 24.43, -0.3 24.91, 0.04 26.96 M0.02 23.52 C0.07 24.76, -0.01 25.62, 0.04 26.96 M0.04 26.96 C0.13 28.3, -0.03 29.62, 0.06 30.23 M0.04 26.96 C-0.1 28.09, 0.11 29.03, 0.06 30.23 M0.06 30.23 C-0.12 31.6, 0.02 32.66, 0.09 33.36 M0.06 30.23 C0.09 31.5, 0.19 32.47, 0.09 33.36 M0.09 33.36 C0.11 34.75, 0.11 35.73, 0.13 36.37 M0.09 33.36 C-0.03 34.22, 0.13 34.78, 0.13 36.37 M0.13 36.37 C0.4 37.22, 0.29 37.92, 0.17 39.29 M0.13 36.37 C0.08 37.05, 0.16 37.72, 0.17 39.29 M0.17 39.29 C0.18 39.96, 0.12 40.39, 0.21 42.16 M0.17 39.29 C0.25 40.34, 0.28 41.41, 0.21 42.16 M0.21 42.16 C0.11 42.94, -0.04 43.86, 0.25 45 M0.21 42.16 C0.18 43.04, 0.39 43.89, 0.25 45 M0.25 45 C0.24 46.37, 0.4 47.26, 0.29 47.84 M0.25 45 C0.34 45.83, 0.22 46.43, 0.29 47.84 M0.29 47.84 C0.15 48.41, 0.53 49.46, 0.33 50.71 M0.29 47.84 C0.23 48.54, 0.27 49.31, 0.33 50.71 M0.33 50.71 C0.63 51.39, 0.43 51.69, 0.37 53.63 M0.33 50.71 C0.19 51.3, 0.34 52.09, 0.37 53.63 M0.37 53.63 C0.1 54.41, 0.14 55.39, 0.41 56.64 M0.37 53.63 C0.24 54.6, 0.25 55.7, 0.41 56.64 M0.41 56.64 C0.63 57.25, 0.25 58.24, 0.44 59.77 M0.41 56.64 C0.29 57.5, 0.48 57.96, 0.44 59.77 M0.44 59.77 C0.21 61.12, 0.29 62.55, 0.46 63.04 M0.44 59.77 C0.33 60.96, 0.45 62.15, 0.46 63.04 M0.46 63.04 C0.53 64.17, 0.18 65.6, 0.48 66.48 M0.46 63.04 C0.63 64.44, 0.61 65.59, 0.48 66.48 M0.48 66.48 C0.3 67.91, 0.84 69.15, 0.5 70.12 M0.48 66.48 C0.35 67.48, 0.43 68.28, 0.5 70.12 M0.5 70.12 C0.8 71.23, 0.64 72.68, 0.5 74 M0.5 70.12 C0.55 71.49, 0.43 72.86, 0.5 74 M0.5 74 C-0.85 78.89, 1.12 81.17, 0.5 90 M0.5 74 C0.04 78.64, 0.05 82.44, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 842) rotate(0 0.22008438107090456 45)"><path d="M-2.6 82.62 C-1.44 84.1, -1.25 86.23, 0.5 90 M-2.6 82.62 C-1.2 85.12, -0.87 87.26, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(224.5 842) rotate(0 0.22008438107090456 45)"><path d="M2.87 82.36 C2.93 83.91, 2.02 86.1, 0.5 90 M2.87 82.36 C2.48 84.9, 1.03 87.13, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(225 1085) rotate(0 -0.07162186999505593 45)"><path d="M0 0 C0.72 4.58, 1.52 6.93, 0 16 M0 0 C0.26 5.3, -0.79 10.23, 0 16 M0 16 C0 17.3, 0.29 19.32, 0 19.88 M0 16 C0.11 17.05, -0.05 18.22, 0 19.88 M0 19.88 C0.1 21.19, 0.25 21.92, -0.02 23.52 M0 19.88 C-0.18 21.38, -0.03 22.68, -0.02 23.52 M-0.02 23.52 C-0.11 24.85, 0.16 25.32, -0.04 26.96 M-0.02 23.52 C-0.13 24.4, -0.12 25.71, -0.04 26.96 M-0.04 26.96 C-0.29 27.95, -0.13 29.44, -0.06 30.23 M-0.04 26.96 C0 27.91, 0.07 28.94, -0.06 30.23 M-0.06 30.23 C-0.26 31.04, -0.1 31.62, -0.09 33.36 M-0.06 30.23 C0.07 31.34, 0.02 32.7, -0.09 33.36 M-0.09 33.36 C-0.11 34.3, -0.38 34.99, -0.13 36.37 M-0.09 33.36 C-0.05 34.11, -0.24 34.83, -0.13 36.37 M-0.13 36.37 C-0.36 37.01, -0.06 37.93, -0.17 39.29 M-0.13 36.37 C-0.24 36.97, -0.14 37.92, -0.17 39.29 M-0.17 39.29 C0.03 40.09, 0.08 41.16, -0.21 42.16 M-0.17 39.29 C-0.13 40.09, -0.19 40.94, -0.21 42.16 M-0.21 42.16 C-0.03 42.51, -0.32 43.27, -0.25 45 M-0.21 42.16 C-0.12 43.08, -0.12 44.08, -0.25 45 M-0.25 45 C-0.22 46.05, -0.48 46.58, -0.29 47.84 M-0.25 45 C-0.17 45.59, -0.28 46.34, -0.29 47.84 M-0.29 47.84 C-0.16 48.43, -0.57 49.5, -0.33 50.71 M-0.29 47.84 C-0.44 48.57, -0.3 49.38, -0.33 50.71 M-0.33 50.71 C-0.4 51.41, -0.18 52.31, -0.37 53.63 M-0.33 50.71 C-0.33 51.5, -0.31 52.16, -0.37 53.63 M-0.37 53.63 C-0.15 54.51, -0.33 55.87, -0.41 56.64 M-0.37 53.63 C-0.42 54.56, -0.46 55.61, -0.41 56.64 M-0.41 56.64 C-0.42 57.36, -0.56 58.06, -0.44 59.77 M-0.41 56.64 C-0.58 57.76, -0.29 58.59, -0.44 59.77 M-0.44 59.77 C-0.19 60.38, -0.63 61.44, -0.46 63.04 M-0.44 59.77 C-0.49 60.84, -0.38 62.22, -0.46 63.04 M-0.46 63.04 C-0.32 64.3, -0.52 65.51, -0.48 66.48 M-0.46 63.04 C-0.51 64.23, -0.54 65.23, -0.48 66.48 M-0.48 66.48 C-0.58 67.5, -0.24 68.58, -0.5 70.12 M-0.48 66.48 C-0.61 68.03, -0.46 69.31, -0.5 70.12 M-0.5 70.12 C-0.35 70.71, -0.47 72.12, -0.5 74 M-0.5 70.12 C-0.27 71.56, -0.57 73.1, -0.5 74 M-0.5 74 C-1.48 79.55, -0.78 87.08, -0.5 90 M-0.5 74 C-0.58 79.41, -0.85 83.02, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(225 1085) rotate(0 -0.07162186999505593 45)"><path d="M-3.47 82.57 C-2.5 84.76, -1.5 85.82, -0.5 90 M-3.47 82.57 C-2.44 85.06, -2.08 87.35, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(225 1085) rotate(0 -0.07162186999505593 45)"><path d="M2 82.4 C1.85 84.6, 1.74 85.69, -0.5 90 M2 82.4 C1.39 84.92, 0.11 87.26, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(38 1191.5) rotate(0 186.5 12.5)"><text x="186.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Storage Provider</text></g></svg>