Never Use React Context

Never Use React Context for global state management (2024)

There's a popular saying in frontend development that performance doesn't matter until it does. This is for the most part, true. But performance isn't a goal in itself for most businesses. For those businesses, performance actually becomes a concern once it impacts other aspects of the business like user experience, SEO or conversion rate for example.

What all this has todo with React Context? Well... it potentially has such a devastating hit on performance that the user experience is critically affected. In this blog post I'm gonna show you why I think you should avoid using it from the start, and save yourself from a lot of trouble.

I'm going to talk about React Context as a global state management solution, but my points are valid beyond just this topic, so pay close attention if your unfamiliar with some of these problems and you'll save yourself a lot of headache in the future.

Before we dive into pros & cons, let's see what React Context is designed for and what is a global state management solution

Global State Management

What is a global state management solution?

Global state management is a means to centralize and manage changing data in an application, making it easily mutable and available to all components in the application.

A deserved solution must be Super

  • Simple
  • Fast
  • Light
  • Scalable
  • Reliable
  • Flexible

And also provide ways to

  • subscribe to changes
  • update state
  • access state
  • hydrate state
  • cache state
  • migrate state versions
  • connect to dev tools
  • integrate with a server
  • and more in case i missed stuff...

As you can see, its a serious business.
Which is why the React team left it open for the community to come up with suitable solutions.
more on that later...

What is React Context?

Before we dive into pros & cons, let's see what React Context is designed for

https://react.dev/learn/passing-data-deeply-with-contextStated directly from the react docs, react context is a way to pass data through the component tree without having to pass props down manually at every level.

In laymen terms, Its a to avoid something called prop drilling. Technically this is a state management solution because most props are also managed states somewhere up the tree of your app.

But when React Context was first introduced, many things were unknown and un-thought of yet.

The React Context API is a bare bones solution for a very specific problem. It was not designed to be a global state management solution and is lacking in many areas that we shall explore soon.

So why the fuck do people still keep nagging about the subject years later?
A little history lesson can give us some context about that.

History of React

The history of React and its community

A little history lesson: react context first came out in react v16.3 in 2018,
and in that pre-historic time there was only 1 well known solution for global state management.
It was called Redux, and it sucked... big time!
Now, this is just my opinion
of course... 凸( •̀_•́ )凸

Story Time

But let me tell you something, the Redux you know today is not the same Redux that was back then. In 2016 I went over from my office (DevOps & Automation) to see what my friend was up to, He was part of the Frontend team.

He wanted to show me and the rest of the Frontend team How Cool Redux is. It enabled him to write huge piles of shit... '~' sorry, I meant reducers. Each one of these shitty reducers was +100 lines of unreadable garbage, and typescript was not popular back then, so good luck and fuck you if you inherit these in your new work place.

Any way, this friend and his team lead were so excited about this technology.
And I believe the reason they were excited is because that code writing approach was very challenging.
I on the other hand was on the opposite camp of the hype, and thought that code should be simple and easy.
So I naturally hated it.

It felt like putting 25kg hammer on a 1mm nail.
You had to write 200 lines just to add a stinkin "firstName"
to a global store that stored all your state and it's related actions.

But this insanity did have a justification to exist!
It solved a few terrible problems with react.
The main issues Redux solved for React developers were

  • prop drilling
  • code duplication
  • separation & centralizing concerns
  • incredible performance

React-Redux became the industry standard for managing state.
But many people like myself were not satisfied and were looking for alternatives.

When the React team introduced the Context API, Many people saw it as a potential replacement for Redux and rushed over to check it out.
I was also looking for a replacement for Redux.
I tried implementing my own solutions and realized very quickly I'm wasting my time.
I tried the Context API, the API itself was not as good as what i was expecting, but it was good enough~

I soon run into trouble. When I added data that didn't change frequently, it was fine. But as soon as i had data that changed frequently, the performance of my app became terrible.

Re Rendering Component

with heavy performance impact

