@vcmap/ui 5.0.0-rc.10 → 5.0.0-rc.13

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 (165) hide show
  1. package/README.md +12 -5
  2. package/build/build.js +6 -3
  3. package/build/buildHelpers.js +12 -4
  4. package/build/buildPreview.js +7 -0
  5. package/build/getPluginProxies.js +4 -0
  6. package/config/aerowest.config.json +13 -3
  7. package/config/base.config.json +398 -219
  8. package/config/codes.config.json +397 -0
  9. package/config/dev.config.json +375 -1
  10. package/config/graphFeatureInfo.config.json +100 -0
  11. package/config/www.config.json +1232 -0
  12. package/dist/assets/{cesium.eb5667.js → cesium.21663e.js} +0 -0
  13. package/dist/assets/cesium.js +1 -1
  14. package/dist/assets/core.63242d.js +4 -0
  15. package/dist/assets/core.js +1 -1
  16. package/dist/assets/font/OFL.txt +93 -0
  17. package/dist/assets/font/TitilliumWeb-Regular.woff2 +0 -0
  18. package/dist/assets/{index.4ccd4433.js → index.44b91cfe.js} +1 -1
  19. package/dist/assets/{ol.ef03b1.js → ol.88ba9d.js} +0 -0
  20. package/dist/assets/ol.js +1 -1
  21. package/dist/assets/ui.3c2933.css +1 -0
  22. package/dist/assets/ui.3c2933.js +71 -0
  23. package/dist/assets/ui.js +1 -1
  24. package/dist/assets/vue.c897fc.js +9 -0
  25. package/dist/assets/vue.js +2 -1
  26. package/dist/assets/{vuetify.401a29.css → vuetify.147c3a.css} +1 -1
  27. package/dist/assets/{vuetify.401a29.js → vuetify.147c3a.js} +72 -72
  28. package/dist/assets/vuetify.js +2 -2
  29. package/dist/index.html +1 -5
  30. package/index.js +39 -5
  31. package/lib/vue.js +1 -0
  32. package/map.config.json +15 -6
  33. package/package.json +17 -8
  34. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +71 -0
  35. package/plugins/@vcmap/create-link/index.js +83 -0
  36. package/plugins/@vcmap/create-link/package.json +6 -0
  37. package/plugins/@vcmap/pluginExample/index.js +2 -2
  38. package/plugins/@vcmap/pluginExample/pluginExampleComponent.vue +20 -3
  39. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +1 -1
  40. package/plugins/@vcmap/project-selector/index.js +1 -1
  41. package/plugins/@vcmap/project-selector/package.json +1 -2
  42. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +1 -1
  43. package/plugins/@vcmap/theme-changer/index.js +1 -1
  44. package/plugins/@vcmap/theme-changer/package.json +1 -2
  45. package/plugins/categoryTest/Categories.vue +89 -1
  46. package/plugins/categoryTest/Category.vue +1 -1
  47. package/plugins/example/index.js +10 -23
  48. package/plugins/simple-graph/README.md +51 -0
  49. package/plugins/simple-graph/SimpleGraphComponent.vue +70 -0
  50. package/plugins/simple-graph/index.js +17 -0
  51. package/plugins/simple-graph/package.json +11 -0
  52. package/plugins/simple-graph/simpleGraphView.js +76 -0
  53. package/plugins/test/editor.vue +1 -1
  54. package/plugins/test/index.js +76 -9
  55. package/plugins/test/toolbox-data.js +82 -57
  56. package/plugins/test/windowManagerExample.vue +1 -1
  57. package/src/actions/stateRefAction.js +2 -2
  58. package/src/actions/styleSelector.vue +1 -1
  59. package/src/application/Navbar.vue +13 -2
  60. package/src/application/VcsApp.vue +301 -116
  61. package/src/application/VcsMap.vue +1 -1
  62. package/src/application/VcsSettings.vue +1 -1
  63. package/src/application/vcsAppWrapper.vue +1 -0
  64. package/src/assets/font/OFL.txt +93 -0
  65. package/src/assets/font/TitilliumWeb-Regular.woff2 +0 -0
  66. package/src/components/form-inputs-controls/VcsCheckbox.vue +13 -0
  67. package/src/components/form-inputs-controls/VcsColorPicker.vue +1 -1
  68. package/src/components/form-inputs-controls/VcsRadio.vue +123 -0
  69. package/src/components/form-output/VcsFormattedNumber.vue +1 -1
  70. package/src/components/lists/VcsActionList.vue +22 -7
  71. package/src/components/lists/VcsTreeview.vue +4 -4
  72. package/src/components/lists/VcsTreeviewLeaf.vue +10 -3
  73. package/src/components/lists/VcsTreeviewSearchbar.vue +1 -2
  74. package/src/components/tables/VcsTable.vue +245 -0
  75. package/src/contentTree/LayerTree.vue +1 -1
  76. package/src/contentTree/contentTreeCollection.js +4 -4
  77. package/src/contentTree/contentTreeItem.js +9 -9
  78. package/src/contentTree/groupContentTreeItem.js +1 -1
  79. package/src/contentTree/layerContentTreeItem.js +15 -1
  80. package/src/contentTree/layerGroupContentTreeItem.js +21 -1
  81. package/src/contentTree/nodeContentTreeItem.js +1 -1
  82. package/src/featureInfo/AddressBalloonComponent.vue +47 -0
  83. package/src/featureInfo/BalloonComponent.vue +140 -0
  84. package/src/featureInfo/abstractFeatureInfoView.js +313 -0
  85. package/src/featureInfo/addressBalloonFeatureInfoView.js +118 -0
  86. package/src/featureInfo/balloonFeatureInfoView.js +151 -0
  87. package/src/featureInfo/balloonHelper.js +132 -0
  88. package/src/featureInfo/featureInfo.js +457 -0
  89. package/src/featureInfo/featureInfoInteraction.js +42 -0
  90. package/src/featureInfo/iframeFeatureInfoView.js +95 -0
  91. package/src/featureInfo/tableFeatureInfoView.js +106 -0
  92. package/src/i18n/de.js +26 -0
  93. package/src/i18n/en.js +26 -0
  94. package/src/i18n/i18nCollection.js +17 -0
  95. package/src/icons/+all.js +80 -0
  96. package/src/icons/ClippingHorizontalIcon.vue +7 -0
  97. package/src/icons/ClippingIcon.vue +7 -0
  98. package/src/icons/ClippingVerticalIcon.vue +7 -0
  99. package/src/icons/ColorPickerIcon.vue +7 -0
  100. package/src/icons/ComponentsIcon.vue +2 -2
  101. package/src/icons/DimensionsHouseIcon.vue +11 -9
  102. package/src/icons/EditIcon.vue +7 -0
  103. package/src/icons/GlobalTerrainIcon.vue +9 -0
  104. package/src/icons/GroundIcon.vue +18 -0
  105. package/src/icons/HideIcon.vue +12 -0
  106. package/src/icons/LogoutIcon.vue +7 -0
  107. package/src/icons/ObjectAttributeIcon.vue +2 -13
  108. package/src/icons/PedestrianIcon.vue +2 -3
  109. package/src/icons/PenIcon.vue +2 -9
  110. package/src/icons/PoiIcon.vue +5 -2
  111. package/src/icons/PointSelectIcon.vue +4 -2
  112. package/src/icons/QueryIcon.vue +6 -7
  113. package/src/icons/ScreenshotIcon.vue +16 -0
  114. package/src/icons/ShareIcon.vue +4 -16
  115. package/src/icons/SkipNextIcon.vue +3 -1
  116. package/src/icons/TerrainBoxIcon.vue +9 -0
  117. package/src/icons/ToolsIcon.vue +4 -30
  118. package/src/icons/UploadIcon.vue +2 -9
  119. package/src/icons/UserProfileIcon.vue +7 -0
  120. package/src/icons/UserShareIcon.vue +7 -0
  121. package/src/icons/VideoRecorderIcon.vue +5 -9
  122. package/src/icons/ViewpointFlightIcon.vue +11 -0
  123. package/src/icons/ViewpointIcon.vue +11 -0
  124. package/src/icons/Viewshed360Icon.vue +7 -0
  125. package/src/icons/ViewshedConeIcon.vue +7 -0
  126. package/src/icons/ViewshedIcon.vue +7 -0
  127. package/src/icons/WallIcon.vue +4 -9
  128. package/src/legend/legendHelper.js +193 -0
  129. package/src/legend/styleLegendItem.vue +129 -0
  130. package/src/legend/vcsLegend.vue +92 -0
  131. package/src/manager/buttonManager.js +7 -12
  132. package/src/manager/categoryManager/ComponentsManager.vue +30 -0
  133. package/src/manager/categoryManager/categoryManager.js +500 -0
  134. package/src/manager/contextMenu/contextMenuComponent.vue +43 -0
  135. package/src/manager/contextMenu/contextMenuInteraction.js +42 -0
  136. package/src/manager/contextMenu/contextMenuManager.js +197 -0
  137. package/src/manager/navbarManager.js +9 -9
  138. package/src/manager/toolbox/GroupToolboxComponent.vue +118 -0
  139. package/src/manager/toolbox/SelectToolboxComponent.vue +128 -0
  140. package/src/manager/toolbox/ToolboxManager.vue +116 -98
  141. package/src/manager/toolbox/toolboxManager.js +235 -86
  142. package/src/manager/window/WindowComponent.vue +1 -1
  143. package/src/manager/window/WindowManager.vue +5 -3
  144. package/src/manager/window/windowManager.js +118 -14
  145. package/src/navigation/mapNavigation.vue +3 -5
  146. package/src/navigation/overviewMap.js +28 -5
  147. package/src/navigation/vcsCompass.vue +1 -1
  148. package/src/pluginHelper.js +42 -10
  149. package/src/setup.js +0 -2
  150. package/src/state.js +256 -0
  151. package/src/styles/_theming.scss +0 -5
  152. package/src/styles/variables.scss +7 -0
  153. package/src/styles/vcsFont.scss +17 -0
  154. package/src/uiConfig.js +79 -0
  155. package/src/vcsUiApp.js +213 -22
  156. package/src/vuePlugins/vuetify.js +14 -4
  157. package/config/berlin.config.json +0 -510
  158. package/dist/assets/core.216494.js +0 -4
  159. package/dist/assets/ui.99a1a7.css +0 -1
  160. package/dist/assets/ui.99a1a7.js +0 -70
  161. package/dist/assets/vue-composition-api.c5aca1.js +0 -14
  162. package/dist/assets/vue-composition-api.js +0 -2
  163. package/dist/assets/vue.762edd.js +0 -9
  164. package/lib/vue-composition-api.js +0 -2
  165. package/src/manager/toolbox/ToolboxGroupComponent.vue +0 -128
