From ee6adf4af14c1b8a2096d0762dc719398cf08673 Mon Sep 17 00:00:00 2001 From: Syntax <2079305+TheUltDev@users.noreply.github.com> Date: Fri, 15 Dec 2023 23:22:11 -0600 Subject: [PATCH] v45 (#20) --- .gitignore | 7 +- .vscode/settings.json | 2 +- README.md | 113 +- ROADMAP.md | 47 - art/banner.png | Bin 407878 -> 0 bytes {art => artwork}/logo.png | Bin build-figma-plugin.ui.js | 18 - package.json | 69 +- packages/css-to-rn/README.md | 7 + packages/css-to-rn/declaration.ts | 571 +++ packages/css-to-rn/declarations/_index.ts | 31 + .../css-to-rn/declarations/align-content.ts | 36 + .../css-to-rn/declarations/align-items.ts | 40 + packages/css-to-rn/declarations/align-self.ts | 40 + packages/css-to-rn/declarations/angle.ts | 13 + .../css-to-rn/declarations/aspect-ratio.ts | 11 + .../declarations/border-side-width.ts | 13 + .../css-to-rn/declarations/border-style.ts | 26 + packages/css-to-rn/declarations/box-shadow.ts | 21 + packages/css-to-rn/declarations/color.ts | 29 + packages/css-to-rn/declarations/dimension.ts | 21 + packages/css-to-rn/declarations/display.ts | 49 + .../css-to-rn/declarations/font-family.ts | 6 + packages/css-to-rn/declarations/font-size.ts | 15 + packages/css-to-rn/declarations/font-style.ts | 13 + .../declarations/font-variant-caps.ts | 19 + .../css-to-rn/declarations/font-weight.ts | 17 + packages/css-to-rn/declarations/gap.ts | 12 + .../css-to-rn/declarations/justify-content.ts | 37 + .../length-or-coerce-percentage-to-runtime.ts | 21 + .../declarations/length-percentage-or-auto.ts | 14 + packages/css-to-rn/declarations/length.ts | 112 + .../css-to-rn/declarations/line-height.ts | 29 + packages/css-to-rn/declarations/overflow.ts | 13 + .../runtime-specifics-function.ts | 83 + packages/css-to-rn/declarations/size.ts | 32 + packages/css-to-rn/declarations/text-align.ts | 13 + .../declarations/text-decoration-line.ts | 27 + .../declarations/text-decoration-style.ts | 13 + .../css-to-rn/declarations/text-shadow.ts | 18 + packages/css-to-rn/declarations/transform.ts | 84 + packages/css-to-rn/declarations/unparsed.ts | 236 ++ .../css-to-rn/declarations/vertical-align.ts | 17 + packages/css-to-rn/index.ts | 507 +++ packages/css-to-rn/package.json | 11 + packages/css-to-rn/properties.ts | 162 + packages/css-to-rn/types/index.ts | 232 ++ packages/css-to-rn/types/parse.ts | 43 + packages/css-to-rn/utils.ts | 44 + packages/exo-primitives/README.md | 1 + .../build-figma-plugin.main.js | 0 .../build-figma-plugin.manifest.js | 0 .../build-figma-plugin.ui.js | 42 + packages/figma-to-react-native/package.json | 81 + .../src/common/assert.ts | 40 + .../src}/common/delay.ts | 0 .../src}/common/string.ts | 0 .../figma-to-react-native/src}/config/env.ts | 20 +- .../src}/config/project.ts | 2 +- .../figma-to-react-native/src}/config/user.ts | 3 - packages/figma-to-react-native/src/env.d.ts | 4 + .../src/interface/App.tsx | 131 + .../src/interface/base/NavBar.tsx | 166 + .../src/interface/base/ProgressBar.tsx | 29 + .../src/interface/base/ScreenInfo.tsx | 22 + .../src/interface/base/ScreenWarning.tsx | 15 + .../src/interface/base/SearchBar.tsx | 34 + .../src/interface/base/StatusBar.tsx | 31 + .../src/interface/base/Tabs.tsx | 46 + .../src}/interface/css/default.css | 161 +- .../src/interface/css/default.css.d.ts | 22 + .../src}/interface/css/editor.css | 0 .../src}/interface/css/editor.css.d.ts | 0 .../src}/interface/css/plugin.css | 0 .../src}/interface/css/plugin.css.d.ts | 0 .../src/interface/hooks/useBuild.ts | 40 + .../src}/interface/hooks/useDarkMode.ts | 2 + .../src/interface/hooks/useEditor.ts | 27 + .../src/interface/hooks/useNavigation.ts | 54 + .../src/interface/hooks/useProjectBuild.ts | 38 + .../src}/interface/hooks/useProjectConfig.ts | 0 .../src/interface/hooks/useProjectIcons.ts | 19 + .../src/interface/hooks/useProjectTheme.ts | 18 + .../src/interface/hooks/useSelectedVariant.ts | 16 + .../src/interface/hooks/useStyleGenServer.ts | 14 + .../src/interface/hooks/useUserSettings.ts | 20 +- .../src/interface/store.ts | 92 + .../src}/interface/telemetry.tsx | 0 .../src/interface/utils/bundler/index.ts | 34 + .../interface/utils/bundler/lib/barrier.ts | 33 + .../interface/utils/bundler/lib/compiler.ts | 64 + .../src/interface/utils/bundler/lib/path.ts | 215 + .../interface/utils/bundler/lib/resolver.ts | 8 + .../interface/utils/bundler/plugins/css.ts | 34 + .../interface/utils/bundler/plugins/png.ts | 47 + .../interface/utils/bundler/plugins/react.ts | 64 + .../interface/utils/bundler/plugins/svg.ts | 37 + .../src/interface/utils/editor/index.ts | 135 + .../src/interface/utils/editor/lib/patch.ts | 19 + .../src/interface/utils/editor/lib/yjs.ts | 252 ++ .../utils/editor/schemas/settings.json | 2814 +++++++++++++ .../utils/editor/templates/env.ts.tpl | 10 + .../interface/utils/editor/templates/index.ts | 13 + .../editor/templates/react-native-exo.ts.tpl | 3 + .../editor/templates/react-native.ts.tpl | 179 + .../utils/editor/templates/styles.ts.tpl | 4 + .../src/interface/utils/exporter}/download.ts | 6 +- .../src/interface/utils/exporter}/upload.ts | 2 +- .../src/interface/utils/exporter/zip.ts | 33 + .../src/interface/utils/importer/icons.ts | 42 + .../interface/utils/previewer}/importMap.json | 7 +- .../src/interface/utils/previewer/index.ts | 102 + .../utils/previewer/templates/app.tsx.tpl | 70 + .../utils/previewer/templates/iframe.html.tpl | 89 +- .../utils/previewer/templates/loader.tsx.tpl | 84 +- .../src/interface/views/ComponentCode.tsx | 116 + .../src/interface/views/ComponentPreview.tsx | 136 + .../src/interface/views/ComponentStory.tsx | 35 + .../src/interface/views/ProjectAssets.tsx | 45 + .../src/interface/views/ProjectComponents.tsx | 238 ++ .../src/interface/views/ProjectExport.tsx | 73 +- .../src/interface/views/ProjectIcons.tsx | 192 + .../src/interface/views/ProjectSettings.tsx | 46 + .../src/interface/views/ProjectTheme.tsx | 35 + packages/figma-to-react-native/src/main.ts | 129 + .../src/plugin/fig/index.ts | 108 +- .../src/plugin/fig/lib/assets.ts | 72 + .../src/plugin/fig/lib/colors.ts | 81 + .../src/plugin/fig/lib/index.ts | 36 + .../src/plugin/fig/lib/node.ts | 47 + .../src/plugin/fig/lib/props.ts | 132 + .../src/plugin/fig/lib/styles.ts | 62 +- .../src/plugin/fig/lib}/traverse.ts | 22 +- .../src/plugin/fig/lib}/validate.ts | 0 .../src}/plugin/gen/common/generateIndex.ts | 0 .../src/plugin/gen/index.ts | 272 ++ .../src}/plugin/gen/primitives/exo/Slider.ts | 13 +- .../src}/plugin/gen/primitives/index.ts | 14 +- .../plugin/gen/react-native/generateBundle.ts | 114 + .../plugin/gen/react-native/generateCode.ts | 28 + .../plugin/gen/react-native/generateStory.ts | 0 .../plugin/gen/react-native/generateTheme.ts | 87 +- .../src}/plugin/gen/react-native/index.ts | 0 .../gen/react-native/lib/writeChildren.ts | 148 +- .../gen/react-native/lib/writeClasses.ts | 17 +- .../gen/react-native/lib/writeColors.ts | 83 + .../gen/react-native/lib/writeFunction.ts | 79 +- .../gen/react-native/lib/writeImports.ts | 100 + .../plugin/gen/react-native/lib/writeProps.ts | 14 +- .../plugin/gen/react-native/lib/writeState.ts | 7 +- .../gen/react-native/lib/writeStyleSheet.ts | 120 + .../figma-to-react-native/src/plugin/index.ts | 8 + .../src/plugin/lib/app.ts | 31 + .../src/plugin/lib}/codegen.ts | 8 +- .../src/plugin/lib}/config.ts | 2 +- .../src/plugin/lib/drop.ts | 19 + .../src/plugin/lib/icons.ts | 231 ++ .../src/plugin/lib}/project.ts | 29 +- .../src/plugin/lib/vscode.ts | 1 + .../figma-to-react-native/src/types/app.ts | 30 + .../src/types/component.ts | 50 + .../figma-to-react-native/src/types/events.ts | 121 + .../figma-to-react-native/src}/types/parse.ts | 40 +- .../src}/types/project.ts | 10 +- .../src/types/settings.ts | 33 + .../figma-to-react-native/src}/ui.tsx | 32 +- .../figma-to-react-native/tsconfig.json | 2 +- packages/ui-kit-figma/README.md | 1 + pnpm-lock.yaml | 3612 +++++++++-------- pnpm-workspace.yaml | 3 + src/common/color.ts | 8 - src/common/random.ts | 17 - src/interface/App.tsx | 92 - src/interface/base/Tabs.tsx | 57 - src/interface/base/Watermark.tsx | 11 - src/interface/css/default.css.d.ts | 10 - src/interface/hooks/useEditor.ts | 55 - src/interface/hooks/usePreviewComponent.ts | 13 - src/interface/hooks/usePreviewTheme.ts | 12 - src/interface/hooks/useProjectBuild.ts | 42 - src/interface/pages/Code.tsx | 107 - src/interface/pages/Preview.tsx | 97 - src/interface/pages/Settings.tsx | 41 - src/interface/pages/Story.tsx | 31 - src/interface/pages/Theme.tsx | 25 - src/interface/utils/build.ts | 28 - src/interface/utils/editor.ts | 13 - src/interface/utils/preview/index.ts | 49 - .../utils/preview/template/_entry.tpl.tsx | 52 - src/interface/utils/sync.ts | 58 - src/interface/utils/zip.ts | 19 - src/main.ts | 104 - src/plugin/app.ts | 18 - src/plugin/fig/lib/convertAssets.ts | 57 - src/plugin/fig/lib/getColor.ts | 14 - src/plugin/fig/lib/getInstanceInfo.ts | 10 - src/plugin/fig/lib/getPropName.ts | 6 - src/plugin/fig/lib/getTopFill.ts | 6 - src/plugin/fig/lib/index.ts | 10 - src/plugin/fig/lib/isNodeVisible.ts | 6 - src/plugin/fig/lib/propsToString.ts | 78 - src/plugin/fig/lib/reactions.ts | 8 - src/plugin/fig/lib/sortProps.ts | 22 - src/plugin/gen/index.ts | 30 - .../gen/primitives/utils/getFillToken.ts | 13 - src/plugin/gen/react-native/generateBundle.ts | 127 - src/plugin/gen/react-native/generateCode.ts | 22 - .../gen/react-native/generatePreview.ts | 60 - .../gen/react-native/lib/writeImports.ts | 86 - .../gen/react-native/lib/writeStyleSheet.ts | 123 - src/plugin/preview.ts | 40 - src/plugin/styles/css-to-rn/generateStyles.ts | 10 - .../css-to-rn/utils/convertToReactNative.ts | 15 - .../styles/css-to-rn/utils/processStyles.ts | 42 - .../styles/css-to-rn/utils/shorthandStyles.ts | 64 - src/plugin/styles/css-to-rn/vendor/index.d.ts | 10 - src/plugin/styles/css-to-rn/vendor/index.js | 43 - .../css-to-rn/vendor/lib/TokenStream.js | 76 - .../css-to-rn/vendor/lib/parse/index.d.ts | 177 - .../css-to-rn/vendor/lib/parse/index.js | 28 - .../css-to-rn/vendor/lib/parse/parse.js | 321 -- .../css-to-rn/vendor/lib/parse/stringify.js | 48 - .../styles/css-to-rn/vendor/lib/parse/unit.js | 120 - .../styles/css-to-rn/vendor/lib/parse/walk.js | 22 - .../styles/css-to-rn/vendor/lib/tokenTypes.js | 61 - .../vendor/transforms/aspectRatio.js | 12 - .../css-to-rn/vendor/transforms/border.js | 67 - .../css-to-rn/vendor/transforms/boxShadow.js | 11 - .../css-to-rn/vendor/transforms/flex.js | 67 - .../css-to-rn/vendor/transforms/flexFlow.js | 40 - .../css-to-rn/vendor/transforms/font.js | 59 - .../css-to-rn/vendor/transforms/fontFamily.js | 20 - .../vendor/transforms/fontVariant.js | 14 - .../css-to-rn/vendor/transforms/index.js | 84 - .../vendor/transforms/placeContent.js | 25 - .../vendor/transforms/textDecoration.js | 52 - .../vendor/transforms/textDecorationLine.js | 20 - .../css-to-rn/vendor/transforms/textShadow.js | 10 - .../css-to-rn/vendor/transforms/transform.js | 79 - .../css-to-rn/vendor/transforms/util.js | 92 - .../styles/experimental/generateStyles.ts | 35 - .../styles/experimental/lib/background.ts | 16 - src/plugin/styles/experimental/lib/border.ts | 31 - .../styles/experimental/lib/dimension.ts | 29 - src/plugin/styles/experimental/lib/index.ts | 7 - src/plugin/styles/experimental/lib/layout.ts | 58 - src/plugin/styles/experimental/lib/padding.ts | 29 - .../styles/experimental/lib/position.ts | 6 - .../styles/experimental/lib/typography.ts | 45 - .../experimental/lib/utils/getFillStyle.ts | 10 - .../experimental/lib/utils/getFontWeight.ts | 27 - .../lib/utils/getLetterSpacing.ts | 12 - .../experimental/lib/utils/getLineHeight.ts | 12 - .../styles/experimental/lib/utils/getSize.ts | 65 - .../styles/experimental/types/styles.ts | 73 - src/plugin/styles/index.ts | 18 - src/plugin/styles/service/generateStyles.ts | 19 - src/types/app.ts | 7 - src/types/events.ts | 65 - src/types/preview.ts | 17 - src/types/settings.ts | 19 - 261 files changed, 13311 insertions(+), 6203 deletions(-) delete mode 100644 ROADMAP.md delete mode 100644 art/banner.png rename {art => artwork}/logo.png (100%) delete mode 100644 build-figma-plugin.ui.js create mode 100644 packages/css-to-rn/README.md create mode 100644 packages/css-to-rn/declaration.ts create mode 100644 packages/css-to-rn/declarations/_index.ts create mode 100644 packages/css-to-rn/declarations/align-content.ts create mode 100644 packages/css-to-rn/declarations/align-items.ts create mode 100644 packages/css-to-rn/declarations/align-self.ts create mode 100644 packages/css-to-rn/declarations/angle.ts create mode 100644 packages/css-to-rn/declarations/aspect-ratio.ts create mode 100644 packages/css-to-rn/declarations/border-side-width.ts create mode 100644 packages/css-to-rn/declarations/border-style.ts create mode 100644 packages/css-to-rn/declarations/box-shadow.ts create mode 100644 packages/css-to-rn/declarations/color.ts create mode 100644 packages/css-to-rn/declarations/dimension.ts create mode 100644 packages/css-to-rn/declarations/display.ts create mode 100644 packages/css-to-rn/declarations/font-family.ts create mode 100644 packages/css-to-rn/declarations/font-size.ts create mode 100644 packages/css-to-rn/declarations/font-style.ts create mode 100644 packages/css-to-rn/declarations/font-variant-caps.ts create mode 100644 packages/css-to-rn/declarations/font-weight.ts create mode 100644 packages/css-to-rn/declarations/gap.ts create mode 100644 packages/css-to-rn/declarations/justify-content.ts create mode 100644 packages/css-to-rn/declarations/length-or-coerce-percentage-to-runtime.ts create mode 100644 packages/css-to-rn/declarations/length-percentage-or-auto.ts create mode 100644 packages/css-to-rn/declarations/length.ts create mode 100644 packages/css-to-rn/declarations/line-height.ts create mode 100644 packages/css-to-rn/declarations/overflow.ts create mode 100644 packages/css-to-rn/declarations/runtime-specifics-function.ts create mode 100644 packages/css-to-rn/declarations/size.ts create mode 100644 packages/css-to-rn/declarations/text-align.ts create mode 100644 packages/css-to-rn/declarations/text-decoration-line.ts create mode 100644 packages/css-to-rn/declarations/text-decoration-style.ts create mode 100644 packages/css-to-rn/declarations/text-shadow.ts create mode 100644 packages/css-to-rn/declarations/transform.ts create mode 100644 packages/css-to-rn/declarations/unparsed.ts create mode 100644 packages/css-to-rn/declarations/vertical-align.ts create mode 100644 packages/css-to-rn/index.ts create mode 100644 packages/css-to-rn/package.json create mode 100644 packages/css-to-rn/properties.ts create mode 100644 packages/css-to-rn/types/index.ts create mode 100644 packages/css-to-rn/types/parse.ts create mode 100644 packages/css-to-rn/utils.ts create mode 100644 packages/exo-primitives/README.md rename build-figma-plugin.main.js => packages/figma-to-react-native/build-figma-plugin.main.js (100%) rename build-figma-plugin.manifest.js => packages/figma-to-react-native/build-figma-plugin.manifest.js (100%) create mode 100644 packages/figma-to-react-native/build-figma-plugin.ui.js create mode 100644 packages/figma-to-react-native/package.json create mode 100644 packages/figma-to-react-native/src/common/assert.ts rename {src => packages/figma-to-react-native/src}/common/delay.ts (100%) rename {src => packages/figma-to-react-native/src}/common/string.ts (100%) rename {src => packages/figma-to-react-native/src}/config/env.ts (56%) rename {src => packages/figma-to-react-native/src}/config/project.ts (92%) rename {src => packages/figma-to-react-native/src}/config/user.ts (81%) create mode 100644 packages/figma-to-react-native/src/env.d.ts create mode 100644 packages/figma-to-react-native/src/interface/App.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/NavBar.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/ProgressBar.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/ScreenInfo.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/ScreenWarning.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/SearchBar.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/StatusBar.tsx create mode 100644 packages/figma-to-react-native/src/interface/base/Tabs.tsx rename {src => packages/figma-to-react-native/src}/interface/css/default.css (57%) create mode 100644 packages/figma-to-react-native/src/interface/css/default.css.d.ts rename {src => packages/figma-to-react-native/src}/interface/css/editor.css (100%) rename {src => packages/figma-to-react-native/src}/interface/css/editor.css.d.ts (100%) rename {src => packages/figma-to-react-native/src}/interface/css/plugin.css (100%) rename {src => packages/figma-to-react-native/src}/interface/css/plugin.css.d.ts (100%) create mode 100644 packages/figma-to-react-native/src/interface/hooks/useBuild.ts rename {src => packages/figma-to-react-native/src}/interface/hooks/useDarkMode.ts (99%) create mode 100644 packages/figma-to-react-native/src/interface/hooks/useEditor.ts create mode 100644 packages/figma-to-react-native/src/interface/hooks/useNavigation.ts create mode 100644 packages/figma-to-react-native/src/interface/hooks/useProjectBuild.ts rename {src => packages/figma-to-react-native/src}/interface/hooks/useProjectConfig.ts (100%) create mode 100644 packages/figma-to-react-native/src/interface/hooks/useProjectIcons.ts create mode 100644 packages/figma-to-react-native/src/interface/hooks/useProjectTheme.ts create mode 100644 packages/figma-to-react-native/src/interface/hooks/useSelectedVariant.ts create mode 100644 packages/figma-to-react-native/src/interface/hooks/useStyleGenServer.ts rename src/interface/hooks/useConfig.ts => packages/figma-to-react-native/src/interface/hooks/useUserSettings.ts (80%) create mode 100644 packages/figma-to-react-native/src/interface/store.ts rename {src => packages/figma-to-react-native/src}/interface/telemetry.tsx (100%) create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/index.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/lib/barrier.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/lib/compiler.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/lib/path.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/lib/resolver.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/plugins/css.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/plugins/png.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/plugins/react.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/bundler/plugins/svg.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/index.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/lib/patch.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/lib/yjs.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/schemas/settings.json create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/templates/env.ts.tpl create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/templates/index.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/templates/react-native-exo.ts.tpl create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/templates/react-native.ts.tpl create mode 100644 packages/figma-to-react-native/src/interface/utils/editor/templates/styles.ts.tpl rename {src/interface/utils => packages/figma-to-react-native/src/interface/utils/exporter}/download.ts (58%) rename {src/interface/utils => packages/figma-to-react-native/src/interface/utils/exporter}/upload.ts (97%) create mode 100644 packages/figma-to-react-native/src/interface/utils/exporter/zip.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/importer/icons.ts rename {src/interface/utils/preview/template => packages/figma-to-react-native/src/interface/utils/previewer}/importMap.json (96%) create mode 100644 packages/figma-to-react-native/src/interface/utils/previewer/index.ts create mode 100644 packages/figma-to-react-native/src/interface/utils/previewer/templates/app.tsx.tpl rename src/interface/utils/preview/template/iframe.tpl.html => packages/figma-to-react-native/src/interface/utils/previewer/templates/iframe.html.tpl (52%) rename src/interface/utils/preview/template/_loader.tpl.tsx => packages/figma-to-react-native/src/interface/utils/previewer/templates/loader.tsx.tpl (53%) create mode 100644 packages/figma-to-react-native/src/interface/views/ComponentCode.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ComponentPreview.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ComponentStory.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ProjectAssets.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ProjectComponents.tsx rename src/interface/pages/Export.tsx => packages/figma-to-react-native/src/interface/views/ProjectExport.tsx (80%) create mode 100644 packages/figma-to-react-native/src/interface/views/ProjectIcons.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ProjectSettings.tsx create mode 100644 packages/figma-to-react-native/src/interface/views/ProjectTheme.tsx create mode 100644 packages/figma-to-react-native/src/main.ts rename src/plugin/fig/parse.ts => packages/figma-to-react-native/src/plugin/fig/index.ts (66%) create mode 100644 packages/figma-to-react-native/src/plugin/fig/lib/assets.ts create mode 100644 packages/figma-to-react-native/src/plugin/fig/lib/colors.ts create mode 100644 packages/figma-to-react-native/src/plugin/fig/lib/index.ts create mode 100644 packages/figma-to-react-native/src/plugin/fig/lib/node.ts create mode 100644 packages/figma-to-react-native/src/plugin/fig/lib/props.ts rename src/plugin/fig/lib/convertStyles.ts => packages/figma-to-react-native/src/plugin/fig/lib/styles.ts (52%) rename {src/plugin/fig => packages/figma-to-react-native/src/plugin/fig/lib}/traverse.ts (84%) rename {src/plugin/fig => packages/figma-to-react-native/src/plugin/fig/lib}/validate.ts (100%) rename {src => packages/figma-to-react-native/src}/plugin/gen/common/generateIndex.ts (100%) create mode 100644 packages/figma-to-react-native/src/plugin/gen/index.ts rename {src => packages/figma-to-react-native/src}/plugin/gen/primitives/exo/Slider.ts (76%) rename {src => packages/figma-to-react-native/src}/plugin/gen/primitives/index.ts (58%) create mode 100644 packages/figma-to-react-native/src/plugin/gen/react-native/generateBundle.ts create mode 100644 packages/figma-to-react-native/src/plugin/gen/react-native/generateCode.ts rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/generateStory.ts (100%) rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/generateTheme.ts (52%) rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/index.ts (100%) rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/lib/writeChildren.ts (58%) rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/lib/writeClasses.ts (87%) create mode 100644 packages/figma-to-react-native/src/plugin/gen/react-native/lib/writeColors.ts rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/lib/writeFunction.ts (67%) create mode 100644 packages/figma-to-react-native/src/plugin/gen/react-native/lib/writeImports.ts rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/lib/writeProps.ts (85%) rename {src => packages/figma-to-react-native/src}/plugin/gen/react-native/lib/writeState.ts (79%) create mode 100644 packages/figma-to-react-native/src/plugin/gen/react-native/lib/writeStyleSheet.ts create mode 100644 packages/figma-to-react-native/src/plugin/index.ts create mode 100644 packages/figma-to-react-native/src/plugin/lib/app.ts rename {src/plugin => packages/figma-to-react-native/src/plugin/lib}/codegen.ts (91%) rename {src/plugin => packages/figma-to-react-native/src/plugin/lib}/config.ts (92%) create mode 100644 packages/figma-to-react-native/src/plugin/lib/drop.ts create mode 100644 packages/figma-to-react-native/src/plugin/lib/icons.ts rename {src/plugin => packages/figma-to-react-native/src/plugin/lib}/project.ts (77%) create mode 100644 packages/figma-to-react-native/src/plugin/lib/vscode.ts create mode 100644 packages/figma-to-react-native/src/types/app.ts create mode 100644 packages/figma-to-react-native/src/types/component.ts create mode 100644 packages/figma-to-react-native/src/types/events.ts rename {src => packages/figma-to-react-native/src}/types/parse.ts (61%) rename {src => packages/figma-to-react-native/src}/types/project.ts (79%) create mode 100644 packages/figma-to-react-native/src/types/settings.ts rename {src => packages/figma-to-react-native/src}/ui.tsx (53%) rename tsconfig.json => packages/figma-to-react-native/tsconfig.json (66%) create mode 100644 packages/ui-kit-figma/README.md create mode 100644 pnpm-workspace.yaml delete mode 100644 src/common/color.ts delete mode 100644 src/common/random.ts delete mode 100644 src/interface/App.tsx delete mode 100644 src/interface/base/Tabs.tsx delete mode 100644 src/interface/base/Watermark.tsx delete mode 100644 src/interface/css/default.css.d.ts delete mode 100644 src/interface/hooks/useEditor.ts delete mode 100644 src/interface/hooks/usePreviewComponent.ts delete mode 100644 src/interface/hooks/usePreviewTheme.ts delete mode 100644 src/interface/hooks/useProjectBuild.ts delete mode 100644 src/interface/pages/Code.tsx delete mode 100644 src/interface/pages/Preview.tsx delete mode 100644 src/interface/pages/Settings.tsx delete mode 100644 src/interface/pages/Story.tsx delete mode 100644 src/interface/pages/Theme.tsx delete mode 100644 src/interface/utils/build.ts delete mode 100644 src/interface/utils/editor.ts delete mode 100644 src/interface/utils/preview/index.ts delete mode 100644 src/interface/utils/preview/template/_entry.tpl.tsx delete mode 100644 src/interface/utils/sync.ts delete mode 100644 src/interface/utils/zip.ts delete mode 100644 src/main.ts delete mode 100644 src/plugin/app.ts delete mode 100644 src/plugin/fig/lib/convertAssets.ts delete mode 100644 src/plugin/fig/lib/getColor.ts delete mode 100644 src/plugin/fig/lib/getInstanceInfo.ts delete mode 100644 src/plugin/fig/lib/getPropName.ts delete mode 100644 src/plugin/fig/lib/getTopFill.ts delete mode 100644 src/plugin/fig/lib/index.ts delete mode 100644 src/plugin/fig/lib/isNodeVisible.ts delete mode 100644 src/plugin/fig/lib/propsToString.ts delete mode 100644 src/plugin/fig/lib/reactions.ts delete mode 100644 src/plugin/fig/lib/sortProps.ts delete mode 100644 src/plugin/gen/index.ts delete mode 100644 src/plugin/gen/primitives/utils/getFillToken.ts delete mode 100644 src/plugin/gen/react-native/generateBundle.ts delete mode 100644 src/plugin/gen/react-native/generateCode.ts delete mode 100644 src/plugin/gen/react-native/generatePreview.ts delete mode 100644 src/plugin/gen/react-native/lib/writeImports.ts delete mode 100644 src/plugin/gen/react-native/lib/writeStyleSheet.ts delete mode 100644 src/plugin/preview.ts delete mode 100644 src/plugin/styles/css-to-rn/generateStyles.ts delete mode 100644 src/plugin/styles/css-to-rn/utils/convertToReactNative.ts delete mode 100644 src/plugin/styles/css-to-rn/utils/processStyles.ts delete mode 100644 src/plugin/styles/css-to-rn/utils/shorthandStyles.ts delete mode 100644 src/plugin/styles/css-to-rn/vendor/index.d.ts delete mode 100644 src/plugin/styles/css-to-rn/vendor/index.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/TokenStream.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/index.d.ts delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/index.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/parse.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/stringify.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/unit.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/parse/walk.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/lib/tokenTypes.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/aspectRatio.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/border.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/boxShadow.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/flex.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/flexFlow.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/font.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/fontFamily.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/fontVariant.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/index.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/placeContent.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/textDecoration.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/textDecorationLine.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/textShadow.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/transform.js delete mode 100644 src/plugin/styles/css-to-rn/vendor/transforms/util.js delete mode 100644 src/plugin/styles/experimental/generateStyles.ts delete mode 100644 src/plugin/styles/experimental/lib/background.ts delete mode 100644 src/plugin/styles/experimental/lib/border.ts delete mode 100644 src/plugin/styles/experimental/lib/dimension.ts delete mode 100644 src/plugin/styles/experimental/lib/index.ts delete mode 100644 src/plugin/styles/experimental/lib/layout.ts delete mode 100644 src/plugin/styles/experimental/lib/padding.ts delete mode 100644 src/plugin/styles/experimental/lib/position.ts delete mode 100644 src/plugin/styles/experimental/lib/typography.ts delete mode 100644 src/plugin/styles/experimental/lib/utils/getFillStyle.ts delete mode 100644 src/plugin/styles/experimental/lib/utils/getFontWeight.ts delete mode 100644 src/plugin/styles/experimental/lib/utils/getLetterSpacing.ts delete mode 100644 src/plugin/styles/experimental/lib/utils/getLineHeight.ts delete mode 100644 src/plugin/styles/experimental/lib/utils/getSize.ts delete mode 100644 src/plugin/styles/experimental/types/styles.ts delete mode 100644 src/plugin/styles/index.ts delete mode 100644 src/plugin/styles/service/generateStyles.ts delete mode 100644 src/types/app.ts delete mode 100644 src/types/events.ts delete mode 100644 src/types/preview.ts delete mode 100644 src/types/settings.ts diff --git a/.gitignore b/.gitignore index 04134197..85a33290 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,10 @@ # Project manifest.json -build/ -.ref/ -.old/ -settings-schema.json TODO.md +build/ # OSX .DS_Store # Node node_modules/ -npm-debug.log -yarn-error.log diff --git a/.vscode/settings.json b/.vscode/settings.json index 3301228e..1a46f111 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,7 @@ "json.schemas": [ { "fileMatch": [ - "package.json" + "packages/figma-to-react-native/package.json" ], "url": "https://yuanqing.github.io/create-figma-plugin/figma-plugin.json" } diff --git a/README.md b/README.md index 65a38404..0cf71905 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,92 @@
- +
-Nu+BpXN_J31!x*3+G!}5_@i#-?^1;vba18v`WH{lcfBJ z0PvOr3AQ3>Fq|a12|yW62fxU!9w8cc|9!-P(SqP#6f0TTFtM zRUSAA95C+l-R*}ACoJZsvuwuN!Wud5ZmbtBeo)Od(dzg-+sH_&BNG1dHbb5(2=*ns z>Olkcm0#VsTtXFg?Rc~vY=dcaj%W_JKF1JUB{XxtALv#3y-6M{Mq+ji2XBTZC=MAJ z?#2&-J~X+~BB3BKEba6t4N^TWM24{yX*GlT#)exmd|rXm*X p+r9V4%K+>9^gm7>nH2H an597VjTnh<3AP;D95sU zK;^Mka8?F*y2uOu>6x-PYH@d(k?rE3&e*WM+vu!QK3%PB0-vb8r-fiqNmubJ)d)ES zz^QJa@IYkS_jWhX?(6N2Z_52aTWJQOL8R#AeG l(|lqxcXcnMKG?=kfFomo<>UUWFiLM_SnCAIBA) OTys%o5L2>no5G=fGAaeH_tONB zLOGuM<2br>SG-UdxK04T6^F_$NI#&4u${`aV)2vP<1K^aGv51g?sxP^5teqN8gVUQ zhpTevl_f=4mFly0J?lkDSCgHJ${qjQ$16~j@GtJJ6!|by@!gzNKBy5#I$uSeu0Y56 zhco|T&k9>`qlkU@2R*qX5BSCbV~IQ?+;_l{Y&G}Vi74Y} Jbc+os zb2#4n8}#01BGw+3Sp^o0Rt3GR#$%SkBBW@CN ^gr^j=w49RxlS0qxYOTl+KRo3>7>13x`N_JE`br1T_2;76{<>vE#oz` z6b*PovQ!FDLDMoA!xOZ;FJb0YCi)9}w4mMDBNnmAM29d_`YEGoqBl9+bW*80ovbVa zkx{m@<0RbUegA;d4BMixOKfVEp(DCX+*!IEhYN!GRQ|VJ3?fDkFHo=E9Z@hiFsYx* zPsRWs^@Hl=C5`QvZjf4s{S`?y#x}}ImWS1X4G*M6VR_ dFvpQN!Qa+u^e88JOMZdjr{x&WN#t|E_?2!ad) z{=V?9D+}ob%HrTZbU+GUnehEWAy()xZiwva$=|}u7l=pISJ@;N9Y;qNp`wuW&?hLU zCm4UeL-~WZQhPtMqc1z4{_sbqFSMz?9>AH23>ZM=80P<7Y)V+5bZb|}mKGR(z`6Nb zVTUFc k8mbH}5)`qc`@Iut!z{{A<*RL`kT=XzbKCl|@;hn=0s7u~@6|_m z{5lCqNSyAP00K6!VG~%*^(X>zl_vl{8vAZhY&4Y>ux9qlSe69UPo*%*0g+}3K;+fk zQk1EH7srpTDO>0Jj9->)AYAlTbLqb$DLat(?9@4<-w0VZO{p9o_9;AH``iRT ;&<(LTCa1&qj&xeNu zHMCtowoE$WV^7~2gkZni^QhjTW)1UlnOgt?0&k*J?$ a;C5Qy)h8f)i(ApSfmSQb&Dv&3k2^JCF z8+;CS*14U!R>0x7v4EMk@1$G`eZj#S@^*Cwb5)I&L$Uk;AtQGek$Hde(TDci<~wE{ ziy3FV;2K(iJrN~BRys+^CXm4Bw8RIv1SB^4T!yORfd=L_FXXLG%;?X;`M+6imP9Qs zdgkLc^%+WToJR;bk~^9p2o~!OHgQ*pdcoHk5#M~x+yK~HGrVXyEM|C@uZdWx<;juq zHo!Z%bLJvgt&KuK)!^xSEovHC$tR`;2(hG>YhWc~5PkLjLqqK9BKrC#^%GAa0Hg6K zqX77l=X^$^8rF4!@8Nt+C9d~@H_X`z{Sfk7O85&=i`#^+LFnww_?L!JfTY${OhJ}% zxhS9@ua=4R+i4EO$5Z8)PV!ELC14ufXzX#^OK0)gw(Wh0ke}A+5&Qj?Kv0X3rGcQ_ zj@^Oj%?(?3YN8W3K*9b>1WNzMZ)7*%)Y+6SjGXe}6EegcsYYFeKb+Ntf*Zw~^mx@o zT6O152k^6i8nH-MP^%4FSd!;k73-HVi!G2ed+J;Z5y66v-W &SYzc71q#%&OGoP2zxO_X^ycsryOL$+?F6V6$!(TkU!uNO;Ym~UP(yvZ54HhKd zcMg*rLnXX}M?yPTI(iA<7|g&xat-yAym;pPu%t7xayXdy8!sc&YwBI48u-)GZ4JVJ z!t-1gxb)G83AEcI7v5f%<$XswEvk$>Si+H+{?c(n0YSb(BW3Te$Mo5%^)ttPmw_6= zi$hm=Bmj$TXOxKky>+>6V^O{`T%tV# F#%{AeG# zcwWfg`kLxLpeg?cv~)-;Q-_U^v07*G46K5db02=yxNw?R7y9 TV;4LK{O3})YTT;t~n^S>=t^xG)HJ))eYMOeZP_MBYCVJL5n$L2GawV z<}+nyZrmLH?YWV%w`*jTY889!{*C$?H|fE%8-5Ij!L`6KPCwIwypsD1QdeKtQv3bo zQF7m*g#y2Z*F}4i+2M1K{bgrcJWvK406zENzQQ*=e|&f8)Zw}YfS!`3JH3B%6hy*@ zLpSVyB$be$k3#g-UQ|jfwN-X~f0u3CA(kXiR1_ixAqiAiFyIc1huE2M@p^oQF&GhN zkt@6o_E&!}+oBDZqO~tddw^Lqu;MBqd~xkxreMM+b9>p;84rSYh^_ushV|yR3Iv^1 zFHWS7S@i}k#?Bm|+HIbC4kJ3N9Ci zwdQA}aUiW#KjD+RCaCkG<10YNHi&&+^~5yv88rCCrNuMMtEUSZYKP7X?~ff8g!m@* z;^B-zoQRR*nK*IyKGlxL-6aHgJ+$9Y8(xX@?L>OjWe~CMaAn#460MYZbwchel_sp` zItiRexa@OrVxDuqz8og@=}sIChr(w98tgZK_(v;0ydb2rblTcW2K5)0$_fZ4e )*E%V~N!`K`l2nnjggwdhz35NE&zgk4MUcEok0Z8e(+*lrJR@Uz^gq}u% z6AKkQK{6>wY!;6B68`edy6_tUm$Wv{P18RQEhjmu{p@`SL|#4D;BpqJ^0r1|c6Y;s zP4)hWkNIG;e8~^4Vu8#}#i^W}U zuMD6wFiv9_#m(aI{+EShNHx}a&v4Gx?77#|)quq-Z3s)(LyyPW?u(DL(2>Fy5{n9B zxyWx9^OE;BP}%l6T 74j40>&%s6Zcn_1sNny#kfI_D$YCXB|Y^wxFrotJew1g1D*lyl>%rlxZ2Bq z<5A5a-=LqyTNnk7@1-|zZaQQ5R4@99f&}0Sx)Ij`=Hd?^m;77qw#vszu$ZVh9PAf@ zHz+io9hqK2==H}B(MyMh1a8EO3C$}IwiJxF2&Wc6o*dtO-b_|m6lo5iV=(f1^=%_o zk~VnznqJs0=QM|7^#(t4kuqY5@{7@3W)caV1=cLF+ZFq?dGp=)^}#>72)jrmu_^87 zAbzx^Fr8i>H4h@4v%xcd>DB7s>k@GFrzu5S#h+rt(c!=|hp+Q{<;GQd$gGAd-(M9% z)*Xh{T~(H&LQnIT$fvO0Vl@@GguUZG_J*I31Aj`tlo_BsGxyzK^bHB68F~3#bW`Hy zn5=e4^Z}{}i3dmjDtL!MfWr_w%ZtaWmW-3Ci_&CC7;@1^Sz%SxKlOq9M<`8?^|ieM zArVtKaacIbv@AnCSE>&l&I-`^$o8T!gGNKOEG#@cIOl%Xw9v<)8tpQpDKphE>&+2R zZBu=?o$%tbZq1U3^P|$uiv_tIhY{-&4r&Xf9Y7Ekc=XiCUtRv7XxY=qE*ld~V?$+P zek*5$k*~8@BsX;MirKf}MKcQ<-YcO=j*ga+n`0JX5Eqk0C#SaqEnny{R?+HRv!kw) zuPuy7$6_v8FH|-- +?xuAuK6 zlflm*a>*3=n&=&5^t{aH^bq<%eCVY?Y*IUvWevsy6XORD%A&G|#y02uQRv3-JTh;M z_UCplA1g~L*x0bEBD;v)c9(yO)&qk)IUX;~A<>1SF6o37@? MQAY6!^R9wc!*NruMHUL4VC^ z_5@CJ?!_5ILsKy+{m}Y9C5EKqn5LET9FnCu(8EKQ&vpS6HzNO4rwAL(oTMj|uqgN! zEB&|9#R~2vChq-jHHsuxY&^^Vt?2P@#2zOm+xnlO|AWB)0SJ_2Q_|AnV^nx0)N<#X z5cjQ-5&i!Dz8oPY8yRl`SiBMyji`^G+EY?gRO~uB=PZJIx2-(InBhB0dU~R^71z5< zG2}tJg`S=*Ge+E2d?F&EK2EamvNCQZ6%~S k2r$-hhstnkhEl*NcaRw2<*>6=@ck0B*MMV=7brKU&=ta%UO5FR=;%##OH z4%&&xN1 Hut+&9R=6|PDC!^JRBF8}|2|DhpV*Iq`jHa<Ws1Sxce( zSeQ_2^S0k)`GN+U`vE!Teb2t7xaFWQ%S4fDY!Up|lZ4bmRzwaMQO&PLkxaZ;M;%m> z1ehrU2&Wn3)^h$WjSN2sGt=)7QH-?Y@Mf8vfA})vN;RSQutuIzVAdy~Ab7j?_}?oc zJ*EF$i-V~!N&Gt#gg;zA@t+pZF^xXhj>lk!5ijYC4)#k1VwiwU7f6YDCbZ)z5oZ3b z{1HHOXFc*Cj1(H`U_#8`mZwDZ*r}r!3{1sM2^Hi%e{S~uhkwY3ouZPGgB1hZw@MlW z`*k(Dauk5}_antj (D__4wl z{Qg59Da^IM{7%Kdz(7(Xg7)=N-H`xww#Aro*-j!R=HigFpP8GBtdA$|3#LU1<6w%? zt#p!L6B1c;?>YPJQ9)%Vrg)vxdDX`1R>c*TbW9W~T{%%;tf+{C+57ShpSCrR7KKI5 z)ZrSE-n%&oSzYl*?0aPb3>%KYpvQQ5s*rLV%3$swU+e}-_1|`zo}2lS z wkpkWb+wJ8VL5LdPX0k2j*Pi) zWW<5*@TY>ph f$JL1VCx)C9t=Ea^Adog%z<5q`{VY?t%6(^5|3?^%}Z zCr~-&2Qh7pluXJt9~)K20-u 0zGjHD@qID(E^1V-aMS=& zdW=rH=fdc_mDRya`5YO#qkEq~Uq@$(=lRx!-E k5Act3bn4qUe#}z z$^s4XR6bqhq4X+y#LG>?pI|e2WbjAO_my=&smjO1hp*IDOCS~4_OVf^AC )22_`-DE35?rrX67EzG*3FJFTAdTu(0vkGZsCHes?pb@ zqUjx-mfhGkX8;(4DK|KeAYd2GCu1+}vArBV8E`N@zuMRGl(SNdZ6jsv7x73Q#4dpW z*533OUK!U5Wv3Vrxbz28yd_eFoEh6}w1(*QY_>(wOXEID6LB~v7VR6$jkr?(QRsIx zt0U^J!4UZ^IdpXyh-;rRPZ65zHRV5D0po|gwM6yhWk!@_({%~jyk?vHFl_Jokj>Ij z>)o5_@jJKt7vdMn5-dDTX7K}g^kplaggaD%e+bwR`>_;KPHb!h=Me|0RS2RnV3D6) zrc)cFy|>9Fb%>p>lp;gpXLnqUYkQ+OabW?(0d}3QxIZ9K#`l`ke($Z9XlR`dqSDFE z=3wG=s$P@8cV%Ve?mcI|_e&qmJ3+ILb!R2DKWr`d$k_?G=7|z(W-yeB@M9cDcFU{< z%rh4`BX+WKzaZD2lA9Y}4u(9T;?(Hc9?71dH$=)^WVR}7Mea`LxqUnjt$RVnR0s BIqE}eEQQr)_++%CMkH!I!Exb3UAywe_l1#y>KzKSq0Ygw^!dW#N_CL$M z+g{}vR3M&6S?@hVUmkY;Sm(P&_i~G;p!57os>hOa(=j-PX>DXXDcxd$V~-cQ$z2n_ z*jzqSx)>FOR&S*2siJ=~5dwSGohhWeH z%8|6(;#12)0k6K34t_clQSo{ =9;NcL-}Rs*W_Ihed^gY|oAp3ON*9o1(~ z!4J!J8k1+wS`^lqV2bKIWfSMmo7|V+OF4%%6(cHMN01TnMOAuQC+>-5_OcL|-^=PU z!f)~Zs-@n(nWAEfYK+W7h`Y;?nTiB*pAMPyv}Y=!tnYT^o2`de_2Ean^p-Y#aotD= zQd$^p;kQ@X{QfPI41=`&N<;!BeMZPY*!e2-Ib5B^QzC&6B|zGNY>ukq*yW~C0b1Ud zcSe-g_UL+@mCh*xp9XmC!kot9o*ask$9BGE2`wJJ IxlxvQMK?Q7&+IKC zJ5=y 2vw#J_1u$+Ex6h9dbFMzb7owu%XtWJGt zpMF}U79Tp}nD=H q |-o%Ms-bT|16jaq3 zI{RcJ@Pzuz?Jjky_i(7;Mz(jebG5y6W#uoFoM+__ToJKHsG2K^rTBn@T?uN6WWmRu zj|{X8v_sfgq?xAeqoN$bc*r*{W+GHnSRIGmreDCm?7n4JCX7>5Oy;T+KY}v6zdNR! z&V8ZuF+VRVUy_ys96;FLlN^=#lGw_ G^l9IwldLbN9$JOmVLEWshIkU5W$@FFhU+WUM zzcR O(ri4IvB6{hn z&=$^@aWK2Fzf?Dw w?k!Nx`-9n%h=8t_@Tss ze(DkI3pHZwDB&5S(XEzl?mYY5-s6v&?SsQay;2#hK^vfL08PpTh&a)sVEu#^f%*|O zfB9mN4A6_IQ#)O#!(g>^G$MHq;bnvj5q3YUR=PJH&qz&04VlHCo_gFKSlkQIJLX>x z+mA0iyI@I7oycG{-M$OqV<}YKcy6_}8?;52)O5+GyL~K(C}2KadY&xNemGA1u=ytF zz0T+9o{#&3ByP@ob(BLVx}>UyQnW@o;7~p`%Ij=c2AWU!43Z+VPkCLaG;sG}*nNo9 zRcURTELjAN-$E8A=cN#li8Pzp66arcE`T+S($L%NWZEok8Y_nHh?UMM+{_QfmsP}O zCV)*Hjs?`f5 BbQr3ja234Z$g*wR4(P7 zk!A9_|GfVe@G-6v+uIh8JFPih|NE3mXq$KAXVc54A2lIQYBJFjJT))SE4%G!Z8v(j zil4tNk1bON5=l_u*6s*|(NbXI+CmDA7eCZX>GtCt;Lwimhi4KzDut!+L6Y7*=5Qs! zX};+-by}Pjs8M{51n`fUS@0pf7^`II51y5DY4jVS{d2`F#LBMkM6N3Hu2JE#&0_pO zmIt32Sp}VqI28`~TFnzioh|+0;kCrB=XL1%q56Z8S1br=f u{bH56j zi=5}0 r;m1o0admWlP=<-sVHF z-0QeNmlSZhn jRYq>KFu_dyAqQy= zcXzDhdFx?a8NZ|>WA*NI&X=7Z@{pYdf`kn>`GYRa67fMDg6&oHv+qT%v*F7r#OLqS z6|^WESn|a15NxwmD?rA&i1Y4T;l6J!A2=LRc;%C3Pzh^pR`ifs%T}Jw(uV`8-Rv1! zX-7pTf6d()l`Th;yVNrYw^TTu+EdwA7>8)yApfS!YQnnPDJvF1xDDQwK?LsZ?%#y% zNh3&^)Z7!i2%p?y_Hu19?`V7>jb*mNC^T0Jm<3JGjmQ7nuv{+9DIc;f9RHv~iNikH zMP_b3ofooDWJAI3^Jy^Y6I+S0TGy@GR8gs^QgF}R#-_Ab){&Q$Lnj_tv9a?~>o3al zj?-AT^OKLOd)Jz~VvDJ(ahiid^!*b&5}fnk#%gADWe0Ry 9m>QNB;;(ilgZ& z@R)!zl)uQJk+3xS&9XXq%{Y{O3O?_Z|LNXS;I|T?R}6pxIAi+ERH9$U&UlCl29n-a zdRhP1a2?$FFd4^B1YjZ%;`G^?(b_H{16?15RU_QTeiw1=c5uMv_{0CwZUd(D(f*e< z%(Sm%dsUF)g-(3ZW1hQr%MBS%HE!vV2>)l&pUeN==-IYFsvkeHrE#c0TnX|rM~dhz zYYQ6U^$o1yC@nKidyFa*YTY02D03%9c<#vbz`W!Cs)_8VD(yBq@h6X^;?ETpt2UoK zL1f}TC2y5$mV`fu0fH4KSAXt`!R0;koRbB21&Y2B>x8p$hpQ+JHPElNms`yJh@@D~ z4iMr)aI=9Eq>r4C?5}x9M~_ge-(=f-F|DwiPe1gWzLbC?NVW&ObrQm~%v^6|RpOt7 zG&AsvDFi6`;(h1|(siGWLo*{ Cmj`->}BX9t1MS``BZi5nivf`{E2OusQxC45V)W3 zlxb>jB*VDZF;cW~XAtnW{m1?lKf*{h^c7;`Pj9{!z3878yb~$y^c$PP({0JZ2MGmz zAB@dnx7x^x+d1n`hm0kS=~y};fd*%u`!;sZBu{R+OnQU7tgP>uN5FVG=pVx3ZmSRU zD~-K1x6#dce %I(B$G()*7xk5 zziGH-TNN(_sc~d4-qj7r>Q}|GHr ONNEeLVMcQ)5*+A2o_jzZ&{X{*U!qR69B4 zSe+avdHZov@3!@qFlWaY4>*l!KI%7LY#dhLNk_k+TAbC$!}m{mCzjC5WYW*ky#=E= zULtCjmGU?9zT%KWqs>at&_|p&zmqZRYBI+eu(HLF8QP=V<`W=2C-(Tw-@F;_BpZD7 z-$w@OZrj8N$|7yVDawsm+)=-I358Tx=rm8ZjKs~>cU8*4HT5b5u1uIx-`%l9G0zh; zZsIm4 g~O_je9Cu7E+98D}ziwvnFs&3>eO{JY-6jpyb`Ulwpv zSr#1cE=wiv$$ez+i?@TEe84g7puBsFspp1c_q&nIV$Y36P@c%_vyB1fus?8VE2Yid z5)F6BTO_;ZoY-nK*<2&)#)JX5G2_igdJ*Ctn#|c<+az`*pIgpslCW(xSipGebp6Iz z!h;fZ7W1-1MUqiFnLFd@TMLRnWb7Bv-?BS5b@FWk0Ds2QT;di!l)vwYX54;md~W~g z2n _n>%>R$?Bjt*t>W7g+UY1msgqXl5a=#uI@weEYtZ9J*nPS0 zQj`{wM*DLS(SV7=n^~wqAk?wDWbyaJU+K8rxpcE-+9vb0-}lQ#L>WWz;Cl<>@;OH9 zKjo_iZ8rHlSQU-_7p;|nbf0FOsh0F{8|N3kYIpbvI|7dZ0Wznt+E*F&4ZcD`AUoDp zfR;{Ci!>wEo5!*xyEQ?X%EiZD!&Rv}i`UUxZo`>u8
*&j}Y zHi>W*5AE~mSVB4$E_Ob8_o@D3>j|!?yqA<5LDvGmHg94~>+p;^Z}8br+n@J^NJ_^# zqO;z$4LjnY2osZ-feR0tJxR2=c1q>LKqyv(l>HF=V`e{B`AR)i?^t^Rp@e24EYRd~ zZt7!X1_VM#A#{gtZ XJ7T9^#OxaJ^Mybq>hz8R#o8H9Bb zP&|ypWSWsc16EzvOi^MM`0J?lTH0h6!!a-Fbc2o0?s%k|8ATa{zfC-)t$j@{+hvmr zq*4TrIO|SSh8{=$y{`{)Su9h3S1K|xuSuTld6g@xqU4P2bB`pb6!J*qLxWqG2bEqh z`OJ-JJXGBYI0^-=j=-{!4nJ+tkDO?$^?u9suB?oq<*JbBcq=XC=7J>nl#1VwdWKap zEo20+>#sc)hu^Vtl@k|$QBiFZJ+i-J5{EkMv1>Waqj3OeEMEqwU>aWv!MiudT;Kxe z%%r^^d`MQ&Un`S=a&lPW?f9&X2eYJtcemBqxTj$*@a68<#g^1^bAWufX{_t=Meeb7 zRbEon7a$mRY0mzi>caO{MNCHmwj5RbBRlWnyQb?2uQM-$G|>#y&*wuK1rwG!gY%pT z&FRD17=F2#H|8DvQvk2lVPEF&mcVSD78)_YcOF>9^Uelp1DgQpBJY{DCE+(e#OI&% z#2lu@#{s0HZcf!+rKWbLXFUW?5q|`EP@1lnh($EBU3-ns6hY??1?_13&6Jbvmpxp) zdmWX&o Q!f zjgK<1GwF-Kvi=v}DW{Xa+w 9Sk8wGJLz>{rVCXq}(+ zPjzE&Rk&R8M=$=CUU!~qSblFj;Xlei981B;_QP(_XA?vin~;i516_ji4;=Wd?cb%2 zZ6Tzx#=a8DcIR;MF}=R}4rk>RWD-&Ck6SIb(dpJj=YDlESHbX@BiLc LXUeEj>oV>NGS-(edq(t|;t-7~I z eh>j=h{Nuv`jc(89CbX#s0Lu^ec^=ncHqhPR zsOVJq*uhS(g!y)VDl^-c+34K^Bg-Pazd0OS8kd!$ME%N}|4ycM^A?T{@gf6o3IOgl zvK_2<^8XEl&K;Waoq |mXwdZA5?w`xqL9`;ky6Wk%*g*qr|~i!c6;D zCLZ+F=gJ;u%$JD @>4kTX758%$5vtnnrIo^4Nxdr**iwlcL7~-iaaQ-mLpyw z%N(UOKpv%iU-&RQplSgM&X9YfWSk;?W*sGVapbu5djHDVzR^IvI5Bi{PjEw2p5jLj z1)DXcMiA^KE5^s?i?BkameH@lEJ^m`yW0y}N`o`p_}^KhYg;z>R;U{P+q)IL?G`S0 z=l2C$-k%kHU2(c$k>Q!OQ?ovNJMTAM7t&i885w<(0`hC-y^iKkPp>9;Nkk9NRw(#F zo{NL2BUZ1r!;~1B-p~;L<~RW>DfMSJm5sn@+omb~FK$1PtqoFD;)O-D8rQ26Uf$gm z$DdYPEmw;_WO>igA1i{Loc=Q5$s}1-Xg|3~K?YARV>-G0pj_LWi;MBIJ$Dpa3YFVn zq>FQZ-b3wIlaqsfjC@kdPuDG!Oe=T}%GZn2-DV+eehI&s1V`3CsZ0d+W<@iwqNaye z%JMQDxcOaZB^#z25T(=h$)1J3>w&%>H_l%zoMBPOzU|eM9^=(?Om|fDt~C0%RNJ}w zc2{`td~x{%)fRV>BIpX?k!G0PRCai?9<62m3jGmfdS^6E%bXt6xqN(A4|7vArzncJ zQ2BPr;(E$HvZEJlpuF_GW~rh^>cHQ}W8c2I^m7%>#kDgL!tF@bS;;I4{89ZaZbHsW zND)Q*0mJPviJpktu|(K!*;@wIsd0$K>oOo;&M4vSDa%A*;G-k!w6I1ueQNfqxv1^H zHQrS*@lcB{a$ZbdYNyZod)=6VyYqgAtbBt`#H2R5M$v!lPdJ}oc-S}Yb2asz?pw-- z18U03mCsjOPA;+daor7vSe<6Uc738#=cu^~V|1<_BP=@AN;tXsS~1mE&$+JmbM4@t zV(WJ_^?n&s!zg3s1 E?TvHie+@~(e#!bnz1rvXf0eD}cF@9;IL&o9@|X^X$AZ?l>l+&*iuXR^ zjJprLXnYi46Wg5>*3 A0mcdb_A*U1X#x*YS9cy(px&U`8B)V zhz`!H;(*AI!p6;J@uzih!BriG3Wat{uG2@$i9HP4-2pGiE_!WMThULH$XE#b>)lm@ zu1LdFRI+BSFAu$Rp1iQSb5?r9vg~o2OE9cZ~L`Xq1HPyxouAy-V zo2u9(jhLR+UB>jbHeW6}QP98TiVjPdL59Ei*F>;ox=c3RmoElj#*inDhneM7t;ByK z9x2)vEST_i_1c{aOTXR#kt+L-j(=JDdG%HJK-4CCXBc93c @>`<;{PuyQ~C{gpC_`!4h%ib)oG zCfnx;nssj*FDmyXcC^^2%F%YNoxJ1Bq<3}f(_FWeQq|T^!M7{xHlKRgF1YGl;$zaZ z|KPJZzPHesZI=F}51?iFK^@&>O4PqO5!LC(|I5I|ktdXq!9}JVQvvLWqbJ@;r@im? zu9d?zYa!*&j^4GxiL zErCeA2D>`npxgG$?RHM{03u4;&hCPMESpWKS$*XRcKilEz8CEj zX(Gwu*;9s?GF6nuuo5N?NP7L5SBT3zI;66@=@T(c w4iUGr)v88il!DBuV&D`)PDi7*T;m^E<|D$-bR6p%&n*z?q@%1VArG&9g?MuT?@d zgh!| {hNdbb$ zv^a#pfMJ!qsZOGA$1aIz2Y?sP0elk%vDvKir^S?#F}}H@uJ1*)R opp2iSVatK!wm&S? z1{V52Yg#Hh0hO ?9*&mJ&6 zJ?*8|Sg1Lv81XRJWXSMuPi{&|$nCAauAbhSb1^z#dfvsEckg?IkKyMq!loJPvYqTe z3*$v2P_MWULBZ`f?bo&P=gr;>kD!>|i8!j~bVW7L@cmmHHt40Gbg*;sgm~ko?8tg) zx{!Wo=f^SLx{&FNUsNE9IZ*T7M$y(NFB&h!Yvz6x@*SA+96W&gr5-mUz>-D0=_uH9 zF3>%lK=r}LTHk!s=R8~+pJ-vTF9X3H6jHu%MvtnN=5}a`d{E|8)Ma$`Qhv)Xr#93; z0yF-#6vx(DZw1V(0I|St% Nd6X2E}Q#8#B%8 ztBEQrCC#^`-DmlH)b#z(yn^toYTsj;)+w{&6*b({H3Z1pYQj;h*vlWB3;h|5Y27Fj zpW!P94msw0SDC6P40vhd1~?y66YKy1bGfN0ny^D_KM0!TxHG}b5tcrT&%6HCs!?A^7Wh>F3QYF=;CcmukQu_Fvjg71Pdg3V?_>#pZpIh#*-knV};mg7NTk87*y^ZYV z(^zuO{tqyDli{-F14%dBhBh)b ro8Oq{^*esSw zc(^1aIa$+aRt24 mmcuq8^J1|1%ri*r@V_=Hox>LD6z7z=@AK zl|Rn`0=`P#681h66Xh8IxzMRkeq>^U0J#7Srbs(>DZ7M7n|;HuADr2}SboC;P^0f9 zUMqL(b}Y#Oenmd$M!Qa(@W77kBBg=EBzS|}kv?MS_sez*9M|>={lK}kE4Y+4A??VA z>2SJIkU`V0(bCKgLHdCA%`P>W3@_^E%JmD>=zWtBBkGqGB6oqG4V&9L!9BR5-N&k; zmHDP=y-{w@@X;o&BrZIu?AGv!A|e0U9qyu{qSe$h-;GU*sOVaowSAXLT=-iYP*F)O z?GTXVQ{&Q54*xvcq5KGHpJDfIOf)(=x-U_WwYj=_d>G}o%p~Qr>Rcp~*mhXLgOw|E z%SIt%&&JEjq`Z`oRRN+ABI`gC2xl1NFAE^D8L5IMJ}ZwNO1 Pz!gI|6R}@V{u}Xo1 k#R<%~f05UVijMosH@=@qgSR(h>O{A!Cn4 z-P+&E%+02YRpFu@d$AvAfaDA9+BXi=uMN 6r zNF4v{3Dpb!49qcR{jQwD >rfEdwnM0U*@12)?fLp&29%vI;uq`XEc1kd!3PwFlj;&&yc! vKcEs}h%d=tT259O*`hSnmBrgWD5w_Fls7p}_%{SJiRhFE z4&=p&KVo_3sc#O*f&KaoMX@`uK%Oy9luYZl=>g+vO_vM|+^?VE*X}}xD?a9C_;aUX zh jJkr-HW} ziiID}jBc{QgByVk7qqQYVrJ&FBbMsfcg7N8-}jOod=#4oce*KZ*gQhtZqRIavR;Z} zwwnrOR;PAs|0OK1<$Z8E;itT*pGC{lEBcK_Of$|nE%tVQjdGzq+~@$~U-a57LoFgM zPX5c6FPH6W#%-JpVE*rfL)|n+&6m+858W7Lhx646c6Q9b*=QZ-vFy}j_VjQkPulTM zu#)*D{+OzIMp*YJ (9Df!~|Uc!h_Ut8Py#x76VD@OvPM3?St!63eO{#CN$6vsLS z0Y4Qyojx)JsVpDt-%WaCB_sr`tQh|MRs<_-ZeCbXn4X??+x~;ct726D3#JSu0YOj3 z5fApB^hSGMk5Y?m{FRhqd~@Pt##^2$&Fj61y;M}RS|nwE#fAL_uFy7@ q|6CkY z*LdGv4-c>@*mBKIpES$FklYzoVg%S_krrTowtoR_EHA35p-O{FPFz7nlFm>j#Bm-s z{o_3KDfC%F;_22R3c6iy=MV_{EDcO|R{0w17UD0#rWL$1YHMEK%kU%v z#NNd1aVek3adn3P44*74rn)B2>6!Mr98N~dt@IGzN`+8wgTGZF*($%i6^i{GP~Z5N z^M*$8v52=3+J6()+u#2tI_CJ!IWPY2G}EG^&iup;spvXA`h|E%VRHpu&hsZ^zQAMW zz0AAe2=KK{e=$}PIZ-P~<%i$tzPZ#;l7mbdd&91%>#t$HYipZyM0FH0k%G6;K-A`; zEdSN*y$b;@71`X(=gb=nTB<&OXBP)x6>RaqB0rWXOyDqA!L8Ss{ oPd z>YsXO_qLU$(lt-o8^94H0Khh5ym;C6NZa79RO$iHdaN@^-bLa;pqE*vrf2J2@|trn zFmQd|*a)W)aKhL8HaA|nc}^cM77XlfO;TzAA?5XdI;W2FSQpc&U!Qg `J6vxC$HocHL~LmD+(U}T z;Nk#_z<`GGN5#H$HH<_gFA)z&RDCjOxpdh@HTZE@jF5 RHyy-dAqTHYP0%S;NM%-oJm(WnoZb9wsblayO(C zb5@Q+ JtgV| z>1d`7F{?Kae)-WUtx4_W6|v`sOL<4g_76p+o9b7cQT*~mnOaiXd0KTTS^;xztm&f& z;8U?|xp~ld- 5rn;BczugBhdBi zs1tdG``A+Q2JrdH@Kvb`()zmE 9LP3x_;oBlxYW*v1nzzS@-OctY2 zI089nG<1?%;7b?^$zy$P8fyDXeCaVJK36BS#*jit;3+Z5R5uO#V5xZ!`s_b?L`rT% z4F<}Z4;g$h_x!z;R37p705CGCXh~^J>eTt3w!o+#0NILTV9u+GC K2zx$&|`|7%Z>N;x%PHG=l$eh5)YuC(4LQ>%c %s=l;1(ONefA@Y1VD;y#8H7*onz_Y@E&`THiguQ6e3t@;m4N_hpx-ktL}2c(%Cw z*EtKl?&f440Vk9UKaRsS{W87y%ECg=k@V{dh7$f^o%qu6eMCUKOXM<>N@nN3;ByR> zC~=+5xIlMp)UMy^zZ2@o5%CR~D@6YPiM0PNsjv_DP?u$Y0(i>{@)vV2+~51?JhV(G zK09<8_Qk1<(*hB9RuP_42l-OL4i6|CD$@|ge|Zgke&jr9J>+OV>&B9IoMF=$otWk6 zO;1`T4hst_a`~O?H&-zS*yi+drSNOkK03;mP5{O{zn8>#~9H;B0NSsfF8&^P`=I1pq{@P%6M+26RmFZu5= zW9^|x@5S7Bm0k;rri1lmvE-v2JwEijpJMmcDKEGtP-XO6$7U33%==37CjP3%iBm;I z jZ`t&~+3|@hNx})@cYSYWz^O}dpmLSBgC3xh129O!-X(dI zW#`V7Qddm})9$Y;lEQ&EZOr6rN7H?9!w#t~5-rFUmv$xw*k_=%!NGoGkS3GoSP(DO z^%lStR&hL^VFZ5ER}v-XY`}}rOt5KWWypL$GiB$kxD3o?!Clp>>dNJQckEsM>?uTP z?SI^W*ei%ncOL|X2fS(3(IlJ#(uJ=e`s8|bVOkY4M+=FGg!H;k4=_o={0i$~7GO58 z3t{Om%Pl)q58`KK9nK6%G4>lgQb02!GQIYFbX*$N3DZ6l)3ca4G63bAk~SRG-3yV+ zOvCN%?1&1lbwwnI%5bQ~Y=?LcNs~EE;_&F@Q gJnaq+Z^<|`5v@yqu1=3hZlT(X)A0a z{{6{d{O7A(7RtkgYf|8bxHf7tXK~ %eSR%OtJ3`D<|SV9Y><45R6?&XS&2teTjdDyQ1YET{oYGmkK4%U+C+GV#l6L zlbj!?+3n^D;ZVzg Co#%= zJv8Emais+ZXG@!?VjWyx3|hiuHO;?^O#yl8(4`+g_Z+)-$SE_kqVl8c2{kph0_6RF zg|_l&Doz4Elhe^Ie549r6YP&15C5<>3T#5#|GEyq3&xTkv*7%H%#wHxUw;*Y4Xri} zFm|4Nlvkcq=gYRy>jKqMobB1zbLE4Ho^IS(o~{`Y``MWJ_gA6p+{O=yenL2uax$Zf z1Tp#dyPe6n;qu(S9N<(u&)B_vKM&7BUMl|H`i8RhXh9h@go}^IeIB8Fh~^C(8?5*} z9GWcU@kCVF2pPBLT*7xkeE(H`fT>NqfH;$kv{!dssKLP^x?B4daz*K}gaD}mZOaH;LL0D71Vz^25Ka7pj!wE3xz9mqEfBgIY$%rPnB3v0Rzjcu(R-_ z2C5?g00D=10QxGf31J0Tpu^L-!i4xY(H^P!^~5T|gXN}bvS#xARzG>B#j#(oiskjH z(#|}1c4rHn|IqdOWvEK#WdW@dJj}pB{R?%R$rCRUgYpNYfzX7H&2AFiKQ@EP$Td6a zP uqL!Ff4__|ryM~M)>8bZiD zJ+N=|3Y+eR_|b{haNzPk*I7fnl|%IhIEh=)Z((yhK@VgW9Vcm!o@-9|s9W^!jGIn& z*AtO%wK&?Tu @0>ph zPcAa7cALtYr;f5Whp}Zz6x)b%Qo^$3=chDOO+$ld1!wlIXd276O ;sZ zNtlI5O!JV)e?!^2$XbQ } zPjnS|86*Coct !gL{!H}=1^5t=Y*y+*2pnk9TMQ zctr%nF zyIiurx7}VHHQh!R55kT^&bCpvpVzr(cF>G{+5^L>;w6&fpij9kcn1{L8~P?OlK SBdU?iD|PrEJ0Oy2f6D8`CE&z4)S zw-6cBT-#EQ5v9aae`6iMak^enScY#kG_)Z*i`w`|X0ny{R&Bvf>Gssr)HPusqGEns zi0`HK(JF-EFE;yRsnr+$Iz`@*3Z=@b@8T 4s}| zBw@`Z0^wzc@u^jAz7Mo&KZ2p$UY1Bd7<=q?t8Y%6s>Qq&mPWq*f`q_f`Dcn4n8~?l z>tj+n7ki&)XUlamOeYeVHC%zU Py}y+iJW`teg@4NZ>moKv;L>^$>&^9k0<@u&x3gUT zE;HFu trmYb$9=HuH*s&P4;tYrg0pVYMBiptC6j5sTT$?bEL~=@ zGfZOqhT$7^QqXoN> eC;w%=+-K|mse5)fRx+Uklm@I2ce?C-ThTmiMhuMzRRbiDk0 z6zrb8j^`E!H5;lqT`ljX7S^e-J{XF+y}$U(s=o7;R)7T`^yMcmfv V?REzr*%sZ-GO;?dtWF)QD>$wu6@YmLm(3Vu-Gn6P=?dnpO-O^o zeEI-R;8}= r)6Vhm0jQtY;GVky}q~U@&HKU@Ul%VFoTwv%n z14b`WJGm$=w+3GWL+{qeNz;Wr7)7E1V3O4J`uQ!J7&3#ucHY4@(q+Kd(Q<;2DP2B3 zuez5l0lwcGIjyG;NB-A3ACCmz0J{o_PL2^uL(;R6e;1zbT_)GPXjzyEKpg%r;*Nq` zby7b6x39N&YG0>npvi{5_8^`}v*cJy=cMi?)Vjy4k qI2-6&P2-`rd<1*k?{w;!9{B z*TsBZ6DiJ- zqKeR=heceCX?7dnT~vOvw51R+hzQK zp^i-4oeSS36UV@w?jU+t?P6Pc@f7pds)u;KJhr^9<7?nrFGw!e%MRKHX}T=L#jOK7 z1aZ-f^kN*u*E>lO)V#8&mxj%XVuiI|Bta WJ&m??~Ow7XI?^nucei{ zXpaJ)z?14f%nQy(9jwikYs6xXGh% N?o4lL1 z)nb>w9_j=Fc4 q-Tfrd4oV#}x?TckP3$FF_>bE?!RQzEIYHp4xc>VZ@co~-(t?nI9Z_gGxy?loJ zrsu;9TS5w}Kcj03Msl>~yofF%jkpjO3C5>R+MnuayfBU$#iCRwR$qs3#}%2ye7)6H z;*oJA5E-9 _=4#>dg~G?dldByO;I#5;=D+ z@<+<5+?=-rlYmXs`KQ{zE4e!5)#_|%kX?)3Oxpc~Q-568bgX-g25Yi^?JV6U zRTwXF-Z ~cE37qaUExnq0wcbR-|KXt(VQCI>+hp-^fA1B742^B{d`sb8-z}p%fQ ;Lu+=I)*xr#QT}EBvA-8>r15?>M6U!m zrB4o0`UGf#B`&E$0h-fu=ME#@z0*3rzsd%RWuq798X~>NjqbF@1B7Tg&W{jCYZL@_ zByOIlj5nuty^A~kaqES%qH3&bpPoku1FXk<-VMX6(|Q&!vL5#zXaBI4_s)C}Zg$?} zs)1Xm>8i&v5m)w2cJnM)(qQ#tcUu*p)9Is%gOou*^kLa|W%-S74so(^DOT!SKPVsG zroIoji?Y+Ly~Ir(lBvsvdd(_{wYk>`-vo1qB+!nJ5}24tL#Y=$^Kro@wMgo<&w4V5 z^;hSjoB8xLl2Fp|idF1#=}V)!emeQU43YjkbHu5b_P4e624oXsE&$V!zxr>y!0Q?7 z@Wym`aH{A$)2{>K^e|Qn2PBYT=+jI}sis4`-d0Guh?i^N=f_k&yB~K32 Ms$Ecr{=UGxHgejz(n4_T4N^@X{ z)Lj9>mH(>bT=z5f0%)aTmw^<8r~P jfR9$&CqLYnFU_!^DdO>k?vTgBXDClZye7 zVS?l-xLN5$#v*!%m~J)!D4;8WUrlzoe8daVYZs@a)Dt8KX6imCzA`w&IC2}@ZE(fJ z=!>Gymbk#r)UCk ##9#f< zdnAi-(=5s4TnB~kQ PeZRB4b(2wjisiNO-P;cC=Y+A~ib{`w_opHam#}*+b;V3B zu3!fv?)&6>80<3c*pHZ{f%RF8(_xBKrs=?u$XkkfW?JW}<3#I1CO2kp+Y5?9KO zey92kAGB*Q>MrI`_=Ot%`T6eE=NvFrq_>d+vXs8GNUf@B=<@Mz{;ZcoV=@PYl<)NY zM0fHGVx)}Of~rM?aY{{E<}GbYnyWXz{y^>8+*SH8vOW18?2?8zGHi^%n8nYve_tuJ zh;^Fov3Emm;#P`1+pv);S%BpJiL7Rt=3j=U;fRf0YOxDD`_M0k$|y0P|Z>d ^S37fGzG3`_FIGiRbE>Nru z_OVlKX8f>=TP!8?3$jKy*3ih>EdKAaG30-Wv9X !Hq&c{^OtIFkv)=SMz MwYo)k#w)JR znGye~)8!|NU4F;=wB?e@M7Jk(nf@wK01q7fe8Co#bIZBH1Q{ZUKE?G0l6HvAzq<+V z!R3 6ohEl#fs(Gq<1rVjx>rbt!=yox!LW-n9j``VQD z6E~q^@hmk)KdGC^@R%dB#~E`zI31_%Z>ithE4&Bqg9_NcN2}uV2MXEChH9HI*{`_v z#+)baW5;7C+)>cv?ZKa=uluP!64Q#->UectlJc6pTN$`iZ}=LEu_)YM%!Bag9rC64 ze&A`Kc9AnLt3<;TeD?ZMU)JmUtz?h-eYK8SizWLHn&!R;*pr$G?f#g98iSY5`OonT zVu??1L!49dPcKzN&2CVO2ay{UZl90mw31Tg{#d;fh^jWQt!j7}Jsq}M*ZXQqpuWIn z9PxYW451nUMI`9GOAy}?X^CSRzJ6lzJ+asxA*SJ|jK5>={k5~ceW3H-+eYuZE@jt2 z?ypF4TmiqWaw2N-IEQAZCNpqydLuVGA@-i<1yKzyQIH3h8dx ky_zl6jJiO!q^iWtJYiucCyn=mEX-1j2h8%h%>MVIEs_A0 zh}{vGC{B=C#O&$G6%klhtq$RJJ-kxyFM2M(m=@pB&z7_{y{!4lmJ&<-%|g!VcKD^k zZ>A=-d5yQM+|&>ag7b?ds@ieGD;32H2bezs3D!+B@!C`_Y`tp4bKb}Xb -$1~2^ahs3l#&5S#R$le08TyhYU}D4pm}sAlc63}MRlnuupKUKXo~T#4 z0o;K#t{dIf+=A@vqm&Lnl ceoM{9`yi|atSdq1=Tx=V9 zQq^Z*di-xLNWhxBHC}Z3Mf@B4*YyJVSRU4QCg4ZUuf*6@`iUnd@mDn|IT!lCa4_-2 zC~U@zSH1bs0+3=P>K#|uuKl)%7Duk4clahWsgcmM!T#=w!XaBH+yISh^lElq5#Dg6 zD_nDdM$hKI#m35|819)-8 9)b1Gw+p@MA0H2jC)JF@HlYwxWZuumyGA7sf9k+Q z3G_T)8dNy*6>x$yLN^vZS&X=&8Mq_Uz4Z5!UG}%^Y(U^r;@e`TfR^PnXJ4pPVl>J( zd$p-EAshUioHmeM2jW~F<7T~4QcG{8?Nd>+${;+BhjH6 |1lzqo0|VZVl?$^*XINMQ!N*g zNn0_7w=r3)Xh%|TPs{N*o~KqJ-LI7N7YXP&ORZJIZz={NcgFe0`D@5PcuASDA#_jn zu9~Ww>lqyu$g0_Jm&6wbZgsc?u7?U28SO}3nC7!u$(=OmR*1pX8^!X&p#ba=U0d8D zePlV7MimkyZQkJin^9?Z$Jbtz!wMCK#p!125pl9vs3GWoT&$KS17ZM!GsT;1T(gCr zL{;M9?2S}|J?)brYHHfR{a;@jBFW?O3g28+d4J+ ) z_MmQyyH#-#c+PS46`ln@1&>?jFYRi(n}Vgg{VkGQ+j$<@V(SbzS?`!=%K_1}q*h;T z(7dGmn9Wq@C%RxK*{)={T_@%qYuYN9sYcg8_k2J1cqDtGfO*y6ckH=U=+mZ1z)saG zZsx=D*|lG24a#5FjEnw$Ui5J3Vi2f&RYkUTTd}Z@X{}!1Fdvu*{@ooT!-}FO)O%7% zj4%rO2x8YiTGaK0SR;( upQRDGs)(!ugIUMZb!WbBtVP|mGow$czrja-5J8~Msx BwMOA> zxO1!zm`t1sd(FxI+^^_JqUQCxm1<7!pLpMG+=4N2|5ygaEo^)?P#kecqN$Xf1r}Au z;xWy`HtA&_IV2wgJsr*TwRQU)R8@nNkAx8uPx7u_L_UryHfwQRIUPo^-cOn_P{@xM zV9(|$-MR9!7OhvkUOQX2lfittHR1&P_`L0J&kV`p`TD)(yCS?&Zs$C!A3FPbqpTgJ zKUwFwVf 0#_xQ&^S8$=>v`~4zF7})p&U= zpw}4U|7+tJQcwEwLQ#$JY4myZYoxELyg8*`QSTN>H77q=M^Xbv0K7H&Kj!haK5vZq zwN`p^0Ry4A6G>-B$LJ*ylEy#h_SdaRIbG*PQJ>0t*GSpT&%CQLELhOQ?~f2A^Gat2 z`eY{T_S=tlR$7$-K`lK9TIsk+QT9o(%!_O@@u`?U4v)Pv#kZ$S1{p8{gK6m%BLBG5 zuwt}Ln{g`MU%n@&_C(;#%}p++CBA<}R}2gcdqal6j ;^J(-S3vH>ZY+52n2pvDp&)U${j;*RP-|fp4U^^S;E)D% zg;!RlPi%eI5%{o0v$ft8g7H1GIs3Ldb=<=B!t}v;+M>iWr%eC@u*jqQGfe_iBlo zP-yJ(eH-uIe02`qw}u#HGc(#&RJs!Z`vPBal2-Gjiu9XI!=}2a2 ?oS#JfNwxs|Gt}g|pW2_? zdyV-piCh9-d;20DBkjFEo)wl5)@+J>kKQ{V#GCM(diFLW2&z!`?~5W>Q8NnpKE#6g zL>YeQQ^iC9KQ4R^1{dNvYe<4cH#u`=* p>?_nTh`DyA>D{r1J16~)V8 z4Q$?!03G+_4Kc!pbN`PqurXHFv)w5lvBxMBrdQ;yt$QwA{#7+{!Xu~sMu&qKQ#=Rc zT9Fag58ufTjTj@!*HlA F}8Rm%TcYD)N1NmR5s% zh+ajS>v7@lzJdG;8N4$SJA9a|X_awPLm_HCiM|)Pd6Qs1lBYk44s5dT*Y24W5w*WQ zwbm({(+Q^|DEmHGL+;o2GW+r7S@6&B*=fPM#&SG r#8gPMj-5Aa7ohTLP?;O za`d{-BLly6(8;6Z=l+DB`jz`vRqQ%)Zmj3?h7{%+^YcCrVfU^28VO8vDyWxY<8-ga z!yWjv%4cvIiEX_I$M>h69YRl4ccQpMen09WdF5bmaNu$_`nROGl+xL^Vzi|1Q`ps| z^(B1P^Bnf4+YX&;J&291B-GK)IFM>xxR46u&Nga6ONl4{R&6Yd!lcM@*1PE`lnQG( ziP~;z@Iic-{@zEyUfHJAyEH71(>nxFh*_tM5F+z$c$i~@T3l`zCeH9T-bZQiIXg(y z#GMYRyt&NSaJYMs<#bq%QFhtU?^7`~U_{2QURjt9nsgss9X~{7j5P}jZ-SD_G)>O4 zPcAcG21!uHB@fx&yR6;neE5I_)LpHm;ZOW4s#DrM%XzwDq6ETT?Nx=jmF^Q={~37V zLziz!t7v?voXLGqv?)!HY(P|iu@wtkL){M;>3$(5^Qb#JME5EvLaiTFvP5Prktu~- zU%*fRW-fHOKn_?aO)k=5=wwivk-q~b5 ;H*MXl1(??S7Q25WrIqVM7Hr*gpF% zyu-i^|K;O3B) H`O@f>N||Rw?pw#`M+(( z%d-o!zj5vRF Anz!E6{eXwy z1RH!ZZUb@RJEwDY#bQiTkRb*8#L~_1YyR `6n48kzWO=?m2PNFH|CZC z_Q~?Md 9ihM<<1kI^slwTQ}28%qAw>MW2m#5xGF7h^zFx^ z^WE{e+_ma +@YU3P4J-C?d=HjTbxnkV+WbZ^8cW4e@UJi1K9S=CvxnkJ81 z1%Jii_qobfcIAD};boX=BdsPM1ucD75KPBerUsSlrB$K1nzjAm_-t-BpMLCLaxCB( z11ntWGSKEP$;@1uBv>MjM$%dK+xPF&CLg^T)hXU}Z{T^+_Z7{f>DwQcL+~>uDOj5K zDvgIfrub?h)B~I{cVT_Izgb?Pg`~IlSqW6E630IYC+U+3o08djI|t$U9WU;eNcs>q zCcaZeuU^>J-|6SBhw8bOM&mc!E6V6uU3#gbh&B2(V?dWAn~k%1s|UU0!2VtJypb7# zSeWxh!546y2;?1;_0O&Qujoevq9%$8Q?LS`LL;V?yF-?bYlLS_?L>^0s&!+FhLR|h zcWb(qSLZzzChCO*F*H%*C d}XdN+M!Z{Wv5-iu@F*jm)!87tg)Ypl<)B#O`}=PJb^W`q$l ziFvguI(m=da|Av)RaYF$<@owQ<=f8!DFu!+w@$9WbxYcX*95Vy^V)BD2Db*}Wkr>= zvh%ZsT^pNy4?Y_5xW8EaTR)%3-8hlmm=bpsPXn!ew+GsZ{GCHT?^_?h)XK%9)xkvM zq{!l+&M^P gg_RQ%-GW%*~;-Qk9sS~@#yr#9jf0rM4__)FH zmDT;t4Vs9@YL2*n hlR zjz0>}7}+{8C|wuOpx_DwoA*K0)qTCa^(-Nk@b1R3;e5I15z?>A|62M0#M;>-()L)j zq9(RbF=cZn1x1I@V@}kq;zG!H75>WFh!5*L0n>HvYr-!q=|5yW-p)1@T>oOpnSu !efi zV_jX|&yL#i4t5pUb )>Z|@qpI uRq>BWR>XE>5bW; F`EH$$G)Ql!&xbWB=_uLme z^m(V}#D7#2*l9S{vt#s0_PHctWNo?lyHj%S8YT=*|4>=DksppNyU2Q)5!id3q{XP% z>bHa58~x{GrMB%(&^pC*X(CT%ROtG2`h()3u$-gn;}qnA%8C0iykG!Z?qohNs5zRk zi-Rs;^7P59|Ht`pxRT`hl#V3dvORh;dijsjM?%A}zLEfkNV2B<8ewda))gTKTi=$8 zo{R)w4@+p oVsPYfD0pAUP&bNJeCjNofkHXC3Oyi>C`s|H?TaJ)k3w|g?8~0b z!iR4OS?t9avYDbujp#m<1?e$Y-uE&yTs*!RAN;Q~nd)#yP+yx$2!&S7i|gOmB}7ej zZA|~Hw9A2rpU?9eM9Ipfq>AK}L?tS;zC8cwGao*AmAt_jcrxp20>-&_(^_qZO4!lP%J^rUdhyzGN zj|yovwp$GI=jZ}r=k4Q$sKE_qqwnmdR*9ru#P&;P`PhZ~qL@02GL|cCc0G$)pJ}LH z&fwQZ_}KTuh+@LpM(a=hS9Kp-PSI=jx0Ho9e=wPFRWpF>vj-!z3=D?3+f+-k3=8m^ zNeA%gFiZe#`QR=jJ;>l; NUakxIrbx5)KzO&RiW*eTZS@oULYGUgb3BYckE|`H`c1rfi2* z4whOx2AdXhzo+}AiNha=iNj6*KEV^Ghs7xRWn3~E!%~>qC-+`b3Q>-tYves3!Xxi& z$KVBP{L6ZCfGNZ6^xFo>8WI3)O?6)!>$%;CMLFwa_^D Mir8gAZJGi(~cY !Ous=E~3!7T@Voq(D@i-F%W0g z|5`QY$f(VWETN(NBIo(xr3qqbUTL@1`mQYgsodmosJGa;b)WHJ{P_XL-tvTk+dOn| z==xtOy&0D6AA{QtB$n!8wcDGY?hlm(&i*9OD+^R- T4cfR`rx{!(fDjkTjN{{d%2FiTR*LT z?%*ST@^zld2OA8$NjqU{Ik55u-VCwt6uFU>mGZL$;|Fp)l`MYwO#bpo)guADNbXW$ zAkl$8$t?a~(}okF^K}JorBJ)vs!8l^wv61ZcxVC5V~-`ef$bpM@rOAz?=n&iI>a<- zRMfEkXO(!G*96~NT=(nsBjXob*Gs7Q3-MznkD!U~WPe4ewFOdq&hZ^ZHD=4q@XqKA ztMZ!1w?8S8_?=FL%M|Q(Ttr2e>ny&b%YV_%{7AIRyk8VVN)+7i?0of20^{em_#6B= zsc=!~!cS0c5dIwt>zYwiR3AIU$&l$nsVFFaUaAsf4tpo5Nbq-AOoDLQ@4*{>3h!KP z|EZzda!EjLxvCKPyP~TwJt<=(aAe`I!SV8qYNRM8aZ5Z*QLSI2{|Ernc~zExtnBxm z@DPG+WlUjAcRP8fFw|kTuMA+zwQPB**^4psQTMs*As&^ch%w-P7o&Ex;(@_W(da*9 z5uIw-1ghR|D2M6!hs+A1)ou&gQObBmtog#Sybu@-kr+XKl*e_}6KhpR2H-LEM-L@y zxzQ+W*I{@eB&}S+(5|*z`L_f7gY33tfr?~!fUyymT9buj_on%1gYD<*7Q<$rFXGNw zCXuU)&SH=Dlw}Sff^V<0X764y{Mk1sDx0*tE8AOsh {b24)V>09F8RbLq$fJt znL|{^AV7N6#B``iXUETPT `L<^^gx%w3W7KZ7r3{blBErJ{z7o}0RE!c&{(N_yPK^hHQjKk?bhU50Qca(_Hk ziub7yr=*R;s%6s}cr S#saf- zS0(@ZAuj-v)};I!cS|i3bL_s|!=yYuORUo1##W|EEmi60(g0Cgqa)?fAb0JtN-Fy0 z^eHS;Q6rM?^+~t+^iq#svz((lm1JZ(zkwJQZ{HgogZiUBc+7FdO})mEuhGZSn^ty# z{(5Znyak4*Zw7Vh{&22F`~5l>KF*>U2YDxtzd48hMOcnQosQ%WFYUD`9A5YL6Z#7R z>IzMc`(BHILyxxJ6GC-Oe>4YyTJ2ZvPRrAl-rpnt`u@Slu}4I21b@UUZm3m1P8N4P zS+Q{hdGIaHF(d4+n4#rf4X;Y5Ex|l0L ?TySumbx#KVW&ng{7%HXzPROaGmn? zwLMZx{BBvI^_Usx=Uy?EC`IoZO%n#gehLOUr{g$?{5wvtQv#k_(yd}q7qeHhwc4Td z)DLj`J6J=5t5KVC2Hx7}sp?pmwa$FRf+N8it^OF~o)d@__AulWn~ck^bmS82jFok= zMqAVX>1BtOSnLxvRw*rt=nVd7$c60TkH7cJC3s+=j(IMPu7f`a)hN{?yz0MWEEfKU zF2xUjw9l;^VygYhKs3m))S}+Y2?5*uR(VX(r|^lwpJyvWl|q_6_GHFRfAh&&wcJ5I z)Se5RUbk*F(eQ}BmExe;u_t)#=qSjmiDp=^@Q2gIqy6G; ~I=UJzvynCG7z zMU9pu!`=`jro+s8VRK H5y7@lEB^)1s;VH78?+(MNG4G4gUOw<5ANbOxJuFl{ zQ4Rso)6;YNoS9zUn>^po?}n+~8#VXNuhv*7l-Jm^NugPYC!ZXKkr;CgT-;1vJ(bec zy&CG;badUk$!nq;qYi(igZ9e)l@!K4`CdTj<%jos54q7=Z2oKWyKv*%0=MkTyjLi| z+U#c1*9i7x$|4x9oFf6Lfn)*pSc#dE*VpJ@Y5$YB|8kWYNG~AygxiW-8fn&St-{Zv z;dDDsp)RC8!F>+&R-g|g0wR^0FWVrvcggUmg0~b(F7&pKa|HZv`>r5AAK55&m=n5E z!T5AP52gN+>~52L9 q*^4JSxWXA>oq6T8hR**>`K+D4(C7UX=+Rzrc(Gmev`sL NJdpp9Xcr(t1{p zO;tiR9w}Up4M`eLuzUPj>BsFEva6)@gHis;iV+4k rxuQkrCgx$uVD0TR$y)TQmGT_D^qk%wG~J|I%i-Fw$xGLu01gNL+m zj3>Zndt^i-^uK8)0Re&SK5mvLeMtYZ!L7w2f?Vbx=3fz=^cc0s{NYOVO$YyJ_zFsM zWgybF=E~TR#{GS^V$=}%Iegwc{b|-sVa{#xUGG?W#6`;5p}=N!-{rWZ3v#BB`h(WZ z(PBu>!#2|{)Cij$`D|oa#7XV;IPN#+Yk<3!L>}E|yQ86OC`|vbz(4krv8|)7+nKsJ zIyp41&Ay81(sN(`=iujHg<;LMXvO6K Ubnf!*AQ&%n(1CJXc-LCyiP3&gS|_j%AdaEgH{f4o)0czw6Fntk zle5KiB4+JU?m^tBoi_+*75eJ(uy{51_zjK*tj@A;GnP?a0lx?I4;?2x)?{CDkO8%b z+YjHP|8-CJY_;wE%=`>cegDp0g3RTAl}deU?W#yXV-W`za^?N6I^ZXN3C2$URq1TF zOfuQguu}jXQNSzyxqE~5ueA={MLl)#f7qd|gR@QJzrIq{;2N0S<-ckn6j%TtQaiKN zc_E?Gl?&8)y?giWEjRZhACCmdyBn&IP>BLJ4om<+nTWkh7v^vT)x3y))&|@pmXeLG zvcDLb0^c#M8|DqXxxO{q*w~$ k$V)IT0VD1lNMZ>4`8&ROJ@Z z^wHQ5N~yeP>X15B&>;2X0bro7f7vj+m-myNQK+nvK z3E02gpAR1ROM!K60*_C+3B{!&u V2}`ujL40)@B#$I@9wwb8X*m==n(#fp0i6pFiB zaUR?$?(Xhh90Em(yB2qs;#RD )n&~nc4YK-`qwFa3EJo82#EafQui{i8nu84tCC;l2&%3!SYx%DsnUZ* ze>4aD7N{Gt20VKKGP-x!aqAAl|HKj|)}?aa)JgR)yU-U?wLaR-aee%rC4!`OT-9)a z&OcRJT%68#6;9&to2g|j1bEPr{`0Cqk^ULrFamD^C0I#3G+Do}v;SRtKliB?)MhhJ z|F7 fg@on~(_kEMW#nLdPNcZI0#)CxNy63L z6Lt 1bGX2fKI+op2luZ_X!=Hr`|F~Yt#Era7`E6L90tI@N 7iWUa*K64U9s_=1i7?+v#_Qor`J zdH6Gd5{L6{GWNgJDA@`d@fB{`&)6cJ&de{+;&|t>JfzJYV+<4O$V5V%xM&?(ZnCk# zU5d)Ej{H~I|HVEl2Ke24-WgcEgc0E9*B0=XormAa ewj4 zKARu3HIIE&yZsE5hBGJIG37Hj(fl88gICYFA@GeZ-#U+Tow>!u!iGr2F^Pks3S}QB zDq<3`hEJ2YKtjSepX1k;A (Ipbb&Jq?8 zC)C?(Z>qITFH50|d6WJSzvP)N_8A5)Y+a08iGHFq5skSn+XF&7L9f>j`x@unN+O$% z;GFo}&U##5msLn`mnq-N0c0`*DjiE0oG%`c;cY U-6 Hjh#UeLO zUEJOK&h=4MqOQH(ueE$Uvt|CHLNZbsv0hWXeKp#3nyIygwO({*%ljW7>LrsM6 rXLd6&G_l#&y!(zdEM3R^TMznxSNrS!WhyTO@~jmW#yvVrf{*jgaDbBwev6c zgGo*?tw(VRq!W?1xZbW*dLOW?oxHR5oI1#`wXJgwZ{AKHL6G(-C4So{gJnbc>FGN_ zhojupB}s%9?3VU)|5@Q;Pq^1(#VPc5mWldL$ogIFVG9KC(u-V0%O81As#YwO_Y&c; zDsbDWzAlKs6f1nTH{8YEV{+!udmY}4gff=ni{l=l)cC^ep3+r)pL)JV8#6t<_f5xi zanU}?*(n<^{V$$8 zO)(S^n#b=>M#$~hEj^x}GM&bomcMOYrx$+sE4bLCx48`=oWmt&TkLw#EJ&)~3yJxv zZ%w}T!RYS|PD `hq(+ZtW5= (A|3_9x5Gc1Xlz8y?qf4-C~X3)&gP%l={ANn;LC z6UnRYtOe?#Gpq{swNi6G_lP<+DJiAwr+lvL?RFT C0=wB=+Xf4+xYmKdo<(idQ6hF z;{AzDKnrB=pDR9uCFDV<7;vLC)FOk^o^NmE5yRIg<9rsBUV`qs5Q3Y2W?|L!Ct% z-E-y`ZO&L{R8ly}bU}g_lT5twnMeMG41Za5TN3s`H{)L31*0;oa)Ho hzGa7a@$zlU}GZ(wotaK)pd9Tg(xQ;wot-h*vezBK7t6cjao~3t_v2@5( zP{=g)>5%J>9|5pJ+S8%Og)h1qoPi`HXo?CA0vMV;(`IgfuhRReOedO(7E=r|C$Ih7 zknjR)ayj2GDw2lJKgH+gcVjn%LwdoR+UEF })XkIi9o*izCQ=M*b-9!x{D4 z=l hgsS0mPVK_tOQHf2FVnncwYI*~hF__+JCMheg#bB}2uq zv9q;wxK+QG1uq6@yyimtvfS|YUo=7vnC%?7=zZpAj4DJffMUHRjmYV1cpn%!P84oH zux>rq=;VvL=FYVQdyd~KXAGxm5P4*}4{^@X_(ivNjSZ^t>%G|+A$;F`)lo*rA98O% zrGRkwy>mesEcSRLr(oUkCrV2;$dVYSF!n`hu)Mh=`mnR+vU~gCVUI?K_I1@~;&w$D z<+1f0(tnoiBHfzAycqp1gE@!Qn1WJ6&R1!TQyXT@w#f)FK=2Fh_zk@S&AMwgovj5< zDVJVW1~E2;I|)qhDs@VtkBcCNQrlD&QP$80Q-guW2gGHJbV7~r_Y0-^ZJP1K>)N+T z|6E7F{=86y3@F%KH8|#V=MnybjuT2mreKBv2E*XTYx+I-BVB|3Z9=yU(7*mZ`fY3v zmZI>w?(H<-!-zZj5lT(0%Ch6m_Eu84ieOvdxY{<3)eeVNNU)a!(no6;)D?kLB!wJfLLt{3cnTnWje{iCdRkdVPmJ$ zRK1^>bkR->5EkQDGAh6C^a!(vrbEy_ kdJI6xm_%D-ZnNPDXm8Jb4m#>7O3}zM+Rlfae(q6nH{`Z~FuR@zlF3$Lf#{}) z?;C|~>L0%FgZ>47e23>>2f%8W3oel))N0{zaPi~r-^;*srDgNF1mh&E$FFt>^?VEs zZOIB^-}S7E$hko@SombN4LUB2OS4VdjItnwd+y`oP(QBit0kmtvBqcuNXXwwF^h$= zuce`SocI`M*Tth?YRM2*IS XgLl!HLg)ubYw)(s)s;riXRJP_Q1uhpk~loqADf}d{=L1&Hw+xs0D zg^Hkg@quGBn6C`$m)8JwP)g+&t<&%Z3$Rc2JFfH%H3u^+^i56DqY#sSf{b@YNW4Ec z{{G9q1|}s@Nly(Si4ndLw)`%spI{+-89mW*7zW4Nu0ZO)xKEEPESB2(J7^?L03$1Y zS|nPPh91`W_Nk V2 iTt9nAld#Vxl 4gpAe6ZzrYqDb2qyx>7^zc$=g#!hm$>A&};deYw$`oJZ zhg3a}c+dP@GloA1SmT-uvY_E~w0cC`^9BZvk}^n1>>|~z_e-u-=yW2x*8~L3_BKIT zO(eWP26esarsYtbuf#mAlpm^l-f!>ha*lzk&+a74^xE;!c6bKlNh u>}<`##WAia5R2il?A#c2uJJ9&k}VY9V@1aq3}m{<2HBz(IzoCpfb- z(;j) 8;>`tNRCA zxd{N8%MsX#!7#vXAlpxyMtO&7{t~QidoZdYNLh4u7ofwp9y65>m0Zjhnf_)SdN+ zDFAB1ADfT3UrFJp|rW!DDksg2zj7* QNn?N_=y3B~3Sb^q)gR|v9u^IJtGth3qPftB{%zK$TN)OYse9~RR-@kt9Dyf# z#Pop4qeP*&AjaA)7^C748z4wcD(p@o0JEuwM>AXGUHFW)Rr7gHm`HDsZMU7~sje0G zSAA`A7f)s$#cSZtg9*Cb@nw5<4ei3*wn35IA` MwtoSBFcTj=;IIyi+GkaC0RvDbBKNT>AIzZ2=ML>>s<;^t|_&}7U2cwVnU`+a* zz_7I>jqzR_PRdh1Tdu79A>IfOd49TcZ7KX;H#5iyKypa^i4>J-6_@yL*+6S+ST>>1W1Klz_=%>^w9uWedpY;* zj~N`P0x5}2A8*68&U6}A&B1X(Y#SV5cfM%&ZER$DhXUP!lvWqo${u`k^M}i!yVM>N zU`oEkcxN?a3wRdTU!ZcR1fM1;EuK*&;>n{!3`L@lv12&`ZzTchI9@Tk)I{UF^Zxi! z;p6Sszo9LCFMpp W?`t{coox~;;?r2F=K8u#e)~uln$3{sZfO_1J3-(C&V9zyH zxcyYSx|pAgHyCkyF1bypTXAVaysjwVh=<#z*KL1iwwhc7^|GMJD0}yO+F$OMajeR& zP(j#Tz8_B)H#uLoBbU4lxKHyI_E HF-pGjSl~;Rgw~nHBLF&jI2oSGqqHzQb+YGZKS41KE~Ty!Q*H zKz3`&mZ2I%UIN$TbDFld9g4^EDa*m8k9{ddrm>H$?evJgnstB(u^r=bhg5(q2C3IB z^oRp4ifezrWHvAWB_c~kc%Cc~qDjNCd9cJ&ai4#I6!w}^3%ZR`+wrEwq%K~te#Ycl z)jaQ#lm73cVs&P2XS;d`n}^?1dkkxxAtvLp_lOx#7n9shbz~k+IOALs@qE3p)`}8_ zr_pNBrwq_{BhjR+ozRS#4*k??7_rmh^Bdcdc@&APeO}ov^i7i=w;DA2`pxj$@nz5! zxNx$&JQCJHVG~cRrZSF6=9e!&VKjv5i$w>yUzmAv@2+PMjWFvhKgQ_*Wp(&*`MUsQ zOme%iJ|K@p^NEg*PSi4Q=OUPgLOgnj2FNS62{5R*D&zG7a*Is2(Bn-u<$AD0ZG)Fs zc9p4xzq;9A;yS=lfe;6&sq~h-#X%_HD_#H`K^Yl`<@?e>Q|NM8B_alxOTH{U2lGMO zYZV$ipgj))SFhYYSreCEV;W7xh_Ln5t!PRM`_X^#h2KXL45WSw&ToN>kOsif=5Wb4 zJW?z$D h81tknbCx$#y(*6ds~XCevp;lU&%_ zd0J@U)P62kZq-RKtgOaXB#+y|Dea!T=_qBt@1mb+YSC`R9RH`q%NawNeh-;O1$X*j zF}+J_=e6+JH8_?+Fk~mN^Y!ADUtNrlhGHV1RIGHR0>fd;ONVrZFPsHGt0X5TVL4za z2Gl48jZ2{XDf<0u)s7kqx9>G#OB%g&(<(G7Pe2tkYc+6qnM}>Q&nHRH&;2un#PCz) zuMdias7`Nsyxw}$RjCeE$1m3+YS?mT#_AqcBg#Ci* tIVI#cqB77QEsJ1i}!C z)|luxr364PHV{u7Tkg)p6bd1W>$^);FYKg$W!n;wKNKIO=WT)s>AvN7-@dI2P@Kpg zGB+GkysH)+PA-?19?m=`n(&kU_TSg~9|n>GcE_FjdN`&3+5XWdG3OVlhX67(@?34d zB_O*Hdo|~g;(h0f?T{sg6vE4O&xVwS{W#d@A~FC#MZ8K{e~MW>Ovh*X@4Cwl?@6D- zjUbjRc5wmB?%|{-kE^F(YS?N+vOpmi435-)5dgePPns2%WisVera*Ybu44>O8stlE zkKG3VP7z%wxgV*StMzPJm3C8@icgZSNuW%Qqx+~^Uz3XCvDNx4WUB0l8!2QstzIl0 zwgTL65(AsE&$kP5YyeuQv%}gkbNH`hQTx_ydsP4BZ6f*-4L1yN$8wF^pR*g<7cr45 zq*i?ew6ct34FX%;0~s=(3yl5$1iIIihEekbOD3y+m^7247Rs~X*# zPfIP(cG7Ke;1a8jrd?rBYuGW_^PRId@Y;SeOTP_ZQuz+1a^wF^(yj29r?|9dfOv|1 zb1>1b@3}s2L)z{*K@Pet7u<@kCB)|ai_$B!BfA93?eMSydWyrI4&ch}%YS^q7&SLx z-+jC~C~?0E-y_D{Z4O3@5PltP%SYpzz*yAEn|1q^_3$>=!yQ13XmKUytLMF+;sr1< zb(_$qACw7Z8Y7rPW)?M!x*rZQ73fYV06HXU%F{&$rk0_96H(2Ei2J9C$@7)I5{AO| zu|Me?fGblB=x^D*W^Ow>6aF1dT-W|6Ew^oEZl2#Ty%kjrs;Lo}S6jHY)+x}=-pT0e zFJWvz_Qq}DZ7ilV;~T$LX}65i7OLv2t-fX1==yusU RSJ3Q z Em1al ziT9dzMAl{Ntz-ZgzC@|Y7OsLe(pZ^Qv)=ixx>F3m_*t@hHSJ~OWFjvs&5eADG-Mq{ z9js2usTchr#G!!JeA1+=O!W$%sfm rzhz$nT`V%x6cxU_pALeyEdHk!zOAgZ{ z&&+4z%5)#6QukdOkt9zf@0lNWdsMEMdQ@8AsDL^&8SUG$ueltnZ4LHN_I0Q3%W3w+ zG` AtO`KV)dWF{=WsJ7n227l_ zI<@ 7(Otw#e?R< ?e8{e8Z>3ZhHDqcgZ&Rr0+WqNSmtdR~fr$CvSf zF|?sY@@L)*P>sRXmy(N9dX5pP(Q|D45{g8V%;h`&q*d0Xo*CE=8FbnfTlW~p#7c?v zI3K|H8XWrnxl`#$_*}xHt&T4RK++Bs{Vf+P{SerXCEp@*p}LMTByW*NMEXqwla-Mo zkw=6?hqk_~Qsg@QxlQHFnP(=CE)5?(n>nL86`sf{oerQ+;X0k3LI5n!}a%PH#^3 zyzNU1{GGWvS}o=+2By+&= D;2 zM0j`i-jh(42_UZa_s&F?7oTGNNQ%pFU(L*oBVAj(Hv*;OBwWo;MJlmQJnQ;%oUR>t z+f-gXuTQJLENiIS)Tho;w2}Ox42XzQuwA+Ls=M?@u>e)z_td_I`98vhcv`b^Y|A$0 z&q8hfb9R)4)<{0&PdJS_igHZYvpJX8xy?X|4`7nI1eui&X~}js0lOTw%Wh5oWd_Lo zoFYZ78d5tb{$?2y-~4d-pDBy21=uqOj#U9A;|R!%?%UtVogn>-q7_SKHt8;^Hl 8Ky%FTJ|I#Hcb~}MLXFNboneLh zmMNV^)RKXNuv}hd4Bi{U{hJScvr}mlGRzJr<(`?cA0=_)y56N&i>qWVkqnAg_l-XE zh!#?jk?=Th-V|FLmVZ0O#B+3inGIuJ5Z9HlvG`|M(Ee7WJ; ?Qf95P4x>e%yhX*5~G<$>Qq-XeapDH(jcq+ik{5b%Cl4jaq;_E;R z nJzYVL<23Pqk$0LU(_IRbz(N=YZtQ)|>+*h5znXPvuckJI9|K#YkO$a3@ zJyeH9I8-Lh;)UCGr-fiO&2i5dS#&kHFGO0r *3JTl-2&e^!qz8pTxq#zba1EHN*zUFG#8F8lS%7Oi$}97?vWF;-bl z7i1;el1lcFin+K|uY$-XNJ|E6Ye1HocD>`a9!3iZ-88i~gA662JkuLp91)P--jEMT zbd`M${njsvomx*7#v_b||12!`$d9XIsFwj<4b#6{gd1avtEU%(B9O Q*O2 znsOb~xJa5xD;f1+HCg|8k2(x6;UzPv%czO`&Rj`c i5jCsmi7UY$SjnBuu1fO+{)6y>;0 zDDX%9Vdg~e;GA-2Wi~OxgEl}xud=R!skd!r+(T`Khf$_O?F|unUsz(50f1IH8JwC{ zosC*ZA|AoXtai(P%c!sz)@~;42kTofbQ@b=?A>UgrQdv9x+nS1Q_qy1-uq_0L++|2 zHSw|{aA-?jS xz7(U+GblcD{X*zpKDa(X; z-a)zXA(81;XxxLMFN96}5BM7_@-9M$UCUk6#x%*_fHt7Og1E(<(Q~%05%!K)_h3V3 zd86cAOchu)=fw=H5)00ZJEg_w_Z86b*;52E>+XpwAmrk@S$6at D^!5-J7r_ z@0 v~5_g}D4<*O&T}PV2Q6B;)H^LpaIYlpjK~c(zttJeG?Es`?|` zZt|g>SJM9TIkdvHqhWLK3lT3o89GmME3teekZ?N+t~KsQrpmH0|0ws)3N!mKIwodf z^O4W(W%lj6&HEu9d2h=&$Ky`uZ$!*3j@*Y>ZKLwQ(;FRknHKm~C}ylz#ZAHEM<02n z*_sp*b-@MtB9VttC7nBm7Lez4QK|kGu+~QTlg5Tfpznrl;Cs%cb|o5Sk?nXV3 R6_>nVU gM{z8Kj>PkmZP;d{oGL{ueKZ$nE@X}f$*0Xvdz1s3)bhku{O;{%^}gAP*xYrHiN z;=Nun(%;NvMTbYj?7S+xeElw>&gzhbl-m<50Ur$RiYG49-}-78((#{it{u^cN~F`O za~vcE4z+;o+EP(MR!jYu6sd52MTG8TDqkvPZMZH&v?LZMEZ~j4d5wwb+=yt-R%Dhd z4&zM9!)NnI!lhL^0%kD_vmVmco3}9XP1J(=K=h$K*xpphn(J*^z7%y_I_HO`Tsw*F z8hCi$rf}E^rY5Du*q4TESLiDV42qygMx}!yg(2G*+fhNQO6Lq!M`KY4stbiM^X@rX zCKbLhd%y&$2gS9afh I6idkMH(f5(=b5+(Upq^Q zXM28*Qb9GXjEJ<`ZmHXOX|ddyvdPu>hQYmHKCkB&+pFwTmc+KAeV(G_o(##$i-WF- z^jG-w2N~oyRtMkdlwF7F0*H#DA%P6<8==6kE>kY6}SHBHO%KPA*cio{E@ujQ%x9 z2?`r})CX$N07J(49J)+l=9whPEH~;pZTL3oNlf#$ZHjQ-ubGwPJq&4yK~qqAsi__ z>PW89aX6Vm(@T~sVl*^`B3Y8cVg>@a3U4g#FvUJ>xW7t`9mJpKm(yxsi}7TXu93Uo zvNs>YaB$#)Ed6;o;MKv<;Sf39SIPF2Iose>iz++Yl2XrEvZrt6L{b6q_wbSmU`kO5 zbeW$)ZgC|be?F)P_AO=KX;8K=%s0K<(}xT;oPPq zH~Y@0PAg&`F}`ZL_>C ``x?Ws+-qO41a6K6>S}kG%Ln!q?L# zk4gDwG|wHLM%lfSdBthR%eNft|467uw3rH--Y(K-ENV3|=5fAL+cnkICjl_PDh<}9 z*6;%1AV*z-&+G-{x{#bMJD-WH#p^A!E@`p(`K4Q7i%-GeovGQuNV9pxSwpSWE F*>@daDh7&@fEN`%3oo7W{TARp^fccMQP5D$!ZR1`EC;nwZvDZL77u zau}~uBAd$aAI4%4zS7u@Fgg$3Epe;~1F_L5R&&*Xo91qUI}^F%i&Ok>zpdna{;zss zuB0w5*?!D6yUglZ!EKGDW*HEh0A{+GMOoVn3iy3EvfXX$d=fkw+X?Gsc?~Ql+ {#tqGUJD*y97P=VWZC)>i2W8TS|eCvlj2^vuvU)?78xGYBlvQrH22ppVm?9=@ZM3 z%Hi`ab2@!G6|6{N6+g?Zs@{1>0m3iei?-q9D9zx<_S0$(*lN>reRTiIp%+k4c?GT5 zxl`a-{|@#C`vOG;dkx$LZv!w6{cU+ `wyPtuPA#@h#S-Z7bTz`&LNBmsF!j?a{TP z(KM@5?q8qnn(TD+y+7?dfrc&)1B?WR*EDL82Y`xAl zm-18pp}tvB47#CsqNPu*mK?Km6kXA}5KoKLXU2}H(6o1e{|3r64&p1~E$Jz@?Jgn~ zYfi~9sKQbM2i9^6Z8ZFu(FVd*WrQEW;sKGE1-IzDCIV5l$-swTA3FIWzj!+yzXRv_ zz_@QT&;9W@>|^QbD$O@#U#{xuc7J-!`l)HI0GRxxn9@FByN~7gHDZIqwpc>moPT>> zhyZh1WWp{1+&+J^uEI&@F?TWHd8=yV{^Br>x7xho9Uuy=fo8W`KgfY8@8qB#VY--o z*@kw_zqISfi@}VNgVMQai5^7P85XxIPiBRC$EotxHt&QKmm3^E?r#eyclgKiMJi1G zw~`9Ro{}3FNk&rdd<@3+w549cxoKOK?_p6}nOqMlFSgb32d%^jV2K1aNA@2B`Ggov zE)LnckP*VcGVEXhALY%Gv%8X0@qwANBcEig9D^bIirM2kIR2Yed@Ab^_4hryrA`72 z3UqGg`il?@V&~>QTtFSewR8F?UW$y@<2}Jx6d6Q9f)_Pq$W26ovA?stulvUa25c(( z;*z8z2{X-KD}GLC^13c`FM%%frz#CCR%aQ92ye452Q)VA^K9f8!_fIORV3p^zf5m* zv-s7|pJ|0ki3Ix7L2_;xac5u?WC3-@h|MNb#(#(xPz-;V9-mrYv3<+dis@?00n)^o zXS)q`kd@>#Y6P76kV;E1#zghplIcu^njL9Cdw6N8UcE?}bXb6#{6Xo9tGA^&f~}F5 z)`D%GxZF1z?qoa!{#C1rpOvGFedL)zWqXXbJ=fTCDR@zF-BU@=rzt;{WziB{XMHca zWKKlL(O^T-+3-Yf9bXur2o5%Gfe&;JTf~daOcpb(KJdZthCTBa^E%k>e}W5X;H)6O zTTG-reJ%TyApqX_Mm>AY(x>Jp#fHg{PVG6BnL-yvvF~D^hW?7p+3_wj4 ;Ai`B2VHT;5C zx=?10%6aS!=r?u4!)2AEihuHGzT((_$&9ntYr0Q@Pi<%;jA-clKlki5TwE-h?dD*8 zq7KGd>$1xKs%vHa%TGDKQBuc7IbXeY=K@RS uQS(=8>4G$Ewo*jM9moEBX6MCA&qLk*A+}pQHJVD|+kxBMg~2OZ4Pk#b zQQs|a9nrWWO}_if();JThNj3OXGdbR4a193$*w`>$+WYhQH(@JiQ$B_$LsQQveSh` zgpQt0WRZ3!W|xYS;-9RGt1z!sQ9siQBx iyvR#UkLKDV*PH2Rn$7~UP zL Wiy*|7iNRHD_s%m cPQ*|(-&+EmV~HPkDAIw>MMSwu_$2M`P8g$| zZWq5InFqekVzQdg962bUQ1 LZNyva8wm7FIT!oB zeahKlf1QP~*}`JzfvAW+QNV$c=v;1b@$?uXsiP<~QCs$Bl0RMu@@?3IFQd69AT!(V zo6$kzY}R~;+AT*GD3>bqfoS;rdLHed%p`npbz{qt5(+!x9Jrwrrpcjl&h!dA3mSp( z#caNxD)v*1Vq|rlV*^k1DAtSRE3?ujBm5yFEA8CYdtP&Po$)fH {DIs@Vn{T4eKdc h^N$*6jV_K>1651FJc865&OV|KY3uvT07A z!T#9sM2gvZcOxQ$yE&3$kBcJVY)ojx8Ob~>+LA-rCjVXO-R#AXty++V6_@$!^jvbz z?)6=Koyg4z{ltJ5KEV4;%O3wz>u!5O?~uOq5EeVAQF}#A$<-zfU0}q>Bz*r=5j)v7 z)H%B{Lqr6VO1kgw@4}a2=;uDI6~&$wZqJgt>n43rI^;NDM})PAMt08OMtXdd*CM#I z_Rs19WJHmhUVG8*?jpWf_il-UHEt}3nV)pQeRWGPVbM9K0)AgP$GU4}GQMK(w1+2G z-nbIjvuym{lqJB^9&s(DiJEe;@9K!-d{|~Esl?*f!+7ndKX x|1FJ&wvGQh!HeLrYpxKj!(r9tkcAeE3g@27uN6fWM#YPwl}$*?4Z6 zOT38~Tn}}80i1x U=1-O1lHcDq($5gsM zxSsfVXM$xEYxhhh{g26s`K Gl8gU6 zb3BSb4E^Vn)s4S4&)d86GPH%D7$k3QMj)eOHNbhFn@yOFO95Z-dSkK7Mu~2i?u0in zbyhA=^n6)ORkE*vyvOH>;TP;QR80g9>B4I?h?%>DttQ@$M8 IhQlM>i&DJV~08{^(NWe<@-_M*-M-j^7c-M_Uu_0=W)t@qrg?>ZU(!GBJ z#cf%~uS>*g@|IM6f);#nKSeE5W^nI2(qhjubYFWldCfCWHbW%P(Q1EQhfco 8d-{yizv;Ra~#G_1QqWyAF(!)LZbJ5hygyN!_60$DTh4K&f_b zHlIU>deRexGd5ipz16B0X1@{gGu_T$tI7_xKN$^oO69R7fh4#+oxM|GwUPbScOKvk zCgh$ME3ZK9R6dl_+-m=fi!fqvmkRtErFL3xD0#@0m6rHFT#rT1lCUb@D}6%gqA~C5 z#+W|FWC52LtDFxZC73^FoR4N!HXyc>cUvVf#42hv{Tq7tK`1X>%z9FXEx#bO`* z?l0 hT?)$s=ViML*pUHppTKF~ZV#UF`4s$s$g&tp`L45r;ja_WV zbXIkI&M!qj$lOCa`mM|0ZEmKiuG0iBbYc;^M8BW5GNMSg2c_()eaAg=b`1|smu`Uk z$ekFL?gXC%y~DJ)Yjg8#7=g5zvyXb