From 7aa2846f1068fbdb895c41260d535cd2bc60909b Mon Sep 17 00:00:00 2001 From: nixorokish Date: Wed, 17 Sep 2025 14:42:51 -0600 Subject: [PATCH 1/8] rearranged page to fit upcoming blog post structure, added non-core EIPs, restructured links a little --- public/content/roadmap/fusaka/index.md | 110 +++++++++++++++++-------- 1 file changed, 75 insertions(+), 35 deletions(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 196b3855b0b..3f265a60366 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -16,26 +16,23 @@ The Fusaka upgrade is only a single step in Ethereum's long-term development goa ## Improvements in Fusaka {#improvements-in-fusaka} -### Data availability & L2 scaling {#data-availability-and-l2-scaling} +### Scale blobs {#scale-blobs} #### PeerDAS {#peerdas} -Specification: https://eips.ethereum.org/EIPS/eip-7594 - -Resources: https://youtu.be/bONWd1x2TjQ?t=328 (dapplion on PeerDAS) - This is the _headliner_ of the Fusaka fork, the main feature added in this upgrade. Layer 2s currently post their data to Ethereum in blobs, the ephemeral data type created specifically for layer 2s. Pre-Fusaka, every full node has to store every blob to ensure that the data exists. As blob throughput rises, having to download all of this data becomes untenably resource-intensive. With [data availability sampling](https://notes.ethereum.org/@fradamt/das-fork-choice) , instead of having to store all of the blob data, each node will be responsible for a subset of the blob data. Blobs are uniformly randomly distributed across nodes in the network with each full node holding only 1/8th of the data, therefore enabling theoretical scale up to 8x. To ensure availability of the data, any portion of the data can be reconstructed from any existing 50% of the whole with methods that drive down the probability of wrong or missing data to a cryptographically negligible level (~one in 10²⁰ to one in 10²⁴). This keeps hardware and bandwidth requirements for nodes tenable while enabling blob scaling resulting in more scale with smaller fees for layer 2s. -In-depth: https://eprint.iacr.org/2024/1362.pdf +**Resources**: +- [EIP-7594 technical specification](https://eips.ethereum.org/EIPS/eip-7594) +- [dapplion on PeerDAS](https://youtu.be/bONWd1x2TjQ?t=328) +- [Academic: A Documentation of Ethereum’s PeerDAS](https://eprint.iacr.org/2024/1362.pdf) #### Blob parameter only forks {#blob-parameter-only-forks} -Specification: https://eips.ethereum.org/EIPS/eip-7892 - Layer 2s scale Ethereum - as their networks grow, they need to post more data to Ethereum. This means that Ethereum will need to increase the number of blobs available to them as time goes on. Although PeerDAS enables scaling blob data, it needs to be done gradually and safely. Because Ethereum is code running on thousands of independent nodes that require agreement on same rules, we cannot simply introduces changes like increasing blob count the way you deploy a website update. Any rule change must be a coordinated upgrade where every node, client and validator software upgrades before the same predetermined block. @@ -44,11 +41,14 @@ These coordinated upgrades generally include a lot of changes, require a lot of Blob parameter only forks can be set by clients, similarly to other configuration like gas limit. Between major Ethereum upgrades, clients can agree to increase the `target` and `max` blobs to e.g. 9 and 12 and then node operators will update to take part in that tiny fork. These blob parameter only forks can be configured at any time. -#### Blob base-fee bounded by execution costs {#blob-base-fee-bounded-by-execution-costs} +When blobs were first added to the network in the Dencun upgrade, the target was 3 - that was increased to 6 in Pectra and, after Fusaka, that can now be increased at a sustainable rate independently of these major network upgrades. -Specification: https://eips.ethereum.org/EIPS/eip-7918 +[ IMAGE HERE, ETH.ORG TEAM PLEASE HELP ATTACH: https://drive.google.com/file/d/1U24kK-XbZ_l6UWwDO_2-0Mxn4kSkEwVe/view?usp=sharing ] +Graph source: https://dune.com/hildobby/blobs -Storybook explainer: https://notes.ethereum.org/@anderselowsson/AIG +**Resources**: [Technical specification](https://eips.ethereum.org/EIPS/eip-7892) + +#### Blob base-fee bounded by execution costs {#blob-base-fee-bounded-by-execution-costs} Layer 2s pay two bills when they post data: the blob fee and the execution gas needed to verify those blobs. If execution gas dominates, the blob fee auction can spiral down to 1 wei and stop being a price signal. @@ -58,31 +58,42 @@ EIP-7918 pins a proportional reserve price under every blob. When the reserve is - layer 2s pay at least a meaningful slice of the compute they force on nodes - base-fee spikes on the EL can no longer strand the blob fee at 1 wei -### Gas limits, fees & DoS hardening {#gas-limits-fees-and-dos-hardening} +**Resources**: +- [EIP-7918 technical specification](https://eips.ethereum.org/EIPS/eip-7918) +- [Storybook explainer](https://notes.ethereum.org/@anderselowsson/AIG) -#### Set upper bounds for MODEXP {#set-upper-bounds-for-modexp} -Specification: https://eips.ethereum.org/EIPS/eip-7823 +### Scale L1 {#scale-l1} + +#### eth/69 - history expiry and simpler receipts {eth-69} + +In July 2025, Ethereum execution clients [began to support partial history expiry](https://blog.ethereum.org/2025/07/08/partial-history-exp). This dropped history older than [the Merge](https://ethereum.org/roadmap/merge/) in order to reduce the disk space required by node operators as Ethereum continues to grow. + +This EIP is in a section apart from the "Core EIPs" because the fork doesn't actually implement any changes - it's a notice that client teams must support history expiry by the Fusaka upgrade. Practically, clients can implement this any time but adding it to the upgrade concretely put it on their to-do list and enabled them to test Fusaka changes in conjunction with this feature. + +**Resources**: [EIP-7642 technical specification](https://eips.ethereum.org/EIPS/eip-7642) + +#### Set upper bounds for MODEXP {#set-upper-bounds-for-modexp} Until now, the MODEXP precompile accepted numbers of virtually any size. That made it hard to test, easy to abuse, and risky for client stability. EIP-7823 puts a clear limit in place: each input number can be at most 8192 bits (1024 bytes) long. Anything bigger is rejected, the transaction’s gas is burned, and no state changes occur. It very comfortably covers real-world needs while removing the extreme cases that complicated gas limit planning and security reviews. This change provides more security and DoS protection without affecting user or developer experience. -#### Transaction Gas Limit Cap {#transaction-gas-limit-cap} +**Resources**: [EIP-7823 technical specification](https://eips.ethereum.org/EIPS/eip-7823) -Specification: https://eips.ethereum.org/EIPS/eip-7825 +#### Transaction Gas Limit Cap {#transaction-gas-limit-cap} EIP-[7825](https://eips.ethereum.org/EIPS/eip-7825) adds a cap of 16,777,216 (2^24) gas per transaction. It’s proactive DoS hardening by bounding the worst-case cost of any single transaction as we raise the block gas limit. It makes validation and propagation easier to model to allow us to tackle scaling via raising the gas limit. Why exactly 2^24 gas? It’s comfortably smaller than today’s gas limit, is large enough for real contract deployments & heavy precompiles, and a power of 2 makes it easy to implement across clients. This new maximum transaction size is a similar to pre-Pectra average block size, making it a reasonable limit for any operation on Ethereum. -#### MODEXP Gas Cost Increase {#modexp-gas-cost-increase} +**Resources**: [EIP-7825 technical specification](https://eips.ethereum.org/EIPS/eip-7825) -Specification: https://eips.ethereum.org/EIPS/eip-7883 +#### MODEXP Gas Cost Increase {#modexp-gas-cost-increase} MODEXP is a precompile built‑in function that calculates modular exponentiation, a type of large‑number math used in RSA signature verification and proof systems. It allows contracts to run these calculations directly without having to implement them themselves. Devs and client teams identified MODEXP as a major obstacle to increasing the block gas limit because the current gas pricing often underestimates how much computing power certain inputs require. This means one transaction using MODEXP could take up most of the time needed to process an entire block, slowing down the network. -EIP‑7883 changes the pricing to match real computational costs by: +This EIP changes the pricing to match real computational costs by: - raising the minimum charge from 200 to 500 gas and removing the one‑third discount from EIP-2565 on the general cost calculation - increasing the cost more sharply when the exponent input is very long. if the exponent (the “power” number you pass as the second argument) is longer than 32 bytes / 256 bits, the gas charge climbs much faster for each extra byte @@ -90,15 +101,28 @@ EIP‑7883 changes the pricing to match real computational costs by: By better matching costs to actual processing time, MODEXP can no longer cause a block to take too long to validate. This change is one of several aimed at making it safe to increase Ethereum’s block gas limit in the future. +**Resources**: [EIP-7883 technical specification](https://eips.ethereum.org/EIPS/eip-7883) + #### RLP Execution Block Size Limit {#rlp-execution-block-size-limit} -Specification: https://eips.ethereum.org/EIPS/eip-7934 +This creates a ceiling on how big a block is allowed to be - this is a limit on what's *sent* over the network and is separate from the gas limit, which limits the *work* inside a block. The block size cap is 10 MiB, with a small allowance (2 MiB) reserved for consensus data so that everything fits and propagates cleanly. If a block shows up bigger than that, the clients reject it. +This is needed because very large blocks take longer to spread and verify across the network and can create consensus issues or be abused as a DoS vector. Also, the consensus layer’s gossip already won’t forward blocks over ~10 MiB, so aligning the execution layer to that limit avoids weird “seen by some, dropped by others” situations. -Ethereum adds a hard cap on the [RLP](/developers/docs/data-structures-and-encoding/rlp/)-encoded execution block size: 10 MiB total, with a 2 MiB safety margin reserved for beacon-block framing. Practically, clients define `MAX_BLOCK_SIZE = 10,485,760` bytes and `SAFETY_MARGIN = 2,097,152` bytes, and reject any execution block whose RLP payload exceeds `MAX_RLP_BLOCK_SIZE = MAX_BLOCK_SIZE − SAFETY_MARGIN`. The goal is to bound worst-case propagation/validation time and align with CL gossip behavior (blocks over ~10 MiB aren’t propagated), reducing reorg/DoS risk without changing gas accounting. +The nitty-gritty: this is a cap on the [RLP](/developers/docs/data-structures-and-encoding/rlp/)-encoded execution block size. 10 MiB total, with a 2 MiB safety margin reserved for beacon-block framing. Practically, clients define -#### Set default gas limit to XX million {#set-default-gas-limit-to-xx-million} +`MAX_BLOCK_SIZE = 10,485,760` bytes and + +`SAFETY_MARGIN = 2,097,152` bytes, + +and reject any execution block whose RLP payload exceeds + +`MAX_RLP_BLOCK_SIZE = MAX_BLOCK_SIZE − SAFETY_MARGIN` + +The goal is to bound worst-case propagation/validation time and align with CL gossip behavior, reducing reorg/DoS risk without changing gas accounting. -Specification: https://eips.ethereum.org/EIPS/eip-7935 +**Resources**: [EIP-7934 technical specification](https://eips.ethereum.org/EIPS/eip-7934) + +#### Set default gas limit to XX million {#set-default-gas-limit-to-xx-million} Prior to raising the gas limit from 30M to 36M in February 2025 (and subsequently to 45M), this value hadn’t changed since the Merge (September 2022). This EIP aims to make consistent scaling a priority. @@ -106,27 +130,25 @@ EIP-7935 coordinates EL client teams to raise the default gas-limit above today Devnet planning targets ~60M stress (full blocks with synthetic load) and iterative bumps; research says worst-case block-size pathologies shouldn’t bind below ~150M. Rollout should be paired with the transaction gas-limit cap (EIP-7825) so no single transaction can dominate as limits rise. -### Preconfirmation support {#preconfirmation-support} +**Resources**: [EIP-7935 technical specification](https://eips.ethereum.org/EIPS/eip-7935) -#### Deterministic proposer lookahead {#deterministic-proposer-lookahead} +### Improve UX {#improve-ux} -Specification: https://eips.ethereum.org/EIPS/eip-7917 +#### Deterministic proposer lookahead {#deterministic-proposer-lookahead} With EIP-7917, Beacon Chain will become aware of upcoming block proposers for the next epoch. Having a deterministic view on which validators will be proposing future blocks can enable [preconfirmations](https://ethresear.ch/t/based-preconfirmations/17353) - a commitment with the upcoming proposer that guarantees the user transaction will be included in their block without waiting for the actual block. This feature benefits client implementations and security of the network as it prevents edge cases where validators could manipulate the proposer schedule. The lookahead also allows for less complexity of the implementation. -### Opcodes & precompiles (developer goodies) {#opcodes-and-precomliles} +**Resources**: [EIP-7917 technical specification](https://eips.ethereum.org/EIPS/eip-7917) #### Count leading zeros (CLZ) opcode {#count-leading-zeros-opcode} -Specification: https://eips.ethereum.org/EIPS/eip-7939 +This feature adds a small EVM instruction, CLZ (“count leading zeros”). Most everything in the EVM is represented as a 256-bit value - this new opcode returns how many zero bits are at the front. This is a common feature in many instruction set architectures as it enables more efficient arithmetic operations. In practice this collapses today’s hand-rolled bit scans into one step, so finding the first set bit, scanning bytes, or parsing bitfields becomes simpler and cheaper. The opcode is low, fixed-cost and has been benchmarked to be on par with a basic add, which trims bytecode and saves gas for the same work. -EIP-7939 adds a small EVM instruction, CLZ (“count leading zeros”). Given a 256-bit value, it returns how many zero bits are at the front — and returns 256 if the value is entirely zero. This is a common feature in many instruction set architectures as it enables more efficient arithmetic operations. In practice this collapses today’s hand-rolled bit scans into one step, so finding the first set bit, scanning bytes, or parsing bitfields becomes simpler and cheaper. The opcode is low, fixed-cost and has been benchmarked to be on par with a basic add, which trims bytecode and saves gas for the same work. +**Resources**: [EIP-7939 technical specification](https://eips.ethereum.org/EIPS/eip-7939) -### Precompile for secp256r1 Curve Support {#secp256r1-precompile} - -Specification: https://eips.ethereum.org/EIPS/eip-7951 +#### Precompile for secp256r1 Curve Support {#secp256r1-precompile} Introduces a built-in, passkey-style secp256r1 (P-256) signature checker at the fixed address `0x100` using the same call format already adopted by many L2s and fixing edge cases, so contracts written for those environments work on L1 without changes. @@ -134,13 +156,31 @@ UX upgrade! For users, this unlocks device-native signing and passkeys. Wallets For developers, it takes a 160-byte input and returns a 32-byte output, making it easy to port existing libraries and L2 contracts. Under the hood, it includes point-at-infinity and modular-comparison checks to eliminate tricky edge cases without breaking valid callers. -[More about RIP-7212](https://www.alchemy.com/blog/what-is-rip-7212) _(Note that EIP-7951 superseded RIP-7212)_ +**Resources**: +- [EIP-7951 technical specification](https://eips.ethereum.org/EIPS/eip-7951) +- [More about RIP-7212](https://www.alchemy.com/blog/what-is-rip-7212) _(Note that EIP-7951 superseded RIP-7212)_ + +### Meta {#meta} + +#### `eth_config` JSON-RPC Method {#eth-config} + +This is a JSON-RPC call that allows you to ask your node what fork settings you're running. It returns three snapshots: `current`, `next`, & `last` so that validators and monitoring tools can verify that clients are lined up for an upcoming fork. + +Practically speaking, this is to address a shortcoming discovered when the Pectra fork went live on the Holešky testnet in early 2025 with minor misconfigurations which resulted in a non-finalizing state. This helps testing teams and developers ensure that major forks will behave as expected when moving from devnets to testnets and from testnets to mainnet. + +Snapshots include: `chainId`, `forkId`, planned fork activation time, which precompiles are active, precompile addresses, system contract dependencies, and the fork's blob schedule. + +This EIP is in a section apart from the "Core EIPs" because the fork doesn't actually implement any changes - it's a notice that client teams must implement this JSON-RPC method by the Fusaka upgrade. + +**Resources**: [EIP-7910 technical specification](https://eips.ethereum.org/EIPS/eip-7910) + +## FAQ {#FAQ} -## Does this upgrade affect all Ethereum nodes and validators? {#does-this-upgrade-affect-all-ethereum-nodes-and-validators} +### Does this upgrade affect all Ethereum nodes and validators? {#does-this-upgrade-affect-all-ethereum-nodes-and-validators} Yes, the Fusaka upgrade requires updates to both [execution clients and consensus clients](/developers/docs/nodes-and-clients/). All main Ethereum clients will release versions supporting the hard fork marked as high priority. You can keep up with when these releases will be available in client Github repos, their [Discord channels](https://ethstaker.org/support), the [EthStaker Discord](https://dsc.gg/ethstaker), or by subscribing to the Ethereum blog for protocol updates. To maintain synchronization with the Ethereum network post-upgrade, node operators must ensure they are running a supported client version. Note that the information about client releases is time-sensitive, and users should refer to the latest updates for the most current details. -## How can ETH be converted after the hard fork? {#how-can-eth-be-converted-after-the-hardfork} +### How can ETH be converted after the hard fork? {#how-can-eth-be-converted-after-the-hardfork} - **No Action Required for Your ETH**: Following the Ethereum Fusaka upgrade, there is no need to convert or upgrade your ETH. Your account balances will remain the same, and the ETH you currently hold will remain accessible in its existing form after the hard fork. - **Beware of Scams!**  **anyone instructing you to "upgrade" your ETH is trying to scam you.** There is nothing you need to do in relation to this upgrade. Your assets will stay completely unaffected. Remember, staying informed is the best defense against scams. From e0f8bc1ba4845661ecacaf97cf78e3cb9e29901c Mon Sep 17 00:00:00 2001 From: nixorokish Date: Wed, 17 Sep 2025 14:50:18 -0600 Subject: [PATCH 2/8] add EIP number --- public/content/roadmap/fusaka/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 3f265a60366..15217426f31 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -46,7 +46,7 @@ When blobs were first added to the network in the Dencun upgrade, the target was [ IMAGE HERE, ETH.ORG TEAM PLEASE HELP ATTACH: https://drive.google.com/file/d/1U24kK-XbZ_l6UWwDO_2-0Mxn4kSkEwVe/view?usp=sharing ] Graph source: https://dune.com/hildobby/blobs -**Resources**: [Technical specification](https://eips.ethereum.org/EIPS/eip-7892) +**Resources**: [EIP-7892 technical specification](https://eips.ethereum.org/EIPS/eip-7892) #### Blob base-fee bounded by execution costs {#blob-base-fee-bounded-by-execution-costs} From 427e3e75059d0eb115b1cc08316b10f1c5113629 Mon Sep 17 00:00:00 2001 From: nixorokish Date: Wed, 17 Sep 2025 15:04:56 -0600 Subject: [PATCH 3/8] add peerdas subpage link, currently an open pr --- public/content/roadmap/fusaka/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 15217426f31..a22abf40cde 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -18,7 +18,7 @@ The Fusaka upgrade is only a single step in Ethereum's long-term development goa ### Scale blobs {#scale-blobs} -#### PeerDAS {#peerdas} +#### [PeerDAS](https://ethereum.org/en/roadmap/fusaka/peerdas) {#peerdas} This is the _headliner_ of the Fusaka fork, the main feature added in this upgrade. Layer 2s currently post their data to Ethereum in blobs, the ephemeral data type created specifically for layer 2s. Pre-Fusaka, every full node has to store every blob to ensure that the data exists. As blob throughput rises, having to download all of this data becomes untenably resource-intensive. @@ -28,6 +28,7 @@ This keeps hardware and bandwidth requirements for nodes tenable while enabling **Resources**: - [EIP-7594 technical specification](https://eips.ethereum.org/EIPS/eip-7594) +- [Main PeerDAS explainer page](https://ethereum.org/en/roadmap/fusaka/peerdas) - [dapplion on PeerDAS](https://youtu.be/bONWd1x2TjQ?t=328) - [Academic: A Documentation of Ethereum’s PeerDAS](https://eprint.iacr.org/2024/1362.pdf) From 35a5395b132697bf0059d2fb853872d31203d435 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:15:25 -0700 Subject: [PATCH 4/8] chore: import diagram image --- .../fusaka/average-blob-count-per-block.webp | Bin 0 -> 37092 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/content/roadmap/fusaka/average-blob-count-per-block.webp diff --git a/public/content/roadmap/fusaka/average-blob-count-per-block.webp b/public/content/roadmap/fusaka/average-blob-count-per-block.webp new file mode 100644 index 0000000000000000000000000000000000000000..11709f65ecb8a00d5195955340021aec1174349b GIT binary patch literal 37092 zcmd41V~}j!vNhbcz1y~J+qP}*wr$(m?e5*SZQHi({`T{nd+t5&RlE`3pSPkaR@Gcl zbLGrAM&`&|OHo2pbR!M`KuttYUR9o59SQ&d0OHSw4-DWC7~szczWSfDHDSQnfRy}T zN5H&|>P2!T#D(Pq^*?s`(ZVfk?_7BG-dZ1lmO6b2jdT-MT8-E!icU{&o^b_m*gi@S z6DK^k>A7g$G&Vqw_@=~W&0asBWPSKdr9-AEzGJ`U-(4xy*<)Y2ANdyEK|CWLw_m>xzh}PhzSXXLZ@Ztn$2>}2x1VF* z^$vUhd^3G@zjMEUSFc}v@b%ok!{2>xAV01@n!n}lwokjT`P#k@zq-HBua?_<=Y3av zZ@-Oh$Uec}zdx_K8-t9RiGmUV>5mPgp%_4&dlHmEH`@CL6<0r|IQNG^qKj-2=Qi zM-4%pCXi2;q!6fb^mAqF)cv*ZLEe5Q3_u;Hk@@5;?0<|7NKAe;M^=DbP zcRuQoU5iHf_Se_*y84+^Pikhx^qR%3T(ee5rL5kBdfXsX9$CNr0DywYv7wlR3(E82 z-fuuGNDA?zvNzwA`FfO#wN%B8A@Pm2J`^NO?!p9nlQB0ii2>RLb78vRe6qRb8B0pC zy=$m9s&OZP8vTo9TG;GW=CKR1MCdUznTBfuTOjUH|Ytu%1I3O<2hT8Iqtvl$Jt zd~CX6%}=~R$7(QI?BISSm^o}(vWm>r>B#^JRMgBjnjLqOTMhg*-9(q+aCjTqK}fm8 znnj#By*s>>J2>>}Q$PM?4F1GhdbPIL633bd3hj@3kVDkk>23#0YHy6gp_ud{JWs#t zZ&2tnpqKQ5j{jm!Om9{F-CQF?Zoq@5agf@sCl)k86x&+kba8L3@LgUyk~^cbTFO7| zS4VvkDwMgore@L0`I^M%0_foDP2?aBt77HsLp#zyt~_eeSUmhs%jOyzr$LtJBmfh) zSpp#9hq2PPy-ru2@_uYBtzo7-bsBnfAIxfls>KYjg4UHbdqeCK#b;#pA|A0TFH zNTZ!mh>rqc+?}9-jlkar?P%|0HHuYTSTh7Z!p<0!rf@A%j?R%q4dmbdbSuFC@r*mmzYlwVBQsZRLy?RLf({?#+M5Z0FP3o}!vU&eD zg>D1&Bc44Ej6&(nYBp^7Oqz2h@nqF&<62VBO2Bts!o(qc^vs3mc$J&LzwY}az%jga zeZ~KPk;4lk7J4wkq}P{oE;BW6MVV8CloEC>`ll=1gv*ql?zZ|+9Th%ZEz1^9A#e3Z zNVweflV`u5%`zADuBO?_yEk*}RD9dHx5~d=+&fjiF77>O-HA+!-yBT;l~~Z3jFZBD z!?UyNlfy58oap?cYi%}~SFFcGATg*>S4?sJ9H`&G-+n|21-L*Dd?M5yBrDnEk&{Wb%KfkyiVEA{JRSIOYFJzFchn|C5eAzc)Mn z;^TjZioYm(c*8334|Vt|UV<|_?_e|5+INpwK9f38$TgX(Xv$$1&Q{Wt#V z)TyHN#t8f?Lb&D=q~Gzf|C<>S5B377MeTol{y(hfHR?BJs%&J2oU16^aLARvy^fSvzBRtn+ zwzjZ=A+2rc{)~urDE;}dy>@n&EmGL3mG2#00qUQkrL4Fenv%UBHyLa#JNDZD@8;Y_(^i=G;n~wJ>cx0=z@kTR+ zYi(k1BgnSr1ZcjgZ-x%dlrb3hSJCf>lH&sN>OSi zHPd0zg$J$oCS&)i{S{XoUl7elZS{c}ZI+|HSb9oBPAv^ulkH`9B-p8zyHAmDdC~4_ z@n@QZ9YULT7vL&_C65;b_93T~yBvtuwK~r3{!Y>LMVqTfk8;u*xSQkXGTiMwV^Bsx z>W{PYs1~qx1Gpt3AuYG&eUaX=nLX7bp);A`i9tj#X>+e1!rUfQhq$z$8BQN(tTt5C zf6d3?n38I(U>N=O3$~ldJUak00^y^Gw5KlV#K?Y$JDpY*0}Hgl|Jt(pRYH(-rhsn< z0TSr8HG8=i8dZD`olrD)bCU)6lii+kLaUj15G_jUKc|mI1~?rB4KryWp$Qfj4rG3m zac6LgfNsc1oYYhMLEPmi3++reH!=r%nCo21!zEOgYp2Q3b?^r=22;p($k!5QR`MAT z!t_(@s6O46e`pjf4|cyymK%jv7{~(%(tZ8Kt}#7af=&%7!&F1{tPEcy1NLVoN5c1X zdEW_yvz!6*eUFOIKQ2>yuOBY@CGn~el#QE|Cd+?ndv%Jba?K2Q61a++QlH|O*x!i6 zmD)}(1pnBXOfDZRYWLzfKnmQxvq-TD`827V zND3OKkqhl_rPUIsRk@h1}f$q;|r#@V3vv}ptW z{?BCT_~Zcz79I*J1T$`5%ldv_s{7Gq8=p2Jz?xc62Ex)k4}~amdq+>@ZuNI&$2r79 zO&B5WHRCUlW~Ae5qThuY&RO~(0qsGHAG8_iNxU;>+kva8j$Tf~d$N>w^a6nRL8{B>4Sj-=Kz+s=@W^y0go55qFm?-R?q#cteg?Ko2 z4qg7DD-`4JYlaJ>f{wsfjz zY59=Ov##T+;6y`dP<1K?T^JGdyT`VnE!eB)O*|G&B_wxEc^ADRaBxfi4dXVPi6Jn}Q;oCAjtNpCV8}~E)^ntPwMdPN zyxkyn_%y$CbKfcr|1ko6HWA{_#C;1@Tm229W-HoNEkWBePtD)ok_`W$jnGqS;(Lj; z*Ru^YB&Aqyms^I+vVCGSeDw)4Jo8XgVsT0pEU1n#0&@PLYiuavQdWs3VQ_r7$rZxq zLw-aXmc@043G(5o(FQH1{Ir--V<$clckhEi+J8R%Q+*`ohy7h}{G}`?$LwB$v6Vmz zd00D9xzg$bySthh`bb$L7@9vHJZfAN)HRW@P5*QL)Fp`rjVB7^QX3Cf1^!^td!qXX@XEp8hAjrQ7MU& z$waDzHfo>4zi@j8YmFl)uB3x1428#}!ELsJkI$6$Ed2z--NqO~Hp8z6;hi-N>Sk@upM~d4+qqvA4Re_FF+kQ13jt+59 zt%AnP-3Dd|7GCX9+ZDZ+wP9Irij7-rd(a7#V*OTOp4z0feqb$+ zMFavHbECdE@VA1B-y3zAlBzL}ESNirH56GmfF=wy%-Rm4EGzPIt@3|aswluuWZHe6Y=QI%H`}o-!&DPO{cb}O)|KOFl(*bpx1va zhYHhk_TAbrt4GbLg4mK%WF-k$-f#Mlo2kYZQTd6tJT&>J95)EjS#(LM>V)?>POeV9 zyDl)m#I15gS~A}h;;O%V2ciR1ko=WfG~u*={aUA<(kRNXo*W8(nAMEqk!@$fJ15VJ zTZ^NJ1*4TG#Dlj9p)<*JX8{tJ@g0C7+eYTPD{Arr!+7vDbkXNh3YxFf*Vw1a^d>6{eQ@F2uHuDDj$ose zP%MmS)MgP54T@Nt8v^}>s8d~lsuj{c=gkqg^}7TmETvFWLt8=TCnvQqwg;kFfdA{t zby=1aA0Wig5Gav_wQuIp1X1+3x!Po!aLT955_3$#AqO+W-?a&TP78MFZ#d8pFWX-% ze|*2nf#+QG(}*vO@pB8h2Orn{27J=;{VtoNI*sA`m3RlTBJ2D z*-`#2i9Up5Pd?QS&aQ)6a`Q%l&(I-ug5{JLnsMHkN7S0v7;}ap&M*SDx$Joe$OD#_ z6fst`GuXSMBZ5S{Wq{`ph$bEUA&5A1rW%|*^LJ8FM}2Shhq{mzJI|k>$1LQnG7mHZ zU3A>iVZubcH;H9gj=k~XyqC9|vv>Q8A^Z4DA9x6XY+vxvsrNuy1VKc%kB%oY8fJgB zVaAgh+D$U(+nY7uxcrBgvChW;{f7Wbn;DTGDs26WW-Q%!S=H}#+`hpF-cr#nmyWG0 z8DcRiBnuamJG-p=_|Sk3zjbnvwQsWgogWKmoFaHih#P9WojSUe59-c}a1 z+B|l#JYy$%5fVrdxog}r&a0k&viq0!E- zAV+QdHc2trA03<&_8n-)J9@2$*f%z{s%~k@OOO}Cs&1QV0Lp=nPT>Xqv-?E5H@l=U zD-s#9fU1&zOZ~)cjIV@?+kHrD1ff9n>}P-JCO@U#+q&V5^Wm4j9qEd}%gUh2SVbAD zp!oD>_78RFxF5?O*8h}23763#?5c+sVgS4{+4+aY_EI3J9JG}&@uSc$t3f_|iT~GY z5`M3?V&I2Sr=rpmt9&Nv= z?tPO7_5rrgX2*wAYfFm0W;*Mo;CunFoB2swmtfUovC>lb*gp%=pB#ZX|6O1BO* zMI1V8pgNi$l=3M)#}t!r%*p`yM{7h*8%|kuac|~##!xIQQPJc~A+7=5pIt^V8pp%C zG5iDa+j=m&Kg0?0p$7f838RGEJYDG|T!sp=s2pE_|A0135EC<2Rm2$O#>={ocW<+8 z+>gn3=Ou_Bzx2^qRY2~q?Yg2_ubNs~Fv4Z{Yb9l#UjNTs z*ut19hGaR}m3@GFS^f0OE|WfnRn+tkZY?26Kpfi6E6@2Uc3xJEcK#@aK3+UHB=gIl z^r9V9A!#uaKCzXYylKAwKKnAgU)JBxTo7x;8N>5=WapE|az4|F9Q%I8Wu}4^# z06(=6$&kGUdb0=(jbcP_7jwmxp@rCm2Zphu8NGuh{2UdGdO(xHFjR}&ycPo~Wk!5K zAQNgx{|q6c$LsRgoOFX!3S82i7OZZ2L18?|FIpyj1dLv3HAR zTxpflL+DU^r!ECqd_%x?_C(3_C8+*4Cah${jde^>p)l_h0GU6dtEv1n(X9h>2jqe@ zK$?t&gs=!|j8zdwe5ek4w~08#FxKW4yHl=3SjRII%?qL(y#NfLWcHk^vKABDp-Tds zno{9xB`ItWPXixDer5UKvykWj1MC;PDoQ$0aCWW*m&E0em{4`(hSLr@GZs1fc%sAM zEr+Vbk9%{r)pJ!|-t&WG20|nlQXx9={i5JE2}<5+4gwoYkbdl?ba6Y-l{4noZYe1; zKG~q>nlYa5d9;8aQ_0=UyoGWqQk_Ii71Vz=pa6$ks&qrgu)8p@6dy#+9A~DBTG0{M zT2VFFA(?9awDocdt(!iOOCwOXQ$Q5tbXZVV(KCQ zt1|dstV*RvqgKgHhUQAeXqR~Xvme?O{YVaCw|Gu!_he|=XjO)qYNYz*9mUvl6M~tY zx!Xc+!=5{I(&_hpb*lD7@zkXk);<|~Ud@C-yAfYPk6Zq2FU|*#tMR8cH>;aI(Um46 zMb1c*mEjAg&(gG_G~i%fQr1SY_>c%Xn14xx94_W*h|Ytc`Hl4H&15V%&1!+WH(S9?l@3MyPznCT@TfqM)uchBPX*PN^doSuE_s@H|LM+tCFrz24Z_r$$)MLb%JoH^XDYD zvI7@nw|=o#$1OoMF<8zPD$e^*rJU^BqPDp<6kyumd!Mg&P8B`NrXQ{mBHkmP6cn`U ztQPdIvu~yrh-=o9*`}*KOfYtPd(J}1*Gz-X-uoRNFR~jjy6U5TJ1tqW#{+qOOVaj#l&asM0G{tY%6Z$Nrt}Q6-~7KqP&-RwbAXKyDa& zd)Pr#@B)Uh;m~==t(jzLUOd?QnnPRTj+lXts5i3jc%m5@8!8$x=lDOFwM{ z$<N-iP~x-RI*r}`WEX`1R>Q#CsJ8g& zC^~{oL3(m|>3?l6WwZSVL!iT1^P1P>Q1udypfkYtp(|UULmJ`5H{c(Gzf*0ULd~p2 z=Md1?1mMhFnS)hHEuXPan-#6N`)Mq<2M}JwZtD|aM>BPx=(#7Q`!dEW~ z+t5h5iWRY(^1z8H#EALjNBsT04|j_rrjMP>G;ZMVnc`jz)oWGZk|nnO4&MBE(bXX6 z&ySO7hQ$eqYWd(tH|bfJ$HWoO0*vQgB_3q{2UJD75VD*z9vg$@L@KTI)MwG zcs;}fvZZ*0~oDL;RM#nSEgqQ5%8TG^8YP(@;Njmi8VUS(eCHJr?-1R;yW*^)W)ow4N z*TIQj#m932xv#}gIncoOnIDa`e2W`qdM?rDzo-&PqRhCb1sGDG_!?`?ar@TSNeQpm z6>X0tSQ>S`bAaqt43sqVlt9AC9g=_Q+~2VRfCw$l>oD1E z73J=l=QdSnbi(XK77grm;MD{KXq*~W<}L5(FnuL&L+l^2AsWTmS5gteYHwJsQyj{( zZ?iH?*3N-S=D&J?$|Zi-EWA!K!4080mtzBZhN_n$_KcZI-HX%7bchIBd#P?I0(*I|J>%dW0847ZKlp-Df%o({&ftNtQ0yg z;`451_Bct}{KXk|PkV@f?n+fH_LC`Jout_FnQcY<|7M=MEs`6C{-pe_O?$>vKgKTzuUcFzgL!sc#<`8IZtb` zuc8D-9xi@6B|)J|*}#nneX3EJYlaTNc0oC{ZZznB^cfX?=cvO%VLwB`_DBrTluX|j zjIUj_+T!tral0l%i9+sb14b^a|AHF(rAt~iOq9!JTcs*5g6V^lv9` zUiaq@Pwk`8jH;DF5CQ$0s@#65qGl&U>No2Ehg;dcGkQqH=x>2xXy1}9jE6nwYT=(* zWWK-gi~7m(IWixv{G~!>C0tmqCWk`Abh#KZe!4EB>ebJ71QNfH|xy()$B zP6eRYos^jE(Hke`pl9>JKi^r%r8F*z`p~44x6i>oY;KIUIe&;Q+KPn&Ui^fZ2snya zSCpICRICO8^Nv)^XH_XGydY|t_5s4C!gOP!&)W>uXv`(8EYu6keiHY{-AO`hh2h80 z8-TMW-jPbY7l7V5GR+9%$?bWJny7;4v!NIN_9a|Af$9pzmQS*Y<0rrDIGQ(QI8mT! z8PU>VM>W>D3kO6_uTgNK(Q5f^aa7G3PXv8ZWW4;LjYC?f_H|9|+UuN#V*_e2+#XZ$ zP-lc^XSIm;gX$YX_ML}Z`Qd){IU~l(5Vk3%$I?atL{%&!_}l-rxEWap7QzY zlVp!)`VR=UgZKs=CfeI;zJWH4FM5wep|5!($Z%H7>sco#l+WUxT!bB&S>;qLNPz_7 zZSi+tCCn#5FyP#fUL)F+>gi{Hj;{R;;?yglq8fGUJKTZ*b&Ew25nPTtS|V2V;$hTg zwa5|CIchgv_0o7lk_KX*4Yz!33t-m8w|OD66bga5*RxTuIBMgrSKH(2vkAI$9Pi}Q z8Y0=UY-aI?Mi;MA#f)8X0Ql;VcId)iHvV&n9U&met|NOt)@!{zPo5$;U~dXva>dLKR}jSGQ^?E9x$E-AKTFHA2}S}FseALUV^BI9=tIL+AKLH55YNNo zneQ@2-SEkB%`vjkaH%w~EaN2cT~9-s6wn5K?5KQJsjm|{*w8q95j!OTo!X+8;qYW< z3**yPYk*SY&}f~0Bs?fK-+9FEwhAPQya23?!NH}#>Kw|{P)d_?O~pE)U!V(_*_k&! zOzJnrcCKAprJnM|wi42IgD|ZC{D6iaF5Z%7Xukch!%bL+WG%kltxHD*m#BFj3cD_p z9d1+l0P)vc{^D6TET+@TB5L2Ys}jg>$cL;X7Q&w;Ks#)jptb(q@ zsu{rfN?L%sETtan$z?=v6L*&~Gy&(r4+a2?2=ph9@;F*!fBiU;Czq)Qn4zck!+Qs` z;jfY5G~<@B?a0AUt|;;$<5FO8(iFfqoQ_@>%iHh3=1yLKs2=aC?Fa)-zLC$eJ}9*D6nhqk1sZ@Vq}d`TmB z{z0%)ff&5s{3YX>kw2GG6YFjTJ_cs|`lR=}pdoxO%o#bbZu(nEAv(ikF&@fWHi=wO z$Jfv3Wtj}Oa4m)ipMz}LJs4K6vZ& zPGg04p0^?2;g;bP9rDIsjDGB!&Hx0{f(ZNsPix?BXh=rj#m@Cpc+^J(TR8^4EvDHm zcyyvXFp=6nwm7;)4q!=_M`BXuWSG@?t?c4HH?c>Yg)@2A(e8x>q=%_jp_JI-&<5M^ zs%NkJWGxNMZ8n2p+okV*vJpfFO49hjTkNIVs2q@gu12z#ym8I-F#mIpHfH zuIx?Gnjugn{rT0Lr!MLrty~n4C7<`JPl_G@Xh@KJbiFbGwasq>xf1Z@!wqBhWIt^X zvd}zov$zmS!2gfzLbASVDno;3)Z;rhn6wb0?GWvNes#DJLsGwaCcLi9J_4awG9515 z`NZdZZ#~tCC(MaAY9O#`2x}UiQS}+18c&qjJ{I5Lczo7^>W~4cH=P)R*KEtCVA$2L#m2Vh{pHxi$c#40k9=MKHmF`Rn=S>-98X zt;`UAhpGJIM8x^k6Cdk({$9Tk_zPqm-)}6^6A8o|XnjjVW?$X?d52h1;>i-}2$)vK@)vfvw+b)4{*kl@A$mc?Ui4Def?0EZI%8=Wjq(`>}T=9VV(N;x5v4 z(-hE7ID^po^4C||5oR!Bv8^!{k=YHvATi8|lBS~?8!wp;MbkR{Rg}3?%I=GsKcQ5^ zH{|4ROWhW@Epb`kF+-z;hVu9SIeD%hm+FGX|c; zDZJ;vo)L^3KJe$5B}*Fa&nYRov6H&ZlE?p-l>hUB2(2XY@M&JfxF}YlNE$O?Oqc%q z3mP^A03WjP;PyZdfTJ-z0)UJwAs~NX4-No7uzu<8h=yPf9lsxNpy4v1e<44vI}8W_ zX%lr^d_T7H+O0)6!cW&#YJNXZQ4F>bL_dD|dNK=jD}IUh!^Vl~K9*1`hu}n+>iU#h zw_bTPIu$xlR-e!+2qXz+UxA8d04ZpF^o4wRBXj~kzv1rg{@0(oyt_fQ{czvk||uWVXp{biR_L z;y}ZHgfS0Uo5}fbR6IxxV&{wuGZa4@siz2tt#3vsS&KJ1Z+E+n-Qv8%*sNZe*o)Fy zIvn)MSiK<+)C>n(dz#P@Ghba|Z!6KcF58NOHCAmLJ{3#*EBBZ5j#8~P`T=S$h36VB^j8Scwek=csTf5)k(k0{T45^t{q>D zTC-3xd#uVi2CoBwxqPXnXf%x{GEx&Hql(U}&&?!O31;e>Raa(-d>^#aA28FW`sox% z2CBq{c>irQES(qsFg9wPY`hzM*aAdHy*gfHWo|h|=NlG269uo9q1f0{uER{vn@edX zuyl6E=6#ocOjC+U*si=Q061<4|*4L+)=gJcwM`@5KehM1fGyGH)&*vD)>~~oI~vyE^!_N_2UWeBw9l& zV=)W-UB5;Z#a*+<1qX$zz3A@Q00rnT#ir-#tdK=@0Qmdpi+%Wuu+M|dWs-4hk87nH3sE%DT5)J21=X}P$0Q%M0> zM67QgUV08D$&Jd)gt{*YDAP86L{5=cyMPRyQ46q4DddT8huEfyG%oDza?Rh;albPt zcagvzpd}7hk4f0ACK@l{Z~6Drw4%RTKNszJ+2ZLP2@Bw$nQSr1Cm343*ls~63(xE@&mRc zGNkzUz&!h#Sp^Jgb)ZQ}*#!0YJM4eLUhCmQo+8!m2=w~C@|h2RUI=z=wCRzCoFE{K zitMXQq=)~q?Fgj8Ud5+|cQiUby#D3)<3i(^&FO^n7*Zf>|D%2F~=YvVZ3Q}e-IYOCEKUivH;)F{TlHvA3N5{p$1+0F&LwfBc=e%3|b*j(G3)!T8F!XrG zV7IH|CAS6IeIVnGF!bU#PMFE(&t%c6DyOKmtRXra8jPEjRZGBPQjK4DgJBdF7p&CG z5kadSq-XGu&oeKi-3^(4nC6D?5>;1R|_<;He``f z_p-KRu2mZMp@E^y9D2Tnmnk@130fM&8!i=>qQ{~gy8_Nx#;5NxzonFgERanmemUeF zi-;Z_)h@b_jGpY?lPHOYOX{jG@$W=P5aG^N{ae86}|?s2cQ8!dSr`v zE*NCp9ATC!f6T6^UK2wgpP0s-x8!sbr?JWx8x}N(tMX2jwU|NC!zN50_uKWDb97~n z+VC^&48<_#vGRFYR$~cm&UMLtU^SmnjvytwHk*o(!*jM?P_V$q+h*v2c*X^i`3+ph zDuntGy3<^&*2$0Hneq6je`+Al@05Lf=xOP6Ua7zj3XHQ6EV#%u+YBkhGd&`rU%eqF zIa?$Flw>FHLv9zKe4nZuKTYb9s)#Qb?{!ekN`Zk89DgxRv*N7>6MeLE58B9QB}sgG zA1wY-+uYW`9ILYKz?DRkKlc!KGxQ$0M%wFx6QDi>DkAj55+&ZZ@C7@ye&QL+07}8s zM}3Xf+SU9QcIm4WYsynU5W}xhYTU~nOaDxCDAaK;wk*6Ro4r{JW5g6(76_(C!SX!I zV%)Pf6oDf~J6Fi+2fTpo%-yL^`^cQAU^Ke;kay^iT&l9S5pC67*3X^SL=ix zoQV?pS&H)@}z&S0qrvjuFDCkQWj zl?KRun7(*Qjcw3mt=S_UvxUAjR{KdTx1GA6AUH38x~+MpCtI8=wrZsw5qpi5j>AvD zD&peYOrR{6YiUYh{su9n`{=PDVe9mHEG?4a-Y==UR()|hD>Li@m|t~zlA_Qxct`oM zXL%5?x~tVIO5m^RH3Ap0^gS853b7Cfsym4q%}dqijF(hf$K_^8c!jD(0^Z~wPB)`e zp{ljyToMx`zilm%YjKN*&rL|$p=8R1L1+csjT4(a_+wnN4|vqUpdCc)p08M$rsO*= z#5~8bNc92P8$*tCN-|$4n)=!-@mu1hne80MhEf0$g-mJ8a?Zv%fP@9lbjOyWAY*ot zJ1j}ns52?OvDDwzSO#=|L4DQ93IdFLzzCXe8P^y{GBgpE&J5EYR$kRfq^h$gg3&jI z(*`HGAm3`Qp<2rFRz1U3%oDSHKGdQ&%O}eKuY+8$AIZS1Ms>|C`Dht4Y6N+KBR0M# z(En2Mr4xOD@;yq$WQiMWT%;LB^ve!SRD*0XI}i|f0#&ss4;8ENkXC^5MT)5|uc@aM z8#$_#68slSCMh<>^c+3UHJA2I;1VExk0E zohbPJzH5#CLfl|4B$Dt#T|vHCUA)(h@M0x;_ z>_{P1q_Mh%>n(#dl{V2_HYTzgO(Z7OudwFxPWn_44g}a;)v=aVM>u``I-nz_b$>8? z=e#Y7+6fRrV<3J5O(u2#eW&_bvLmA7UxC27Zs5w>#f;+~vk0=#h5Zs*!R>U*Co$J_ zyg3s&PL!0*i5?q7-)9E;SVKcLO{$FR&wNkxq3+4Nn%6;SZ zl`p`SO4~MiebQ>`aa;yJU!_cS(15sX1|PZOk$wcdP*$de2>pD=t1aAPTVBTS_?4FE z=#Hzn>LNZ}ut&Oo;fXjelF-4?Uio;JeS(-2T?}Wz+Bs2DCXGjYm!6Y_B#)XWrs1%N zi8wj}SLPBv6tv|2B|CWdDv!VYgxEj}=F<|x!!m9gJZWynuYO)Tm@UhG3M-iBt9V=+ z)ZWJYT0dl9?!Y1(VZ>wmwxg-l9Fn!|jXUbzLcW2Pc_O3iVbwu}to6lR2$FPdWZnjL zj)n-S^J(=X3*$GtV%Umm($Dbz{#*Hceatpk{oX>_suI~*s#m)m$Od)y9+G?>(!CQ< z&mqPUdlVNCFX^+{3=vnhSND9!)yUZ?6AYAZ%CV}%2Mx^7V7_w`wr1*2iiMznB-o{c zgah1RfrP|z!p9PO@lGByoZ(d%i$y^Nd0YJ*Er;?u3Kj)(-*aVKVtc1g5>}=U@o7~8 zJ<-8oT$8Ai>J!H!NiPdWOXNa)Vu^d?h~S^hK2pT!<-6<-fMOAhzGbDRPu zWlk@5J_IwVJ*k^|>j_X7Z{ym`vtkWV!Vbk01?++gzJ8+5*19=djR-jz=4eSC4)TJ! zd#qD?-84NS%f-0EV)815 zi_A*L?AX0zO-WRO)e@Bb#f2`}1jiuLoaMRTBoHfeN{w=Uz5p@H1F*Mx*2LKuyw6raXVc6YKG_0S(~IMEx5Iz~AA2WG z&*%>TRC`X<2rw%l8K$La#87Y0U*qTa|$c4e=r$9hY#uDNNd6?UrBw5AJ8?>}$LuZR z*gZfgz+jdS@6ltcTDLO}r z+J()hc}(&ns$n(2W0k`;eU*;U-dAbQa+Ds|&lwB04JD>OUDV=l{EcQNIk^{nR*w?* zaMAoOG7tT=MK}+FLq!f^b+$%sgc2Bmxtp=3E6QQ!pkO}`A?QkRTdk`5y8PNpnU|%A zx_afignPS}I7NE834kv{sT~)?dg^F`t3CqY9fa5WF2M!!1H#orq4hCXn+P{2n5&+! zRg#vXWLA-VY(2jgPYa4N9QFqt(xNO|aGpUoMo}-^pn4bVY^u{j{9(NcUhaeX#}S0M zFY4v@SdDq}>Xa#|VwGFRHrnVHO^9bCJEEs8t-KFOP4p!VVm*N?GxD|n9>nrdD0i^( zEw}XCAa~;W{@iD;F?0t-BbSJua5FEJk_d0te&Ox7qdJ6_C)JpxYx7R|FAraL{Eb)9 zPp@X`V#@p3*@Y7&Pw6^*tububWNP19JdSVrD#>ty8x)ADE%fdxlS zYRma}Qao}sfeG1c3jQs(ke!D-V*nCPPDAU=GCnel0}G(O48*SDGeyaDmsJ|*tMfWQ zWS`&-C`#a#nNp^{0gP3wm9i+@+b;klUP6wWaSER{+uWA7Y)TjWLo??VgOjTRXt@-C zQK2lt71`h(IL@vH145-Q@%N{9!i5XrD8a&MU-xJdDaoNhD`vU5RnrFMeMSO&(U8%K zKM%x9kSO9Xsy4V1-L?g$0RbM`kU@!anxn;6`66wAAEJ7zv?lr>S$B)Vv{3HY6pukr z_w0BN&&9+3fi6m78#LQbOnNJesrXJ5v-OadTtkx30eFq%Jf0J!?oV#3uVoVnI{9b2 zxn9iYB2Y4T+|%4tbx2+bY0%1Eor%VVD?4&|x;f_|x7uE~i~B=vif(ERwvxQ=j6%wI zW-}h4LM>*Ida$nmg(%XT_|n9WT6pIzBM#_GImb~(xR1Vj5|q06@F+81a}*j9E-L|n zNa92|=~ljl>!Zw`CzePbL5K0mJ+L~S?y9oZZ@3F43N)i?Dn1%=U66|dC|&9*==C1q zO-6HypTrnc3i0};uRm8R@jE~y^yKia3}cfx>SK=-%cD9Pemeh9QyhVm3BXZ~fimG5 zU{0;>gUHd3@_kp?<+}A#3EaKs3IeVNh5+AS+(~4FF_BcSlyL9D1;Z&PCQ{>B?<$#& zb|ev>kRGOculW@29Eox1H{*8BFvn@*I56;kYY5Y4{K&pJ?dQ- zf$C{MiLO|jEM&2)BF+R~yFLP@BM7uv4a$9 zeI*_r!clIue_3`6^V#`^#&ec21AN4mLCC7jG(}S0oMlw&8AMtr!0Q9uMe5WNMy;JG zOIBnnuYI$ns&$kEm)XMR<`QS;He7IV6H;qy@GZ+gkb>+KX3aGE?EeEeK*zs)-MDPO z-Am;v3Ta`0@PsDfDd&&K!=zm%g=b$lWKRA zKHBaHgcNW zm@rkuzy$Kp+y3MxB*;iK`gnSMp28Zl+y;u@q#ZN6oDEsS9&M;gXolTnj7oaSn=uNBS$Eh<0 zCp`%KD>_nH@K3wUaEON9FnhpXvb^qFDSIhZJ7xWkXr}-as17>2Q)0cHzcaQ|xPmi4 z2Q9@Zgyh}4{FV47S%}L%vIMVE?22efK$nT7uC4j*#Os0#w;qH%Wrx3_mwtThUPDSj zL{U2pNkOLVYD><8dlISLvsl20mxFh}@9%qRJBDeYV!2kmQI8!jVW=hqXx3oL!1V@N zqii&MwehV^6fQm?=0s{Eyww(*BiZgTpw&HW02cqvVGV;7MBBywdV^p3SuJ=)72TWtOb0!MGGuN|$^}T<6gu=(vvx_9)+;2jw-|yM zjo=1n?@GIj?BTXy~%$K1F? z3GcO3Jk_q09IO|*wWAW`x~^C6F08sd$3;7yMfs@n*TTRG#b>3Y1P)&*EUBvRoB#R{p zusa;;W4*uI)F)f;ku8w?Raf;^=lV~V;elBH-EXkUQ)V9*_r5&NTp0ajHFuWEumDRO z^P_z(L_m98;qNcs^|LHi=gk+IriU3BAp-0_v?hLAwhz@)$P0_{nVT%$0pCLhxsze( z8xl`yhO$qdqh{hpa$I7e6x}c^ey}gut=2=c#&p@i`HAoQ6UfZ5DQ!d^PKu@G_GPodY9h8RE}DNXxu;`3P){cK9@SXh-P7s>UFOwbgz<#U^Pm9n zs3@QBaF8O-&6|fDVlh<~vG)ys-yRtf8Z=MhG2nkVc1fCHNCFuSkzP=){@y9)gO%^u z4K{D0Wk_7V3A6mTxn_ZFiRI)`Ke%jcr^qtR#!h-fVNw`l>22Mw!ui<3^=$CDQ58e~ zGy^Edo;r8_v8|Tqm0tz)iSU!%qO6A3mRf01*ylG8DKIfljC4@lO>rU0z?5l#!x>BW zBqx+Ftp&E!8Qz0d*7bu`7OoeL34sCeQWa`sstBJ{c442d~%_;vL328K80%UhH%vKikW@;ekxZuUmhh1fUoI}EDFqBmyOkBlp+b44f-GYsYhATxp$f-x&AP=AN}LZEr1{Be*c1~N zNmtBwg*X3ZA+uaPsaaq8L&6J<%`N?lt6Hhme69sArkbvSeC>#%yefVXQD6;(4)gIV z7L=a>EM{_#t*JL!ib)h~0jdzJ0Y~)+{{7!CvU_EE5D1}}5(^XI39S%$%Izmm__t(o zfV_BQgnsaAf5nX`kqYrb?xIj8km^rHXWc4pkB$()0aH~mJplG*MGh0aCc3u7xEXYp zRptHAcDyW)59E86y*d3PX2Qg@A+QSgToQRIj%q&obR|?_H=6U-S9VVE@zl#%F*5uh zv_V+%DX|rY+`8VUEGGyf+aHO8{NC$0*E#Ly;;0Takfe0R@T64PT3gaCw~}Elu%rN9 z$9_ZUnHisp0OZAy`Vv7L`NS%tNFq&JgG^5yTNX4!$Ax_+)KTXE7pgGhP}nqhb87Ee z*_$ipyC&oC1JCBbHL=R(1XcDmNuL<>pa@P?sF$ZrPb}48YEJG`Iv;oG(Nu8p6TDee zZ#zRXGrcI^1Gi>?B@Uc~d+1>G!$KA2%|fLf5Yi#d^1BaQeLh+sX6DcC>Ocn~W+}Z3 zOrsH^KXNxggAZ`(146?-$`(|{{)ZoxXp_pSA|$<%4hfu5(yvG0oOSY9}hy!Avkxc=VoZHZ#<0EhzZ}+*W}W(Ld!x5DfW+_EftGAQhg)K zZ{YGVwoI?-4|85)(EZ{imqBBilBY)L23d#{jfU68hDVDSd*wk>$KNiSU!=ri6s25$ z*3jwwXR8(h-kZyg=7t_Ue8F8f(4{pL-*q-^B=AdsY(+P7G4%iw_ z0D!rYX8Tl%f8Ce+zHC2n{4@)PH3bTYBrhHKo<1Q+IUPe> zw-9pM^J4)hH|=v(v%^A20;D8HYRAJvvAZ-}d5Ssq8`exHU$E`c4^!_#01|7A? zQFbs!Uf;nBtR3aC-0{KfK_R%e!rI8xY$4+f68fQhHc8{M0l^jUmuCO}|KVSu6rciD z*y>1npBN6Do^AbwBYz+kIN37Bo}+kU z>x8lmFEwEye+Gllh1K~I=7Dh&Qqh?j8M$XuOr6oPor?GKF*QVZqsZ2`n)6mD30yM0 zQ;bdlW8SUD!H?%D4$z~88|hK5K*soLz4fn5m6#=PcgqFOH|c*0hF-;Fts6o6@gJcUuc*=x1?%TO%S3Ejcx0@dfF5b`}>u=HQLQIe=98 zia0w&Dq|&n%5BORLk48=Ulkm|(~uri11HXn%SuIE_{Z~TC`S(*UZyQaKN-Lk z0jS1h}z3a{M<{8(rWU<4WU3qilY7c!V*QHbte3kG<1}TQ|_{m^O z)0u!bt%O&w2UNVd=^p`q$HKtwj%uFo;9CNsyM-F7EL z4h>Ch6=Vr`_+Vo~=K1F$-R=5w)3O`Os<3jUtd@{(j_jlVFq{Y8<(rqe8XWCj)@GV1 z8&eniETH^m==97dwGJWbQ(RbZjSqQT>A5A9ytE1jyFojeAJEUA0(BJ!y{$#i&CvRtRAfgW24Aq&2vS#-66luHS+@-1>ts zzgv=vMbU)YurOM``$#wxm6Vl~v1q5&RR5u*S{K_YjgR?qft6vZ^<_lOnaY-kZ+jEwBsn0U^A#?YwUO2NLLME8g{D} zcV(ckcGfjeeEBv)rM#?^ny{<+JmAH`a(3g}&8x~0-0)Lv6_8;^9uC{4azknU_2veI z{-H_)_v4Yh*X62$34_p2&hwJ}ElR)KD{tt7eeSrDpD2VxZLx+Lm)prq_itl4{I2?| zaFSC4Ma7K+TzyVMT`sk9I!$%VfMQOo)J z@MJBo7A$&NyDtrzYD%#s!@PgL*@+F)MG08M9_)vecG(-#Qn6oqxr_*Xwc|(ON z)|9Lp12@#i<{u(NvfIJ5{&aJvE0dynfW^PmxeOsY*t0lwCMJNlyia_rsb_VKBxO`@ zO|o52*-@Sb0*&caNOL&W&0L$)AotqF0&76}+EmX#&)$bXvMt$b-)$H<47ov#DE=W8 zRZ!a%bJ ztyf~xTFS*OM9txPe^GcplZ6&p)QAdLR^m|LUf8bo@z%(jVb^C{Y1aAXROZFHs^^o} zN2#X~Htd8n*vvbPjQ)6x-j%8PBS8<_lK!+{9xx{i%0gU>qL=2-kCZB>80#a$o@=uL z^#o6Wv>0X)M1H(NR_t3)1Kr~qun`kLuBk3TrEoS4z5dRXP~OXlP8-=NNTA{cma$%C zI%6>*=zBP~%@Tg_N_OY!@<3jJ3+$`P(YDYuC822qkux&&^6+4r>>p=MgpJS>`m6dU z;ABV9j>EW;2%NWIjfF zJh_RKnma>_r*VXWoFLch)>|P*vMBBu>>^oMuagGq|JtkmVaXr& zA?B;M-8^}k4l)0wTvga$sHEt!NJZ6c^UA@jKUJLPRc42B{(r+>oU1Z6L}?0(G1G_@ z_r4yJjjDtf_P;^9VOmZtt6pEd*mW~2vUso`Aat)P5lFrP%kL>dTVESHW2-Iu_~W`z z)g00zT%j!;=g@T=QgR*xeduZ%H}r8&IS|qZtPOK-qXK%L_rf3;?6VZE^R7YGGIoyR z-e<%N*Lf260DM{YAv}{0(d;fKNZ6&J9ME05j!9gTAry7OopWHwbQ!@=XV<8fW==Dx zFCRx4EC7bhh!w)7BIm?I1937Q>kD$FLhJxtJ@ZBvME?;cVu-wVLR>=<~!guaA!?`Rx{s3v;Ha~v-{LB7k%zT<~ z7JAAkt9CH1#KcL{obUfUc!UzrJKap;;Vm)P_}_jha-KIW(xj!@yW54ur~unQJ_qf! zeb0Y82d|K{d4i)BNfCENXM|EMM(Rx}i&tpHjIHj^2Nbea!JtZP`OP&#bo|VgWD#H? zY|ncR9X)=>72)6~YPpfLGq4dDZSr5OZ!LJ)22GG+McdaQMR3SzDjq;MLIxy>URP1v z^%x*=tgQY4WZa6@iteOkZ%gaUS88)n4EZuYgBnw!Ofn74L7g`>n`cra@T&GD*F~sB zT#p>^(`OQe_%pW}za)l=O(_Zf;CpVWN3cGm$Yy6_E2YX|Ty@{NlHcY3+pjo(^R_%Z zOOTko-9pj8$&3SnhSD>Kj2|J}wWis+vUET*8NF0_l_V`>TP2XI1i@ALO3WcRBlonC zPVbRx-y%wUT+>hWVz8u11e@r@l!}7rLkI3obc0*$OKnF%(r?1v8{Dzs;<1j@?KI9~ z4PxlgaMPcdwhKNARH=vZ%?8awUA&2mEpWb#IKq+9Vv-Tl>Fufcb-T@}fQS&=8`yUh zmgOJ+m~y$OARxzcsEZMooc0ZdtG+2G>Y^QpcZm%M52k1WlEcA+*~WKCEYGwWy zYbP@^kcGFX;m^JbXiaNjfmYXyLjLUtEtLU{nt!3(!-t{e)hA9YIXDZ4k5<`$H*pZv z)@f?9Z5DiCXc^+DV9FDci1c93_*qdVMzpIZ6L>+u&}_QlkcOAL!169%c-zdV84nh{ z9H-{{G}ntFD5Nf+t}J<~_wC+%CbkR8RO(L>${1RDb{5n1P1GPZ-bO3RwcYeJN6_Ax zNa%K$x7HaCYNUFrfDTmb4c2UL^2mo8vU>168t}7QnV9Sugl=z!8l@jADCt}cHU)c| zxXg#qx6MN7i-lzzd;xl!4Au~wOAEQpPMl?m;nMB+Ck4PaAqg78-Kgwb^2gOBtj%2& z{{PWA_acb#3=MDj!r4xOlS1rN=C%?}C#!mtPYN31lo5k_(VydVtn!>fkaxSPfn@VG zn_T`$^7RR29C*F_2t)r{Ww3|*gTQ0YaoWct?H>KjKk$#M!5f6UZ2FOG8X8o>M9PkD z;X?mR{&pC`NeXP9B9~tR-q0rRlvrJ)ON8c6Zxf1r0TQ1$-q39&IWu zs)XT#d+JI+5X%fBH(RM&1wGzB-m0s@erD8GVM!>0_!7M{JJVUb#ILly9VB<%5k`*g+8h*hhne#c2HUtZE|7dz}Bx$@=Z2%55L1Yr} zf|Xce@ef$|YM(?87KjmcE;9p97ntuu$7cfC1pax0D~C4Z#y)I0g|C^tZOyNQjz->cen{w`q&*<+T#`0*KE%hQYNs1u^P5lm-G16b0 z{g>(Fh-G{7d5%vdvt2IdhXN@GTuZqVK-HKKA{vEUdo*)ZAwyz2662C;)W28sdV0Cs z#QMq9^+TLZq*{28^Vno9?E9l!ghqI=&<+3w3?Z}^R8FCqCt9d+Vv4$_9syLT7Lg7w zPA_DPd4w&&wF=dZ`uBzJ5xN6h`D>58>lv_n5iyd&&1HM#oq{Mpz;o79Dc2;Jaaa3Q zBN*x=(3ga#3Nh6=cq3c2c8vO;*@swJ`O(=ZX}y!b0*QT5FEkyB629)H@bf8qhIWA| z^HM1M0X1xmE??9C)TS;fiXyZ@@sJZ~pnwt9$7Q5@A3pw<6hY4R+H)bA`~jS*_t8Gb zew}eu+I1?%1I|E;(-GNDC1s7o91ooX$$?uhD5T+joI*0G=xMY7TvCk;&YEqB$0|8n zP*a&L9oSw*M3?xv`wov6?HAl>Ncv5HF=Y9ace~qMrcDhs9^>uD}mZBMoT_*j&(9kb5VVT=* zDrAv8b=tu74htAWazB*wUcMDKmENwi6rb8v72l?DVYYA6K=#8bF7_2sX!GyjXnw0@ zX4_qAC#*jy10zy1g|bTB25=sy5t-?BjM{W zOY7|`9_BFvseo&9t&gZrVqF=wA$D8*&;nq79*_4%i_`xoT2}E*S))mdgnvO9zphHu z&q`ZnWOelx5kQ|EnJ8kSH_ugyL6hfjOh>HHxi zuu4}n#IKLd$?P6_+V2V(+7Q(?zkJ_*Z219D`3bq~R2vv0YqG!wCeczubDsY-*(E8u z$)x)TsLuF+2bipYd8?vf_gGYJ8lVpLNBAzuLbyYmh@b-{O`!-1(#7snb^HckN}0>($~fy30j=T5Vd zEkJ;J0N861Src$CF>Zg@L-qx1UZ(@TP{Y!54v31hlhKPXVMe-oSeGLGJ@KA@wj!gW zgxwxB{!@~qi((mT_&1&|{uRNeERvYThk-DDZeGoAvarL;gLKVZTyaLzUvJ7tL03yv z5!gp3B#)O}*(sxVGtU2JWgJ8uYbn%Io@S8iC=Na{dI;BQTIP{<^{@HfEkVAa?V#}% zTI!S_gfU+@hG<$v7<|4VZrKiJ@bL*=;#c5@cP<+ArL`(1>3$OO%O#DVJ2_KuUCE>P zhDb3xMkINHIId!eW3VNwX&y}zm)3=x4T0?ri2S$@YKdjii?|7~J~X;U2qyKPcW z3G$&s{coFq593x7l#2rp5Y(S1XNH4)c8ys+lk%tOnW_In|6kegwQ$N}NrI;bhSci~ z24lymLN)1ZP-!@==)Q+fd?$Vw+pbS|2$vJha5vr_AEBDPszW%G8Z4(#A0&hk6R!t# zb*pRh>xQVLak^l=H}<$yPw967qWkhz;r%xh&+#%4yZt(@tfNex{(@uE>jPd|_@QsV z$w)F8&{KXg@Ch*FVwHpeoXNGeZi04osN6b_<60PvdXpwf=#5O&eTGyjY>zDL^cjgJ zUC!C*$-gNgse*HHzaxzU)q`OO%rsV0NZr6|tC#_;e24KAB+z$0E$t)(zydLvoh3(a zZ)Ly{4z*I$(-hhBCa|jw^%C1NM(K@h6l58(>>d(Ejq2tdL<#L+c1Q;erUh~A?X>j+ zDN0>=inXgeHcdUU?AM2jy6@>~1UVfxI;wE4=cquqT%kpah8I?;WB3`=vnHv&+cH)` zv8EN=spcYA{%*-{SBWHkWDFJIkii(1ud zKTbn?rlz1b#Wy?IB=IrL&~_U)!G0`)A$qUSCfeM zRH_zg`=GM)*;NGW%%Q0%<6@{+d9Qwi#yjnqRSGCu*QdiH zqO{)F5q(Eqo-T=Uokw~F|EP&kZr8%tM;2h9bsq77&cK{}+rB)n?JllO}$Gjz+eWprDb1!6IN`ISX!u!BixKmV$higeEV@0Fvt* zr9t|`ASX=1AS@DTgh8R>m=;nW>oGGu|0U(Mr8 zaDLppgWHtjQB5Qsx&)nhFYQ zeZ|#`Oq@8J@dT}p@)tY67;wi6*b-eX^u{*ICvib6Vn5Nj~pp%N4~w^lp<8H zLE3lbI^lISOcXMBZ7CU3SNMt&wQo#CJWdH*B>~ys?sskp_5mugJ^6>0TDY#1Qk2Q+ zn5ZJn8%_E5dbm|*bLSgZ#m=H(pjQS^7rx|RVH@UlB8rfnt>HNBl|2O*-yu ztV5OSKLw+3lO+n&+YCnBtLL6Rr0RK>=A3htOWm&P?1%*>*N6{L`t+S!7_%v*#W=i4 z_N4rl-_}%ck)FC1Z%z%zX|<~f!9^x`_}|k}XPGQ0wRJ5$!~IrEQ)qG+z6}3M99I!U zSp7nOd;4}v+oWlAnrEe8;*CJ_AlGoH4n=vDr}gzhy8?JA$t39pF6GI7oYs|G4g%8$ zI`Q@ocL6|F<5chLM2<~>NGyFvn@a@rrPA*U+$OxUq9C9RWjfV(_z?Ll2_US*w=l?i zCO3AI3Q|AGa@H6+FU6@Iz0PR)&3SYj9XQbjXA#pRvKuvq({b_i0vZ$Au+68o^xfrKu(Y1Zh-Qs$K-{WmN?Yx`#q-a97n0+1s2d&uw zwxGbvH%l}cgRQXs=9ZB3Q&Ap&8N76Wq-UuREqmljB9C1dJQR67LAgoMMQ++SPV$P6 zD5jJNCOPYIKeR1RT5G`vjML<4D(Ad#!A59omH>KZVYU$waLlasOu7)HP^{eel%E8v9!lxAC|pN_&jE63$e003YfJiAdz;suI;)jf1_SSYdg zAnhhGLYM{zCvHpiEPE+~tUbhxSm`1n95C37YqPVyY9rS4CG((v?o9*V=G;Vm2B)|F zzugpnskBpir9w_rCrr}?Gq+ttpWt4D)f%_9RaTi&m*J${4tEg$PWpyl1!S%T44a*p z$ti#*k*@Qna4tzu;>uRaQX!0#9?1w)8$gHJI6IU1V7l*=&Ue+iP5>;SedyQ&b)6KQ z@_c^V$OVa*aSkiG`pyy0nro9xRZdM}kT&yb$&^K;4uh+DN0M4`PjqhMEi*E2 znrGFUCd`FZ`;bu*hb|c-&J|aV`@WWyE{V9GX_}yH;dX)VW1HoMpWSKs5zzN{3q(L9?a3VnwX`KU8eWx>Z`*Mur{JzT*Gr%9Dqs35;6 zvJ&7eap1Tx!SE>s>%7H!g~w<-pE&*nWW`GipIOoQnCo<9!1(nLPEs5pdSzhR&L!|KGK^|71 zdIg94Jve$MXo6azkwFJyO1V;VC;RT`&>(+!614@EeW;yqeAF4i=0B{o8M`c=ud1ne~5Fn5hm!c68j=h%8V)rT*qiyKrJs`zl0nb<+ zX4>a@il-lR;RgykXjRVt=pl3Z7W0(E35H9C6-EHECDMTz%hAV<`Kr>TLXiT)v=*Tv zC5Y8y?l+FXOIp%EDT)Wx3j~3z!P1{|;)@o~R3ov%=1i2z-%;5Yoia)~jnWgzT zV4f_u1d{$F5qenzcs2Mx z(ZI->x#csw0cwK-o@lMEcA2aPX%hRLT7jtN6)Gr~_gAVz{t6?ZdG9g-9Y=%5<#vZ1 zI|u%+W(ZWOqwZJaS_6KjF(HjsvAK0v;4#6p{^F^C)11BM%AWW4N!*87!g4$si!99qf zcAB9%_6}+C-?chX(?!JDb;3&lc8mqMEi)On;-h{t73a2cJ+~SCF?0lA#p35^#i5Y> z!y4=Ia6LasLjO(OM_ZQ*2`|SLy}6zW0kqPmVXqrFO-h8@v5*OFYph|b2jb{9I5&`K zy0S!Eqs>4pokU;zHb=tH8i}5f>Dx}wO_7P*ua?qSW-I}x>wN3%{w2f)=fuZXa=+d2 zQO2tCHKeX%6-eoVF&ZKP;~x)+##TA?OiojU3t22|80=EmfsvCq<5lInIeA)J^hs7w zT+BM`U=fsQ%Ft8tdO`wKc*NJ(@TD4=cTGgn{b&^Um&7B{YIDF~d|8AKjiB@o>h%8C z`i|A=2MkJIF3g*ts+)1AYF33{Tr_b9j2?Amx6?T}xgvz&mm=?)_kdCBNciqhH!g^H zY<*Fi&3S7lNq+WT=#)(`>{A%q+Fo_2{YIJsVpI@o+tWXYV+YC_S?KnK$wF<%~g-2-FGOrf7gPctb&N&eLWc} z5o$hxR-CK%3_~5&WPP~Ninum=#B{bX1h2Bc;gmmX&(AwJ%>2lbm2>pq-R2^o4IdAm z(}ZMaapRV5dQd-`I3|v(PLO2B6XE*Kn3wYfV?OiOxF^`2p(@s}|GyQ7>XrlWK7 zK7(_rH<%}xL}b_>2qAmPs+$G)gC$0<6B-G!o=$%|?lfK-2& zo&#GGoOV6c;G`TXY2$ul^=mxqq!{uGX3`uWVsl>t3Em_}Iz`6qYcfD8@Jx=v(ftF+ z!K0J{eU?(d;Z(|-eRnz^@axfU>D;V3ck=W15Ba{Vb~O6!?{F&=!+tcx$&|64p#>!82=9jF4HHx92() z*FhWqaI72zC0^OeOA$+$v4Za6p9k0m;n`u51wr`qwzi-?J$(tJx44KFD@RvA1DGup zK1d5>Ow~FcqX+cxZO$mhlK2lqhlOR86~5Zk`!6=wr;7MkWi`Mf!&}QliVnd4iW+bZ z>P@t8LcdRZvjW-)Q>!9Kay{U&REm&gidner|g5VuPH6yy)Y`dPq)N5M9b1JTEvxLE+_V11w(stTKn z3h@b%SSI=Y=8ny1w4&6xHXLng7n*LT`V~BdBxWdegQMXeIs9!v@h6e#hOG>`QesIHbvpG zajmOY3d1S zp7xp8Q)9sl_r+N_71%Fzs3=3**sr})EbFABZhv0P5kz~0uP{arl+Yuk@v9x%mE1>} zglC6XT9Uhh&iv%jWRSCei-saae&E6>$oy;@?vw_yJZyy0DUYq`4 z7os}4iUjYD_UV}RH|nIjwL`(HKHF|M_;ylh>I=CPC1YFQp4x^U!%j@$lKbY*;xkx5 z!RYD@w?jHO7zBk{2I(*<%QbTU-&3Xo!6TW>`KroKYrIEmq;S#ZqdaH=!WLwm1*8<4 zszGN9h=9h#Wd`S`liEenz{3`N3iSNm1~a?_U!pd1z)571du(39_+@*wgz5)jI@cj9 z2w-l<=d3vTx+8ON5h&Vyb}K@Y$4!G$*@&0ch!QpK!Nw8o z*SlPl$g;Sbh0?$L-8t)ZBoEG@rvp4fT+Gf}AM(>G&~i>D(g|HFj9aS3t>q#*2Vhcdy(BHKnqY(b6! z1y|q&ja9FEo?!UnGdeHy`PWNT>q7WU2ABKLo5Fflx@~1>@{2kmJh6iKv@No(K`Hbz zBCi$x<&v3A{AWo^``XQHJtmx){zc)jm!S;sLKNNu7a@e82@3EMj|RC6ffxD4I{r)j zDdv}jj?&2UQlHEd6D_oZOwC#B(T>Pi4*g5wdn->z{K0jH%E&s9H5y=Yhk#!M+OGn0 zvMF%l70(ZJMEOQxPfX_*^HXE`oTcsGVq%Rv6uOfS^@Z-8 zab6m3t8IMZ)9)$(sHmNo#(t?K0bKh%{7{WRv1cEIR8(cpPj8&#_z>qL;LfTiGdxDJ zAj-yGpiPuRzz+-=PyhcMm_;}S$vVExO38;%;oP12S8GM(Z2S9T{YP5mJ&K5UYUpDC5rhOA~1$MVpLT+|D4`+y2f6 z;Qh~IxJ|NmLy+uXis{@DR69{tw@^rz&{IHoP!Mmt;^11O9RXc>mO2WcFYujhUZ5W1 zo#HA2B#n<(k+XXu$a56O{0Bkbruq@CmkR}S8dBs6@2H+{^rCuyOVcs-iLkY`R(I$G z_OTM|=p{i8r4>U?25A(7EW6^ZSoCy?QTU>96!z}K#69$dEUC65qv3Q8tSM+b+j=Pw zW$Mj@oA8=y@DHI6y98xs!h)v`wRA@{%%dIWW+M!9T*;tPGx^YEWIO1!GH5~l=F7d% zok987W^2CB>m7!^J;6q2r$+nxc_3PiDDXMYnzdSR8(VXfB;(|aNf_uuX}ug8Xhxrs z_Ou}LT*62bdqSdYUO&V$&`2NCWgW=x4x0MLcHG1{`G$-Jvil?9QdH9A32z1`Al<5* z&|wuKPJS$Lr>7lQ39I-8qBmT1j)1-5j|`S29YK5p|6}tC{$o^H8A>dn--BhoH)2H9 z6*VDK!U$n+r}~O?o*r>-A&RDPeat7}{H_j(Hy`Uqjhuk03biemzw091jL2aFFu2DU>6^nU0Lx+L{uO^l=Dk)fz+ z=#NUcED?LNNIR=pwB+Y|N(W~zH4jxBOeIr@vtIIv%_oGy;nk6G#%+g&46Fv*=B@wZ zNF(vQ_7?gsiV(t3USp!d(3oN017}!weG+BK7on-vhiYl@*jW^2W(v91`G4nP;OI*Z zwQUG}=uP%oS3Ag5)(OtO%%&CYNc4yRw8Eo}w08m$Fm=@Dc+RzHourHsQau+~}y<8ctHN{e1Eq1>(y+i`A9F}xR z-~70dE>FH!T{+|1&P?~&ZG@{J%|^@Z0PiX234p?+1h5z=+oRD~#TKlrv)qusONrBy z|C1r+mnfbWgi3uF*rAmu%pE@k$Uut>XGJ%>;ye9`iN4v>Y7{#dhB@ea;XSA-bj{4* z_;s*dbYZ@A65_0fQN2@A{ewq*8u^Nt7qpMGUVrlYtji2n)mNfPf8gCgmRB##wHn+7 zR?oQ=<5gO{QaK>S4jVa#xJyyZgb^9}p0wYqAgrn83CB3GW5&bxHftZ!ZxGsbs5f!C z#2{Stt453<4&s1OPSOvw;?@L0XABgoLx>7Yxmt(X*6HlmJ93VmE(AMyX*N0<6N>}K z#vr~|sW0Ld$F7l|4mbh*;^Pda{~VWPc=j?*8Q`+zL2p#FNd0rKf0xG^ ze~Cf)Qg*5=vItKuOicv@NB%%5gnj*U2g@Z+Vc)syHcQ`(=%s+%Ydk#+H(YvnOb3VO88(IhAI*_#010f^ThcmFYh+=d5n23)n&uCmM5Z z_9CF~sc{v`#NB3;!(N7%3*Ty5M+ZT0g9}40-irX|$*U4;b8HF*^&4fM_?P%ucnp@iQ2j@7 z3A=irJOGP45C)b*4Y(LBiqGXGCRcGudjg8rmjDKdVgNu#(&z)J!ayNFfG-C`0tX?0 zfL+;Y126~$hReV+fPh`uY6Hh1hAg9ia{re-9Y>`4#nB`)&*lZ}=2WM2gj<#T)zeUt zQq#c=$w`uUd5LmA%d;7Thsh2(Nz#*UnvVSMFkBgCD3_z%;Cu@ilHyXnHf`6|xF2s1 zo$-O;ml~nqxxg)%dU>3{gxyZE6-zvh>1;TPtpT2Gv7#q@h##0}gl%@OXE>sI?BE=w zAxI?O_LXW<43HG(YauQK_I`83RNg-Jm{@PZcLsKWc63{}t}z^j3Y2&^%k5hNWA18oP+Y*rHyD4u^ptY5tHWNlQq=WsWqYMkdw)4qmkB zdVFK3(Wc|f0Bkwhu-I}$T5jl^vyz9?X;WEt$vasIa3{1yZ^ZR_-o|Z(t>JoU}+`196?BnCGqDBz}w3%SpP1SLffMto!^gjZk74$x#CcBwG& zSxA(I1$>^~x3}I8jS9N{5w9bgeHU3Bcjtgr2mF@fF*W+KytQJ?NCXU?q&Mut+d`Gb zH_uWx;r-q{w{rZ!nUg;Mt?jFZ)LhQ1c zQjlbUd28uIjc}F;xcCnI&~WRa-XjYj#yUKec!MRyTmW_pJVb~IcbL3WmeB}oztpAA zUfSSXl%~(siiZ+}l>p?3%Wm`nH@98aO8vEP%g04A{t>pAgXG6>_M4CGB_N(3VG%x-kK8*lS*& zRKOSl=5mrM{Sq6k%YD+|$_v03&!TD=aw8<>t za$cAeoyWvs)8KS8ut+DoFB+{bvD|)5<=YVD_;Nl3z8QcAb-0RqZJ{@qTA>~a0fsUU z;q4S`Y(7V!JHBGDCS>DPK1r%PSG&yg;j{(kQHJURJS`GBl3_szZHzi>-r?b3x}}?Q zQr&nq*?F-58Rorlper_k?mU}+v_Fb^!;Cs%sHJqL!6x|4ffJ>wD%Gfhg8Q__wg;?A6K?$53keEYlK>|r%0VbCR?b0QzLi3&?9pmLM$#qI`s}J z11&wt6ACRRkwoM#Dj7$hXQIVdA9h9Th#DxKyMR8TDVJ46fpb;VQ{42ob7L!wW14!j zGhcxKzLkl|*qBi5hWe6d;G_Rnbu16{MQt?wi~##TY-UR!cQ0(&gYIkzJRT)ubbovI;df}SQvdzs zC%V>*wbmT!%Ww1~HGjANvN&@WO9kC_ z8N`s?05`JApEe8Pxq=RADw8d;-5p+hnAmUn;7lQz5=RAuY6TN5v z7MJt0^ML}TKk-SdUp(!peLJ}I9qMxlVL2yL8T2L8fF?P+sa^G1Jg;8gNp{uND5e+oU~0>B>8*Ir*{u>D9QzPUy1|0T zhTpfZ{5fGJ9w&HQf$Q{SGSP+G%^zAlvdkQU`~D8v_J=l_70&W&3?;mWDzUwx%icBI zs#>Ya-ZSDR25?(j`>4ikUdamZNY8XJk(PMk`(X-e3=n0#ov|xe!Q$3Mkw*FQw~-S5 zuG#RaOoVfMC`~CO=r<%AG?3GJJKQ95*}*aPF~o)UehoD=damUs!=2f3Siu9`tm|hx zHj|AoscylwN0i=N<&LgIMr?G8e9nE1t7s~z*?iW~K$sXlh>y2B+Dfg`Afk(R+dlay zIYGwe}Gp9pHLaee@B=jzeS=Q?cTD?@G=+R^)3A}1A-A+y*e3B4y zF$V3BDen{aQyoF85!S-! zpm}oQ{DM47HtlbMwf&-Ow!o)89Iy>=nB*6T%Cr2(OZ<1YRWq9+-^eD4*@=16`WV}D zNyEYO{~VO^R&eDKt~t?#W)lT(QwkILSS)u>!!c#Ue|6cYZ=bN4h8VGElflg?kOMVC zBXs=@xp^HQ`}Cacw){^EAE}wSUf$8R(G}6+Ty@T-!5Y{)PFNCogZ<=P`m5Gky##l6o-c_Vj;x%?o=8~KBp`mUCZa~&t;gI+lezcS7kRX4B z-^l+i@k~r)jaX9+knUQLZBZ{Tsj}m?DcpR+5e} z_R_?9(@+1f5qbFM)Y)=+hiyHej4-*Rq4}fcF{b%GUg6rRZZ?-rXgP9bH7CjvBDZ;C z&X(2VD%q1`DUEV2vNxSGgzR?~@e-7V0T0LbX-Oo0eD8AaWjgx#)4Gbckk_PTSN>`9 zBMPInBs!HrmzlUaOpR2dT$D=8uvMVc1e(elpExeO9P^DTi~NO#!g}v{Q5iO?2_nkh zH;q3jwQ5m2bXrkqqMDePCUa!fO-J z6Fe6+R{ylwJL(N;cJTMlJ(o*-=U(qe`Jc3U%Uj^_^4TW1vuX;hYkecl`k#3Bsmsub z6kAT6E|`A!;Dsvrp!lcw6vKC)vj703IdJ)5$mr4M7?^nLJj;)j4Pdc%T>+hG&lG_P zAo|Tu+R>N*5R0RU_3@#V&xBpOAY! zixS;oTK`qBr&0%t^M{D4;K+%hJh$^v1_G|2e=j98fjwHxlYh}_P~hdb)9+o;G&{z+ znO+RU#}w+e1~8<|{`kNrh}Kr-jg7RNsCr^ep(s}C_(|UP&scVxs>b=&N^$v~%o6MAl;%hGt`@EYBND(c+#+r4+oxVe7N8;VnJ6Mcl=P#s z&gHWg@aiJYW&@ughAbdw8l=HEV5b+nw}2Nw9ETL*J7FtGCpaGC#fm4955Vh&?tVhx zvE|%YP3aIyxoh7naY63VVpMgkB2Q={;0zu3Cz=pij1X1;E$2|h#8x5bvSK#E1B83! z-7QH(Ae_{t?2KQ}0!Z`0a~mWAov)3o6K^r=e2Uq|FCK0BLibXf=onO*49`le}kCodc|Mp0n)0CPk` zcxO#^fNwdSNrg$AQ&h?1-AN{P^Hjkc?*#!a23 zL!Zc%v;(#D9ct^8;w^>C!Q zI6e^7@Ec6iZwX6Kn!$hQDL|lEMc_}0 znGT|IIwX4T9MH!zm4_Q?DLUB_TeLWQ|I00mbVZYm^NzYQLlom8ko%|?k|Yl}0wN2m z<6&8QE`lS;+kkJ4v5k(EH2;I|eY`H?3TcG0Qd0sEzH?6y$v6N201u!5kGCGBb}kW@ z8XqrjGJox5=c6kkeqF#Hm-dwck=4s^mQ^qrY=>vrXPlwljU@JAm) zwh)xoEY}-z>huZ9ooeTxqF6QrD}97MW$804Vm!iCc_z}4Da~0Cf5o(Nbh3T&8jA{( z7W_0Urzlxb_$cp&Q!}&e0f4%Rphvll^iem*b;Y(DS;ThUD|~BSO7i9?z1xc;uZ}X~ zmz`5g^;r{DV9h@0yG%ckRh)D{cWVvxL?q1l@P0@n%WRZ!6!edg=xDJhJHu1K7gV3$ zcBH=F^Juu@IsNKV`?C$Q0Ra3Q@}%TqOj8h!2)T*1r>>HpvOg?DQm`6=q6kB-^_ZbI$8_ zm$2I(ao=IFoMt=1GlxqOr=;a9Xg8v}1Fk(=844A$)rY@kchAK&x@Gy ztOO`>+%HEE`f56HEv9?xw&5OS!*@}h;wYoUPRzcHwr6FK2NZ)c{w3? zBXX_ESa)&|5C8xGLo|pe5iNicc#lCk#Bbi6aEVPH65O#H+jt%f?1JO~0000007Y0y zMqU5_07*$I00;m800ICp0RjLA0000c0001KhXeot0000k000000000`X=7n?VE_OE y0058&00aO405CE#Fou!`01^NI089V?0000006|kjNl5?z08?XfWo2%2Xm50lDPh_G literal 0 HcmV?d00001 From 2f63b9425d2df82950173da02524deda22db7305 Mon Sep 17 00:00:00 2001 From: nixo Date: Wed, 17 Sep 2025 20:31:39 -0600 Subject: [PATCH 5/8] Apply suggestions from code review Co-authored-by: wackerow <54227730+wackerow@users.noreply.github.com> --- public/content/roadmap/fusaka/index.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index a22abf40cde..6d7671ba1b3 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -26,11 +26,12 @@ With [data availability sampling](https://notes.ethereum.org/@fradamt/das-fork-c This keeps hardware and bandwidth requirements for nodes tenable while enabling blob scaling resulting in more scale with smaller fees for layer 2s. +[Learn more about PeedDAS](/roadmap/fusaka/peerdas/) + **Resources**: - [EIP-7594 technical specification](https://eips.ethereum.org/EIPS/eip-7594) -- [Main PeerDAS explainer page](https://ethereum.org/en/roadmap/fusaka/peerdas) -- [dapplion on PeerDAS](https://youtu.be/bONWd1x2TjQ?t=328) -- [Academic: A Documentation of Ethereum’s PeerDAS](https://eprint.iacr.org/2024/1362.pdf) +- [PeerDAS, Lion DappLion: Scaling Ethereum Today | ETHSofia 2024](https://youtu.be/bONWd1x2TjQ?t=328) +- [Academic: A Documentation of Ethereum’s PeerDAS (PDF)](https://eprint.iacr.org/2024/1362.pdf) #### Blob parameter only forks {#blob-parameter-only-forks} @@ -44,8 +45,9 @@ Blob parameter only forks can be set by clients, similarly to other configuratio When blobs were first added to the network in the Dencun upgrade, the target was 3 - that was increased to 6 in Pectra and, after Fusaka, that can now be increased at a sustainable rate independently of these major network upgrades. -[ IMAGE HERE, ETH.ORG TEAM PLEASE HELP ATTACH: https://drive.google.com/file/d/1U24kK-XbZ_l6UWwDO_2-0Mxn4kSkEwVe/view?usp=sharing ] -Graph source: https://dune.com/hildobby/blobs +![todo: replace this with description of diagram for screen readers](./average-blob-count-per-block.webp) + +Graph source: [Ethereum Blobs - @hildobby, Dune Analytics](https://dune.com/hildobby/blobs) **Resources**: [EIP-7892 technical specification](https://eips.ethereum.org/EIPS/eip-7892) @@ -66,7 +68,7 @@ EIP-7918 pins a proportional reserve price under every blob. When the reserve is ### Scale L1 {#scale-l1} -#### eth/69 - history expiry and simpler receipts {eth-69} +#### History expiry and simpler receipts {#history-expiry} In July 2025, Ethereum execution clients [began to support partial history expiry](https://blog.ethereum.org/2025/07/08/partial-history-exp). This dropped history older than [the Merge](https://ethereum.org/roadmap/merge/) in order to reduce the disk space required by node operators as Ethereum continues to grow. @@ -88,7 +90,7 @@ Why exactly 2^24 gas? It’s comfortably smaller than today’s gas limit, is la **Resources**: [EIP-7825 technical specification](https://eips.ethereum.org/EIPS/eip-7825) -#### MODEXP Gas Cost Increase {#modexp-gas-cost-increase} +#### `MODEXP` gas cost increase {#modexp-gas-cost-increase} MODEXP is a precompile built‑in function that calculates modular exponentiation, a type of large‑number math used in RSA signature verification and proof systems. It allows contracts to run these calculations directly without having to implement them themselves. @@ -119,7 +121,7 @@ and reject any execution block whose RLP payload exceeds `MAX_RLP_BLOCK_SIZE = MAX_BLOCK_SIZE − SAFETY_MARGIN` -The goal is to bound worst-case propagation/validation time and align with CL gossip behavior, reducing reorg/DoS risk without changing gas accounting. +The goal is to bound worst-case propagation/validation time and align with consensus layer gossip behavior, reducing reorg/DoS risk without changing gas accounting. **Resources**: [EIP-7934 technical specification](https://eips.ethereum.org/EIPS/eip-7934) @@ -145,7 +147,7 @@ This feature benefits client implementations and security of the network as it p #### Count leading zeros (CLZ) opcode {#count-leading-zeros-opcode} -This feature adds a small EVM instruction, CLZ (“count leading zeros”). Most everything in the EVM is represented as a 256-bit value - this new opcode returns how many zero bits are at the front. This is a common feature in many instruction set architectures as it enables more efficient arithmetic operations. In practice this collapses today’s hand-rolled bit scans into one step, so finding the first set bit, scanning bytes, or parsing bitfields becomes simpler and cheaper. The opcode is low, fixed-cost and has been benchmarked to be on par with a basic add, which trims bytecode and saves gas for the same work. +This feature adds a small EVM instruction, **count leading zeroes (CLZ)**. Most everything in the EVM is represented as a 256-bit value—this new opcode returns how many zero bits are at the front. This is a common feature in many instruction set architectures as it enables more efficient arithmetic operations. In practice this collapses today’s hand-rolled bit scans into one step, so finding the first set bit, scanning bytes, or parsing bitfields becomes simpler and cheaper. The opcode is low, fixed-cost and has been benchmarked to be on par with a basic add, which trims bytecode and saves gas for the same work. **Resources**: [EIP-7939 technical specification](https://eips.ethereum.org/EIPS/eip-7939) @@ -163,11 +165,11 @@ For developers, it takes a 160-byte input and returns a 32-byte output, making i ### Meta {#meta} -#### `eth_config` JSON-RPC Method {#eth-config} +#### `eth_config` JSON-RPC method {#eth-config} This is a JSON-RPC call that allows you to ask your node what fork settings you're running. It returns three snapshots: `current`, `next`, & `last` so that validators and monitoring tools can verify that clients are lined up for an upcoming fork. -Practically speaking, this is to address a shortcoming discovered when the Pectra fork went live on the Holešky testnet in early 2025 with minor misconfigurations which resulted in a non-finalizing state. This helps testing teams and developers ensure that major forks will behave as expected when moving from devnets to testnets and from testnets to mainnet. +Practically speaking, this is to address a shortcoming discovered when the Pectra fork went live on the Holesky testnet in early 2025 with minor misconfigurations which resulted in a non-finalizing state. This helps testing teams and developers ensure that major forks will behave as expected when moving from devnets to testnets, and from testnets to Mainnet. Snapshots include: `chainId`, `forkId`, planned fork activation time, which precompiles are active, precompile addresses, system contract dependencies, and the fork's blob schedule. From 4cb418fe5d78cb94ab6c0446c1a64d921a4b433d Mon Sep 17 00:00:00 2001 From: nixo Date: Wed, 17 Sep 2025 20:33:23 -0600 Subject: [PATCH 6/8] Update index.md --- public/content/roadmap/fusaka/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 6d7671ba1b3..49a3c0d0fe1 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -18,7 +18,7 @@ The Fusaka upgrade is only a single step in Ethereum's long-term development goa ### Scale blobs {#scale-blobs} -#### [PeerDAS](https://ethereum.org/en/roadmap/fusaka/peerdas) {#peerdas} +#### PeerDAS {#peerdas} This is the _headliner_ of the Fusaka fork, the main feature added in this upgrade. Layer 2s currently post their data to Ethereum in blobs, the ephemeral data type created specifically for layer 2s. Pre-Fusaka, every full node has to store every blob to ensure that the data exists. As blob throughput rises, having to download all of this data becomes untenably resource-intensive. @@ -26,11 +26,11 @@ With [data availability sampling](https://notes.ethereum.org/@fradamt/das-fork-c This keeps hardware and bandwidth requirements for nodes tenable while enabling blob scaling resulting in more scale with smaller fees for layer 2s. -[Learn more about PeedDAS](/roadmap/fusaka/peerdas/) +[Learn more about PeerDAS](/roadmap/fusaka/peerdas/) **Resources**: - [EIP-7594 technical specification](https://eips.ethereum.org/EIPS/eip-7594) -- [PeerDAS, Lion DappLion: Scaling Ethereum Today | ETHSofia 2024](https://youtu.be/bONWd1x2TjQ?t=328) +- [DappLion on PeerDAS: Scaling Ethereum Today | ETHSofia 2024](https://youtu.be/bONWd1x2TjQ?t=328) - [Academic: A Documentation of Ethereum’s PeerDAS (PDF)](https://eprint.iacr.org/2024/1362.pdf) #### Blob parameter only forks {#blob-parameter-only-forks} From 428b298ffe79258d30fcb86a9a52053a8c2261e0 Mon Sep 17 00:00:00 2001 From: wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 21 Sep 2025 13:51:31 -0700 Subject: [PATCH 7/8] chore: apply suggestions from code review --- public/content/roadmap/fusaka/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/content/roadmap/fusaka/index.md b/public/content/roadmap/fusaka/index.md index 49a3c0d0fe1..8514389cb49 100644 --- a/public/content/roadmap/fusaka/index.md +++ b/public/content/roadmap/fusaka/index.md @@ -33,7 +33,7 @@ This keeps hardware and bandwidth requirements for nodes tenable while enabling - [DappLion on PeerDAS: Scaling Ethereum Today | ETHSofia 2024](https://youtu.be/bONWd1x2TjQ?t=328) - [Academic: A Documentation of Ethereum’s PeerDAS (PDF)](https://eprint.iacr.org/2024/1362.pdf) -#### Blob parameter only forks {#blob-parameter-only-forks} +#### Blob-Parameter-Only forks {#blob-parameter-only-forks} Layer 2s scale Ethereum - as their networks grow, they need to post more data to Ethereum. This means that Ethereum will need to increase the number of blobs available to them as time goes on. Although PeerDAS enables scaling blob data, it needs to be done gradually and safely. @@ -43,9 +43,9 @@ These coordinated upgrades generally include a lot of changes, require a lot of Blob parameter only forks can be set by clients, similarly to other configuration like gas limit. Between major Ethereum upgrades, clients can agree to increase the `target` and `max` blobs to e.g. 9 and 12 and then node operators will update to take part in that tiny fork. These blob parameter only forks can be configured at any time. -When blobs were first added to the network in the Dencun upgrade, the target was 3 - that was increased to 6 in Pectra and, after Fusaka, that can now be increased at a sustainable rate independently of these major network upgrades. +When blobs were first added to the network in the Dencun upgrade, the target was 3. That was increased to 6 in Pectra and, after Fusaka, that can now be increased at a sustainable rate independently of these major network upgrades. -![todo: replace this with description of diagram for screen readers](./average-blob-count-per-block.webp) +![Chart showing average blob count per block and increasing targets with upgrades](./average-blob-count-per-block.webp) Graph source: [Ethereum Blobs - @hildobby, Dune Analytics](https://dune.com/hildobby/blobs) From 88312bc4142a0f25153b4fef22103b004b3ce9a1 Mon Sep 17 00:00:00 2001 From: Paul Wackerow <54227730+wackerow@users.noreply.github.com> Date: Sun, 21 Sep 2025 13:56:35 -0700 Subject: [PATCH 8/8] chore: commit image placeholders --- src/data/placeholders/content-roadmap-fusaka-data.json | 6 ++++++ .../content-roadmap-fusaka-peerdas-data.json | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/data/placeholders/content-roadmap-fusaka-data.json create mode 100644 src/data/placeholders/content-roadmap-fusaka-peerdas-data.json diff --git a/src/data/placeholders/content-roadmap-fusaka-data.json b/src/data/placeholders/content-roadmap-fusaka-data.json new file mode 100644 index 00000000000..3cef8ff6b67 --- /dev/null +++ b/src/data/placeholders/content-roadmap-fusaka-data.json @@ -0,0 +1,6 @@ +{ + "/content/roadmap/fusaka/average-blob-count-per-block.webp": { + "hash": "4d42e3c9", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAKCAIAAAAy3EnLAAAACXBIWXMAAAPoAAAD6AG1e1JrAAABPUlEQVR4nGPo7+1pa2nZunnL2dNnfn7/gYbu376DLP7l4weGL58+/8cNLt+4fv/Zk/dfv3z//fv///8/v/9g+Pn9B6a63bt379+/f+3atbcf3IeIPHv2DKrhy6fP8+fPb25unjhx4rZt2379+vX///9z587t37//3Llzl29c37hxY0xMzMSJExE23LlzB252VVVVY30dxNpHjx55+vlyc3MrKyvPmjXr0aNH8+fPB2lYuXr109cvw6IjFy5fevbSRQYw4OHjExQWkldUVAaDWbNmvX3z9siRIyAnQdyjrKwsIyMDIRUUFJSVlSEkXAPCSU5OThISEnA5BTDAp8Ha2hqiCAIgNiAzFBQUpk6dCtVweN/eQ/v2P7r/4NKFi4/uPzh7+gyEfPXixanjx9+/fQch37999+rFizPnTwEA0aM5TfhJOKYAAAAASUVORK5CYII=" + } +} \ No newline at end of file diff --git a/src/data/placeholders/content-roadmap-fusaka-peerdas-data.json b/src/data/placeholders/content-roadmap-fusaka-peerdas-data.json new file mode 100644 index 00000000000..aac01609e0a --- /dev/null +++ b/src/data/placeholders/content-roadmap-fusaka-peerdas-data.json @@ -0,0 +1,10 @@ +{ + "/content/roadmap/fusaka/peerdas/polynomial.png": { + "hash": "1ad252b8", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAACXBIWXMAAAsTAAALEwEAmpwYAAABdElEQVR4nGNYtWoV85kzZ7gYGBgYQletYmZABYxQDAf/GRgYQRgusH//fpanT59yMdQzcBgvn6lsuq5CWHSKKI/KRDM+hnoGJlwGIUz8/5/50bFjnCpzbUSNZ97lN565ScRsUbOi1pRQHuOl9SL606dLo6jv7OT9X1Eh+H/mTFa4YMraiTLGC5Yrp236z+Uy8z+/x9xboqYLl6u5zNkl5bpop5jJ0qVK9f31Av8LCzn/t7aK/q+qkv5fX8/zf+JEdob/9fVMyauOCVnM/i9kP/+/gPfS/4Iei//x2a/6zwPCzgv/C9tM+yDY2bmB9399Fg/YFWlprP+Li7n/9/ZyMvy/f59j27lbomlLn4pUbnsmWrntk2juqmcQvO2ZaPKyF+LZ6z4Kx6x9Lha56ZNI5pYPgiBvg8IOFAEMx1at4tx//rzAop3PuXfuvMC96cxTrkU7L3DPPPOUa+amM1z799/nuHLlChsMnzlzhhWEr6xaBWYDAGapqmw1xthOAAAAAElFTkSuQmCC" + }, + "/content/roadmap/fusaka/peerdas/subnets.png": { + "hash": "20d6c013", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAICAYAAADwdn+XAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwklEQVR4nIVPQUsbQRidaCoJxsTYaEzUxJRa1Agq/i0R2kvBHgJ6SIsW0QZLPGhB9jKK7tIhazQyRMMmgSm72czupoFlNZQsVhF7scctYy305oPH93h8fN97AAAAMMaearU6SCntgxB2AgBcjuN0EEKepVKpDrbDPEppF/PB/3Acx9VsNv2GYUQJIaFKpeKXZblX1/XntVptWNf1CPNVVQ3Lsjykqmrw8YGLTWBZloeZjKVSqYelsW27W7GVbkqpjxASME0zIElSHzvSaDRClFKWNkYIiQBFURKarCW1b1q8Xq+PtFotL3gCLKVhGKOKogywCm6hXAijcxR8DT96UzDjW8/t+tNoM4gp9hk838N4hf/qliR5rZ0dz0WxGMEYu9mBzq3TL8nVk61XK7nPk+/FTHIDZ8eXjtLT22Vu7DtCE+2Dgwk7n5+6OzycuxTF5M+9vdkf+fyMbFm9Dwn2z/dfLH5dHJoX3iUWTt7G/uk3xeURE8LYPYSxm1xu+DeEL21BSPziuLF2oTBJTDPw0GkTcUEOc6EP/KdoVsxGhLIQTotroyunmbiGUPwWofj18XGU8QqhwWuej7bPzvqx47j/AMHQBZ0EglQEAAAAAElFTkSuQmCC" + } +} \ No newline at end of file