package/README.md CHANGED
@@ -94,6 +94,10 @@ how safe it is to start developing with these components.
94
94
  - PluginConcept RC
95
95
  - SEARCH API TODO
96
96
  - I18n API RC [I18n](documentation/INTERNATIONALIZATION.md).
97
+ - Components API RC [Components](documentation/COMPONENTS.md).
98
+ - [Context Menu](documentation/CONTEXT_MENU.md) API RC
99
+ - [FeatureInfo](documentation/FeatureInfo.md) RC
100
+ - [State & Application Link](documentation/STATE.md) RC
97
101
 
98
102
  ##### components
99
103
  - VcsTextField BETA
@@ -102,6 +106,7 @@ how safe it is to start developing with these components.
102
106
  - VcsButton ALPHA
103
107
  - VcsFormattedNumber BETA
104
108
  - VcsLabel BETA
109
+ - VcsRadio BETA
105
110
  - VcsTooltip ALPHA
106
111
  - VcsActionButtonList ALPHA
107
112
  - VcsActionList ALPHA
@@ -131,14 +136,15 @@ how safe it is to start developing with these components.
131
136
  - Search API + UI Prio 2
132
137
  - Overlay API Support Prio 3
133
138
  - i18n DONE.
134
- - FeatureInfo Concept/API (Balloon) (WIP) Prio 1
135
- - Context API ? Prio 2
139
+ - FeatureInfo Concept/API (Balloon) DONE
140
+ - Context API DONE
136
141
  - Hierachy B3dm
