From 2bd6189d240703990a3c7452fd4124ba48e9f0d2 Mon Sep 17 00:00:00 2001 From: Soichiro Miki Date: Tue, 15 Oct 2024 03:56:53 +0900 Subject: [PATCH 01/31] Capitalize "Effect" (#7211) --- src/content/reference/react/useReducer.md | 2 +- src/content/reference/react/useState.md | 2 +- src/content/reference/react/useTransition.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/reference/react/useReducer.md b/src/content/reference/react/useReducer.md index cfd0fb856..ed3dc68c2 100644 --- a/src/content/reference/react/useReducer.md +++ b/src/content/reference/react/useReducer.md @@ -52,7 +52,7 @@ function MyComponent() { #### Caveats {/*caveats*/} * `useReducer` is a Hook, so you can only call it **at the top level of your component** or your own Hooks. You can't call it inside loops or conditions. If you need that, extract a new component and move the state into it. -* The `dispatch` function has a stable identity, so you will often see it omitted from effect dependencies, but including it will not cause the effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) +* The `dispatch` function has a stable identity, so you will often see it omitted from Effect dependencies, but including it will not cause the Effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) * In Strict Mode, React will **call your reducer and initializer twice** in order to [help you find accidental impurities.](#my-reducer-or-initializer-function-runs-twice) This is development-only behavior and does not affect production. If your reducer and initializer are pure (as they should be), this should not affect your logic. The result from one of the calls is ignored. --- diff --git a/src/content/reference/react/useState.md b/src/content/reference/react/useState.md index 4aa9d5911..23db1aae5 100644 --- a/src/content/reference/react/useState.md +++ b/src/content/reference/react/useState.md @@ -85,7 +85,7 @@ function handleClick() { * React [batches state updates.](/learn/queueing-a-series-of-state-updates) It updates the screen **after all the event handlers have run** and have called their `set` functions. This prevents multiple re-renders during a single event. In the rare case that you need to force React to update the screen earlier, for example to access the DOM, you can use [`flushSync`.](/reference/react-dom/flushSync) -* The `set` function has a stable identity, so you will often see it omitted from effect dependencies, but including it will not cause the effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) +* The `set` function has a stable identity, so you will often see it omitted from Effect dependencies, but including it will not cause the Effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) * Calling the `set` function *during rendering* is only allowed from within the currently rendering component. React will discard its output and immediately attempt to render it again with the new state. This pattern is rarely needed, but you can use it to **store information from the previous renders**. [See an example below.](#storing-information-from-previous-renders) diff --git a/src/content/reference/react/useTransition.md b/src/content/reference/react/useTransition.md index 5066fe637..b6dcb3c73 100644 --- a/src/content/reference/react/useTransition.md +++ b/src/content/reference/react/useTransition.md @@ -80,7 +80,7 @@ function TabContainer() { * The function you pass to `startTransition` must be synchronous. React immediately executes this function, marking all state updates that happen while it executes as Transitions. If you try to perform more state updates later (for example, in a timeout), they won't be marked as Transitions. -* The `startTransition` function has a stable identity, so you will often see it omitted from effect dependencies, but including it will not cause the effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) +* The `startTransition` function has a stable identity, so you will often see it omitted from Effect dependencies, but including it will not cause the Effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) * A state update marked as a Transition will be interrupted by other state updates. For example, if you update a chart component inside a Transition, but then start typing into an input while the chart is in the middle of a re-render, React will restart the rendering work on the chart component after handling the input update. From ee094926d54eef5cec54c9299842eeb822c7859b Mon Sep 17 00:00:00 2001 From: lauren Date: Thu, 17 Oct 2024 16:55:24 -0400 Subject: [PATCH 02/31] [compiler] Move React 17/18 section to its own subheading (#7230) Currently it's a little hidden, let's move it to its own subheading for more prominence --- src/content/learn/react-compiler.md | 54 +++++++++++++---------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index 5afaa4cf5..08e2e5672 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -192,61 +192,63 @@ export default function App() { When you have more confidence with rolling out the compiler, you can expand coverage to other directories as well and slowly roll it out to your whole app. -#### New projects {/*new-projects*/} - -If you're starting a new project, you can enable the compiler on your entire codebase, which is the default behavior. +### Using React Compiler with React 17 or 18 {/*using-react-compiler-with-react-17-or-18*/} -## Usage {/*installation*/} - -### Babel {/*usage-with-babel*/} +React Compiler works best with React 19 RC. If you are unable to upgrade, you can install the extra `react-compiler-runtime` package which will allow the compiled code to run on versions prior to 19. However, note that the minimum supported version is 17. -npm install babel-plugin-react-compiler@experimental +npm install react-compiler-runtime@experimental -The compiler includes a Babel plugin which you can use in your build pipeline to run the compiler. - -After installing, add it to your Babel config. Please note that it's critical that the compiler run **first** in the pipeline: +You should also add the correct `target` to your compiler config, where `target` is the major version of React you are targeting: -```js {7} +```js {3} // babel.config.js -const ReactCompilerConfig = { /* ... */ }; +const ReactCompilerConfig = { + target: '18' // '17' | '18' | '19' +}; module.exports = function () { return { plugins: [ - ['babel-plugin-react-compiler', ReactCompilerConfig], // must run first! - // ... + ['babel-plugin-react-compiler', ReactCompilerConfig], ], }; }; ``` -`babel-plugin-react-compiler` should run first before other Babel plugins as the compiler requires the input source information for sound analysis. +#### New projects {/*new-projects*/} -React Compiler works best with React 19 RC. If you are unable to upgrade, you can install the extra `react-compiler-runtime` package which will allow the compiled code to run on versions prior to 19. However, note that the minimum supported version is 17. +If you're starting a new project, you can enable the compiler on your entire codebase, which is the default behavior. + +## Usage {/*installation*/} + +### Babel {/*usage-with-babel*/} -npm install react-compiler-runtime@experimental +npm install babel-plugin-react-compiler@experimental -You should also add the correct `target` to your compiler config, where `target` is the major version of React you are targeting: +The compiler includes a Babel plugin which you can use in your build pipeline to run the compiler. -```js {3} +After installing, add it to your Babel config. Please note that it's critical that the compiler run **first** in the pipeline: + +```js {7} // babel.config.js -const ReactCompilerConfig = { - target: '18' // '17' | '18' | '19' -}; +const ReactCompilerConfig = { /* ... */ }; module.exports = function () { return { plugins: [ - ['babel-plugin-react-compiler', ReactCompilerConfig], + ['babel-plugin-react-compiler', ReactCompilerConfig], // must run first! + // ... ], }; }; ``` +`babel-plugin-react-compiler` should run first before other Babel plugins as the compiler requires the input source information for sound analysis. + ### Vite {/*usage-with-vite*/} If you use Vite, you can add the plugin to vite-plugin-react: @@ -392,12 +394,6 @@ To report issues, please first create a minimal repro on the [React Compiler Pla You can also provide feedback in the React Compiler Working Group by applying to be a member. Please see [the README for more details on joining](https://github.com/reactwg/react-compiler). -### `(0 , _c) is not a function` error {/*0--_c-is-not-a-function-error*/} - -This occurs if you are not using React 19 RC and up. To fix this, [upgrade your app to React 19 RC](https://react.dev/blog/2024/04/25/react-19-upgrade-guide) first. - -If you are unable to upgrade to React 19, you may try a userspace implementation of the cache function as described in the [Working Group](https://github.com/reactwg/react-compiler/discussions/6). However, please note that this is not recommended and you should upgrade to React 19 when possible. - ### How do I know my components have been optimized? {/*how-do-i-know-my-components-have-been-optimized*/} [React Devtools](/learn/react-developer-tools) (v5.0+) has built-in support for React Compiler and will display a "Memo ✨" badge next to components that have been optimized by the compiler. From 9467bc58868e66c53ca9385c8531dcf7b02178c2 Mon Sep 17 00:00:00 2001 From: lauren Date: Fri, 18 Oct 2024 00:12:01 -0400 Subject: [PATCH 03/31] [compiler] Add docs for Beta (#7231) Updates our compiler docs for the latest Beta release. --- src/content/learn/react-compiler.md | 146 +++++++++------------------- 1 file changed, 48 insertions(+), 98 deletions(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index 08e2e5672..4fc974fa9 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -3,7 +3,7 @@ title: React Compiler --- -This page will give you an introduction to the new experimental React Compiler and how to try it out successfully. +This page will give you an introduction to React Compiler and how to try it out successfully. @@ -19,12 +19,28 @@ These docs are still a work in progress. More documentation is available in the -React Compiler is a new experimental compiler that we've open sourced to get early feedback from the community. It still has rough edges and is not yet fully ready for production. +React Compiler is a new compiler currently in Beta, that we've open sourced to get early feedback from the community. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you’ve followed the [Rules of React](/reference/rules). + +The latest Beta release can be found with the `@beta` tag, and daily experimental releases with `@experimental`. -React Compiler is a new experimental compiler that we've open sourced to get early feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it. +React Compiler is a new compiler that we've open sourced to get early feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it. + +The compiler also includes an [eslint plugin](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. **We strongly recommend everyone use the linter today.** The linter does not require that you have the compiler installed, so you can use it even if you are not ready to try out the compiler. + +The compiler is currently released as `beta`, and is available to try out on React 17+ apps and libraries. To install the Beta: -The compiler also includes an [eslint plugin](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. The plugin runs independently of the compiler and can be used even if you aren't using the compiler in your app. We recommend all React developers to use this eslint plugin to help improve the quality of your codebase. + +npm install -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta + + +Or, if you're using Yarn: + + +yarn add -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta + + +If you are not using React 19 yet, please see [the section below](#using-react-compiler-with-react-17-or-18) for further instructions. ### What does the compiler do? {/*what-does-the-compiler-do*/} @@ -94,19 +110,9 @@ However, if `expensivelyProcessAReallyLargeArrayOfObjects` is truly an expensive So if `expensivelyProcessAReallyLargeArrayOfObjects` was used in many different components, even if the same exact items were passed down, that expensive calculation would be run repeatedly. We recommend [profiling](https://react.dev/reference/react/useMemo#how-to-tell-if-a-calculation-is-expensive) first to see if it really is that expensive before making code more complicated. -### What does the compiler assume? {/*what-does-the-compiler-assume*/} - -React Compiler assumes that your code: - -1. Is valid, semantic JavaScript -2. Tests that nullable/optional values and properties are defined before accessing them (for example, by enabling [`strictNullChecks`](https://www.typescriptlang.org/tsconfig/#strictNullChecks) if using TypeScript), i.e., `if (object.nullableProperty) { object.nullableProperty.foo }` or with optional-chaining `object.nullableProperty?.foo` -3. Follows the [Rules of React](https://react.dev/reference/rules) - -React Compiler can verify many of the Rules of React statically, and will safely skip compilation when it detects an error. To see the errors we recommend also installing [eslint-plugin-react-compiler](https://www.npmjs.com/package/eslint-plugin-react-compiler). - ### Should I try out the compiler? {/*should-i-try-out-the-compiler*/} -Please note that the compiler is still experimental and has many rough edges. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you've followed the [Rules of React](/reference/rules). +Please note that the compiler is still in Beta and has many rough edges. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you've followed the [Rules of React](/reference/rules). **You don't have to rush into using the compiler now. It's okay to wait until it reaches a stable release before adopting it.** However, we do appreciate trying it out in small experiments in your apps so that you can [provide feedback](#reporting-issues) to us to help make the compiler better. @@ -119,7 +125,7 @@ In addition to these docs, we recommend checking the [React Compiler Working Gro Prior to installing the compiler, you can first check to see if your codebase is compatible: -npx react-compiler-healthcheck@experimental +npx react-compiler-healthcheck@beta This script will: @@ -141,7 +147,7 @@ Found no usage of incompatible libraries. React Compiler also powers an eslint plugin. The eslint plugin can be used **independently** of the compiler, meaning you can use the eslint plugin even if you don't use the compiler. -npm install eslint-plugin-react-compiler@experimental +npm install -D eslint-plugin-react-compiler@beta Then, add it to your eslint config: @@ -176,28 +182,18 @@ const ReactCompilerConfig = { }; ``` -In rare cases, you can also configure the compiler to run in "opt-in" mode using the `compilationMode: "annotation"` option. This makes it so the compiler will only compile components and hooks annotated with a `"use memo"` directive. Please note that the `annotation` mode is a temporary one to aid early adopters, and that we don't intend for the `"use memo"` directive to be used for the long term. - -```js {2,7} -const ReactCompilerConfig = { - compilationMode: "annotation", -}; +When you have more confidence with rolling out the compiler, you can expand coverage to other directories as well and slowly roll it out to your whole app. -// src/app.jsx -export default function App() { - "use memo"; - // ... -} -``` +#### New projects {/*new-projects*/} -When you have more confidence with rolling out the compiler, you can expand coverage to other directories as well and slowly roll it out to your whole app. +If you're starting a new project, you can enable the compiler on your entire codebase, which is the default behavior. ### Using React Compiler with React 17 or 18 {/*using-react-compiler-with-react-17-or-18*/} React Compiler works best with React 19 RC. If you are unable to upgrade, you can install the extra `react-compiler-runtime` package which will allow the compiled code to run on versions prior to 19. However, note that the minimum supported version is 17. -npm install react-compiler-runtime@experimental +npm install react-compiler-runtime@beta You should also add the correct `target` to your compiler config, where `target` is the major version of React you are targeting: @@ -217,16 +213,22 @@ module.exports = function () { }; ``` -#### New projects {/*new-projects*/} +### Using the compiler on libraries {/*using-the-compiler-on-libraries*/} -If you're starting a new project, you can enable the compiler on your entire codebase, which is the default behavior. +React Compiler can also be used to compile libraries. Because React Compiler needs to run on the original source code prior to any code transformations, it is not possible for an application's build pipeline to compile the libraries they use. Hence, our recommendation is for library maintainers to independently compile and test their libraries with the compiler, and ship compiled code to npm. + +Because your code is pre-compiled, users of your library will not need to have the compiler enabled in order to benefit from the automatic memoization applied to your library. If your library targets apps not yet on React 19, specify a minimum [`target` and add `react-compiler-runtime` as a direct dependency](#using-react-compiler-with-react-17-or-18). The runtime package will use the correct implementation of APIs depending on the application's version, and polyfill the missing APIs if necessary. + +Library code can often require more complex patterns and usage of escape hatches. For this reason, we recommend ensuring that you have sufficient testing in order to identify any issues that might arise from using the compiler on your library. If you identify any issues, you can always opt-out the specific components or hooks with the [`'use no memo'` directive](#something-is-not-working-after-compilation). + +Similarly to apps, it is not necessary to fully compile 100% of your components or hooks to see benefits in your library. A good starting point might be to identify the most performance sensitive parts of your library and ensuring that they don't break the [Rules of React](/reference/rules), which you can use `eslint-plugin-react-compiler` to identify. ## Usage {/*installation*/} ### Babel {/*usage-with-babel*/} -npm install babel-plugin-react-compiler@experimental +npm install babel-plugin-react-compiler@beta The compiler includes a Babel plugin which you can use in your build pipeline to run the compiler. @@ -275,36 +277,7 @@ export default defineConfig(() => { ### Next.js {/*usage-with-nextjs*/} -Next.js has an experimental configuration to enable the React Compiler. It automatically ensures Babel is set up with `babel-plugin-react-compiler`. - -- Install Next.js canary, which uses React 19 Release Candidate -- Install `babel-plugin-react-compiler` - - -npm install next@canary babel-plugin-react-compiler@experimental - - -Then configure the experimental option in `next.config.js`: - -```js {4,5,6} -// next.config.js -/** @type {import('next').NextConfig} */ -const nextConfig = { - experimental: { - reactCompiler: true, - }, -}; - -module.exports = nextConfig; -``` - -Using the experimental option ensures support for the React Compiler in: - -- App Router -- Pages Router -- Webpack (default) -- Turbopack (opt-in through `--turbo`) - +Please refer to the [Next.js docs](https://nextjs.org/docs/canary/app/api-reference/next-config-js/reactCompiler) for more information. ### Remix {/*usage-with-remix*/} Install `vite-plugin-babel`, and add the compiler's Babel plugin to it: @@ -337,40 +310,7 @@ export default defineConfig({ ### Webpack {/*usage-with-webpack*/} -You can create your own loader for React Compiler, like so: - -```js -const ReactCompilerConfig = { /* ... */ }; -const BabelPluginReactCompiler = require('babel-plugin-react-compiler'); - -function reactCompilerLoader(sourceCode, sourceMap) { - // ... - const result = transformSync(sourceCode, { - // ... - plugins: [ - [BabelPluginReactCompiler, ReactCompilerConfig], - ], - // ... - }); - - if (result === null) { - this.callback( - Error( - `Failed to transform "${options.filename}"` - ) - ); - return; - } - - this.callback( - null, - result.code, - result.map === null ? undefined : result.map - ); -} - -module.exports = reactCompilerLoader; -``` +A community Webpack loader is [now available here](https://github.com/SukkaW/react-compiler-webpack). ### Expo {/*usage-with-expo*/} @@ -394,6 +334,16 @@ To report issues, please first create a minimal repro on the [React Compiler Pla You can also provide feedback in the React Compiler Working Group by applying to be a member. Please see [the README for more details on joining](https://github.com/reactwg/react-compiler). +### What does the compiler assume? {/*what-does-the-compiler-assume*/} + +React Compiler assumes that your code: + +1. Is valid, semantic JavaScript. +2. Tests that nullable/optional values and properties are defined before accessing them (for example, by enabling [`strictNullChecks`](https://www.typescriptlang.org/tsconfig/#strictNullChecks) if using TypeScript), i.e., `if (object.nullableProperty) { object.nullableProperty.foo }` or with optional-chaining `object.nullableProperty?.foo`. +3. Follows the [Rules of React](https://react.dev/reference/rules). + +React Compiler can verify many of the Rules of React statically, and will safely skip compilation when it detects an error. To see the errors we recommend also installing [eslint-plugin-react-compiler](https://www.npmjs.com/package/eslint-plugin-react-compiler). + ### How do I know my components have been optimized? {/*how-do-i-know-my-components-have-been-optimized*/} [React Devtools](/learn/react-developer-tools) (v5.0+) has built-in support for React Compiler and will display a "Memo ✨" badge next to components that have been optimized by the compiler. From 8f6d6a92a496ab758e03000928bdacbbbafaddd3 Mon Sep 17 00:00:00 2001 From: lauren Date: Mon, 21 Oct 2024 12:13:10 -0400 Subject: [PATCH 04/31] [compiler] Remove section on healthcheck (#7239) * [compiler] Remove section on healthcheck This package will be deprecated soon. It makes adopting the compiler confusing since it can spread the misconception that you need to have all your components successfully compiled before you can use the compiler. For now let's remove this from our docs and deprecate the package on npm. We can always choose to repurpose this in the future. * Clarify that 100% compilation is not necessary --- src/content/learn/react-compiler.md | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index 4fc974fa9..cc7d31927 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -48,6 +48,10 @@ In order to optimize applications, React Compiler automatically memoizes your co The compiler uses its knowledge of JavaScript and React's rules to automatically memoize values or groups of values within your components and hooks. If it detects breakages of the rules, it will automatically skip over just those components or hooks, and continue safely compiling other code. + +React Compiler can statically detect when Rules of React are broken, and safely opt-out of optimizing just the affected components or hooks. It is not necessary for the compiler to optimize 100% of your codebase. + + If your codebase is already very well-memoized, you might not expect to see major performance improvements with the compiler. However, in practice memoizing the correct dependencies that cause performance issues is tricky to get right by hand. @@ -120,28 +124,6 @@ Please note that the compiler is still in Beta and has many rough edges. While i In addition to these docs, we recommend checking the [React Compiler Working Group](https://github.com/reactwg/react-compiler) for additional information and discussion about the compiler. -### Checking compatibility {/*checking-compatibility*/} - -Prior to installing the compiler, you can first check to see if your codebase is compatible: - - -npx react-compiler-healthcheck@beta - - -This script will: - -- Check how many components can be successfully optimized: higher is better -- Check for `` usage: having this enabled and followed means a higher chance that the [Rules of React](/reference/rules) are followed -- Check for incompatible library usage: known libraries that are incompatible with the compiler - -As an example: - - -Successfully compiled 8 out of 9 components. -StrictMode usage not found. -Found no usage of incompatible libraries. - - ### Installing eslint-plugin-react-compiler {/*installing-eslint-plugin-react-compiler*/} React Compiler also powers an eslint plugin. The eslint plugin can be used **independently** of the compiler, meaning you can use the eslint plugin even if you don't use the compiler. @@ -165,7 +147,9 @@ module.exports = { The eslint plugin will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. + **You don't have to fix all eslint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized, but it is not required to fix everything before you can use the compiler. + ### Rolling out the compiler to your codebase {/*using-the-compiler-effectively*/} From d9e650fe6ec6a8b2da56543c54126c408705353f Mon Sep 17 00:00:00 2001 From: lauren Date: Mon, 21 Oct 2024 14:22:35 -0400 Subject: [PATCH 05/31] Add React Compiler Beta Release post (#7240) Add a new blog post announcing the React Compiler Beta release! --- .../2024/10/21/react-compiler-beta-release.md | 126 ++++++++++++++++++ src/content/blog/index.md | 6 + src/sidebarBlog.json | 7 + 3 files changed, 139 insertions(+) create mode 100644 src/content/blog/2024/10/21/react-compiler-beta-release.md diff --git a/src/content/blog/2024/10/21/react-compiler-beta-release.md b/src/content/blog/2024/10/21/react-compiler-beta-release.md new file mode 100644 index 000000000..bba93e4ee --- /dev/null +++ b/src/content/blog/2024/10/21/react-compiler-beta-release.md @@ -0,0 +1,126 @@ +--- +title: "React Compiler Beta Release" +author: Lauren Tan +date: 2024/10/21 +description: At React Conf 2024, we announced the experimental release of React Compiler, a build-time tool that optimizes your React app through automatic memoization. In this post, we want to share what's next for open source, and our progress on the compiler. + +--- + +October 21, 2024 by [Lauren Tan](https://twitter.com/potetotes). + +--- + + + +The React team is excited to share new updates: + + + +1. We're publishing React Compiler Beta today, so that early adopters and library maintainers can try it and provide feedback. +2. We're officially supporting React Compiler for apps on React 17+, through an optional `react-compiler-runtime` package. +3. We're opening up public membership of the [React Compiler Working Group](https://github.com/reactwg/react-compiler) to prepare the community for gradual adoption of the compiler. + +--- + +At [React Conf 2024](/blog/2024/05/22/react-conf-2024-recap), we announced the experimental release of React Compiler, a build-time tool that optimizes your React app through automatic memoization. [You can find an introduction to React Compiler here](/learn/react-compiler). + +Since the first release, we've fixed numerous bugs reported by the React community, received several high quality bug fixes and contributions[^1] to the compiler, made the compiler more resilient to the broad diversity of JavaScript patterns, and have continued to roll out the compiler more widely at Meta. + +In this post, we want to share what's next for React Compiler. + +## Try React Compiler Beta today {/*try-react-compiler-beta-today*/} + +At [React India 2024](https://www.youtube.com/watch?v=qd5yk2gxbtg), we shared an update on React Compiler. Today, we are excited to announce a new Beta release of React Compiler and ESLint plugin. New betas are published to npm using the `@beta` tag. + +To install React Compiler Beta: + + +npm install -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta + + +Or, if you're using Yarn: + + +yarn add -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta + + +You can watch [Sathya Gunasekaran's](https://twitter.com/_gsathya) talk at React India here: + + + +## We recommend everyone use the React Compiler linter today {/*we-recommend-everyone-use-the-react-compiler-linter-today*/} + +React Compiler’s eslint plugin helps developers proactively identify and correct [Rules of React](/reference/rules) violations. **We strongly recommend everyone use the linter today**. The linter does not require that you have the compiler installed, so you can use it independently, even if you are not ready to try out the compiler. + +To install the linter only: + + +npm install -D eslint-plugin-react-compiler@beta + + +Or, if you're using Yarn: + + +yarn add -D eslint-plugin-react-compiler@beta + + +Using the linter helps identify Rules of React breakages, making it easier to adopt the compiler when it's fully released. + +## Backwards Compatibility {/*backwards-compatibility*/} + +React Compiler produces code that depends on runtime APIs added in React 19, but we've since added support for the compiler to also work with React 17 and 18. If you are not on React 19 yet, in the Beta release you can now try out React Compiler by specifying a minimum `target` in your compiler config, and adding `react-compiler-runtime` as a dependency. [You can find docs on this here](/learn/react-compiler#using-react-compiler-with-react-17-or-18). + +## Using React Compiler in libraries {/*using-react-compiler-in-libraries*/} + +Our initial release was focused on identifying major issues with using the compiler in applications. We've gotten great feedback and have substantially improved the compiler since then. We're now ready for broad feedback from the community, and for library authors to try out the compiler to improve performance and the developer experience of maintaining your library. + +React Compiler can also be used to compile libraries. Because React Compiler needs to run on the original source code prior to any code transformations, it is not possible for an application's build pipeline to compile the libraries they use. Hence, our recommendation is for library maintainers to independently compile and test their libraries with the compiler, and ship compiled code to npm. + +Because your code is pre-compiled, users of your library will not need to have the compiler enabled in order to benefit from the automatic memoization applied to your library. If your library targets apps not yet on React 19, specify a minimum `target` and add `react-compiler-runtime` as a direct dependency. The runtime package will use the correct implementation of APIs depending on the application's version, and polyfill the missing APIs if necessary. + +[You can find more docs on this here.](/learn/react-compiler#using-the-compiler-on-libraries) + +## Opening up React Compiler Working Group to everyone {/*opening-up-react-compiler-working-group-to-everyone*/} + +We previously announced the invite-only [React Compiler Working Group](https://github.com/reactwg/react-compiler) at React Conf to provide feedback, ask questions, and collaborate on the compiler's experimental release. + +From today, together with the Beta release of React Compiler, we are opening up Working Group membership to everyone. The goal of the React Compiler Working Group is to prepare the ecosystem for a smooth, gradual adoption of React Compiler by existing applications and libraries. Please continue to file bug reports in the [React repo](https://github.com/facebook/react), but please leave feedback, ask questions, or share ideas in the [Working Group discussion forum](https://github.com/reactwg/react-compiler/discussions). + +The core team will also use the discussions repo to share our research findings. As the Stable Release gets closer, any important information will also be posted on this forum. + +## React Compiler at Meta {/*react-compiler-at-meta*/} + +At [React Conf](/blog/2024/05/22/react-conf-2024-recap), we shared that our rollout of the compiler on Quest Store and Instagram were successful. Since then, we've deployed React Compiler across several more major web apps at Meta, including [Facebook](https://www.facebook.com) and [Threads](https://www.threads.net). That means if you've used any of these apps recently, you may have had your experience powered by the compiler. We were able to onboard these apps onto the compiler with few code changes required, in a monorepo with more than 100,000 React components. + +We've seen notable performance improvements across all of these apps. As we've rolled out, we're continuing to see results on the order of [the wins we shared previously at ReactConf](https://youtu.be/lyEKhv8-3n0?t=3223). These apps have already been heavily hand tuned and optimized by Meta engineers and React experts over the years, so even improvements on the order of a few percent are a huge win for us. + +We also expected developer productivity wins from React Compiler. To measure this, we collaborated with our data science partners at Meta[^2] to conduct a thorough statistical analysis of the impact of manual memoization on productivity. Before rolling out the compiler at Meta, we discovered that only about 8% of React pull requests used manual memoization and that these pull requests took 31-46% longer to author[^3]. This confirmed our intuition that manual memoization introduces cognitive overhead, and we anticipate that React Compiler will lead to more efficient code authoring and review. Notably, React Compiler also ensures that *all* code is memoized by default, not just the (in our case) 8% where developers explicitly apply memoization. + +## Roadmap to Stable {/*roadmap-to-stable*/} + +*This is not a final roadmap, and is subject to change.* + +We intend to ship a Release Candidate of the compiler in the near future following the Beta release, when the majority of apps and libraries that follow the Rules of React have been proven to work well with the compiler. After a period of final feedback from the community, we plan on a Stable Release for the compiler. The Stable Release will mark the beginning of a new foundation for React, and all apps and libraries will be strongly recommended to use the compiler and eslint plugin. + +* ✅ Experimental: Released at React Conf 2024, primarily for feedback from early adopters. +* ✅ Public Beta: Available today, for feedback from the wider community. +* 🚧 Release Candidate (RC): React Compiler works for the majority of rule-following apps and libraries without issue. +* 🚧 General Availability: After final feedback period from the community. + +These releases also include the compiler's eslint plugin, which surfaces diagnostics statically analyzed by the compiler. We plan to combine the existing eslint-plugin-react-hooks plugin with the compiler's eslint plugin, so only one plugin needs to be installed. + +Post-Stable, we plan to add more compiler optimizations and improvements. This includes both continual improvements to automatic memoization, and new optimizations altogether, with minimal to no change of product code. Upgrading to each new release of the compiler is aimed to be straightforward, and each upgrade will continue to improve performance and add better handling of diverse JavaScript and React patterns. + +Throughout this process, we also plan to prototype an IDE extension for React. It is still very early in research, so we expect to be able to share more of our findings with you in a future React Labs blog post. + +--- + +Thanks to [Sathya Gunasekaran](https://twitter.com/_gsathya), [Joe Savona](https://twitter.com/en_JS), [Ricky Hanlon](https://twitter.com/rickhanlonii), [Alex Taylor](https://github.com/alexmckenley), [Jason Bonta](https://twitter.com/someextent), and [Eli White](https://twitter.com/Eli_White) for reviewing and editing this post. + +--- + +[^1]: Thanks [@nikeee](https://github.com/facebook/react/pulls?q=is%3Apr+author%3Anikeee), [@henryqdineen](https://github.com/facebook/react/pulls?q=is%3Apr+author%3Ahenryqdineen), [@TrickyPi](https://github.com/facebook/react/pulls?q=is%3Apr+author%3ATrickyPi), and several others for their contributions to the compiler. + +[^2]: Thanks [Vaishali Garg](https://www.linkedin.com/in/vaishaligarg09) for leading this study on React Compiler at Meta, and for reviewing this post. + +[^3]: After controlling on author tenure, diff length/complexity, and other potential confounding factors. \ No newline at end of file diff --git a/src/content/blog/index.md b/src/content/blog/index.md index 4a1a165a3..e37631e80 100644 --- a/src/content/blog/index.md +++ b/src/content/blog/index.md @@ -10,6 +10,12 @@ This blog is the official source for the updates from the React team. Anything i
+ + +We announced an experimental release of React Compiler at React Conf 2024. We've made a lot of progress since then, and in this post we want to share what's next for React Compiler ... + + + Last week we hosted React Conf 2024, a two-day conference in Henderson, Nevada where 700+ attendees gathered in-person to discuss the latest in UI engineering. This was our first in-person conference since 2019, and we were thrilled to be able to bring the community together again ... diff --git a/src/sidebarBlog.json b/src/sidebarBlog.json index 26dcdc4dd..84947fdf5 100644 --- a/src/sidebarBlog.json +++ b/src/sidebarBlog.json @@ -11,6 +11,13 @@ "path": "/blog", "skipBreadcrumb": true, "routes": [ + { + "title": "React Compiler Beta Release and Roadmap", + "titleForHomepage": "React Compiler Beta Release and Roadmap", + "icon": "blog", + "date": "October 21, 2024", + "path": "/blog/2024/10/21/react-compiler-beta-release" + }, { "title": "React Conf 2024 Recap", "titleForHomepage": "React Conf 2024 Recap", From e2b2b90c2d3a13a4997d23cff5a8a14a004b6916 Mon Sep 17 00:00:00 2001 From: lauren Date: Mon, 21 Oct 2024 15:02:06 -0400 Subject: [PATCH 06/31] Fix capitalization of eslint (#7241) --- src/content/blog/2024/10/21/react-compiler-beta-release.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/blog/2024/10/21/react-compiler-beta-release.md b/src/content/blog/2024/10/21/react-compiler-beta-release.md index bba93e4ee..768a2e16b 100644 --- a/src/content/blog/2024/10/21/react-compiler-beta-release.md +++ b/src/content/blog/2024/10/21/react-compiler-beta-release.md @@ -50,7 +50,7 @@ You can watch [Sathya Gunasekaran's](https://twitter.com/_gsathya) talk at React ## We recommend everyone use the React Compiler linter today {/*we-recommend-everyone-use-the-react-compiler-linter-today*/} -React Compiler’s eslint plugin helps developers proactively identify and correct [Rules of React](/reference/rules) violations. **We strongly recommend everyone use the linter today**. The linter does not require that you have the compiler installed, so you can use it independently, even if you are not ready to try out the compiler. +React Compiler’s ESLint plugin helps developers proactively identify and correct [Rules of React](/reference/rules) violations. **We strongly recommend everyone use the linter today**. The linter does not require that you have the compiler installed, so you can use it independently, even if you are not ready to try out the compiler. To install the linter only: @@ -100,14 +100,14 @@ We also expected developer productivity wins from React Compiler. To measure thi *This is not a final roadmap, and is subject to change.* -We intend to ship a Release Candidate of the compiler in the near future following the Beta release, when the majority of apps and libraries that follow the Rules of React have been proven to work well with the compiler. After a period of final feedback from the community, we plan on a Stable Release for the compiler. The Stable Release will mark the beginning of a new foundation for React, and all apps and libraries will be strongly recommended to use the compiler and eslint plugin. +We intend to ship a Release Candidate of the compiler in the near future following the Beta release, when the majority of apps and libraries that follow the Rules of React have been proven to work well with the compiler. After a period of final feedback from the community, we plan on a Stable Release for the compiler. The Stable Release will mark the beginning of a new foundation for React, and all apps and libraries will be strongly recommended to use the compiler and ESLint plugin. * ✅ Experimental: Released at React Conf 2024, primarily for feedback from early adopters. * ✅ Public Beta: Available today, for feedback from the wider community. * 🚧 Release Candidate (RC): React Compiler works for the majority of rule-following apps and libraries without issue. * 🚧 General Availability: After final feedback period from the community. -These releases also include the compiler's eslint plugin, which surfaces diagnostics statically analyzed by the compiler. We plan to combine the existing eslint-plugin-react-hooks plugin with the compiler's eslint plugin, so only one plugin needs to be installed. +These releases also include the compiler's ESLint plugin, which surfaces diagnostics statically analyzed by the compiler. We plan to combine the existing eslint-plugin-react-hooks plugin with the compiler's ESLint plugin, so only one plugin needs to be installed. Post-Stable, we plan to add more compiler optimizations and improvements. This includes both continual improvements to automatic memoization, and new optimizations altogether, with minimal to no change of product code. Upgrading to each new release of the compiler is aimed to be straightforward, and each upgrade will continue to improve performance and add better handling of diverse JavaScript and React patterns. From a3656c235e6e51d6d761705e9adad2a00cc1292a Mon Sep 17 00:00:00 2001 From: Ricky Date: Mon, 21 Oct 2024 16:07:47 -0400 Subject: [PATCH 07/31] Add atproto-did (#7242) --- public/.well-known/atproto-did | 1 + 1 file changed, 1 insertion(+) create mode 100644 public/.well-known/atproto-did diff --git a/public/.well-known/atproto-did b/public/.well-known/atproto-did new file mode 100644 index 000000000..ad8b0a36b --- /dev/null +++ b/public/.well-known/atproto-did @@ -0,0 +1 @@ +did:plc:uorpbnp2q32vuvyeruwauyhe \ No newline at end of file From 1bda70ac459659d5ec916b6c130a3e27a8a49b0f Mon Sep 17 00:00:00 2001 From: lauren Date: Tue, 22 Oct 2024 01:55:44 -0400 Subject: [PATCH 08/31] Add link to eslint configuration in compiler blog post (#7244) --- src/content/blog/2024/10/21/react-compiler-beta-release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/blog/2024/10/21/react-compiler-beta-release.md b/src/content/blog/2024/10/21/react-compiler-beta-release.md index 768a2e16b..f5a870b22 100644 --- a/src/content/blog/2024/10/21/react-compiler-beta-release.md +++ b/src/content/blog/2024/10/21/react-compiler-beta-release.md @@ -64,7 +64,7 @@ Or, if you're using Yarn: yarn add -D eslint-plugin-react-compiler@beta -Using the linter helps identify Rules of React breakages, making it easier to adopt the compiler when it's fully released. +After installation you can enable the linter by [adding it to your ESLint config](/learn/react-compiler#installing-eslint-plugin-react-compiler). Using the linter helps identify Rules of React breakages, making it easier to adopt the compiler when it's fully released. ## Backwards Compatibility {/*backwards-compatibility*/} From e628e5df0df29611592a3a15a594f28069966a35 Mon Sep 17 00:00:00 2001 From: Karl Horky Date: Wed, 23 Oct 2024 18:11:08 +0200 Subject: [PATCH 09/31] Add ESLint flat config example, fix ESLint name (#7246) * Add ESLint flat config example, fix ESLint name * Use official terminology * Fix key --- src/content/learn/react-compiler.md | 35 +++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index cc7d31927..df46954d2 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -13,7 +13,7 @@ These docs are still a work in progress. More documentation is available in the * Getting started with the compiler -* Installing the compiler and eslint plugin +* Installing the compiler and ESLint plugin * Troubleshooting @@ -26,7 +26,7 @@ The latest Beta release can be found with the `@beta` tag, and daily experimenta React Compiler is a new compiler that we've open sourced to get early feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it. -The compiler also includes an [eslint plugin](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. **We strongly recommend everyone use the linter today.** The linter does not require that you have the compiler installed, so you can use it even if you are not ready to try out the compiler. +The compiler also includes an [ESLint plugin](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. **We strongly recommend everyone use the linter today.** The linter does not require that you have the compiler installed, so you can use it even if you are not ready to try out the compiler. The compiler is currently released as `beta`, and is available to try out on React 17+ apps and libraries. To install the Beta: @@ -126,13 +126,30 @@ In addition to these docs, we recommend checking the [React Compiler Working Gro ### Installing eslint-plugin-react-compiler {/*installing-eslint-plugin-react-compiler*/} -React Compiler also powers an eslint plugin. The eslint plugin can be used **independently** of the compiler, meaning you can use the eslint plugin even if you don't use the compiler. +React Compiler also powers an ESLint plugin. The ESLint plugin can be used **independently** of the compiler, meaning you can use the ESLint plugin even if you don't use the compiler. npm install -D eslint-plugin-react-compiler@beta -Then, add it to your eslint config: +Then, add it to your ESLint config: + +```js +import reactCompiler from 'eslint-plugin-react-compiler' + +export default [ + { + plugins: { + 'react-compiler': reactCompiler, + }, + rules: { + 'react-compiler/react-compiler': 'error', + }, + }, +] +``` + +Or, in the deprecated eslintrc config format: ```js module.exports = { @@ -140,15 +157,15 @@ module.exports = { 'eslint-plugin-react-compiler', ], rules: { - 'react-compiler/react-compiler': "error", + 'react-compiler/react-compiler': 'error', }, } ``` -The eslint plugin will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. +The ESLint plugin will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. -**You don't have to fix all eslint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized, but it is not required to fix everything before you can use the compiler. +**You don't have to fix all ESLint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized, but it is not required to fix everything before you can use the compiler. ### Rolling out the compiler to your codebase {/*using-the-compiler-effectively*/} @@ -333,11 +350,11 @@ React Compiler can verify many of the Rules of React statically, and will safely [React Devtools](/learn/react-developer-tools) (v5.0+) has built-in support for React Compiler and will display a "Memo ✨" badge next to components that have been optimized by the compiler. ### Something is not working after compilation {/*something-is-not-working-after-compilation*/} -If you have eslint-plugin-react-compiler installed, the compiler will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. **You don't have to fix all eslint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized. +If you have eslint-plugin-react-compiler installed, the compiler will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. **You don't have to fix all ESLint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized. Due to the flexible and dynamic nature of JavaScript however, it's not possible to comprehensively detect all cases. Bugs and undefined behavior such as infinite loops may occur in those cases. -If your app doesn't work properly after compilation and you aren't seeing any eslint errors, the compiler may be incorrectly compiling your code. To confirm this, try to make the issue go away by aggressively opting out any component or hook you think might be related via the [`"use no memo"` directive](#opt-out-of-the-compiler-for-a-component). +If your app doesn't work properly after compilation and you aren't seeing any ESLint errors, the compiler may be incorrectly compiling your code. To confirm this, try to make the issue go away by aggressively opting out any component or hook you think might be related via the [`"use no memo"` directive](#opt-out-of-the-compiler-for-a-component). ```js {2} function SuspiciousComponent() { From eb174dd932613fb0784a78ee2d9360554538cc08 Mon Sep 17 00:00:00 2001 From: Andre Sander Date: Wed, 23 Oct 2024 18:12:04 +0200 Subject: [PATCH 10/31] Update components-and-hooks-must-be-pure.md (#7245) --- .../reference/rules/components-and-hooks-must-be-pure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/reference/rules/components-and-hooks-must-be-pure.md b/src/content/reference/rules/components-and-hooks-must-be-pure.md index 9da65d04a..d3d54560e 100644 --- a/src/content/reference/rules/components-and-hooks-must-be-pure.md +++ b/src/content/reference/rules/components-and-hooks-must-be-pure.md @@ -194,7 +194,7 @@ function ProductDetailPage({ product }) { } ``` -One way to achieve the desired result of updating `window.title` outside of render is to [synchronize the component with `window`](/learn/synchronizing-with-effects). +One way to achieve the desired result of updating `document.title` outside of render is to [synchronize the component with `document`](/learn/synchronizing-with-effects). As long as calling a component multiple times is safe and doesn’t affect the rendering of other components, React doesn’t care if it’s 100% pure in the strict functional programming sense of the word. It is more important that [components must be idempotent](/reference/rules/components-and-hooks-must-be-pure). From b4b33c49c4a78503721039ca1faf79c6959903fd Mon Sep 17 00:00:00 2001 From: Young Shung Date: Sun, 3 Nov 2024 01:07:51 +0800 Subject: [PATCH 11/31] Replace contributors dead link (#7272) --- src/content/community/acknowledgements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/acknowledgements.md b/src/content/community/acknowledgements.md index 9a981efd5..760076d83 100644 --- a/src/content/community/acknowledgements.md +++ b/src/content/community/acknowledgements.md @@ -4,7 +4,7 @@ title: Acknowledgements -React was originally created by [Jordan Walke.](https://github.com/jordwalke) Today, React has a [dedicated full-time team working on it](/community/team), as well as over a thousand [open source contributors.](https://github.com/facebook/react/blob/main/AUTHORS) +React was originally created by [Jordan Walke.](https://github.com/jordwalke) Today, React has a [dedicated full-time team working on it](/community/team), as well as over a thousand [open source contributors.](https://github.com/facebook/react/graphs/contributors) From 75e4d400bedd1e200511963f26919f688ec92157 Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 2 Nov 2024 17:21:25 +0000 Subject: [PATCH 12/31] Add Bluesky as profile link option to team page + footer (#7273) * Add Bluesky as profile link option to team page + footer * Remove my X It's cleaner. * Add Rick bsky --- src/components/Icon/IconBsky.tsx | 24 ++++++++++++++++++++++++ src/components/Layout/Footer.tsx | 7 +++++++ src/components/MDX/TeamMember.tsx | 20 +++++++++++++++++--- src/content/community/team.md | 4 ++-- 4 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 src/components/Icon/IconBsky.tsx diff --git a/src/components/Icon/IconBsky.tsx b/src/components/Icon/IconBsky.tsx new file mode 100644 index 000000000..6645152dd --- /dev/null +++ b/src/components/Icon/IconBsky.tsx @@ -0,0 +1,24 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + */ + +import {memo} from 'react'; + +export const IconBsky = memo(function IconBsky( + props +) { + return ( + + + + ); +}); diff --git a/src/components/Layout/Footer.tsx b/src/components/Layout/Footer.tsx index 4e19039ed..9cdf256fb 100644 --- a/src/components/Layout/Footer.tsx +++ b/src/components/Layout/Footer.tsx @@ -8,6 +8,7 @@ import cn from 'classnames'; import {ExternalLink} from 'components/ExternalLink'; import {IconFacebookCircle} from 'components/Icon/IconFacebookCircle'; import {IconTwitter} from 'components/Icon/IconTwitter'; +import {IconBsky} from 'components/Icon/IconBsky'; import {IconGitHub} from 'components/Icon/IconGitHub'; export function Footer() { @@ -370,6 +371,12 @@ export function Footer() { className={socialLinkClasses}> + + + {title &&
{title}
} {children} -
+
{twitter && (
@@ -77,7 +80,7 @@ export function TeamMember({ {threads && (
@@ -85,6 +88,17 @@ export function TeamMember({
)} + {bsky && ( +
+ + + {bsky} + +
+ )} {github && (
- + Dan got into programming after he accidentally discovered Visual Basic inside Microsoft PowerPoint. He has found his true calling in turning [Sebastian](#sebastian-markbåge)'s tweets into long-form blog posts. Dan occasionally wins at Fortnite by hiding in a bush until the game ends. @@ -62,7 +62,7 @@ Current members of the React team are listed in alphabetical order below. Noah’s interest in UI programming sparked during his education in music technology at NYU. At Meta, he's worked on internal tools, browsers, web performance, and is currently focused on React. Outside of work, Noah can be found tinkering with synthesizers or spending time with his cat. - + Ricky majored in theoretical math and somehow found himself on the React Native team for a couple years before joining the React team. When he's not programming you can find him snowboarding, biking, climbing, golfing, or closing GitHub issues that do not match the issue template. From ab51439a549ec43ffbc9413000b7def820a8982a Mon Sep 17 00:00:00 2001 From: lauren Date: Sun, 3 Nov 2024 10:05:48 -0500 Subject: [PATCH 13/31] Add poteto bsky (#7276) --- src/content/community/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/team.md b/src/content/community/team.md index 2a5950fa7..407448f48 100644 --- a/src/content/community/team.md +++ b/src/content/community/team.md @@ -42,7 +42,7 @@ Current members of the React team are listed in alphabetical order below. Josh majored in Mathematics and discovered programming while in college. His first professional developer job was to program insurance rate calculations in Microsoft Excel, the paragon of Reactive Programming which must be why he now works on React. In between that time Josh has been an IC, Manager, and Executive at a few startups. outside of work he likes to push his limits with cooking. - + Lauren's programming career peaked when she first discovered the `` tag. She’s been chasing that high ever since. She studied Finance instead of CS in college, so she learned to code using Excel instead of Java. Lauren enjoys dropping cheeky memes in chat, playing video games with her partner, and petting her dog Zelda. From 8201e7e9203321bd1648c3ab0b76ef943c9ec3ad Mon Sep 17 00:00:00 2001 From: lauren Date: Sun, 3 Nov 2024 10:22:10 -0500 Subject: [PATCH 14/31] [ci] Speed up CI (#7277) * [ci] Speed up site lint job * fix * also speed up analyze --- .github/workflows/analyze.yml | 24 ++++++++++++++++-------- .github/workflows/site_lint.yml | 16 ++++++++++++---- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index 2a905a0df..b1ef428d0 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -11,18 +11,26 @@ jobs: analyze: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20.x' + cache: yarn + cache-dependency-path: yarn.lock - - name: Install dependencies - uses: bahmutov/npm-install@v1.7.10 + - name: Restore cached node_modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} + + - name: Install deps + run: yarn install --frozen-lockfile - name: Restore next build - uses: actions/cache@v3 + uses: actions/cache@v4 id: restore-build-cache env: cache-name: cache-next-build @@ -41,7 +49,7 @@ jobs: run: npx -p nextjs-bundle-analysis@0.5.0 report - name: Upload bundle - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: .next/analyze/__bundle_analysis.json name: bundle_analysis.json @@ -73,7 +81,7 @@ jobs: run: ls -laR .next/analyze/base && npx -p nextjs-bundle-analysis compare - name: Upload analysis comment - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: analysis_comment.txt path: .next/analyze/__bundle_analysis_comment.txt @@ -82,7 +90,7 @@ jobs: run: echo ${{ github.event.number }} > ./pr_number - name: Upload PR number - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: pr_number path: ./pr_number diff --git a/.github/workflows/site_lint.yml b/.github/workflows/site_lint.yml index 34ca6d7b8..36f7642c9 100644 --- a/.github/workflows/site_lint.yml +++ b/.github/workflows/site_lint.yml @@ -14,14 +14,22 @@ jobs: name: Lint on node 20.x and ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 - name: Use Node.js 20.x - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20.x + cache: yarn + cache-dependency-path: yarn.lock - - name: Install deps and build (with cache) - uses: bahmutov/npm-install@v1.8.32 + - name: Restore cached node_modules + uses: actions/cache@v4 + with: + path: "**/node_modules" + key: node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }} + + - name: Install deps + run: yarn install --frozen-lockfile - name: Lint codebase run: yarn ci-check From b214f78433756914ec32526dda48e76176dbf4fc Mon Sep 17 00:00:00 2001 From: Josh Story Date: Fri, 8 Nov 2024 13:33:37 -0800 Subject: [PATCH 15/31] Update socials for Josh Story (#7282) --- src/content/community/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/team.md b/src/content/community/team.md index 407448f48..221a8db87 100644 --- a/src/content/community/team.md +++ b/src/content/community/team.md @@ -38,7 +38,7 @@ Current members of the React team are listed in alphabetical order below. Joe was planning to major in math and philosophy but got into computer science after writing physics simulations in Matlab. Prior to React, he worked on Relay, RSocket.js, and the Skip programming language. While he’s not building some sort of reactive system he enjoys running, studying Japanese, and spending time with his family. - + Josh majored in Mathematics and discovered programming while in college. His first professional developer job was to program insurance rate calculations in Microsoft Excel, the paragon of Reactive Programming which must be why he now works on React. In between that time Josh has been an IC, Manager, and Executive at a few startups. outside of work he likes to push his limits with cooking. From 3246989c210dc5d4239b0638b2418572ba123ad4 Mon Sep 17 00:00:00 2001 From: Bartosz Kaszubowski Date: Tue, 12 Nov 2024 15:35:32 +0100 Subject: [PATCH 16/31] Compiler: Update link to Expo documentation (#7288) --- src/content/learn/react-compiler.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index df46954d2..4c3d6f8fb 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -315,7 +315,7 @@ A community Webpack loader is [now available here](https://github.com/SukkaW/rea ### Expo {/*usage-with-expo*/} -Please refer to [Expo's docs](https://docs.expo.dev/preview/react-compiler/) to enable and use the React Compiler in Expo apps. +Please refer to [Expo's docs](https://docs.expo.dev/guides/react-compiler/) to enable and use the React Compiler in Expo apps. ### Metro (React Native) {/*usage-with-react-native-metro*/} From 891b20c935d297e84296ba63608f935acbdbf2df Mon Sep 17 00:00:00 2001 From: Josh Story Date: Wed, 13 Nov 2024 13:50:58 -0800 Subject: [PATCH 17/31] Update socials for Josh Story (#7290) --- src/content/community/team.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/community/team.md b/src/content/community/team.md index 221a8db87..b11925407 100644 --- a/src/content/community/team.md +++ b/src/content/community/team.md @@ -38,7 +38,7 @@ Current members of the React team are listed in alphabetical order below. Joe was planning to major in math and philosophy but got into computer science after writing physics simulations in Matlab. Prior to React, he worked on Relay, RSocket.js, and the Skip programming language. While he’s not building some sort of reactive system he enjoys running, studying Japanese, and spending time with his family. - + Josh majored in Mathematics and discovered programming while in college. His first professional developer job was to program insurance rate calculations in Microsoft Excel, the paragon of Reactive Programming which must be why he now works on React. In between that time Josh has been an IC, Manager, and Executive at a few startups. outside of work he likes to push his limits with cooking. From 1d1767f412f1f7f02017a53b684a8b239bdd7f00 Mon Sep 17 00:00:00 2001 From: Golamrabbi Azad <35021384+golamrabbiazad@users.noreply.github.com> Date: Fri, 15 Nov 2024 02:03:11 +0600 Subject: [PATCH 18/31] fix: broken link of react-compiler reference to nextjs docs (#7285) --- src/content/learn/react-compiler.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md index 4c3d6f8fb..5362d69e1 100644 --- a/src/content/learn/react-compiler.md +++ b/src/content/learn/react-compiler.md @@ -278,7 +278,7 @@ export default defineConfig(() => { ### Next.js {/*usage-with-nextjs*/} -Please refer to the [Next.js docs](https://nextjs.org/docs/canary/app/api-reference/next-config-js/reactCompiler) for more information. +Please refer to the [Next.js docs](https://nextjs.org/docs/app/api-reference/next-config-js/reactCompiler) for more information. ### Remix {/*usage-with-remix*/} Install `vite-plugin-babel`, and add the compiler's Babel plugin to it: From 84f29eb20af17e9c154b9ad71c21af4c9171e4a2 Mon Sep 17 00:00:00 2001 From: Ricky Date: Thu, 14 Nov 2024 15:46:05 -0500 Subject: [PATCH 19/31] Update React 19 Upgrade Guide with pre-warming change (#7292) * Update React 19 Upgrade Guide with pre-warming change * Better captions --- .../images/docs/diagrams/prerender.dark.png | Bin 0 -> 68802 bytes public/images/docs/diagrams/prerender.png | Bin 0 -> 70062 bytes public/images/docs/diagrams/prewarm.dark.png | Bin 0 -> 68742 bytes public/images/docs/diagrams/prewarm.png | Bin 0 -> 69316 bytes src/components/MDX/Diagram.tsx | 4 ++-- .../blog/2024/04/25/react-19-upgrade-guide.md | 18 ++++++++++++++++++ 6 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 public/images/docs/diagrams/prerender.dark.png create mode 100644 public/images/docs/diagrams/prerender.png create mode 100644 public/images/docs/diagrams/prewarm.dark.png create mode 100644 public/images/docs/diagrams/prewarm.png diff --git a/public/images/docs/diagrams/prerender.dark.png b/public/images/docs/diagrams/prerender.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1e7d67e131efb301d447a6b2eaed868d9d80b3bd GIT binary patch literal 68802 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

Kc3({S^$44p?r>$A0z32T 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


BiZKsyY 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 literal 0 HcmV?d00001 diff --git a/public/images/docs/diagrams/prerender.png b/public/images/docs/diagrams/prerender.png new file mode 100644 index 0000000000000000000000000000000000000000..ababa5493a1744e613c8aba6eb03c988fdd6f108 GIT binary patch literal 70062 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Ð7sZJF+0*)T{a06SrAA4|t(MF7xF~sZR=8+0|+% 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 z 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 J{CPL}e*o15W=jA7 literal 0 HcmV?d00001 diff --git a/public/images/docs/diagrams/prewarm.dark.png b/public/images/docs/diagrams/prewarm.dark.png new file mode 100644 index 0000000000000000000000000000000000000000..46140603907e327235964dee397b5032aafdf9a6 GIT binary patch literal 68742 zcmeFZ`8$;RA3uJ#Qnnn02$iCfkP}Asa#SjGS||pg#Wus(cUmkFPIaX0DkKeAXT~yQ zjT%Juv1i}OzRc%&TY7)L*XJMj{_wr8>s-w_*STN!Yk4k@=i~W!_2i1ydA8kryAcFo z)41^WRRm%0MvyIi%sb(~D0;it!5_P9F5H4Y56PkbY*BwHbsPTU7Q3tG&mt*R2L|C^ zw%`8EDNbKQB%$O?2e)Z;ttV!oE$@0N{FF|=Usk+t5o{v!S8L-NKi&PFC&L2A**G9Pt^ zxBfmgN(`%J9KG*Fa~fI0T2^Sw+W%gNXYSs*_RB^;h2w17->hwA$e3`K2#sWE*)UIdjLEZ}c&S#V*lAXF0rt5LCnMei-?HaAc&Mv!OvS~`&I6xQ zzlP*Ltok~Nk_6SY{*Fw~=i!*8qX_=lU zRLB&{!nU@ywvJoa+-yf>_kkx~{GR^0Op+JSf`h7>9 zyE2oQ`^&B=h|8e|C=lQ7zEowECk8X$F_t2lAtn4T3len(%%|moqwvU`>?b`JY=l`I zd$8o3A*^^V#o;)*zX}%k!hGeY`k9>#bEZq9A@_T_y2H`UWc-X-u?J6Z8xBO;9ybRIv$i%GPhL-BcyW$LG5yLOdsMG(YY8J&hTZkzQARyxH#F zbLRO20_dF1&E{JF*{b*~$aZ=%YnrEMe0j`^*)C?)${F7kXp9>@i{Pt^Ih1&*gEZ^i zUW|gJv8acXEUP@FT*h@aL{)!E;twP<))m2|sLrJvbZ416%i5*P^-&&mna0d5?H}2k zaJbQ?&dyG^qWY8gF*Tuu(FuN`RU(2AyMLcmI7faY&A0&mksP=8u;a?Rhi+Jl!K?!Q z1jAWY+GFSBHx^0X*Io;$(};x4+-2&5W*4zzX)b-Ttuf}qow=xcTag+^bni;WvtvPkgs^jjiGM~LY4+9GGxr)hzH1e==>anLR2o8#tt{&J48Fi%fZ z=KsLxtuBtaC%lvJK%r-KY5c2hRBM-r?sZyOYZe+LKE;geDZ(j!6cXbjm@?0Gb^rV( zxqNlLNoe^Wn9WSX_|n+P6+4xB_W_EP;ZkqkwwWj6zSUQl(RXX`Low>h_V4{{Oj*WM z7_VRFZQo9w>%PB_G2~?_^n{M(Ri#b zhOMy8;l+)9i)QERypT1#SKhRHw$k0*G!L5JyC<^1!{|23%gW7NS_&`?x7lLGqafYm zsTk3^>Jfj{+|d2(+B?~fEB85j`uBJ(i+btpVjfBRT}HG1SL4#?~bqdl;CNiLs+CmD>8Sr$7`{t ztS2QUg`}meEfmC}RZ>1PnEHy##|DNl6Kft%5Akzl#w=c$b^EkOA~QH^y1!V3(Ofwb zqwTH>X8-V@1TsP-FJk{3+k1#k(e{!>+!7a!Ru#P@44pEDpMb3*0`HS{VTda2lj)y7 zf1bP3`e^d=>r;}x93Fo&^LWqxx-`z1ahC|p$;n~A6A^Q)%0T?FwREvxLXQT#>)n7c z7;zurSUtwiIE@gGwuddkCf=KlbGkPd9lRZh?S&{`C|Kc1@VuY>Cr=0?%xJ!Jg3d$b z_0H#s2~=4*722oPJ965x_cV+qf01>cL8E_!Y*b(zo!-~ir=Ou#9$>c?5^w4&2_dlp zrG3xbCG;)7-4#tpOe{z>D-9Z=O)TU!{ospX{)w9FhxCqH9o$3l2ftgp|0Hdz314kH zAG6CY#^S%(l07NaB3o7Y;S9Z%{%!kp+$X^(vPUy@D8}us;Uy&rD0fH-@{CRvp;#yLeR)7slW*>TvP5QP$NU#-85Q^Y2%;B_9!=2T6(f%^ zG$3(!%#*g(xOxuiD)Vw1nbH5to;m<;3%oTe5@K}ETJb3Ku-Xb;p`@Onn?&LXJCy}TjGNX0)!c}Hw2vPwFmr``fj11l%W`nucgjbeU z*%{40m&KZK2`zd7^WU zR$YxLB5Ah1QBo$V)C992h^pA>TO;2*7Ef(4O%rgY3tSTi95e;51`6S5j{ za&S=kHC(Vd%+V-RmXwy}tWG!qW2g?BZ=df=VVm6|J~GW>Waa7n7lMeRcycViO!8}t zZ5>NXk!T8AcTN|C5>?R);bk(KT;l`ylScaTc7gF4?Og^cR$$iN*2es-|T zQx>B<#p5-}!!#Ut?Wf({I``&Rm(Y;q^Iw2K;PJC=xAb#G6eVE~#XpK7$lTSWriEqH zrDrFxvylS13~IMAYj-qS*VdeSenfIg?D^jdvc3dUe*ARW(s%(QuDjZO=!cPCzw)>; zHxh+|W31@QtA1=Pzi?q-Xh?n{sAE2;Lr)@%amUk>`aK{*!}K7DvKLd8Oz=bv3m$vv zGgyR7x>y<<+8>*bor}y`a~E79GfRDh&5Oeqe(XJY@k6~uZDV7jS@Ft>%KTddS^6xx z`b%=^Al|;S@BxNMBr55vglfNP%6>&*PNzM|lBO@=P8z?Y3G-M&&UFNHbG;w$`R6HFfpUCm7wxq7K zJg~^(EL*w~B;bTjytJUl!&N-0vZW##2GBDu@r7zT$g zU!Pm7-6lr2{{*-!$e4auQTo)W7uS!6D&EY@%>3_qa{W8OFCOpb?W)DyrI13;sgan~ zTc!oMxe75{OiWDE6&W|lZ#1M*ElM|5Yoi2)1dn%c{SROMy0aQ9H~EUmQrE8&b*5$M z_oH3<{)T|^z}a(jd0~RyuORB*+SV5Ji{qEm%&fg=zDIs@HYqnZQNiBH!H6rerKSBM z1|!>Jr0v>USvDIgrkmZ+*jPs-isSr{r9w1~Wo1np+f3N_+jU>lR&p2_Uu`Q`vL&~O z6c`wNIV`@FoW`lk46zQL*y-P^eSi3|{&wHp>cV(%5fM?*wF8--=z3eaAbDb0)67ZA zT|rK+>D0-Z#~&HL`7j?;kHtT7_XF-hh(V( z3W|zNPNEM*G+kZF zX%rA5w;rNft~$B7zWCl#z8DfBI2vfAX7-Piw;ROUb|yix3PVBOecpz(TjVU6&NjJp zT$!V1?v}f!;zZ#vN6C1Bj%RS;On84GATrZtktZxSFKcO)sV&Ue#$TOOTA$UYkj+Zd z{=Ky3i^J~vVL~Af-Zc5Py5qpKzngfC7A@4U`}#4tm5mjQNAI*rbsFf5i(WExvg)kq zQd5d6Eh&iMEu>}VKO~L#@ZJpR@FFfAco20W+9fWnqpt4MbKLW*N&gl2zWmzj&K|T> zdX{IVu~F{F1_@w)%-Ruv5Ipv=yhXT{>TPQ3kBsPL_X@s-N%{e(J*@hx{v7=jvCW@f z-_Xz3*VWILomApxAZ6ve-1MFLV3qo_H!KWumW6l!{z1#o0wJ@~erEcIrLkPe7=?_} zr(Q=yuw1)#&0ID_w(rN{0kOv$=khskfqm_}pR`LluaNn2Xr(#@T%uY(&(LAJ&h2r+ zWjXMp^#^q+cy4ZXcJvm@80~3*se-fHC5vEliFNvawXhqKVXFS%lb zHFTfnW!gI`sRmjYK7C^r7!s&ca@x+;_OGa@D9!W*>8R-FDx?0Mvpl8UJW%$oJy8|> z6YIYO-ZO98*A?5;ggJGJtC(bLZvJQRyX(h~4i67k3=Ek4(W0ttZ7o!dmw1mF}DIGWWbdd^qH>H$bN`^R$F^Ei#pb% zYBkO_R})w4=j!Xr&eByoWpZk4V&dQN8!bhFlGIlxBqaKXWIH=MjVwKyQR}eyw2z|q z?>&E=N7=Qu(3-gCN2+)43nH7d!mR0#Ku#(vNB^+MT3(*)Dc7fR&N;k2-wI*vOEGy) zVBBl6G%UpmhijX;t;2d;==9;H3ri3=hLpTkiyHEsJqt(u?e1W29;$i`dBY`R`Nxmz zR3rasT>gGt;f)N&RJ-Yr=o()Y(2CDMyv)+WVePt0p8TXPjj^=0wu%ds2!I(4kB(aA z&SiBsx~CSU`EdvgnJ32nRg&4=*%><_C!T5^d^rV6d5$`h$ini?Ypw3A9ofroxYy5c zBp4&R9v0=VeE+7am~#F2LXRzl4(DU@&w=~Z(QL#a)N$0*{90#~h{b*!b9g*HUQ8@G zqDw;FeqPndTb3)P)zZ>3LXTj6mk@kFKtNL~QjSn(nSL5$zL}e1i*N4ZU;AQgacLRV zbq|TTON51m#pMDfdok$g)66@8Mqn(qseE_G6S}(M+UGm|7<>MRi7B(I_N9q!T59U~ zz+*&-ioQyl#b1MW?CelaxzvpfrzHnbvf9rIk)CgGp8^+tZ=%KSZ88tf_S&AlrLTWU z!iai60!!WlIc&NotwJ(0R`~o*H-$sD`HFqtmY-j&id?7+wc+_SC$y(19w(sa{Heb- zUTk=a-j6R|E)0x~X)P`;o+awAz?r2T!Uz!x{xu{PYpxZ(urB!!Oz*}vUT1A8!`A%z z^@}YowrPlmR30M4L4+XmsLhXEaOjo#-KE9FT#f?+1!Cj0nYlUF>X2+1o7;tRlHx>{ zw1BHgdr?TCE}oJrf`5!wqUh-VVPrOb=?XH3zkaP@Vq<1+FYR?;uE){RQmnbXU8^ce zq0u&oEG%4{A6I1k6}3{W~vS-AR`;Zq!oL-EA_NA6`YH^(v_MxX0b#?^_>~ ztR#>TAh-4<#Asi!>g%#%t0S;&Dq!Y<+}zwn9&>GBF$V+%*@-_3A8a#FYEu#*#aew2 za2u=*9kpSSVFi`hz**N2Z%-{5{@ zw;k1Z&P{Vqo7PTB#2GQW(|tC~yz3v@mPaJ#!^b zxVkDs#VUUOydy}CdiBbTy**(@{p9a6c)Erp0gE#oKTH1p>zDoFHkFBO>cv*_;I3Gz z`{_t!5Bbxszs#CiT6PoPB$6)GOeu6$y>!CO_lowv?b*%iq|KhqKGAt*u2xwIaXpWW0)q_{u|i6%(U<@7}$s z)6$yLfBr9)Oo^zheMpt*18J(%mDwtE<6Y zj1Q@)1qyFvIAeoOh>QC)i3sszd=V5OXrU>=R1ClJ{N2V`4xAJyc(ZOcg`Rthvt~}> zh5h+8wX_n%#KZ;xd+4(66Hs!MR>nW+tWjkYQg@vckgMr%SY0k9BC4181qG`}b8SvW zEdWBt%PICYHYa7jiVCd^oaYa`b;r(neRpD~%{I}zY9ppiOH)@l&{THv$OlaettraXQToTI2dZt)F3-c+Z&#^|JlV`C;-u?h7fS&%HCu`e}8{2 z;KW+M8lv%6|NNMm>K7Cg^oc^*ucz*$ZQX>)6xo{T!SyC+ZEdFYA?3qDvo|8jmGA@?1T$9s?OUe$Kt^J&Wk;S@)G1zGcDG&0T7TC&Sa>r}b%9w^gW?V$oeibu=x@)5^s(qe7C20- zw=lka`=EH0wzhWS4EG{g6Ro!45jejY3Dk~CasHPObZ|^7;H3)Ec`mJ2HaI>$et8l$ z+jU{8_Z?QkuerIo46Bb_Pa(*F+-9dMD*5|2p5n7o(tAr~3y%2)oI7`JEAlC$?`3OU zqP8d`n8wGr2=3fHo6dV>^F@IVW&?o<2?=Mj^z!?b0j-!FjnHpxHI8Yb(=Tj8aKcru z!L|HT+Xk1Hmu2iMo*yZlXjz9~H4j|Z&m0l>)AwPD%HCqN_^V0Z16nWEj?(tzEERcv z%E}V|xT9ugtu*d(0wn4RSjoWnI0r!)mm|{g*nQ|XppoX=ED5gL3F8R^i`#^Sg^kV3 zj%7Za2_kyb`A7KLcPx{(+CPLHsj07bC|1-dBKQ=lI89X*UfG*@-5mE0xq;iH4NCI4RCpwvQ<(eRg*vPnimjK^$n85bFQo zth|$un3xEq;`-34=ZDtu4`TnW$v@(V23kx?OJgvN%)6uDX!C7*FSh%)9yg|=R%nE! z*qVz$wC=|42MYlAum>C|aNxk@p2Ix<%ai|Y#_0Y^wKHkN)IIzJ$@Q%K0#^8PH>*L8 z``wPm*BTo!GTmD7esYa@BHAKkR-I1`b99PAZ&6_pqvUVi?s9490t{d8;xYZn~{Y{DcA z+F6mz(C^>BH~I7PWSV`8Cp-(h82`st8~#9}^-0yZ{I-?k)4bOu!isBauiADM`79Gy z_u=q(Um~&L&p3ly2F;LON7$hGQF=+BW09ri&vci}v^VP5lJ3sWkBp6t4*?zEd<>G_ zm+I06I(hS84g_t&p7(+WE}97AEYqwnQj~h^Ee`bmx9W-Oq zpCaYt@aa`h?8Nxv)QBHHeq=&g&P58JKX-0w1#;FMnCk18m}(*I%a^758WJ{`A4K5X zrn{etSFe$66-mpI9OLPVgICIY&>JGjR_NhcJ*sj#N661`75m3?wXccP@#0Q4tx1>3YRR?eJ-jgz-@Mf zl3VMWOQ9TEP;b>UGMZbtbcvsj?_z+DIFRn$vVbBjBSVPOGa^`r&7HisIn!QJqXJdRh>Z`B{9*jYLeyXK~P10w*B=Z~M)&#{fS+d5~TK)$Iy z9hpO+ydDpO!c~x1ol0?z+Sq&5{_mUi{F?7fEHqr~Ei8t@UjzmQ#?|BSR_`EPJBb&% zrhbgnZ}w-1cS%s(?<$Gwg~Uab{JXd?&9j4GZZ36`zqN-2vdY3R?z?}hy}|nQV^96& zb;!f~cQ3_XMct&;=55n#;|Cp`23cKQU5r|Uyw~b-UrUQm?&3@$xMPkh6~_o}DyT|b zpvKRD5&g6?i#!Ep$sZ^PS^YgAuGYSWbsI$F12;nk(}(-k(}h=9ca=6!dHH}V`BKdj zL_QxPh+7b;w-Za|=jR`8jiZ&MEM^>uyE(zy>ndu7fGoqbz6U=95AA-Z93tjS&0FJ>(SV#BC^!ur6QI~VdD;8Z0_F0 z**Q4eC_W}WzPvCUVQIg(6xEiEOLl^2zDxi7|F^$#LLRqzd<4WRajd((DB8!i*2vFS2u`##5-IXcQhv^ohv zQ$-N0LEo-bTzc=el)ykqLwsppW7E|Bf^3u^UQzHc9~{ZKht>PXJ-B4N8o}Lx%xCUN zud92Z1>r-mykUVnp&ofHqJP8O#NncTvsLu6{vwDME} zw_kJ=8A+QDa~`8pW^^nTtm4{E`q&Qs!A(iZGT-{=nilwCIJNK1-6%(@*Z&cM^UV(^c z#r!j!#{|K6GL#t0uV1I&!I?Csu+ zGa9y8AFVAcJ|ycAMWEt@guxPY63@zm!{K}!vnXlLs6gASbbk(PEe{qL9;|%qc5tVS zE;yW|K~8P$md5!xyD@rM8O1J{pNWIbUWiw&rVW5dePd(Tkr``t@->r#1Uoz7eA~Mo zOWmb`5yQg~=Cg~3-(AoTq)n;|j{$Q212Qwz%tk8HBXsvokrhpn#FG-M00p zckYWo9trDGPQ;nk9oY<32&S8zmG$T6Ryk5bf8%Z3W^#AX*4e%eS#MkK{TvIOfh!VW z{N?3kWkrxk2c)GAf{PeYmY2I(!k|nf2|mi`lC3W$@h56a8U`@N99g@zesW7wQm%TP zs2zicKEmlN!4l1gv*h1g?7zQFDgZ|&jNBm*($Z97OAgC+S3&=*3h>#xSC$z>y^Z|J{)21X?gr#$9I5t+SFR9sz83#2^)xpxkN)fo z{hpMn+u+p$;Z|FmaX`l?eY}_b9jHNe;$^_mb@vRhN z6O+S4o#db^cvda}6;H+eP#GjACvQQ>-@&WppcKx5PJ>Et;4Nvfvt*2A?D}5EuKe$W zkLXO-KRT0^m5P-}Y?cLjE)iILJ0T=59iW-b>_{_OrIISngO!%b0$->#Y&RM#zLDlK zRer~z>yIA*Jo(L+9|nCU`XbNX~MbH9YR_ztAAPe)gme|oT~>84evwy226lwBGp>6IzK=QZ21m-ycqaInSC ztVn0imd;W`LqnHW;&?>@UWSEjLu{^TOk+<2-2-d0CSTy+_;&yAZ)07K9jhp5pqd#Q z$9?x#K<5wi_EyB^ZQp5I2&Zjy`sMJ}USZs3O4tF#XzU?~BX@tLnU&Rvn4A5u0dTlNfp%5~kxq5%j-gsUxQTV&SPm_i2#?j))@JcA zvu-I&2KT~eemPJ0CvaX)!j|)Vcwe3QAEZ8=wKu)1-g0jAo*n_01gJ+q?Mx$+-4^c% zeJqw0kPOYvLJtDMg3e}->VH@!mUm|W&3)!2mEO{#_t(jj|3bf{EUjs3!(>s407~2h z!ejv8S17<=f2*$c18zrKRDBNy7rjB-4IKMzdB-&Cj^KycJSs*;tmNh7UI7Vr6x`T) zhF?H{4NAT(NYgFs$8I1kG$K!BP%@ZX`&uE`okK8`oUP|JYrWrPufVas2S7F@#Y!gW zB%>rlPk7T94?kgxw=PCj_9YW8gChNB*jHl+58u9hD`Ca2Z|47_=NQ{msr%SQEc9Y~ zi>^f2^fq8WR1BrNp_#A~N^nB3BE$who>YHVSJzqyG~M>fsoc{z>~`Vxk!lFP{o)Ge zP7C~CU=W$0e>`-mTwP;5?9an7=L2`TPOnMy5Y_wt zD=rW7?j=Fafq-6XuZ*G}q>y&k?k<&F3N~#j6=o(!+1K>p<#C7}H z)WFNsAeuo2O&H4D(Gcz;xrlzJ#wY_5cJd#-Y z?vYD`v;eEI3ZB$2eO2#3@#F?|FW{d%oTsa+9?K@&`#ouj$;%TQ-DRJyNUNv_0jlbG z`0Uv;kb%UPB4f{l&$|jacdkBY%paRC>?-y%-GkvQ+A-!k-%<;`(0xXh=R$;ry*eK> z3i+p=QOeIZw3~h1cls}h+i9o~f>8lLvo3*p;!kesrrLDif27B;oe%%g`0meNT64v! zMEq%Ra9=9`^-8o~26&})c6a+$x46Va%#+kJbNORUg=ptw>r&ao#DvV2Rw(J`JrUE)lR4Y-1p0EtaS zZ3NO-+&%#zC5gu@neWiHgrJa83(tTvjW`LJzDmEj=M8t-U1bT|XAPpQCX;J@H1dr{ zkNiN*CivTUZ?f)$oLtt!D+pDZF@zyN`H$TOI=39c#@-c>cYfdBl=iH>kXj3nG!d6v zZ?Wop?_Pr8T3gO-JkC#$RdtD1(ft^LjH0qs^g)^J+V{O;56LJ2ID=C1!i||LSr66x zIA+X>cC?(aDiaVCoN~?5E>S;$((8Z)!-LRNjx!uVcXPI7CAB~j88w~)F(;zBw5F;0 zOU_vi88w~w)Q<{bM*q~TQ$&+RtDFva-O2A@|6gy+&-|JdIUmfNwPn=Q+4(&*^YxEf z_yw@&18vd2MBogBg7hQ?6UNHUF3X+gZ-+ZT3%m`Z6&k);7Wu4-i`IGznJQwMxiXEqV`?p@k37?py+{z1wPF`k z-rG=R#H?y5#vn0hG9ejmXwI%Fa`)eY%zkMMQ9c7%&Xjs%e!F~mHiHLtl&Vf7S8b(Qkd_c={&Bms*lNw6+or4jY1%<1}P#z zo%cO66WA$Akw-z_%Ot|63+1=bLT<;(3R9lbj!fbsCXU(d@>MfkEpmQz<{2{&2Oi|u~BhC`JWx(9lkua$N+zMj9z>iaEFK1B};_ZIAq znR$9Dd!2-^XcEyeSeH0mp4OXs188>F@!e+n+n9Fd`Hl(`2!X)NWlijZYXM^ zn>LTfXW6v%ziywd65@a@-Vr;K*YCCXB#K=ZystKolNp)2;#e%UlfX|T6M88X)~?qO zJzcB|eq?nioFgh(B@8AK+q(}(Hup%>BO2OyLbogPIhCrsMI;vI;N;-OHms`PV~I*O zgd)PjFBa)0-a=P;Nn1t*{84VXo00p6cf-_MP^ey64Ytl*waF5E&xGi`0@I_rHEy3z z@EVI@igg&R@m*{9sO{2D z>feZ-Hr8V-N0vU21aBj_!#cl8u{S{knURrUjKdK*x%r@GCZRO2v-8bRA!OvBgbpWQ zBsaI*SLdg3vZMq;FpcAgM&u=0A`CF{WMrhwuPId-)72}#v=XC}RQ%9m zC+@|0C_L#p4AkbQ3_y)Rkfv}`fR+Gc^_QEpx<{J!yx~!2LEC2|p^N?D?bJF-1*YIn z_lb^W6X!J}r}Iy`%(ZGSyUxREm#iHtF3;u>;iiH(l=p@0{$kYzTz&jtC+-uv3>6m^ z(N9hR5mkhvIm18FrO=WrRufCxc2xb6ks$Z+u&+VWY4z5iZUFKKno-^nK!h|}T9n{U zI6lKh*@#=gtP7(nJ(Y;Q5$FCRzHQ zn9AtXP;kB=paAK1VE)pYJ+zcL8KDqkx{%xkendH=K|PigtlN~S=qTpXgbU_H0aD#R#v(N zs?5_mR+Wq;-A5ZeX`hjrvejAZ0(YsJ+0~)y)lX?Eii*n_kni<@T+m-xS<&CNZCfk! zcFZZ*_Nw4`v|~u>aUf8M)wyecJM;0#+>g2Y5l%Z}Lw}@CzQ4K$F;g)Bh<(YLL)R;b zdM0g%zIHZwGj5D_u^rnV82DEwdHvefA*4K?T<|JH*EzVpsJv%;QRIx}C zrg{8h=!jE;MfTF)AJ%T}Lv*?RH9-fu%4D4kTI1aUl5#XI@sX+o zT};Y*>48bz+}PxX!{P)n`(JTGY9dt?zDk{_W&vB59RLTt*y&l zq@m$kt#6GM%Q%nkEShVR^WptMlhwXA7aVe@^+ofs`#qK!gm=p1N2?(P%Z#vM36JSw zKPSai-RdZg+!-&%%L08ix<>y{k9EdBU&~HCBq24gVPj)UOOV@+kA`1ck)8*6?V&e4 zbUV~Ozo;tPJ}$xw6N@_H3+#9U2Ec!1uPsWyfYY9YqAey++)H0ye+%M#7ljwlFO`>) zdRB50FZ(>i^Vi$fy1KeJ>byF3yV^kjnh>fPk=JF+%JY*2-3Oi-bcoHT3PsW<=NS_{ zcE%*?yic_v_@Of`2NcY34ZVZYx`YHMNv2C7d)M0sS<8gH`dO6Kw6#m z*iOP*i!9gQ2@pXr0bMOtDc}0*HrlB!D>w?49a7aGYLwV@#ET4EfZ__SL#aK`ZaBZZ zr@X@I+6N9z%0x?4a>%vj>EY|JZtp7H$B(80fVdAZri01_)#0$fAr{i=d9p45RGX4r zfOh_}vj-tiuDa~BtcuQW66O}VuR%W^Jt}$xBO!So4$JK=J_D)|;I#v29w^I&<_6<8 z!znuuyotSiCUaK;K`^MB9ximDPA)858@ve~d9?djh--456{s6@bZ)FaZ=gM!-|OXu zCUV4#Q=JPxDJR=qb`ILmS%2~oI0O}WpmCm+g5c+A1*{eRIYj=0Rf&Xa)+L%5 zr=|A`3by0rW0Y@oj}8dfDrgzmpRN2Yqef~t)Tjw;S9I#tsB(36dEAE3pL;oAs5 z8K&Ypo8)PXxSKqpdcn_CQY@vHLd9o@F z6nCXPnS(ih|1RlKo{6kZ5-bv5FD>1~vbz$@`9RI`{9^ob5_gEIm4T++0f81)wcjJyNa|nC8$b)@$%N6Xi+2YSj&O8$4mdM0pS8CU*#G{!o!n{ z77UjzU1~fa1RZJ!oo9j9tCiMVFJ{-p37t1alppKwS<@cQp5x;>qw(DD@xA-^r)z2e z0D0oAtUeOj);KKu^>5E0Hxb4zLpk@nqM{;GkGL)oLS~uJx#-#~9il&6D{5`VkG=+d z&OyA@XtGYSg6vFbHY$1`1V61apL7P9P`>+uE$B6%YiOtUJ^pZ|f2JTJ?yIG>5e+`&}syYmIN7uR{u|>tJ*^ zIym&UHu>v+ODa7OG0E6a7x}H7VHNSQ%~HYelZfbXMhb_D1l+5Gxc>$uJE*K}O|i2k zYZBt)+fBS}XQ$@B%S;~xqlU%uH9$$f?VUv>D>J|aAH+ZZ8FnO139~-wb;c>2j%Owv zTpu*RRqhxxqx#S;O&+Hc6z`~DX}vp-m|cTzAPjnComErkC2?j31?rbjWOfn)|N3ba zfnJ;U=GHkLr3mbrGYxf$p|R_mgO9}b=}``v&A-PmJ%} z`5BJ7#6q6Dj7+^8cYoVD#o#T{UnD^^pf5PqZ7W|a#J*BsZfD*I(Pp3^h#gNm>~!tl=79OS!>v{p%p&eFS)zh@qKS^Z`mryNaUe> zFFEaCV)Dl2d*JQeXuXC1cSPAg*LAR}1K%>l4IgS^gKysM$kpGpxlcUlZhUDkC9V6D zLEf2WOIg0yI7YEo(A3qfwk+MzQnetHY9MezX|o>y6utizy1N!+N$u_f{QWI|3!pTX zjbGad|E0n->L<(Lt~&_0J=!y!&B_({?Y2k$Y*_#o;b*d3^Zl=L5&ElopDTwd6Lhe# zQ9p5H9*JGBnz*<)xiFD5b>#>Jv`KDR#bfs}3AL1_fA}nn!?=y8={=KarYpvz>_=#v zUAv*a)R4csYyGOBw;L|emfFIuctWX?+s4&Zr#)(%2yM0Bc%R-kykVC?wG zae6KGcZUcj7!0;x}pDb*@lyg>mq;~p#>WK5QzMvp0sq2Eaw%mTOd`+-?Z;!h@ z%}#mNl4@iheU_fpkny!#K{`a#?JgSy%KBAgq}AicCa;e1p*+h_e0;`mIN^cL-Uyo> z%j>s|;WQh&V?f3#fCYtWm9s9{Z$k z{zp4VkT*Ur>@hnjjAmrb>W;U2@Ll!Amkbx}xkqSp@S{QN9XQ-C&=yMswXsysXxzU3XE zarV8B!6H3Oa@2Vlw(N21^Mr9w-O$saX8jambyVMaTqCzV%y%MtSvA}yR^D$r#e}cP(L7`3j)M{i0GM5Oyk9MeOCUuzY9`P#05o5N`pv$B@9u8XgrD zH0m*kR)|=xRwx&oQ1RPlceqpVPwrG+At7y)=mB~=9vW*4%Y6N<^5$4X@1@&Q1aT8( zs}N21ie}B7n5;hG7qjw!3v+<+(vPVaH8WR2BdPLhPmkzV7M8>hu+h4q+YxV%V_zT;4{N!D)WH6wwC1JezGkcc@U|M_{2?M5S6PsnBak^( zTvgwTje$79-hgZqXX)XQZwdWkH{iQ10oy3#uI87{bS#f{a3Qw~7L!$$ipy4k)Azgw z5)n6hdwWZBb8|O$cXvxrbSYrj+S+TrMbjt%!!i%d@dDS`@Q5SIU2!RCEs4=4RoxAIYdvLI>oKZ6e~b3XGT8xW#_2L(0xO^ z?)8W4rS?ASvWcj)o?m=14%ZCxjzcnm$Lt@#3WA0U+iZQDX?4vra5EAsMkICl0#j7> z88qK9fkX;QoWc1)-C%)#6%u$8g3(X7&2d^q0EsQ7pr4vUU4TUcwXXT3s7K_EsfpXl z`19#eS_P9qqHq(^TldI%dxtn2mD<(vqS;vRTid#%L^F# zAwF;ipi4HiV`3sA0pbB>LuMG&J1MQ1ud!QI&1xXx_3Mg9XFz3%Dh`dHPYD=xfeKNS zECU_O#?1DzgZO+lRNEa@qI3@NR zrxi3MRCKJ1;eMEE@(15GLI@|)$^M~Ut8~xUMp!LZ$*>EaOB;7@i-HT|nA6ej192}z z(dD6-2VzOX%#%-UlaFk{m`3iqK#lq64aBZ@AZ&qdPE*sXPkWHOfHl#wdFGd}i}5I# zac#Oh^rAZS&WKg$DqlWR+=nl=_FNWI5G=SxB!73j5Q9o+$}FWcmFN7Viio zyso(O$}44<=o4tn(OPeG=|yr>Zuz9I&JUW?3KCq|BH-QJ6mIG1RnGbO`N_<0DP%Vx zJ3_VF0e1Y2pMa7rryanch(=tPCt%WguhIBTG&b(KF4KCw80S1b5?0(&N{p&r>AC9M zdDDx0E!}Cq7Tzj8rUCAok2pO<%T=Ui=kp_{Lvif_j;VXyudv_lc=9<`&SZ}hYO36* z6#LH(Nj?Jl{VEgk?Eiofv_%2VLJQ9`=jO=aoLl@#Nak)d>guW0hAtbD*{Tcj1fv&U z07Sx1+;)PB-UCN24lZ$|GYPr=v<8;tXU`V++eg+V5#F-Tj#RwpnpHVAXCIyb!EouU zo$wfXl}iPfowZJ~?#;Ep6a>ZU6b^2%Tb0mcHNO94w4E@FBXeg%cVImtDo=_s2+n3^ zC+Wc*%P)AQRmZfbyAy|`G6Nx3&tYzGX_s7ggO(ru5kHE7K%1hQ zZbzCFnmv|CAm6?r=r!WSOfntq)|sayT40nIFRTSvtWUc%Hfa4>sybGtvxwnPUj9;d zmI61CYfy?DD5&R0G~xw6hO_5ht6E*=YA)y>-Qpb_n%~e*bXOO{!?oj7iimFjzzNXk zXo5nx2rd&4j)6Q_JA$7uY=^@lYP>w&*QWH%%5xdsr{{$D|<$Su`DE z5%Wzp#HTI!h=#2KjR(p6bl9Jt2I2{5l}}%S?yzps^&$AfpgBn{2c$1Kptft*$1+gn z8Zvis!D5Dr)d&X%2V-PtXsBUeU_i&(dVIFKyW7!`%sc7vaFo~N1LiwR_tqLmbnD3& zxY>7KtzE>eK6N>Qqp!zNX(rmQ82pahL+Lj%fI z5U~m>jM!w%59&#;q3Z~_7zhzK4AqFr_P?DK-HK-|GumvMqAsp%>rp<&R1+5tV%#_R zscR~&4S7eXxP(Lk_{jlz`(v!EtVgV!i}`DzhCxb z@h>63`XmBZ)F|CySTMf>$=r{+>)7)Mm|9%i=LyE*pi`UU$rIV_t3Ok{q&^zZTPEE( z%RC@-AWfpdciu+&{xoQ2nXGHeADrSBbp2V^!;wGe(POQ6iyg^Dkv}}R6B^Iw%dD1T zvEn1`OX(PI$e8x;4nJ-EsFUmiSjk;wr{kK^>C@YDMUHN6OW~PlMFh8XaQVAVvLQ9T zYp1D@9us16tta>py@+GAlhM=GoWO^#>(?@39gkX>(yZn&rd!X4KiYCzC18{y^(q1% zU#&b}Bkc7eNc6GogT}M#F|`Hz{79D7v>7>{qcXo>_1sBB;INxPL0ot$%E$m~3ZnJe z2m>YrE2F3w8Li|d`$T-|AM7_1=!AEK;HJ|YsO@M!Q&ry%&D2#NB(F{d9HM`_JZsnV zLL>a!V};H^ZR!EfQPcZ)SGaynUFw?1wpQRqW+_)?1sN8{=6?2AyZ;}?-aH)2_6;8& zsZ@$qWNi_ZP}#G_+k((amMBZM!H@{U=*?0IMJQ|Dk|g^!S!QGnSt9!|7)!RX&lrRG zUXR|-=kxvk^E-ZX9Q{*AJo7yFbKmE6UgvpUl)CGvM_c~gXxL)aj(bW?HN8Ts#FZU3 z+ktWqNHAdlbq&Q)v({fZ?K8`B6iqy8_9Ozp!otFUXof>(w0ZHf;*1zi5%jE(Z4P5= ztbP9k^5H`x?+)|6Ish0fb z?c2BM5AkW5W~g&dkb|a#7q_+kBKn(eXS!L>wn3i4Ld|2M$vjklBTmXibw)?d>>_bF zXtq3O9i>r8+4Qx%aS`E&Al=N`r7N+%pXBQa&6KW$>-d%PUoTCH6tlncJ$B(ZaORWu zNRQtA?BMNP0~%WsvI;iLqKJFdJJ-n*gn|8@t}cQ*qrPLqyw7QB zZ2auO6}4uto&^G9U@7G!>N44O_46KHfBlVp(J^LiYM}{zV|y0qZ-Fvp=E3o`PLVI| z`UwIe>I|A}-ILNH$spJFMh*mD%Cjef<4LTb*{u6S!9>Pz1Dk&k#OJMk3l{duEmD5V zAdTs_Z_1vrM>wLu#qL@ck34iy`X+W%xlm-8E7Q8r%d@KtQk0tdPx%!nJY%!FXRjJ4 zPyQ#o6gLwSErheSO!z^Vr4CFWPRp~(^p+^_nM+H~q^DN5y+VCay z4R3!ZJ+Z$(8mlS--pY`#|H=i?`3<(cSijI4&N~Nrz!%Z7ed9%v>uy#SpOnO(F=Ohe zGpm|;2)?Pioi{*&cH~=3aMfw5f!}P%z3BrT=LP; zdDG^u(>*%LQ<%>k^yqM;tn=r2SvF`|C*O9D{<&M=TliK~kD==R{k@n-z)RMMdp(nr zSIWKJp&%0gaVFULsX)6?r+Vl-IBFbm%|}xL3j8VfLp@Nu<+oW}oWS_ksDe<=F==#= zD$NK-3l3dFuQNc;+@67MB2CQ9kk0{G1bv*GgvRvV?(yl-KCtTRCClt0LF!A6u%*D%{)Ht5tzBiUE~YZecj^k%E)s11 zj=x$nhuJMwR@3MlcP$XNcs8eMa%w*1nP?iIZo56*0$-!h50oXuV)7JTCT&CIr+`1b znd8p;Kf78D1t_?d&!ECw2@_Om6%XKS=?1A^B&9ZtCZsIiDqv#3Z#oRgO9(yp9~w&q zUMc%4*WhJ$KZ5MUnNe%#8}%2>K8f;psrYf?KE#G9kR7%u^i1gY3rDDw`dm_B&3iwZ zicuF)^P3>0n={wQ9;a64q_I|juA*dzH<_isMyJmBz!zS>s4O*Qfb2OXFVQ3E-FAx4zqz(wTzk1j7Hr)wG*Cz`=4j2obPqrJqytE(OUM#sG*< zq>Vi@_w#+0d9xcFOVdB!U#bL+(E1|~rZ=T9R)MlTfV!)Wfi3b7ku1#1_e`(gjK67J z%_~!g;%oAY_LddMO7wTS&LpLo7{y|7_$QWpbaD0N>e6YNp)7|R5#Sk0L(ASuVl7TV zWmSwgR-uOId$T!BwY}X^DR(?E2OwYs@T-D{2)B`uNq@$30L%GFe1bZe^&-tpO+jER zF0Gb+9*PHhc(VaCl!FZS#bLOGR1O7jW^*ITv(#I$u2z-U95Uc|2rsMJ?To18z7||h z`>-^*3FUqk9)bVbCt*TD(?zqNXM->eMa!4c2OT)6Oz2e(a;ECrcrwUB)NG5jF3aW2 zB-W(L8y^YFL-aJdis1S(@4EhSx5zSovYCJJlw9#VoZu?yLcBC?*k=9j{N7P_R9T43 zr7a1M!11|+SkjIXUckDUD2?8y-;$5)M;c;?3+Fikb)O1U79)Zcgu03NSLW75-pE>L zNo?NYnyG@oP}5;f&?GT7n{p41E;yBDDuE13s2<*fckgY~(_iP#J(5p^pgzNji~{n- z97dttx3Yw!I5#*Y`jbA?UBOpcLN=ExS(!Ov$~6pCne-}U27Bk|Yk@d7GR>*BLIDff zf$Z=og~C=_NPrpc-PAIN^#{n#+ba9If=eWIyq{V;9cK$fwt}_GVq!!8sW6e(Auc>I z71UB`!eIPb3FIo}KPla#5cC8(PntgiltKOkp#d+0U4eq#>T0TuWE2d4@8`%ub@^0Q zYL$&OTXfY=8TX-gcGi5&O-&U?EaoSobpAEnhMab$6ho5?s@S{IRac>m&(j%n$fjNP zWkGW}cYN8|_mDu;vdj(q6CNJ@Tf%VFuUeuAGNgM%##~lFc+xrE^>NeM`O#h^ymfA6 zs2M=c4%X6QwaPDn+Mxy`el~J}uIW8FWo}HWN>W)({+sJG{`-_I17N{N z=61g3^Hw$%2@gm=jE@{lKdj_$NVf*zLXwlipp^G)vV!W{KCefoNXOuKFk%0S@;N4j znqBRd@M>W_NR*v231oz?mj{!Vw^kg<#qnu4CzVCnnhMuxG@GnR>$P+xc|0V(HNb*+s z4pgnNLk0q%Tg`Q*?#k+dtrWSzkTiM-vPEW_Jv=>KAWRO#426hz+Nw6p34#DVcE|G* zKjyF7>;OYb7L@x_hN_R4g%~+^fua;ti{DW5*&H@{oeyK-M;{mE;)O$Wpy_|m*?Jlg z49Qw*h^eSme;~Em{$Omz>$F0NHrB!Cs8_zBa!S|sb1%5h08w{woYv9nagLDiF$pB| zEn6pCwyN`I63&+j%xRr%?odZ_XiS3X))f+_1oXoIZ^W2;pFpIv8Q?K}EPU7u6>CEz ziULOQDg6HE0UqhZg;EgNW)|Zs1R+A`lIzRNZw`l8EKgCo(xA^n%HRQdoki-N%WaEun59aol3NWm?@c67CWhBHKZzA^&HMQfY*U$_*Uki8K_-Z- zsfPAdjf7}Ia&je`4?^7y0s8!j3Ovh7owyy zyM_2BYPL$9`j{#o_rl!en*eFez-bO3+7mxrj2)zIzHY#F+JT!ot*4dbN}5!gOgEk z94eYURgFL_Ws3k>mkpUN>K>g#m&(|cZs{>t^%7l2&%edU`I|bmCtagHjHzGV8c?)|R=4hk_Qu1C&#FP}DCbZ5}Cv zP|8i(13k(7XMuq?qUPoz$67_p61H43&ub4c^@_B95NEv;4wX`A6^yJvEi=yvcQjt0 z*PV^}I+?xCQ*>3tB5tEH88)q@dK@as&xulF0wK1)CXfp$Bxg-N)G1dsg>-|!6_uYh zwQB?^z)RNNnJFap3nTF@M?e7K9{#YB;!jyn<*ZdmNcw3`fxo)vSCut|0cRPLhmy9nCa(` z3tSJ3Ono$OUA~1rp?_tt?iuCt^4&0OV8JQPjy8wQIzftjs0EHE9PSn@@7Y5?cAkFn zZS`Aa<=74CxL@C{y;c)tA}tUE*I5buCuMi9`LAxK#q${%VaM#pt!q>L-opuox0-C+ z-aMvj<9mfS2Cd*;z^|C4^Tx8jwmFkx0xhF77ETEbJ)E&YrcT z42v+ICGGSX%&G0iDWb}G2y4?bq@q+M)&Skl$BGH`VbUElGqZ-;9|hQ*cO+sOx}R{X zy&27-M1Yyey1V_nLZTETWr&(tkvh$+0(?bTrINwvY$P4L>KXr86GD7ljKXGTHtH2d zrPfHHtj`JJ**R;JV!35Dt&%ZaW1#X=z;9Knuc)tHsFz?7uP6Z7PEi={n?we!Q-AAS z@&>fmacVgbsUUfEvh5^If|lX`%XXsH)|5wDo(o0sj?hiA44MsP`OtCq<2s6YL>a zzgBhCB?m}S+X3&{OSul6s%Y@o_;C*Yk`L}f0q^Cba;S&} zT?q4SDA^})q2L}hOb5l`tKHBG+!gvx3YA@eRKltX3IN=YEU7(^)A4-n0knL=a!fF6 zvEhy{m`RQ=TB?QuI2e1?9WA(&IR_0Fjs@)!ZqB+@1_&B6^W#VSK~qOv;pUmmzc!%; z)qSl_thPE9%+|36Sw>&1E_;gm4W@EbIO6D9gTCBCJ3Mdfjo?+A9SdG1a56V!VqE#b zQK?1B9oKZyp(~{vZBtz(KB6JPcgIDT?Jjrq)?|DSsR>BIT(FjPjT)7%f8+MM8vkn> zsBt@=?^l$7n5C=G_6dV-!?G><+kY#mYR|G?fFUiO{0S$E1t5KW*cV zY8W|v`t;QRpk}85kD))Hn-f*zz_TmndOc)P4qW6@N}YVB!EleQ=N+%i$v}u<|K}}5 zJbrxTAZ()j^0OX z52R)9brF4CbPn!iBR>ZUL*Kb2_NTM$C)Qh(h79QL!Om-m@;rKIzksW)t*wGSG;DUF z$~(Z&YZTxL3pcU)j60}A8)B@%?B%eAjSgI@lfFsWG^N_f7Z>UHBD;A+eUk7x%bZYc zKUb!fXc6LVhT?sv1k3WROT5>~fZ?{oC&YA6ckjGEOiyBsDi^8HdHuW(VLgV|2Bl7R zcIFzfXJ;YKZ&H=F0M#RJ%ApdBm4}wyyAs?`@6v#raSC|C59GRqg~ji2a3q$84)GnV ztp_avV(%~opKozVNgixBqWT_t#LJ*vUoUqN!ud~4HpcMn#^2IpzO|( zvCJRiE`AipaL(aPq~A$vqv$=~*9^$Fi^sii%zfbj7QV%T)PL$Z)>m6H{F=7LK1J}W zUVh5b&*?CDtx@>N&yVl#v(3Vtm}+u1l|tclEhQ}6?wqv)4&!ZNA{TT+t2&mkij9C| zC=LIxDTwIiWi*A3fmp{xt_6+kQzwHk3+>i~_~Pocq&ggr+FR)Yl*WyH-?w!2c#`jI zH(<57kaC6SY2m8-%~>NNyHtaFEBao3=>8q7u5y#BoPZp9*`ZMiNlH;H)nEHEa3ZMahr1Z5Ty6P&`(Zr2S zb9tp(cW@lHB3`tUvOdu^f{D55H~d5^byLeC(rqqmiEgLt3Y<5r&6R!Oh&)&(^tO_+ z^tW=?7yRwYO-9KETdN*~E~4S)VAuq6C!4_+fx7GHn)@8C^b3)w{=welMLOt(J70h= zo7aDIfZs~jHFOW{^7?{PJbwL`p1x9~v`8KKJv?6BPq3j+$H65YFm;POrF7yor=UB8 zO#I4P%^D1EHt(Uur>fDeE>C@DR`$IryD7!JwDnyY(rq+LRb%|H^D|1$Z5-@LHYhs_ z(jC0`kd^>r{try4m0K{5rg8tUDa z#vk!%&Rip-Neqhi>GL}#mR1=;S_HJaO&WrRO73znx}wN^gFbRshy- z`7i5Dc?KWt+=ha&d75!Ilr}^;Pxs($35?2j11; zYw!y2R;@|kSX_ao!5D)rD6SWL^}CG3O}6Kx<&>%J3@pUfRn#t|#0OeVK}t7q(In$` z?N(Aol_4n$H|DksZ~qR@BP_2~1~=}}@5N4{-$x$*kHZ&tqsogLBAcUnTce8R8~ZcD zZ0-3vgFs=Q{+xGlp}pZA-LmAncHRKHY&a<0qpM;G>GS}8-83_)7%;*{LgrEa$Yfzb zK|vwtk$43xm{#g@k@uukXkAQh4pdh~5pgX+cTkP-gv^`{od$iUA4GFFWt5fqX1srY zR292C+XG5(!?c^NkPde$$hET#=D8hL-z>Z#G$Sz z`}$*YeEyi#WghQ^bkXo*aW#>v`WKW?BuOKjbJd^95D`{o*HbUdRw&`vgY!ZH%KGJYQ z_$9lY&V?g(WqTAFI7d2Pa-E7+I&lHt+_jC_%i{E_cwdOJ6Y37_yUrU+0 zy`;*T0dbExOJrU15m_riK`@-TF4DYq*|kaN+|nR7cc^1^;3%SB5qty@6C+OgX%F)= zR3V`1-4+{TSD7Jwk(VKo2auh%PCYJf=_;fNKv`{LoxyU%sNMi<&7p2!bZYj-)tMl)V;G~beoZ%t1j_!H0 zc_0*@wK|yW)@!n--uE1*@i7v+Q6(OCJ;2pUi@Jp1%|RF3(5qQ#@@gJNe8SNe>nrf<&w#*NyO8otqxi_e?=SH_U; zq@zj&_vqE*Y&(o+v8cU7q6=nqz)pqwoa4RNQzq$iJ`)AE*B++cCVJ>T)U&$B4=>b+NiZ zwY?M;tlZx3)mG=`uX+S|$d}V2o7IF`3*v$>d9p7&*V~QsVdJqo6DRyqBDjxvB|=mz zgU!xQ`{)Y+Jv}|d)?tjUa{4_vi3BNuAIW5A7mZHmjRO=6k{D5a_dPL74>q9$MUi(a zh8Ujo!zi^-$*h5#WCfG}EzNP$S5Qus{H~V9im%Rf>zWEP0evseaX$=Je#QE-UTSD& zrv@B)`QsZ&*wGZ(M*ZNpAN2xS_+YiA`i(ay(&9_FItNjhy2|#ojm`gK=e8{%jR#F( zPM_VJBee9m0e3+oulQBAs^97(FuGM%RvN?VlRtYlV!s?-d#}6!mJMV%au@9mO7{(S z)gepd-L_!_&4?SH6{h}Uac*teDSRy<$xoJ)++Wyqb-M;g7m*DS*~g3s^HbK*LA=f$ ziMv6&BPpeJNMXN+i;8vxq);$5kM93vH|Yoh$Le#1%xVyc+;u!-s|;c&XvPGB;8QGT zk0(fR0WT=lT`2U^$H&&{{TkYYxr)3EX6p-+Y1zJS)CiXx;eMHX|MBB(&h^V`Zbdz= zL_gZ~Wm_VnDY_OkE|DTW$4ReF`KY1vkU&z!-G*XGz68lTUJ|U74{mu2t+LpQkP6{% z7-iF)&iK67Ls|_h1Ii*JOGTi8LCK&AhD``mszzXqWd;OI6e76+l?4J1iy)OqL^q@} zPQ3W(VG>^rbclzLC3dE`aovQltseYW5&eG5A8!k;yUjZXy0S)$2qIAQ)koKER3t*5 zUpHu#vDxv%bJWl^MV5Tm-vX_t`bF{G(nrTCO_tp|Q_WpvpeBiaZDWl6G?Mp5v`1%VR{Pl93#`>MvtiO8+xj)2t>cHVDvFOGIuRueVV@ zme&39Dtzct|| z1wDrp7=Q!tjzUO8HUz*}jUl;);sth7kcuH$NO{DG%J=~b?Sz3#9xM8Sr zxiUj6agz8`ZzO!j@v@!|~qPQq-f5sF5RtUIu_rCp>64itJCihkn=QDgM0W*bC?F!X^3T7rs% zv^@%N?7D^SF}bwvCtPn7<-`>Zue;(Q`3n4DfIfC5hNP~iKEWCIC^xT93Mf5<;IrGl zRF{ftfssHc>4sP>sZU&LCtydUgeKsn$QyDi;x?U;! zxU1+4b(4k!fIyR`h2ALyER;WnK}QUscI8CHlZ8W4cT9TcyTqxdFZKEzkKdtj0}<-c zGWZCg(?t?4YBEVFkf>!tRl3@bHi;;2~>AInfXZJfIQ#R_Vqr`}xU1t}T+ z>8Bs;J%PL;tm>BQd$#e5h=fo3c0(-NP6`hbm|o4iuUM~R)4zYqzB+~K{M0#V-*ps` zK#pol0R8X^_U`H&S$(%_vW=H=3W|P${UoCtE?JeqT&cs}>L0~`!mgZcsnI3TYmi+8 zI|L_Me{!}iYhHrPO`L5D@6RSOF{aD2bCnxJ#8hi0QG9?3LNe;*oz+|XOYG#nL`S|{ z`pAe#IZW0U=G0#2{L3#gD>3s6d7!ttif&As6msgmJ^!q22al@^#iC*yxT~8hI}!S}Nnfyl#MLe>&%IUCYXbu?HMqbq;$SAv%)c$jZVy zj9rt62VD5KZ)Ms=7y~Vi43`>%;5*((?Qr%fvrgQ*QaZ4& z!BFd%1w&PU1{nb`cd#@gxLQ0ifAO#A4+b4=)ovtFqPM$g;jIFP)aOl4Mqa!FE&}JU5C^BlTzL6rzc5}Sg+sqio6uqQKFD2S_eWA!+lwcJO_N$nR)7Q zAh8%2xVz_wiLvqaCGWCr2jn6Hs{`8;6OT?q6XbXgM%ui;?U3{PJqlqlIeLV$GSxUB z9RMiQ{rdH5bRff()8BA_|7d<@y*x9W!R(NcN1CY!|I1#)XX~ld=#hMzlqs0Iy<@ z1~XnuwRYirJBSyuyfnDp$wBH4z9&earlw{n0`SZ+=q+|vhwvgDjHk)}bj=qP7V^Z_ zRaCS(oPZ*LV$M^}hP1HSQ&K{F;Qt|6+RC0(v%R%HVD<$JfA|m=UVDb-uvGyKLuLGZ ztK}{#?k;pJ$pq`+-Aced6XDp|XAWH>*0)&W(|}=di_3!;@pHmEN3ajYP(C%4oEZOK z;z`e@i=T_%yj9WAI3U5-A^4JY}yrQTZRRSL(r^ zI>E`Qo1Xlv3gZMX@bgIHze3MEba%hG%;WD{2P^1mP+>OHcbgCJ+M4-!`Q#@KOt2zt4N3g^_81duWcC7S{p zBfHH100X;~>I(s_uNPj*6%Jku#au(LINsOQoB4O_VMk7| z^tn7gNJJUe%y4aet_QMqz^q4}DxW>Ox3*QZhGQ7T_4>_L2Q;i>-d@1^$oYED#^%_s$)zI!;Ktt<+viZ0n4oTv zm84F*t-gBKsF(c?cRt+9*XNX#BO7rBs94i00L?n`B#aDObz`J5GQWJe-^d3Bbipq| ze0;|{Tu=24mE!kSY}>OxJ4{IC4A z-Gt&WDKOD1bbuG2&=YvHP|P%de6wRvfncxnbxDI(H4i`sSN^nc*Prj6a{W`vJx{blS*n2R<1+E5oRaT=fz&mQEyIMgHQCxPFKH!t+nhpH8S`Sa%^cg?&dLP!L!ReQ zn7h@51ne^>yn^fywFug!_#}{F$QN<|%!B5_e2W%$3T(V}2yRjWB-aQ;z2a;=0A;A? zQN5pv0vDVd?-}t(yQ~GOa+9v@E)w)tEog{9zdL9hDZQ9^MQy<$ItbkJkso@l>8Kys zhyr7_rZdj|w~Xbu_GOgQ_1SsShQT*EJzWA^2i4m_$()>(H52=C4+@jfIlJphk`gBz9Rf&f8`H*cxlN|b++ca#v8TpLMe;Z^UsVnLa4f$gDR*uBSn=C zpcGpyk6NHdLm2PC-tZIbEs(2*kS9RV=SW5A7z=8}#Kc5`T(^5 zOBXec%MW!-E?N2jiHJg(hD4g05v2=%)NYpqiAdhkg9wpm$|j8)|G7z5PoS7JKwG0r zD2&j)&U5MvM)SWX2C|hao?OE z)FRnOLwSht;NwE(E*Z4i73;Oh!hxtgbi3yb3D7wwN)O6-$!>a=n_8)F`TN%H2kJVb;Rh1;^7o2^_Alw(VJMSwKB4WXH3 zr1=#iy_EiOn6(O6^VQYjin>?N(9vPYHdDamWq^NA}V*t&}e6LaqCb_C7*<6Mj zE_F1s`3s;A?0|KPY=ppV4=qEoAaD^d0Lcb$9tEK{M=PI!Ru|bJkc-62z!0g$Q*uHI;r(Ka>ZMT$gn8zU0%G6tSE;9 zXc$iXmjQeW%l4nc;C`^Svhaw4K^(Ese;#kP5Aw@;T374{CtV(%(ye^-uhs$O&wfn) z#us&2Pc?|itPW0(g!=oRgseS0ASTUel!m0?#>OqEyFO6BcFOj_FFd91a1E?D>bJl( z$PD^-_4sUdP1erPS7Tal>qZ!4F5ii$9ORn-1MOPy`}b$?gB%h31*1!#hlmXQxc$GL z?9NXx7iyz14|arHos`_4@*>q|{yT8SaW6cLsE^&cy+X)?07eNuB+Y1>xJtbC`!cvf zh^O0+1Xs89bD(;Weku?K)gFS%5EdWuSS~Crw2%RMAd>7yVij(?+TdqJNo+* zLA%InH32iO+ZU(XpGoI7{wIw;Ka7TwegD&m)_JbC4R}c8L#ptGEb`5+uyuoG!VI!z z`?pcx)*g_=ZM;SJpRi$Cwa7oS8igGXJXW^%@58;=i=g`)$ZcIu{!jeu7Jwa*UyTKv zr3wcV|ICQNaGv4aZ&dfun*h(htDhI-T(|!%wkQrr!q_B8$GgI;>}7#=g`*tYBTHJ^ z?^VI&3m?dB+oAD5J0i76>H6eql|<^FE1ojTwO1~r!$dalbV3M2NCI>OQC&S16`HwU zm5?$GA!xudF?X(T$obE~1v>i67w`QX}re^`t69_MSVysW1gzU>YV zkG@d`!9f0?GZ!z&8+u6m7AK=}5zq@6<$Or!uzU|j0Xm}_*Vkg%!``COy2x+}vjav4 zJ_CiTr+Ht?7KZeJl|UO3gh0nt9oF?!0uJC_Wsj-bJmOh=e0)#sdy#H1kP=)7U!+kY zT+Yh*^5>uYdw+?_V9Hp zbYS4)-}}<$!WoOXOFOsAA*~1y9ytRLQ2^V$Hoy63xvCxgO&~DFq;FdE^bT^&j>iIj+z4neKnq3&H}#z%`m^QPq;^Mk&fq4jxDQO0?Vy;8fS|x8YFSlW+#rd&+!xk#B;K_=OhZ77{1|U3vgf_tX`ENm=uq@yVC4@PtD)Kbl4h6ZIny$6f^&3#-iEZPOR) z=aYfF`@D-sonPO%b;bMepFxT(-XP>RN|Fj@I`!_B$`*&Ezx|guE;Ay_dqbUqU@rLJ zokDjzSAswf`kt0P7G0zbJOc!JPyV-L0)f!f4+GcOpibdo|H`fI{$(LKc;%etzGoS8 zjN8U9BEeb*hDXVo_t-1Dko9hbg<}Saa`?~^{xOzs@bfL9(3M~KH0*X>FLS62WTxBO zMg~3+)oZJd_Oy=t;BXg#N2mdP+4*$P)mPU5Smgmy3`lcVxYd^BpH4i{;-;&U7z2YG zq~=YE8iQWA?d!4)1mH&CGr(1K z6-ID?q!~&#-7^|UeA&?L_j`&!{4N{U6#(ut%xTp}%in1C?Q25ej;xVRg}uE7ZVqG{ zg}iNTDgN`Mx7LNmj;Fo-KVL1OQpzq~f5$3oM_XH;y|nL3 zk++~4cg9M?D^&+Cx7C-vyqS#>!QW@BMO+g3R9Pm0a&B4D=u8adM%oi!AB;VJCIK2r=xBnodd?eCq3otYdtDD`m25mi z|7iE33cMyhTixpo8_gub>0p(Uiv{GMA|E{aWcND=9yAOH%@10uL#b@KYK{VjD98ZlX2UJD*7c{@+<&cA|Fq^ot!W{ z$Fc-`W)NEWArPp*N>~&C)Ko2i5C{gf`~(B3H~{Iv)F~yP zMqgzEud)rQO>MPko=D@Wxq>q_HD?qoME~sTT>hrPt}fxbrDXp*mx5=1FB5!4Tc7YB zPKGo+j8zFR^0(=W;QhSo7^*G7?=%nP1~S@qt6QX=75WeAR6GssQJ8JLk?w|EpFht5 zE&R2e+mQ(eAi{;`y*UtdH<&;2maJIT(+rrT)1VDq^yu&mV?irQ)t}8zP{osfV-;xa z=Joe+hFvHa>8WmjC=7X6!71eC)twyBpNH}tA{zv1fy0n5gfU4lui<^yX(Hnx?5Z7a zejO1p4aq4yGgrMdw(&Z&tau1){9Nd5`}>T}L!%6YdJMzMo&BFvLl%%y_|NaKkgGTk zH6LJ5M+YW6D1{!#>2m}{sHp3gcu>FD$BMzd6rk7vQ>bIPLm~1Hnp1r0tndQ%d1g4g z3-qdq85O2AXtE6n#?Dg>t)~mmF{ax7oTFp>8Q4x3?ZU;yQw!)P@;f|nE^V>`y%VX7T%uc8qyr>r`D_e1~cC zMAq13_@C39a8OY22b2d907_tro)Kc)HwCnHirVd3 zo&nBQfh?;M3q&)H@|Sdy9SR!iPOx+f3H|mEi#40ySo-*M%Y|vUF6%{IBJDetr?u{- zjkH}^U|*d}40koXWx`}FgS^sysedJdmuax2YfC5|MauaDl<#=Sk*E3?Mk&(2SbfdD zIg}g3YrBw(C@*^{%fHf5iSOJT2!)FRB4MHNPtU>QL~^*1k*y{$dJ^_*bR0JXEp9B3 z0sU%}b7!({vu#}p?|d(|tloK$dQ$W2VXq}!X|=PlWEFKG&GCYyl_|Odo5#B}NSpxH z^y~bnjFqbp%1#G)4cbI~R7r;0=%2s5CM4=XVgKi9u9FhO4<|#pj%fYhHwQd}42wxH z&UA%E-UdG17Nm=H-VNBjwOvbFy~C?EuBW8cu3Yuk!*NqaU`@`;zV$ptxzmYSx(PbI z<7I=soYQWFttGj#30E|acg#IRy|YKyM02l&?#?_})_EM=d(wDqgEdEyBs%j4YG?$g zXG1#yy#Qlle)O(D?GMFg)xe#eRZ%J3QyhAp)TNOmt&LnT3a@A3H&+&=6)aVD%%9We zpZKaEl7-K3#%kGZF3dhXucOE12Wn=gmza4kOMes)@PVF2~;9U5oB*CFL8)343Ns=Y2l0+8#f7f|e2SNrpjq9w&O9hu4IuV!?7Mb+| zWDtN1opmi0kwLf5GJN5(k<{mTYROC?%y)Y|vE*(4@L>T|K^acq<*u&bUF$MfweI2! zSEa32f)aLi+66au9dEF{;k$q-_H8D6-lq#VG8Upb^R~M~B6HwT(y)r>i7 zp4Ojme*=-V-6Wdwp~u_-H=VUkC#&x3%3e`!R(or{7Ef@@o31kKTOl&PW_e&I6d-U6 zc{&n>j-$}ZmZCwrQE1#2=xiVZn4l~_;|yOX82G-LX+^*LIW~T1H2MKb0r^j;slTq_ zJ%7(n+DG5o)FNnk^kGEVBJ$P3*E)&IYt5VS`X^-HUN^y=AeG+BF*7jgH}P6{d*iWV z)#K#`SpF+17CzQ$oa5Htb9wXoE2zWty5J!nyN4O;9WHAVM_txBLe^3@B_p!lSnI6d z5}0QHU1vPKdpNCRy%_-r{!dN?{XKLR(5I!9g%u7aU)#sl1d(8>n+Wjf$lxCki{1wk zr(x)g*Xr_|H3iN(K?hZtLr(wZ6WeH-=rd={*mIqkU+^~OUhWDXzA4tGmm{zqH%VKT*-?)2EH_( z0*wC#2me7gtLFYZM*5g`!9o^xeS<afnFlnxp;QyYKRI zb6dgkV^|;auL^eg|Cb8Z$vA{GVb|B9EzVNAV1V= z5 zH6*f5Xf>N?Wo%d{W)KCu=pTTOKia8or39*bBcvz(1{i6YT!rSJ#d%HeDAbvn&?z_$ z1UrPD$g!j2r;cnD;LpHstm(U)o_i}o2YcyitLw9u$v&DE&01`D!=3+l=F|6oTU;m5 zou`uGSmw)ljG16hzu5##$$Z1QRzgCIr3{b)f!FOeof&SA&b$(I=jrr|rB%ng)ucUK zFR`f1s*@{6_J7*KOD%HS8(~CTbPO*&faBwmL@#+J`krNB{Uk`?yQ#MduygDiSenER zaNacvNFSt~;th$LFnS%po362-1Wc6DjQv;#naE4{J1+y1Pid1^TC)gafh~VeL^i+ps7>=G zc;PD6wXg3=S^OWU#dBKrPOs$VWNi$`G6gFm5Q)G*Q$c?=*p*`iTG7zR+sF{*5G#AZ z8(@-==LhliA1v!H;QsKydBXfOR?oua>$U;Ng+ntpd(1r6f_C!DIE!WVr4e3{gS!MD z`S|U#vzhN6(~2zGmhX?q zc)SZ2y}wf{ZS^8<<`qn(gVv>C(*|C`(B(EEm1*^g1#1%5S6EsaZ&vy!2VSx3pF1a0 zpyB*~smE!pbnIb$nOwSb3A(0naNvFfOlY5ST^s&Jp#tx^3A!B^jgihn zLG!oFyerpYmy;5DsE_BOu^k>FA%3K1~*Qg4bz8M5cmbT{jFtU}jmp?8@y>SE~`vhB~N_Z+l!Ge(iGCiG3t#d%@ zk2xe?z%r`o(RmncPAElW8_btmLuL*ZyNx_fP2^9X?$xkgHG`LnzLGbJ^&43$5Owr< z|9>Hx{p{y2Y=a=>Xv7%AR|RvhJ7tF;7Ze$<6{;->)7~oPD76%PEX>zc00fw9t@^@L zb_lYSP#hQ5^9*+OCf3I!ZCBqpkV~|4ceu`AN~k@7`5IXx4FZgrgE~^EyGg~dTXbqY zy#46xmntn*TX5I%JvY&tm}Dl*TAV2x0#l9PIc6_K>>>b-R;O!o;{z z3$k%3iJXqfGTWgW!&AB1S~6HsUELe|bI8Ov1w^yfYT1dTaQ4ZG;XH#>Bk@ak1>Wk& z53yg4QKqNUZS#>1H9);0;jP8@jo<+zMKR<;!-N1RxfEOe^ugr*E^z&U#6?7eC%bBf zSdyXk**W-ea;*A1)LWp+m}Dc3EsO*n!gA7eur9YcVq)g$eF6+`6;{D}9!RINQRU1( zIxSRNaS69rJAxfhd-j+fzW%$`1Gr?(ndHodtWi^gEnFW&r(SKim$J-v(K{HcVV#dU z#m&E_XOz&}5&|$*%d|3XqPj{eT{vnHBQQEjkOr4o#s+)>~0g5fYlk%t>0V z%jOmKnOX}*3<$mCbtu6<5IO(AAZ6`{=F#*5><=?#aB7=Cdn7h1Z}lNe0Dq3yr9&Uz z0d%dA-hk_W#zxA?zJT(iCCmi7l&&?-Hqi;Z(a};{2Wak|>U_dLmR1Ib}f>XW?)5$@!>;qV^YY0j+fi zivIkV-M0Co_V<~KOVJgoyeuKydG z%LXhY&g;&nZ0mRa`4=~;voIUSpY^)&U>_gB~GtTU_5ges8ud8(}Z_Nkb? zv~Ib~uw^yJX?-2R6bR96=a*6oD4R4Mm^QPAQin+#=eUDKSk0FEGABc_d7X<6DsUQO zU5wZ{ntZ=kI8R?ap_;%tyKI8zwrrr(8zm_Wh8azHL6rWz2EKyJ6#OIihhq zfYVcq>*EuVM@LrwT2J&|9Hf&wI!DzvC9TYdgirnE7%OvAVqN)?8saiyR4*~;d^y4) zB3j?$b!)A%I%5J3rj46Iw>)I$dxA=;ZMg~v2NnWCuOK37wVVquB+jB#4f6kiYmEmQ zhOep-_!U={_fcn1KFduWCfz=M-G0hv%!ka~yjDTxY+kciH($0O%ogvKBH7Fg&!mx8 zTZx?N3%KRpd#gt4wWpb7j{R0q*tcdlmrW?WiK}CQH|}wGz2k#}Q-dMWWqL+^5qz^% zT+K}y4bzjMp$=#k|6h|gr{9#g-`S}^b^2JC`aAvI{*%=K zlPnrB0Zzn7_2n{he^*m*O0%%C2f835LlTPVmY(iBTdN+AjO%IEa2|C-)9@mnf?s;j z8PvNd^p3%30jA|FEopUSY!e2z=GnZO0bSfkuzUYPBqifefX-)RKRHAl;0UUC&n?33 zS=s8w)4$RYg}JA+YbM@eSIdO(v{Q3TA!g`jQ%m1N&&B_kn`yjK2mmREhzV*j|$ zKz}iIWIk+i6gUc;4P%x9Kr&YBgGmzhzN~y;aG!FLh0VrW*5bWEpEOFyFIS(wiXIby zJOv=uB7rl09P%xpTT~DEYeD^hF;sGj9ZwWF}HIJvnI_ zmy~4DVDS+coZApy`|Mk-4$;dGT1Aj?;Pl2O-?D1C`*;uxJ%k{K8Y;}gMFS5B zL=IHH$R2eHQo!$H81p(OpK_KjK?%%H`wqkxv_x`qE|Q|M2xD&``GF|M;|#ByA!>D`idDB7{nkrNu51vX3of9W5wA z*~(5OS;o!`V<|$&o^{4fl4Z(1mYLu6p!fUzpa1Xto^#&!)Op{TXP*1H@9Vzq>-sF+ zqqi;CF?g=4A%aDisrUYsP2L$Eoq|P`+{;ZBKRUs@W-R%b$2lX-ZS+^$WWP02Yn#d) zegWcKk3TtNOjs_iKS%1o^t&#)BBT+T2S*S93`Pl8>>>J?>~vjHlH+;CxTt&L<;tb8 z!8kAZNEr$;9T_}+IZ}1C)mi)N%HPyYdEVXK{}Wj4oXPoF>&G;k&+8sZD4#Xs(tWPO zLbQ##W;fKX_Y>`*J}A*R1z>=Ndu|lyrus}66gip+PQI3mj|WkqVN2+SMp?&`USMZ~ zZda>8FOdR*aSBLQL*-8(X#d+b22SRL=loirHnl%#nSeuY-8!9+ild%h6{aP0N|4zb`U#Mb zH6QHYlfGb$v&APQ80;=zlA~Qhv7(RBIVMmO%8W|PU7)5a{V3!?5^kb-Mq}W!#q!bV z2O{Ad8^bZ2EZ}A(6Yh~xH~(-HJ1UXTJ=>iKH6=+Fm%ZVEU&=$QDtu*FfqFQ&O?~pu zWJWG47QenQEu-TaCG5Oj3o55wSy}+>xwH37JL~-wTO_Ol8D*mK67=i3p@eh}_}L}s z>Z>GyhTN(uMnr|j-q_Nv##i#HIHb*87tWtQ01U~%Kek8o!_otsBqYGPdD0}uKJkb| zAEj@xk~TX_%R-4JU}i8hgSQR+?kL8hAEM zBJVPV)0Pu=QJASa?C~~}ex3_Nz;j8=v~#@SRSzmiPQLD~G(mY~Mo@jd`2UG3rJ>>R z{k4|dlGLQT+Ra9GmKPZ9ye6*WvttigVl13P77E8y^di4}NML8}w7Xd?iRf zp3oPd&$QU07s}K-XBTy{9lEWLK8443Yy@d+^1fXG_vfZX0H(7 z3&}^u`FzVMIVW)Q&ZVUxzD2H}D5~bIv@(ngn08uqB+1iRN(ja)LdCjPhpJ+_%I$E0 z^ihDxgx|=mu=VvrPpJ!(B0YRa+3I~-sttYr?0bsO%CE|r%DCtMudv^XJ^p;9QTo^i z6`bU(760`5Va`6`q_wTxv%&(lnSRo957}}ns$OV8Y0~_9&00@8lEsx0_^}MM480Cm z1!3{fJ)4KqXCpA93hlj<%Jj0xmi0C^z<*3Ym`XrSfZp4}z*A;FXyz#l^S9K4&&Y5OSf4>LemvwDsZT$y zlengV=PX~TsfWq})Zl&z(|&EkMQ|=VQM?}O?{F|l{WW1S+Luyo#q;$7>UxqdhzB5T z$F$i4Sr-lKLQ`g946=NQ5oQtY#pj}sBK2a6+V8RVY)eEe+vlLXd#gCwNZio2%RApZ z6)K~r4wg%?dJoPzRe78!Q*yChQlxbUHxl{_X5%pPMzOm5$=pTDZf|4NT3c&Z&*x^% zhGmt3VhXbC=xd+~&`< z6F1yhF3?Z!`n$rB-Fwt1j)2V?pKv?=II4tois|KaQ1XZ|C~i_W5~)`J+Pdr~jh}S(acQ zM+%j)SV<)Rs6>C=A})jr?f1Y)HM;DZe$TCT>kmbpapO?><<^fGv+k>VUHQS}^l(Fy zaE3ui{^Aw^)O7h0g*Hu?m&MbPz6JT?ovbYa!UqWdUX zad)D#_fSMz9A3qZaG0o;TXf2&9vP#MO6fdPmg*e3A1u%XE@Jczjv=g&a#K30wT%ZO6sEwo0@1pC>R3Pv^VHLd0E9 z?FVEnMCYzRX)g(}e=Px}3sFMXOAo+BMTo*I)1|zPKpc0Hb))UGSZlry*M!tO76Tem z*@GLZp&xQg0Xt3OlMttlOxe-hqb*ezkaeMz+;zUz1Sd88IJ43?<^E1>4k6NA95H~9 zCt&30!QiogU9i98jMVKZY3^<_KXml<(negr#y65DH7g9Sv2`=+>e+F(b=j`J2ch#m^@)yiSe3^@ZvaC6B2zBGi%!nHl}^R>+ZZ#Q)TS>B) z_FfEm<7+>-2fBLFW1Z*;Ybr^t=R~f}ulbzZK#1Xdfg5aM41n*A@ zW;vyHW@hGUpb?bD_X+ec!z>rNYhW0t0yfGv4u5}d?{fJ5G6)YE2uRf#IfaADxtYUD zP9QY**soVL?C+hDe!JJCs0_%9-_MntFK725kU7XZi}IwO;EDLoEhIky21Q&6hqlyy zbj=tqD-+)S&FUa7^I+cH$$Xcxz5RLCvl24NWrgPsA|f)-s__trtm0ALuc)BByTAIg zh7R*CPQZ2(97hqwxpgEywkqcw;De{8roczV+11tDAv93+*~X^{L$>nrc=P+sUXZTz z-W3{m0&wu64mDB`VzyF9uj8$k)}G^7l`VLW`}nm4nX*|e(h2_%KZ>uuOnzke`a^v# z)qeKmzP?c3zyWAhWhily?r!&qL0}|@cnh8r0kIL3ev(@yjO}Z$r=d+!$boyv z7()whs$xd(*Yy7Mk%jQB9s+KYTILs>h-zgpl46K)B6(#Qh$`7TlZc^=2cu zLKQ{lK^Jtsqbz6uQDiqT3yMUX^mHSud~9P&ju+M%IoYghhIKEy-P%B{paie)b>+4Y zp1NpEBVar)fMOAMhYQ!&DH+FKkz?TsE|3wyMKTdN@bIqCX^1C6EFN>I^$(%)xj5@Q1XObSMh?vm31t=f#<{O}%!8CZ_?#dz z2~f}?+w4L7<`EBeq-g$#Q}GH+6|j8)ZmY$wIOtPp74qwo}mh8w>_XNSE^>4S3e}Wer`ENFKZ|_+D zy0YATbnKj*L9CJzLXH3^XXELypdc{Obs4N~1R=x>HUbFA15(t#?g)&=ruX2waU#&w zsz6w4ve|bOA!xxEgqQ{;+Lo!^w>Bc7pZNp(T3l^%T~aGDGXX2X!Nn!CFlu6zo9ZkZ z2qeJuOAi5>AlD_v0OLf@?%e1s10mK42pAjM3mqVtBFa+;y()(|SZ}sRLa?(Fs`%ds zNd+!FM9&SmE-~sc?_gnP@j?hdFjGNif};jrE%2T`i;Jskz5Zy4C{h9C0;)-G-@ZMq zH`d8)_n!@^UeEemhgO5R6UQ_Xp(+&|T)TdB0es3Re+U6?V}ZvZ9+C<#waNwHXw@zA ze+%|D9oQTS3mNteAQDQi?do0&NWeJ`A1?Yi0J9egctUj6CLW%Ofawt_gQJZ^+~&Np zPz5~1`Xwk-B*b}Vqfyl2$FboY3At<)8+*-nfG7qj3jrz;k&DWZ!2Mj$0#MC*8$kkw zq1k<*aOdu-R~j}`f#9F;<;&2c_xl!+gCq)7c#t<8gh}`dL2k{vA;;6R;r@i@#;Bp1 zi~swIPO&LZXr$?MB0L79Zg25tb0Pp@@m8V3_Zw}Zx?uJJVpXA%AJx>=d7)LbZny^z zpa=Zk_2+=sxP@5l0u^jHxk)UDu{(gLI%vm~Hkg>jem~BwF2QFH07{!AyX`I;uh2r~ zzcJtg10ewkAOS*S#cn49=({4q`LJjK1eV0c&jCjxkS*Cr&P-voaz6+(sn{GqtTIS4 zAXnlQu_y8^h?g2TFuJ=JKaxS*C zU;(bR@g-G2HG|1QTzS{^lXY!?UhcVBQSEv)woqJ7&L{&)8kGPDZQX!qy_)`rLc^wp zToxDpdmbw%;uMq@t6i{KL`h!1z|HQuWaI)o8BB3|Xs!zY6or}DJjYBn7#qdDu_}Bb zffl#^WzFyIi=S2wMNEXDnZyf2+!cx!+SwImrQ;_Jr!wly=4bHmb3S5)Fvnu zl^?sX{$cnj0k-&-rKKgN8UzDW=;7{O;oZ{F5&6)?g~y-SwP0+b5JXYmQ6xaKW5nck zVQy|{`^5a*%uGaq3ac>Imj^tR6F^-~@+Yuu5b#W`;QfhJkhk4e-9WRta@cF*K8eZT z;lBPy3we>f`FGi13V>ol3vgVznD3*2EsGmQu;ml4mAIy*97nG09^z5JqgGT_NuZaj zamG7%Q4YZHi>2gJ=C4hQ3&Fu3S1%fYwx5^9D|84u`=|q5dQAJ{Wa*%t+u?pT!DZjA1H;m;A&9lvgy4gJ1hjJrZ|;XJuyuu zn4M)FjeJ>XHiceCMUF`g((f2@j{SZgI*UQBmd~|`mPF8q=|T5kor86yZrL70 z#RRqkZwnCpotT(}Ea2eh9Tv7CuU7sj)<|)?f66)``WoOIejv=}3tg%paSHsxYAKLm zY3Qiw!Ha8ctU`o{vwka|LqB$It6H^skIgcE@PG$&m4aN#VHGyNJgv1npxjm zMJ#9!O*j^nwERY#vZHU>RCxXQvkl$@ee+X)ZX3JE2P9B+4q8|OP!ue&efS^~D`Z{< z3eK)1S#oXsO5%Sj~#2#C^2fuRltFrYDFFLimE_U?4e56=9s(4yCo-iz6&=Yt)9^!8BaH3!O6w?&lQjr$@%9)-ycMf)M=NHd38AVjY}c|H%K z2##F&iEQjv+n)gbJ*U*}(W6HvVgY>18r|?ziOT{M95dlntr&tPjF1reWeVW!z&(Wn zf=4i{qiVMFe-tL?|6Whxe6vPjSzJ{|Syvw}J6nUq9bo*<0#FyCkhT!=K}#qIrha#K z*_$(+rn5S3u$`Wjk@2cjMpPJ)OYaT+;q^bD^t7R@b?hV9(1Fd8jpz_yp;#x7Nwj+p zr~79F>x|fnEMzN*hrEWa9|En1ypxQ8w5F zZ$dVh7qF2o}q9as5Oy#8Rsb?de-zuVlTYJnyLCa`84YoKYvOAo>gU`>;4}a+F zYzD|DV*osLvFcMd_Yqhn_Q1OqP&3?D(+KDc(+3Ye?!&7>?wSk4L5-8FxZK_=G*zaewZ0nY)ugHJMsp%&TZvn#i4|9={pH{1LAFS66qsf`JO{ z8wl8GVYO6%UksJ&W)QyJc4afE4G7Z&O8_BY$w88HsHQpFJIoR~b_fdhbYWQf`Fj>s z|AH~xeo{YYw2(_EQc;H^Ac-hYNP3`K6rXtz{`kRIX*SrryEy`(Tq!23t|E#qFq^)* z@BOrI7oQ6>J3)ZqERt1A@)oXKfkbPd19{D0kdz}z=adI)1c;c1`I|%>a1Vu;yrQtX zH`9+%(b`h#&aT=6$Ij@X>p5x^i)9y=glH6Htv$#+niXL6v_NSLFjB!^hyq5TU49(@ zau)mdn*%KA4G#oH`?Oo|9D;#Syybq}lu*q2BL;K#6eA_nk5xg3z!OV2)M|%|xNa_`M!hNqN&}`K zXxFLWWg*s3r>%(7O^z3e9L{NNKOZgpFy`dw`qyETclN@-?`9ZPK@LV|VST)7w*y}d z&>9E~(*&VMmN4xR6Z2N!r$UP751UVZLr8G&uD;Dkj$g1}w0-7e(#5CJ#?~05?iO2{ zt5Ls*5%Y5*R=z&J&Vd9EZnk2qf5i3B$oOlDT58CwJ}8J&!N=_aBw)n|6cO(6%-06ZHDyfN7xt z)6fIm3nXh@@$i0!fch|zSbgR|kwks)Ev~n_>Q#UZk5yJo?Qokhie*5F#;t?N@H%^p zZBP55^G>FJ{ri4jaf1T;!hF~cWyJLuj%6yA>pK*9@Bp&qYB_Kw4~@+MG8V!WqQ<*U zwatohECdQ`nb1O&vJkLtGhP0rA`ijt(N5`tA3k(1pCvn430q}9P3ek{F{Rw9E8~l0 zvRvVTR zQ4*gym&wfl%lUBx5H(fR;>By%_b$OxbWdQX2;d=o%HaZL&Aht|i12sz^%;^>)3wsC z5Le+892%0R_iuC8SsAUpJ^IRT?M%I2=-&I67Hb7ml_rc&6^_M+Ocg0d3MWsdTb^#0 zQl|!<-{NDBDBZ~1jop1^C4Fp5;a}U+{c?E2`HPl(b3oWBI>Hc#~i@Br~;3<4yV<(TJ&b?r9eJxLEIi2e*WZ*=p=ZY&VOis<@!lDhYQTh zAqpHMuE8q!j71bTp{#BWs!jsHm4@|DXc$&jDhsYn$aTs3baL&MJwxa-UdEILb5Qda z{DiXraUEm zUcNwnOMd88wom)^uyb(KLs1|P_)I4YDPl<80kIAdYtLlvtQN@!Ar>evsbxxUE|})% zo&!nmIl@CtWx?)~9v}sy={?xS`m$AnqQ1h8n3KA8TG#7EK1Cl?nbEnX;I@|G_$?sE zv_FKm`Z97`J>^I<<=s2Pp5P(vx}t!jo{)ct(7g!g%ozo;f+`fK_JNcvnam8eCPWP-wrgnF3!$0q9s-l0RxoO|AcU!4L4>CMb|rAS$SUb?J;fzaF8c#H#CH#;~eu-%wXK zceoLR6i79+_ivu@d<%G!=5!c)4@hx`dNL>r()inlf(1tfm8ikS#nopqkBGWMz?y?Him2+2=cs#(Fa@i04ucftqwbx(hbCa}$3KH4 zSaSTz$HSXHQmnxLXUEQt_$IP;`;4^iSQc}~16{{56YNyUJ;6)XFi!E^Rf+$c;=nSHK6s zd}M;$9G3VxBMyj)6P`AzLtX4O-S%R!9H4}bd>WPicHv~;V8_bo7Y+V$yF2^@?p_P~ zaOi14vcQFekIB*Z1W~TPU7oIM0W{Y^LmE);AZ?5P1>kW7MO3yg)TQQO3x$eFb9cAy z%Ty?csoCFrnFAFu?fmBT!voAiHIGBN!apZ?E74ebYsGzO4Y<6A$I1y0Wy=Y7h(|J* z?$(cWD&AcGK~NRXVZyzp4>*>@b|@ez38}ssy>HKgbFZI6%yG$ZTk6Lx_wF9yuHZuI z0cX*bAFq;vj!rKxncd$A8BjIoqrA{o%POJV_(t9(lh9wvUd)~m6xuWYrRTn#URps` zVdwS@b^>T;eHXN?E2y?_t`7W<`uy$FVUQKg3l3I;LPTaxZf>smmQKj(1l06eKpR!O z45=K5bYwR19s?X6a)B1bFt^Cdm@Kt_kF2nJhpo`wBOtrIK57q7zp1Y(gQ7=vaWOmW zEehxH8(N^?b=~#BFe}A41cvq`D3D1$h`gRW3B+b7d3>~p3R%|yx=Pv@oJ-a-M>mdp zm#phL-gI?nXMl1D+mRzA$zya*NaoqRJMxV%xM$!SBlxwW?^i!Zcs~pRnaU)d2?o;q zA@_f01;I_b_I1(lLr>+Echeyv`mmy}cz~R*?ei(`n~1m`UA?weu8mWWFp9oUuQ>89 z-ahq08gbS^jJglHEn)hXDQxLXo71}LzXSZIi5LodQqqK&$_aGjgYKcB9aucd2A`de z8&;6Lisn+0C>$O+baVHR_|I253EMZG$>-32HNGbZTlNXNpcnLJL8N&}43R8)ke7|m zPGe#9`D9U9`p8ZFDIS2iOo*z>IyWe24Q#YFBA#> z}Vn#9Az1OX!sY>bC3Z& zfqtY-Y!APg*(fGTwLZ7!Bl%w@~xq6?Pd`wTkfLJgzMrTC~ zVnQOS9=Ssw9yy##g6KpARHnt@wEE1>_g`kE?XfY@5;cLes~ZXhe70&h_ZgdwT9us< zAIijHeZg}+0rTezeV|uJ*`iF+;njQ7q&mHRJ)22qb;bdo=c;%QmWm+pkjL}xUT$8u z0ugH@M6eN(Ov%Cr6Jh!gsYK;cB+C(nTjaWAjfgiPSMw9_QxZ9HkhqMTCif!xpwK*# zi1nb%i~@sLj+VsD&~RLQ7(wct0{J05tys|^kR;&uI9w4#U46kF{1|#Jxt(pzuq@M3YZN@ zl=(RFT6Y9E8Wdj=x@7&rM03@XHtpK4YpA26$K)}oh@t)snj(9SNe3N8>)3row2E%t zuxepLNHhV;!nx_8>o);$F3SzlJ)|CNbb8EmEL)N+Ah~)W=nb_DUELx*Nl7`Q5xX$V ziXCkV7yoGJ#r=LIf9h5cl+YB-3gTf+jK@+GJPEdq+CDhE7nLB_`l zh==+KOA7yX>m3mrYX_QLrC;ovbZsENg5I3r_r^wXJ*PZ`{KqO}u#%fbQ1 z4tmo7X&-XNYSlyOh8zlbXByYx)9=-chzkb23$3oqv*ry;9*#g=yNjKuy!SqR_!J z2m;Q=AT>w-PxW>`&Ena!4p5wx;8JPJm*i5!L!CW~+Fq__sHc}ErnWjEH?O@7b!0pD z+BarJyo12%3Wi2b2qA*03sB;bmJdg0Aw<{OpD6SZ^^E|G5>)!vbh=`ueV|a}IVgby zdVw@S)iS)qD<{w-LjwcSwS8VIz#(xrSs5{+W`UEyc3OiGZKN8I>a_{6FDAfc09NZ_ z$(W48yk zrhU-zjDu~&shaeF(JqyCI`!$Uh7^NMKGk-2+x2jz$UuH6YrNm+TgIL^x4&|*iGk@-6?kVxnM zLF4qdkE-U|3IzoPb6uu-bkb>9-8>%fA|QZyaNM%*T{4b)Nf3}!r;6=5X<@3?Vx%mu zDQjM5Jxr_u6Z9h=8*oa`*9aKYo|~1DKK!a~W1YcE)_MFdaKT?P?paD+OCO3}gjc1b zcp0EDj&r|m9uTTy+_TnhwARi%nXgqf1zZaN2ZS!Q+tYplU&{@81DCZ*NC6B?WJ$60eF|!w$?__ zftC_3o5&=1BSt=NY${h=*8GrrU0jF|Hf!@|=B64Mt^L;a=iuOI=#mr{e^6Z+#;ab9 z#bWpSB~fC_^3S2~VMY{^hd*u1U-$)v$l|m2lL!++-6d|f z7bwiMKgz z{7`^kH&&C^BwV&M#LVq6nKM{htISam1pbs$U2M35f+|>F=VoD{CIir`u-$&XMyQqb z3>4wA?}M5JgU{&uq8H}tO_W0%n{7h)MLsOw83rHZiC%_%(NgvZNLZ&+aWL8Nsi|jH zG9G_$Et`#NQonKINW0rI_q+_e5#?Du>M&><&U`R=8*J7A+eoVEjaB1whb7?680&G; z`}_M32XRP5H^EGLFgZCr-PkkPS1MgNoUyiLH{3De-g&u-9RmCp^Wgrd?4|!b6*csd zgpIc;=Fs`U5$yXz*q;ne9~^=ppi_Bunf>r#5i-n{kH3u+6`wK;doRFQ8>up#xqFjV zS=I!|z#S-`(O+ep<*(P2eoGa~EDbybgu~r%p$?I=xx+)t^AoB^7eP$*V?ar8oQw4G zHr7J+%qyD6Al)i4sV8p#Jmb(#bbEm0!uN9iMM3zBPLfT8EEC=MT)d3O6X2WU2?YIo zzUfFo{SnYzgK22l)!KT0D_)O9g6Tli+3C)5>il2=buL9Nmsm=vX09zIOarta@&G46 z)_rWMdyJd5R3o=sr(Jd~qYYfQa}InEYvWaqe>uhG_Gdu;yh|F$m~}-~6xbm>>d(8* z+VIZ#tMq)zW)NV!&@_>aj2ucx@_$dQ@B_QfjV`-;cr=W4bZBw#oio;tE0jNR*WAYD z`}abHY;CFFHei;Qyq2n0&Slz zAKQF%uhjWHJSHX|W_S5Mq5KU1n41pf$8oo)Dg3Ziv5+PlbUr&4_OCU2ZId^+cLCo? z`I2-;e*NdN9{Jx3qYnE#-S`;J-H0#Uk6_uxbDJW3m$x+yFCIQoSiZJEq}>O%!%uNJ zD^AR}pgfUnYI%y(TfTB{;lknmV6VCN+-r<$j~S#JEw7NotUG>%+{5N0D zY@JyrC|miM2~bvE(mCX%;q}b&tchYCJRNS`+G?-I z*K$Xl#He#abzXC;z(LHp&CCM=xCY!pz$e|<06Wy#-F+Bz>Z<|xeM?)L6{H=$-KlbZ za{1%$1iDZgO@p}1tgJU<2^jC+NKz`1l9Hm{y=GxX@^I}vg+d9Ok`gb9uy>wxhhqwD zMoDhDltu#q<^g=h5I)ZU9 zjQp2w`q(XwQNvI=#g1u%pq`Do_d@!Dq48eaV?1lNj_9vG1EX%a33XNVaN7gQ_Sdud z{_vh(AAk7Q=UwKl3XbBh(%aaN-vS|#9Ifp?c=RahMzA&;q8RwA1TyyEtdQhJOs(n^USLsMYC*S!3mw>45ZGE$(dC1sMH8>5*DV2DKz;T zq~_*(hU_2Pt?;3Aj{16fLrfgvUlkP<9~dBd;M|#Khb`3ALn!ir4|O!RM69pC*^CwA z*`KO2#6`?4lz`0QbV+@dUwZsOz@Rczm7nf>C-pY;x(zxt^g-It*1(~(1~C>~T$Idh z`SeFR@PsMn{^totpFO>y@r_|mR2sgwx0k(Itc_i?wGIROS&JVN$2;eVjw^aQaH*-a zcdBeHES`&IpEQ4Zy+xwzZ_r>2x_G=C)&xgZx2<>nn2Vb`Ibmc?$p?ipI4DIot}}<} zUrMrx57y+S{_&?xBv8i__E?`XP*%h_X0m5~h!|*?fC9-)ef^lj90iUgXp?*QF2Qa% z)Jt$B$f1voiyE)T!bugwE3_?tG5BGv@gA2Tl#W!f9o}%7D3-#WDNAVD38E>cp_r2b z;nwHHZ@LYBUtD#3io*XXw8_Ncr+$6C)-5itQ)-mWhd9@4UOGubl6&T4n0A6c-gg{} z188N5zU1JRwEz4p2})geQ?GZ$cOMN{ z@>t?SOocYDd%n3W%dI}Im^fc(&9)N?+km=)S)pr(&=r_zO)Qux$nw4^yOyec-N`8| zD#fIg8M9PL#p>g{n+n@Bupc6Nd3kx?zj(oLpt_wqu2}?tC6eiW#FiH0Y7K07IvK)i zH?ywfPB>WjMEu(KH*H8s z86%eS>|t;&x%I+UyF=MYCP#Qcq1eg^TjJ%Udc{^fxa8P;d!89lRkic>KG%o=^$``p zJ-bGu^F?DLuZxO&-Wr&eT6X>4=oI~}z!xfHMzur8BBtRXV(~mrXF>V<`3*t(a8-}R zb*iU;C;LPD);87Xz0*H_ghyo=8?3FC!4}2sI!&V7nW2RD;;_NQ6-v|IZ#z&1_ELqb zgYfclvOI4V+LnsP$cc-)+^G4$fyNJVpIRGyZc54>e&YtG6w%?gRQ%<09Z}cuQVX^{ z`L%caJ4Hm+7X$IAD>#WkT8;xbCulv%fA=%?Qi7jD`J8asE0RZFo;aT3xOE?7QMS-yZ3U`yWeVJS5wUaAP)TbxDi zFQ@HrrI&z+An?kgUAhlMI7$xdZPDI_mntk-^m8?vE!dSAERQU%tLJ!_Ch#9k!h^M! zTbpem6lR!2HFk1Gv2k*?4}i8;P%yU~ny(V}lWY8CHIOyY+0XZK$}s>x$0tI7LI~EX z;{2xX(%(oJDd)v7ufQ&L5EZDNKJc5iNMUv*X{FU(TK*3IbMnzWbz0R&I9DW6f5df4 z)c%}r-#XAhB;68}FzVECSV>JaF(aNd;#j?uZS{&&GBRWoZhe#UhVm(K+?|^)TskMU zHFew#8@|V9r3t&FxiB59qA`V8NQU{~xajRKiNLhdCY z8jTB|Jr}k7ixU^M3%?vac9{QLw>b-J%`8b5^)qX0UrU(&`hmZrz!=~~Eu4p;YbojF zCR<_gYw1eC-%NL0Syo_(-AiHn|Cu6QDn*}o!fLx1k*PZAI{9l zw#rtC_i9}sL&fjh@`wL&3D#()-ImX<@isP|YisT8#U{K@N=o_zF$)A@2|#zb29>&f zh57kk_0DMET7LXEdGp{7NMH3dn{BH7BEVj#o0|>x5^`!vg7-4fmE=&vSia~{zL*Jp z4mIKfVuy8u%Gx8E`Y6V8f-uusFI=x8hXHtV_MDtJxoog^rjNs0hC{-0J@11sCG0s9 zmf)#ci5s8H*q`}9ULX4;M$1_u>*vo0vx)~MI+0>pUvwv)bzp< zY^%M;F*n;zb4|!YLPcaQlxAgSF4T|qtW8X0U7sj6dVSr%)huqZr%a2BESzu~^~%nC zX1C>*@7LobH9sY4YT*ASb<%H7r;{hC2!!MJzM*(e|9N3d88r$GAlW<1K)Sh)R8lZA zGpiJ8URd@$AyfX~%}od&>hqN_Kf4Cj{g!Ont(G}$kYL{gLCQ}_$&HO_hrtky*wZs~ z-n{WEfYNTNs08k2W{z1Hr>huYiR<-DB<`A`=AX;dI`+d1Lmh+U4uZh)0vHw;Emg3V zX&n5fi9W4OQ|!gGT$(N~;gh4inUm||BYEJMug!{X9(0Ot)U#CF@)FF$`~IOp#xZ?r*>2u+kaK6jj$g zdb0l&^G+?6C-^ry2WzQE1v)KmfMxMDRcA_l!Bm~pZ6S|`eEU(X)tWKZqf;@~d{*gC zZN27gx?OI!&ENT#l-RcVP*>lpr-(q zKdp;?QUV>GB)Zs8=lpwl&GoO3r-Al%pQC^wFv*%0EX4R_5_ZXCbwj z!5&zj&yLpAY|qg0P_LFfFYFby7oAJ;b7WenWcjOW9)@2(67mf`b4a*m*t>P$7RNQi z#l1+H&A>R?Jz~T`s2B72+rHN7JU@R6EQdZ<^kPivpD5se8-=Xi_7$w;-I0F%D1Ib< z1tTmM<>}jb&L{@c=@MknP9=ZXFZD^5>P4qDpg`#*N_=bR)YRJN`e#h;e7V~BEZDr- z%tH)$H-oM{!=o+lJ~Ob^B8Ot=0iJbJ1__+Al9Hd2da^;ML(+4}z8x~!C*WgqM@&M( zUvCSjxqlac{dc$MD}M9z5i2%{=CfI4DJ$n!V&mh*$(9y;_~Bsb4y)6P(bk#Wj+D_i zIQYs=s79Z`dU`;4NKv?ab;i1UR=V72z>cWh6^YY7p?5Zy| z472-DH-b^!otholr~Se@<40)z7mq_NKzZeXor=m`uc`D=M}^XmptGQinQ^ zsU7Y4kqZ}2pk{2*sgX_nWrmrAT(tZ|>5QFll(z236RlHxLqaNOa@iZ&V}r{nE3Uo5Ke@j=9UKv!U9ql+mie+! zvkS5e;0De6vl}>bK z=;jrI{8Q$~j}MIdL${(LeN9Pc%g@Qk%F2S`pv!MKL!3|wK601><@kC`yVdXUx5jBj z*3!7GXerxjF)V~+xx!G}aIH$QHoeii+wipuszImV@;Kg6yji}q(D%lT2rdHbzpTIRYI0Shc*amvJ_zEzwL9Q6nx2@+RA|IUuvG%=D6>>r)wwn=3b0b zHqp zsRtB(n1=n>tJ^zk!*~_3FX52Q4)X9jZXVQx+QxP!CZ;bVBc?h=M%*7Y9SY7RF)UcU zs-sJL7$bgZ^jXGazME@zAv%V#M9gWMCd4xBs6orkER2(d$$42niqR`26mO&JQ?5yE z$qToqor-Mlv=;u5iZE2_^c*`!j(*eA=h;c>|LM6hkJFqk)^_h7nJ0t}JG?cQCdbbZ zwH*ajyc+d+$-UEgq_Rg;H|m=6Ei|grJGgCBcZY$*^Ymi|Onr6TB51XpxU@9B*6aA8 zJKt5SOCH(VH)kZg^j$tjRIgFtC}x^uz5(aQ&wOuIWt4%<%9BM1>(n|H&S-FLxqog- z-LQ!#%WFFvxplk`-C~j088hmKB}Yd8_U+WWcjZ;QS6ba~E|X;1CjRa5j~@{1$i zIL!3!lD4=mdq{iK(?ZpLs$->oU3Fka{@ zS<~F#D)@K|Vc5;wQ9bHvBenltGMor(cad$o z4OTwJ$NBo&3!@!m1q9P&pL=|y9q4s9*dMog{uT9{{KHbYrG9{^U zHAcP*>TIl%a)iRH2uLOL*VBjECPs{Q;oTYk=`s#(DVGp~lPR>Heb`%K zF{_kYEplkq(DJ<(Z*ywN6?a8^Mhd}j8R)6)6(4@)sLH0@UvO@^xmg43KCJkLp(^GN z$Kfwg=gn_uk^o!f54{>aCW#-Pv9qna2!kUd9~j6VH6072GMQ$hr@GU^m*p(~@O@)= z8dVp+@KnFyR_oDdLWvMIgTJbMSDv_woTJd!NZZP&gaYNx+Q^lp+J{~QJDib|LRF*4 z*S-aQrp0dOfaP(&_SpHrVC6>Niw*fiJ6E}dBgI~GO-hXg*bq1zE$Tc!5hlZZ%TxGJoDuIuHvATOSE3BA zhjsw@#f7nUT{&S=%zUq$KXt}!`Q(ME+~M3Bz2EFF77c#dv`sNK(SARou8o~^Y1F@o z>eTw&jzSlwUVDlMC=9~egQGyWW)(Iq?VLObnl*rK}=(3qN5&z>#<`7^I1yN)QZT#FvorE z-oGYR%qxEto91fB&j#zfqi?*NVkEP+c6Y5d;kEP-wf{G;_17={VC=46-i41(6nHG6 z^KPVXwK}W3?K=CTw9HKLtmx?IPY~UD@D3&i{fxo==YHBAz_eL5TWW37(DTx$)X{6|&mVbA=P5+jr;r#I%W94{YzeFTD2< zVWMlHcIMl-(a5vQCy2Z$%sCtyDvPg6NyC3D9-wKtwo+^SdY!t$j*AKLgm)&n*|dUmS4{N zqTlNmd`v3x7uyMQs5Ve9qjyRi4*T9E3NmHV7cbgW3)&L<`p|tio9_LDV+NeF`P;;w zSxcGJ*94l*ZoY@aTkV=HDW}eAlIw91$0#e?nqux9^{JA0Xyqw?j5MM@|Ku88DccGg z9e{VBZ4+#3`4)V3CtA7e_(Z0CfpJuXdZ)JqSytDyf6~@6H9gBqjKY^=(_V)wb&fG8 zDpEZ(q%Rlss&wsy$5LmVnmwFrOlt3aoR1yAwr*1d)qajsmX(geyS;OtPWcwlc06= z2RcOZ*4F8%!ReX~&>VXT9SIHoUv=Hw&zJxb+d$Cz);^`Grsij9W{~HGeHr6f*!HeX zt-wIyLxgjaOTXQ)R`Crvg64@{XAKsvL5#Ie#G88j9)t- z{CTX=RhCeHeZg6(yx3y8D0GO-Xi}T%^Lxr%ZS*$T;7}>iTg_;v%X)X`On#dlh z!w$=lnvHYQ+i+=?lhaLf2U1GYVyBDd7R_*{3=w zy2RePJO?RR)5oTFBdOn>M!k6{_LH6mICf$>(lIX;d9sPEt^2KaY7>z(R?2*( zUg~iDkg4bS$5!S0(Z$TJ0tacEXg<`XQ}HWLRhdurhkF&ZE-*O<&8XNFT^F~rVMPTF z7jzm$XzwXMY5t(`PT4I1T<=_wNz+a(EDQHnnKs&s>C*vZ=Eg`zVGc*3!^!**1_d2#RzjCo(#Er;TTuohAwH`;~ z?)0BzVkst`E?6tE9ws-D37D7Sm*2YfkCO77I?mui96P)EL;4&04O79;=F0-{0$F#U zqx_I}|4d_g@6}Z61YGPGrb>>+)0G}!*S6r$lX=>Q*nF>yzwCSDB~LjLV`z zM|a6zEYB-K^W3>=Nk=kv!*?*>V z<|lZ z*Lq~4U&Rz+b?s5w<0u2S!^?^GZHh`+;im@X7G0*V_06$5AEJ)Ek668M#$nY|RY&^L z>CF~^4wa4AF?r$H@Oq-_XwB4PK)ydL^Gf}ghvoc32 zT4{O=0l^dvk+OBl(sJf*p{cph7@}ZH+*GEBfaF9)pd>*=@VTwd?-{Sx^ZnDmL9|Py= zMN_Tjrtn37S$`;Y!l^G^{it=J407cBg4-~@`_x!#I42ScsC^}=x$WAP56UDK>2|=x ze_(>dEvtLE-c}Y}x&*xB(qtMI3V5jJh2w>Y5^ zn%PHyQ-h;YT7n8ts}j&ygCIY|-ex;gT#@scrglgc3KU0wtdKDppaL1>(hj07Oho1A zyyRw~cS)oW_HcR71ZbGM64ytfpL67Mt#KlH$?qA?lG!gthf1O`xPnazGRNNgk4GT5 zoh&NQu3&zha*jSuGLG@%rKN1WA<&FW`*t|@2!vT-xtTLCaK6i(AHFU?>x;LK5B=uB z&7#T4_8kKYLL8$GUw#8(`i7tH@*lvV|0Ucp{>ZVN2<(){BLk!%kXaC_!9A4?u8Y!( z2iVnjJf~U*vepNvF`cPaz1Z2yLsIsYl^b65Zp$pX_}_NlgZjH5)7q1JD#SN*r0bPY zAH~D0ns3Zg?hZft0=jpIt~f!3cH!p=RqO-UwCbeq97p>EzLKD@5d+o_tbT~QGxhrg9t6cs`b zw1LeD-O<8Yt?2Pt_uL4(@u{aPvc?JTm)}^Ij}M`;iBDBF>k^cK(+g#w z18gz(^G`+*jQG9WI96N>%OlW^hUw|#QF%>iP>*`ScwVI~=D{E&zq}9y8uU65%}4|D zgb!+xo5>2dyl6aRWEpby^mkkSqog8b)VBAsBJ|EwRArwe1BGqoC~C$YanWxD$NHz& z%iE zacjzME=hz`zAFDm@3|A_=?W6Td?EAyaRQFRt?rdwDuq19$@j9VqgO@Mrsu zB9HiXTU@rYL;D@wcJ$)J_Z#|l^16F&_x_YHn&rUKHXeS}V1bB+f*98j-#r8w!_DF$ z>;850nOAA@3xb~P?PDI)iL$ZY+Rt-@vdZFiP~>l`@^!PaR$zS)%dF+W1fAoLyCYZP z54&N*!r(fsF!F=MbH;LidKw@dEP4Wz$rsK!c@@jwZkH{f$6TXAjG5kaH}(>LLd5dW z(9pz#PjrC((TmqOKsi$rm|S3;fn=8ZZ+QL$_^D*w<_wE_c6;_b88EF@#5jaqF2GB= zChE?fYwh%S+hFw}14DRiqgRJqoa2W;bUHwf+i2ZfC-fkW6j*aJxmiTzQ>vUES{%); zGeX~sF(S}#owtRz(Xct_tRh-AAU=kCE>s>E&Qr~-JH%B|`0oh_hJXLJj4_u7BDTF* zjgc%+su1=sjZ+etJ(|0OuOh{N$v`f;HkXs%YQfhF8III?$Vh+6I8~jfE!xwEwiSBx z^xM0$&G~-+XkFQ_ScB#M&aWSfC(BZ3yC@tftHE1ZqX(K6tD_1*^JSxQMlxgkdbzhA zSptaYTQETYCU^@L?U#x;TJ|MWEdT>xs@Xe8NV8Z7;Ysi#Zj7IX^~%9n<)6Rc_C-Kx zSqIQ%lXfoCEGpK8Z2?BX;+GFLDYa`|k8QDgV@xuU_mugYr4PS;u{;#Mk|6d!t=$xb ztr}NbK4|XK7xVWyBL5XyF;QET=zKum;jW~M4*T5fO;K3 zxNS`r0P*{QiiDnXo>PVe`=gz$pQwS$(;=fN_wSD%)B6-{x<)hH^01aLXH!eqiK3dS z$XQ$eqVF|!LURc-D$9Qy|Fkq~@J6~4Ll#r_LSGFAKOj=sN9)Bib3+I=MQlrtkn*K; zUNTJ^tEU379pUp)(llxqeJ@YWunQWmug8oOWXXFzIzV(dEVwj|D$LkVlYkYcp>5n} zqFLLvq050^9JFy#c*;kpILM{JD%^$|LKDWd3UaY?xKXmAJ=^E&Fa3#T&P`ftUT~|Q~GBEHu)m!Kq(>%ES&$pci+GZgVpp4+w9Z32+EsQ0L%q zIIz-Si*7S;hn50uU|nVg5|}A;{m|{z8o5?bt;zMetk$)!Q1 z;yCus?gVNugB@BT?2K}3FPX9B$zKfj@uw}tIWt1%a&cvrEIyqQHkFxCXDyKy5({XB z@*dOfesJZPpdBnL#ytLts$*l?98g7uS;j(^8c7@g`QhLzKczQ6-v;p}o}k7FxpyaR zPgA>Ka`Lk2mmH{I<};I7>=eLiKohxA*3Gb`wNEGN35Eamqb}M>_>uKYrKD0c8gUz% zs}8>|$aO${|4j|Kv*mw;&v%OG8=mYBo;ugwS`2ZlMHTKmKMOe5=~v1YCfa`kzQCK_ z-AdAJHF>Zyj|K>0Q#35%WO4)IgDLVKes?gn7vr;*OP!3P4$AGQM1*w2EuvD0>;I{UTM{beTSurgGqp;ATB1W+p-N zvFq`Lr`bDSz5JZu(vb_#9U+L}L{4-8JRhmp{)z+J0!NRC>}kq)Hp-DQN(sgFFa%u( zD^Vqw;c~tQe^*or?(?2miL+1;uV|FeY#8%((Sr7?souwZs#Prbp{nq&-l^4Z&d`8; zTI+yNMx6v)QcxcOpo9VZE+q|d%yhu{lU2{63f34oD092++q~)y1Mvcn^W%{IrYgU# zGpK&2Y@vn3EW7HmWtnE84T%rLl;+D$zDfN*R3SpcCfB1Rd%#xp}YSMJu{@2vq>0xC= zN7cQb|HLBSy>q2k$HVm8ky#hjz*>WsjDflheJ9Fv*xk)d18AuYodv*vCscqv)&L-F zD~X@Kf6WRq;OMe|7-uae1?L2|E58O_sAeRMQVOH{^5J}Pn`A~2$z-rA?T-N&r!=r%Z7d9R2Tb&nF0^8gZXzkO1-M3 z-dCMSC^xEiYg%=p=^p9Xv$r?kY1M~o7sG($1Hj*Hw0IK}MT;x&UXh+>{#7Qc{>+{r zUE>tanT}pqYq8|P?HwfFt1gB=wS?iea_;YRzv<{xOOuBEYr-zQ9V;Owpmi zPI-d2?CQvBx%DdRgy&no5_bnC(`u`vOvAVQ{|#XLmTwM#j8Z7D`-wBlA0|mR$PaGR zZ0Kei0o>uwv-8L`EzaFFA;_}fqPF(=nRQ4YHE=2cu;ed|*VK!+0F`W!4%snEAQF?j zo4OY+r<3r^;<=rL#dEPF<|O;?n_w-^kyp&d3@ty_hzb~VdNW=s8!%&r^L>#D;S~D} zzWg+Oz^scJUgZV?7EkT@37@s#QYx4#t{g#3{ zZILkJ;@#7d#=SaA)Vn;jh~>|nVu2KGDl9toqw1x%<@wqKvhv)o&#)?0zS*QrYd5Yd zb?aOR;51+xnM;ts+%wmk0a~s=_5Y$5a+>Si3Jktq4zR|+;=!c=ga1kP6m#jM&!Mv| zbG`Y+Vn35pofz50qE}Zg)V0?acdt$A2NUu~DhsW7Fqd#z{cglZYHevSGT<7N-^pZ1 zx!f!;orl^V#934mrSE6EmtCNoG%Uuhig7gQJVCH0-mg(U1^kFdiE>uRjS6Oz*oTSG z{V@_kHq(g6Gec#^@_8^`KUxH0d&qJ|xq4R`CZoS*`CI|1$T3U?#m6~6?KJa`$_BJM z2i@9_CU|57WI0zp7mjysKU0XMK zUN8s(kWpu^M$1XwcqROy}JvLSzs#?;?kzK(Th8(EEz>9PebZEl+TZH`huE&0N!Dxz7UN8VRRiek~s=be?;y z?zrr?$LFnY=#%`O9SdRF>FsOVRndN?CPhwxYo0rgYIK6w%m{x%Ih5a?cA0(Tc7?&zm3O8L?%m_3KJ+LzFaMQcT{W3xYX^NaaH-uQ_vwJ7VLx(qELy*HnP#e3BSFX6CUWRd zrS`JO0<*I^s9*Ld7f)INd?WU~)JkL1W}+c58~)}awe&Ur9XOmFD5BNWSTEZkV-$=4 zi%@@ltG;f?HzX?@B($!3Y1g@m@ZjsDrK|Ousl}h1$sz)P0^=FFji(7Kp4#QtFAdN2 zEfWBHjp;FQVPVDGl-|fnXqIcPL$M?nS|*r~=2;Eu7mm}+x|UNo1UFgmn+u&`2*s%M zJ-8ymaq?T8@3E4zyImcEEj zS~-%cf#@C=izhr(RpQJe58{KRuF#F#n$u-Fa$b85COEgNXPwkpwFD8#xUbz1_`vHA zM;g+7E;-^lpHZkZ47R|L zXALk8KzkBBj%g*%$*3!cQ~VW8o7rK{!zDAo#b^BI>oO-G{fLq2a4ICARC|OlAg=jL zW(Z{Q63tc+Lmf0v#zaP&)A){x^Ggj@a=w(~z2KJdWnHk|9{f=9zI-nv%Cv6HzfTfK z1`Y;%0>nPrvk}*|s>9!z8_b4dd`=xX;%Q+0Kw%P?ep3G`sO-fGSi!H9!hD02AsWcp zT?fN??f%uS=)Kpv-NNHTxcl)|d|QOZA)He{Ir2p%Xg>`IkY0XZGQ$@8`z=3JCg^L- z)RNUnpp8D)8>~1NWx;HUt$D61>t-foWoxFw62kjx&xH0a#xGS#enEiTf7A;yok*bO4&KAc%wOjoxfxP?H zTN_gGta^&$ma=Bn1nCrfZya%vFX-B;Z9JYM&~X0kVRv9oAolpc8Q)}{y8dxvBb~C~D_0D3<2Ro0e%;mwe;?T4@z)!;1 z`Ft1~9?Z9Ms&3>JYPGT)+E_XRc?p-oCKI?+MVIum%QqQ@MV?ZO!r3hEN$Gp7?{fNN z{oTZyod}KUw0fx&ekeDJATX+VzTrK&=^A?}dY(iVd?$v?ONxZl2yDa9S_&4fob=^H zbD?!@QzAE+$~lE@F}RKj)@VUMT^i4RnIr1=gAUw zL?>|3FFs4)>~C{=rlWEX2AiyoNN9Y$$@*^TOPBrWHo}OFDEIgNrT?Y|0EpjFH|!K( zsm#xBaN158>G63F2w3>J&)8_mzEm*RRlAVCuwr|FB?dB6!CRm`w|BSB@o{^gWDM#zLp22ffv*c028U z5brd9{p6c#dPY|;2Tp!!N1?d78sFBmge2|EQ~mQMdQPtO^Zk73ny`qu(!FDOU<<1; z16T)I5pfRUu5p;yux3fyify55_&c_TW|-zH*9s|ztIXVeqOSiPwfMZdBj@4~Ok`&g z7ZwxIZ&hiEh7@l#KCP8E zL{Mx;8BRv;6`Q=digG`OF@h{^*=>B zY>VH7W>yUo@|A4Q0i#1P@%@-AiostF-Vf*a*v`VuKit18YXf+ZI9}u1oSNd(%3nSn zc!rXykVI0N(r$n0)34j`jmAE|0^xP(&ohuiHhnqq+@DTGaMGS`&;o2e0elMZMb7Wj zcLC|&o%Enm=S$j~ZjN`|S3g4qKl;x2n()!lfBoaF_bLK9GTMKM;N33|kL|4a@HO9v zQ=^D1b`e&d(X(zoTUsdEEZ_X*=49Jh?^@bp*AY6hEitb2@GRdl%zw}Ted>6RfJkDS zBg}BXFi)ao5N~Sn6$0(_A4_~i4%?$aF$j=#?SB5uVBU(ni=s^}cIGA`OY5)ORr_t( z?G4&Wos!`ti7w#l^$D4mvN|_>OUwvdZ}COWmt$)fj{mVkk$dKh`r}_XSno|cx$wsm MN8Arr96Xo!Uy0;qXaE2J literal 0 HcmV?d00001 diff --git a/public/images/docs/diagrams/prewarm.png b/public/images/docs/diagrams/prewarm.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ec1c49db3c415c8ab15407c8d90072d3484df0 GIT binary patch literal 69316 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 Eg*x3R;yFC zB?JvpW6Qw6z^35#H!`+GWU6X*AQ>zHg%6bK&GmsKI*mZIVB5SF{5$V~2Q5tM4Dj$j zQAEt3#D-hXLoD?%gW`#^bfEJWYN#Ff z^4dodHPX;Gadd7oOe#XvRFN&1v{nqTXLp^T955<&&2`jKuKeb9Ut7x==cwAGE!ugteme7N2Rs_0h-_uEgTY;lO&JM!$hm={}Nz zkRfbEOr2@_m6%d{vr3 zj#E2ni`gz2v{votPb{kCg`1+uBZbxJ+ay--oyd zF~%SwUjuBf#4N>U_9635Ct|gBS!ATyK#XW=7jCda{Rq*p?WgK5TLIe1>8eR91?D@s zIjt&*A9D43z-6C$Fcr|QD7XBuc&Xm?hOG!{qy8Ld3L6x?e+V`PlDU+kcVE%yUb+GH z%Xq6VPWn&yLBl_=&5cfVnPQyk`kTfXule%TFaS!TmKRdm(r-pbsyQ!zd!|nGySKIF zy4H(1Cyi2_At-YPPe`h)l_yDphVll`>wkJTIw-U0QuYSc4T9YfWvN#${y=>m7-r0DNeSv6sZ zzR6}q!$a=xd*e12%bCZgw*_jc&~hLilO6vsSGoO(8+PJvRpW38CN;iF>6?HiYi*z8 z_2e>CTLb6_lo94pJ&^d|qGMyRYB%8&S)(u#z@bR-)6prQtftJo>!M`TmA|!_TYe4A z51T6MYGKtmg+~kEwMgxx?ZT5ueVsqj4H4rSTmJO8)8U9wkBEY0fgPFS;b}}mDkM*a z`k<*%8D<*TTNjX}R?AH@jW%$ZNyE@$o0qptjhH#Uahc}kahXUfp#OWsf|g#mW>irM zx*N?3+bAs|?Q2#t;369mXyal)?YD63gZFJ8a<^5|b3Rso3UtOIt@A)%K8R2)iM&bK zwmBS?v(#0d=3a&CM&PkFO~wc<46Ni|hT*_(1^J7vm8&sb0IVG|p~wSYj(S`*(_o-H zi+xjYtv1cowl_W3`V#0RKm0g3>m}j3q;3AU7hA(ogDQ& zm@}w#Hel&MnR*Ddj6jv5*FHcOZC$W(kAg!QQgGnBBVQ0!zE26W;?Bt3tHZye z^7DIx2k?fzHxZe6xLMHb7EEQa!3mo@Mye(#=ljhk@?MXd$0$sjb~;Z*YyYBcnMpUm zeE1&v$2B)@RaHGBB|yM*=ueyi^&rA)X_^R@4-3cxnanE;+L^{p>J7=s-`^BmrAgb9 z>lI=?g5oYYLKZ62mnlz$F*`%{Krj6~IhQxPhgaF?;(!9@mF%RCnJ&zkJ>La&nT|Mr zp4*5~`b<>J%&J0-FN_U0)vRn(?(W=IcJ2D0>8n_zl?CpaW%WtCt8W4K&5jQJQw>Qz z;PR9sbLA-UPXymKqO{}7gA(nbS3H04y`N2$FVW&(!>hONTbqv)eMvmdPe9N(cg~7d zKGG=w%rC<@_an%L8~0iiezXDE!lv*f@FWA#gw8z;T}V1QS)wsZb$hA@=($(?7NZpC z!quRp8iZ8#FC`q#FU%#Jf0;+Lm~Vzj#4=aT&V^1V43?usU@+GfEpYG`!4<(K=I!-> zmViu-Oii>Zou;yqI5(|4AW{84XWcQXm>$e>yH1M^bbF2==`_QM5cJK;dsQPz`{^4j zSghXFNzUN+=u~68NIcL5$5u*!H#N7kWJ12>W(FPvAB$7=(024N9aibQcV&e-mRF)A zDc(L#=T%vf`{Rj^Y&BEv$MsyoJ4aVy37e0=6T#mNLqirLF>uaEOFSq}K+Rj`Z$Vo~ zUY>IH)o-BZxug+D{o~kyc#}FextIcS0oNHc*hKJo8v)!)jnAHjCX5F9%OiuUu4lqS zK*jbvXeCMBtO4+31S-9?|0bFNDXAW`R2{3)9aZ40FSwxk{G*%rg|t20no`3K=K4zR zEsxF2ov*I1>=dZY-!&)jL9g-swV9sbUdeTjf20ZbYv9`0HTV$l^} zLPH|K;}SGaL?IvsQP1A?{^B4Js&*qo+xN686u@RfO++0eo(3YIo(oXb0Tlg2%M$6C zl;Hm^yz z`+|J>K>Jq2j@EG$JXN6#1Uu&nZ4hc6!H<{K4I=)Th|5Xat2{er!H-5po^r0d*MrD-}qo}egE0_s6J zlIhK-kGRDPRtY{MmF}UyUcIk<{Mx}jzBMeWy$l&RC7D2?fi7w3<8yI2?uAz8QCPs| zTW9^4xzs>D1p3I>Kwn$C9Ehvf9(bJu=VakSN`H*6k=O2s1rQUGAOkEK{KDdV8M>tj z>(v{~^|yb);t+*ISK96V$h!ucyzLhrp7i)}AvkbQWRScFxkPLZ$Z}Gx-SGRG)}*_l zY5vbN3FfS6{ZKB5_`C8zTV2!gKSN@dL2C+!hXIio0ZMg{cgXV!lJ*sXowAb#_ag3j{YG}DN%A>GK(DQNGf zp*PMvDiQr_AnIQF0zHf4B!A#Wss_0R=~MkqhLQ=L0p$_kHevwQ52vQh%%k`c)Ga2I zKpXE}Kc|3zr{J@Ae`prxh(vchR<1<` zl#BHXJx=2wW7K`t%kL^zTOfO zG~=Y1bSM`g=O1dP|GUru@WzwVO~z+kPS3w1igMkoot3@zVVNlRl4Big%NHh%yk6l4krxFq#5@?v-~*JPy_17bRakc za2$`kT%xpwMBMo~ZUF1G8NU_B`*SEB%mW1qS_%yfM7h$6a9;5A@H=en%IBF<2QlaA zne+&*`8-)&q_$mSY@ zyl{h;xx!cPN4HOL^fE~Ya}h#j!L^QUwbir}z0yqF3eTB8QhHvF0x!8fV#JC41tP&a z9}1!(gf!#o5f6dy7bH6SC~P+o80AleyXJrmn9u=9T(5MTAMeG~!S2uIf&QSz9hMX3 z*7e+9ZdVyXPW;=`PfhZ1@j!M5iSg?>DUjy}-ULnxX|m>zutO`9+a82jE$jPd?CV{@ zz0k%Hzb4mJURHwRy>lpUhz#znamhleA{o*(uV=GL*)5y-R=Aw|0T1MlQ+{ zkCYnZ3#s97aTd}HP_V~<9$B^D;BGUs^QG=b=1F6P#|;M}`1IqJZuGI{-M+B7^)?A{ z(-}-YAr1!nN}U-y=zT8F<%65oXw%%#;^QPDF6d8L6}IeT6&pJRX9s_fk4_Co&nN5t*QqBSB71P7AQ1aR4)&fVPlZ__mtc z*l|HnY7hH*yK-E;>Q~=R%kH=`pNhwC9Y=rviqeV-Jk(zdbp+?SN_!4yN#)eEG?-eN z!hB==qQUP_h?NJpnxhnX^KOsItDfjw5y?}y=i5kN80Wx9>M4#)vbyJjWf`DmH*>lbGoTIz|4Ps+$>kOn1{=QkloA3H`SfgT zZFPg0)Y?2^kHIVkx@#G)H$$R{0rnAfLUu)j@PDR=HBo<7ptQg z=ZwWvu1*4UO4J%~LR*4br-v(OAXMcr@h}9kCum{^y!F@MIX;mB=t2R;EZ1NOWSqV! zl*LJv>sP(bg$xWCwDt?q#(@W#;D%ym7__Z1D*T`%0AIC){eLGaq50b91(ac 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 RR$c$f;@qXP)n{%b{|{caZtwsA literal 0 HcmV?d00001 diff --git a/src/components/MDX/Diagram.tsx b/src/components/MDX/Diagram.tsx index 7920661da..649f48dff 100644 --- a/src/components/MDX/Diagram.tsx +++ b/src/components/MDX/Diagram.tsx @@ -15,8 +15,8 @@ interface DiagramProps { function Caption({text}: {text: string}) { return ( -

-
+
+
{text}
diff --git a/src/content/blog/2024/04/25/react-19-upgrade-guide.md b/src/content/blog/2024/04/25/react-19-upgrade-guide.md index 5ead75a20..e6d76ec7b 100644 --- a/src/content/blog/2024/04/25/react-19-upgrade-guide.md +++ b/src/content/blog/2024/04/25/react-19-upgrade-guide.md @@ -536,6 +536,24 @@ When double rendering in Strict Mode in development, `useMemo` and `useCallback` As with all Strict Mode behaviors, these features are designed to proactively surface bugs in your components during development so you can fix them before they are shipped to production. For example, during development, Strict Mode will double-invoke ref callback functions on initial mount, to simulate what happens when a mounted component is replaced by a Suspense fallback. +### Improvements to Suspense {/*improvements-to-suspense*/} + +In React 19, when a component suspends, React will immediately commit the fallback of the nearest Suspense boundary without waiting for the entire sibling tree to render. After the fallback commits, React schedules another render for the suspended siblings to "pre-warm" lazy requests in the rest of the tree: + + + +Previously, when a component suspended, the suspended siblings were rendered and then the fallback was committed. + + + + + +In React 19, when a component suspends, the fallback is committed and then the suspended siblings are rendered. + + + +This change means Suspense fallbacks display faster, while still warming lazy requests in the suspended tree. + ### UMD builds removed {/*umd-builds-removed*/} UMD was widely used in the past as a convenient way to load React without a build step. Now, there are modern alternatives for loading modules as scripts in HTML documents. Starting with React 19, React will no longer produce UMD builds to reduce the complexity of its testing and release process. From 02d5a920b154d912bd8470f4522fb3724e26f871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 20:37:48 +0900 Subject: [PATCH 20/31] docs: resolve conflicts in `sync-84f29eb2` --- src/content/community/acknowledgements.md | 6 +----- src/content/reference/react/useReducer.md | 12 +++--------- .../rules/components-and-hooks-must-be-pure.md | 6 +----- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/content/community/acknowledgements.md b/src/content/community/acknowledgements.md index 02eced6a1..5726771b3 100644 --- a/src/content/community/acknowledgements.md +++ b/src/content/community/acknowledgements.md @@ -4,11 +4,7 @@ title: 감사의 말 -<<<<<<< HEAD -React는 원래 [Jordan Walke](https://github.com/jordwalke)에 의해 만들어졌습니다. 오늘날 React에는 [작업을 전담하는 전임 팀](/community/team)과 천여 명이 넘는 [오픈 소스 기여자들](https://github.com/facebook/react/blob/main/AUTHORS)이 있습니다. -======= -React was originally created by [Jordan Walke.](https://github.com/jordwalke) Today, React has a [dedicated full-time team working on it](/community/team), as well as over a thousand [open source contributors.](https://github.com/facebook/react/graphs/contributors) ->>>>>>> 84f29eb20af17e9c154b9ad71c21af4c9171e4a2 +React는 원래 [Jordan Walke](https://github.com/jordwalke)에 의해 만들어졌습니다. 오늘날 React에는 [작업을 전담하는 전임 팀](/community/team)과 천여 명이 넘는 [오픈 소스 기여자들](https://github.com/facebook/react/graphs/contributors)이 있습니다. diff --git a/src/content/reference/react/useReducer.md b/src/content/reference/react/useReducer.md index f3e62351f..5e169c23e 100644 --- a/src/content/reference/react/useReducer.md +++ b/src/content/reference/react/useReducer.md @@ -51,15 +51,9 @@ function MyComponent() { #### 주의 사항 {/*caveats*/} -<<<<<<< HEAD -* `useReducer`는 Hook이므로 **컴포넌트의 최상위** 또는 커스텀 Hook에서만 호출할 수 있습니다. 반복문이나 조건문에서는 사용할 수 없습니다. 필요한 경우 새로운 컴포넌트를 추출하고 해당 컴포넌트로 state를 옮겨서 사용할 수 있습니다. -* The `dispatch` function has a stable identity, so you will often see it omitted from effect dependencies, but including it will not cause the effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) -* Strict Mode에서는 [우연한 비순수성](#my-reducer-or-initializer-function-runs-twice)을 찾아내기 위해 reducer와 init 함수를 두번 호출합니다. 개발 환경에서만 한정된 동작이며, 배포 모드에는 영향을 미치지 않습니다. reducer와 init 함수가 순수 함수라면(그래야만 하듯이) 로직에 어떠한 영향도 미치지 않습니다. 호출 중 하나의 결과는 무시합니다. -======= -* `useReducer` is a Hook, so you can only call it **at the top level of your component** or your own Hooks. You can't call it inside loops or conditions. If you need that, extract a new component and move the state into it. -* The `dispatch` function has a stable identity, so you will often see it omitted from Effect dependencies, but including it will not cause the Effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) -* In Strict Mode, React will **call your reducer and initializer twice** in order to [help you find accidental impurities.](#my-reducer-or-initializer-function-runs-twice) This is development-only behavior and does not affect production. If your reducer and initializer are pure (as they should be), this should not affect your logic. The result from one of the calls is ignored. ->>>>>>> 84f29eb20af17e9c154b9ad71c21af4c9171e4a2 +* `useReducer`는 Hook이므로 **컴포넌트의 최상위** 또는 커스텀 Hook에서만 호출할 수 있습니다. 반복문이나 조건문에서는 사용할 수 없습니다. 필요한 경우 새로운 컴포넌트를 추출하고 해당 컴포넌트로 State를 옮겨서 사용할 수 있습니다. +* The `dispatch` function has a stable identity, so you will often see it omitted from effect dependencies, but including it will not cause the Effect to fire. If the linter lets you omit a dependency without errors, it is safe to do. [Learn more about removing Effect dependencies.](/learn/removing-effect-dependencies#move-dynamic-objects-and-functions-inside-your-effect) +* Strict Mode에서는 [우연한 비순수성](#my-reducer-or-initializer-function-runs-twice)을 찾아내기 위해 Reducer와 `init` 함수를 두번 호출합니다. 개발 환경에서만 한정된 동작이며, 배포Production 환경에는 영향을 미치지 않습니다. Reducer와 `init` 함수가 순수 함수라면(그래야만 하듯이) 로직에 어떠한 영향도 미치지 않습니다. 호출 중 하나의 결과는 무시합니다. --- diff --git a/src/content/reference/rules/components-and-hooks-must-be-pure.md b/src/content/reference/rules/components-and-hooks-must-be-pure.md index 072bfb6b6..cc1bf4fe7 100644 --- a/src/content/reference/rules/components-and-hooks-must-be-pure.md +++ b/src/content/reference/rules/components-and-hooks-must-be-pure.md @@ -194,11 +194,7 @@ function ProductDetailPage({ product }) { } ``` -<<<<<<< HEAD -`window.title`을 렌더링 외부에서 업데이트하는 한 가지 방법은 [컴포넌트를 `window`와 동기화하는 것](/learn/synchronizing-with-effects)입니다. -======= -One way to achieve the desired result of updating `document.title` outside of render is to [synchronize the component with `document`](/learn/synchronizing-with-effects). ->>>>>>> 84f29eb20af17e9c154b9ad71c21af4c9171e4a2 +원하는 결과를 얻기 위해 렌더링 외부에서 `document.title`을 업데이트하는 한 가지 방법은 [컴포넌트를 `document`와 동기화하는 것](/learn/synchronizing-with-effects)입니다. 컴포넌트를 여러 번 호출해도 안전하고 다른 컴포넌트의 렌더링에 영향을 주지 않는 한, React는 엄격한 함수형 프로그래밍의 의미에서 100% 순수하지 않아도 상관하지 않습니다. 더 중요한 것은 [컴포넌트가 반드시 멱등해야 한다는 것](/reference/rules/components-and-hooks-must-be-pure)입니다. From cbafdc4b1ca79f2afe62e625a9c4d0cecb0069d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 20:47:26 +0900 Subject: [PATCH 21/31] =?UTF-8?q?docs:=20rename=20`react=20=ED=95=99?= =?UTF-8?q?=EC=8A=B5`=20to=20`react=20=ED=95=99=EC=8A=B5=ED=95=98=EA=B8=B0?= =?UTF-8?q?`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CONTRIBUTING.md | 4 ++-- src/components/Layout/HomeContent.js | 2 +- src/sidebarLearn.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 327466732..8b45bbd42 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,9 +16,9 @@ React 문서 기여에 관심을 가져주셔서 감사합니다! 이 문서는 다양한 학습 스타일과 사용 사례를 고려하여 분할되어 있습니다. 본문을 수정할 때는 주변 글의 톤Tone과 스타일Style에 맞게 작성하도록 주의하세요. 새로운 글을 작성할 때는 같은 섹션에 있는 다른 글들과 톤을 맞추도록 하세요. 각 섹션의 의도와 동기는 아래에서 확인할 수 있습니다. -**[React 학습](https://ko.react.dev/learn)** 섹션은 기초 개념을 단계별로 소개하기 위해 만들어졌습니다. 여기서 제공되는 글들은 이전에 설명된 지식을 바탕으로 하므로, 글 간 앞뒤 개념이 중복되거나 꼬이지 않도록 주의하세요. 독자는 첫 번째 글부터 마지막 글까지 순서대로 읽으며 개념을 익힐 수 있어야 하며, 추가 설명을 위해 미리 앞선 개념들을 살펴보지 않도록 해야 합니다. 이런 이유로 상태State는 이벤트Event보다 먼저 설명되고, 'React로 사고하기' 파트에서 `ref`를 사용하지 않는 등 특정 순서가 정해져 있습니다. 동시에 'React 학습'은 React 개념에 대한 참고 자료 역할을 하므로, 개념들에 대한 정의와 상호 관계를 엄격하게 다루어야 합니다. +**[React 학습하기](https://ko.react.dev/learn)** 섹션은 기초 개념을 단계별로 소개하기 위해 만들어졌습니다. 여기서 제공되는 글들은 이전에 설명된 지식을 바탕으로 하므로, 글 간 앞뒤 개념이 중복되거나 꼬이지 않도록 주의하세요. 독자는 첫 번째 글부터 마지막 글까지 순서대로 읽으며 개념을 익힐 수 있어야 하며, 추가 설명을 위해 미리 앞선 개념들을 살펴보지 않도록 해야 합니다. 이런 이유로 상태State는 이벤트Event보다 먼저 설명되고, 'React로 사고하기' 파트에서 `ref`를 사용하지 않는 등 특정 순서가 정해져 있습니다. 동시에 'React 학습하기'는 React 개념에 대한 참고 자료 역할을 하므로, 개념들에 대한 정의와 상호 관계를 엄격하게 다루어야 합니다. -**[API 레퍼런스](https://ko.react.dev/reference/react)** 섹션은 개념이 아닌 API별로 정리되어 있으며, 가능한 한 모든 경우를 포함하는 것을 목표로 합니다. 'React 학습'에서 간단히 다뤘거나 생략한 예외 사항Edge Cases 혹은 권장 사항Recommendations은 해당 API의 레퍼런스 문서에 추가로 언급해야 합니다. +**[API 레퍼런스](https://ko.react.dev/reference/react)** 섹션은 개념이 아닌 API별로 정리되어 있으며, 가능한 한 모든 경우를 포함하는 것을 목표로 합니다. 'React 학습하기'에서 간단히 다뤘거나 생략한 예외 사항Edge Cases 혹은 권장 사항Recommendations은 해당 API의 레퍼런스 문서에 추가로 언급해야 합니다. **스스로 작성한 지침Instructions을 실천해 보세요.** diff --git a/src/components/Layout/HomeContent.js b/src/components/Layout/HomeContent.js index 6a7f46a70..5a5097321 100644 --- a/src/components/Layout/HomeContent.js +++ b/src/components/Layout/HomeContent.js @@ -174,7 +174,7 @@ export function HomeContent() {
사용자 인터페이스 만들기 - React를 사용하면 컴포넌트라고 불리는 조각들을 사용하여 사용자 + React를 사용하면 컴포넌트라 불리는 조각들을 사용하여 사용자 인터페이스를 만들 수 있습니다. Thumbnail,{' '} LikeButton, 그리고 Video 같은 컴포넌트를 만들 수 있습니다. 그런 다음 전체 화면, 페이지 및 앱에서 이들을 diff --git a/src/sidebarLearn.json b/src/sidebarLearn.json index b1eaecf61..f318d9ab2 100644 --- a/src/sidebarLearn.json +++ b/src/sidebarLearn.json @@ -1,5 +1,5 @@ { - "title": "React 학습", + "title": "React 학습하기", "path": "/learn", "routes": [ { @@ -53,7 +53,7 @@ }, { "hasSectionHeader": true, - "sectionHeader": "React 학습" + "sectionHeader": "React 학습하기" }, { "title": "UI 표현하기", From e0f46187cd6e12e29cc34edfcb3df936604e5b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 21:40:53 +0900 Subject: [PATCH 22/31] docs: update Korean terminology for API reference and installation sections --- CONTRIBUTING.md | 2 +- src/components/Layout/Footer.tsx | 6 +- src/components/Layout/HomeContent.js | 95 ++++++++++--------- src/components/Layout/TopNav/TopNav.tsx | 2 +- .../blog/2023/03/16/introducing-react-dev.md | 8 +- src/content/learn/index.md | 2 +- src/content/learn/tutorial-tic-tac-toe.md | 2 +- src/sidebarHome.json | 2 +- src/sidebarLearn.json | 2 +- src/sidebarReference.json | 2 +- 10 files changed, 64 insertions(+), 59 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8b45bbd42..96229a467 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,7 @@ React 문서 기여에 관심을 가져주셔서 감사합니다! **[React 학습하기](https://ko.react.dev/learn)** 섹션은 기초 개념을 단계별로 소개하기 위해 만들어졌습니다. 여기서 제공되는 글들은 이전에 설명된 지식을 바탕으로 하므로, 글 간 앞뒤 개념이 중복되거나 꼬이지 않도록 주의하세요. 독자는 첫 번째 글부터 마지막 글까지 순서대로 읽으며 개념을 익힐 수 있어야 하며, 추가 설명을 위해 미리 앞선 개념들을 살펴보지 않도록 해야 합니다. 이런 이유로 상태State는 이벤트Event보다 먼저 설명되고, 'React로 사고하기' 파트에서 `ref`를 사용하지 않는 등 특정 순서가 정해져 있습니다. 동시에 'React 학습하기'는 React 개념에 대한 참고 자료 역할을 하므로, 개념들에 대한 정의와 상호 관계를 엄격하게 다루어야 합니다. -**[API 레퍼런스](https://ko.react.dev/reference/react)** 섹션은 개념이 아닌 API별로 정리되어 있으며, 가능한 한 모든 경우를 포함하는 것을 목표로 합니다. 'React 학습하기'에서 간단히 다뤘거나 생략한 예외 사항Edge Cases 혹은 권장 사항Recommendations은 해당 API의 레퍼런스 문서에 추가로 언급해야 합니다. +**[API 참고서](https://ko.react.dev/reference/react)** 섹션은 개념이 아닌 API별로 정리되어 있으며, 가능한 한 모든 경우를 포함하는 것을 목표로 합니다. 'React 학습하기'에서 간단히 다뤘거나 생략한 예외 사항Edge Cases 혹은 권장 사항Recommendations은 해당 API의 레퍼런스 문서에 추가로 언급해야 합니다. **스스로 작성한 지침Instructions을 실천해 보세요.** diff --git a/src/components/Layout/Footer.tsx b/src/components/Layout/Footer.tsx index f912ba2ae..4b2dedd48 100644 --- a/src/components/Layout/Footer.tsx +++ b/src/components/Layout/Footer.tsx @@ -336,7 +336,7 @@ export function Footer() { 커뮤니티 - Code of Conduct + 행동 강령 팀 소개 @@ -347,7 +347,9 @@ export function Footer() {
더 보기 블로그 - React Native + + React 네이티브 + 개인 정보 보호 diff --git a/src/components/Layout/HomeContent.js b/src/components/Layout/HomeContent.js index 5a5097321..7c7aa4c3f 100644 --- a/src/components/Layout/HomeContent.js +++ b/src/components/Layout/HomeContent.js @@ -162,7 +162,7 @@ export function HomeContent() { size="lg" className="w-full sm:w-auto justify-center" label="API Reference"> - API 레퍼런스 + API 참고서
@@ -177,8 +177,8 @@ export function HomeContent() { React를 사용하면 컴포넌트라 불리는 조각들을 사용하여 사용자 인터페이스를 만들 수 있습니다. Thumbnail,{' '} LikeButton, 그리고 Video 같은 컴포넌트를 - 만들 수 있습니다. 그런 다음 전체 화면, 페이지 및 앱에서 이들을 - 결합할 수 있습니다. + 만들어 보세요. 그런 다음 전체 화면, 페이지 및 앱에서 이들을 결합할 + 수 있습니다. @@ -200,10 +200,10 @@ export function HomeContent() {
컴포넌트 작성하기 - React 컴포넌트는 JavaScript 함수입니다. 조건부로 내용을 표시하려면{' '} - if 문을 사용할 수 있습니다. 목록을 표시하려면 배열에{' '} - map()을 사용할 수 있습니다. React를 배우는 것은 - 프로그래밍을 배우는 것입니다. + React 컴포넌트는 자바스크립트 함수입니다. 조건부로 내용을 + 표시하려면 if 문을 사용할 수 있습니다. 목록을 + 표시하려면 배열에 map()을 사용할 수 있습니다. React를 + 배우는 것은 프로그래밍을 배우는 것입니다. @@ -211,9 +211,9 @@ export function HomeContent() {
- 이 마크업 구문을 JSX 라고 부릅니다. 이것은 React에 의해서 대중화된 - JavaScript 구문의 확장입니다. JSX 마크업을 관련된 렌더링 로직과 - 가까이 두면, React 컴포넌트를 쉽게 만들고 유지하고 삭제할 수 + 이 마크업 구문을 JSX라 부릅니다. 이것은 React에 의해서 대중화된 + 자바스크립트 구문의 확장입니다. JSX 마크업을 관련된 렌더링 로직과 + 가까이 두면, React 컴포넌트를 쉽게 만들고 관리하고 삭제할 수 있습니다.
@@ -238,7 +238,7 @@ export function HomeContent() {
전체 페이지를 React로 빌드할 필요는 없습니다. React를 기존 HTML - 페이지에 추가하고, 어디에서나 상호작용하는 React 컴포넌트를 + 페이지에 추가하고, 페이지 어디에서나 상호작용하는 React 컴포넌트를 렌더링할 수 있습니다.
@@ -255,13 +255,14 @@ export function HomeContent() {
- 프레임워크를 통해서 + 프레임워크를 통해
풀스택으로 만들기
- React는 라이브러리입니다. 컴포넌트를 함께 묶을 수 있지만, 라우팅과 - 데이터를 가져오는 방법을 규정하지는 않습니다. React로 앱을 - 만들려면, Next.js 또는{' '} + React는 라이브러리입니다. 컴포넌트를 조합할 수 있도록 도와주지만, + 라우팅이나 데이터를 가져오는 방법을 규정하지는 않습니다. React로 + 완전한 앱을 만들려면,{' '} + Next.js 또는{' '} Remix 같은 풀스택 React 프레임워크를 추천합니다. @@ -271,10 +272,11 @@ export function HomeContent() {
- React는 아키텍처이기도 합니다. 이를 구현하는 프레임워크를 사용하면 - 서버에서 실행되는 비동기 컴포넌트에서 또는 빌드 도중에 데이터를 - 가져올 수 있습니다. 파일이나 데이터베이스에서 데이터를 읽고, 이를 - 상호작용하는 컴포넌트로 전달할 수 있습니다. + React는 아키텍처이기도 합니다. 이를 구현하는 프레임워크는 서버에서 + 실행되는 비동기 컴포넌트 혹은 빌드 중에 실행되는 비동기 + 컴포넌트에서 데이터를 가져올 수 있도록 합니다. 파일이나 + 데이터베이스에서 데이터를 읽고, 이를 상호작용하는 컴포넌트에 + 전달할 수 있습니다.
사람들은 다양한 이유로 웹과 네이티브 앱을 좋아합니다. React는 동일한 기술을 사용하여 웹 앱과 네이티브 앱을 모두 만들 수 - 있습니다. 각 플랫폼에 강점을 활용하여 모든 플랫폼에서 적합한 + 있습니다. 각 플랫폼의 장점을 활용하여 모든 플랫폼에서 적합한 인터페이스를 구현할 수 있습니다.
@@ -311,12 +313,12 @@ export function HomeContent() { 웹에 충실하기

- 사람들은 웹이 빠르게 로드되길 기대합니다. 서버에서 + 사람들은 웹 앱이 빠르게 로드되길 기대합니다. 서버에서 React를 사용하면 데이터를 가져오는 동안 HTML을 - 스트리밍하여 JavaScript 코드가 로드되기 전에 남은 내용을 - 점진적으로 채울 수 있습니다. 클라이언트에서 React는 표준 - web API를 사용하여 렌더링 중에도 UI를 반응적으로 유지할 - 수 있습니다. + 스트리밍하여 자바스크립트 코드가 로드되기 전에 남은 + 내용을 점진적으로 채울 수 있습니다. 클라이언트에서 + React는 표준 웹 API를 사용하여 렌더링 중에도 UI를 + 반응하도록 유지할 수 있습니다.

@@ -394,21 +396,22 @@ export function HomeContent() {

- 네이티브에서 사용하기 + 진정한 네이티브에서 사용하기

- 사람들은 네이티브 앱이 플랫폼과 같은 모양처럼 - 느껴지기를 원합니다.{' '} + 사람들은 네이티브Native 앱이 해당 플랫폼의 + 모습과 느낌을 갖기를 기대합니다.{' '} React Native 와{' '} Expo - 를 사용하면 React를 통하여 Android, iOS 등을 위한 앱을 - 빌드할 수 있습니다. UI들이 native이기 때문에 진짜 - native처럼 보입니다. 이것은 web view가 아닙니다. React - 컴포넌트들은 실제 Android, iOS 플랫폼에서 제공하는 - view를 렌더링합니다. + 를 사용하면 React를 통해 Android, iOS 등을 위한 앱을 + 빌드할 수 있습니다. UI가 진정한 네이티브이기 때문에 + 네이티브처럼 보이고 느껴집니다. 이것은 웹 뷰 + Web View가 아닙니다. React 컴포넌트들은 + 실제 Android, iOS 플랫폼에서 제공하는 뷰 + View를 렌더링합니다.

@@ -441,9 +444,9 @@ export function HomeContent() {
업그레이드 하기 - React는 변화에 신중하게 접근합니다. 모든 React 커밋은 10억 명 - 이상의 사용자가 있는 비즈니스에 크리티컬한 영역에서 테스트 - 됩니다. Meta에서는 10만 개 이상의 React 컴포넌트가 모든 + React는 변화에 신중하게 접근합니다. 모든 React 커밋은 10억명 + 이상의 사용자가 있는 비즈니스의 크리티컬한 영역에서 테스트를 + 진행합니다. Meta에서는 10만 개 이상의 React 컴포넌트가 모든 마이그레이션 전략을 검증합니다.
@@ -495,9 +498,9 @@ export function HomeContent() {
수백만 명이 있는 커뮤니티
- 여러분은 혼자가 아닙니다. 200만 명이 넘는 개발자들이 React - 문서를 매달 방문합니다. React는 사람들과 팀이 동의할 수 있는 - 것입니다. + 여러분은 혼자가 아닙니다. 전세계의 200만 명이 넘는 개발자들이 + React 문서를 매달 방문합니다. React는 사람들과 팀이 동의할 수 + 있는 것입니다.
@@ -505,12 +508,12 @@ export function HomeContent() {
- 이것이 바로 React가 라이브러리를 넘어 아키텍처, 심지어 - 에코시스템 그 이상인 이유입니다. React는 커뮤니티입니다. - 도움을 요청하고, 기회를 찾고, 새로운 친구를 만날 수 있는 - 곳입니다. 개발자와 디자이너, 초보자와 전문가, 연구원과 예술가, - 교사와 학생을 만날 수 있습니다. 모두의 배경은 다를 수 있지만, - React를 통해 함께 사용자 인터페이스를 만들 수 있습니다. + 이것이 바로 React가 단순한 라이브러리, 아키텍처, 혹은 생태계 + 그 이상인 이유입니다. React는 바로 커뮤니티입니다. 도움을 + 요청하고, 기회를 찾고, 새로운 친구를 만날 수 있는 곳입니다. + 개발자와 디자이너, 초보자와 전문가, 연구원과 예술가, 교사와 + 학생을 만날 수 있습니다. 배경은 모두 다를 수 있지만, React를 + 통해 함께 사용자 인터페이스를 만들 수 있습니다.
@@ -528,7 +531,7 @@ export function HomeContent() {
React 커뮤니티에 -
오신 것을 환영합니다. +
오신 것을 환영합니다
- 레퍼런스 + API 참고서 커뮤니티 diff --git a/src/content/blog/2023/03/16/introducing-react-dev.md b/src/content/blog/2023/03/16/introducing-react-dev.md index 15364878c..8b13cb55e 100644 --- a/src/content/blog/2023/03/16/introducing-react-dev.md +++ b/src/content/blog/2023/03/16/introducing-react-dev.md @@ -43,7 +43,7 @@ description: 오늘 React와 React 문서의 새로운 보금자리인 react.dev **새로운 문서는 Hooks를 사용한 React를 처음부터 가르칩니다.** 문서는 두 가지 주요 섹션으로 나뉘어져 있습니다. * **[React 배우기](/learn)** 는 React를 기초부터 스스로 학습할 수 있는 과정입니다. -* **[API 레퍼런스](/reference)** 는 모든 React API에 대한 세부 내용과 사용 예시를 제공합니다. +* **[API 참고서](/reference)** 는 모든 React API에 대한 세부 내용과 사용 예시를 제공합니다. 각 섹션에서 무슨 내용을 알 수 있는지 자세히 살펴보겠습니다. @@ -456,9 +456,9 @@ export default function PackingList() { 브라우저 공급업체에게 이 표현이 100% 과학적으로 정확하다는 확인을 받았습니다. -## 새로운, 상세한 API 레퍼런스 {/*a-new-detailed-api-reference*/} +## 새로운, 상세한 API 참고서 {/*a-new-detailed-api-reference*/} -[API 레퍼런스](/reference/react)에서, 이제 모든 React API는 전용 페이지를 가집니다. 모든 종류의 API들이 포함됩니다. +[API 참고서](/reference/react)에서, 이제 모든 React API는 전용 페이지를 가집니다. 모든 종류의 API들이 포함됩니다. - [`useState`](/reference/react/useState) 같은 내장 Hooks - [``](/reference/react/Suspense) 같은 내장 컴포넌트 @@ -610,7 +610,7 @@ button { display: block; margin-top: 10px; } 또한 몇몇 API 페이지는 (일반적인 문제에 대한) [트러블슈팅](/reference/react/useEffect#troubleshooting)과 (더 이상 사용하지 않는 API와 관련된) [대안](/reference/react-dom/findDOMNode#alternatives)을 포함하고 있습니다. -이러한 접근 방식이 API 레퍼런스를 단순히 인자를 찾는 용도뿐만 아니라, 각 API가 어떤 다양한 작업을 수행할 수 있는지, 어떻게 다른 API와 연결되어 있는지를 확인하는 데 유용하게 될 것을 기대합니다. +이러한 접근 방식이 API 참고서를 단순히 인자를 찾는 용도뿐만 아니라, 각 API가 어떤 다양한 작업을 수행할 수 있는지, 어떻게 다른 API와 연결되어 있는지를 확인하는 데 유용하게 될 것을 기대합니다. ## 다음은 무엇인가요? {/*whats-next*/} diff --git a/src/content/learn/index.md b/src/content/learn/index.md index a28e615ad..dfe86ba5e 100644 --- a/src/content/learn/index.md +++ b/src/content/learn/index.md @@ -382,7 +382,7 @@ button { ## Hook 사용하기 {/*using-hooks*/} -`use`로 시작하는 함수를 *Hook*이라고 합니다. `useState`는 React에서 제공하는 내장 Hook입니다. 다른 내장 Hook은 [API 레퍼런스](/reference/react)에서 찾아볼 수 있습니다. 또한 기존의 것들을 조합하여 자신만의 Hook을 작성할 수도 있습니다. +`use`로 시작하는 함수를 *Hook*이라고 합니다. `useState`는 React에서 제공하는 내장 Hook입니다. 다른 내장 Hook은 [API 참고서](/reference/react)에서 찾아볼 수 있습니다. 또한 기존의 것들을 조합하여 자신만의 Hook을 작성할 수도 있습니다. Hook은 다른 함수보다 더 제한적입니다. 컴포넌트(또는 다른 Hook)의 *상단*에서만 Hook을 호출할 수 있습니다. 조건이나 반복에서 `useState`를 사용하고 싶다면 새 컴포넌트를 추출하여 그곳에 넣으세요. diff --git a/src/content/learn/tutorial-tic-tac-toe.md b/src/content/learn/tutorial-tic-tac-toe.md index 7eec48733..516255153 100644 --- a/src/content/learn/tutorial-tic-tac-toe.md +++ b/src/content/learn/tutorial-tic-tac-toe.md @@ -1361,7 +1361,7 @@ const nextSquares = ['X', null, null, null, null, null, null, null, null]; 불변성을 사용하면 복잡한 기능을 훨씬 쉽게 구현할 수 있습니다. 우리는 이 자습서의 뒷부분에서 게임의 진행 과정을 검토하고 과거 움직임으로 "돌아가기"를 할 수 있는 "시간 여행" 기능을 구현할 예정입니다. 특정 작업을 실행 취소하고 다시 실행하는 기능은 이 게임에만 국한된 것이 아닌 앱의 일반적인 요구사항입니다. 직접적인 데이터 변경을 피하면 이전 버전의 데이터를 그대로 유지하여 나중에 재사용(또는 초기화)할 수 있습니다. -불변성을 사용하는 것의 또 다른 장점이 있습니다. 기본적으로 부모 컴포넌트의 state가 변경되면 모든 자식 컴포넌트가 자동으로 다시 렌더링 됩니다. 여기에는 변경 사항이 없는 자식 컴포넌트도 포함됩니다. 리렌더링 자체가 사용자에게 보이는 것은 아니지만 성능상의 이유로 트리의 영향을 받지 않는 부분의 리렌더링을 피하는 것이 좋습니다. 불변성을 사용하면 컴포넌트가 데이터의 변경 여부를 저렴한 비용으로 판단할 수 있습니다. [`memo` API 레퍼런스](/reference/react/memo)에서 React가 컴포넌트를 다시 렌더링할 시점을 선택하는 방법에 대해 살펴볼 수 있습니다. +불변성을 사용하는 것의 또 다른 장점이 있습니다. 기본적으로 부모 컴포넌트의 state가 변경되면 모든 자식 컴포넌트가 자동으로 다시 렌더링 됩니다. 여기에는 변경 사항이 없는 자식 컴포넌트도 포함됩니다. 리렌더링 자체가 사용자에게 보이는 것은 아니지만 성능상의 이유로 트리의 영향을 받지 않는 부분의 리렌더링을 피하는 것이 좋습니다. 불변성을 사용하면 컴포넌트가 데이터의 변경 여부를 저렴한 비용으로 판단할 수 있습니다. [`memo` API 참고서](/reference/react/memo)에서 React가 컴포넌트를 다시 렌더링할 시점을 선택하는 방법에 대해 살펴볼 수 있습니다. ### 순서 정하기 {/*taking-turns*/} diff --git a/src/sidebarHome.json b/src/sidebarHome.json index 5fb212184..3b018bcc1 100644 --- a/src/sidebarHome.json +++ b/src/sidebarHome.json @@ -11,7 +11,7 @@ "path": "/learn" }, { - "title": "설치", + "title": "설치하기", "path": "/learn/installation" }, { diff --git a/src/sidebarLearn.json b/src/sidebarLearn.json index f318d9ab2..c4dcbca8f 100644 --- a/src/sidebarLearn.json +++ b/src/sidebarLearn.json @@ -21,7 +21,7 @@ ] }, { - "title": "설치", + "title": "설치하기", "path": "/learn/installation", "routes": [ { diff --git a/src/sidebarReference.json b/src/sidebarReference.json index 1b3dd82db..6b0542762 100644 --- a/src/sidebarReference.json +++ b/src/sidebarReference.json @@ -1,5 +1,5 @@ { - "title": "API 레퍼런스", + "title": "API 참고서", "path": "/reference/react", "routes": [ { From 3c58b51897a02ea1005c11d273735c0f2ab4b325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 21:47:01 +0900 Subject: [PATCH 23/31] refactor: translate text `Learn`, `Reference` and more in `TopNav.tsx` --- src/components/Layout/TopNav/TopNav.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Layout/TopNav/TopNav.tsx b/src/components/Layout/TopNav/TopNav.tsx index 3d6e4b689..296155b93 100644 --- a/src/components/Layout/TopNav/TopNav.tsx +++ b/src/components/Layout/TopNav/TopNav.tsx @@ -408,20 +408,20 @@ export default function TopNav({
- Learn + 학습하기 - Reference + API 참고서 - Community + 커뮤니티 - Blog + 블로그
Date: Sun, 29 Dec 2024 21:52:00 +0900 Subject: [PATCH 24/31] refactor: update `sidebarLearn.json` --- src/sidebarLearn.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sidebarLearn.json b/src/sidebarLearn.json index c4dcbca8f..43729ef11 100644 --- a/src/sidebarLearn.json +++ b/src/sidebarLearn.json @@ -65,7 +65,7 @@ "path": "/learn/your-first-component" }, { - "title": "컴포넌트 import 및 export하기", + "title": "컴포넌트 Import 및 Export하기", "path": "/learn/importing-and-exporting-components" }, { @@ -77,7 +77,7 @@ "path": "/learn/javascript-in-jsx-with-curly-braces" }, { - "title": "컴포넌트에 props 전달하기", + "title": "컴포넌트에 Props 전달하기", "path": "/learn/passing-props-to-a-component" }, { @@ -116,7 +116,7 @@ "path": "/learn/render-and-commit" }, { - "title": "스냅샷으로서의 state", + "title": "스냅샷으로서의 State", "path": "/learn/state-as-a-snapshot" }, { @@ -124,11 +124,11 @@ "path": "/learn/queueing-a-series-of-state-updates" }, { - "title": "객체 state 업데이트하기", + "title": "객체 State 업데이트하기", "path": "/learn/updating-objects-in-state" }, { - "title": "배열 state 업데이트하기", + "title": "배열 State 업데이트하기", "path": "/learn/updating-arrays-in-state" } ] From d3ff085e687a26b61bb495a30821219c4d27d360 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 22:49:55 +0900 Subject: [PATCH 25/31] =?UTF-8?q?refactor:=20translate=20`Previous`=20and?= =?UTF-8?q?=20`Next`=20to=20`=EC=9D=B4=EC=A0=84`=20and=20`=EB=8B=A4?= =?UTF-8?q?=EC=9D=8C`=20in=20`DocsFooter.tsx`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문서 하단부 Footer에서 Previous 및 Next로 표현되던 텍스트 한국어로 수정. --- src/components/DocsFooter.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/DocsFooter.tsx b/src/components/DocsFooter.tsx index 5f2330e7e..68e9cf7ec 100644 --- a/src/components/DocsFooter.tsx +++ b/src/components/DocsFooter.tsx @@ -30,7 +30,7 @@ export const DocsPageFooter = memo(
{prevRoute?.path ? ( @@ -40,7 +40,7 @@ export const DocsPageFooter = memo( {nextRoute?.path ? ( @@ -63,7 +63,7 @@ function FooterLink({ }: { href: string; title: string; - type: 'Previous' | 'Next'; + type: '이전' | '다음'; }) { return (
From f92b23cb6bd90efb55c17696b3e13b3f7bad6b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 22:53:38 +0900 Subject: [PATCH 26/31] docs: update `installation.md` --- src/content/learn/installation.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/content/learn/installation.md b/src/content/learn/installation.md index 27a39d122..edec4eb31 100644 --- a/src/content/learn/installation.md +++ b/src/content/learn/installation.md @@ -4,7 +4,7 @@ title: 설치하기 -React는 처음부터 점진적으로 적용할 수 있도록 설계되었으며 필요한 만큼 React를 사용할 수 있습니다. React를 맛보기로 접해보려거나 간단한 HTML 페이지에 약간의 상호작용을 추가하거나 복잡한 React 기반의 앱을 시작하고자 하는 경우, 이 섹션을 참고하세요. +React는 처음부터 점진적으로 적용할 수 있도록 설계되었으며 필요한 만큼 React를 사용할 수 있습니다. React를 맛보기로 접해보려거나, 간단한 HTML 페이지에 약간의 상호작용을 추가하거나, 복잡한 React 기반의 앱을 시작하고자 하는 경우, 이 섹션을 참고하세요. @@ -37,7 +37,7 @@ export default function App() { 직접 편집하거나 오른쪽 상단의 "Fork" 버튼을 눌러 새 탭에서 열 수 있습니다. -React 문서의 대부분 페이지에는 이와 같은 샌드박스가 있습니다. React 문서 외에도 [CodeSandbox](https://codesandbox.io/s/new), [StackBlitz](https://stackblitz.com/fork/react), [CodePen.](https://codepen.io/pen?template=QWYVwWN) 등의 온라인 샌드박스에서 React를 지원합니다. +React 문서의 대부분 페이지에는 이와 같은 샌드박스가 있습니다. React 문서 외에도 [CodeSandbox](https://codesandbox.io/s/new), [StackBlitz](https://stackblitz.com/fork/react), [CodePen](https://codepen.io/pen?template=QWYVwWN) 등의 온라인 샌드박스에서 React를 지원합니다. ### 로컬 환경에서 React 시도하기 {/*try-react-locally*/} @@ -49,9 +49,8 @@ React로 완전히 앱이나 웹사이트를 구축하고 싶다면, [새로운 ## 기존 프로젝트에 React 추가하기 {/*add-react-to-an-existing-project*/} -기존 앱이나 웹사이트에서 React를 적용하고 싶다면, [기존 프로젝트에 React를 추가](/learn/add-react-to-an-existing-project)하세요. +기존 앱이나 웹사이트에 React를 적용하고 싶다면, [기존 프로젝트에 React를 추가](/learn/add-react-to-an-existing-project)하세요. ## 다음 단계 {/*next-steps*/} -React 개념 중 가장 중요한 개념들을 살펴보기 위해 [빠른 시작 가이드](/learn)로 이동하세요. - +React의 개념 중 가장 중요한 개념들을 살펴보기 위해 [빠르게 시작하기](/learn)로 이동하세요. From 822ab3093782ff092c6fc3e1b98e27b20aa0740a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 23:00:18 +0900 Subject: [PATCH 27/31] =?UTF-8?q?refactor:=20translate=20`deep=20dive`=20t?= =?UTF-8?q?o=20`=EC=9E=90=EC=84=B8=ED=9E=88=20=EC=82=B4=ED=8E=B4=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MDX/ExpandableExample.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MDX/ExpandableExample.tsx b/src/components/MDX/ExpandableExample.tsx index 29116c1b1..d643f98e7 100644 --- a/src/components/MDX/ExpandableExample.tsx +++ b/src/components/MDX/ExpandableExample.tsx @@ -71,7 +71,7 @@ function ExpandableExample({children, excerpt, type}: ExpandableExampleProps) { {isDeepDive && ( <> - Deep Dive + 자세히 살펴보기 )} {isExample && ( From ff9f6987075f8573038b6e489467f891586fc532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Sun, 29 Dec 2024 23:43:04 +0900 Subject: [PATCH 28/31] docs: update `start-a-new-react-project.md` --- .../learn/start-a-new-react-project.md | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/content/learn/start-a-new-react-project.md b/src/content/learn/start-a-new-react-project.md index e6b4dca74..48956ab35 100644 --- a/src/content/learn/start-a-new-react-project.md +++ b/src/content/learn/start-a-new-react-project.md @@ -4,38 +4,39 @@ title: 새로운 React 프로젝트 시작하기 -React를 전체적으로 적용한 애플리케이션이나 사이트를 새롭게 작성하고 싶다면, 커뮤니티에서 React 기반 프레임워크 중 하나를 사용하는 것이 좋습니다. +React로 새로운 앱이나 새로운 웹사이트를 완전히 작성하고 싶다면, 커뮤니티에서 React 기반 프레임워크 중 하나를 사용하는 것이 좋습니다. +프레임워크 없이 React를 사용할 수 있습니다. 그러나 대부분의 애플리케이션이나 사이트들이 결국에는 코드 분할Code-Splitting, 라우팅Routing, 데이터 가져오기Data Fetching, 그리고 HTML 생성에 대한 해결책을 찾고 있다는 것을 발견했습니다. 이러한 문제들은 UI 라이브러리들의 공통적인 문제이며 React만의 문제는 아닙니다. -프레임워크 없이 React를 사용할 수 있습니다. 그러나 대부분에 애플리케이션이나 사이트들이 결국에는 코드 분할, routing, 데이터 fetching, 그리고 HTML 생성에 대한 해결책을 찾고 있다는것을 발견했습니다. 이러한 문제들은 UI 라이브러리들의 기본적인 문제이며 React 만의 문제는 아닙니다. - -프레임워크로 시작하면 React를 빠르게 시작할 수 있고, 나중에 자체 프레임워크를 구축하는 것을 피할 수 있습니다. +프레임워크로 시작하면 React를 빠르게 시작할 수 있고, 나중에 자체적인 프레임워크를 구축하는 것을 피할 수 있습니다. #### 프레임워크 없이 React 를 사용할 수 있나요? {/*can-i-use-react-without-a-framework*/} -물론 React를 프레임워크 없이 사용할 수 있습니다. [기존 페이지의 일부분에 React 사용하기](/learn/add-react-to-an-existing-project#using-react-for-a-part-of-your-existing-page)를 활용해 보세요. **하지만, 새로운 애플리케이션이나 사이트 전체를 React로 구축하는 경우에는 프레임워크 사용을 권장합니다.** +물론 React를 프레임워크 없이 사용할 수 있습니다. [기존 페이지의 일부분에 React 사용하기](/learn/add-react-to-an-existing-project#using-react-for-a-part-of-your-existing-page)를 살펴보세요. **하지만, 새로운 애플리케이션이나 사이트 전체를 React로 구축하는 경우에는 프레임워크의 사용을 권장합니다.** -이유가 여기 있습니다. +이유는 아래와 같습니다. -라우팅이나 데이터 페칭과 같은 기능이 처음엔 필요하지 않더라도, 이를 위한 라이브러리 사용은 필요할 수도 있습니다. JavaScript 번들은 날마다 새로운 기능들이 더해지고, 모든 각각의 라우팅 코드를 어떻게 분할해야 할지 고민해야 하는 순간이 오게 됩니다. 데이터 페칭은 날로 복잡해지고, 아마 서버-클라이언트 네트워크의 워터폴이 애플리케이션의 속도를 느리게 만드는 순간도 직면하게 될 겁니다. 성능이 좋지 않은 네트워크 환경이나 저사양의 단말기를 이용하는 사용자들이 늘어남에 따라 서버 혹은 빌드 시간에 컴포넌트에서 HTML을 일찍 생성하여 내용을 먼저 표시할 필요가 생길 수도 있습니다. 일부 코드의 설정을 변경하여 서버에서 혹은 빌드되는 동안 실행시키는 것은 매우 까다로운 작업이 될 수 있습니다. +라우팅Routing이나 데이터 가져오기Data Fetching와 같은 기능이 처음엔 필요하지 않더라도, 이를 위한 라이브러리의 사용은 필요할 수도 있습니다. 자바스크립트JavaScript 번들은 날마다 새로운 기능들이 더해지고, 각각의 라우팅 코드를 어떻게 분할해야 할지 고민해야 하는 순간이 오게 됩니다. 데이터 가져오기Data Fetching는 날로 복잡해지고, 아마 서버-클라이언트 네트워크의 워터폴Waterfall이 애플리케이션의 속도를 느리게 하는 순간도 직면하게 될 겁니다. 성능이 좋지 않은 네트워크 환경이나 저사양의 단말기를 이용하는 사용자들이 늘어남에 따라, 서버에서 혹은 빌드 시간에 컴포넌트에서 HTML을 생성하여 내용Content을 빠르게 표시해야할 필요가 생길 수도 있습니다. 일부 코드의 설정을 변경하여 서버에서 혹은 빌드되는 동안 실행시키는 것은 매우 까다로운 작업이 될 수 있습니다. -**이 문제는 React에 국한된 것은 아닙니다. 이러한 이유로 Svelte에는 SvelteKit가 있고, Vue에는 Nuxt가 존재합니다.** 자체 서비스에서 이러한 문제를 해결하기 위해서는 라우터와 데이터 페칭 라이브러리를 번들러와 통합할 필요가 있습니다. 초기 세팅을 구동하는 건 그다지 어렵지 않지만, 애플리케이션이 시간이 지남에 따라 성장함에도 불구하고 빠르게 로드되게 만드는 데에는 많은 세부 사항들이 연관되어 있습니다. 가능한 한 적은 양의 애플리케이션 코드를 전송하지만 페이지에 필요한 데이터와 함께 단일 클라이언트-서버의 왕복으로 이루어지게 하고 싶을 수 있습니다. JavaScript 코드가 실행되기도 전에 페이지에 상호작용을 할 수 있도록 점진적인 개선을 하고 싶어질 수도 있습니다. 마케팅 목적의 완전히 정적인 HTML 파일들이 속한 폴더를 생성하여 JavaScript 가 비활성화된 환경에서도 이를 작동하게 하고 싶을 수도 있습니다. 이러한 기능들을 구현하는 것은 실제로 많은 작업을 요합니다. +**이러한 문제가 React에만 국한된 것은 아닙니다. 이것이 바로 Svelte에 SvelteKit이 존재하고, Vue에는 Nuxt가 있는 이유입니다.** 자체 서비스에서 이러한 문제를 해결하기 위해서는 라우터Router와 데이터 가져오기Data Fetching 라이브러리를 번들러와 통합할 필요가 있습니다. 초기 세팅을 구동하는 건 그다지 어렵지 않지만, 시간이 지나면서 앱이 커져도 빠르게 로드되는 앱을 만드는 데에는 많은 세부 사항들이 포함됩니다. 앱 코드의 최소한의 양만 전송하되, 페이지에 필요한 데이터를 병렬로 처리하면서 클라이언트-서버 간의 단일 왕복Single Roundtrip으로 이를 처리하고 싶을 수도 있습니다. 자바스크립트 코드가 실행되기도 전에 페이지가 상호작용 할 수 있도록 점진적인 개선을 하고 싶을 수도 있습니다. 마케팅 목적의 완전히 정적인 HTML 파일들이 속한 폴더를 생성하여 자바스크립트가 비활성화된 환경에서도 이를 작동하게 하고 싶을 수도 있습니다. 이러한 기능들을 구현하는 것은 실제로 많은 작업을 요합니다. -**이 페이지의 React 프레임워크들은 추가 작업 없이도 기본적으로 이런 문제를 해결합니다.** 이들은 매우 간소화된 상태로 시작할 수 있고 애플레케이션의 필요에 따라 확장이 가능합니다. 각각의 React 프레임워크들은 커뮤니티가 있어 질문에 대한 답을 얻고 도구를 업그레이드하는 것은 더 쉬워집니다. 또한 프레임워크들은 코드에 구조를 제공하며, 다른 프로젝트들간의 맥락과 스킬을 유지하는 데에 도움이 됩니다. 반대로, 맞춤 설정을 사용하면 지원되지 않는 의존성 버전에 빠질 수 있으며, 결국엔 커뮤니티나 업그레이드 경로가 없는 자체 프레임워크를 만들게 될 수도 있습니다. (그리고 과거에서처럼 우연히 고안된 것들이 될 수 있습니다.) +**현재 페이지의 React 프레임워크들은 추가 작업 없이도 기본적으로 이러한 문제들을 해결합니다.** 이들은 매우 간소화된 상태로 시작할 수 있고 애플리케이션의 필요에 따라 확장이 가능합니다. 각각의 React 프레임워크들은 커뮤니티가 있어 질문에 대한 답을 얻고 도구를 업그레이드하는 것이 더 쉬워집니다. 또한 프레임워크들은 코드에 구조를 제공하며, 다른 프로젝트들간의 맥락과 스킬을 유지하는 데에 도움이 됩니다. 반대로, 맞춤 설정을 사용하면 지원되지 않는 의존성Dependency 버전에 빠질 수 있으며, 결국엔 커뮤니티나 업그레이드 경로가 없는 자체 프레임워크를 만들게 될 수도 있습니다. (그리고 만약 이전에 우리가 만든 것들과 비슷하다면, 더 엉성하게 설계된 것일 수 있습니다.) -애플리케이션이 이러한 프레임워크들의 지원을 잘 받지 못하는 특수한 제약에 놓여 있거나, 스스로 이러한 문제들을 해결하고 싶다면 React를 사용하여 자체 맞춤 설정을 적용할 수 있습니다. npm에서 `react` 와 `react-dom` 를 채택하고, [Vite](https://vitejs.dev/) 나 [Parcel](https://parceljs.org/) 같은 번들러를 활용하여 맞춤 빌드 프로세스를 정립한 다음, 라우팅, 정적 생성 혹은 서버 사이드 렌더링 등 필요에 따라 다른 도구를 추가할 수 있습니다. +애플리케이션이 이러한 프레임워크들의 지원을 잘 받지 못하는 특수한 제약에 놓여 있거나, 스스로 이러한 문제들을 해결하고 싶다면 React를 사용하여 자체 맞춤 설정을 적용할 수 있습니다. npm에서 `react` 와 `react-dom`을 설치하고, [Vite](https://vitejs.dev/) 나 [Parcel](https://parceljs.org/) 같은 번들러를 활용하여 맞춤 빌드 프로세스를 정립한 다음, 라우팅Routing, 정적 생성Static Generation 혹은 서버 사이드 렌더링SSR, Server Side Rendering 등 필요에 따라 다른 도구들을 추가할 수 있습니다. ## 프로덕션 수준의 React 프레임워크 {/*production-grade-react-frameworks*/} -이 프레임워크들은 프로덕션에서 애플리케이션을 배포하고 확장하는 데에 필요한 모든 기능을 지원하며 [풀스택 아키텍처 비전](#which-features-make-up-the-react-teams-full-stack-architecture-vision) 을 지원하는 방향으로 발전하고 있습니다. 모든 프레임워크들은 활발한 커뮤니티의 지원을 받는 오픈소스이며, 자체 서버나 호스팅 제공자에 배포할 수 있습니다. 만일 이 목록에 포함되길 원하는 프레임워크 저자가 있다면, [여기에서 알려주세요.](https://github.com/reactjs/react.dev/issues/new?assignees=&labels=type%3A+framework&projects=&template=3-framework.yml&title=%5BFramework%5D%3A+) +아래 프레임워크들은 프로덕션에서 애플리케이션을 배포하고 확장하는 데에 필요한 모든 기능을 지원하며 [풀스택 아키텍처 비전](#which-features-make-up-the-react-teams-full-stack-architecture-vision)을 지원하는 방향으로 발전하고 있습니다. 모든 프레임워크들은 활발한 커뮤니티의 지원을 받는 오픈 소스이며, 자체 서버나 호스팅 제공자에 배포할 수 있습니다. 만일 이 목록에 포함되길 원하는 프레임워크의 저자가 있다면, [여기에서 알려주세요.](https://github.com/reactjs/react.dev/issues/new?assignees=&labels=type%3A+framework&projects=&template=3-framework.yml&title=%5BFramework%5D%3A+) + +### Next.js {/*nextjs-pages-router*/} -**[Next.js' Pages Router](https://nextjs.org/)는 풀스택 React 프레임워크입니다.** 다재다능한 도구이며, 정적인 블로그부터 복잡한 동적 애플리케이션까지 다양한 크기의 React 애플리케이션을 만들 수 있습니다. 새로운 Next.js 프로젝트를 작성하려면 터미널에서 다음을 실행하세요. +**[Next.js의 Pages Router](https://nextjs.org/)는 풀스택 React 프레임워크입니다.** 다재다능한 도구이며, 정적인 블로그부터 복잡한 동적 애플리케이션까지 다양한 크기의 React 애플리케이션을 만들 수 있습니다. 새로운 Next.js 프로젝트를 작성하려면 터미널에서 다음을 실행하세요. npx create-next-app@latest @@ -43,7 +44,7 @@ npx create-next-app@latest Next.js를 처음 사용하는 분이라면 [Next.js 배우기 코스](https://nextjs.org/learn)를 읽어보세요. -Next.js는 [Vercel](https://vercel.com/)이 관리합니다. 어느 Node.js 서버, 서버리스 호스팅 또는 직접 소유한 서버 어느 곳에라도 [Next.js 애플리케이션을 배포](https://nextjs.org/docs/app/building-your-application/deploying)할 수 있습니다. Next.js 는 서버가 필요없는 [static export](https://nextjs.org/docs/pages/building-your-application/deploying/static-exports) 도 제공합니다. +Next.js는 [Vercel](https://vercel.com/)이 관리합니다. 어떤 Node.js 서버, 서버리스 호스팅 또는 직접 소유한 서버 어느 곳에서라도 [Next.js 애플리케이션을 배포](https://nextjs.org/docs/app/building-your-application/deploying)할 수 있습니다. Next.js는 서버가 필요없는 [정적 내보내기Static Exports](https://nextjs.org/docs/pages/building-your-application/deploying/static-exports) 도 제공합니다. ### Remix {/*remix*/} @@ -55,7 +56,7 @@ npx create-remix Remix를 처음 사용하는 분이라면 Remix [블로그 자습서](https://remix.run/docs/en/main/tutorials/blog) (짧은 문서)와 [애플리케이션 자습서](https://remix.run/docs/en/main/tutorials/jokes) (긴 문서)를 참고하세요. -Remix는 [Shopify](https://www.shopify.com/)가 관리합니다. Remix 프로젝트를 작성할 때는 [배포할 대상을 선택](https://remix.run/docs/en/main/guides/deployment)해야 합니다. Remix 애플리케이션은 어느 Node.js 서버나 서버리스 호스팅에라도 [어댑터](https://remix.run/docs/en/main/other-api/adapter)를 사용하거나 직접 작성하여 배포할 수 있습니다. +Remix는 [Shopify](https://www.shopify.com/)가 관리합니다. Remix 프로젝트를 작성할 때는 [배포할 대상을 선택](https://remix.run/docs/en/main/guides/deployment)해야 합니다. Remix 애플리케이션은 어떤 Node.js 서버나 서버리스 호스팅에라도 [어댑터Adapter](https://remix.run/docs/en/main/other-api/adapter)를 사용하거나 직접 작성하여 배포할 수 있습니다. ### Gatsby {/*gatsby*/} @@ -83,22 +84,22 @@ Expo는 [Expo (기업)](https://expo.dev/about)이 관리합니다. Expo를 사 ## Bleeding-edge React frameworks {/*bleeding-edge-react-frameworks*/} -React를 지속적으로 개선할 방법을 찾아가는 과정에서, 우리는 React를 프레임워크(특히 라우팅, 번들링, 서버 기술)와 더 밀접하게 통합하는 것이 React 사용자가 더 나은 앱을 만드는 데 도움을 줄 수 있는 가장 큰 기회라는 것을 깨달았습니다. Next.js 팀은 [React 서버 컴포넌트](/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023#react-server-components)와 같은 가장 최신의 React 기능을 프레임워크에 구애받지 않는 형태로 연구, 개발, 통합, 테스트하는 데에 협력하기로 합의했습니다. +React를 지속적으로 개선할 방법을 찾아가는 과정에서, 우리는 React를 프레임워크(특히 라우팅, 번들링, 서버 기술)와 더 밀접하게 통합하는 것이 React 사용자에게 더 나은 앱을 만드는 데 도움을 줄 수 있는 가장 큰 기회라는 것을 깨달았습니다. Next.js 팀은 [React 서버 컴포넌트](/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023#react-server-components)와 같은 가장 최신의 React 기능을 프레임워크에 구애받지 않는 형태로 연구, 개발, 통합, 테스트하는 데에 협력하기로 합의했습니다. -이러한 기능들은 매일 프로덕션 수준에 근접하고 있으며 다른 번들러 및 프레임워크 개발자들과 이를 통합하기 위해 협의 중입니다. 희망으로는 1, 2년 후에 이 페이지에 나열된 모든 프레임워크가 이러한 기능을 지원했으면 합니다. (이러한 기능을 실험해 보기 위해 우리와 협력하고 싶은 프레임워크 개발자가 있다면 알려주세요!) +이러한 기능들은 매일 프로덕션 수준에 근접하고 있으며, 다른 번들러 및 프레임워크 개발자들과 이를 통합하기 위해 협의 중입니다. 바라건데 1, 2년 후에 이 페이지에 나열된 모든 프레임워크가 이러한 기능을 지원했으면 합니다. (이러한 기능을 실험해 보기 위해 우리와 협력하고 싶은 프레임워크 개발자가 있다면 알려주세요!) ### Next.js (App Router) {/*nextjs-app-router*/} -**[Next.js's App Router](https://nextjs.org/docs)는 React 팀의 풀스택 아키텍처 비전을 구현하기 위해 재설계된 Next.js API입니다.** 이를 통해 서버에서 또는 빌드 중에 실행되는 비동기 컴포넌트에서 데이터를 가져올 수 있습니다. +**[Next.js의 App Router](https://nextjs.org/docs)는 React 팀의 풀스택 아키텍처 비전을 구현하기 위해 재설계된 Next.js API입니다.** 이를 통해 서버에서 또는 빌드 중에 실행되는 비동기 컴포넌트에서 데이터를 가져올 수 있습니다. -Next.js는 [Vercel](https://vercel.com/)이 관리합니다. 어느 Node.js 서버, 서버리스 호스팅 또는 직접 소유한 서버 어느 곳에라도 [Next.js 애플리케이션을 배포](https://nextjs.org/docs/app/building-your-application/deploying)할 수 있습니다. Next.js 는 서버가 필요없는 [static export](https://nextjs.org/docs/pages/building-your-application/deploying/static-exports) 도 제공합니다. +Next.js는 [Vercel](https://vercel.com/)이 관리합니다. 어떤 Node.js 서버, 서버리스 호스팅 또는 직접 소유한 서버 어느 곳에라도 [Next.js 애플리케이션을 배포](https://nextjs.org/docs/app/building-your-application/deploying)할 수 있습니다. Next.js 는 서버가 필요없는 [정적 내보내기Static Exports](https://nextjs.org/docs/pages/building-your-application/deploying/static-exports)도 제공합니다. #### React 팀의 풀스택 아키텍처 비전을 구현한 기능은 무엇인가요? {/*which-features-make-up-the-react-teams-full-stack-architecture-vision*/} -Next.js의 App Router 번들러는 공식 [React 서버 컴포넌트 명세](https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md) 전체를 구현했습니다. 이를 통해 빌드 시간, 서버 전용, 대화형 컴포넌트를 하나의 React 트리에서 혼합할 수 있습니다. +Next.js의 App Router 번들러는 공식 [React 서버 컴포넌트 명세](https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md) 전체를 구현했습니다. 이를 통해 빌드 시간Build-Time, 서버 전용Server-Only, 그리고 대화형Interactive 컴포넌트를 하나의 React 트리Tree에서 혼합할 수 있습니다. 예를 들어, 데이터베이스나 파일을 읽는 `async` 함수로 서버 전용 React 컴포넌트를 작성할 수 있습니다. 그런 다음 이를 통해 데이터를 대화형 컴포넌트로 전달할 수 있습니다. @@ -108,7 +109,7 @@ async function Talks({ confId }) { // 1. 서버에 있으므로 데이터 계층과 통신할 수 있습니다. API 엔드포인트가 필요하지 않습니다. const talks = await db.Talks.findAll({ confId }); - // 2. 렌더링 로직을 얼마든지 추가할 수 있습니다. JavaScript 번들 크기가 커지지 않습니다. + // 2. 렌더링 로직을 얼마든지 추가할 수 있습니다. 자바스크립트 번들 크기가 커지지 않습니다. const videos = talks.map(talk => talk.video); // 3. 브라우저에서 실행될 컴포넌트에 데이터를 전달합니다. @@ -116,7 +117,7 @@ async function Talks({ confId }) { } ``` -Next.js의 App Router는 또한 Suspense를 사용하는 데이터 통신과도 잘 어울립니다. 이를 통해 React 트리에서 사용자 인터페이스의 다른 부분에 대한 로딩 상태(스켈레톤 플레이스홀더와 같은)를 직접 지정할 수 있습니다. +Next.js의 App Router는 또한 Suspense를 사용하는 데이터 통신과도 잘 어울립니다. 이를 통해 React 트리에서 사용자 인터페이스의 다른 부분에 대한 로딩 상태(스켈레톤Skeleton 플레이스홀더Placeholder와 같은)를 직접 지정할 수 있습니다. ```js }> @@ -124,6 +125,6 @@ Next.js의 App Router는 또한 Suspense를 사용하는 데이터 통신과도 ``` -서버 컴포넌트와 Suspense는 Next.js의 기능이 아닌 React의 기능입니다. 하지만 프레임워크 수준에서 이를 채택하려면 많은 노력과 비교적 복잡한 구현 작업이 필요합니다. 현재 기준으로는 Next.js의 App Router가 가장 완벽한 구현입니다. React 팀은 차세대 프레임워크에서는 이러한 기능을 구현하기 쉽도록 번들러 개발자와 공동으로 노력하고 있습니다. +서버 컴포넌트와 Suspense는 Next.js의 기능이 아닌 React의 기능입니다. 하지만 프레임워크 수준에서 이를 채택하려면 많은 노력과 비교적 복잡한 구현 작업이 필요합니다. 현재로서는 Next.js의 App Router가 가장 완벽한 구현입니다. React 팀은 차세대 프레임워크에서는 이러한 기능을 구현하기 쉽도록 번들러 개발자와 함께 노력하고 있습니다. From b16e4a21fcbe8b156849afb3e0a98f8367883fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A3=A8=EB=B0=80LuMir?= Date: Mon, 30 Dec 2024 00:18:22 +0900 Subject: [PATCH 29/31] docs: update `add-react-to-an-existing-project.md` --- src/components/Layout/Footer.tsx | 4 +- .../learn/add-react-to-an-existing-project.md | 51 ++++++++++--------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/components/Layout/Footer.tsx b/src/components/Layout/Footer.tsx index 4b2dedd48..ed5324d45 100644 --- a/src/components/Layout/Footer.tsx +++ b/src/components/Layout/Footer.tsx @@ -347,9 +347,7 @@ export function Footer() {
더 보기 블로그 - - React 네이티브 - + React Native 개인 정보 보호 diff --git a/src/content/learn/add-react-to-an-existing-project.md b/src/content/learn/add-react-to-an-existing-project.md index c79c0d7f7..37852b95c 100644 --- a/src/content/learn/add-react-to-an-existing-project.md +++ b/src/content/learn/add-react-to-an-existing-project.md @@ -4,57 +4,57 @@ title: 기존 프로젝트에 React 추가하기 -기존 프로젝트와 일부 상호작용 요소를 추가하고 싶다면, React에 프로젝트를 다시 작성할 필요가 없습니다. 기존의 스택에 React를 추가하고 어디에서나 상호작용할 수 있는 React 컴포넌트를 렌더링하세요. +기존 프로젝트에 상호작용 요소를 일부 추가하고 싶다면, React로 다시 작성할 필요가 없습니다. 기존 스택에 React를 추가하고 상호작용할 수 있는 React 컴포넌트를 어디에서나 렌더링하세요. -**로컬 개발환경에 [Node.js](https://nodejs.org/en/)를 설치해야 합니다.** 온라인에서 [try React](/learn/installation#try-react)를 실행하거나 간단한 HTML에서도 React를 사용할 수 있지만, 현실적으로 개발을 위해 사용하는 대부분의 JavaScript 도구는 Node.js가 필요합니다. +**로컬 개발 환경에 [Node.js](https://nodejs.org/en/)를 설치해야 합니다.** 온라인에서 [React](/learn/installation#try-react)를 시도하거나 간단한 HTML에서 React를 사용할 수도 있지만, 현실적인 개발을 위해 사용하는 대부분의 자바스크립트 도구에는 Node.js가 필요합니다. -## 기존 웹사이트의 전체 하위 경로에 React 사용하기 {/*using-react-for-an-entire-subroute-of-your-existing-website*/} +## 기존 웹사이트의 하위 경로 전체에 React 사용하기 {/*using-react-for-an-entire-subroute-of-your-existing-website*/} -`example.com`이라는 또 다른 서버 기술 (Rails와 같은) 로 빌드한 기존 웹 앱이 있고, `example.com/some-app/`으로 시작하는 모든 경로를 React로 완전히 구현하고 싶다고 가정해 보겠습니다. +`example.com`이라는 또 다른 서버 기술(Rails와 같은)로 빌드한 기존 웹 앱이 있고, `example.com/some-app/`으로 시작하는 모든 경로를 React로 완전히 구현하고 싶다고 가정하겠습니다. 다음과 같이 설정하는 것을 추천합니다. 1. [React 기반 프레임워크](/learn/start-a-new-react-project) 중 하나를 사용하여 **앱의 React 부분을 빌드하세요.** -2. 사용하는 프레임워크 설정에서 **`/some-app` 을 *기본 경로*로 명시하세요.** (방법은 다음과 같습니다. [Next.js](https://nextjs.org/docs/api-reference/next.config.js/basepath), [Gatsby](https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/path-prefix/)) -3. **서버 또는 프록시를 구성**하여 `/some-app/` 아래의 모든 요청이 React 애플리케이션에서 처리되도록 하세요. +2. 사용하는 프레임워크 설정에서 **`/some-app` 을 *기본 경로**Base Path*로 명시하세요**. (이때, [Next.js](https://nextjs.org/docs/api-reference/next.config.js/basepath), [Gatsby](https://www.gatsbyjs.com/docs/how-to/previews-deploys-hosting/path-prefix/)를 사용하세요!) +3. **서버 또는 프록시를 구성**하여 `/some-app/` 하위의 모든 요청이 React 애플리케이션에서 처리되도록 하세요. -이는 앱의 React 부분이 이러한 프레임워크에 내장된 [최고의 사례들로부터 이점을 얻을 수 있습니다.](/learn/start-a-new-react-project#can-i-use-react-without-a-framework) +이는 앱의 React 부분이 이러한 프레임워크에 내장된 [최고의 사례들Best Practices로부터 이점을 얻을 수 있습니다.](/learn/start-a-new-react-project#can-i-use-react-without-a-framework) -많은 React 기반의 프레임워크는 풀스택이며 React 앱이 서버를 활용할 수 있도록 합니다. 그러나 서버에서 JavaScript를 실행할 수 없거나 실행하고 싶지 않은 경우에도 동일한 접근방식을 사용할 수 있습니다. 이러한 경우에는 HTML/CSS/JS 내보내기(Next.js의 경우 [`next export` output](https://nextjs.org/docs/advanced-features/static-html-export), Gatsby의 경우 기본값)를 `/some-app/`에서 대신 제공하세요. +많은 React 기반의 프레임워크는 풀스택이며 React 앱이 서버를 활용할 수 있도록 합니다. 그러나 서버에서 자바스크립트를 실행할 수 없거나 실행하고 싶지 않은 경우에도 동일한 접근방식을 사용할 수 있습니다. 이러한 경우에는 HTML/CSS/JS 내보내기(Next.js의 경우 [`next export` output](https://nextjs.org/docs/advanced-features/static-html-export), Gatsby의 경우 기본값)를 `/some-app/`에서 대신 제공하세요. ## 기존 페이지의 일부분에 React 사용하기 {/*using-react-for-a-part-of-your-existing-page*/} -이미 다른 기술(Rails와 같은 서버 기술 또는 Backbone과 같은 클라이언트 기술)로 빌드된 기존 페이지가 있고 해당 페이지 어딘가에 상호작용할 수 있는 React 컴포넌트를 렌더링하고 싶다고 가정해 봅시다. 이는 React 컴포넌트를 통합하는 일반적인 방식입니다.-- 실제로 수년 동안 Meta에서 대부분의 React 사용을 이런 식으로 하였습니다! +이미 다른 기술(Rails와 같은 서버 기술 또는 Backbone과 같은 클라이언트 기술)로 빌드된 기존 페이지가 있고, 해당 페이지 어딘가에 상호작용할 수 있는 React 컴포넌트를 렌더링하고 싶다고 가정하겠습니다. 이는 React 컴포넌트를 통합하는 일반적인 방식입니다. 실제로 수년 동안 Meta에서 대부분의 React 사용을 이런 식으로 하였습니다! 이 방식은 두 가지 단계로 수행할 수 있습니다. -1. [JSX 문법](/learn/writing-markup-with-jsx)을 사용할 수 있게 **JavaScript 환경을 설정**하고 [`import`](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import) / [`export`](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/export) 문법을 통해 코드를 모듈로 분리한 다음 [npm](https://www.npmjs.com/) 패키지 레지스트리의 패키지(예시: React)를 사용하세요. +1. [JSX 구문](/learn/writing-markup-with-jsx)을 사용할 수 있게 **자바스크립트 환경을 설정**하고, [`import`](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/import) / [`export`](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/export) 구문을 통해 코드를 모듈로 분리한 다음, [npm](https://www.npmjs.com/) 패키지 레지스트리에서 패키지(예시: React)를 사용하세요. -2. 해당 페이지에서 보고 싶은 곳에 **React 컴포넌트를 렌더링하세요.** +2. 해당 페이지에서 원하는 위치에 **React 컴포넌트를 렌더링하세요.** 정확한 접근 방식은 기존 페이지의 설정에 따라 다르기 때문에, 몇 가지 세부 사항을 함께 살펴보겠습니다. -### 1단계 : 모듈 JavaScript 환경 설정하기 {/*step-1-set-up-a-modular-javascript-environment*/} +### 1단계: 모듈 자바스크립트 환경 설정하기 {/*step-1-set-up-a-modular-javascript-environment*/} -모듈 JavaScript 환경은 모든 코드를 한 파일에 작성하는 것이 아닌 각각의 React 컴포넌트를 개별 파일로 작성할 수 있게 합니다. 또한 React 자체를 포함한 다른 개발자들이 [npm](https://www.npmjs.com/) 레지스트리에 배포한 모든 훌륭한 패키지들을 사용할 수 있습니다. 이 방법은 기존 설정에 따라 다르게 진행될 것입니다. +모듈 자바스크립트 환경은 모든 코드를 한 파일에 작성하는 것이 아닌, 각각의 React 컴포넌트를 개별 파일로 작성할 수 있게 합니다. 또한 (React 자체를 포함한) 다른 개발자들이 [npm](https://www.npmjs.com/) 레지스트리에 배포한 훌륭한 패키지들을 모두 사용할 수 있습니다. 이 작업을 수행하는 방법은 기존 설정에 따라 다릅니다. -* **이미 애플리케이션이 `import` 문법을 이용해 파일로 분리하고 있다면** 기존에 가지고 있는 설정을 이용해 보세요. JS 코드에서 `
`를 작성하면 문법 오류가 발생하는지 확인해 보세요. 문법 오류가 발생한다면 [Babel을 이용한 JavaScript 코드 변환](https://babeljs.io/setup)이 필요할 수 있으며 JSX를 사용하려면 [Babel React 프리셋](https://babeljs.io/docs/babel-preset-react)을 활성화해야 할 수 있습니다. +* **이미 애플리케이션이 `import` 문을 이용해 파일로 분리하고 있다면** 기존에 가지고 있는 설정을 이용해 보세요. JS 코드에서 `
`를 작성하면 문법 오류가 발생하는지 확인해 보세요. 문법 오류가 발생한다면 [Babel을 이용한 자바스크립트 코드 변환](https://babeljs.io/setup)이 필요할 수 있으며, JSX를 사용하려면 [Babel React 프리셋](https://babeljs.io/docs/babel-preset-react)을 활성화해야 할 수도 있습니다. -* **애플리케이션이 JavaScript 모듈을 컴파일하기 위한 기존 설정이 없다면,** [Vite](https://vitejs.dev/)를 이용하여 설정하세요. Vite 커뮤니티는 Rails, Django, Laravel을 포함한 [다양한 백엔드 프레임워크와의 통합](https://github.com/vitejs/awesome-vite#integrations-with-backends)을 지원하고 있습니다. 사용 중인 백엔드 프레임워크가 목록에 없다면 [이 가이드를 참고하여](https://vitejs.dev/guide/backend-integration.html) Vite 빌드를 백엔드와 수동으로 통합하세요. +* **애플리케이션이 자바스크립트 모듈을 컴파일하기 위한 기존 설정이 없다면,** [Vite](https://vitejs.dev/)를 이용하여 설정하세요. Vite 커뮤니티는 Rails, Django, Laravel을 포함한 [다양한 백엔드 프레임워크와의 통합](https://github.com/vitejs/awesome-vite#integrations-with-backends)을 지원하고 있습니다. 사용 중인 백엔드 프레임워크가 목록에 없다면 [가이드를 참고하여](https://vitejs.dev/guide/backend-integration.html) Vite 빌드를 백엔드와 수동으로 통합하세요. -설정이 제대로 작동하는지 확인하려면 프로젝트 폴더에서 아래 커맨드를 실행하세요. +설정이 제대로 동작하는지 확인하려면 프로젝트 폴더에서 아래 명령어를 실행하세요. npm install react react-dom -그리고 메인 JavaScript 파일(`index.js` 혹은 `main.js`라고 불리는 파일일 수 있습니다.)의 최상단에 다음 코드 라인을 추가하세요. +그리고 메인 자바스크립트 파일(`index.js` 혹은 `main.js`라는 파일일 수 있습니다.)의 최상단에 다음 코드 라인을 추가하세요. @@ -81,17 +81,18 @@ root.render(

Hello, world

);
-페이지의 전체 내용이 "Hello, world!"로 바뀌었다면 모든 것이 정상적으로 작동하고 있는 겁니다! 계속해서 읽어보세요. +페이지의 전체 내용이 "Hello, world!"로 바뀌었다면 모든 것이 정상적으로 동작하고 있는 겁니다! 계속해서 읽어보세요. -처음으로 기존 프로젝트에 모듈 JavaScript 환경을 통합하기는 다소 어려워 보일 수 있으나 그만한 가치가 있는 일입니다! 어려움을 겪는 부분이 있다면 우리의 [커뮤니티 리소스](/community)나 [Vite 채팅](https://chat.vitejs.dev/)을 이용해 보세요. +처음으로 기존 프로젝트에 모듈 자바스크립트 환경을 통합하기는 다소 어려워 보일 수 있으나, 그만한 가치가 있는 일입니다! 어려움을 겪는 부분이 있다면 [커뮤니티 리소스](/community)나 [Vite 채팅](https://chat.vitejs.dev/)을 이용해 보세요. -### 2단계 : 페이지 어디에서든 React 컴포넌트 렌더링하기 {/*step-2-render-react-components-anywhere-on-the-page*/} -이전 단계에서는, 메인 파일 최상단에 이 코드를 넣었습니다. +### 2단계: 페이지 어디에서든 React 컴포넌트 렌더링하기 {/*step-2-render-react-components-anywhere-on-the-page*/} + +이전 단계에서는, 메인 파일 최상단에 아래 코드를 넣었습니다. ```js import { createRoot } from 'react-dom/client'; @@ -108,7 +109,7 @@ root.render(

Hello, world

); 이 코드를 삭제하세요. -대신 React 컴포넌트를 HTML의 특정 위치에 렌더링하고 싶을 것입니다. HTML 페이지를 열고(또는 이를 생성하는 서버 템플릿) HTML 태그에 고유한 `id` 어트리뷰트를 추가하세요. +대신 React 컴포넌트를 HTML의 특정 위치에 렌더링하고 싶을 것입니다. HTML 페이지를 열고(또는 이를 생성하는 서버 템플릿) HTML 태그에 고유한 [`id`](https://developer.mozilla.org/ko/docs/Web/HTML/Global_attributes/id) 어트리뷰트를 추가하세요. ```html @@ -116,7 +117,7 @@ root.render(

Hello, world

); ``` -이렇게 하면 [`document.getElementById`](https://developer.mozilla.org/ko/docs/Web/API/Document/getElementById)로 HTML 엘리먼트를 찾아서 [`createRoot`](/reference/react-dom/client/createRoot)에 전달함으로써 해당 요소 내부에 React 컴포넌트를 렌더링할 수 있습니다. +이렇게 하면 [`document.getElementById`](https://developer.mozilla.org/ko/docs/Web/API/Document/getElementById)로 HTML 엘리먼트를 찾아 [`createRoot`](/reference/react-dom/client/createRoot)에 전달함으로써 해당 요소 내부에 React 컴포넌트를 렌더링할 수 있습니다. @@ -147,10 +148,10 @@ root.render(); -기존에 존재하던 'index.html'의 원본 HTML 컨텐츠가 그대로 남아있는 것을 확인할 수 있습니다. 하지만 이제는 `