1720783887060 0 01720783887060 0 11720783887060 0 21720783887060 0 31720783887060 0 41720783887060 0 51720783887060 0 61720783887060 0 71720783887060 0 81720783887060 0 91720783887060 0 101720783887060 0 111720783887060 0 121720783887060 0 131720783887060 0 141720783887060 0 151720783887060 0 161720783887060 0 171720783887060 0 181720783887060 0 191720783887060 0 201720783887060 0 211720783887060 0 221720783887060 0 231720783887060 0 241720783887060 0 251720783887060 0 261720783887060 0 271720783887060 0 281720783887060 0 291720783887060 0 301720783887060 0 311720783887060 0 321720783887060 0 331720783887060 0 341720783887060 0 351720783887060 0 361720783887060 0 371720783887060 0 381720783887060 0 391720783887060 0 401720783887060 0 411720783887060 0 421720783887060 0 431720783887060 0 441720783887060 0 451720783887060 0 461720783887060 0 471720783887060 0 481720783887060 0 491720783887060 0 501720783887060 0 511720783887060 0 521720783887060 0 531720783887060 0 541720783887060 0 551720783887060 0 561720783887060 0 571720783887060 0 581720783887060 0 591720783887060 0 601720783887060 0 611720783887060 0 621720783887060 0 631720783887060 0 641720783887060 0 651720783887060 0 661720783887060 0 671720783887060 0 681720783887060 0 691720783887060 0 701720783887060 0 711720783887060 0 721720783887060 0 731720783887060 0 741720783887060 0 751720783887060 0 761720783887060 0 771720783887060 0 781720783887060 0 791720783887060 0 801720783887060 0 811720783887060 0 821720783887060 0 831720783887060 0 841720783887060 0 851720783887060 0 861720783887060 0 871720783887060 0 881720783887060 0 891720783887060 0 901720783887060 0 911720783887060 0 921720783887060 0 931720783887060 0 941720783887060 0 951720783887060 0 961720783887060 0 971720783887060 0 981720783887060 0 991720783887060 0 1001720783887060 0 1011720783887060 0 1021720783887060 0 1031720783887060 0 1041720783887060 0 1051720783887060 0 1061720783887060 0 1071720783887060 0 1081720783887060 0 1091720783887060 0 1101720783887060 0 1111720783887060 0 1121720783887060 0 1131720783887060 0 1141720783887060 0 1151720783887060 0 1161720783887060 0 1171720783887060 0 1181720783887060 0 1191720783887060 0 1201720783887060 0 1211720783887060 0 1221720783887060 0 1231720783887060 0 1241720783887060 0 1251720783887060 0 1261720783887060 0 1271720783887060 0 1281720783887060 0 1291720783887060 0 1301720783887060 0 1311720783887060 0 1321720783887060 0 1331720783887060 0 1341720783887060 0 1351720783887060 0 1361720783887060 0 1371720783887060 0 1381720783887060 0 1391720783887060 0 1401720783887060 0 1411720783887060 0 1421720783887060 0 1431720783887060 0 1441720783887060 0 1451720783887060 0 1461720783887060 0 1471720783887060 0 1481720783887060 0 1491720783887060 0 1501720783887060 0 1511720783887060 0 1521720783887060 0 1531720783887060 0 1541720783887060 0 1551720783887060 0 1561720783887060 0 1571720783887060 0 1581720783887060 0 1591720783887060 0 1601720783887060 0 1611720783887060 0 1621720783887060 0 1631720783887060 0 1641720783887060 0 1651720783887060 0 1661720783887060 0 1671720783887060 0 1681720783887060 0 1691720783887060 0 1701720783887060 0 1711720783887060 0 1721720783887060 0 1731720783887060 0 1741720783887060 0 1751720783887060 0 1761720783887060 0 1771720783887060 0 1781720783887060 0 1791720783887060 0 1801720783887060 0 1811720783887060 0 1821720783887060 0 1831720783887060 0 1841720783887060 0 1851720783887060 0 1861720783887060 0 1871720783887060 0 1881720783887060 0 1891720783887060 0 1901720783887060 0 1911720783887060 0 1921720783887060 0 1931720783887060 0 1941720783887060 0 1951720783887060 0 1961720783887060 0 1971720783887060 0 1981720783887060 0 1991720783887060 0 2001720783887060 0 2011720783887060 0 2021720783887060 0 2031720783887060 0 2041720783887060 0 2051720783887060 0 2061720783887060 0 2071720783887060 0 2081720783887060 0 2091720783887060 0 2101720783887060 0 2111720783887060 0 2121720783887060 0 2131720783887060 0 2141720783887060 0 2151720783887060 0 2161720783887060 0 2171720783887060 0 2181720783887060 0 2191720783887060 0 2201720783887060 0 2211720783887060 0 2221720783887060 0 2231720783887060 0 2241720783887060 0 2251720783887060 0 2261720783887060 0 2271720783887060 0 2281720783887060 0 2291720783887060 0 2301720783887060 0 2311720783887060 0 2321720783887060 0 2331720783887060 0 2341720783887060 0 2351720783887060 0 2361720783887060 0 2371720783887060 0 2381720783887060 0 2391720783887060 0 2401720783887060 0 2411720783887060 0 2421720783887060 0 2431720783887060 0 2441720783887060 0 2451720783887060 0 2461720783887060 0 2471720783887060 0 2481720783887060 0 2491720783887060 0 2501720783887060 0 2511720783887060 0 2521720783887060 0 2531720783887060 0 2541720783887060 0 2551720783887060 0 2561720783887060 0 2571720783887060 0 2581720783887060 0 2591720783887060 0 2601720783887060 0 2611720783887060 0 2621720783887060 0 2631720783887060 0 2641720783887060 0 2651720783887060 0 2661720783887060 0 2671720783887060 0 2681720783887060 0 2691720783887060 0 2701720783887060 0 2711720783887060 0 2721720783887060 0 2731720783887060 0 2741720783887060 0 2751720783887060 0 2761720783887060 0 2771720783887060 0 2781720783887060 0 2791720783887060 0 2801720783887060 0 2811720783887060 0 2821720783887060 0 2831720783887060 0 2841720783887060 0 2851720783887060 0 2861720783887060 0 2871720783887060 0 2881720783887060 0 2891720783887060 0 2901720783887060 0 2911720783887060 0 2921720783887060 0 2931720783887060 0 2941720783887060 0 2951720783887060 0 2961720783887060 0 2971720783887060 0 2981720783887060 0 2991720783887060 0 3001720783887060 0 3011720783887060 0 3021720783887060 0 3031720783887060 0 3041720783887060 0 3051720783887060 0 3061720783887060 0 3071720783887060 0 3081720783887060 0 3091720783887060 0 3101720783887060 0 3111720783887060 0 3121720783887060 0 3131720783887060 0 3141720783887060 0 3151720783887060 0 3161720783887060 0 3171720783887060 0 3181720783887060 0 3191720783887060 0 3201720783887060 0 3211720783887060 0 3221720783887060 0 3231720783887060 0 3241720783887060 0 3251720783887060 0 3261720783887060 0 3271720783887060 0 3281720783887060 0 3291720783887060 0 3301720783887060 0 3311720783887060 0 3321720783887060 0 3331720783887060 0 3341720783887060 0 3351720783887060 0 3361720783887060 0 3371720783887060 0 3381720783887060 0 3391720783887060 0 3401720783887060 0 3411720783887060 0 3421720783887060 0 3431720783887060 0 3441720783887060 0 3451720783887060 0 3461720783887060 0 3471720783887060 0 3481720783887060 0 3491720783887060 0 3501720783887060 0 3511720783887060 0 3521720783887060 0 3531720783887060 0 3541720783887060 0 3551720783887060 0 3561720783887060 0 3571720783887060 0 3581720783887060 0 3591720783887060 0 3601720783887060 0 3611720783887060 0 3621720783887060 0 3631720783887060 0 3641720783887060 0 3651720783887060 0 3661720783887060 0 3671720783887060 0 3681720783887060 0 3691720783887060 0 3701720783887060 0 3711720783887060 0 3721720783887060 0 3731720783887060 0 3741720783887060 0 3751720783887060 0 3761720783887060 0 3771720783887060 0 3781720783887060 0 3791720783887060 0 3801720783887060 0 3811720783887060 0 3821720783887060 0 3831720783887060 0 3841720783887060 0 3851720783887060 0 3861720783887060 0 3871720783887060 0 3881720783887060 0 3891720783887060 0 3901720783887060 0 3911720783887060 0 3921720783887060 0 3931720783887060 0 3941720783887060 0 3951720783887060 0 3961720783887060 0 3971720783887060 0 3981720783887060 0 3991720783887060 0 4001720783887060 0 4011720783887060 0 4021720783887060 0 4031720783887060 0 4041720783887060 0 4051720783887060 0 4061720783887060 0 4071720783887060 0 4081720783887060 0 4091720783887060 0 4101720783887060 0 4111720783887060 0 4121720783887060 0 4131720783887060 0 4141720783887060 0 4151720783887060 0 4161720783887060 0 4171720783887060 0 4181720783887060 0 4191720783887060 0 4201720783887060 0 4211720783887060 0 4221720783887060 0 4231720783887060 0 4241720783887060 0 4251720783887060 0 4261720783887060 0 4271720783887060 0 4281720783887060 0 4291720783887060 0 4301720783887060 0 4311720783887060 0 4321720783887060 0 4331720783887060 0 4341720783887060 0 4351720783887060 0 4361720783887060 0 4371720783887060 0 4381720783887060 0 4391720783887060 0 4401720783887060 0 4411720783887060 0 4421720783887060 0 4431720783887060 0 4441720783887060 0 4451720783887060 0 4461720783887060 0 4471720783887060 0 4481720783887060 0 4491720783887060 0 4501720783887060 0 4511720783887060 0 4521720783887060 0 4531720783887060 0 4541720783887060 0 4551720783887060 0 4561720783887060 0 4571720783887060 0 4581720783887060 0 4591720783887060 0 4601720783887060 0 4611720783887060 0 4621720783887060 0 4631720783887060 0 4641720783887060 0 4651720783887060 0 4661720783887060 0 4671720783887060 0 4681720783887060 0 4691720783887060 0 4701720783887060 0 4711720783887060 0 4721720783887060 0 4731720783887060 0 4741720783887060 0 4751720783887060 0 4761720783887060 0 4771720783887060 0 4781720783887060 0 4791720783887060 0 4801720783887060 0 4811720783887060 0 4821720783887060 0 4831720783887060 0 4841720783887060 0 4851720783887060 0 4861720783887060 0 4871720783887060 0 4881720783887060 0 4891720783887060 0 4901720783887060 0 4911720783887060 0 4921720783887060 0 4931720783887060 0 4941720783887060 0 4951720783887060 0 4961720783887060 0 4971720783887060 0 4981720783887060 0 4991720783887060 0 5001720783887060 0 5011720783887060 0 5021720783887060 0 5031720783887060 0 5041720783887060 0 5051720783887060 0 5061720783887060 0 5071720783887060 0 5081720783887060 0 5091720783887060 0 5101720783887060 0 5111720783887060 0 5121720783887060 0 5131720783887060 0 5141720783887060 0 5151720783887060 0 5161720783887060 0 5171720783887060 0 5181720783887060 0 5191720783887060 0 5201720783887060 0 5211720783887060 0 5221720783887060 0 5231720783887060 0 5241720783887060 0 5251720783887060 0 5261720783887060 0 5271720783887060 0 5281720783887060 0 5291720783887060 0 5301720783887060 0 5311720783887060 0 5321720783887060 0 5331720783887060 0 5341720783887060 0 5351720783887060 0 5361720783887060 0 5371720783887060 0 5381720783887060 0 5391720783887060 0 5401720783887060 0 5411720783887060 0 5421720783887060 0 5431720783887060 0 5441720783887060 0 5451720783887060 0 5461720783887060 0 5471720783887060 0 5481720783887060 0 5491720783887060 0 5501720783887060 0 5511720783887060 0 5521720783887060 0 5531720783887060 0 5541720783887060 0 5551720783887060 0 5561720783887060 0 5571720783887060 0 5581720783887060 0 5591720783887060 0 5601720783887060 0 5611720783887060 0 5621720783887060 0 5631720783887060 0 5641720783887060 0 5651720783887060 0 5661720783887060 0 5671720783887060 0 5681720783887060 0 5691720783887060 0 5701720783887060 0 5711720783887060 0 5721720783887060 0 5731720783887060 0 5741720783887060 0 5751720783887060 0 5761720783887060 0 5771720783887060 0 5781720783887060 0 5791720783887060 0 5801720783887060 0 5811720783887060 0 5821720783887060 0 5831720783887060 0 5841720783887060 0 5851720783887060 0 5861720783887060 0 5871720783887060 0 5881720783887060 0 5891720783887060 0 5901720783887060 0 5911720783887060 0 5921720783887060 0 5931720783887060 0 5941720783887060 0 5951720783887060 0 5961720783887060 0 5971720783887060 0 5981720783887060 0 5991720783887060 0 6001720783887060 0 6011720783887060 0 6021720783887060 0 6031720783887060 0 6041720783887060 0 6051720783887060 0 6061720783887060 0 6071720783887060 0 6081720783887060 0 6091720783887060 0 6101720783887060 0 6111720783887060 0 6121720783887060 0 6131720783887060 0 6141720783887060 0 6151720783887060 0 6161720783887060 0 6171720783887060 0 6181720783887060 0 6191720783887060 0 6201720783887060 0 6211720783887060 0 6221720783887060 0 6231720783887060 0 6241720783887060 0 6251720783887060 0 6261720783887060 0 6271720783887060 0 6281720783887060 0 6291720783887060 0 6301720783887060 0 6311720783887060 0 6321720783887060 0 6331720783887060 0 6341720783887060 0 6351720783887060 0 6361720783887060 0 6371720783887060 0 6381720783887060 0 6391720783887060 0 6401720783887060 0 6411720783887060 0 6421720783887060 0 6431720783887060 0 6441720783887060 0 6451720783887060 0 6461720783887060 0 6471720783887060 0 6481720783887060 0 6491720783887060 0 6501720783887060 0 6511720783887060 0 6521720783887060 0 6531720783887060 0 6541720783887060 0 6551720783887060 0 6561720783887060 0 6571720783887060 0 6581720783887060 0 6591720783887060 0 6601720783887060 0 6611720783887060 0 6621720783887060 0 6631720783887060 0 6641720783887060 0 6651720783887060 0 6661720783887060 0 6671720783887060 0 6681720783887060 0 6691720783887060 0 6701720783887060 0 6711720783887060 0 6721720783887060 0 6731720783887060 0 6741720783887060 0 6751720783887060 0 6761720783887060 0 6771720783887060 0 6781720783887060 0 6791720783887060 0 6801720783887060 0 6811720783887060 0 6821720783887060 0 6831720783887060 0 6841720783887060 0 6851720783887060 0 6861720783887060 0 6871720783887060 0 6881720783887060 0 6891720783887060 0 6901720783887060 0 6911720783887060 0 6921720783887060 0 6931720783887060 0 6941720783887060 0 6951720783887060 0 6961720783887060 0 6971720783887060 0 6981720783887060 0 6991720783887060 0 7001720783887060 0 7011720783887060 0 7021720783887060 0 7031720783887060 0 7041720783887060 0 7051720783887060 0 7061720783887060 0 7071720783887060 0 7081720783887060 0 7091720783887060 0 7101720783887060 0 7111720783887060 0 7121720783887060 0 7131720783887060 0 7141720783887060 0 7151720783887060 0 7161720783887060 0 7171720783887060 0 7181720783887060 0 7191720783887060 0 7201720783887060 0 7211720783887060 0 7221720783887060 0 7231720783887060 0 7241720783887060 0 7251720783887060 0 7261720783887060 0 7271720783887060 0 7281720783887060 0 7291720783887060 0 7301720783887060 0 7311720783887060 0 7321720783887060 0 7331720783887060 0 7341720783887060 0 7351720783887060 0 7361720783887060 0 7371720783887060 0 7381720783887060 0 7391720783887060 0 7401720783887060 0 7411720783887060 0 7421720783887060 0 7431720783887060 0 7441720783887060 0 7451720783887060 0 7461720783887060 0 7471720783887060 0 7481720783887060 0 7491720783887060 0 7501720783887060 0 7511720783887060 0 7521720783887060 0 7531720783887060 0 7541720783887060 0 7551720783887060 0 7561720783887060 0 7571720783887060 0 7581720783887060 0 7591720783887060 0 7601720783887060 0 7611720783887060 0 7621720783887060 0 7631720783887060 0 7641720783887060 0 7651720783887060 0 7661720783887060 0 7671720783887060 0 7681720783887060 0 7691720783887060 0 7701720783887060 0 7711720783887060 0 7721720783887060 0 7731720783887060 0 7741720783887060 0 7751720783887060 0 7761720783887060 0 7771720783887060 0 7781720783887060 0 7791720783887060 0 7801720783887060 0 7811720783887060 0 7821720783887060 0 7831720783887060 0 7841720783887060 0 7851720783887060 0 7861720783887060 0 7871720783887060 0 7881720783887060 0 7891720783887060 0 7901720783887060 0 7911720783887060 0 7921720783887060 0 7931720783887060 0 7941720783887060 0 7951720783887060 0 7961720783887060 0 7971720783887060 0 7981720783887060 0 7991720783887060 0 8001720783887060 0 8011720783887060 0 8021720783887060 0 8031720783887060 0 8041720783887060 0 8051720783887060 0 8061720783887060 0 8071720783887060 0 8081720783887060 0 8091720783887060 0 8101720783887060 0 8111720783887060 0 8121720783887060 0 8131720783887060 0 8141720783887060 0 8151720783887060 0 8161720783887060 0 8171720783887060 0 8181720783887060 0 8191720783887060 0 8201720783887060 0 8211720783887060 0 8221720783887060 0 8231720783887060 0 8241720783887060 0 8251720783887060 0 8261720783887060 0 8271720783887060 0 8281720783887060 0 8291720783887060 0 8301720783887060 0 8311720783887060 0 8321720783887060 0 8331720783887060 0 8341720783887060 0 8351720783887060 0 8361720783887060 0 8371720783887060 0 8381720783887060 0 8391720783887060 0 8401720783887060 0 8411720783887060 0 8421720783887060 0 8431720783887060 0 8441720783887060 0 8451720783887060 0 8461720783887060 0 8471720783887060 0 8481720783887060 0 8491720783887060 0 8501720783887060 0 8511720783887060 0 8521720783887060 0 8531720783887060 0 8541720783887060 0 8551720783887060 0 8561720783887060 0 8571720783887060 0 8581720783887060 0 8591720783887060 0 8601720783887060 0 8611720783887060 0 8621720783887060 0 8631720783887060 0 8641720783887060 0 8651720783887060 0 8661720783887060 0 8671720783887060 0 8681720783887060 0 8691720783887060 0 8701720783887060 0 8711720783887060 0 8721720783887060 0 8731720783887060 0 8741720783887060 0 8751720783887060 0 8761720783887060 0 8771720783887060 0 8781720783887060 0 8791720783887060 0 8801720783887060 0 8811720783887060 0 8821720783887060 0 8831720783887060 0 8841720783887060 0 8851720783887060 0 8861720783887060 0 8871720783887060 0 8881720783887060 0 8891720783887060 0 8901720783887060 0 8911720783887060 0 8921720783887060 0 8931720783887060 0 8941720783887060 0 8951720783887060 0 8961720783887060 0 8971720783887060 0 8981720783887060 0 8991720783887060 0 9001720783887060 0 9011720783887060 0 9021720783887060 0 9031720783887060 0 9041720783887060 0 9051720783887060 0 9061720783887060 0 9071720783887060 0 9081720783887060 0 9091720783887060 0 9101720783887060 0 9111720783887060 0 9121720783887060 0 9131720783887060 0 9141720783887060 0 9151720783887060 0 9161720783887060 0 9171720783887060 0 9181720783887060 0 9191720783887060 0 9201720783887060 0 9211720783887060 0 9221720783887060 0 9231720783887060 0 9241720783887060 0 9251720783887060 0 9261720783887060 0 9271720783887060 0 9281720783887060 0 9291720783887060 0 9301720783887060 0 9311720783887060 0 9321720783887060 0 9331720783887060 0 9341720783887060 0 9351720783887060 0 9361720783887060 0 9371720783887060 0 9381720783887060 0 9391720783887060 0 9401720783887060 0 9411720783887060 0 9421720783887060 0 9431720783887060 0 9441720783887060 0 9451720783887060 0 9461720783887060 0 9471720783887060 0 9481720783887060 0 9491720783887060 0 9501720783887060 0 9511720783887060 0 9521720783887060 0 9531720783887060 0 9541720783887060 0 9551720783887060 0 9561720783887060 0 9571720783887060 0 9581720783887060 0 9591720783887060 0 9601720783887060 0 9611720783887060 0 9621720783887060 0 9631720783887060 0 9641720783887060 0 9651720783887060 0 9661720783887060 0 9671720783887060 0 9681720783887060 0 9691720783887060 0 9701720783887060 0 9711720783887060 0 9721720783887060 0 9731720783887060 0 9741720783887060 0 9751720783887060 0 9761720783887060 0 9771720783887060 0 9781720783887060 0 9791720783887060 0 9801720783887060 0 9811720783887060 0 9821720783887060 0 9831720783887060 0 9841720783887060 0 9851720783887060 0 9861720783887060 0 9871720783887060 0 9881720783887060 0 9891720783887060 0 9901720783887060 0 9911720783887060 0 9921720783887060 0 9931720783887060 0 9941720783887060 0 9951720783887060 0 9961720783887060 0 9971720783887060 0 9981720783887060 0 9991720783887060 0 10001720783887060 0 10011720783887060 0 10021720783887060 0 10031720783887060 0 10041720783887060 0 10051720783887060 0 10061720783887060 0 10071720783887060 0 10081720783887060 0 10091720783887060 0 10101720783887060 0 10111720783887060 0 10121720783887060 0 10131720783887060 0 10141720783887060 0 10151720783887060 0 10161720783887060 0 10171720783887060 0 10181720783887060 0 10191720783887060 0 10201720783887060 0 10211720783887060 0 10221720783887060 0 10231720783887060 0 10241720783887060 0 10251720783887060 0 10261720783887060 0 10271720783887060 0 10281720783887060 0 10291720783887060 0 10301720783887060 0 10311720783887060 0 10321720783887060 0 10331720783887060 0 10341720783887060 0 10351720783887060 0 10361720783887060 0 10371720783887060 0 10381720783887060 0 10391720783887060 0 10401720783887060 0 10411720783887060 0 10421720783887060 0 10431720783887060 0 10441720783887060 0 10451720783887060 0 10461720783887060 0 10471720783887060 0 10481720783887060 0 10491720783887060 0 10501720783887060 0 10511720783887060 0 10521720783887060 0 10531720783887060 0 10541720783887060 0 10551720783887060 0 10561720783887060 0 10571720783887060 0 10581720783887060 0 10591720783887060 0 10601720783887060 0 10611720783887060 0 10621720783887060 0 10631720783887060 0 10641720783887060 0 10651720783887060 0 10661720783887060 0 10671720783887060 0 10681720783887060 0 10691720783887060 0 10701720783887060 0 10711720783887060 0 10721720783887060 0 10731720783887060 0 10741720783887060 0 10751720783887060 0 10761720783887060 0 10771720783887060 0 10781720783887060 0 10791720783887060 0 10801720783887060 0 10811720783887060 0 10821720783887060 0 10831720783887060 0 10841720783887060 0 10851720783887060 0 10861720783887060 0 10871720783887060 0 10881720783887060 0 10891720783887060 0 10901720783887060 0 10911720783887060 0 10921720783887060 0 10931720783887060 0 10941720783887060 0 10951720783887060 0 10961720783887060 0 10971720783887060 0 10981720783887060 0 10991720783887060 0 11001720783887060 0 11011720783887060 0 11021720783887060 0 11031720783887060 0 11041720783887060 0 11051720783887060 0 11061720783887060 0 11071720783887060 0 11081720783887060 0 11091720783887060 0 11101720783887060 0 11111720783887060 0 11121720783887060 0 11131720783887060 0 11141720783887060 0 11151720783887060 0 11161720783887060 0 11171720783887060 0 11181720783887060 0 11191720783887060 0 11201720783887060 0 11211720783887060 0 11221720783887060 0 11231720783887060 0 11241720783887060 0 11251720783887060 0 11261720783887060 0 11271720783887060 0 11281720783887060 0 11291720783887060 0 11301720783887060 0 11311720783887060 0 11321720783887060 0 11331720783887060 0 11341720783887060 0 11351720783887060 0 11361720783887060 0 11371720783887060 0 11381720783887060 0 11391720783887060 0 11401720783887060 0 11411720783887060 0 11421720783887060 0 11431720783887060 0 11441720783887060 0 11451720783887060 0 11461720783887060 0 11471720783887060 0 11481720783887060 0 11491720783887060 0 11501720783887060 0 11511720783887060 0 11521720783887060 0 11531720783887060 0 11541720783887060 0 11551720783887060 0 11561720783887060 0 11571720783887060 0 11581720783887060 0 11591720783887060 0 11601720783887060 0 11611720783887060 0 11621720783887060 0 11631720783887060 0 11641720783887060 0 11651720783887060 0 11661720783887060 0 11671720783887060 0 11681720783887060 0 11691720783887060 0 11701720783887060 0 11711720783887060 0 11721720783887060 0 11731720783887060 0 11741720783887060 0 11751720783887060 0 11761720783887060 0 11771720783887060 0 11781720783887060 0 11791720783887060 0 11801720783887060 0 11811720783887060 0 11821720783887060 0 11831720783887060 0 11841720783887060 0 11851720783887060 0 11861720783887060 0 11871720783887060 0 11881720783887060 0 11891720783887060 0 11901720783887060 0 11911720783887060 0 11921720783887060 0 11931720783887060 0 11941720783887060 0 11951720783887060 0 11961720783887060 0 11971720783887060 0 11981720783887060 0 11991720783887060 0 12001720783887060 0 12011720783887060 0 12021720783887060 0 12031720783887060 0 12041720783887060 0 12051720783887060 0 12061720783887060 0 12071720783887060 0 12081720783887060 0 12091720783887060 0 12101720783887060 0 12111720783887060 0 12121720783887060 0 12131720783887060 0 12141720783887060 0 12151720783887060 0 12161720783887060 0 12171720783887060 0 12181720783887060 0 12191720783887060 0 12201720783887060 0 12211720783887060 0 12221720783887060 0 12231720783887060 0 12241720783887060 0 12251720783887060 0 12261720783887060 0 12271720783887060 0 12281720783887060 0 12291720783887060 0 12301720783887060 0 12311720783887060 0 12321720783887060 0 12331720783887060 0 12341720783887060 0 12351720783887060 0 12361720783887060 0 12371720783887060 0 12381720783887060 0 12391720783887060 0 12401720783887060 0 12411720783887060 0 12421720783887060 0 12431720783887060 0 12441720783887060 0 12451720783887060 0 12461720783887060 0 12471720783887060 0 12481720783887060 0 12491720783887060 0 12501720783887060 0 12511720783887060 0 12521720783887060 0 12531720783887060 0 12541720783887060 0 12551720783887060 0 12561720783887060 0 12571720783887060 0 12581720783887060 0 12591720783887060 0 12601720783887060 0 12611720783887060 0 12621720783887060 0 12631720783887060 0 12641720783887060 0 12651720783887060 0 12661720783887060 0 12671720783887060 0 12681720783887060 0 12691720783887060 0 12701720783887060 0 12711720783887060 0 12721720783887060 0 12731720783887060 0 12741720783887060 0 12751720783887060 0 12761720783887060 0 12771720783887060 0 12781720783887060 0 12791720783887060 0 12801720783887060 0 12811720783887060 0 12821720783887060 0 12831720783887060 0 12841720783887060 0 12851720783887060 0 12861720783887060 0 12871720783887060 0 12881720783887060 0 12891720783887060 0 12901720783887060 0 12911720783887060 0 12921720783887060 0 12931720783887060 0 12941720783887060 0 12951720783887060 0 12961720783887060 0 12971720783887060 0 12981720783887060 0 12991720783887060 0 13001720783887060 0 13011720783887060 0 13021720783887060 0 13031720783887060 0 13041720783887060 0 13051720783887060 0 13061720783887060 0 13071720783887060 0 13081720783887060 0 13091720783887060 0 13101720783887060 0 13111720783887060 0 13121720783887060 0 13131720783887060 0 13141720783887060 0 13151720783887060 0 13161720783887060 0 13171720783887060 0 13181720783887060 0 13191720783887060 0 13201720783887060 0 13211720783887060 0 13221720783887060 0 13231720783887060 0 13241720783887060 0 13251720783887060 0 13261720783887060 0 13271720783887060 0 13281720783887060 0 13291720783887060 0 13301720783887060 0 13311720783887060 0 13321720783887060 0 13331720783887060 0 13341720783887060 0 13351720783887060 0 13361720783887060 0 13371720783887060 0 13381720783887060 0 13391720783887060 0 13401720783887060 0 13411720783887060 0 13421720783887060 0 13431720783887060 0 13441720783887060 0 13451720783887060 0 13461720783887060 0 13471720783887060 0 13481720783887060 0 13491720783887060 0 13501720783887060 0 13511720783887060 0 13521720783887060 0 13531720783887060 0 13541720783887060 0 13551720783887060 0 13561720783887060 0 13571720783887060 0 13581720783887060 0 13591720783887060 0 13601720783887060 0 13611720783887060 0 13621720783887060 0 13631720783887060 0 13641720783887060 0 13651720783887060 0 13661720783887060 0 13671720783887060 0 13681720783887060 0 13691720783887060 0 13701720783887060 0 13711720783887060 0 13721720783887060 0 13731720783887060 0 13741720783887060 0 13751720783887060 0 13761720783887060 0 13771720783887060 0 13781720783887060 0 13791720783887060 0 13801720783887060 0 13811720783887060 0 13821720783887060 0 13831720783887060 0 13841720783887060 0 13851720783887060 0 13861720783887060 0 13871720783887060 0 13881720783887060 0 13891720783887060 0 13901720783887060 0 13911720783887060 0 13921720783887060 0 13931720783887060 0 13941720783887060 0 13951720783887060 0 13961720783887060 0 13971720783887060 0 13981720783887060 0 13991720783887060 0 14001720783887060 0 14011720783887060 0 14021720783887060 0 14031720783887060 0 14041720783887060 0 14051720783887060 0 14061720783887060 0 14071720783887060 0 14081720783887060 0 14091720783887060 0 14101720783887060 0 14111720783887060 0 14121720783887060 0 14131720783887060 0 14141720783887060 0 14151720783887060 0 14161720783887060 0 14171720783887060 0 14181720783887060 0 14191720783887060 0 14201720783887060 0 14211720783887060 0 14221720783887060 0 14231720783887060 0 14241720783887060 0 14251720783887060 0 14261720783887060 0 14271720783887060 0 14281720783887060 0 14291720783887060 0 14301720783887060 0 14311720783887060 0 14321720783887060 0 14331720783887060 0 14341720783887060 0 14351720783887060 0 14361720783887060 0 14371720783887060 0 14381720783887060 0 14391720783887060 0 14401720783887060 0 14411720783887060 0 14421720783887060 0 14431720783887060 0 14441720783887060 0 14451720783887060 0 14461720783887060 0 14471720783887060 0 14481720783887060 0 14491720783887060 0 14501720783887060 0 14511720783887060 0 14521720783887060 0 14531720783887060 0 14541720783887060 0 14551720783887060 0 14561720783887060 0 14571720783887060 0 14581720783887060 0 14591720783887060 0 14601720783887060 0 14611720783887060 0 14621720783887060 0 14631720783887060 0 14641720783887060 0 14651720783887060 0 14661720783887060 0 14671720783887060 0 14681720783887060 0 14691720783887060 0 14701720783887060 0 14711720783887060 0 14721720783887060 0 14731720783887060 0 14741720783887060 0 14751720783887060 0 14761720783887060 0 14771720783887060 0 14781720783887060 0 14791720783887060 0 14801720783887060 0 14811720783887060 0 14821720783887060 0 14831720783887060 0 14841720783887060 0 14851720783887060 0 14861720783887060 0 14871720783887060 0 14881720783887060 0 14891720783887060 0 14901720783887060 0 14911720783887060 0 14921720783887060 0 14931720783887060 0 14941720783887060 0 14951720783887060 0 14961720783887060 0 14971720783887060 0 14981720783887060 0 14991720783887060 0 15001720783887060 0 15011720783887060 0 15021720783887060 0 15031720783887060 0 15041720783887060 0 15051720783887060 0 15061720783887060 0 15071720783887060 0 15081720783887060 0 15091720783887060 0 15101720783887060 0 15111720783887060 0 15121720783887060 0 15131720783887060 0 15141720783887060 0 15151720783887060 0 15161720783887060 0 15171720783887060 0 15181720783887060 0 15191720783887060 0 15201720783887060 0 15211720783887060 0 15221720783887060 0 15231720783887060 0 15241720783887060 0 15251720783887060 0 15261720783887060 0 15271720783887060 0 15281720783887060 0 15291720783887060 0 15301720783887060 0 15311720783887060 0 15321720783887060 0 15331720783887060 0 15341720783887060 0 15351720783887060 0 15361720783887060 0 15371720783887060 0 15381720783887060 0 15391720783887060 0 15401720783887060 0 15411720783887060 0 15421720783887060 0 15431720783887060 0 15441720783887060 0 15451720783887060 0 15461720783887060 0 15471720783887060 0 15481720783887060 0 15491720783887060 0 15501720783887060 0 15511720783887060 0 15521720783887060 0 15531720783887060 0 15541720783887060 0 15551720783887060 0 15561720783887060 0 15571720783887060 0 15581720783887060 0 15591720783887060 0 15601720783887060 0 15611720783887060 0 15621720783887060 0 15631720783887060 0 15641720783887060 0 15651720783887060 0 15661720783887060 0 15671720783887060 0 15681720783887060 0 15691720783887060 0 15701720783887060 0 15711720783887060 0 15721720783887060 0 15731720783887060 0 15741720783887060 0 15751720783887060 0 15761720783887060 0 15771720783887060 0 15781720783887060 0 15791720783887060 0 15801720783887060 0 15811720783887060 0 15821720783887060 0 15831720783887060 0 15841720783887060 0 15851720783887060 0 15861720783887060 0 15871720783887060 0 15881720783887060 0 15891720783887060 0 15901720783887060 0 15911720783887060 0 15921720783887060 0 15931720783887060 0 15941720783887060 0 15951720783887060 0 15961720783887060 0 15971720783887060 0 15981720783887060 0 15991720783887060 0 16001720783887060 0 16011720783887060 0 16021720783887060 0 16031720783887060 0 16041720783887060 0 16051720783887060 0 16061720783887060 0 16071720783887060 0 16081720783887060 0 16091720783887060 0 16101720783887060 0 16111720783887060 0 16121720783887060 0 16131720783887060 0 16141720783887060 0 16151720783887060 0 16161720783887060 0 16171720783887060 0 16181720783887060 0 16191720783887060 0 16201720783887060 0 16211720783887060 0 16221720783887060 0 16231720783887060 0 16241720783887060 0 16251720783887060 0 16261720783887060 0 16271720783887060 0 16281720783887060 0 16291720783887060 0 16301720783887060 0 16311720783887060 0 16321720783887060 0 16331720783887060 0 16341720783887060 0 16351720783887060 0 16361720783887060 0 16371720783887060 0 16381720783887060 0 16391720783887060 0 16401720783887060 0 16411720783887060 0 16421720783887060 0 16431720783887060 0 16441720783887060 0 16451720783887060 0 16461720783887060 0 16471720783887060 0 16481720783887060 0 16491720783887060 0 16501720783887060 0 16511720783887060 0 16521720783887060 0 16531720783887060 0 16541720783887060 0 16551720783887060 0 16561720783887060 0 16571720783887060 0 16581720783887060 0 16591720783887060 0 16601720783887060 0 16611720783887060 0 16621720783887060 0 16631720783887060 0 16641720783887060 0 16651720783887060 0 16661720783887060 0 16671720783887060 0 16681720783887060 0 16691720783887060 0 16701720783887060 0 16711720783887060 0 16721720783887060 0 16731720783887060 0 16741720783887060 0 16751720783887060 0 16761720783887060 0 16771720783887060 0 16781720783887060 0 16791720783887060 0 16801720783887060 0 16811720783887060 0 16821720783887060 0 16831720783887060 0 16841720783887060 0 16851720783887060 0 16861720783887060 0 16871720783887060 0 16881720783887060 0 16891720783887060 0 16901720783887060 0 16911720783887060 0 16921720783887060 0 16931720783887060 0 16941720783887060 0 16951720783887060 0 16961720783887060 0 16971720783887060 0 16981720783887060 0 16991720783887060 0 17001720783887060 0 17011720783887060 0 17021720783887060 0 17031720783887060 0 17041720783887060 0 17051720783887060 0 17061720783887060 0 17071720783887060 0 17081720783887060 0 17091720783887060 0 17101720783887060 0 17111720783887060 0 17121720783887060 0 17131720783887060 0 17141720783887060 0 17151720783887060 0 17161720783887060 0 17171720783887060 0 17181720783887060 0 17191720783887060 0 17201720783887060 0 17211720783887060 0 17221720783887060 0 17231720783887060 0 17241720783887060 0 17251720783887060 0 17261720783887060 0 17271720783887060 0 17281720783887060 0 17291720783887060 0 17301720783887060 0 17311720783887060 0 17321720783887060 0 17331720783887060 0 17341720783887060 0 17351720783887060 0 17361720783887060 0 17371720783887060 0 17381720783887060 0 17391720783887060 0 17401720783887060 0 17411720783887060 0 17421720783887060 0 17431720783887060 0 17441720783887060 0 17451720783887060 0 17461720783887060 0 17471720783887060 0 17481720783887060 0 17491720783887060 0 17501720783887060 0 17511720783887060 0 17521720783887060 0 17531720783887060 0 17541720783887060 0 17551720783887060 0 17561720783887060 0 17571720783887060 0 17581720783887060 0 17591720783887060 0 17601720783887060 0 17611720783887060 0 17621720783887060 0 17631720783887060 0 17641720783887060 0 17651720783887060 0 17661720783887060 0 17671720783887060 0 17681720783887060 0 17691720783887060 0 17701720783887060 0 17711720783887060 0 17721720783887060 0 17731720783887060 0 17741720783887060 0 17751720783887060 0 17761720783887060 0 17771720783887060 0 17781720783887060 0 17791720783887060 0 17801720783887060 0 17811720783887060 0 17821720783887060 0 17831720783887060 0 17841720783887060 0 17851720783887060 0 17861720783887060 0 17871720783887060 0 17881720783887060 0 17891720783887060 0 17901720783887060 0 17911720783887060 0 17921720783887060 0 17931720783887060 0 17941720783887060 0 17951720783887060 0 17961720783887060 0 17971720783887060 0 17981720783887060 0 17991720783887060 0 18001720783887060 0 18011720783887060 0 18021720783887060 0 18031720783887060 0 18041720783887060 0 18051720783887060 0 18061720783887060 0 18071720783887060 0 18081720783887060 0 18091720783887060 0 18101720783887060 0 18111720783887060 0 18121720783887060 0 18131720783887060 0 18141720783887060 0 18151720783887060 0 18161720783887060 0 18171720783887060 0 18181720783887060 0 18191720783887060 0 18201720783887060 0 18211720783887060 0 18221720783887060 0 18231720783887060 0 18241720783887060 0 18251720783887060 0 18261720783887060 0 18271720783887060 0 18281720783887060 0 18291720783887060 0 18301720783887060 0 18311720783887060 0 18321720783887060 0 18331720783887060 0 18341720783887060 0 18351720783887060 0 18361720783887060 0 18371720783887060 0 18381720783887060 0 18391720783887060 0 18401720783887060 0 18411720783887060 0 18421720783887060 0 18431720783887060 0 18441720783887060 0 18451720783887060 0 18461720783887060 0 18471720783887060 0 18481720783887060 0 18491720783887060 0 18501720783887060 0 18511720783887060 0 18521720783887060 0 18531720783887060 0 18541720783887060 0 18551720783887060 0 18561720783887060 0 18571720783887060 0 18581720783887060 0 18591720783887060 0 18601720783887060 0 18611720783887060 0 18621720783887060 0 18631720783887060 0 18641720783887060 0 18651720783887060 0 18661720783887060 0 18671720783887060 0 18681720783887060 0 18691720783887060 0 18701720783887060 0 18711720783887060 0 18721720783887060 0 18731720783887060 0 18741720783887060 0 18751720783887060 0 18761720783887060 0 18771720783887060 0 18781720783887060 0 18791720783887060 0 18801720783887060 0 18811720783887060 0 18821720783887060 0 18831720783887060 0 18841720783887060 0 18851720783887060 0 18861720783887060 0 18871720783887060 0 18881720783887060 0 18891720783887060 0 18901720783887060 0 18911720783887060 0 18921720783887060 0 18931720783887060 0 18941720783887060 0 18951720783887060 0 18961720783887060 0 18971720783887060 0 18981720783887060 0 18991720783887060 0 19001720783887060 0 19011720783887060 0 19021720783887060 0 19031720783887060 0 19041720783887060 0 19051720783887060 0 19061720783887060 0 19071720783887060 0 19081720783887060 0 19091720783887060 0 19101720783887060 0 19111720783887060 0 19121720783887060 0 19131720783887060 0 19141720783887060 0 19151720783887060 0 19161720783887060 0 19171720783887060 0 19181720783887060 0 19191720783887060 0 19201720783887060 0 19211720783887060 0 19221720783887060 0 19231720783887060 0 19241720783887060 0 19251720783887060 0 19261720783887060 0 19271720783887060 0 19281720783887060 0 19291720783887060 0 19301720783887060 0 19311720783887060 0 19321720783887060 0 19331720783887060 0 19341720783887060 0 19351720783887060 0 19361720783887060 0 19371720783887060 0 19381720783887060 0 19391720783887060 0 19401720783887060 0 19411720783887060 0 19421720783887060 0 19431720783887060 0 19441720783887060 0 19451720783887060 0 19461720783887060 0 19471720783887060 0 19481720783887060 0 19491720783887060 0 19501720783887060 0 19511720783887060 0 19521720783887060 0 19531720783887060 0 19541720783887060 0 19551720783887060 0 19561720783887060 0 19571720783887060 0 19581720783887060 0 19591720783887060 0 19601720783887060 0 19611720783887060 0 19621720783887060 0 19631720783887060 0 19641720783887060 0 19651720783887060 0 19661720783887060 0 19671720783887060 0 19681720783887060 0 19691720783887060 0 19701720783887060 0 19711720783887060 0 19721720783887060 0 19731720783887060 0 19741720783887060 0 19751720783887060 0 19761720783887060 0 19771720783887060 0 19781720783887060 0 19791720783887060 0 19801720783887060 0 19811720783887060 0 19821720783887060 0 19831720783887060 0 19841720783887060 0 19851720783887060 0 19861720783887060 0 19871720783887060 0 19881720783887060 0 19891720783887060 0 19901720783887060 0 19911720783887060 0 19921720783887060 0 19931720783887060 0 19941720783887060 0 19951720783887060 0 19961720783887060 0 19971720783887060 0 19981720783887060 0 1999