137
- - Legend Concept/API Prio 2
142
+ - Legend Concept/API DONE
138
143
  - Copyright/Attributions Concept / API Prio 2
139
- - Ui Configuration (title/themes, usw, projectInfo/Impressum/usw. ) / API Prio 2
144
+ - Ui Configuration (title/themes, usw, projectInfo/Impressum/usw. ) / API DONE
140
145
  - Help Concept / Beispielhaft implementieren Prio 2
141
- - Components Concept/Categories / API (WIP) Prio 1
146
+ - Components Concept/Categories / API DONE.
147
+ - Notification Concept Prio 2
142
148
 
143
149
  ### Plugins
144
150
  - Drawing (WIP) Prio 1
@@ -164,6 +170,7 @@ how safe it is to start developing with these components.
164
170
  - Walkmode Prio 4
165
171
  - Search esri Prio 4
166
172
  - Search WFS Prio 4
173
+ - Create Link DONE
167
174
 
168
175
  # Getting started
169
176
  For a first start, clone the repo and call `npm i` `npm run start` This will start a development server. The
package/build/build.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import path from 'path';
2
+ import fs from 'fs';
2
3
  import { build } from 'vite';
3
4
  import { v4 as uuid } from 'uuid';
4
5
  import rollupPluginStripPragma from 'rollup-plugin-strip-pragma';
@@ -24,9 +25,6 @@ function hashLibraries() {
24
25
  vue: {
25
26
  entry: path.join('lib', 'vue.js'),
26
27
  },
27
- '@vue/composition-api': {
28
- entry: path.join('lib', 'vue-composition-api.js'),
29
- },
30
28
  '@vcmap/cesium': {
31
29
  entry: path.join('lib', 'cesium.js'),
32
30
  rollupOptions: {
@@ -156,6 +154,11 @@ await Promise.all(Object.entries(libraryBuildOptions).map(async ([key, value]) =
156
154
  },
157
155
  };
158
156
  await build(libraryEntryConfig);
157
+ await fs.promises.cp(
158
+ path.join('src', 'assets', 'font'),
159
+ path.join('dist', 'assets', 'font'),
160
+ { recursive: true },
161
+ );
159
162
  }));
160
163
 
161
164
  await buildCesium();
@@ -138,7 +138,6 @@ function loadCss(href) {
138
138
  */
139
139
  export const libraries = {
140
140
  vue: 'vue',
141
- '@vue/composition-api': 'vue-composition-api',
142
141
  '@vcmap/cesium': 'cesium',
143
142
  ol: 'ol',
144
143
  '@vcmap/core': 'core',
@@ -194,18 +193,27 @@ export async function buildPluginsForPreview(baseConfig = {}, minify = true) {
194
193
  await buildLibrary(pluginConfig, `plugins/${plugin}`, 'index', '', true);
195
194
  });
196
195
 
197
- promises.push(...dependentPlugins.map((pluginName) => {
196
+ promises.push(...dependentPlugins.flatMap((pluginName) => {
198
197
  let scope = '';
199
198
  let name = pluginName;
200
199
  if (pluginName.startsWith('@')) {
201
200
  [scope, name] = pluginName.split('/');
202
201
  }
203
202
 
204
- return fs.promises.cp(
203
+ const copyPromises = [fs.promises.cp(
205
204
  path.join(pluginsDirectory, 'node_modules', scope, name, 'dist'),
206
205
  path.join(process.cwd(), 'dist', 'plugins', scope, name),
207
206
  { recursive: true },
208
- );
207
+ )];
208
+
209
+ if (fs.existsSync(path.join(pluginsDirectory, 'node_modules', scope, name, 'plugin-assets'))) {
210
+ copyPromises.push(fs.promises.cp(
211
+ path.join(pluginsDirectory, 'node_modules', scope, name, 'plugin-assets'),
212
+ path.join(process.cwd(), 'dist', 'plugins', scope, name, 'plugin-assets'),
213
+ { recursive: true },
214
+ ));
215
+ }
216
+ return copyPromises;
209
217
  }));
210
218
 
211
219
  await Promise.all(promises);
@@ -20,4 +20,11 @@ await Promise.all([
20
20
  recursive: true,
21
21
  },
22
22
  ),
23
+ fs.promises.cp(
24
+ getProjectPath('exampleData'),
25
+ path.join(process.cwd(), 'dist', 'exampleData'),
26
+ {
27
+ recursive: true,
28
+ },
29
+ ),
23
30
  ]);
@@ -20,6 +20,10 @@ export default async function getPluginProxies(target = 'http://localhost:8080',
20
20
  rewrite: (route) => {
21
21
  const rest = route.replace(new RegExp(`^/plugins/${plugin}/`), '');
22
22
  const file = rest || 'index.js';
23
+ const pluginDir = path.posix.join(path.relative(root, pluginsDir), 'node_modules', plugin);
24
+ if (/plugin-assets\//.test(file)) {
25
+ return path.posix.join(pluginDir, file);
26
+ }
23
27
  return path.posix.join(path.relative(root, pluginsDir), 'node_modules', plugin, production ? 'dist' : 'src', file);
24
28
  },
25
29
  };
@@ -55,7 +55,8 @@
55
55
  "provider": "Fachbereich Geodaten und Verkehrsanlagen Osnabrück"
56
56
  },
57
57
  "properties": {
58
- "title": "Gebäude"
58
+ "title": "Gebäude",
59
+ "featureInfo": "vcsContent"
59
60
  }
60
61
  },
61
62
  {
@@ -166,7 +167,6 @@
166
167
  "layers": "web",
167
168
  "parameters": "format=image/png",
168
169
  "maxLevel": 21,
169
- "featureInfo": null,
170
170
  "tilingSchema": "geographic",
171
171
  "hiddenObjectIds": [],
172
172
  "copyright": {
@@ -384,5 +384,15 @@
384
384
  "collectionName": "Schrägluftbilder 2019"
385
385
  }
386
386
  ],
387
- "plugins": []
387
+ "plugins": [],
388
+ "uiConfig": [
389
+ {
390
+ "name": "primaryColor",
391
+ "value": "#232D52"
392
+ },
393
+ {
394
+ "name": "logo",
395
+ "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAABhCAYAAAC9Ds8qAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAGYVJREFUeNrsXQd0FEe2LUDkJIMxJtggiyhAItpkMAscwiLyCjDGJpksjAkfm7TkKLNgoslgksGI4AUWTE4i5yAymLACk7NE2L4F1fT0VHX3jEajHn7dc+ZoNDOdqurWS1XvJXn16hWRkJDwDpLKJpCQkISTkJCEk5CQkISTkJCEk5CQkISTkJCEk5D4/wI/oy9fvnz5KibmlmwlCQkLyJAhHUmbNnUStwkHss2a/29y5uxl2ZoSEiYoX7Yoad0i1H0J55c8GSXbtp2HZWtKSJigWEh+acNJSNgJknASEpJwEhKScBISEglJuOdxL2QLSUh4i3DwUkpISHgOfp46Uc1qZUjRkHzC77fvPGQ5vFAgX25SP7RSvO7n4qXrZOGSdU6fN21cneTOlc3w2LjY5+T23fvkyZNn5MLFa+TEqQvk/oNHbt9LkiRJSPkywTROU0Jpo6wfZCaZM/vT7+7df0Bibtwlu/cdIzujjpCtOw4R0aZguJ1rVCvt9Pna9VHk4OFow3to1aKOct1MTp8vWrqePqMRwjv8AwFdh88ePXpCxk/+1fC+XMGhw6fJmvW7DH8TkDs7qVOzPPm0ZCGSK2dWGmhOntyPtuHVqzdI1N4T5Pe1O8ip0xeF50AboC08CfTblu0HvUu4dq0bkMJBnwi/DwzIaZlwAQohzAKIZti87QCXcA0VIhcNKeDGgDhFFiz9g0Su3Exc2SWPwTjg+zbCtsnyfib6wvd45jPn/iQjIuYIO5DXLpggjAgHwnftEOZEGiDmxm1DwmVIn1YhXJjT51F7j2kmyFzx7q/Fv/0hJNx7/hnI4H7fKKQuY9iG6Nf2bRrQvu8zcDJ9Nj2yZ8sS73vltb9VwnnEaYJOCSqQ2/A3pYoXpB3vq0BnjhrcmUQuHEVnWitoUPdzsnjOEMOJSI+8gR+RGZP6cmdhSNqXL19y7i2f4Tnz583FJRtQ3CRYG1QgQCiRvAFoO6uXRQjJxkPlCsXJuhXjLQWibWXDWZ/F85GkSY1PhQ5Hx/s6QJ4FMweakq50qcJkxMCOpu0iwg89vqZquhbPnsUqpHNWl4oEBRpOZsUMCBlSOI8x4QryCXf85PkEb2tM5NN+6k2ll6vAeJs9pZ/lydGnCFe2dLBlYr4LwACYNLaXcJDj89FDOrtNNoYRgzqRlClTmA50DC4ju7SwQkgRsikqFs+2M5OAB0xsRk/gm5b16P25C7TL2BHdbKVZecSG+6xkYUu/K6cQk2dXuQIY61bw9Okzl2206LNXHIzr/Hk+EnY4VL/6oZXJshWbnL6rUbW04UBh13r46DEpVPATKg1FA6aBcg1tm+0/dIqENazKtRVFthiuYQSQSmQ/8STg9es3ufZRfPpLD0w0XzatKTznuMmLFbv1tVpboWwItct4ajM0Em0/wRFmdE8i1Ts2No7ExT3nfxcX5xnCWYnDWbHfGEoUi59OffOv26RMlbYJMvOsXh9FZs5d5fQ5bKne37XgSqtmjapyCVe7Rjlhp3X/fpzT4Abhpo7vze1snEtLuBMnLwjstI+FA9esf0BIHuHgrOBNHIePnbXUpsdOnCf1mvR0z0wJzicc/F+3H+zgJML7VWu2k+WKfc07RttP8GCGlGkuvO7hXb9wz9EufLhHFvHHOw4nst8wC/JUMbvp1GYACZdEbhTYN4FOKp/RxDJv0RruwIbHDzO2SPpoVaLoM5e4M3QJgboOp4eZaityuhQOCoiXOpkyZXK3211kO8KLy/PIQrr37j9R6PDC5PFO2HCligdxP8c+Oj5B8xNfw/Q5K7ifp0iRnGTP9r6TVBAZ+ZErtwiv8e+1O4TX0NpnCEmcOXuJS36erWLFbhY5XfLm4UvNg17wUGYSEOTqtZvCYzCZQaoytXOt8n+/wVNJuaptyZ27998NG650qSCudMMAgqfNaSYuWoCrhtkZ167/Rd3xPEnhnzG94//+6QzOIx4sN27eoSonCGZ2jf3KgNfHEnEcvMD6oG9xCxMcc7robUDesbhHhCcSC7CrMTmIYqEDh08n6dKmInv2n6ReXbshXhIO6lRwkXxcHR9GNU+trKgYuL4GDLLnz/n2bEodQfTkYABhjVarYABhxQTfTk6jc7qctqyG8ZweeB4rmgfv2BMnz3llIF8VTE6wKbu0byw8DuombC07ki3ehPu0REHurL8j6ojQuDZzQ9sRH2R5jyt5gJibtxP8+mlSp3L4/9SZS3ynVNECTg4tntMjctUW02NFDpP9Xgp4a1ey6IGVL9/3+IprP9sd8SKcKBzAdHxGPJ4jwJcg8joCt27d8/r9YJ0oPLZ66N3/IUXycJ0OWNdqdmxwYX7szlsrTKDeGpEOYYDli0b5nE8gXjYcz36DsRr9ZgYWGddYxGu2UJU/06emM5sRpkyP9KiBjA7tyllLyAZvfBY1uwuon8dPXiSVKzhqCvkU+wazPlOneIPxwKForpdRf2xIkbzca7sS8PbPmNa0v378aaFQ/YPDQ+Tqp06dwI/IknnD6DrMMePm28Yx4jbhjOJwIvtt74GTqkELAx4E1DdY8aLuzUo4j9nCU6x+d6fhIXWfNH4bLM+hqFNwl4uC0sDcBasTreOOHDtD1wzqHScIAzC3OVbV63HsxDlqX0NCar2p+mODCzsTDsdYDXgDOL9Zf02culRIOObqHzf6O8PQBhYCVKlUnIwet8DlxeW2IpxRHE5kv2EgaHFU6WD9oMXMBBvBTjMSFse6skAWgw/bYhILh4+e4X6OlfuMNIEB2YXqPk9CIoTAji1UMLez/XYw2uvPCU3ocedhZPzo7kJJx8iNxeUIcvcdPM1wi45P2nAi+23PvhO6/48L1NFCxFcBL1/HbmMSdcI4cuwc93O2bhKOKX08UKvu6ydGrW3NO9ZVddKTwNaX6nXDaVzNDAiXrPx1NFVl7bg7xW3C8ew3DMSDR07rZtRoQcP45kJm2G2tOgwx3fCZ0ADZeWEXpq7zHFPQNpi6xZOQgZ/kVKUkD6JlZd4AVNnO3ceQ5q0H0D4wHNSK5gVV9qcx3W1HOrcIR9fnFQzkdIhzjObw0bPcPVxWFzzznDJGr4QEjPNaDboZes+8qlZywi6BATlo//AWLGu1jVOnL3GdEAgl8Bwm6EP9ZGoGHOPp/kLbow+GjZltejxMhCH92/uODScCFpby4lK8GA28eNjDpd+EiQW16FxXvHwJuXgZ0uLSlRj6Htv3eTEoDGI7GeRQ8fR2J2Z3OD94GoRWqvEcJwBCCTyHCfrQ1WDyuQtXSc3633r8udEHWOOKpXI9un7B3T2hdaisWr3NNpOkW4T7tGSQ8LuaHMcDtqHwxD461y5p1LH2k+0WwHaPWVP6c+yjT6irPbHVSTMVD86PIpw9cHq7j+84yc91mHhjw6k7ajVSKSCuiL2DIqdKj/CmpNGXfXyZcHyHh6u5IqBW2rFuwfZdR6idABXL+RnrKLaETQgnWNPYuP7fnAYfnkfv5OGFFmpWL8t1mGAfnl0BT+aFS9eVSbIP997hSIEjyJWQRqLYcLw4HOwDT60UQQDcjoDKsiRyA/e76n/7zDZL06CO8xwIvIkCAW89eJKad6yR88sIz57Fea0tEAYYNHym8PtyZeyxhtfl/XAi+80dsNUNdgTsA94iX6jCRjYDdhRzG1o5zsxjhpU0fNXpgdiOO2SNCAh4O39mzesI5wSWk7mK+OyHAzCxwUSBi3/pvKH0ZSbprgsWPftnTGd/wrlqv7kKEBcEtiOgfvEW+QJNG1cTkscoNodF0OLBmUJog9y999AlIvEl1GnuvV432DLEoF095A3Aht61cRrZ8cc08lNED2qqQC3Ey2wDM3N86ZHOIGhuc8J5NmDtSQJ7GkuX83d6w05A3hIROXiSETBSxY0mHiPbg+fe50moaMEOAyvpEnhB8oQEJK9oE2/D0M8Nj4WHmYebf931PaeJyH5DvCX0Hz3Js1ix2zhrlkzklxkDE5zAngTsFrHz5O/cBdg0ld3Jc9xks+Edw8jGrfud3OuQlvCk8QAJZCQ14TgRbVxl0Aa8nVRSTmjBE/ZbfLULuPF561i/aVWPbNiyj3tP+L0oedOVqzG+RziR/YYYjdnaNbalRD9zse39VlQW2DhIu20V8xaujffyKyxQHtyvndPnIBSSlPKee+vOw1zCgbjYUjJ+0mK6p+3x46d0VUeXdo2E2aC3mnhxQd7TZ/80TDZrtKXGyuoRLF5wB9gt4Ep/TZ25XJ2Mps1aziUcbOFJY3uQ3v0nOWQ7xm/HjuwqlPDYAe5zhBOpf8iLbwbRlhLYLUWD81maRfHbcMFWGR7WbdgTb8IhVQSydvHsK6RxQxxID6xI6dyuMXdxN0gHu8T6pLHG9DdofyPC7T1wwlBCGiE+W5AwubrSX5ggGeFQYwHpBHkTEc6L7NRssULmTBmF3lVg0W/rbbMDPKlrhOOrfzsFG02dfreb/zs7J4jFYPtdkOCnfp1KdLUMz+aa9cvv8b42FutaWfUefeayiQ12zvD5jNYmWvWCehqYoHv2m2i4fAvqIySbEdmgVWGPpF1gOQ5nZL9ZzeIk+l3Zz4IT5OGMbEpXIJIyUK8b1a/C/Q4bK1kGKXcAEvQb/LNlW1MEMxsQOHf+ioED41yiDU7shwvvGSF0QpkBx7VsP9RW28Asx+GwPo9nvx05etqyysEMfD0SqtBHyhSeifFBykC94aHlF7W59w4VJuyrPpa2lOgBh0FYiz6WBwrsY5EksOKFNNp2c9BLKRVEgJ2G3RlWwhf6CatBs9622xdnWaWsIMi2hZpcliXOGw8ezzaze6EPlKoSqTUVyxUVPi+2lLRsP4iWUDKaqaEpgGitOw4hX7b5p0t2E9SvowJJtMOCui8ilVE4wZtAu9Ru1J3uEDAjHrSKXv0mkHpNetlyE2oSI++gov++6tV3gi3XO/oiXqcdDyAffpCJ+Punf6P2xpFr127SrS92Te1mNyD4XUCZoNGGqVOnpLHPmzdvU29qYuSYYYBHNrxDmKGq5ie7z3sAoeyy08CXAdvOrGqrXZFUdp+EhCSchIQknISERAISzkp9OAkJCQ8Rzkp9OAkJCalSSkjYEqapztOlTcNdLyghIeE6DAPfjx49ecWrtikhIeGMtOnSYiF1ErcJp+CVbEYJCdeEmLThJCRsAkk4CQlJOAkJSTgJCQlJOAkJ34HL23OwUfLW7bvk7r1HJPuH7xtWpUxMaEtkGZWrtStw/zExt8jDx0+92s680mK+2H52HWeWwwLYsTx99gqye99xh5R2CIojr0fbr0OFyTsTA3mCG6rvt/1nijBfoRmwSzsu7jl9nzy5n8fSvIuAlAwz5q4ih46cdmrn2jXKkY5tGrj9LFZQrmpbp8Sz2DibPdv7JGf2LCSsYTVSpVLJBG8HX8CU6cvImPHz6XukZH+TjS3+YQGkfWvTaSjd6q4nKHbYosxTs1YDErwgYqI06oxlJKRMc/oaPHJmgl5rxtyVNCUDNqny2nnhknUkNKwXzUTlTWDjLDZ8Yuc/7q92o+/eyb62hQ0HkTloxAz1/0rli1GJcWLfIjJ9Yh+1GAc6BANGwj2ARCMi5qr/N6j7udrOyFj9nn8G+jkSC40et8Ar94R7WL5oNL0+0gdo+7p3/4my0xLChkMVS22ujW6dm6kqDWqLQc1ZtmIT/X/PvhNcFQmlny5fiSHXrv9Fq5igag5UE5R+0uu9yLY0TVFdkRH42puEMdmV6yF3ZYtmtZxyEOL3w0bPovno/f3T0TyFULuMgAxcSAoESXLr1j2SLFkyWqmlbOkiNAsXez6o0dqqoRhokPb58+RUE5SCKAuXrKdJZ6GKPX7ylKpfyLnRsF4Vp/pr4na+5iDVenZtpqroeKb6oZXUgpHaNA3QOoaMnEXfo43w7JMUVQef49lQt7t7eDNuFmMzoK9Yglkc/1CRauwekLIdk7G2/3DN+YvW0qzSrK8DcmUndWpVoDk8tWro+MmLaZsBnds1IqlSpSTzFq6mOTTRF6hsirZDe6PGA1L5Zc6ckXTv0swpNTvGAMbYJuWe8MwAfoviki2a1nJIkovfdvu/f9H3Abmykf7ft1LG20qyM+ooHW8Ya+zaWqHz88zl5LeVm+j5kZcGz5QghLt6zTFLUub30jv8361jGGnW6HX5Jr/kjmnpkD2JkRHALI1BiRfUk6aNq5OBfdqqnYYOQ8YqnjqFDEzLVm4mi+cMVRsQ9lWzlv3VdHIpUvjR4hZVQ8MN1eO+g6ao18A93b33gJ4D10Cm5eWLRtLBDptVW6oW7/HCzA/CIUNUu/Dhqs0DCZBSGVQs58baP6JoYXez3P3Apcv/dfhfX7oq0xsJB2AwMzx9Gqtmp8KAQRthkCONOtoN5OzSPYLs3jzDZeeHvvQW8pLOJKtUNVNbShoEGj/5V4e+vnHzDm0btBnK/s6c3Fcl3RVlXLH7Rv7NFy9e0MmB9UWn70aTT0sUpImB8DmeBa8uPSLI1rWT1UkR5+747Sg1eRBsXSRmYn2A/tSOmUcPH6nXxb1VrtmJtheuya6Ba+/ZPFN1VCGpL7PVkBIR58fz4vk8rlKaAQ/OSglpZxJIEUY2zFhQj/ZunUXLELGSQ7BJ9ux/KxUjxi9QidAj/Av6WxzXqkUdtZPHTnirTqGcFCMbzrlp9SSyZN4wmr9f5AAZ+eNc9RpQlXBPh3bOU4ssohP2H3wtQZo3qeEgGTBj4r5qVS/7hrzrVbJh8ji4Yy7Zt202fU89TgaFHRMCkNTzpw8gvy+NoJMGy5eJNoLH01UgI5aDxPNPr3OmvCYPUtcxsmHAr4n8F23XnRt+pm3GiCEq/xVcOJBsWzeV9l3RN1WE0NfYqRK1aQb9nI0ZtGn02T8dxgwjG+rIof3RDyytI86zcvVW7nWhjcyY1Ie217oV41WVmdqsmnp4i5auV9/37t6C3g/ut0mjap6XcCJAej1RZlF9h7DCF/s1uQ4xg9y684C+AHi7WNYlFJpgg1qb575u7QqqShVaq6KqymjLM8XcuOVABjZ7ilJf+/klow3FoHW14x4Zea6+UWUhmU6fvaxKORTeaK9RV1FzAC82OCFBoH7kVlSVt/d4x2uEg0rNVF29x/ihrq88CW2yWahyqHzKsk6DKEwFRhZnXjHLUsWD1L5IlzaV+jkq5LI+1Sb1ffr0reSdPaWfwwTxWoq/IHnzfKymd7yu0Qj0KjMbe7g+/mdj4HlcLFejqFiumBoCyOGGt9htwkFU6/MoQkowwsXFPndQxeo16cmXOnFxqp5sJS+jVs15qPGUWalwiUZiHQtdfs26nbRT9C54q2DngsduSeRGWtwdiVcTMzdiYgMTqaivn8V6vgQx6wPY0ijagT5ApRxP5fiEVqQ9FyoCJajTRIT+vVvTv+s2RDmUDeIBRBTVWM6nzETeBNSfHwZOJtt3HaEkwwzcpX1jSjxXc0ZikpgwdYlaZgkqCZxIID+TyO8S7upKH6dLk8rpN7DdPq9Ugnt8iaIFPH5PmOwGjphBIhXbFf2J6zcIrUzJrfUf+IyXMkd2R7EJtRB2G1MNRMUekqfwczC2Rw3u7DBQnz9/oap5TPpYqRMHO8WKgS8iG+JYsGlga/w44lvVG3Xm7J8uN17bzsPUyQZ2ZtcOYXTGhXfTVcLl+vhDR0fR/YcOKu9tTZ0BqL+JAW3adEwuWbNmdvoN1GmzvvYUIH3CvupLnSAYO7DhWjb/Ox1LCEp7hCDKPWvHZXwTa5k6TQIDcjikWIDTAuoYZhYMLHjFeChU8K0DBQaodgkMGimoZBP6Wrdht/q5tr6A1i44fvK85jcfa+4tp/pea9uJgrJLlm9UnSzlSgerZMPv/3vDPJh8TZPXHuRlZEOHMLLRe4m+6HJHsMKUDMPGzKHXwL1Rh8PKtw6HoIIB3pFo9x5SWwz93G/wVAfnQZWKJVSvJ7yIDPrCIl17/qj2tSdKeGmxc/dR1eOI+umoBc7s6POXPJOZGefT1mbXjktmDnlUwuGCw/7Zga4wADDI9CokTzJBqsEgxWBBo3xWuTUpHBRAq3UywxTqXIWybwthaAsc4npQRWMVW5CRBNdp83XdtwZs2RA607IU4iiEgTjKxi371M95+j6AOBIcP3Tm3nVYWEdbewyeG0ufIN2bNq6mPjde7cJHUCKgMIY76cxxHXjAhitEA1DOmFfSGG2CGJ03AJWMp5ah30YM6qT+DycVljbhftFXFaq3IyFF8jj0NVS9WhbCIy45iTKk0TinbpMuypiB4w5jzpOp0GEmMI0FIQxUG0JcMGrvcc9LOOatgwu9wpsBriUaVKnIhaOcSjbBu4S4C1YooLHREbCT0DA4B2JZC2YOdBjQGMgTInrQUr44H36L4/AeXshpE35wCEhCtY0YFq6uwkDVTAz4oQM6cIvUN2lYja6UobEUhYzQ+0EOPENNzWDQztDaY1jHIoYELyCCsEz6o5OXRm6knkxcn8GV2mSYofH8eFZtOzN3O+5z6bxhltesuuMI4gHXBsnQDri//ywf57SYOmJ4V6rSYUKA04j1NdoNbbtg1iCX14A+fPTY8Ht4ZNEmrK1A+LXro0idmuUdSh2LzhOrcewZAdoLngHPgv5EP2fO7E9DCq4iiac6RUJCwkMSTkJCQhJOQkISTkJCQhJOQkISTkJCEk5CQkISTkJCEk5CQkISTkJCEk5CQkISTkJCEk5CQhJOQkJCEk5CQhJOQkJCEk5CIpHxPwEGAJ/4oOOcmF9VAAAAAElFTkSuQmCC"
396
+ }
397
+ ]
388
398
  }