From 5c8b5bb3c5b2751a2482a48ad098b1e6bd6acd62 Mon Sep 17 00:00:00 2001 From: cortze Date: Thu, 10 Nov 2022 20:27:19 +0100 Subject: [PATCH 01/16] first draft of the RFM17.1 proposal --- RFMs.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/RFMs.md b/RFMs.md index 5239bbaf..bab47cd5 100644 --- a/RFMs.md +++ b/RFMs.md @@ -615,6 +615,34 @@ Additional context can be found [here](https://pl-strflt.notion.site/Provider-Re We have numbers to justify how often do provider records expire and have carried out experiments with alternative replication settings to justify new proposed settings. +## RFM 17.1 | Sharing Porvider Records with Multiaddress + +* _Status:_ **complete** +* _DRI/Team:_ [`@cortze`](https://github.com/cortze) +* _Prerequisite(s):_ **NONE** +* _Value:_ **Medium** +* _Report:_ [`rfm17.1-.md`](./results/rfm17.1-.md) + +#### Proposal +Achieving an appropriate content retrieval time for content in IPFS is key milestone to place Web3 as a real competition to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content itself using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is set to 1s). + +However, If this process of walking the DHT looking for the PR succeeds, the `kubo` client will get the link between the CID and the PeerID that host the content. Thus, the user still has to make a second DHT lookup to find the latest public multiaddress of that specific peer. + +Each of the public multiaddress for any peer in the network has assigned a Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was originally set to 10 mins, but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetching the PRs inside the time window where the multiaddress of the provider didn't provide, the multiaddress of the provider will be share among the PRs so that the client can fetch directly the content from it. + +This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long are they actually shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress linked to the PR to 24h (same as the expiration of the PRs). + +#### Measurement Plan + +- Spin up a node that generates random CIDs and publishes provider records. +- Periodically attempt to fetch the PR from the DHT, tracking whether they are retrievable and whether they are shared among the multiaddresses. + +#### Success Criteria + +- The measurements should show that the PRs are shared together with the PRs for the 10-30 mins after the publication of the CIDs (depending of the go-version the remote peers use) +- If so, we could consider increasing the expiration-time of the PeerID-Multiaddress records matching the PR expiration time. + + ## RFM 18 | TTFB through different architecture components * _Status:_ **ready** From d1fba2d112a4126259578d4410ef264666765e23 Mon Sep 17 00:00:00 2001 From: cortze Date: Thu, 10 Nov 2022 20:27:45 +0100 Subject: [PATCH 02/16] create folder for rmf17.1 + add plots --- .../plots/id_plus_multiaddres_from_lookup.png | Bin 0 -> 19210 bytes .../plots/id_plus_multiaddres_per_prholders.png | Bin 0 -> 19081 bytes .../plots/lookup_result.png | Bin 0 -> 19178 bytes .../plots/pr_from_lookup_process.png | Bin 0 -> 22061 bytes .../plots/pr_from_prholders_pings.png | Bin 0 -> 20629 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png new file mode 100644 index 0000000000000000000000000000000000000000..49c01ca5bf9091205dfd9de3d52b0f62f18accb6 GIT binary patch literal 19210 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 Yb)Anl+A@#P3k!a3$g5t@M;ZtGH!Uc%>Hq)$ literal 0 HcmV?d00001 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png new file mode 100644 index 0000000000000000000000000000000000000000..465002a9b0a45674ac7afa0e4e81cf2e2de2ab75 GIT binary patch literal 19081 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 literal 0 HcmV?d00001 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png new file mode 100644 index 0000000000000000000000000000000000000000..2933e7eb8b95520e686c094be0a54907613e4fd0 GIT binary patch literal 19178 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 literal 0 HcmV?d00001 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png new file mode 100644 index 0000000000000000000000000000000000000000..a664a52ec36cb702d254a9fd7e118129f5dd5e97 GIT binary patch literal 22061 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 OR24N9isWxR`ab{;gJZh@ literal 0 HcmV?d00001 From dba88058af2656b7a011e0bb548dbbf5b1479a71 Mon Sep 17 00:00:00 2001 From: cortze Date: Thu, 10 Nov 2022 20:28:22 +0100 Subject: [PATCH 03/16] create draft for the rfm17.1 report --- ...rfm17.1-sharing-prs-with-multiaddresses.md | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 results/rfm17.1-sharing-prs-with-multiaddresses.md diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md new file mode 100644 index 00000000..cf47f779 --- /dev/null +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -0,0 +1,129 @@ +# RFM 17.1 | Sharing Provider Records with Multiaddresses + +_DRI/Team_: [`Mikel Cortes-Goicoechea`](https://github.com/cortze) & [`Leonardo Bautista-Gomez`](https://github.com/leobago) ([`Barcelona Supercomputing Center`](https://bsc.es/)) +_Date_: 04/11/2022 + +## Table of contents + +1. [Introduction](#1-Introduction) +2. [Findings](#2-Findings) +3. [Methodology](#3-Methodology) +4. [Discussion](#4-Discussion) +5. [Conclusion](#5-Conclusion) +6. [References](#6-References) + +## 1-Introduction +**_Context_**: [Slack Discussion](https://filecoinproject.slack.com/archives/C03FFEVK30F/p1662995123912119) & [GitHub Issue](https://github.com/ipfs/kubo/issues/9264) + +Currently, content routing through DHT lookups in IPFS involves two different steps: + +1. Routing the CID to nodes hosting the content - find the Provider Records (PR) in the public Provider Records DHT +2. Mapping the ID of the nodes hosting the content to their public multiaddress - find the multiaddress of a peer in the Public Address DHT + +In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PR are stored in the public DHT. However, in the networking layer, when a host request or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: + +- The first array relates to the `[]AddrInfo` of content providers that the remote host is aware of. +- The second array relates to peers that are closer to the CID from the remote peer's perspective (form it's routing table). + +Given that the structure of the `peer.AddrInfo` is: + +```go +type AddrInfo struct { + ID ID + Addrs []Multiaddr +} +``` + +One could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? + +- The simple answer is, it actually already happens (sometimes). + +Each node in the network keeps a list of the peers that they are connected to with the information of the same ones. In this local peerstore, nodes generally keep items like the `UserAgent`, `Latency`, `Multiaddresses`, and so on from the remote peer. But most importantly, hosts keep locally an expiration time or Time To Live (TTL) for those `Multiaddresses` associated to that peer. This TTL gets updated or extended each time that the local hosts interacts with that remote peer, which generally happens when the local host refreshes it's routing table, or when a Provider publishes or republishes the PR. + +In the current IPFS network, the TTL of those `Multiaddresses` is between 10 and 30 mins (depending on the `go-libp2p` [version](https://github.com/libp2p/go-libp2p/commit/c2821791bac7d638890accc98798bf4cbfe122e7)), while the TTL for the PR is ~24 hours (still pending to be re-adjusted after the submission of [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md)). + +So, when some node requests the PR of a given CID to a node that has them, it will only reply the `[]Multiaddr` together with the `PeerID` of the content provider if the TTL for the `Multiaddr` didn't expire yet. This prevents sharing non-updated records for any peer in the network. + +However, since the PR have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shorten the current process that perform 2 lookups to a single one? In other words: +- Should we extend the TTL of the `ID` - `Multiaddr` mapping? (30-10 mins VS 24 hours matching the PR TTL) +- Should we always share the `Multiaddr` with the `ID` if any peer asks for a PR that we know? + +This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Proving that extending that TTL to match the new expiration time of the PR, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. + +## 2-Findings +- As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending of the ipfs client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18, 2022) +- Even the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping won't longer be notified. + + +## 3-Methodology + +The study uses as basis the CID-Hoarder from RFM17. It includes some complementary modifications that can keep track more in detail the retrieval side of the DHT lookup. + +The tool uses two different hosts, one for publishing the content (gets closed after the publication process) and the second one for pinging the PR Holders individually asking for the PRs and for performing a public DHT lookup for the content. + +The result of each individual ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR, and the content of the received `AddrInfo` response. And this logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). + +**_Notes_**: *Holder: Peers elected to store the PR in the publication process for the CIDs.* + +## 4-Discussion +As previously introduced, this RFM aims to measure how PR are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section in three different chapters, i) the result when we ask the PR directly to the PR holders, ii) the reply from those peers that share the PR during the lookup process iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. + +The experiment was done for a total of 100 CIDs for over 50 minutes on the 23st of September, 2022. + +### 4.1-PR holder's direct reply + +Taking a closer look at the ratio of PR holders that reply back the PR from Figure [1], we see a stable 16 to 17 PR holders sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png) + +_Figure 1: Number of PR holders replying with the PR._ + +However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around 3 ping rounds or 9 to 12 minutes. Afterwards, the median drops to 7 stable peers sharing the combo until ping round 10 or 30 mins, followed by a period of only `PeerID` reply period. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png) + +_Figure 2: Number or PR Holders replying with the `PeerID` + `Multiaddress` combo._ + +### 4.2-Reply of peers reporting the PR during the DHT lookup + +Results are quite similar when we analyze the replies of the peers that report us back the PR from the DHT lookup process. We increased the number of content providers that we were looking for to track the multiple remote peers. Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see an stable 20 peers by median over the entire study. + +For those ones wondering why are there more than 20 peers (k replication value when publishing the CIDs) reporting the PR, we have to remind you that Hydra-Boosters share the PR database among different peerID heads. Which ultimately means that if one hydra hears about a PR, all the heads of that common database will also share it. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png) + +_Figure 3: Number of remote peers replying with the PR during the DHT lookup._ + +We spotted no difference when comparing the number of PR that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact same drop of peers sharing the combo after ~9-12 mins, with a sudden drop after round 10 (~30 mins). It is clear from this results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png) + +_Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` combo during the DHT lookup process._ + + +### 4.3-Result from the DHT lookup + +It is important to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. + +We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes to only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with the `Multiaddress`, independently of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) + +_Figure 5: Result of the `dht.FindProviders` method, together with the filtered content of the received provider's `AddrInfo`._ + +## 5-Conclusion + +With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are in fact shared as long as the TTL of the `Multiaddress` records don't expire. + +This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. + +On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. + +## 6-References + +* [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md) +* [CID-Hoarder](https://github.com/cortze/ipfs-cid-hoarder) + + + + From c2059894984a6aab5c40848cc10893aa2273b004 Mon Sep 17 00:00:00 2001 From: cortze Date: Thu, 10 Nov 2022 20:45:13 +0100 Subject: [PATCH 04/16] Add link to report --- RFMs.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/RFMs.md b/RFMs.md index bab47cd5..9e5f425c 100644 --- a/RFMs.md +++ b/RFMs.md @@ -615,22 +615,22 @@ Additional context can be found [here](https://pl-strflt.notion.site/Provider-Re We have numbers to justify how often do provider records expire and have carried out experiments with alternative replication settings to justify new proposed settings. -## RFM 17.1 | Sharing Porvider Records with Multiaddress +## RFM 17.1 | Sharing Provider Records with Multiaddress * _Status:_ **complete** * _DRI/Team:_ [`@cortze`](https://github.com/cortze) * _Prerequisite(s):_ **NONE** * _Value:_ **Medium** -* _Report:_ [`rfm17.1-.md`](./results/rfm17.1-.md) +* _Report:_ [`rfm17.1-.md`](./results/rfm17.1-sharing-prs-with-multiaddresses.md) #### Proposal -Achieving an appropriate content retrieval time for content in IPFS is key milestone to place Web3 as a real competition to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content itself using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is set to 1s). +Achieving an appropriate content retrieval time for content in IPFS is key milestone to place Web3 as a real competition to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is set to 1s). However, If this process of walking the DHT looking for the PR succeeds, the `kubo` client will get the link between the CID and the PeerID that host the content. Thus, the user still has to make a second DHT lookup to find the latest public multiaddress of that specific peer. -Each of the public multiaddress for any peer in the network has assigned a Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was originally set to 10 mins, but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetching the PRs inside the time window where the multiaddress of the provider didn't provide, the multiaddress of the provider will be share among the PRs so that the client can fetch directly the content from it. +Each public multiaddress for any peer in the network has assigned a Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was initially set to 10 mins but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetches the PRs inside the time window where the multiaddress of the provider didn't expire, the provider's multiaddress will be shared among the PRs so that the client can fetch the content directly from it. -This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long are they actually shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress linked to the PR to 24h (same as the expiration of the PRs). +This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long they are shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress linked to the PR to 24h (same as the expiration of the PRs). #### Measurement Plan @@ -639,9 +639,8 @@ This RFM, which is an extension of the RFM17 for its close relation to the PR re #### Success Criteria -- The measurements should show that the PRs are shared together with the PRs for the 10-30 mins after the publication of the CIDs (depending of the go-version the remote peers use) -- If so, we could consider increasing the expiration-time of the PeerID-Multiaddress records matching the PR expiration time. - +- The measurements should show that the PRs are shared together with the PRs for 10-30 mins after the publication of the CIDs (depending on the go-version the remote peers use) +- If so, consider increasing the expiration time of the PeerID-Multiaddress records matching the PR expiration time. ## RFM 18 | TTFB through different architecture components From 6fc312581c37acabed671d085870b54bb3479b23 Mon Sep 17 00:00:00 2001 From: cortze Date: Thu, 10 Nov 2022 20:45:42 +0100 Subject: [PATCH 05/16] check spelling and grammar --- ...rfm17.1-sharing-prs-with-multiaddresses.md | 51 +++++++++---------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index cf47f779..75549cb1 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -1,3 +1,4 @@ + # RFM 17.1 | Sharing Provider Records with Multiaddresses _DRI/Team_: [`Mikel Cortes-Goicoechea`](https://github.com/cortze) & [`Leonardo Bautista-Gomez`](https://github.com/leobago) ([`Barcelona Supercomputing Center`](https://bsc.es/)) @@ -20,10 +21,10 @@ Currently, content routing through DHT lookups in IPFS involves two different st 1. Routing the CID to nodes hosting the content - find the Provider Records (PR) in the public Provider Records DHT 2. Mapping the ID of the nodes hosting the content to their public multiaddress - find the multiaddress of a peer in the Public Address DHT -In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PR are stored in the public DHT. However, in the networking layer, when a host request or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: +In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PR are stored in the public DHT. However, in the networking layer, when a host requests or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: - The first array relates to the `[]AddrInfo` of content providers that the remote host is aware of. -- The second array relates to peers that are closer to the CID from the remote peer's perspective (form it's routing table). +- The second array relates to peers that are closer to the CID from the remote peer's perspective (from its routing table). Given that the structure of the `peer.AddrInfo` is: @@ -36,65 +37,65 @@ type AddrInfo struct { One could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? -- The simple answer is, it actually already happens (sometimes). +- The simple answer is: it already happens (sometimes). -Each node in the network keeps a list of the peers that they are connected to with the information of the same ones. In this local peerstore, nodes generally keep items like the `UserAgent`, `Latency`, `Multiaddresses`, and so on from the remote peer. But most importantly, hosts keep locally an expiration time or Time To Live (TTL) for those `Multiaddresses` associated to that peer. This TTL gets updated or extended each time that the local hosts interacts with that remote peer, which generally happens when the local host refreshes it's routing table, or when a Provider publishes or republishes the PR. +Each node in the network keeps locally a peerstore with the information of each currently and previously connected peer. In this local peerstore, nodes generally keep items like the `UserAgent`, `Latency`, `Multiaddresses`, and so on from the remote peer. But most importantly, hosts keep locally an expiration time or Time To Live (TTL) for those `Multiaddresses` associated with that peer. This TTL gets updated or extended each time the local hosts interact with that remote peer, which generally happens when the local host refreshes its routing table or when a Provider publishes or republishes the PR. In the current IPFS network, the TTL of those `Multiaddresses` is between 10 and 30 mins (depending on the `go-libp2p` [version](https://github.com/libp2p/go-libp2p/commit/c2821791bac7d638890accc98798bf4cbfe122e7)), while the TTL for the PR is ~24 hours (still pending to be re-adjusted after the submission of [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md)). So, when some node requests the PR of a given CID to a node that has them, it will only reply the `[]Multiaddr` together with the `PeerID` of the content provider if the TTL for the `Multiaddr` didn't expire yet. This prevents sharing non-updated records for any peer in the network. -However, since the PR have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shorten the current process that perform 2 lookups to a single one? In other words: +However, since the PR have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shortening the current process that performs 2 lookups to a single one? In other words: - Should we extend the TTL of the `ID` - `Multiaddr` mapping? (30-10 mins VS 24 hours matching the PR TTL) - Should we always share the `Multiaddr` with the `ID` if any peer asks for a PR that we know? -This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Proving that extending that TTL to match the new expiration time of the PR, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. +This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Ultimately, proving that extending that TTL to match the new expiration time of the PR, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. ## 2-Findings -- As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending of the ipfs client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18, 2022) -- Even the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping won't longer be notified. +- As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending on the IPFS client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18, 2022) +- Even though the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping won't longer be notified. ## 3-Methodology -The study uses as basis the CID-Hoarder from RFM17. It includes some complementary modifications that can keep track more in detail the retrieval side of the DHT lookup. +The study uses as a basis the CID-Hoarder from RFM17. It includes some complementary modifications that can track the retrieval side of the DHT lookup in more detail. -The tool uses two different hosts, one for publishing the content (gets closed after the publication process) and the second one for pinging the PR Holders individually asking for the PRs and for performing a public DHT lookup for the content. +The tool uses two hosts, one for publishing the content (gets closed after the publication process), and the second one for pinging the PR Holders individually asking for the PRs and for performing a public DHT lookup for the content. -The result of each individual ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR, and the content of the received `AddrInfo` response. And this logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). +The result of each ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR and the content of the received `AddrInfo` response. And these logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). **_Notes_**: *Holder: Peers elected to store the PR in the publication process for the CIDs.* ## 4-Discussion -As previously introduced, this RFM aims to measure how PR are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section in three different chapters, i) the result when we ask the PR directly to the PR holders, ii) the reply from those peers that share the PR during the lookup process iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. +As previously introduced, this RFM aims to measure how PR are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section into three different chapters, i) the result when we ask the PR directly to the PR holders, ii) the reply from those peers that share the PR during the lookup process iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. -The experiment was done for a total of 100 CIDs for over 50 minutes on the 23st of September, 2022. +The experiment was done for a total of 100 CIDs for over 50 minutes on the 23rd of September, 2022. ### 4.1-PR holder's direct reply -Taking a closer look at the ratio of PR holders that reply back the PR from Figure [1], we see a stable 16 to 17 PR holders sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. +Looking closely at the ratio of PR holders that reply the PR from Figure [1], we see a stable 16 to 17 PR holders sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png) _Figure 1: Number of PR holders replying with the PR._ -However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around 3 ping rounds or 9 to 12 minutes. Afterwards, the median drops to 7 stable peers sharing the combo until ping round 10 or 30 mins, followed by a period of only `PeerID` reply period. +However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around three ping rounds or 9 to 12 minutes. Afterward, the median drops to 7 stable peers sharing the combo until ping round 10 or 30 mins, followed by a period of only `PeerID` reply period. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png) -_Figure 2: Number or PR Holders replying with the `PeerID` + `Multiaddress` combo._ +_Figure 2: Number of PR Holders replying with the `PeerID` + `Multiaddress` combo._ ### 4.2-Reply of peers reporting the PR during the DHT lookup -Results are quite similar when we analyze the replies of the peers that report us back the PR from the DHT lookup process. We increased the number of content providers that we were looking for to track the multiple remote peers. Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see an stable 20 peers by median over the entire study. +Results are similar when we analyze the replies of the peers that report back the PR from the DHT lookup process. We increased the number of content providers we were looking for to track the multiple remote peers. Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see a stable 20 peers by median over the entire study. -For those ones wondering why are there more than 20 peers (k replication value when publishing the CIDs) reporting the PR, we have to remind you that Hydra-Boosters share the PR database among different peerID heads. Which ultimately means that if one hydra hears about a PR, all the heads of that common database will also share it. +For those wondering why more than 20 peers (k replication value when publishing the CIDs) are reporting the PR, we must remind you that Hydra-Boosters share the PR database among different `PeerID` heads. Which means that if one hydra hears about a PR, all the leaders of that common database will also share it. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png) _Figure 3: Number of remote peers replying with the PR during the DHT lookup._ -We spotted no difference when comparing the number of PR that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact same drop of peers sharing the combo after ~9-12 mins, with a sudden drop after round 10 (~30 mins). It is clear from this results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. +We spotted no difference when comparing the number of PR that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact drop of peers sharing the combo after ~9-12 mins, with a sudden decline after round 10 (~30 mins). It is clear from these results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png) @@ -103,9 +104,9 @@ _Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` co ### 4.3-Result from the DHT lookup -It is important to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. +It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. -We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes to only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with the `Multiaddress`, independently of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. +We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with the `Multiaddress`, independently of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) @@ -113,9 +114,7 @@ _Figure 5: Result of the `dht.FindProviders` method, together with the filtered ## 5-Conclusion -With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are in fact shared as long as the TTL of the `Multiaddress` records don't expire. - -This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. +With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. @@ -123,7 +122,3 @@ On the other hand, we have identified some code limitations that could affect th * [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md) * [CID-Hoarder](https://github.com/cortze/ipfs-cid-hoarder) - - - - From 33301c29d4f046f7863c637a6bb8564bb91dab3f Mon Sep 17 00:00:00 2001 From: cortze Date: Fri, 11 Nov 2022 11:45:51 +0100 Subject: [PATCH 06/16] update report link + text mods --- RFMs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RFMs.md b/RFMs.md index 9e5f425c..2db2a4d6 100644 --- a/RFMs.md +++ b/RFMs.md @@ -621,10 +621,10 @@ We have numbers to justify how often do provider records expire and have carried * _DRI/Team:_ [`@cortze`](https://github.com/cortze) * _Prerequisite(s):_ **NONE** * _Value:_ **Medium** -* _Report:_ [`rfm17.1-.md`](./results/rfm17.1-sharing-prs-with-multiaddresses.md) +* _Report:_ [`rfm17.1-sharing-prs-with-multiaddresses.md`](./results/rfm17.1-sharing-prs-with-multiaddresses.md) #### Proposal -Achieving an appropriate content retrieval time for content in IPFS is key milestone to place Web3 as a real competition to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is set to 1s). +Achieving a fast content retrieval time for content in IPFS is a key milestone to place the platform as a face to face competitor to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is currently set to [1s](https://github.com/protocol/network-measurements/blob/master/RFMs.md#rfm-16--effectiveness-of-bitswap-discovery-process)). However, If this process of walking the DHT looking for the PR succeeds, the `kubo` client will get the link between the CID and the PeerID that host the content. Thus, the user still has to make a second DHT lookup to find the latest public multiaddress of that specific peer. From 38a4f3e06dadfa2fdbb2718e81fe077a35975394 Mon Sep 17 00:00:00 2001 From: cortze Date: Fri, 11 Nov 2022 11:46:36 +0100 Subject: [PATCH 07/16] update date and text mods --- results/rfm17.1-sharing-prs-with-multiaddresses.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index 75549cb1..36cc8d4a 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -2,7 +2,7 @@ # RFM 17.1 | Sharing Provider Records with Multiaddresses _DRI/Team_: [`Mikel Cortes-Goicoechea`](https://github.com/cortze) & [`Leonardo Bautista-Gomez`](https://github.com/leobago) ([`Barcelona Supercomputing Center`](https://bsc.es/)) -_Date_: 04/11/2022 +_Date_: 11/11/2022 ## Table of contents @@ -106,7 +106,7 @@ _Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` co It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. -We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with the `Multiaddress`, independently of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. +We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with ntly of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) From dff705044a169e7a772562dd3071fb30e6439e7e Mon Sep 17 00:00:00 2001 From: cortze Date: Fri, 11 Nov 2022 12:44:53 +0100 Subject: [PATCH 08/16] add rfm17.1 as completed --- RFMs.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RFMs.md b/RFMs.md index 2db2a4d6..58f6e490 100644 --- a/RFMs.md +++ b/RFMs.md @@ -8,6 +8,8 @@ This page lists measurements that are useful to understand the dynamics and the **[RFM 17 | Provider Record Liveness](#rfm-17--provider-record-liveness)** +**[RFM 17.1 | Sharing Provider Records with Multiaddress](#rfm-171--sharing-provider-records-with-multiaddress)** + **[RFM 19 | DHT Routing Table Health](#rfm-19--dht-routing-table-health)** ## Ongoing From 9694e7f4e080c29d3ab4dca1e850bf4f4b6c9193 Mon Sep 17 00:00:00 2001 From: cortze Date: Fri, 11 Nov 2022 15:59:17 +0100 Subject: [PATCH 09/16] update pictures --- .../plots/id_plus_multiaddres_from_lookup.png | Bin 19210 -> 16482 bytes .../id_plus_multiaddres_per_prholders.png | Bin 19081 -> 17630 bytes .../plots/lookup_result.png | Bin 19178 -> 14349 bytes .../plots/pr_from_lookup_process.png | Bin 22061 -> 18812 bytes .../plots/pr_from_prholders_pings.png | Bin 20629 -> 18363 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png index 49c01ca5bf9091205dfd9de3d52b0f62f18accb6..63b9a8449d9589a3f504032f7958e6292c860b72 100644 GIT binary patch literal 16482 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 Yb)Anl+A@#P3k!a3$g5t@M;ZtGH!Uc%>Hq)$ diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png index 465002a9b0a45674ac7afa0e4e81cf2e2de2ab75..6b9e70ffd96023221957b4d1a8ac782f2b4777de 100644 GIT binary patch literal 17630 zcmc({XIPe5nl<`XS!juhRVpAzuoRReC`rji6cCZDWJN%bBvC-XgeV3S36e!5BOpnF zfQSUiIR_Aw=Id|f%=|fhU0&Vj%k%DM?>nru?zQ{j`E#eYP%~0fD3mQS zXHF_nD8HIgD8JnJeLenWNHjtS|0QB`>Vl23g`ti8B`X7p{3RPpQwtkYy!XicGP+D`ubLJ0`kNuivS zlR0@zV}1Hq-ZMos_B$Ju8lKPyF9c-h>P2ObClJYQy>45r_#!kTE0H{`yl7nptm1FJU4i{ z8!3$Bcoz4#=ghX289qMrD}{2)K-JP7OQL8oQtiTzg^EePP$(Ce{>2XtSz<>oPR-4! zU%eWgtxtZXF+{@2rnltz@v_9lI|l>>RfdL!#-HN%Eicy8)STjtlG{O{eC+0E#)o;H z-r4d$`hkZ>MC9W0=g%jKO2TJa;YR_7^zZjq2FLMgXGLEw^cb#%S^t7pFdx1OE)vY0>sEW2B{c_DydG7cfqa0V%)^HdW##2n&CL^(l$Cv6zKoW6u`l!Q z@5(xPAXZN=f8AE`S7vSLoZ{kI0*2*!AMyOYKd1uTwlIr&|B4-|W=H(#+3rB(QRq(R zBlPsH|L=aFyOPqvyQCbjyu2J_GNClGvb-!SgpiwG_aaa8*`cCuX%&Xtsqun+y}jP^ z^AXx7f2G`#vUK~WQ>u*6e!X$yMvZh+|6hOoHPvCtP^R{4{@pa^B|Dkgn())A;nG{o zT2o`HbHl>ICV%{R?(Xg`E+OF)5;9&oi1nNI)ZQ`s{NPVU0mH}RAEwSNCEIs7H?0nA z+`cc`ab~!1JTxGH%hh#_zv6eirV#IeW>LG*XbGp;9hsFo!%sb;GoBf4NO=4k{?WlV z)7@;WH7!;jmz7PXxAph;H}IlIK&tXwcRRqxr@+a{$tZrq@?G0+ zR8%rvc-{IuS68$4jCajur=KuJOi$ZHL`B7^z14^aA;0FsqnPBpI21*_X_K<0rRDPx zg%I(W?fcI)uYE9S;5sEOoyETg>C~2ys<%tjCc5>#MdDc7d+sAgE?5s#`mi0)%1AnI zKX`lH2Aewh!!lkp%%X2zzT7Ef(W!+ERh;O|X-F|rP?yGAS?&ttEEDnM*)1x%=v8Gp zH8rJt?p&p=WNu<&Vsc8#+T>~_$4E?!Y|p$w@Sl`hldm$e3i7G!>mf6eGOW7TO{gl{Pus^NG~}+}wzlpPgkVS^>{e`p)gD@h4S-%`5ph~kNm3&_jm0JlG~Ji@7`}zzx~F+ z&tIEsI$R$^O--$&qT>Df_3KpBkv((TnN|^uht1>HZ(+RJ7=JOr126p54)H7fcxRXo zw>q7Mq^4zqmV4hy{v+Q`df{(RTUQfasyX{}qe*3u$Z$=#`{dM=&$DN*9z6K{AIXwg zx-^g1BSmO@C;R1;miA8CYa}AI#ysLQ+dD~py(RZ|DjcB}#v&g5S3ht|qoC~BySMM# zx3H3uGwl2KXNzq^QblQr*5&)``Il{|cA*9Bg`)M4+w|1S|GEcpxMzG)yGI(rzI{cP zE}lL6INhwR-)q)PxXr-NXGTy_tprc1?4j2D^HV`Vnt6w)y8-r78GT5u^>C5aY?SyF zd|*H^iS|;z{uwub$PYErP6{keh4;1^K?tbwk}KZ;vFIHY9Rjm6R( z(D1%^6d#(bjJabrSRFPwJKLyfk;5+I*yp2e)8#xT(+n2$&bhJ_p0RE&40f{MQX3zXfuhGYvnHw zp{LYn+jm5;y3B{2Jps7lZFG*-v>{eiSxwEC&A1{!XcBlN#jt`+hJ}Si)OpdSg&kSK zF%XpHK6ZbXd3F57l-{AC7`C(2r#ZQ?LV7w`}@Xmd~%IeJ_j>DV=1_m(-p_2IJ z)W~zeCc1Ou*%Pq{a|55PSbV$nFtuj5^b>CcaC|&ZL;S_MOC5+})u?m9{2Ni8Df<(W zf+d{PTwGiy5Yfj)*sJn*G{Lg&Fh#B2boeg*TSPeE)7q)`hQo$EW$;JQyL=@e9HT$Ya?KYqve zfM(>aTNJa-4;Q_rzZYyB$y-}V{P5v}N}h{z&O(1+tYWxynDdDfC;EDN_HNy}6-9ze zLSm)rWZs^CV5=jCW$Sl_yR*7n$j{Fou8Z>AwryLgQ5B1fQdh2X@Ob2|LznNVC1?#L z@dyj61s=9&oa=H;lzzf!++Xhh6RgC_2MYTXtH9Te-i05Nfe}i1@`_!lr;! zx#PZ?<~7L%WkDwK`o&LCoUAX<(bMl&sG6c*Y)!isg}4$4#4)|nvW(SpTA67Qa+tib z(!;uTzRdRkbEDAJ>Z4-z<2*hGEk69X4~V4NEBYUBPDCvW0UsY@oSISS6Ya)YX)`Oa zOZyc5g z-g?^fSFd(2?Y{j8#oj(^JZnUD$K}os4g~bk@mx4Rc>4pr;j=f``I(6>-Cc*xd1h}Q zACw#&vuf+={0D&WwSEL~HKP^28LEpKaa~&qb@s0?tW%I$d1Dmntajr5=7q9fu&pss zp)MM7e!Qv(d5`w~-Y+jiuXo>DsRF1{x^ksg*BsdNt8BMQzOe1EiWB{ng8N(8gZa8i zHr?N{Yk0zSEnE2sj#33cs%dttjh2ZiKGS-@1a*Qu=(4^(EiG+?(|G1-FPpC)f9U|S z@_KW^od%Uvx+3tfI$Cjkw!Ov7XvL24E^a&RprL4EBk1`H@QeDr?qRwp?gNOej_bwDSv^n1WQD-oD7<3|+Kfx9OA|AN z^tv3}+;ZWkJ=KCmZBzA&X&Mr=H6S0MHf0CiN1qE8 z4LEZBHKUNpn~N!iKDKJ8iB?}?j%^?m2iq3=zRN|^orc-!<Wg37RwV@(oi}Qi=EO-Q(W^(sn*XWaex8 z^72jW>9v~Ir%2nt<5e=P41y({H4q{-cc?aLJ)hzGmY=D0<|TG2}rdAi){2`Yw$k8>Wv?lXU5u^*uUWcmJg3@@RVGP=2DG)L!bzP zbMc!yYkj2rt|zQgojwcrOli*LP3c>9310GfCTNEDgn5Gpz5gzy4}XHh5IP zA6TKb_ytejJ+zIg4SZZ{=enbcK??>CqQ=&JY^aLyr=esN7Z&cU`|FpZ3%&Kd6Zotp z>%YJ~SlzCJdbiMh|B`V;SthN#ErU*6H)=+v$C@CXt!ToUNC7+3Ik(|UYHv2 zlSTEU#91$jnC7i6#<4gK{sly(F*DMn4ooFJ!hLPsut{{5|1X6+>sC-rYN z4;x&$5{-@*AaqSFYz3rC$gEY+tU2iza-kk@)#Jb@o|~`_*hFe&`bEHDiv-t|5nX_Q z*w$3z@L1J2liAT04-XF|Y3ciQTd>87fD1HbzC0ISe=Bg8^SZy4HDRmNa#FPmtLySR zRIMYz%nS#o#Tk_K$rlK*nANpC z?81vT&z}7uA1taG6B83bS7MmrGw*K!R_*chshW*VD!+h$947-MLm}V3r_Y6=6^wFU z86v^W${M<-X<>eT5O|24S~1(sY-MpI(W|nHoBoeK&R-2gUm5GjZd!FjcP*4Oyiy;n zNazAOhY29uYg39IRnboO(AU1SJR2-$uE**<^6;pA#FrZliY&r&xM;9zZS_4km+X$$ z0BEy{p;H4@>Uh>Bv%2upTfsVHMMOlvfNHS8^{Bbq(l#Ns*)4}z(!adeKhhs)p$3?| zek)7-$B##Gvgapq=0f=S`BQH$SViq(0xd_?3g3JBDF^nZE>gY@-)G-p*Jc(VW}g7a zk$Saej|^#aIu3obIjf5!=;w9%o)VEzfZ7DK#cv?kznWYTIHz+$7le?-d0NqVY3%)M z<|)lIlL)f4wdz^_MnyP~2>r9;Ed0;%Wf|H#ByS}vYISr^v%P}ep;8qhfg|ID6jRdF zq^=sP!rAZ)$IdaTP}QmvAxle5v`2a?$4C@2O2&qNq0VWi>xntd#-nY=sK%*f?g4nE z@LILpsQ^02wx95g8VF@MPpFU5R~5gjrlvgV&GWKrk(Tt~gE&$_;r8v@ z$t|WdZCb7?GX~rKKr()?2B)B=UCsEz{(6|&ZYim}X(gXMk&#)V7cMdW^9#L>iRrvK zRiU)?H?5MYDg_*mUwdSRE*CXpkF5meT2ZZT)eflSr#sD=&kWXtm)JIGSwDHo zBB2rBj}5f^C5l?u)zx*ZB_*oFw(Y%z`uX$cjSWe0q(YjQ=Pnq^he~Q^+l?jjL9`IH z>U}`!9`-pgeiEzmc0$om5dU%SLrxAY14GPsM|PQE%8-TY5@BeBbRv}fY|mj8R%JuH zHPE3}y4F@g(P;59&V7A-#=t+aa&pQ5{bi#2!Spiw>a||0^Y?Gd;rA~3@PJ+7e)in{ zySDrnzA?2s-=vHyzRo(@`XXAB$h@~7RTOq zjpj9wBu6`J4EL1O`1eiaRE`|{QOw!|RxWg<xvu>&Mzt|3Sjg~p1T>4 zhGWl@!>L!kZ1cNEg>>@taHi38qoxI^8BKh0h$fLwO9wg!c5$We4;)?-)XlL(`?1yt z0%h|zu%_~9rWih1oE?ip-#h0esP~Z)Wq9GMh^hK|Zt=O&j-?m*q73ntG~<$zl)3r3 zs!M_54pz^pG%j9+awu%p$|h4$DceN$ifcFddmL6>(o#{B^%tDJ% zXpGCsBK5|N*X5vbQPg_sU#(LoG6~T!d$Z77i7uGqI8zG_q!ok~_)#J#WJnJhwZ?}V z?`Fq4;y{+f;t^i~Qm!r!3xdE$0kj*yPd2^1){-3IvbtcT`c^}gTP^-PQUGLDvG=-{ zmzTGGCB9Y(@_q>5-I@o@4r9u^YiODW-1KfHSY5z(ysh;9AyC5 zvqsa=fl$r;^77W$-|JWB`{Yv}cF1;e<-f51E^TFgNAZTQEbIZxD+mx$vxR_m8ln}$ zQ&U!$HJL17?1ZD??r_p6?LlOFi{Z_N>pM8 zkqsBZHvOj)<52V)3=**>#|mbzeEs@$Ajbo#@@~|=yDU*GEmc9&Hqp?iJ)%1xXxf~# zr>V^}eOrYMzT{T7h-wlM$Q(hN8bHq7+}vmxe~L@VJ@pbqq^RrhluCf+oV7^y))StPXJ)R}Ewov6ND?#u&Zx!ev`j>Z5P<(Uq1rVN; z5=A29N3hV~pU>Gn)ER%yjEx8JiJ*%WtYLRFNIE{}`FEMn+A?rngDivHk){phNKOJR zfD+VWL)24B``sbnc?wTu47X_$q#1+#8eM7E)MI|bx!u}}JOw7FMQz5-*y&+ht&dzQK_ z)LEq%96*iziWhPQz<`P^8t=S)d?dHr?;@i1_D zKn9r?`xP32xos+hnlkoaD0MVb-83Iy^N_?$y|UwvLVB=~=6CutfQy#;AS<^X5lUg- zVT-BDOM)W@!#%kU9z6dys^YX-8cEE{Ek91`w-IX9X-^g(HfN}T*x&|(twa?v`B|Rb zL3s{$-K_Hw!DgL*jGq8%v-#cGI583g`Nah98HzIG0_H~gcDeUZa8+ZJP65v=L-o)O z0q_6l6BMxA;e(-B-^7G&Zx*=N83qQ1(vp&DAQKw^HxtMKyyrlKzG|q0#mM>c)CAji za{f&&hR~Q7XPR_7n1KLaoxM0r9av$gtfdtM5+Uu$@)pvNNPJhGYu<1}oRKRt8Xg)2 z_rZhJm$I>U?Ck6^qH9bdA1|`|SEZ)1IGk92?TY1Gd%B^lkg>^(7wfu@s`*M(ZCSP> zJ9g}NQ{cXp@Qh2BE`bI1gi2PTtc@1x*x1+@7k^fb)vK)SZZ=IXGe2=ZZtq=zV&0L> z>Bhx!H*W@3>=Q_{nWR|q$=NF9)*=dIY0983H#>A^M> z;xt}^Da0FEZnfxRch|=%MNn6HAm;n-RCv!+aG29EGiwhzm}g98bmwyZ1gID%soe;r zEQ_ER`GQ&^nri-cb6mv4|9JNMKmQ%^4rU662SiR2|3gJ@8A_9#(TGkcj%ACkyEXab z&KBP*Zfo-;N7u)tZl%~fL`eU~5qA(fbvh0p7G2Y%_RYgRd-e!A&5j;#1OJo8F021N z{1F5yI?RT>u#}M7Ec$(Vx;~{!G7e37`18ZSdag#c z7-TphuWUn+f#ymWW6=9D@ZS;V#erIAv~)M!sa>@$XGsUcCr~ z(Q=dA<86Sdt5HO|f^MpcJ!Bg~AFt=jTizp+H4x%NB$%A#$+F4mX_dZGpES#FpDqu~ zAucllE`Y=(f0Qt#B%Ew7SnsXioA+~sdFsC!)!-MC{y$7~{{Q<}*$z`8UO^XXcy(+Y zWX8DaMFFGAtKYxolYt-U2OxtPl57Z?T^C;Kl~q+WfukgnYKRV@3S^yb-Z7k10Xoz- zG7<+l3pn$-BXogwZ#q7EB474A@rZ*d>sAy}2G39Gj z%E_(AWi~PMYcY?#$lu1mQ^U@Pvigtur*Q1pu|o3~etuCPY%$<*XJ>*qXP*AAw7dS29 zIDH;UCMRJ+aKF{9A`^~078 zTSdv6)L#FG&%@*Sze#9W5i9>k4K(#LI)cd$MQG*Fs9oH})ilNTlt8YWAuy-IQ^ z9Bdnoi$Pv2nSjg{c+hf}#;?;7&l7DaBQ4S{kZ@D_!&CHZ2^4iVk;Dd!x(0=#I6U!B8M& z`LOl%_j4UStS%f_5y8M_3^ECLpDF#6X=pP2Z8rezV)r9H@0Tw*WF{vkm7XvPwfhdB zFDtJs&d_e#)?I5iH90wr!2vgT0}fjW&MocMRdm{VDCq=?4rmj-5L>WMY-0o;#_yv72Bz_zH)c{b7Y&&KJu483^_E z4sBEzmJ&IR^RK_c%CiR_O=9K75D-k-(%%xOl9;<#+Q&d0ubr)ycCASbuwHKLWZH1N`w2%FFnt+g&)S8Xv77t+1zEQ_H|$$ zkfj#S5G62ozI&5jdMJ8_Mec(1T&GiF?#isDwsnONqrVp1EkojsZMj zG~GQt9gVBlGg?;GM5Jm)>X>rWIf8L) zSmO7+A|jdft}zjMDM{_^T3eWooW~HC5#t!m6tvG1WWrzS!>!#qzP36ibwE2y1?meU z|CI-7i8^mD72MAhylb;M{M2T3n-fZ3+Vvi3zjRix9JKN!+DaHSRJ(3YJ;D3WgW}Z# zQ$l%Zix_i(fsIUjRpQhR5F^35^_#1qs0`I^_Ch{I!^NYad-I3eO=o9FH+%hzp1lE= zA8FEc^HH z0P1Fo7lYHX%j7LjK0=+afy|#RewS@#sO~g|5`JtIq2T{Zv$k?H_L>+4gt#mklT!jK zzbHzc3dq2aED;Cf43&!HSsDM1<;mSLtT(^k)(lCihN2V^ z87V8;CE++bdU0WC2}>Z8V6-Kw4IBK%Z_Am@e^NDsISj59(W1J#Iv5xIaW)+hV~N_? zjc54LYJ`xIhsmEZKR$co`xCiKl_yV~^2Z_q9z1xU#5^{s{suC>f%hPeOCI{$S@H)% z=W@sj-zGPsoj?E%08IJ$JGstF0SI0{qj~)8sT7b`;MQtnx>g^|QC2(`za%!@S&(G1R zoQQdP*Z&14{LcRps*UZn`w)+Za+k)f zudUCx4=7Kmbc9~A1L=<}8OfRJtRtRds210t9+*H41{`ajJ=lUrU!5MTDJ?6j!|d@D zjxY|WnvA{MMP;(%#3BE~UDbp+`dAtCJTeEB4?3bKWKv&^wl@P0!ZkELGQGWd^JXbe z6|wvI#y*ZW1G+ko;>s|9e+jR-Y^6zs?gAy_d zUfnH&hE@lFL69Grmf*3#I%Dm=2QUxrbb%=j6TV2)Ib*OyQuf-cGC#pTFpb7W&!x@AiP{>?NryUsAh7|!uU(q>XxQsH}C zO6SX+e~nEfbJnF~6x9|};RCw4?YX9N;~gHJp6~6$PMhp z^`mH4n%$U&yBTrkl8TF09j*?$8>iLFBf8^UTe?U#ZPX-m{rtbUWTzgU_7)Y5dF!p{>&Qo%o81JV$WNk!`b`+Gn|(6W90e-!Bi05@muUAU2GsKtwZhoF4pEzX0Xo3`k@nOm@+D8-T!L zYxBiY(l5#S;lDp8qtHZKj3sS!ET4GKlOo+Ph zB&i_EXFxE;f<}Jy6qCcd)|_++&hUps7IB)$d0+Bt8pl@2`B%sh7{G}6iC_@O#c|3@ z&>M9zZ*3swf_`CK>diUppvyjlF~e}<+d$%Jab3NcGvED)n9DY;yiNz8lYe>e7z}g` zAjSmW5k^nyP;&y58Bvg26!)M~cW#v!1v@J5WHJIc!!NZuAO5AHLa3#sr5}lP2)*zi zkdaVPP^giLmyEo8+C)=~^8TKoA!ESL{Y%OC0)HUEmoP6j`=wcQb)GzV@+Fz*`r*RG zE}2O5IKPVhUzTB#JeZl8*^liw46#v=^n1KfKPYL@PJJ|}#~4;JK;SCKMKw)-eg!n{ zGUzL|P1?%=amSp_{bhk{>^^bvcKEB>{30SEXhrh~W-)KiC<~b=1cWRHw9y$|M4@Gr zk@kA{^r@Z6(|i!yoic_n6U`dny^3JrnqOG($1b$^Vb0igh9COvJHAbr;ND2wBzXdZ z7`v-cAZDaz`IRT*M#$bTZ2R|%@l1eD6m)%gxPAXwXgcK>zVsz^K(RVo=s{Zn$DFQd z?jua2{dHXy3eWK4PReW_^6(I9xd4%Rom)Uc&w}EX!&A%azycRoBrYWM1GK;66T^x8 zn3)j*7)s%b)6L5r!qm1P7j`%SgpVLrYkNcotvbvOrAr^R%k=S~eNs|g@MZ)cqIN+k zv&OUm+5k|xFqmlC#EWOo^p;mvDqyW+dfJfVWMB8e!Fp)~3l0DdwFbI!pM$lud{tYo zd?AyG-5*+cn;&{gE7_lHv;ifH7b{&Fo-7hfzIotQ(q0A2@4U(Z21c<_?}^K`AQvaO zPguBdb#ZNVVvU?)OSXNYa|>SaEGTg1_q;x|l`i-;y1g8p93ltqw%XA%TtF+VbqFV> z^6v5}FlGXQlyBbr&Q&L*yN~|z%P+IMv9KQ^qOO5r(rEt)%3N#P zq&;AhjvA+gxd;)U8vszyJuOH|!p6=aLwEow;#a*ppZ#@$ILXnS+K19tM;Dx-lw{2` zYO02PVqI%*gSWT3`nt53iiaW{%%CZF<4B)DS8+)RFzZU<6o0Cq0`VMFu{1xADyE z`OeSq1u(8IVIhc-HbeDi{5x%qB0w|!Zz^-A|(Mk~>AXcs|*3aJH z{JF3c=yi=)m<^OR(qTF~J7*Kh>g!c(hiVIRtI!UK<39!uq#2t6V4T4P z6+4=BbXc<1)jS}#Yp`xP!dN~%6cvhApnNJ_9T5R7TN^YW!&F!+lcU+P5a?~|G#ms& zz*P0Xx;Q$EFI80&UQ0XDI@{XXIxBFK@lPT(?cV*W+78l$ov0>k=edi++;5>(VAmR; zs(#yH{k#Anr-xdQCW9R|$?l zz|Kr!^2D_SFj5nI2sk+j*Fj9W2CxufQlL&-fch#YD%E{NOiUBW=!h}#CbPpZ$HUTg zq+P@E$G}Oe<@Y~~y5jCsb-K;b(nUpAwYZJJRF`6Z3e6VT2g&lwsG@j6^zKG-~{k3vOJLmX;Oe z5)OgUL}+WVfFdT)5*8N*Lens&T3MNJMP>5CjggqkZP6D~B4IEMDz%1%A6TgB8;e-n zCM@CHxu+PVF?*yx>Z-f*3oR;v^}HCbWlZr)h;ioudF!A|Uekq{Y<$oA9Mng`s+{o< za>uD5?8JsBRwL#1f!*Le-Tkz8+NT4`68E>J}yCTiFC%E^Ts+>wj{ zR6)$tJ~`ZZwJQq38-cbg4!zI!cwPkHK{ttkN}jd0x?~FoLzmg%rv6-RxO;9G8vyg< zyF7LFKX>lDFlt}v2H-%DJ%WRK|Nhh1h1z=?w+ll1#ylwhQrqb0=;evMg$=j4O*xuy zMQjIVBk0CmE<$I$a&eNE*9vTk_IirHhURR79>ZT0jZ`IT1E^xgJ9pUo`1u*JKGA@X z?cn4j_PFFl@4L9gF{)6U6 zwqvcTD3Xj)E+3%Cu89aWzxs%)Nz7SK6@re0k!wqMq}Llr8QkzLXkuVH$pk21*wxh5 zmR-Uv3eF8y(@1bJDun0`(=L~#w_t|raKla-4CmcM9c~UdLjv=7@PH#(8^w&MkK{-Q z-UFRXE*X=p11V+F$%8&g7{p2r*FzM2xa;Mib*Atw5nJNIL_3V2XvB?X?>p26yL$8Q zZm`9k%DEI-_VrNjD$Rk`K}H%dGBm+}K#CV}@WMs9P?q-&wecds-GYYYI{~n-qUn*n zBoTEjAyfKrhs_HJ;E|_UomIfpXPwk>^u#C&8y2}oV*>XYu&>T*1}5stMA#`wJ%bGx zyk(tS%Ypb)x z5jU|fj+lB7#~}d+e4(CkWTb-&8nEv+0%g>rZRaeFXS=P|#bZnq;?U2~0ipzp8sxeh zVtxkC)D1=Vz|LunUL`lshhw5bYDvF^-|i~lHcg7O)+k{VAW@qn;^(bM@yf_JLbeAz z3JDxVq+W^HW__ONLp1q!p1eA(EdFUHfp5m6es$$jRO>G?|eKp$S-0G=LYm0Db(#37;1) z!lA}NlhmGdQVn$)7qP`okhY-PKJ(4c7Me(>2LZVXL{HiUT&(*Mb?#2axVFrW^^i7$76hp`bQ;)(o0qrp+YKu9 zHfrgPZmzz@zqa1mPAxqThx?9f`Rm~vfMi9-+vtRjTjbxNibO0F;TD#laqZ_fZ{EC& zj^?OCIF$9jxPpsbDpwa!CC_4T_0YqEA6G^M$RALuAmjSz=P?)Fy#|DPnu&vEk``yw zKa1kX0NYaxiYLLTIC5dU9e2&b%7D}wr;Q7C)@mm^?(&@6jyWL^lOY)TW!$~2K&j$$ zTEz%l$g3Rb$mHvZOBpAnr5W*lNUx@sxSBQvHtY{Fp*{PODtru8cvEm&;oj|=R>!3l zdS6`by4x*zf@(~w5;|@Lz}#72YI#IU1+#toCCTOQ1;<_Y7wt@eHM|aZr>Cb!9{|G? z>XaS?a^4h}IWA9Ofu-%(;G(XsE|s?$4b$TtZKD9$)f}IH1=cv|ReoZtgiXsReL4d~ zM;)gzA<`dqVG2)P2vTy&@it7&{2~c802C_%?!Xn9m&olvG~3$T3MA!ONKY|P44(H| zN>YVB+;sX5qqWO##)=a#wv56~&$e%0019mDnzPMBXU7NNRhl-lj;w~wEaJ^jy~=Jl zIQV0pX^neDFHz9i-V;s)d6lcas4#Tl^^Th%ovv%nL;+PsIw?cV5WxRw!V7=@p`@`w zSE)j0bKHS4M;~PJC5@>cb00yZO(Y`D5Cy2;0@mahh(ykTP(b}rTU)Ax1O@BG0kGV1 z1u&K~hKgkSW$Kepm0>y6%25g%8Q~~H!$1@P(r(z12zE#O4mz$Yw)Uqv>B&YtfuR~I zhH^|-)5XrWaNUrR2Z83j&NmI%rKEHr9eG1jC3<|+oEUHv@?{3Mwv=&A(%|JEW*vp9_&B6a}uAHaoLnBWp7^44@P9-CJ#c0iv7O1Es$q_^w~*E^9pfb2(^Cb!TC zxaewMM(Lq-+`PfV4#Ms*;6oFNN3O5@_xI=5wjSMgewWqrOyV!1$ecQN KGU2%1o&N{&tP*Ab literal 19081 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 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png index 2933e7eb8b95520e686c094be0a54907613e4fd0..5fb0f14eb2f5ecb21b10b37e3c927d9f3da1b7e5 100644 GIT binary patch literal 14349 zcmeHuXHeDYmnPk&RvT#>BNAE#R1lCP8QO?fa+WNTBxjI#+XSs5ASgMAlA}t_DvBa- zL83?!5s)l7!#;1%*4E6{%+!9_FS~!MD7jbs-8YHZ zSBO{e_#aoDo$Z~(`S@)9*AMX8Ihym;#-6RmL$=yq&~~Du+s;V7exi$v-bY6#;z2ok zO8r{&SeLukee<>T$@!hZRjhKOJM%bR=w7+==}y3Ys}}LZqb-eTSCYoAs;4JK35efx zO>$O`IP|{3b=2~1YkA(q2Ul|Q-!L8QU0Uspnszd==@+NCOR)t?vWm48O)M|z&1+B5 z%EbNo&tnyTox43%g1_lHmw&-N>7E5NY{g$A|H+Fid!N03jXvVmQe0bGThzyS{2B23 z@4q|Gjke3j9d_PhkGDVP+vxg){X|C>^wgLBfY~B*NgG~VW{Jlx>00~uiAzaJ?qX%l z`ts%S>}b1Mb#=9Sqr>Faw;Wxc=O@O-GXMVjmra{Da|sBjIt|oThe+$>S#rq8$aMK6 z*JtUMh%YOOxD2aH{dl>d*uM94XwB68eErP6+glkqzh@S7e+cowhmC89`6}Ak*^Pb9 zlUtq}3rS8+HlszmYq2CHCYoMN*Um|D9q&xFt60_CzUO#DbE=xK=iI1un4rf^G{-)B0;%ggI_^Zo7GsyoYSSFffp@9>*GA|%v2 zCcLn?Sk(MwaBy&rY1?a$_ja3lU5@^8jgM|VIWEsrN?cs0hq_*trC0Ri)XmMuu(h2# zck1L@N3ai7-9Nx2;hMoDY?;u|pj;OzEEk;Xv+8k9RyN&fkd~&EZIJIRx$xy?q=4z& zwW+X*mDdN0hPz4%_8hlq*JU$W1fdg=L7VPFLFE^f`*ea7;ZmT5zs zMLCNdJ!@vM)HQcOw{bmVe|`#ulH@w}d0?u)#;i3%d*G3l0e{uLkl^4eOhQ*L2QZ6W zY0cC%zq^OW65j_K70Cv&3ZFW4ir1TygCk-K>$N{RimwxgGAL7)jJ_<)hc9HzL=C#(Oc;!5yryIY^@kA+RGfmU**4# z|Fzf5N7<@<#t2oj;E<3UmNPdu)4%X$-4w;%RODnHmQRb3h|=?#nacIWSrz5tX|-d* z-{${)%;b+c$_0eU7kkX6y{@c8UNnkb`*9gRDL*+mNi*KBrmE^Z`iVbNuSgYf`|-)S zd+ZdftReo4-?yQm)c5Z%w4|sUE;uFHG>6+6p08LhV;@S6^9e>CBq_#lQFL<5?tcj7 zi85kkU|((P_(2}kts5kAnwz8=6!sO1j-CPN*QXW@(U*BfpzjCX5;p_In@j1m9 z@#=T)WP@`Z`p&zIv?`ptx91VN%XnwIse75ntm7K%?%j#kH*6VxAj|4tYh?2|HuN+WNZV3+bd*9^p=f_4b8#GHVZd9dId`Gmjq4)PEZbZDs1rW8L<~{LuDs zFP3pvsZTmvR9`K~)7e)rpD|zJk0}tWx{A`0rdwd^J2%vn%+1MJmFT^?G|Q!#aVhKG z=OU-%pEqm}%=No&(6K_cAN0khCe$B?6i8yy;}+$j59AiKV7j{XD4LU zdOXjfsmgT!8NVGZxF`-&Y8f}>;>C*}1QG^AD|-t|77fe8j|hivUDT@Vnv08hb#sdZ z!zl`N)RsYJ<=OP7fth#X16i}mzezJ{I}DE47mU1W6%X20W&ZPD%d1c1IN!c`b9HHE zh{l&2BjG0AVO|>^-`uQDX~c6}`ae91%NxCQYvcX>g69v*2CQ%-nsT8g)yu4x;{WtD zN>kUo6v9uO+PZb?#S0f2szZ*rOnsxQ{-|WI{P^UyG)f?)(LBz3pz}(@lXKg7^o!L| zms%3#!e%C@>k>6S3~bUFC}dV&-`wFcEH5R603Y-H)fTqqCMB6nUj5>$^|4a!Clz-| z9z1yPZeXBR7_UA+L)&Gj@f>1$+t#fPy7Vn+8cj(GQM(XBY}6GM{P~<~5t62nK9K*v z71eA*XW1u{eebNAQ&hIm)3?+`iD*1MPtRjmu6M@wSC!MJZw$9(^BMbp2;~P|sbB731~U!F~erje16 z$LegGFbdi3W2$F&b89wl=PL~|N7>9VuV=mO>&qoA-CeYN0_7-k-I`g#Ro=(PhiuVF z%Qnxlg`{*ri}HV{msGLZu5rH`8Yt4Wb0@=h_#L)$wdonl8ZvaJcjw={>(@=atCxQJ z5kVKk_M(QT^T96!Vt0!FJG}jW=7oOm3NPJz?j3%8d+SH~`a=93fw@TR6n9WMQT5FY zgyoL|qXt{>p35yooWdp9?;HR1;{T^J7(ZzG;o*bI-i5a^_@;W|U?=1FoXeLyI(t5@ z=$=hrIC5mL+VS3AK3)o{eNaI`!J$KkcJ14j0^(2?A$UY-38!)N`!6x; z?>ahkOI*hq%e|Kgv4{{f?{1lDY-|+BZOPD9lW-evF6i+|-?V+t)#2vUNGZ=b{n?wN zi;IiZz4oHim6esL5_XVrxmz^(v$C=y%M%rCkPbpu8~!+V{yZ1TG00g6dsm^u8RK^W zDB$-Az0}SzqXf5R8)kq1eih6@dv>^`CO>cso0qa$lKe-*wW+-$eMN@&kfDXiKEg8< zVjZH371c0$3z0L47TolI}|{eAz%KJ!q|ETUN|KT~xAa z;zf&**34qpvB)P+o;1gw*+OZ=|H!rLktP)CT{&136Zk4t zRR0Z})TFgG)4g2vYgnXa8I+~{_+d{e$amhsDtQS+Ud_v^wA*8ZhoXA%;$1v6346B$ z4C>@weZW5S`u28l=kGz1Qc}D3?~h1-d5lsOF5mGV$x(&>r{Kn0szt+m9j2Weew7Yd z)5{ABoi6kd6zY9js$P+!DYtjm*oeK={=MUtb0yv~-`;v2tY|xPYC*npyKv|BiQ7M` zoH3YDqTiJ4Yq-43A7^DBo)KK{opf#TYq8hj3prho)0xS4Z0UeK-Z3eUnFer^-HeQV zjpYy_WwWiiI^|yOzWt!k-wP^MGeLj`y=)XEB-0bQ+;I#Ke zqFS(%+z~rZ+=PK^(QRY#oSlq}PrSnQH|A%@VR{(aE z|Nf^B4$BVMe6&x~%#1u~^En|U<>=}{Um)$JcBW3=3NJm~U&}j6+H&}PR<04@5+5I5 z>^_}j*_;yJUlV5aKIkB#SsC2U)L#WWG0%CZkvYt5;fK+=vuBTTaGc|~_^^Sn5%5zT zws)(;pPm~}O-~cX5na-pu92REAnbQCg$$;CDl>Tb+>?clZbj!A`HODx?tdwX|7)@Q zuYdXPtb~7^&c99vnf2e8P5&1oWIT39jD>~8qCOCxPMz+IIVuo@;4I1w_tB#lKo=oKoz zdi84C_U&r-_VBP%pb%A{c$#6kv}Eb)0zh6k6#>pv?CqZcl!aY}o0+XvYYf+(Kw=yd z5>kh34`tUcay*CntZHJC0D#W5ZWpi`*-1zD_)q>#wI83#-uLtKYlnd4uL_Tq@{BBU z8e}r|hl1lDY0DO=+9!xIIbADQZxT*@`PWZLYRQV6JUn%9UZPIg)It^B=dZGEfAKcg zw(B$A#6rXzzTU#K5)#wnWv0@kPmn z@kU^|5iAm}Cc0LM7az$3=W3?nVCD=?|2rS2Ju47rvl86`avo#{nR0ttV#X{9b{fp3 zFm|Gtv1*ukH)wG(*`YkT7lSwdy6-XeWF}4pUiSC)#^dv>P^o#FU?C_36NUIcT?Q4{ zUorIsc0C3#dtgOObnCCLPEh;pMVm8qMX-a~_HyD?jCYDP>2Q#v1wg2^W$Cx%S!q!k zKRn{z&Bm5p(Cr}?{4hB92_WFui4zTpYcMF3Cd%ex*@s?U-(dOaSudaVeMNIxG(naL z%l#DtYpK_nw&~C>cF71UpE)%g$26YF)aayaw$0@G%+!?Q+IVkoZ>MRD?ojU!5DhN< z;#}BTkBlP0pW2CRWSpa?g5e0wpBZ zZNgx`aqhLrD=pYghbc@5bvOuh4$(y|&y3F4bma5Yht6A##4)ABKW+)?SykI0yenZX zwRbHw{v}IO#3K+KV%QuIv31nLk{o6m{y3` zbvHwfw-mcrm8~s}kh>&qWO(>Kg*a*bs(qA3Ape9%8Io;Y9G^R?gytxP*l@kOi8TE`?VGu%u(t)%%`;XK=xwBw2~1@R<1? zPpl>C`Wj8Y18J#_H`y&f1n&O*_j^aiDQu{@f=bmdv_Dm~Pil3hiCjZfAX_%nI|&6W z`=5jGTAY&9mBHdRg?jGbUUdnV^2~Q1PEDRF@s|{_YRy^d4vmgI@LH6EALGu7CE6J_LTckn`!n-i}w}13^SN6c!Ln~fL;Na}+Y-IU#;`&TT zDh@OG@#8-fqE6P03B&g~3Nska!M1JNRIRNuI;?_hSq2a6+!^1qHdnCNSi!!yyv)tc zeiqT>=Dk15@axLrw8uiP-|pXjd;Id{pElj4?U}38`7Sr)lH1zDw;M9Lrt*-BlXP#i?kVqrA^Y~;UIoz2y0z8iE}csFJavdafBq`H3ZJgC z=g&vtoszuG#{TZhV+DvcZ~0`!n9gpuVjOc6{Kap&>w(fsDemj5^Qd=vC9ZYuO}AEp zLPO24#mneibbg+=!+6BMqN0MLsCcrfvpD_@ykmS+cbTUGj;hG9|1L#AK^U1P?6-sE zMYkPJ4pl-JTR({+>po>7_|K+()QR+jBL>4!z#=ns3yRCu*H;E*IE95-@dp6)b4&^{fvWzMno_njVO<(-{*z zq_n6uRV}&GpmOYdAghf5M2O@_AWzKvvpqaIDe@5li>*{tU-b$fZ;I-j-#LhqBQ?-A z^Hr~X3YdOy0-V6aq@;msV=bkwU*Bvct|WXi2dj!r)wj3roq4<0@am5*uY%c?l$0Lv z>WlXbLxkOjwj$A5QZ|vBE2LlMp#i|WsHmt3H?iyUIuU+A!1SvhpK$3FK0`AjwXjfh zWYuiWn;;eaz7u~oW*+c4u3wDq$i~f^@!=*>t8U*LPTk(#Qye4@RCUHu3fh!km{0~M zP)?q&u|%}=Btf)k+LccF>Xtv9UY;=46s`^DKSN#VV~c5{o1dL^@uVN}=U@63qSTzM z6o-Ro*jjJ_o+SzlF@zHb1)0F?*O zdFlR++fB@4CWV-U?^r$M(UM^jF!>uzny;-)wgs18-H=>8RF{cZzKSJ4DyWfDPE$YT zf(y$O1`JyDRozDmBpN>dEc|uxY_(Ba#2;$zBX$b$|8Q+ni2*mh-eiz&IKv?Ikk7kf z;p;u3Z;1Fr;2}zYTd5Zxae*s1dG-`|B9(W8ZJ%#Gme>TEzi1L6+SjO zfRnbJDKO|$04eVI@~4kvlt9dpa)=KsUXdN+Wo2dkoM#n=zC?U>#hMO!U{1O{0MRg% zA~aIIr(u+2Pp;)F7Fp^}Xpvdicv71XUM$YLw{ z2nSJS+n((zLGqD86a<}Sh0p3#=6c_|z;we3AKQu>a*mEK3_Qp3ytbAU9FX=Z+yPG+ zXrGGH^cXK1>@+xom7zV5XIitTY;hpUZ;tS7P^%SXRZYofa>&vi^^cA}@pX0;~^#~*A9Q?)fSs(fw9 zs$f<>&r(ApQ>Ufq(PFP3TPwtSXY2Zy^zx`+OSYlmZZ36u&z^LxY)zo3I?$5XyeDL6r#QKM&wkxqSI?$B3x+QZD-trso6kag zg05RMd3<^EgE;B+6{oVvssp4yfTq@TqAyTijB1EJscyw#j$?p9q`W4mItsTsu4wGj z^D{^@XDgPWbvjBT=*U$62R;N1h{y3WF0?V141+SApMLr&4b9|kUeS6* z%IWJ(=f3_SWs&5%`3{JYU>z6aty? z_usDo$fjnFm&RFj6}v3D&MhHT6wo8xN>4A0!w}3aUrOt+`UGZf(eU^>A>{hS&ip`I z+w5MnHIq=W2MCx>NOZ~Zm6;5;W?JEi^6P7>G3KeoYT!T$I5zS$+>WbUT!c4UjFe|9 zV515Gq9)g-qcvK>jW#Cy=Iz@ERHuEY+I=GM&J*2T z8#ir=2nzab8ok!mXig04yY=?%+e2M$JsQYm zb_-B(M^R>-3ZJr$k&?3f)3>*!!qXaVOuRQY(K9ip;}f8nsgtUauIc_F1Kqw9m_@`q z%NctbD6Oil{t%U$`~gL>0(?P)U5cHFV4+f}^vt3SmTYd*u}-qy5wj6tBAVgiE@`^s zVunFt%sbHOI%sJ1{c~P=tk+bvSLRRSYN8d}>BjeN-^;6x&~};pdX6YKw6L1tTM0XS zJxkI)O2m#cg(4>RzfKmj#_FK84y4|%0l$8`HF+mI0n*lG6p z=*B66JfML0sTVt2c%#01^gq(db?m?BJzXb4x>0!^p~tm@`3n5Y;^bq*H9%?V=Oq&R zlkv^q>e~ux5=a3IQy5(;i>~I!3mM`W?L!cYSgKqwDYV|8H*m}%ITfQ*kOXOz5Y9zS z-A7y+(W{`idW7#Ix=0yJcbn*5)C`jV6H)*zYrD0TQP1|&0%T&LeA^3CIgM-seX<+q zBK@B&4etH@_p^NKKlFWk1{3hT^4YVu&_7PASRJ!l)ZcO3cwRh6iA*lQOCFvXYKj;i zwr)v#L`Dptp3@ORTspZapuTw~)xp2kM9NUhfByOBnU@mzij5!MMi51;@3_3b^H1+pCqNywbW9M<18wt&fp$AA4r=kD%)?C8;> zO%_CHz&ZR-U$10fU@$d1s{wuB{N?3!>vy;iRVbK&Vb;ojh9jT zqw@U9+i!z|$?ZAja=`<%m~=dLH=ltX=vyn2T7RIzY2Ib&Ad_yswF=-$9ZW?dOHW%# zW;It;Rn;+Lxi&&@xT7HZV(9TyGBom0md&M`bxzU2!2zE09ZV^t;q7#2Xfak*`+?g1 z@Ji*O^;J;a058I`V;x%SP!!M!ur~L1_Ys13~Y&@$NER#A_(}@TFyCyP>k7po--M z?Z5nqo7Zy@*&sb|5$k?F3SWHP5?v5%%?ND$fv)Gqeovl0?Z?CqAZRGB%|OlC+S=Fiol?|Eh3nU^PtDDd zg)p784mT>B8Sm01;t*lw#LVW?^-Ij3(uBK7N=o9vlgE?A;KIbZ59|lJ>EQU&)Kh~! z=0;N|D%QKj>d-=N&Nh_Uv~lB6US37xD*uluDo>qJG7R-}fhO#veL&0KYv`qd6VU`& znnhb%7v!!fTFi-%xL>J3j@%-Bx@8`DOLJrC*gZFS(7S*Z!FtKQ(m>B*!dm0JrtV<) z1g%^yGRFhzqwSmS3_qj@)>2Ms#UxJCdF-?BSbL5v`5;V8>|$gLNuMNRP@oBo2$mLj z0`yEm7x+ql+%Q8AUuJ!=9*vd!^5yXoy`JS2GRr}TIk+}Go3tKvb;MBEed-(Y;7E5_ z31Jg$2A&G*OKlbEK(+hKVgi-UkU{E!tWxUP22z;pxsYR4NBTL<$adh;v6}uPkoecP zur^?9hm?pB2pJR=KbS22zrMwfsDSWe_T+e&J4)YUgz)z}M`GVQFvDhQdw5Ju$fA** z=hCx3k$WEBPDO`f7hCV+BMw&*@qY1WUDOU#Ul7R(W>E}}S z93sgv^#$pn1L$$#C39Q2ep-VjHj#Jr1EucMGo4QLsY-FuOEXPMn5&VLTKQ3lML9=gVN#~}+T@dycHPnGOFy_n z2Sr*pez}6VISd)ufBB1OOgz#INtL7=e>w@~T2;92ylI#T=A8zkvr)d1?0a7ifLzk@ z;pIgDEF)0o#X3;6MCr6*=xo<9IGaRDUl2g<)8_EmYN*vti&LiN9Xa*V zRu{u~ZT=a?k_ACicyQ=k?Q`RI(KdVe41}bmrIUz(lpiTLfwVu7NH>u@YYZLRd z@Hpl^eD*JqQ8f!d8;%WD+CDZmHbIY>tAsf^A+q6@B9{e_-mWx3bT`$q^u(MHCt;>} zR&6wJNHMkou(ypHH-;m=i!un#47y$CFBtdasfNgDZ4bqO8#y14`pHqvkm;N~qzAVK zK-o_*!j2{rJbf$;%WnT zx?}MZq;q+BIjt*3#I~~mc+>n;mLaT52X#pqipNpE!z#Nh3D0abdKynIkf$&Ad}WFYlBXfrG;?*Lt;CaIZ*GqfIWFRyPSBk342 zD~x8}_1kZMP-vOu0||4gAp2A+h{w zq;{G9I70nd>s5Y13J#g2}lCq**g$)_!C5>LQ5@Y>RiA z94+ch-LsP81&$KswN;Mh9pH|_)}Kz0I0Vam;N|T-JDO8(w&=&JkDfwlY3U0uX~#JQ%0V zx-HFEP*gz-)v?pCI5^8@qO3n$2?q{Ql1_z@g4te0L+WZ?zIA)BkskQFCQ459h#dwX z39P`ebKK`XAe>x~$R-gf?TZeI`Myf%IZSvKBeF+Ow@94g+hoj$5xI|GYl9HYrLOzL zNPFu5O&n-WSjXyg+5S3btl;2ay&Y;r)82=Q zd`|j|7hj}KbooTvXbO17b#+e!%B+Q_PejYId8?z7-he^YMELBFj;WnTu(+|7J4s;h zIbf)i!G2Es3nwCgmeV$U5k4l_`5;?I2bji(qP$~AaNnvZ))4rfUHhJf8Tx3WSEY)E zOAPfE=HrfR+O$b*P!3}h=qyFo%V6L-I02Yna$H7)Iw}|_lFrPZZC%Uf~=w- zj(A^9(_A8bf}6p*^bGo(+w~7wVieD^BR`W!D)SCBy#!gTU z`#BPf&rZgA5B2( z$Zv@qFHG;%82y4Q`KOtcYoSI_g(K2GF_FExJZ~=Ui+T3JQsiTVt+taWGf4g;$oYRH z#VrT~H_Pf^j=TQ;>JURQ(-?kK!7Q^12G)~SJ>1<>FFn6H&~a$Ae0U{h%VP5|+_DYIX5JqTG+B^e0}DgNt)7$e_1vH< ze%-K$L^&CYFR<+ra{jIiUqusTN*QX1IvL7{#3}pndOMkS{`&PRK|QJYPNzso_ZR5a zCH1Tfh%C)@*v%%(tWxl~Zmcz=&4^~kY9HIWGSW)Dz*ZmL`q!-S+=tTTsIh1q8j(49 zr~(a8-moDsj5O?>bacQ`+W?KZp7XXa%m3);F96X+N|9k!{Z=i21!?&WCZ>QRK84$^ z3m>GV57~e3U7szSZSoVOXp%jEX0#Fu_gCtI9JHuNj~7CB_8~1=?5Q8C#|8M&jgW#e zHlLoI!YIv$spHEaRl~DwhHV7NVH+YrTKmTp-I!p!LPkaWy7yZ>1t~z>1u_^+$USCT ziO+kVO~#-xbH2xLeMyUq?;<7I4hKp;fjI-*RU1&XQ*|SUGCx0cqsprQLR5C?O;sVu3=*pX4NCOP@0jjJCDnI(2 ztx|-*IS3hLdHH`VP2}MaS~i~{CrKG4f~m-0uULBpwSv`ilz$d1gqY~}_{vj=n*@sC zRyK-CVg)CQcmU|S0bqnoKkR~|P{gb&jktJpROK|l<`LX-40ENR0H#4V^VZ1q3`h6~ z({)x(%?fdTkq+`1n1oV#5zU#NQ}Xo569M_C_J~T{iy%Zke{5`Ql0lgVCoeDUmY-h~ z!eQW29Q!m}cC)J$7&uEs)!fR!AOed$7!fSC_LQ2w$2{jR)@Y@d$ADS%9 zPuO8%-^$C&i!_gF0X!3yUKo>h@SQ|sps{~+)}gN|0LX1A2F#ujfiC2UF&<oJ%V!8hG(Ur2E<#NY<91gJ-5nN)2yAYNq0!Jum<{{q5{_lkq6K z@{eG-yAK>lM`ZslN_|UIJnZ#UoG59Et-*V;0-GRGnA++Hi-p6`u!ou9=Bu*n4O>?} z01Ch3cTyVv-g(#=(;0(Xx5Iv|wZC)NgqMr!B7|Ll&qD8()5+&Z9*}WBGUEyBxNgGH zelNPs#O#D!{h` literal 19178 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 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png index a664a52ec36cb702d254a9fd7e118129f5dd5e97..ce676790b9f9f8a7d73f07d6cbe1d7cc70d441ff 100644 GIT binary patch literal 18812 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 DVT^>T literal 22061 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 A?EnA( literal 20629 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 OR24N9isWxR`ab{;gJZh@ From 6f7181ea274a387955f8f81fb99b203f7886a1d2 Mon Sep 17 00:00:00 2001 From: Mikel Cortes <45786396+cortze@users.noreply.github.com> Date: Tue, 15 Nov 2022 11:20:31 +0100 Subject: [PATCH 10/16] Apply suggestions from Yiannis' review Typos and rephrasings Co-authored-by: Yiannis Psaras <52073247+yiannisbot@users.noreply.github.com> --- RFMs.md | 6 ++-- ...rfm17.1-sharing-prs-with-multiaddresses.md | 28 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/RFMs.md b/RFMs.md index 58f6e490..de37008b 100644 --- a/RFMs.md +++ b/RFMs.md @@ -626,11 +626,11 @@ We have numbers to justify how often do provider records expire and have carried * _Report:_ [`rfm17.1-sharing-prs-with-multiaddresses.md`](./results/rfm17.1-sharing-prs-with-multiaddresses.md) #### Proposal -Achieving a fast content retrieval time for content in IPFS is a key milestone to place the platform as a face to face competitor to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user willing to retrieve some content first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content using the Bitswap protocol to ask its immediate connected peers if they have the content of that CID. If this process fails, `kubo` falls back into the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is currently set to [1s](https://github.com/protocol/network-measurements/blob/master/RFMs.md#rfm-16--effectiveness-of-bitswap-discovery-process)). +Achieving fast content retrieval time in IPFS is a key milestone in order to place the platform as a face to face competitor to centralized services. At the moment, in the process of retrieving content from the IPFS network, the user first needs to find the content provider that hosts it. To do so with the `kubo` implementation, the interested client will try to retrieve the content using the Bitswap protocol and ask its immediately connected peers if they have the content of that CID. If this process fails, `kubo` falls back to the public DHT lookup process to find the Provider Records for the CID (the timeout for the Bitswap discovery is currently set to [1s](https://github.com/protocol/network-measurements/blob/master/RFMs.md#rfm-16--effectiveness-of-bitswap-discovery-process)). However, If this process of walking the DHT looking for the PR succeeds, the `kubo` client will get the link between the CID and the PeerID that host the content. Thus, the user still has to make a second DHT lookup to find the latest public multiaddress of that specific peer. -Each public multiaddress for any peer in the network has assigned a Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was initially set to 10 mins but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetches the PRs inside the time window where the multiaddress of the provider didn't expire, the provider's multiaddress will be shared among the PRs so that the client can fetch the content directly from it. +Each public multiaddress for any peer in the network has an allocated Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was initially set to 10 mins but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetches the PRs inside the time window where the multiaddress of the provider hasn't yet expired, the provider's multiaddress will be shared among the PRs so that the client can fetch the content directly from it. This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long they are shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress linked to the PR to 24h (same as the expiration of the PRs). @@ -642,7 +642,7 @@ This RFM, which is an extension of the RFM17 for its close relation to the PR re #### Success Criteria - The measurements should show that the PRs are shared together with the PRs for 10-30 mins after the publication of the CIDs (depending on the go-version the remote peers use) -- If so, consider increasing the expiration time of the PeerID-Multiaddress records matching the PR expiration time. +- If so, consider increasing the expiration time of the PeerID-Multiaddress records to match the PR expiration time. ## RFM 18 | TTFB through different architecture components diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index 36cc8d4a..35d435fc 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -21,7 +21,7 @@ Currently, content routing through DHT lookups in IPFS involves two different st 1. Routing the CID to nodes hosting the content - find the Provider Records (PR) in the public Provider Records DHT 2. Mapping the ID of the nodes hosting the content to their public multiaddress - find the multiaddress of a peer in the Public Address DHT -In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PR are stored in the public DHT. However, in the networking layer, when a host requests or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: +In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PRs are stored in the public DHT. However, in the networking layer, when a host requests or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: - The first array relates to the `[]AddrInfo` of content providers that the remote host is aware of. - The second array relates to peers that are closer to the CID from the remote peer's perspective (from its routing table). @@ -35,25 +35,25 @@ type AddrInfo struct { } ``` -One could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? +one could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? - The simple answer is: it already happens (sometimes). Each node in the network keeps locally a peerstore with the information of each currently and previously connected peer. In this local peerstore, nodes generally keep items like the `UserAgent`, `Latency`, `Multiaddresses`, and so on from the remote peer. But most importantly, hosts keep locally an expiration time or Time To Live (TTL) for those `Multiaddresses` associated with that peer. This TTL gets updated or extended each time the local hosts interact with that remote peer, which generally happens when the local host refreshes its routing table or when a Provider publishes or republishes the PR. -In the current IPFS network, the TTL of those `Multiaddresses` is between 10 and 30 mins (depending on the `go-libp2p` [version](https://github.com/libp2p/go-libp2p/commit/c2821791bac7d638890accc98798bf4cbfe122e7)), while the TTL for the PR is ~24 hours (still pending to be re-adjusted after the submission of [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md)). +In the current IPFS network, the TTL of those `Multiaddresses` is between 10 and 30 mins (depending on the `go-libp2p` [version](https://github.com/libp2p/go-libp2p/commit/c2821791bac7d638890accc98798bf4cbfe122e7)), while the TTL for the PR is ~24 hours (still pending to be re-adjusted to 48 hours after the submission of [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md)). -So, when some node requests the PR of a given CID to a node that has them, it will only reply the `[]Multiaddr` together with the `PeerID` of the content provider if the TTL for the `Multiaddr` didn't expire yet. This prevents sharing non-updated records for any peer in the network. +So, when some node requests the PR of a given CID, the node that stores the PR will only reply with the `[]Multiaddr` together with the `PeerID` of the content provider if the TTL for the `Multiaddr` hasn't expired yet. This prevents sharing non-updated records for any peer in the network. Effectively, it avoids sending the client to the wrong multiaddress. -However, since the PR have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shortening the current process that performs 2 lookups to a single one? In other words: +However, since the PRs have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shortening the current process that performs 2 lookups to a single one? In other words: - Should we extend the TTL of the `ID` - `Multiaddr` mapping? (30-10 mins VS 24 hours matching the PR TTL) - Should we always share the `Multiaddr` with the `ID` if any peer asks for a PR that we know? -This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Ultimately, proving that extending that TTL to match the new expiration time of the PR, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. +This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Ultimately, and perhaps as an item of future work, proving that extending that TTL to match the PR expiration time, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. This will bring a significant performance increase to the DHT Lookup process, as it will reduce the latency by half, i.e., clients will need to "walk" the DHT once, instead of twice as is the case today. ## 2-Findings - As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending on the IPFS client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18, 2022) -- Even though the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping won't longer be notified. +- Even though the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping will no longer be notified. ## 3-Methodology @@ -62,24 +62,24 @@ The study uses as a basis the CID-Hoarder from RFM17. It includes some complemen The tool uses two hosts, one for publishing the content (gets closed after the publication process), and the second one for pinging the PR Holders individually asking for the PRs and for performing a public DHT lookup for the content. -The result of each ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR and the content of the received `AddrInfo` response. And these logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). +The result of each ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR and the content of the received `AddrInfo` response. These logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). **_Notes_**: *Holder: Peers elected to store the PR in the publication process for the CIDs.* ## 4-Discussion -As previously introduced, this RFM aims to measure how PR are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section into three different chapters, i) the result when we ask the PR directly to the PR holders, ii) the reply from those peers that share the PR during the lookup process iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. +As previously introduced, this RFM aims to measure how PRs are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section into three different chapters, i) the outcome of a request for a PR to the PR holders (successful, failed), ii) the reply from those peers that share the PR during the lookup process, and iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. The experiment was done for a total of 100 CIDs for over 50 minutes on the 23rd of September, 2022. ### 4.1-PR holder's direct reply -Looking closely at the ratio of PR holders that reply the PR from Figure [1], we see a stable 16 to 17 PR holders sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. +Looking closely at the ratio of PR holders that reply the PR from Figure [1], we see that continuously 16 to 17 PR holders are sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png) _Figure 1: Number of PR holders replying with the PR._ -However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around three ping rounds or 9 to 12 minutes. Afterward, the median drops to 7 stable peers sharing the combo until ping round 10 or 30 mins, followed by a period of only `PeerID` reply period. +However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around three ping rounds or 9 to 12 minutes. Afterwards, the median drops to 7 stable peers sharing the combo until ping round 10, i.e., 30 mins, which is then followed by a period of only `PeerID` replies. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png) @@ -89,13 +89,13 @@ _Figure 2: Number of PR Holders replying with the `PeerID` + `Multiaddress` comb Results are similar when we analyze the replies of the peers that report back the PR from the DHT lookup process. We increased the number of content providers we were looking for to track the multiple remote peers. Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see a stable 20 peers by median over the entire study. -For those wondering why more than 20 peers (k replication value when publishing the CIDs) are reporting the PR, we must remind you that Hydra-Boosters share the PR database among different `PeerID` heads. Which means that if one hydra hears about a PR, all the leaders of that common database will also share it. +For those wondering why more than 20 peers (k replication value when publishing the CIDs) are reporting the PR, we must remind you that Hydra-Boosters share the PR database among different `PeerID` heads. Which means that if one hydra hears about a PR, all the heads of that common database will also share it. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png) _Figure 3: Number of remote peers replying with the PR during the DHT lookup._ -We spotted no difference when comparing the number of PR that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact drop of peers sharing the combo after ~9-12 mins, with a sudden decline after round 10 (~30 mins). It is clear from these results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. +We spotted no difference when comparing the number of PRs that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact drop of peers sharing the combo after ~9-12 mins, with a sudden decline after round 10 (~30 mins). It is clear from these results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png) @@ -114,7 +114,7 @@ _Figure 5: Result of the `dht.FindProviders` method, together with the filtered ## 5-Conclusion -With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. +With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared for as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. This would be a significant improvement to the overall DHT lookup time, as it would decrease latency by half. On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. From 988f65c64a368eac15b41e47b04c869f67c58fab Mon Sep 17 00:00:00 2001 From: cortze Date: Sun, 20 Nov 2022 22:20:09 +0100 Subject: [PATCH 11/16] apply suggestions from reviewer --- RFMs.md | 4 ++-- results/rfm17.1-sharing-prs-with-multiaddresses.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/RFMs.md b/RFMs.md index de37008b..dd6cff39 100644 --- a/RFMs.md +++ b/RFMs.md @@ -632,7 +632,7 @@ However, If this process of walking the DHT looking for the PR succeeds, the `ku Each public multiaddress for any peer in the network has an allocated Time To Live (TTL) duration, which can vary between `go-ipfs` or `kubo` versions. It was initially set to 10 mins but was incremented to 30 mins in the `go-libp2p@v0.22.0` update on August 18, 2022. In some occasions, if the user fetches the PRs inside the time window where the multiaddress of the provider hasn't yet expired, the provider's multiaddress will be shared among the PRs so that the client can fetch the content directly from it. -This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long they are shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress linked to the PR to 24h (same as the expiration of the PRs). +This RFM, which is an extension of the RFM17 for its close relation to the PR retrievability aspect, aims to measure whether the shared PRs for a given CID actually contain the multiaddress of the provider and for how long they are shared. The final intention of the RFM is to discuss whether we can avoid this second DHT lookup by increasing the TTL of the multiaddress to match the [expiration time](https://github.com/libp2p/specs/blob/9464d50f4e08337d0be4dc15a72761b92215747c/kad-dht/README.md#content-provider-advertisement-and-discoveryhttps://github.com/libp2p/specs/tree/master/kad-dht#content-provider-advertisement-and-discovery) of the PRs. #### Measurement Plan @@ -641,7 +641,7 @@ This RFM, which is an extension of the RFM17 for its close relation to the PR re #### Success Criteria -- The measurements should show that the PRs are shared together with the PRs for 10-30 mins after the publication of the CIDs (depending on the go-version the remote peers use) +- The measurements should show that the multiaddresses are shared together with the PRs for 10-30 mins after the publication of the CIDs (depending on the go-version the remote peers use) - If so, consider increasing the expiration time of the PeerID-Multiaddress records to match the PR expiration time. ## RFM 18 | TTFB through different architecture components diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index 35d435fc..6cc7f125 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -106,7 +106,7 @@ _Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` co It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. -We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network makes some of the nodes only reply with the `PeerID` of the content's provider, and in the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the reply of the lookup only gets the `AddrInfo` of the first PR that we get from that provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if at the 20 mins of publishing a content, some client wants to retrieve it through a DHT lookup, and the first peer that replies with only the `PeerID` of the provider, that client will have to perform a second DHT lookup to map the `PeerID` with ntly of receiving a second reply with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. +We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network, with different TTLs for the multiaddress, makes some inconsistent replies when asking for the PRs. In the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the return value of the lookup gets defined by the `AddrInfo` response that we get for each provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if after 20 mins of publishing a content some client wants to retrieve it through a DHT lookup, if the first peer that we connect from the closest ones replies with only the `PeerID`, that requester client will have to perform a second DHT lookup to map the `PeerID` with the providers `Multiaddress`. This phenomena will still happen even though a second reply might arrive with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) @@ -116,7 +116,7 @@ _Figure 5: Result of the `dht.FindProviders` method, together with the filtered With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared for as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. This would be a significant improvement to the overall DHT lookup time, as it would decrease latency by half. -On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. +On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. Thus, the final intention of removing that extra second lookup might not achieve the expected result unless the majority of the network accepts and upgrades the TTL of provider's multiaddresses. ## 6-References From 93164214c3d56b809da2206884ece0dbb2ff5eff Mon Sep 17 00:00:00 2001 From: cortze Date: Mon, 21 Nov 2022 11:21:13 +0100 Subject: [PATCH 12/16] expand dht lookup section --- results/rfm17.1-sharing-prs-with-multiaddresses.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index 6cc7f125..84f27a35 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -106,12 +106,15 @@ _Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` co It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. -We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network, with different TTLs for the multiaddress, makes some inconsistent replies when asking for the PRs. In the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the return value of the lookup gets defined by the `AddrInfo` response that we get for each provider (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if after 20 mins of publishing a content some client wants to retrieve it through a DHT lookup, if the first peer that we connect from the closest ones replies with only the `PeerID`, that requester client will have to perform a second DHT lookup to map the `PeerID` with the providers `Multiaddress`. This phenomena will still happen even though a second reply might arrive with the entire combo 20ms later. Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. +Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. In the figure, we can appreciate that despite round one, two and three are inside the first 10 minutes, there are still some DHT lookup that only contain the `PeerID`. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) _Figure 5: Result of the `dht.FindProviders` method, together with the filtered content of the received provider's `AddrInfo`._ +We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network, with different TTLs for the multiaddress, makes some inconsistent replies when asking for the PRs. In the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the return value of the lookup gets defined by the first `AddrInfo` response we get for each provider in the network (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if after 15 minutes of publishing a content some client wants to retrieve it through a DHT lookup, if the first peer that we connect from the closest ones replies with only the `PeerID`, that requester client will have to perform a second DHT lookup to map the `PeerID` with the providers `Multiaddress`. This phenomena will still happen even though a second reply might arrive with the entire combo 20ms later. + + ## 5-Conclusion With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared for as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. This would be a significant improvement to the overall DHT lookup time, as it would decrease latency by half. From cdaf2498676716d1e52b86d43692e850e7e4d6ba Mon Sep 17 00:00:00 2001 From: Mikel Cortes <45786396+cortze@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:04:14 +0100 Subject: [PATCH 13/16] Apply suggestions from code review Co-authored-by: Yiannis Psaras <52073247+yiannisbot@users.noreply.github.com> --- RFMs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RFMs.md b/RFMs.md index dd6cff39..53dfeb91 100644 --- a/RFMs.md +++ b/RFMs.md @@ -637,7 +637,7 @@ This RFM, which is an extension of the RFM17 for its close relation to the PR re #### Measurement Plan - Spin up a node that generates random CIDs and publishes provider records. -- Periodically attempt to fetch the PR from the DHT, tracking whether they are retrievable and whether they are shared among the multiaddresses. +- Periodically attempt to fetch the PR from the DHT, tracking whether they are retrievable and whether the multiaddresses of all content providers are included in the PR. #### Success Criteria From 9d39827e734b2f9f78c8c52e9ae0c87d728a2cf4 Mon Sep 17 00:00:00 2001 From: Mikel Cortes <45786396+cortze@users.noreply.github.com> Date: Tue, 17 Jan 2023 10:06:51 +0100 Subject: [PATCH 14/16] Update results/rfm17.1-sharing-prs-with-multiaddresses.md Co-authored-by: Yiannis Psaras <52073247+yiannisbot@users.noreply.github.com> --- results/rfm17.1-sharing-prs-with-multiaddresses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index 84f27a35..c827553c 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -73,7 +73,7 @@ The experiment was done for a total of 100 CIDs for over 50 minutes on the 23rd ### 4.1-PR holder's direct reply -Looking closely at the ratio of PR holders that reply the PR from Figure [1], we see that continuously 16 to 17 PR holders are sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. +Looking closely at the ratio of PR holders that reply with the PR from Figure [1], we see that continuously 16 to 17 PR holders are sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png) From 3cbc50f87404ad1c7ffd76c54af27aeb4ea196ce Mon Sep 17 00:00:00 2001 From: cortze Date: Wed, 18 Jan 2023 16:48:30 +0100 Subject: [PATCH 15/16] update rfm-17.1 figures --- .../plots/active_pr_holders_80h.png | Bin 0 -> 38894 bytes .../plots/id_plus_multiaddres_from_lookup.png | Bin 16482 -> 28159 bytes .../id_plus_multiaddres_per_prholders.png | Bin 17630 -> 27258 bytes .../plots/lookup_result.png | Bin 14349 -> 22025 bytes .../plots/pr_from_lookup_process.png | Bin 18812 -> 29630 bytes .../plots/pr_from_prholders_pings.png | Bin 18363 -> 28068 bytes .../retrievability_applying_code_mods.png | Bin 0 -> 15122 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/active_pr_holders_80h.png create mode 100644 implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/retrievability_applying_code_mods.png diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/active_pr_holders_80h.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/active_pr_holders_80h.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fc22afbef1b81b76fc5b7f6164e89aeceb18fe GIT binary patch literal 38894 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̵Y2jitG>oF| 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 literal 16482 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

FUm4Y>if>z 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 Lv1E5`-Tmpm4ZM~? literal 17630 zcmc({XIPe5nl<`XS!juhRVpAzuoRReC`rji6cCZDWJN%bBvC-XgeV3S36e!5BOpnF zfQSUiIR_Aw=Id|f%=|fhU0&Vj%k%DM?>nru?zQ{j`E#eYP%~0fD3mQS zXHF_nD8HIgD8JnJeLenWNHjtS|0QB`>Vl23g`ti8B`X7p{3RPpQwtkYy!XicGP+D`ubLJ0`kNuivS zlR0@zV}1Hq-ZMos_B$Ju8lKPyF9c-h>P2ObClJYQy>45r_#!kTE0H{`yl7nptm1FJU4i{ z8!3$Bcoz4#=ghX289qMrD}{2)K-JP7OQL8oQtiTzg^EePP$(Ce{>2XtSz<>oPR-4! zU%eWgtxtZXF+{@2rnltz@v_9lI|l>>RfdL!#-HN%Eicy8)STjtlG{O{eC+0E#)o;H z-r4d$`hkZ>MC9W0=g%jKO2TJa;YR_7^zZjq2FLMgXGLEw^cb#%S^t7pFdx1OE)vY0>sEW2B{c_DydG7cfqa0V%)^HdW##2n&CL^(l$Cv6zKoW6u`l!Q z@5(xPAXZN=f8AE`S7vSLoZ{kI0*2*!AMyOYKd1uTwlIr&|B4-|W=H(#+3rB(QRq(R zBlPsH|L=aFyOPqvyQCbjyu2J_GNClGvb-!SgpiwG_aaa8*`cCuX%&Xtsqun+y}jP^ z^AXx7f2G`#vUK~WQ>u*6e!X$yMvZh+|6hOoHPvCtP^R{4{@pa^B|Dkgn())A;nG{o zT2o`HbHl>ICV%{R?(Xg`E+OF)5;9&oi1nNI)ZQ`s{NPVU0mH}RAEwSNCEIs7H?0nA z+`cc`ab~!1JTxGH%hh#_zv6eirV#IeW>LG*XbGp;9hsFo!%sb;GoBf4NO=4k{?WlV z)7@;WH7!;jmz7PXxAph;H}IlIK&tXwcRRqxr@+a{$tZrq@?G0+ zR8%rvc-{IuS68$4jCajur=KuJOi$ZHL`B7^z14^aA;0FsqnPBpI21*_X_K<0rRDPx zg%I(W?fcI)uYE9S;5sEOoyETg>C~2ys<%tjCc5>#MdDc7d+sAgE?5s#`mi0)%1AnI zKX`lH2Aewh!!lkp%%X2zzT7Ef(W!+ERh;O|X-F|rP?yGAS?&ttEEDnM*)1x%=v8Gp zH8rJt?p&p=WNu<&Vsc8#+T>~_$4E?!Y|p$w@Sl`hldm$e3i7G!>mf6eGOW7TO{gl{Pus^NG~}+}wzlpPgkVS^>{e`p)gD@h4S-%`5ph~kNm3&_jm0JlG~Ji@7`}zzx~F+ z&tIEsI$R$^O--$&qT>Df_3KpBkv((TnN|^uht1>HZ(+RJ7=JOr126p54)H7fcxRXo zw>q7Mq^4zqmV4hy{v+Q`df{(RTUQfasyX{}qe*3u$Z$=#`{dM=&$DN*9z6K{AIXwg zx-^g1BSmO@C;R1;miA8CYa}AI#ysLQ+dD~py(RZ|DjcB}#v&g5S3ht|qoC~BySMM# zx3H3uGwl2KXNzq^QblQr*5&)``Il{|cA*9Bg`)M4+w|1S|GEcpxMzG)yGI(rzI{cP zE}lL6INhwR-)q)PxXr-NXGTy_tprc1?4j2D^HV`Vnt6w)y8-r78GT5u^>C5aY?SyF zd|*H^iS|;z{uwub$PYErP6{keh4;1^K?tbwk}KZ;vFIHY9Rjm6R( z(D1%^6d#(bjJabrSRFPwJKLyfk;5+I*yp2e)8#xT(+n2$&bhJ_p0RE&40f{MQX3zXfuhGYvnHw zp{LYn+jm5;y3B{2Jps7lZFG*-v>{eiSxwEC&A1{!XcBlN#jt`+hJ}Si)OpdSg&kSK zF%XpHK6ZbXd3F57l-{AC7`C(2r#ZQ?LV7w`}@Xmd~%IeJ_j>DV=1_m(-p_2IJ z)W~zeCc1Ou*%Pq{a|55PSbV$nFtuj5^b>CcaC|&ZL;S_MOC5+})u?m9{2Ni8Df<(W zf+d{PTwGiy5Yfj)*sJn*G{Lg&Fh#B2boeg*TSPeE)7q)`hQo$EW$;JQyL=@e9HT$Ya?KYqve zfM(>aTNJa-4;Q_rzZYyB$y-}V{P5v}N}h{z&O(1+tYWxynDdDfC;EDN_HNy}6-9ze zLSm)rWZs^CV5=jCW$Sl_yR*7n$j{Fou8Z>AwryLgQ5B1fQdh2X@Ob2|LznNVC1?#L z@dyj61s=9&oa=H;lzzf!++Xhh6RgC_2MYTXtH9Te-i05Nfe}i1@`_!lr;! zx#PZ?<~7L%WkDwK`o&LCoUAX<(bMl&sG6c*Y)!isg}4$4#4)|nvW(SpTA67Qa+tib z(!;uTzRdRkbEDAJ>Z4-z<2*hGEk69X4~V4NEBYUBPDCvW0UsY@oSISS6Ya)YX)`Oa zOZyc5g z-g?^fSFd(2?Y{j8#oj(^JZnUD$K}os4g~bk@mx4Rc>4pr;j=f``I(6>-Cc*xd1h}Q zACw#&vuf+={0D&WwSEL~HKP^28LEpKaa~&qb@s0?tW%I$d1Dmntajr5=7q9fu&pss zp)MM7e!Qv(d5`w~-Y+jiuXo>DsRF1{x^ksg*BsdNt8BMQzOe1EiWB{ng8N(8gZa8i zHr?N{Yk0zSEnE2sj#33cs%dttjh2ZiKGS-@1a*Qu=(4^(EiG+?(|G1-FPpC)f9U|S z@_KW^od%Uvx+3tfI$Cjkw!Ov7XvL24E^a&RprL4EBk1`H@QeDr?qRwp?gNOej_bwDSv^n1WQD-oD7<3|+Kfx9OA|AN z^tv3}+;ZWkJ=KCmZBzA&X&Mr=H6S0MHf0CiN1qE8 z4LEZBHKUNpn~N!iKDKJ8iB?}?j%^?m2iq3=zRN|^orc-!<Wg37RwV@(oi}Qi=EO-Q(W^(sn*XWaex8 z^72jW>9v~Ir%2nt<5e=P41y({H4q{-cc?aLJ)hzGmY=D0<|TG2}rdAi){2`Yw$k8>Wv?lXU5u^*uUWcmJg3@@RVGP=2DG)L!bzP zbMc!yYkj2rt|zQgojwcrOli*LP3c>9310GfCTNEDgn5Gpz5gzy4}XHh5IP zA6TKb_ytejJ+zIg4SZZ{=enbcK??>CqQ=&JY^aLyr=esN7Z&cU`|FpZ3%&Kd6Zotp z>%YJ~SlzCJdbiMh|B`V;SthN#ErU*6H)=+v$C@CXt!ToUNC7+3Ik(|UYHv2 zlSTEU#91$jnC7i6#<4gK{sly(F*DMn4ooFJ!hLPsut{{5|1X6+>sC-rYN z4;x&$5{-@*AaqSFYz3rC$gEY+tU2iza-kk@)#Jb@o|~`_*hFe&`bEHDiv-t|5nX_Q z*w$3z@L1J2liAT04-XF|Y3ciQTd>87fD1HbzC0ISe=Bg8^SZy4HDRmNa#FPmtLySR zRIMYz%nS#o#Tk_K$rlK*nANpC z?81vT&z}7uA1taG6B83bS7MmrGw*K!R_*chshW*VD!+h$947-MLm}V3r_Y6=6^wFU z86v^W${M<-X<>eT5O|24S~1(sY-MpI(W|nHoBoeK&R-2gUm5GjZd!FjcP*4Oyiy;n zNazAOhY29uYg39IRnboO(AU1SJR2-$uE**<^6;pA#FrZliY&r&xM;9zZS_4km+X$$ z0BEy{p;H4@>Uh>Bv%2upTfsVHMMOlvfNHS8^{Bbq(l#Ns*)4}z(!adeKhhs)p$3?| zek)7-$B##Gvgapq=0f=S`BQH$SViq(0xd_?3g3JBDF^nZE>gY@-)G-p*Jc(VW}g7a zk$Saej|^#aIu3obIjf5!=;w9%o)VEzfZ7DK#cv?kznWYTIHz+$7le?-d0NqVY3%)M z<|)lIlL)f4wdz^_MnyP~2>r9;Ed0;%Wf|H#ByS}vYISr^v%P}ep;8qhfg|ID6jRdF zq^=sP!rAZ)$IdaTP}QmvAxle5v`2a?$4C@2O2&qNq0VWi>xntd#-nY=sK%*f?g4nE z@LILpsQ^02wx95g8VF@MPpFU5R~5gjrlvgV&GWKrk(Tt~gE&$_;r8v@ z$t|WdZCb7?GX~rKKr()?2B)B=UCsEz{(6|&ZYim}X(gXMk&#)V7cMdW^9#L>iRrvK zRiU)?H?5MYDg_*mUwdSRE*CXpkF5meT2ZZT)eflSr#sD=&kWXtm)JIGSwDHo zBB2rBj}5f^C5l?u)zx*ZB_*oFw(Y%z`uX$cjSWe0q(YjQ=Pnq^he~Q^+l?jjL9`IH z>U}`!9`-pgeiEzmc0$om5dU%SLrxAY14GPsM|PQE%8-TY5@BeBbRv}fY|mj8R%JuH zHPE3}y4F@g(P;59&V7A-#=t+aa&pQ5{bi#2!Spiw>a||0^Y?Gd;rA~3@PJ+7e)in{ zySDrnzA?2s-=vHyzRo(@`XXAB$h@~7RTOq zjpj9wBu6`J4EL1O`1eiaRE`|{QOw!|RxWg<xvu>&Mzt|3Sjg~p1T>4 zhGWl@!>L!kZ1cNEg>>@taHi38qoxI^8BKh0h$fLwO9wg!c5$We4;)?-)XlL(`?1yt z0%h|zu%_~9rWih1oE?ip-#h0esP~Z)Wq9GMh^hK|Zt=O&j-?m*q73ntG~<$zl)3r3 zs!M_54pz^pG%j9+awu%p$|h4$DceN$ifcFddmL6>(o#{B^%tDJ% zXpGCsBK5|N*X5vbQPg_sU#(LoG6~T!d$Z77i7uGqI8zG_q!ok~_)#J#WJnJhwZ?}V z?`Fq4;y{+f;t^i~Qm!r!3xdE$0kj*yPd2^1){-3IvbtcT`c^}gTP^-PQUGLDvG=-{ zmzTGGCB9Y(@_q>5-I@o@4r9u^YiODW-1KfHSY5z(ysh;9AyC5 zvqsa=fl$r;^77W$-|JWB`{Yv}cF1;e<-f51E^TFgNAZTQEbIZxD+mx$vxR_m8ln}$ zQ&U!$HJL17?1ZD??r_p6?LlOFi{Z_N>pM8 zkqsBZHvOj)<52V)3=**>#|mbzeEs@$Ajbo#@@~|=yDU*GEmc9&Hqp?iJ)%1xXxf~# zr>V^}eOrYMzT{T7h-wlM$Q(hN8bHq7+}vmxe~L@VJ@pbqq^RrhluCf+oV7^y))StPXJ)R}Ewov6ND?#u&Zx!ev`j>Z5P<(Uq1rVN; z5=A29N3hV~pU>Gn)ER%yjEx8JiJ*%WtYLRFNIE{}`FEMn+A?rngDivHk){phNKOJR zfD+VWL)24B``sbnc?wTu47X_$q#1+#8eM7E)MI|bx!u}}JOw7FMQz5-*y&+ht&dzQK_ z)LEq%96*iziWhPQz<`P^8t=S)d?dHr?;@i1_D zKn9r?`xP32xos+hnlkoaD0MVb-83Iy^N_?$y|UwvLVB=~=6CutfQy#;AS<^X5lUg- zVT-BDOM)W@!#%kU9z6dys^YX-8cEE{Ek91`w-IX9X-^g(HfN}T*x&|(twa?v`B|Rb zL3s{$-K_Hw!DgL*jGq8%v-#cGI583g`Nah98HzIG0_H~gcDeUZa8+ZJP65v=L-o)O z0q_6l6BMxA;e(-B-^7G&Zx*=N83qQ1(vp&DAQKw^HxtMKyyrlKzG|q0#mM>c)CAji za{f&&hR~Q7XPR_7n1KLaoxM0r9av$gtfdtM5+Uu$@)pvNNPJhGYu<1}oRKRt8Xg)2 z_rZhJm$I>U?Ck6^qH9bdA1|`|SEZ)1IGk92?TY1Gd%B^lkg>^(7wfu@s`*M(ZCSP> zJ9g}NQ{cXp@Qh2BE`bI1gi2PTtc@1x*x1+@7k^fb)vK)SZZ=IXGe2=ZZtq=zV&0L> z>Bhx!H*W@3>=Q_{nWR|q$=NF9)*=dIY0983H#>A^M> z;xt}^Da0FEZnfxRch|=%MNn6HAm;n-RCv!+aG29EGiwhzm}g98bmwyZ1gID%soe;r zEQ_ER`GQ&^nri-cb6mv4|9JNMKmQ%^4rU662SiR2|3gJ@8A_9#(TGkcj%ACkyEXab z&KBP*Zfo-;N7u)tZl%~fL`eU~5qA(fbvh0p7G2Y%_RYgRd-e!A&5j;#1OJo8F021N z{1F5yI?RT>u#}M7Ec$(Vx;~{!G7e37`18ZSdag#c z7-TphuWUn+f#ymWW6=9D@ZS;V#erIAv~)M!sa>@$XGsUcCr~ z(Q=dA<86Sdt5HO|f^MpcJ!Bg~AFt=jTizp+H4x%NB$%A#$+F4mX_dZGpES#FpDqu~ zAucllE`Y=(f0Qt#B%Ew7SnsXioA+~sdFsC!)!-MC{y$7~{{Q<}*$z`8UO^XXcy(+Y zWX8DaMFFGAtKYxolYt-U2OxtPl57Z?T^C;Kl~q+WfukgnYKRV@3S^yb-Z7k10Xoz- zG7<+l3pn$-BXogwZ#q7EB474A@rZ*d>sAy}2G39Gj z%E_(AWi~PMYcY?#$lu1mQ^U@Pvigtur*Q1pu|o3~etuCPY%$<*XJ>*qXP*AAw7dS29 zIDH;UCMRJ+aKF{9A`^~078 zTSdv6)L#FG&%@*Sze#9W5i9>k4K(#LI)cd$MQG*Fs9oH})ilNTlt8YWAuy-IQ^ z9Bdnoi$Pv2nSjg{c+hf}#;?;7&l7DaBQ4S{kZ@D_!&CHZ2^4iVk;Dd!x(0=#I6U!B8M& z`LOl%_j4UStS%f_5y8M_3^ECLpDF#6X=pP2Z8rezV)r9H@0Tw*WF{vkm7XvPwfhdB zFDtJs&d_e#)?I5iH90wr!2vgT0}fjW&MocMRdm{VDCq=?4rmj-5L>WMY-0o;#_yv72Bz_zH)c{b7Y&&KJu483^_E z4sBEzmJ&IR^RK_c%CiR_O=9K75D-k-(%%xOl9;<#+Q&d0ubr)ycCASbuwHKLWZH1N`w2%FFnt+g&)S8Xv77t+1zEQ_H|$$ zkfj#S5G62ozI&5jdMJ8_Mec(1T&GiF?#isDwsnONqrVp1EkojsZMj zG~GQt9gVBlGg?;GM5Jm)>X>rWIf8L) zSmO7+A|jdft}zjMDM{_^T3eWooW~HC5#t!m6tvG1WWrzS!>!#qzP36ibwE2y1?meU z|CI-7i8^mD72MAhylb;M{M2T3n-fZ3+Vvi3zjRix9JKN!+DaHSRJ(3YJ;D3WgW}Z# zQ$l%Zix_i(fsIUjRpQhR5F^35^_#1qs0`I^_Ch{I!^NYad-I3eO=o9FH+%hzp1lE= zA8FEc^HH z0P1Fo7lYHX%j7LjK0=+afy|#RewS@#sO~g|5`JtIq2T{Zv$k?H_L>+4gt#mklT!jK zzbHzc3dq2aED;Cf43&!HSsDM1<;mSLtT(^k)(lCihN2V^ z87V8;CE++bdU0WC2}>Z8V6-Kw4IBK%Z_Am@e^NDsISj59(W1J#Iv5xIaW)+hV~N_? zjc54LYJ`xIhsmEZKR$co`xCiKl_yV~^2Z_q9z1xU#5^{s{suC>f%hPeOCI{$S@H)% z=W@sj-zGPsoj?E%08IJ$JGstF0SI0{qj~)8sT7b`;MQtnx>g^|QC2(`za%!@S&(G1R zoQQdP*Z&14{LcRps*UZn`w)+Za+k)f zudUCx4=7Kmbc9~A1L=<}8OfRJtRtRds210t9+*H41{`ajJ=lUrU!5MTDJ?6j!|d@D zjxY|WnvA{MMP;(%#3BE~UDbp+`dAtCJTeEB4?3bKWKv&^wl@P0!ZkELGQGWd^JXbe z6|wvI#y*ZW1G+ko;>s|9e+jR-Y^6zs?gAy_d zUfnH&hE@lFL69Grmf*3#I%Dm=2QUxrbb%=j6TV2)Ib*OyQuf-cGC#pTFpb7W&!x@AiP{>?NryUsAh7|!uU(q>XxQsH}C zO6SX+e~nEfbJnF~6x9|};RCw4?YX9N;~gHJp6~6$PMhp z^`mH4n%$U&yBTrkl8TF09j*?$8>iLFBf8^UTe?U#ZPX-m{rtbUWTzgU_7)Y5dF!p{>&Qo%o81JV$WNk!`b`+Gn|(6W90e-!Bi05@muUAU2GsKtwZhoF4pEzX0Xo3`k@nOm@+D8-T!L zYxBiY(l5#S;lDp8qtHZKj3sS!ET4GKlOo+Ph zB&i_EXFxE;f<}Jy6qCcd)|_++&hUps7IB)$d0+Bt8pl@2`B%sh7{G}6iC_@O#c|3@ z&>M9zZ*3swf_`CK>diUppvyjlF~e}<+d$%Jab3NcGvED)n9DY;yiNz8lYe>e7z}g` zAjSmW5k^nyP;&y58Bvg26!)M~cW#v!1v@J5WHJIc!!NZuAO5AHLa3#sr5}lP2)*zi zkdaVPP^giLmyEo8+C)=~^8TKoA!ESL{Y%OC0)HUEmoP6j`=wcQb)GzV@+Fz*`r*RG zE}2O5IKPVhUzTB#JeZl8*^liw46#v=^n1KfKPYL@PJJ|}#~4;JK;SCKMKw)-eg!n{ zGUzL|P1?%=amSp_{bhk{>^^bvcKEB>{30SEXhrh~W-)KiC<~b=1cWRHw9y$|M4@Gr zk@kA{^r@Z6(|i!yoic_n6U`dny^3JrnqOG($1b$^Vb0igh9COvJHAbr;ND2wBzXdZ z7`v-cAZDaz`IRT*M#$bTZ2R|%@l1eD6m)%gxPAXwXgcK>zVsz^K(RVo=s{Zn$DFQd z?jua2{dHXy3eWK4PReW_^6(I9xd4%Rom)Uc&w}EX!&A%azycRoBrYWM1GK;66T^x8 zn3)j*7)s%b)6L5r!qm1P7j`%SgpVLrYkNcotvbvOrAr^R%k=S~eNs|g@MZ)cqIN+k zv&OUm+5k|xFqmlC#EWOo^p;mvDqyW+dfJfVWMB8e!Fp)~3l0DdwFbI!pM$lud{tYo zd?AyG-5*+cn;&{gE7_lHv;ifH7b{&Fo-7hfzIotQ(q0A2@4U(Z21c<_?}^K`AQvaO zPguBdb#ZNVVvU?)OSXNYa|>SaEGTg1_q;x|l`i-;y1g8p93ltqw%XA%TtF+VbqFV> z^6v5}FlGXQlyBbr&Q&L*yN~|z%P+IMv9KQ^qOO5r(rEt)%3N#P zq&;AhjvA+gxd;)U8vszyJuOH|!p6=aLwEow;#a*ppZ#@$ILXnS+K19tM;Dx-lw{2` zYO02PVqI%*gSWT3`nt53iiaW{%%CZF<4B)DS8+)RFzZU<6o0Cq0`VMFu{1xADyE z`OeSq1u(8IVIhc-HbeDi{5x%qB0w|!Zz^-A|(Mk~>AXcs|*3aJH z{JF3c=yi=)m<^OR(qTF~J7*Kh>g!c(hiVIRtI!UK<39!uq#2t6V4T4P z6+4=BbXc<1)jS}#Yp`xP!dN~%6cvhApnNJ_9T5R7TN^YW!&F!+lcU+P5a?~|G#ms& zz*P0Xx;Q$EFI80&UQ0XDI@{XXIxBFK@lPT(?cV*W+78l$ov0>k=edi++;5>(VAmR; zs(#yH{k#Anr-xdQCW9R|$?l zz|Kr!^2D_SFj5nI2sk+j*Fj9W2CxufQlL&-fch#YD%E{NOiUBW=!h}#CbPpZ$HUTg zq+P@E$G}Oe<@Y~~y5jCsb-K;b(nUpAwYZJJRF`6Z3e6VT2g&lwsG@j6^zKG-~{k3vOJLmX;Oe z5)OgUL}+WVfFdT)5*8N*Lens&T3MNJMP>5CjggqkZP6D~B4IEMDz%1%A6TgB8;e-n zCM@CHxu+PVF?*yx>Z-f*3oR;v^}HCbWlZr)h;ioudF!A|Uekq{Y<$oA9Mng`s+{o< za>uD5?8JsBRwL#1f!*Le-Tkz8+NT4`68E>J}yCTiFC%E^Ts+>wj{ zR6)$tJ~`ZZwJQq38-cbg4!zI!cwPkHK{ttkN}jd0x?~FoLzmg%rv6-RxO;9G8vyg< zyF7LFKX>lDFlt}v2H-%DJ%WRK|Nhh1h1z=?w+ll1#ylwhQrqb0=;evMg$=j4O*xuy zMQjIVBk0CmE<$I$a&eNE*9vTk_IirHhURR79>ZT0jZ`IT1E^xgJ9pUo`1u*JKGA@X z?cn4j_PFFl@4L9gF{)6U6 zwqvcTD3Xj)E+3%Cu89aWzxs%)Nz7SK6@re0k!wqMq}Llr8QkzLXkuVH$pk21*wxh5 zmR-Uv3eF8y(@1bJDun0`(=L~#w_t|raKla-4CmcM9c~UdLjv=7@PH#(8^w&MkK{-Q z-UFRXE*X=p11V+F$%8&g7{p2r*FzM2xa;Mib*Atw5nJNIL_3V2XvB?X?>p26yL$8Q zZm`9k%DEI-_VrNjD$Rk`K}H%dGBm+}K#CV}@WMs9P?q-&wecds-GYYYI{~n-qUn*n zBoTEjAyfKrhs_HJ;E|_UomIfpXPwk>^u#C&8y2}oV*>XYu&>T*1}5stMA#`wJ%bGx zyk(tS%Ypb)x z5jU|fj+lB7#~}d+e4(CkWTb-&8nEv+0%g>rZRaeFXS=P|#bZnq;?U2~0ipzp8sxeh zVtxkC)D1=Vz|LunUL`lshhw5bYDvF^-|i~lHcg7O)+k{VAW@qn;^(bM@yf_JLbeAz z3JDxVq+W^HW__ONLp1q!p1eA(EdFUHfp5m6es$$jRO>G?|eKp$S-0G=LYm0Db(#37;1) z!lA}NlhmGdQVn$)7qP`okhY-PKJ(4c7Me(>2LZVXL{HiUT&(*Mb?#2axVFrW^^i7$76hp`bQ;)(o0qrp+YKu9 zHfrgPZmzz@zqa1mPAxqThx?9f`Rm~vfMi9-+vtRjTjbxNibO0F;TD#laqZ_fZ{EC& zj^?OCIF$9jxPpsbDpwa!CC_4T_0YqEA6G^M$RALuAmjSz=P?)Fy#|DPnu&vEk``yw zKa1kX0NYaxiYLLTIC5dU9e2&b%7D}wr;Q7C)@mm^?(&@6jyWL^lOY)TW!$~2K&j$$ zTEz%l$g3Rb$mHvZOBpAnr5W*lNUx@sxSBQvHtY{Fp*{PODtru8cvEm&;oj|=R>!3l zdS6`by4x*zf@(~w5;|@Lz}#72YI#IU1+#toCCTOQ1;<_Y7wt@eHM|aZr>Cb!9{|G? z>XaS?a^4h}IWA9Ofu-%(;G(XsE|s?$4b$TtZKD9$)f}IH1=cv|ReoZtgiXsReL4d~ zM;)gzA<`dqVG2)P2vTy&@it7&{2~c802C_%?!Xn9m&olvG~3$T3MA!ONKY|P44(H| zN>YVB+;sX5qqWO##)=a#wv56~&$e%0019mDnzPMBXU7NNRhl-lj;w~wEaJ^jy~=Jl zIQV0pX^neDFHz9i-V;s)d6lcas4#Tl^^Th%ovv%nL;+PsIw?cV5WxRw!V7=@p`@`w zSE)j0bKHS4M;~PJC5@>cb00yZO(Y`D5Cy2;0@mahh(ykTP(b}rTU)Ax1O@BG0kGV1 z1u&K~hKgkSW$Kepm0>y6%25g%8Q~~H!$1@P(r(z12zE#O4mz$Yw)Uqv>B&YtfuR~I zhH^|-)5XrWaNUrR2Z83j&NmI%rKEHr9eG1jC3<|+oEUHv@?{3Mwv=&A(%|JEW*vp9_&B6a}uAHaoLnBWp7^44@P9-CJ#c0iv7O1Es$q_^w~*E^9pfb2(^Cb!TC zxaewMM(Lq-+`PfV4#Ms*;6oFNN3O5@_xI=5wjSMgewWqrOyV!1$ecQN KGU2%1o&N{&tP*Ab diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png index 5fb0f14eb2f5ecb21b10b37e3c927d9f3da1b7e5..4bfb52f21664b9468134d00a2ccaa1b8f44a18ed 100644 GIT binary patch literal 22025 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 diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png index ce676790b9f9f8a7d73f07d6cbe1d7cc70d441ff..365cdf7b98daff34235083c7b15404b5c3a7d5aa 100644 GIT binary patch literal 29630 zcmeFZc{tT;+di&(s-2|WE{UjJC__=ALa0-Jd+H(s!zu~`!^&+xtifOIhj@zMA2IvWn)WJIM)r;dwuTIf2KLtGR`%v5 zmwt9Iw6!y_vOFYsSWtN1&sXj3t?k5xge?B~20<%ZV=+m}8j%03 zh?kBtVPLQmkUMok^;+0So0Fz0b!q7fo#B~R&ieR2Byzlal}tkwOax7gLKOzGFACIU zJS@*pluyr7NbjjiPTp4;-;$+MnJKb4^X2x|pMwA4_+s^iu7z*?Wvxm~2befKU-Wh7 z<=9uvhS{~-^}Y*psub(9+vjPpZ6$7n;laz2hSlVU<639>m;bVPQy%&K`KcR%y-M}> z_v>VsHtadcECB zRa-kWQ7tLfPx_mtj3<*nHxCaFpRn-7hexc`Z!vS)R+b!Ky6Nd@I#{3JJo#RhN6y5= zB=N!%&#gjw$r57)>8BoT#^tXM{T`gO-ue_S#+_i>Qyvig_3Jfq?|8zDtlNM5p{%K? z84)$~{MS|Tii(*bdw6-zj4={yGI4VU&MU8)cv-FRb7kB18OHUVd8oxpvZPls_6}`tD6B}FJ(xSs6pq^o( z^W@A1{N5aXzUni(sOiyTist6Y5$lrq5mE2NGQcrPh37o4DwfT68hnxFq zU92Kc(eQ%@+Z02DOXrU6->+z3U?A@L^(nt@ZGG~^{j3uYI{aH>4hYX48Jn9ht(W4)XLMJEf7Z)a~os^az@3b1f4E@#Z z&6!u;{^YjsrHqk@N!8Re@uG@KkiY+~fmG%LqlGhic*@gebefv0Yr$(@&Lm$>iDvu9 zn>KBVBHv!Czs`RA(_81!+`h>M4gG!n5ZMmvLV=(tvc0BF&tkUj z)BMHJRbJk!vg7e-?<;AV_VXjzeG(n9iVvI5Wt-IPIaI!u?3sX&2J0{9JBr*IvaLFf zm91U7w&mEj@d}}aLKnw|Bn_dCS!XAwp3uY6At52<@7`rdDV;y>cukvp^sfAXKkemF z*jUlGIkPsGvBK3^IB2OSWn|P+^(1|^9Xts)R-Ww!FYw!Mza@KQn$ZPm&&aLn?roK_ zFI@UI4;!iPeDV8)1-;14Wxrm5W{2BM_*OyP_*H9}dBw%G`>Mh#>_XujVq#*nmY8=+ z>9+O|W8>|X?-{sxGwtg8-Q;_Uii&2l@~7=fx9-=DcblJ1REhJInjcO-<`*#g_3N9m zvN+8lax|^oY=&wwZMx5lv={0;a-TDaic8T&qMVi+g-4a2Rb(fRB_9VCFa)i65HnUHu~> zXoeN{OwDRq4RcdNL1AIZ_-47^*K7!gi;MHzxYKgbZh8CM z1cKsNEnBh_v547H5yFOE+$NL#@3jlArE!}K)W!%iaaGr3cr3YxA9Jdm`})S8i(Se! zM=4x9#F>LI&)$6zH*dYi{ zoN3jer;}|dI_3=*KhsQ6np-Wl)Ri=+BdiHw|i%+ChE>hHw5yj zh}iX>v*;+I?AOUs9cwS7E`0s+QE(?Y(8&e5l;A*h*35)LT?kAm{zufAZg`Jz> zZR`>b$=m~#M>^{1`W`8#y|)hRT>2{OKS(U*dO=`$P0t_Hp~eK~sli0mgaFIDfjyEl zt#$+}v}FYg>8m4@UAlBBx#ZZfWA*9A=PlX`#HtOi7#Z;&I#f4zR8q3=4OPG3+66f| zxm-`_nM+qcttQslb=dhSOh;py0qU3-eqmb5rOGxViw zrv`32(`mxU$=SKr)MNaUoS~s%!Wkd-!zE_*@dig2dj9b7X}~H_k~8=6@FXB`-;5BH zlG3|y;X#|U_(+I%*_;c=OCle zkf_!(FpzM$%(sc)4$UI^&A(ia+0@KT^~@h?SFUi&W{~F;jt1z^)Rgt*c%PsWx8E7A>)(ZTUJo`*bx#ohPsE*UeEbUYvf|?y=-X5CgCv zo;x_gZCdN0%8Hq>j?{a5&uj18xc%_Cy-Hyg!cAO&jFl$tkodQF7(TqgqTQ z2XrYn^8XE2s79TgGOcq*2TcxzM&8m1&Jt86^@5}4$DJA$&QfkqhJdS5w$wuj91jv4ZDnFKbdnc(c ze?|hIL9!5!hZ&!o%wX0ja?OQflA8Urxo}~;g19a~@kl?Zx%dxW%K*=@TeV-DIv9vZ zZ{catoFNBLuQoH<#v_MpjNB1|q4FgEa-dWcVP}T{^Y|Uc5(X=%X&aR@BAI) za=a?|CRmy}@$7YqM+Un6q#I)tg1z#W^Jm`8VS|NFPyD_{m`Uc=#+_Ny7c~o=sk5`Q zJ*H-9nn!ozmT2p>w6vOYY@S@aco81waex0+_|v?+eGGzFczGqItZy9$nB;2HE|(2w zWoquL+J~Edo|3GYc2XryDRVXg(TV0X(QDIju~WPc`)}QO+=h-l>C943){NRE;~B4C z>^}GD-ue1utwSWSn;vdr7ryexeIb3N&nsz{amsLJwm1?GYRM-cpn%J&6}vBPVP)OB z(XUuAWUMCY_m3Yxir~VMbNx@)5B$Oq$G(!z7f1ZSO`9(tPa{F@VUO_lkNWiK%FSE1 zS_%b^evcnK7k2Bu3$cjKFyD!FQ?<2yMozC;XF1|b6wo7euwIV5kZswftHR9?%zv?8 z{``45>~a!uV*p7T0>Lc=RzbPubYs7Od-tf_K1a&w^lVL>_?);uZM~)rF@f0n4KL;9 zqv<|@_eZ#Rcuoh9C(iG-^X$u5WxZ%4Zok+kz4V^q*cNlhxa!RTCPe&(WUV@JcbEwK zQR_%@Z*4YZoTV4{F+7(%ed-jil#~?x^Q%{<$i^$&-*@54mFTtsYd347?R@)NWPv)l z`F8C(feiGGsMM}qFJd{b5BcFR!My-R)*|`&eZ6b&8J`_?(iJ6*zWGH{G~8D>qgl00v6<6q4AAi#Oj?TWQS` zXX$&)W!fAWq8#9ALT~k>)F_!-y{6qGBPr@B+5>mB zT;P-rD~zjrc*G39YUkR<=s6GYh`(o8J_ASs5`m6aJGf~lsqe4S$I&!wM+%VXI%~W5 zZGH?s?H+MAuu44hucIGV9CdW=y1jXCJ&yaz7D}PB8d6_tqfO)(8Gi13fpc>Guw`p} zVBi*TJ4hNrxpW!A)>BTLI59U-Exq1+rfjE2JiyEM6FqXx*|~QAvFo~F;)MtJ`Q^WS z`66!LuN-0V(@#H54y6_+0w*c4F6Tz0RS7ksmaRw08kF4Hs9|bqO8c_+d_;YYP4|^; zp09njYxK`reRz5TI7Q>?)p$5foZsYbnr`mnvK=nxumT##k6(wE6g92q1!W}C;ZzkW zs<73&v^O=wUX(zS$YHps4Q#@v;LsYdim(W`slf(?fJs>RU{;Hz3OJ|?>X3RHl};H% zW)Riq(e-jQ(vpkox9)o*ItoYL3`b`4?m-l29kWs|mgYj2Y|H$Std)H&873+*(b1Yq zhb@{_`;+g)!`&;*}C<9pKD=3!4?jVVO2$P?M|jRnP41-2#;@0#DcZ+9a6r1 z?cNADljJbcOt98%he-eX_xHeEd$9=gwphZQF>crpl$x3b#S#kPFk-#mQ*+$_Mf1PPT6j7Npc(_LGbSmz0Eb#wp9Jqo|N@V%QG>SmSx= z#f-;Ko&?>!8~ObC@%*}1uU`)i#63EkWWRi=6>+qIx%`S?A@bfhSiEnO*l>A}Kwh`6 z1U419=L4&jBDZMFiFW zgx;CvY%Bc;3$RnbM5`YzQ*XRjN;;022q2gRQbKokcVVUyBiAQqd@}3@F1mf2?K>?v zK4!a;j$O-io-$QSxEND2aTFQpG%(rSyLT_85I6QEDJo3UtmxW zfp;MJ2FH6U{st}GK~QFb7vc|6wYSY(D-Yxgh{jPd1M@aFn3T#bm!h5dEW{G$j?i7) zCQIKI#hu2Zsja}}BCcPp!^Not-l*VUWEfU#B?M#56afp@pCD)!f169f0zb0q42Z@y z4*^r(jPO7punnhOOIdi`a~7e`sla}q_9TgB3=F4xRQthns46Qf|2m=+c68VI^XHAX zu3!-K$HV(8u%S)OfN|ZXabfe0Z=eLV6$t*37d8lPuQsNj_ zT@T2*RLUrNwdOc1mrf!AuyqpRw07F1n@I|*7@iw`klq@u5|t$Dw?kfDzBX9jJ;eCo zM(G7*k{lo<8@9J$P`>zAghl-Qn|n>duZXZeNNi~{eG-cc%u8_9G{?|65@+8cBdgq zW-T(*1cY&$|2FL!%8NH95PNs9$Tu;t1H0ACkNchS1$th@8#ts zoUl7^PnG%3ivvw(fRDK4U@GYnQpVSmBy^=)zob{Ub@&~4lyAvZuv1~jeA<`~HA$ zc^m1qF$#v;JQ1p5hKJ47QnW=ie)6362Ir2Hxbo@03+N`+Zcnq_&W@)0+_-V$Yyjd- zJ^ZL{_vW8|GH>ph>w1?pGC0!w*EfxRrM#lhsm#-UrE$tp@NsVB%mA76AblqR*jHlo z?xRPK64g^o)qQwZBRiQ`DCH3rex|y>zKZ_VYW}YL(&3*tIa5A=wyunj)FJGlGzWaK zz~RH{SO+zG`;7HTHw1FJvqpSHpIpfuI{eYM<8&*P()Y`frYnaO_Y|xz5lp++?c48x zu4CwWE{aI}{n(FKnk(iqbow5XloYjUKbE4Kdl5b(V<6n*ZvlT)b|pg&?WxB;Ddw9r zU^J{NA*=`@z+z

_Y?3N(SYRFq@6Hl!U^hJ&KS`^}l~2>haBW^*{b`Ho$#;iBt?L<#2&+Kw`@h;S>oFLQ&*J6xVq5YKTeT+>pO})}9)NtDdd++5{>f^OZz_v( zQ*|f{A-QXfh>P3X*1nSA^AVi6*HLxr{Wv9Jvn*Pg|3TvbQ1IvGL^^j(fRL2eg`Y>& zP-n*t)si*ekLED4@N2dZ55r(?BeS3Ud%(YBW`NwM)Yr~caj*T@MH4?S(~HO1I<5QX zKz&RB1vGOSr)iFJSfy!xr`u^dSkR|W4**uCn=Sh};j*Y2@QUWP%Z!oo;rIT_Immy> z$KT4ov$j+Gzsd&~7>-`&q8#VT{_kBE!}V1^;9bPQ5&QyAPHIXh42gjN(jvd!-6ivb z9v;&Y%aCbMvSy?yy=+*UL6_@az<(Swr#Pw94St9J^{M*O#EF%cm)lYk@aZ?VWa#!d zuZk#fya$)fEqA2N{vOEzQO$U$&7r)7RY*@2R!i$*V`D=iqkipL&cecit&iUyf7~rD z_K*vFkoxaD%g!(V;#m?wx6$}&E5!imC#TaK$Mg^jY0n*Q-@bi#NqqN#1Iin=AGXgs z%rGr2+iEDiD)Q6OR(}*X8<$dbvXziy7}c-Z^6)<<35=kl{+=DkbdhiPwEPW#gz?IC zcR0kJDUZwyH_3cn=@psb;fq=q2O|Y(v}@Y$Eu?w}SU~H-jj)T^M&IA3_4v)3v-x#F zYY>3~qHo;z2erRu7yT=Kc<8`;%s9(GpjFD&*SaS&MK38*zi~;hPfXl)%ZB6a!*0Gg z74B<}zqR4D&%FA6xz0t(p(Hj1WLR}bxqW`ImU;h``uGb~8b2I;+tDH2q5l&X7nj16 zkk9+~?-@64qz^Zxv#_!n+j$u{IAmSAe3=Bf)3UPpPvvKN1zY}jLbV@l&HYE>3hR^w zDOvdn;~yC4cD(kAkEAFlZ@vc>x8j^8s21qc{_3t9f{~y9bRgvXz=5d3*N2Ll#o}p7 zU%xg*eNVf{RcvMm5R115s{)u!Z%om_J;b5*YWn44X`+6yRB__UJ=3*E4r}NmZT0aTxZ#1V$jF~7igD)Q9SjVs?fC6`a^Tm< z_anI(td?F1leDrG$PqbZF!gt zWI^xR?zd;pp5_IeyMVqR7HS5TL4P1q+)28(P*FS>1XGkH=8&KANlQyV{DK6qQD&oL zw8!F*e&``%Up=Rupi6v>;lpkD8b0iz{FC7Aue}v8aqU zk7PB|=^CWU_zjdzKN6@SK^cvzO*9^b`@9H7&!_)sl-FoK&O82jl1pUYljqC;f9@44WZ(19Do6ucI)%u!xYocUG{sEXf2ndD$I!BT5S>t?%9x(XLd3rcO zL(l1ScB`#-iz$fMOZ8QEu@z4nQxH)g(?6BM{6y)x$a{ORa-?rRKv zRH6uLK8MP0rcovP)L4f;E}#xJnMZCdGe-^F5+u1$v=^&%dD* zZ$gp@k8iVa+zCdNp{9WK{^B(s!0`1}g(pEcfNZfJ2c-sTft2nIB{ewvQ&kdU{V;vP z>mfVR>=fFH%(JF7*DfeDG!ap8aEh+40hTO`wmHV{N#W^Ql`HSlXcvCW+7xMTO^*ni zW#W@002a>$bk`)l55&VnZ)F{leu~C}?R?_~ygPU9B#HvZR-0R+Io-_oIroj^R=phS z6R?YVltzYqACc4PG9p?y+xu{Cw(k+kk3U8t_Zb2NbNcUUAiEog)+SI*Ks~tz)>vQQ zWJlr?@|!w@s|Nf^yboTrrrx%UQjM6WBO4?24RR)FHl7B{N%Fn(QVA!J^{8y1FSu0 zuQ=fD0h9&R0K=0M_D_XL71pScIwDf6so|zN@qPcM)u8r;JNAb5;z)S;`DwsWQXky9 zb&DJ_MB2XG}FbQet`1|vU1Ll}}9HIn7Mb(xm&WBwHSx zrJTI{#fOJ27)2EUe@ps?;Pj5}{?`a-msz{OSw3=7Lymw-RIQRpnop!1tm-$0PJm_q z*xhZnp?bjPt)7(Ly zfN_S7L|#)~SEmA>lFsHn{Ndox!Y}|opKaXF#|>uZ=lkZp6%3rC5MQj-frej}l!$`z zBGtLDOAo@sQ$BpqY)H}3K=>0(9`_iZXYLssJ0J6m%V(h;e}3`e1*x@AH9@1gf15Ri z%;^27NPBy`Xn2d|cEYk2eKO_M*xA@xrUWXPQzGJ2;B;;FK* zz`nSscj&!I{+{^;L9Y9yJH)!rUfu;NZdcz525M zShL1e-8un>u$SmCG&%Ax=%Tt3A`;V{I zNy6hnl0@?L$u`H1osRKbsNp8?Ucem4V_toD?rN_bF@(M;HG;;!bKn z&qJu)kF-*P~C&jvN_{+IH7-QI|a{5j2U5s)p0-XX^z4VPZ4Z*l*zj~i%3C+cz*)UD};)- zI7;Hr49c<8mW4rk}g>eW9=#L-o5)sBOgTKpc2Qb=kmVw4%;CF{5!{5 zwD)ZVo7oUjijQC77|B)RcO6TaY&G?!`aCO7-VxbEYkLHew^&Kgt9B~`gNAi%pL&9I zVRo(EkiI6JH|gEziqMhfLfkIsTkm{k$SPtFNM_6594ZWo(6N9ERu5@dCDKA|LU3Hk z5V_Abqfh;IyN| zWl<9PT9rSd z;w^mk0ITvOibGHo2zi^__|z0(6o^m~y0d&uFT}sxkw0N%y$E3BKGk^?-+nA$i2Ngr znSu}2!G89Y955%MfPU$vSwGMkF>mkfHABJkwBSz+44>}X-5|6oD(~;IEzX?r1pUDR zk%Y8#@yfpN@0EFRdzkNCY3vQEIU-;qQ1v2}L3T;!4Df{la>xi9=f{dukF;NtK_xU% z8(B-gegmGqdp8#sXI@s`pVr+u7MAywfEmJJ6Xu{YTtWjxkP0|_qUr>hUKw&omME04 z-6)9Yw~Btp_2Au5@QR1G11ngSu2@A9vN&(@B7-9UGg+IfSFip$f>Hn|_K|l8#h~KP z;d3Y8I)A*qHxQ30X4m_v$q1l`RPBNONB=^!9D{|{C7v4& z`#}{(6pSc!kwgM@$n4CSmxRY9tLNuO2gZNp6F~M{m(IaR0am?Ndg-lb>j5TIw9MwG zM{+$CYKe>$WgQCq*M3hhemKdCN4Mlz7JNCA|6QMZSNhgTI&z_Ng3HfVzDFh?SO*dv#GNPO1u1!f#`)m5Squ-7HzKiNreM7r04Re9j@MZ(@?Rec0;vAB zFzY;=RtEMBtS}ynW!pB*bI|q{pToo<`MW28kw{fw1lG zJ8K{ly!$|F`?A=-Tq$h?N7od%qnSLTnM&Ma(f3Gwl~x0<0SYx-nbez;Ne`eWNkyBpO%=4^JsC(KJm zC*AE6E54HA1T3$-s!DLwnJjALIh2tr!^Bh|##zqhK%lWYDw3C!jgC^C4FC~P0g7(1 z%vXdXR!12U-f_=HzgD)YOKDeM-(fo~xP`pC)n6s5;sDbkGC2?`q$-$s?aN193mkW* zlJA<&92$HZNfyXK(bLmIM*0YDAs)b#)zN}nq;ncM4M}T1jg1lBWtnrO+>-%*prTx- zTeA1ugGeG|VlTS(<&qDlM5ECIKR-X5lq=dk%NIa#8S-Bov)*UVdE|;0#=W0CdzS16 zp45J#@`xDD3w6O*E09vQrZJ;F7i1z&)05R7dcC)YTP-uzJAB0{cqUF1`s!7SRUx=rxy;@ zAS%xnz?LA76#=v)GM(z_w6rvm(}gF#omtprQJh+k(IsW_yGr^SmFVb^nIMgivoZnV zEMxC}6@EkM@Eg_6mbgR-=4ccx=TFbF$Qo*G{bKhDl}WS4eQpTCL(^V`tRo2%{b-C81Nu4dK1@~{x+SLUeu!FT0OKeS;v$X&NP|=^ANjXkXFm#7OLgw zSFw+({h`O4o*@(^BiC8{T(S|7PqAobz!~}pZ{4fz?T`dbjkIV$MC6n;@FDF9ihft! zS`$?Eo<4JC5Ugu$dbO09BRkSTXs3><-RtT};!J2NkN`Ey**^RKKbBW8yA&iMK27$H>y(@z#s$raT+>&&vX;l@w!4f;;#X}wy{z+wAQ%$0(qlo7@yHPbiYgkBVv!6w6r>_4|6x;d zAAhe#t^;~CNyAM61)K$tI8U=d67Ved^)NDTA`F6h9ATM;3*KuNVU7ncmuNw9;#j~?k4S!~|C*;`j%Z=Z%x0`=*wg{o11-`=7o>V>c2ZBH6s z?0BYIsG2+x^e(A|)9n7cl=<4+I@ns&?>a?uNz<;73=V?HM?sj{f2KQOE%O8QBX@U7 zrQ02vuzSUs+nwi77Robyh=(tg8lJAVzI!Zn#ZdEo6Hb$NC~qL>G!XR}YG*acrGeT| z8wNy!fO(j8=lS#JmmbB9&B`>p>pPj0xYc@o40rsysSOoWCjNOxA83jm4Q>l81J_=R z=*ZO?l=X7*4cwnEAG&K(KD%AF`BhKIV!)J09p|9Sbwo&Tq&($^{XjCp;dMvf@S%&B@ z9NVbDb*0OoH6M(t58I*F&O(ANOeJ@@33+>7YBt*LuhNNXKhU;nL{tTG5qL>eK=6iy z&4rxg(>X{1nRpy_{F$ZY80w_!P@Z{cnU_!#Wri@Fhal(wk{wX$YlJj$ z@4<&#_ge5mQ6Nu_BTs}h_w9C@6%3;#D3ajJ+%iVl{|w2*K%53dgQJqrU}Jc`pTfU0 zHa@#*=!u`y#Ve;yrBxm|$S22j=1xt1_KiQkSBc7Ib^heZ-%wDWgf&BX1j=9_#5m$T z(rb#YH=ce)Nri^Q#q^*HY5rT96F>Am{L7)bdRs(*CcClw77dB788E?L^?o!`^&{CO zsSmI#g+r7ezUwWv;`ZTUc4xqL7qnmN-az&U)R*(uu3J+dF8h(XU8xqAd=1<%k6cT( zmC)0Fhu?`QY|Slt7JXnyo4<9=h_Z^l)^XuoZ~8_=lrhwoVZZPj)SBFK-DQ49EZ6`GV=G(2pVC%r36j8}zg&5p>s@SUE6?Fqa zS`FE?K)r~+zyEUK`SG)g5bFN4q7@5%e_e~S!;e=ChX}%pHnYpFxeZ+X_d;QqQEFLaSj4Z4 zL(LI4`VYpNThrTX#}ivZEau0mOIfHbD%y>r%0D`LWt7fuqJ8q6m%Vi|_>jKtuK}n0 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 literal 18812 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 DVT^>T diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png index 9186da333f689cf28dc5f110127ee777ebb789de..21142dd2742d74ed6abe4288fd05ffede0830f1a 100644 GIT binary patch literal 28068 zcmeFacU+X|wlzp=+d)yg+XPBbK|x7Ml-wq=AW1+8q6i{6=b+t!0TD_8kzfEM7fR09 zqJomMWRRSdoSF5Mea=1KoqK2Q+;74k^Y!m{REny%-uDT6ueJ8t&$)e8S$6Zr-5crX z=r+sCol>KtTdzk)w~pbbAMi?WsE;82616|AZLe-+Z0}@fdxh?dp}n=amA$#?rM-?< zZ0$^~ECqOldHK2bUbVNkwiDyyv-sy5c&%(r_&5g{F5x0STg&O#(a~)+B>(#^PCC|< zj?Us&`BTR=oWsZ3opd#C_N;xK+hBC-)`j1Xw{`8DQ#fPyu)j3Wlsa8k{gGRUt1kF) zW}W%tpwKHZp`kDOBX6I-)}_F7$nyAiHrAeA(>BJw{9Tc%R~J=n3`eMbnWe}Ut3bI+&!11{miV18h_Gv zi-Lkes`Av^Z7PE$tX}muHf&0F96KLz%;too+ibaQPTh+$b>b8GQFEPM1{bm{gNllZ z#2iQCxU{H`RszT~wLRzdF=U`_35*ahsf<$!{@4Gfy3ilw|=^L^X8TFxm#GJlIG`~ z!(7&_U*8Zdzs;f}zu9s~;mjG$Yu6HH9M7MBT=_&gg>pdg1EXqahPFi#@BBd<)J zRX@{Q$9Eu<|H>VG=kA-jQnX1HNxWR*AMd^}siUmkrPzc?N;j!uvH0|IU+09|^8DA` zlCJ49jwepsc=P6s{phEoJ9y3uc21Eo}Q5G_41u-jIEmD)nm7B-)`ijGgPb+Ar^!A4s#i9NHlR`VP$1qn4dRd z&`-ars<4Y(*jHKnaDWz{ApJ=;S^xSsH#g0Uq!cAwdUr>-XOH03rzdW1G;K)GY&2Y& z9jmK}l5I%R5y&e`(th>)#*G{1{qjmm^|%9ph#$$dY!k7Der1!nI^LE;CUxDqb=z54 zQ!pYi(a~~?1M3*JN__E_xzCc^kf_BaCU*X$54~!dafLbW^Iw1c_1Vo$yA&2)spB$3F2)`0I}! z6)7F=Q)gV9od+Y`##J$^WEoz1Ex>6U=kr zpn-vbI_p+k+WSJt1$Py#ToB_VO$TYsLxKT^?4Bf%! z_T+xNZ*wAS(a~Mp|7}Pg-TGg@{=Z>ZHX03`&$5ijbsS3w2>3;ZdneEN^it#ecb8r* z33x0{D}{)f)<)CU$(}m(XjzVof7>uVf?%cAp6eiF*RPb&vvjG)jte*47Em|`*V-$i?b*UjC zT0Smml*f+~>gzQ|#@@a?au4Z3##7SxMR9Pq|+!jq`ag=R!U0Bg08jAU4K zN_nizG>JxLX}`LZa4z}r78Z%CC-}*j%==zo)t~>s@g(l}A3r1@r27vPxG$t`VHS%< zDA`6KYyPz~#yS_TI*zr(=;b-eQ%HQpKbm#t_a8l~x@jkO^-IIzQQj!L_W0;!pP5;8 z70DPRn8Uoh%3;D5YWGEP=L= z9mu42-#tHlcW1L7tAz7Q?wxllRAQAQQuW5mLj`uQu<#-jldXUyATabRnH$0(Ftd_NB<1Te zzmBYo5KqKn(NXT{>4|#!bgys7!uvf|SLeTU@8&nU#Xht$*V&{Zy%LS>ID#Ersi{vs zTdIV+_t#D{zW4Frp(x~xk=a(OrZT>wBtV6hh*{*-JO2KS^IvI*&GfGkAo zmgN3{EG}KTM787K;NTJ#7B2qs@Zt7%@7^7fkkIw?^kjUG=oM$({U)c-i*BtXbl~!F zXWo`Fy=sG#Z8I5FdRf2H{r=bI;Fv@N8H9=0!{?IX0LX?yO(InXDkCynri@)&U5y{D zjy9*|+VuE*4CXNt$Tx3Jb?j8CI}^%(nlJy$iAdx7z*T?zu-R6^z}`On`Sa(Kf}5-p z?fMtAe~G+1{-{;YV5!YUZ#~^cmMm^PJ+Iks1lb<$+US~AMgmKdcy z^O3wQ3L=mltE;PZc?9DjQ81tW- zojr#qO~2M~c;sbzx*$TRLd9dDvXn<;E-jC5NVV51bl1sq9IK`3<+02AZe?x6KkTOm zRmtm@-}}`74{YDHD^@e{Ts%Twf?CWSz=*4QGWd+(<@fX>V_0eAQ64#YYFS(Xj+y1*UzVK{`n`F zN7td45c4e?B||wch&S!v~=F48~vz z<#~4Yv75fWWmQ#t#S*}Ghjp{9Jx`av);Est8gP_NGJD!(-82v-kfRr&^Lgc0@5`Ke z)^g_NNhIb+xjc`G+OcED6}9K1q7QUzJuIEx=Kip83+6w!XUVTOGN;{P&v$K%F`KsB zzIE#?mUYET%*AGgBfn#d6B5zxqWj@L_$E=w^%M8$QXj;|lpUe>SX~$ZQ3yG#5%;va z*te{+Q<`sL9j{upb+^)5?hZyqoxN+5L7KSV{(s(YPsJm${x*n+bXA7u2D}Garv7$7 z;p)tAgK)9i^x(5+Cw+$_oH}T%1(1dFz<~oQHwbL>7Pn2XUs;~2nw*}lx5#QYX3lh- zxyGZPuZ<+%*mGZ+D&{bJ6)^X)fQhpH6&l3I>d_c#De@}1)|hliMMY)grB%_&xt(`U z8+gnFbvXBIPQH+(j9}UjV&EBSVn|EO?Z-585$a-rnZgYB2%DdcSBt67w74Lz_WSSN z=hLq~EB4(wAa#H&mFz>Y3R)mORNb6Q1rZM)MoX_Ps{>`d45d1M{Ve9S>OTG(?aueu zCD?;SnIh&iwiYc<-nDGY4t!>>mu-C~!%~>8n64 zsoLDRBh)91DCvWzPtts z$(yX}Y!d7>lh13$sywOumzT&I8)-^u!aPrk5zau@rh#uFoUp{7*fF1!f$zbnP185mG&n#a!Y#++Ous=lFNR0z_Ejg zDd}AD`44qERo&IA3(l$@ai5b+P{u2U}CgD+IXgeGiPGEX~ahWQ%F*7H}#c@9P?K`?I*YWw) zK_%nAzY|ZcK)KeCaK*`e@yqnkp zL!VwnZQRA11Rip|c0=#)-EVHDEi0-T85v!lSNx5RZsAbkT*-~ajzQ|g(D>sEl=B(a zVle+_A|;yp!+GTu6cy_p9#YqMb?I~l5}|>e=uBTJ9=Z|FG(FQ~VD{dRaTv_n$CL;c zNHQx}Mmbx4CR5-16~T$bv;&I4G({=jC5=}vH@YHBBoP7=Q5^K$#xmU33VE^20Dd&H zEZfcbGPDcb7u==wadY4pi2&$}fJqr{bCyC@9lBUSnp6E185n{PU0!|L$uDonG+rqS zZdP_$S#&^%6t$zN5nT@>CEW<+IA7#h0E`z8!a<&)bIv*jF$gSbc%o>n(lNJaby4xk z$A>okG%@Y9X=G&Nf~(Ga(lG~TLk*3G$Q};UgEdOA0CV>}*H)Z>Dc=rRlPByN$H*7^ zY_7v-)TbCozbh#*VepzA)!Dp9Sjorm>Zg~6qWY`34kPs$W?D$prI%h^t$BXB(FX9f zF59L@BhS%dVQGnro&D7MAGg%s-o^n48ZH08=#{p)=f;mQJY;LO<>N~VTxZlKItmC% z)1>O^fVl*)TeM}XI(2$v5rPPcIaIhbu8y!_m%khx&EAlFK??&@euP(4R7c!#wEEAV zx20b$+2Vl^N2I-RyxTnFLYncJ2nm{c z+!;J%Tacd*{is*tAQ>-fpSqZ`x;pig{K-3!uEU3t^$X5>t;~ef*4A!^9tHl_H?lzx z>Kg_?1Huq@tTjbBRJIB0uao&pK;K6=PBXZ%apJElYa)GGx zde6@dAqPFT>3JV-P~>?SS?a|<2(c;>tHWfke8HDDo3LktKzO6Pz3K9%pd%7^dqby& zHsI^R#bQT_$X3EiA6{OVa(Q*k7lGmoq=G<0hQ~r?=Ys1T!Sf5;<_NT{e|1@wM=w`n z7oUE;NT>UQA&H)n`&y9RW(GdJy6mz-19NS?wwk&9l@W>W@9iPk0idf1H1-N}mUZ`u zcFd!g`@A*vWXl8nY=0)v=R3I08RdkOMM6D`$DR~({&Mj}-TeG~92StUG7AMR29D3ew#y;SZlG4{o(a-p=koG=z8bI;>gMc7JueklE?_B*r zIk0i_<_h~(oG1mCY71@})e;`AXnq7cXAStRpBJA)~U5_7H8` zF`9iJgUV)K9xpyJjiDm~sPYEd)(X3>9+QYM1gvcU>;vzVY7(vi?9%T?19`0>&c5kbzJoY+XXXT%3=!_mQ#bdO?Y*b@9Skr1%#8Z4E z{Yu%+x)U_um1i4gkDac7!2U2R%gM(EWa=S%gp`Mv)dLbUUY~jWtkwatIreS&cs78} z`B)mR`t*5I26^1qr?wdIuXg?Q$0AUB#BOQpuGirl-xh^;af}(jXG^wCRJ+a2y9esN z?!0@GCi`{;_njTuxM|aacbATe(@H#T_DnPocd&$9)H`h3u3GYs|EndRz>_g%P&Nr2 zXx1U0?|RWw9m1AnS|@`MYJ>!EKptTr4=6Dj^YeK37CK7@k^(S4sS&&f55Dg=kp2Gq z@8b|`lu6p~w~4ctrx-FcuBCwEcXxLi_kKsW>_sF@&}ea6T&gd1$+gQAGsP0_lQ{5W8pF9Zlh`K-WP&S#v~%Dfo+F@ZAGJqaTVnuEH-{G zO|rba&5yb7yN7h1VA-Bai59i%C%B_Ak&!GBx>37q`<2$Wx3_5)d9LJF(q0o`j#Z?A zk-cspH12VEu^@e1|*SCNvR$4#<!(F zY88Z>Lf4oQOwT)pq*`nsv3uLL%Trd4sH|vYT+@tAyYjB4O|*hLG;9x^hVvHUSW4ky z0=X`-%n-1B@RKJ`D(1l|MqZV$)S-ZvWLo!P2-0x*gO}sI7<#gG{Rj3Ox#(S7H{Mw! zUA4(iAjgiP!_OgtOP)O|s+sG#x?n=+Ut^LExNG^5j;1E9iGsOE&xO8SE7Nrj%S8wYsyc2!GB$?pexhORIA>EWgFrMR+cgwECs00bLbX%wqHfT(eRZv{no8pqcq~xWIzf1WbW-|B=Hl{ApPBU zm)dMfn6Z3C!gKDfJG5`#Ujat!?CeJ377#G@eYoZCUpd9ZEgrS9G`EMMwA759-g@O= zmYaz%edK-fCJ_@$r}9y1PWw@ToGB4I<cK}hiw8*$8+Aq-c8kZp@;Q>JzkV@{75>*Rg)7)1&wf{??o27zA$u&k~wS;?#A*!I;!-PhIo{W2obV=0eZ z0=R+FcyzPRf>~twi_o9k#-Us<%jyw*cNbp*7yv}xNnQ(H&G*0OtYgWE(z%7aGQ&!UiVt>*d7#p$6a zB&RrBHmC5CAu4)A^bHj-XQBo8o0t3l300>k( zozX(XMXUU;K0aGnsryd)#9^+({SetBt-*>fCM<1tP@~09~3`0`Kp$S~2%`cR!mQYc&I53hmHB6;n-JJvobc!ID;+ zS>OXTc=hU)aB-@*7cb;j6itOC!&-x=sItndAx&ENgz#Kw6dNxhK>*?MQ^Y_~(Ic<0 ze^jCm5)^SU^V277p{vzwp*IG3M3~|+X3Ndrk93j;ove0 z7~H$~d@s3NxfT)F=Fa!^9*#8T4A@m$s_^d44x$4=bk*_2-oA!%0SN}}E?9n`^XtQ0 zfLWmGCMXS%Y4XnRs*j{%djl;!a*S&SE+_D1WbAKY`2JIQdWnnqP)C3DGD6APs0Q3 z9Ew`b&e>SOFR*v}9a!XRF+&Xy)kemqrxJeHyqn~etD~P@K?ts0Tb+|eAzl?|qaMK> zG{`Jsp!(TKF}K;I8AkwOhyHR#$+hLFJNNHvAupsuuczPDL`KFtzgJ@j^d}B?`>07L zsU_W%t@sE(v(+o@>CbohhTrWnD7Sz757F1OeToL47XFI2%e__~_YCX2&tWIIQ1%d1 zK(a1zzr)C0Wg`;gWovb4TALa9PZ2mOWx6WTB{7Ho`={Zc=rTg$kg5n4h1&bx2)JjY#j1 zGT=|SB1*3RcjgF-fXamTzpmKF&#$Jcs=DP&>+{o_9@MpkgMX0wqI-Q5LXqzl=30Um zQm-f?KkH#YGW=U}9TKIMznnxdzgLW%yfvFEb}Qd9wD{@jlUsH8c3^nzApnfb_x2hQ zIe&6?wh^e$j(IzIcUz#kTP`UrBBOq2ZM{JJF2wVo8}kwYVIx@ded*Ol9LLF0dCe@E z5o?BNL_qall-2BJuHopb79aJ#8>AIM7pH|InnnJux3Aa7NVErWGP!t z#ZTm7mSyp^U=8B;SR~Ic%}r>bs-ls6UWk<84GMJ;1yuoe9J*eAcaKp(=1iDy#Yj2% zSeGy$2xYp(EM@4Atx{(p*P^b>S$xDE$$_Yjkc+EH%tvhKzjBUz!dhI}Lq#hWpver< zOG}PjEM!c+n3$MDf`S_Nb_-ELw5U4?V4xGZsVl;U>LFA;z{I}OEab)P_}&lWYaa5&uqc@le!GS~OSuPvLJGhgOUkqK+$S;2DO+KM;cog)pcDO)kl=Z?_F&6-EB} zJ^6;ACvPAFXE0R=Tzu`#bf(B_ZB>FtA3Xl(<@ba4L^=Wt8H9_mbf-}iyoyWi7P|IO zA3#pmm-cb_MoHaoH3_5Ox);&WoRB+#wI`>h${d@a0PY6zI_Xwp`zF3t2ndRZxcFTi z+kJ`WD8I*ph*F}#Wj$t_OdDqDU`NqEf6h;u!7nb-hM7r`GJ&Y zRivb{FTu8SP6HZ4lQT1#a&mH+bwm+sZEgM66^GkgMEN2$VjLUcETpxF92)P*K7`9g zdd%v)Lv;|}8>$T7hCO~5ME%l6j1~a0#UX!YTegdZwW6#+EJ)CQGcNwMuH9>Gr7>|A z3w#h{^pG7{+(wTUax&tEUh`BuqgBFmxP$47Hy4xo52^xzhS}`2)QrY9;WyFwf|0zyN23S{)Lx&1peI>G=~0` z#$~$K(HU9C$US;4m7N4*m0IAhzq(|$J^G|QGtp`Aq>VAyq|DyQIN9v>%;w(hDINmPV5T{Z9pMjqCv8+r{FV|ibJ6khaE-=56mMtu+;%jG6kxfMLooLO&O({>B zLYaPJVWDCX8ZoSbAY6s>gwdxeR6rI!wO5S&unll&%|90A7@9#Io&WM+XGw@$8;0Gvn>zbuM>y@+1)NnbigEo$3O#(63HIP4NA=L>!P^U6M2e zN+RU10UT9n;FUJ_#*G_o=cR!9f*wDFuAqWLB_ll=zXC?uPGyslq^Soo&(}l@CGR{(qgKR;EH4mrQ^_3!Qk%IVU7KvkZrU_apR0#HoC?dk{RBe`0 z@B;NeGl*P=4GQzyU4V~MaKjgfhP5n)}22O4gXO_G|U~0zXnE?Jc#(0bsbw4 zRJvkdY%H^Cm{)nrqID->6C=5fO>N`193s5PNFnF~BoeFu&7n4>XqBKjqXkL5C*XqA zKaBfeJ|$KQ7*{Amg0K>(!*`gJ6((XuMd0=L^4E`~h(B5h8p;M<8q3e9U)aL<j)e9;|-G_?}tPwZ5Mz z4fQkPs3Fky>*sd_x?_jPld5V}DcLucM=kYofjl8uj`}Z6xENa%F1&zkv%+1DhGo|< zBUh}d)Ql&4hHsJ&K!EU=d6N`v&|H0l{%_6ae58KC5$tEjI-ZszfF&Obv`I3_NMtW#Deu z*uGsGRE`o2>=Wk5ND@9mxlHqXkWPaE3;6g zDC?1Jq7`~7ww&Z!GtG=j;1hDHxVPL*`_jJ273sBoeSI;2O3Au8wMluL)wxa+ zyz+NomLS!{2&sbyWdO>n+j8vSa|j)q#4~oH6{>dnfNhqUw!| zgpExTw+vjAu_%`65Y5!l)yvE4W`kA8E>(+Ob|+;4#r|H$rUACe`+1gZ`NnKqPx~RRg;W;fX`?pY^?1X5=plmK*1uaJ{uJSG4xJ~j$02TNL2D0sm zhz~1G&S5jMoV&&$AR`3WJ6|Uj0YK9r3S~bHV%UA4z2RVh$*$T@NIk?Yi*m|U5NK3l z8p1{G(gC0Hb7_E#2DO`tNZ#6ZP^lWz7!QIFXY_&M+8=5nh;oCAo7=!?8FESM3qZKo z&4WQ&`ZZ7~V)6aNsph);wM59W?HIA9^9ihLR!~+BX27f(>JBa-u2;zjgCB_ zc@|Udr_R}?ddO`s*<*t>Vl7}>GH}^nu?b^2-5+K}fT@C#(!ueKH#HK|5?Mo;#{adH5h!EGpB5dXr-@EsB0N{$dkAC-ml%uEE zZ_z5j8Wjfy}H54j9_E5WTM1oBK_8Tx|c&!7? zuNDfKt)R*`AyY}=``*Yr%ck+idlrgA$4=U=2)}XMyq#%$-rYV9*8K*>op;~4b~M5{ z6puMJ1IgUdE>Bxuq^3^Srs-cfgt2Z!VV?wPUxE~JJy%@)|DYlG3Y0PkT!O~vxO1<{ z0S=A}D(TBv(}}f4jt;wJs|1eRB}OZt=hqFR9zKUTpDbZb!C7*!glq^tHzgh@87?Fl1={wZP$`_ z8czsl9A9XY9eQ(y0ISf|KIHeE3*ql=@Z9+7ApRwK&0nOXU9!cSIyarZ{NRHpg<3?Z1F$^;LRm+zGd&|_|EI4xVOR9oyeBxy1x`nr zMQ#7yx$JKm#6LO2zi$kHvGT#eGZc8&7oeq;+D2~Jw38F+U14D%Aqv5~dXH61$wan& zgh5hX4M2me-;pYO6MuvwRs#V}EY4lujkV>dLt)iI1rUCUNOvW|V!F=tX2z5O=pH|Q zyzvR5>J_mul*5t%q)f{n9fdumUXiaL8rcA~em2%^Br;|1$QhfnXNE+xZ{I#b?*MGb z%7W0}9N~zSN19P8UcyNW#r3pKhwMM3NJxWr5#pkv&5LJ7)^?J5#DtgV(1}^tdM_NMLsFmC~1BlK!J-Pi0KXDarM$Nr`9{b&|(`&6=8%(qY9VKks z+~smgO6lSr&raO*bD8RIrVkUfd!hP5DU^G{1ioIMXnN_NfBsq7+^|tp8&{)8{}{gJD*MHN?bkGAH1<>>MU(1lJL%W;gJ&?ccwhnK|NL z%uT$~($aZT-)-2@>ad!cRk&#}*Lcqdg63$OW{9zEY+;ZJQ!Rp?80LPBv4ptga&-UpyXq**!zK9=g^y8xGmLs<$F2Z_Pt++bG*%ETkgNZ`4^Kh{3Nr+55MEo=Li~d_%iLA?wa#p&*`X1Ou(8F)H^Mi<0tH$#-ezv@^?7%M zzPMpu+v!V}o}HFAKk489iOOy%$dKo`Gq%A4`f<&6``QRsV8d9 z6~gQ0wF5%*ztmL?SyuP^+~7?snl;X_NYm>)|49aE)HpBrQ|9%x=k}q!=Xhxn$Eu2Q z?sxyaBJ+Q9r2gM*pXd#aF@vWFf_ES(gT7E=beQPSgOjDqHWD&C{92!u=NA|I)i05? zlXVyi9x`VGX|{tmAX)p>37BBip%g#Fe|_#qPz@lw$5!s(zeq}+cHVLHB9kddDI+E1=kT5`HsUH1bu?fzku1u zSkwcN6FQNFC%N`sjjeyM_!ti6?vC;{!=gyjFDx;sw2Cj+{Vg1Myx1_3Y_dMZV^U zgF-@@pf8QB-@=(DLLgL$$0MWUZraqpEmG#;A1qyzwQ^x2zXlTz`mXf+H-@m|N#x+r zY(jILK*alRjYK*3h*7X>XMeEouH8P*$S1%k7U3(@e0Av^6CYd=ds+(IvQW1^BS({x z*Q_x}Y%+e;`7Tq$6wC>b_4VslN;Ep`AoR;qe%QhkXWRFYIK?Q@U`DFYlQp3b5M|)Z z6Dd8y^GLaI_89G+mysfoAQdU~FvEv+qwX31!&VmVf5aOr*$x!N1mVmg1veO(L2|DX z>nMcTUM+KSiLAX@MFBFNA3uDsB|lo~iw=?Jr&ay4H~p_JJ~Al(&o(#Oj?|JCJ<=Zl zGXXl*YBDWaQ^P&~y0HNqH6SG=89$Was%H-;mNtse>Q~@L!Zmk@8rg^Bf{<1r?`K77)!i|h!Xc$r8~sR zi;GW!AT~k18mml$0TgAF7GrJPbOt`EG{NzYO$ks#S=ITAT**>zDB^XXhqk3o?%$=` zI8+9Oi%C;45>VdM+me#j2voqO>X!b|S4>}g^5n?~IZ__!GPWD4JphNSvFN=E!PI4b z0%8g-55$dw+XS-kXKBQfwxemJ zz2YB#o*G{^GB!qi1s8|*ZzP_KivwZ8oetp=Ajb0>h-r@C;N;|#ty84HJO&$_xerkY za;mqGa%QXf+aX*R*Xs2TJup{3hCgiwIGoD4bBL$m?>_^@r9*>6^CWeL+9ro@c64-* zjSJp(g*iAl_ys^iyiS_2;{a?Zp%v4VbW}!^Vu=|N)!<;aTy|3!eo1!SEo>f#7&HP8 zo*E|7hn{gi4c5RC8+%Cog&c*&YuP5lvi&^NzTENL5#EX?(gsB9hl_FWqc1_>T?Yp; zV-l@83&rgE{fK3WL=yNVN#$hb5+fWdLB1txW2JEV=U|FsQA$&;l9=)%f^CYHXRSo?;tuGnfBY{5B;HI^ zP8`NsGy&n!W&z)9U?SU<|2R9^IV72rsEN|uD^F2R9orUfA4e|IJ>Ot7P$8hvbLrtnZ zOr*r_gn54m(-Cp*h3LD=Z&+zj4&l|SjZ=-%cy?j~Ie7p8e-YLsUFI?w#|bVU!$Bxw zTGrMtaedN12Tt-@$Z)M_lpi&qIpUN0wtAn#g_*-X;B_Tv2}us6`f$Vu9wI^g`R7$= zGen^qS-0lZoIC-w`4H$8yn%=H^RwZdP60vBJvh1+@}Np_tK@V5>R%nMBgyV%A)%wT zTcJJ|k2qmD>u#G}voq2|JKG>i2j?zce2UUpL!2rbM_4F{7;ca@9Ljv!G2W2i^WdVhn2T(QR|J(tErh@hMR zPLddPEE=F)%w;lq#sn2Ls{g|nh%vqjav!74rY*RvIae73tU(CIg`Sppy8YE7XbL|)Gjplt>d1=#61>awbI536p2y2+R&))p=kN3;b^J@0$dc(*n4>5{ZQZEgV(dMn@mAJ zWndK2V`h^@STTWJqqgCw?HKrx2-diHbWBW+m_jfKB$uIt3m3c2j+#zSbatM;of;Az zZtm>rx?3@r`xPS#+Sw$QM$>o|f-=?$Q}8)P(DnByQzaMk>gQjDLxzF$!EE}?_+f)v zH$>sh^6$Z`ri31_F}ZB*gu`*)hhyMhtAE;hv*m32?KgV)_XuiJ92&y>W$w%KHc_Zr zzK7uD2Rh3DVcodUr0h;X8%p>5SZDnd3ICTNIf!cSA#vz#D?RRS-h>Aeuq;}cUH;jK z;RmbHw*#mp zcJ}!)8<}88iIWEGEt#B3f>QP3VAOqGW-eKhAmQ~O^#TMds{ex+Qr!VbC6-q9Aq1Kx ztjYQuJCj`;Wo^Knu%+Ll_o|qgn&SH6W?M&k;(;55Qx5!_fok-PQI-!HyWvY9`KCdY z$q|NLkNIw27&A0z)5f8W9GJVdx+G*=&Vc<;*I;97gy%VoE-X@UBCR(N1MD24m4M4p z6!BDp{gw0w1RYYBK{&LzTX%VNtUg|S5x<;%y?$$NtA|={02eMxYW<|A4$66sm~y7$ zL`O1w@TEY?B*^UK)s4eDvc=8?6H_O0?o~iss{iMg2hThvHdT^Ou+3v&TS`QJL$?(r zG3v@N5>qYqEpd1fvjtq|FG=y6SOBR0{Vx#&$l(=4txk+GBE8Cu1#=yVMAZBnuOrsh z7kPOhENDP6CB7vRi8++Rt5Fjo;ug`DIaDI;9VC2#DikUIY#eU1IZ^^eRuBp=CO`#W z<$!7D(MdgZ`p))1z%p{g2H{W;IBgx0lnT&NMk>`P==KkDiq^)fa}ZZA#v@4IV@5Ms zFYg?@h>iGKUFHfZklF}JjgQ3~5{OF~4GgCtKAeTsAOlCrXqDJ~B2Bg4-gGmg%>td{ zbzGg}Ka0eW6GiYA%PFl6xY7|}^+&v3BL?lX;Fkx9gD|W9lSa zvV$;n)PuKZpy`JAdr6xgd=S_5J4qLS&lctc5Ep`l;7KAn2y`hu=FJ;Ep@F(SR)rM; zG%!n!nEy!_lt~xC5Lh1B59F5??YWwyhshzG9v_=Q!;~2S;s#H?HLrFk?u~1B(hJ0C zgX(aGam8+2v-0MLQAI_?2kgX(s3P(8Pxg4g5=iF{I=t3A0BTx-zA_2pzzb|gX#?pC zuVObT?-8|)2AX{iAe)GzXQ=)?zo3LcOxT-u3s#dxF|fUYmDyIRe^5M96WoyJ@idrK zN=Qfu(TSWoTx9k2^*7A&8UCx1W$*A%3C2GY&Q56O8&+SI+7qINh$LkG>4=uBP3fbf zmy_J`2#{ZzC^Eq9p1R%{b%FGhV_Ago88pJCo^H`9jBz;wx@YSk===SK4f2Zv)sMZz ziEWT+@|Lh?kR_IBds<_u`zX5z%7nhuwr9R9)@?D|3S5dV6z7ljFlm@b8ApNXB z@k+n}H;HVbJSZ}PJ5&7waS9IW1l;m8wH zctLSHo}8p&C!gvEaA4rl}S?AMrN2?VLH8q&;C_e2w&^6P!Gy1 zq21(}_0jh{l)u3;H#iwv`K?1tHsQ$t69Ffi^ z&|%or`{6+Y*%+;vXVCljjJWm?!_J{QMrvhR9m`ctUw`~-Y6sd}NIL+!EYuOmGwcSG z3%9L9aA4 zq=MJRQlLuyERxq&{1d0Qx+6XFwx0~q9PjG7NJ=yW+TeKz&>dO2a{IRf=&Tz{_@vX% zi&@Zj>D$qc7SfGdwlu=TK-ldHnv{4~4&NEg3|!mUf-rOl$}jG#Y9dZJ^`qYNQ$G`P z1u^15QHq9iYYGeL-zN@e?-lTc#Hg{U@CzD|u zN5iB2@^_>R*VP}(vqsq8Q1K0WDE!Oxy9G-dYWT14rLgzZsYp9Gq;qd(7ORhg&!c;6 z%;F)hUdz=cYQ$GWIAkdQoZ3eiM`ayNx4VFtzT+l5XGYVP2-Dik<0*7r7c3SKk z8(T@zFUWn}uPiTr)OC8$@XtU0WFU7824Ms1*B&^BxL$^i9pVh}t2*q2omK;A8wCO@ zL#hh|8zJ9{;DCiq=Kc00e5l4K>?m$(YKnuPfM(DAO&eC%m_Drh^&=|-4(Z@^Y0qTv zG3-6=L@Vfi`b+eG^0X)KJwI*T8bWG8Kr`sn)U8(^d&}BYt)|iAJRPn({BbRT*sTwrY;Rl!Grvrc3wRIPKE<#%; zIYtiMv!{Fvv&FV_{i3j|ONJmGl6qkt8E(r-BVH1u$~fdC*PeSw^i`&$DXWCE@?$Nk zxXq5%06l4fIudHv@N2t1oV|nwkVY_cXQeY{*$bX&gKI-s!$YUm?Kg60JtDDq3r zchMTSgd9h;0rF1+a6Xu>@-=r-MM|J&O@dQ45qN(Dw@Bce=i(4Y)1P_r_+A6dWYQcANU{BY<@L%_b1 zG|rC}*i*NE0}zNPTLVn0F)%3)+#EdnqIcrbxC zslv%X+RmUA1C=XCBP9gimlP8_Pjos&dW3^ylvfZn6-XdWjhHJkt_(i}*SrL;Z1fWo zjzh9u@~d+T(ggiNL?&nX;d!tKXvo2#1=1R^fgsOPFhC^p4*ABFR}L-CP0S)265@c? z1a{n;CYrdbB_AG+IE0VLAvpWcb@Ww<{pYtohYi)CHxqOUdC zd;z(bRD9n1Gn>sx?p+bGKoIax;eM@2Pq#rIr=5WdgSlOEaz}o_zrjb0nGb$=Ik#QK zpb<%hG+zl`t$v-2eRvPvw(|onX#El>cfz1Y0mA#RM`4A^fDPP(7P1GoDFSY2X+O~+ zS>`uO&>P-?4DMLswa^#h!(NOQiEMZ%E3$D=0t49>@;^oZs+&kYmF1gaOS9PzVp#y{!Se0GUAGJ0$$bN zbb=^AO&|8l2nCL;Yk=1Ga1V?WKhXKzXdU4v=?`4()0eMbkK(o9=EE5z0tFZ`NjM*o zokI6;yYqO?0KGi6sgNJcKF1^`(0d4B0bA1#DVS8=2kT<*Lw>(7GBKFZq%VMKtvO5* z+Frhh$Z6CR>}C^fOKd}Y3jE8$Cw9$}6%uL`lx!J{ydOHT7$A0wK)y>VDhelSnO@!p z3CsqrYeo|Ia7^juV*KX}Z_Z|U8C*-CJPV933e_1Ob~Xu#w(Oz`( zu=1dC_*H>rL|eS$$dPI|$m47BoUD2(#U}(|#KSWIbl$^m_*6ax$i9c-hig=g_kbK8 zxwHMyC1+=61~}Fnuj)k)z`gxc6^SeginikYk+D`Qo4J3E(1%q4MLw&1?j>o0|O?@Xf9@CX+oREz3S?- zCn>)&F`1*M>ce15MxrW?uQ^FkMXM=&%BGS4Zt~6m6cx`5TbnA!repg|UR&;2wzY9{A=3 zpzc^zyaKAuyI%m<FLk4*5s5050>G98>9t)j6IP;vMw z8)h@qw;y*Tr>vaG*n~WOl2U^*9UGb*#g@?uE&~XgJQorYGlIh`1lSpgnpE)x&1)mR z4`4`ZmQz$r^T*hCCb626U>~+%dm)#d5&S;gWf^!t1WV9Fjvro1bAe9OWh{xl#=^q# z9_P}UzlV{l>7_QeBdZrcASMQ(O~5E09@bZ=!Q?HBi8_CII`fB%BTj3$v~m##5@|(& z5@Qv>>PnO|rb3nC`J%1C6hB`U*V1gvoI@L=7OYw5D5`*u^hL$!4=ZymS_{$}q8Jf9 z?>%CBau1{*ixul4)4GGcti>P+*Z}}wuSjQu4O*r%J374-$>Bct@Vnj6*PYSJVg8Yv z{df;fo%R5ud{6<$re-fiEtF)xqD;yF<|$l^slVojl2U*XnMdIsno_v5M1$zS6Fw!g z$mzQ&erOXA%M~;CjD_Zv=5p_tYm@sz|=xd6rr;`)04 zh${k?sMe7{rwR$W2Xoul4bNhu?bkNDs^(=+3Weea_3sMj!!^D8XjBp=$4oIh;ixsD zQzEG0m?THmEXko5t`!%%-qK%3vT-^yPdi|_I6GHbrl!QMlzF__Bw@bQ(?#*ISc_Ov& zjkgx0;Au`$Dtyb~d?~*4iUI3JMoCG@$A!!u&o4PVdO&<4IElgtv9eNZ99?_DQw6A_ zT64R?bPsOc`LM&$&P2jMQSr><-k>u51k z9BOgi6b{sA<3!a!6{l&0C4~l2M+sxXvolI15qN?99TTGe@rcUe6gETOmQEE{DL|wi zuyMxsYv6s2k~`K`Bj(0hn*vsw(@d*SsvVVjlIB*}(rOk2iJK_bsILg)T%pTy{AiWC z#B60X@d;p&9@inv>KG2|Y+q6^2$?8cqB?wnxQRhRRcN%56fL9RS@(g~RADFTAsNhP z&>^Rw@bO3|0C}?88>X3wT2eHn@4;EdSGM!&ehM%$Z_BPR*2U@|PBQurvsX9E#;kRB z-{y!c{hI%~=jU+V*Y}o}+I*m&3{msOYf&>GM;XFIDq0N4H$^_0J=Ap5DPVu?g%O;n$V(WfJzeqG==M8pHvAzG0ZD->$?6U zJ2_~l)Vfg7QqcU<*}wk!i_xd`g2`H?=*8D`z`ERC_~?NZJI%j9b$SPvpRAE{yx8Mm zyKPp!fJ0Cq62iAijy>sgpSp*Wvj8O4sg>4Jw=q;RZ&*ZE zRzPRojV~MuUGe9)Lx(1gwLPxZUsQy%V_KLaJ!2}s-&>dssJfy+ikbjqA8MNREhBal znl=p;l1TAHMg~_(!YGilt%*Y|bQNa>;QWf3A6eZmrftTMD8Q#qI0ETx@tu$+eU^|c z9vV7h4hcadJ-g5@DXXGIqv(zfez>rRc7bO|!_RTg!x+OY192Mh6w-wY@;!o$MOk%8 zM&D@zvr`-CcUGjJo#2o>gd1{91j=)ep-l8D5$)l1evVTC;t(`YEnLa_1TTjXb8!1a z4u}gWHIPF_(0{{IJda(}T(DP3Ijg~o3mvrNyd?VKGPrkOgp^nFFIwFv-N6NS9cfNR z7YbO=&HJ>#uaCCp<%BSp5UmC7R5CmC>1ET8Gnl*2i6J#m-(`2F{CAG4Js3W~}- zWkW@A3XDTb`08pcUv)L2nfb&33Yd*4E~QE+nU5E(d7_j5NZAmvEfLbIhr_F?q1AGPKtfttaL`R6SszH#kOB)USohU>8G!76bo5wWDr>15$OHQ#2mFak806-+ zoLl2r`Mhg3daa|@OT_=<{kc12b3%Hkhte#FSa**}R1FH_SroVHV-$Cx2kQcOi%vhh zy*G;Q|7^X1s2AwD(#r|-Je?a}I=ue20Bc8W^HL-gGo=qo*+34HCA^7rNY|A)X`DZQ zKDZ}B$E5Nn2(ehFq)>sD3N_MM3)LXQrbh!TrD3pI8j6&TRl6{Qr{@_&vs z(4X)05>iN})XLPHhnl)MrwDA~iP6-*yJhwmvlR)z{ZEt*v6E(%P5zh$tg2mpcSc zr~Ez-9x=x9IH+OY9c*|~21FOu?y>ef(&jYK13QdSrK zxC6%n+$N;)IUf97x!uGV>zo56XaMpNP+6j?6Sl^)k@$iTBcN~PDj`X;WaEc{K`uVr z5ROnx{E@}^b?&a31}2w#%4_Y9_GL}%z;rY~iVy-YlV5X>c#G&s4waL{*(;4Hzs_e( zH)W3A;p@6aU3;+CdtC}DiBJs4sl-r>1pL+@RzygpAK@YgoIyAsR$Y+}=VCF5f?J>5 z)(4XVj};dO@}GHyP^Z^meK2}da)f>)hr=ZXiXJ5zEu(08N-7-aC&!G>0CU8X20a`y z2o~5~?T%UzWmMW&mefrs5629xMYi$r@r~%;FZc8!MY8s8Z1Lb|r6NAw*xEJki&j=2 z5J?=+Z>%(sq0Q}zRdqm~oTEX`%aN}|;*F@B!V3As(}iOOP+u4z{|^@+&vFz}Eg87i zXYUcc7Ra7xN9yWCJsCo1{ohJE^Pi~BFbZp1(==F3Q`}MoHK>46tcZmoxKLAvHlP-8 ziy)}bQKVQzt>6-4A?X4Hje^Srl?dVjt{@83V&hU*R1g;wB@ByIK|lv|=yOc_7xYI6 znc?31eeZYPbIyCND6pPo`JMqT#q%XsvOrT)QUVgod_eglU?9jb9{$z3S?8M`#D)~o z5zwq4`dr=Nxrf_p=qRlWaI0;LM=IDDmuCe{Kk+Ax%+7EmI(FiuDGl$W9we4P3I;6o zYUJgm?Y0C8)Yl~0UuhmPGT9N^HcG-^1E!LK1LvOfw)au&;VoL)u|Kvf+}>FY*b7-} zS!5`uRz+>uYVH06<3+yZ$PJM~D#B`zreZ1$^9(^%pavPf?CKTZ=K}$Jf?WkD~t{X3%8# z(oZu78<5YAhKzbt3SiqKjKmcCHHAJhk{gj;$5I{#v8chI6D95>J-urJx+^+iT3u@?WVLW^-y(>oG1?DZx!gvAfYZj z4LdDHSd6FJs5L2}XX?e*?yhfaey8DRKfSvDdMB#cz%c|l<5_It zln8>riGvQzVG0BCGEIr(#o@sbBfPv6WFQ)j)3c3&fS~DHPH*c(wz)SAWA5}li6Ua< zwxOm}00G?L<(h^#H;7rME;O(~glrVi!H>kL_;pasTfyRHV>>HeR#^pp<2Bi*Nlh5) z#V|&c;K(=Axj^e>Fme?u&P|}PL$?a1 z`KMgDN`00unTq6&cL-16VmiHodo^AtwK7sKx3nx08w<3#rPNg9ej_SHMzpIE67ef! zas)K-(v}(cps9S>%oXLZ&V{N-s9fmsK~;vwvfZFOsc*nx`n$EFhou#B9?2m#`$}lm z)Q<=&IlJ2H^Z1j1u{(tnW7J;*k&f5tVGr^@Ix(66O?AV@_4ItVH6(u?pHJY#EP(*< zs5=N;vhCYS*`VMTscOXI%8X99EA%5ir>li`~SZG%{FuI0Mh& z7fSuS$rP0QAbJG|9+b4O-V4CN2l_qCpP6g*9(DBXG_S%Ns8T^t$Z;L5MioBf*GlS# zf*%pk19Zuk6Hte4ayIWG3dV`JoOQ38li(dPY0)J&G5r&GV&=|EUjvQh(@{BOPC*z@ zB}Kg;5M@7AW^ZInUGZ-AEhAEC&=^@t-DPg87?pny$AAEc9`*f7b8F=>Y&z-I!u9u# z^p6<$@p})q{D6C3yOrh04i7Z-bFB@bU1Wz$XaLPlfP^utP^Q((nC$3!((63t(MaZQrACC4rgrg#m zJ~pb!HO`sT#o?~5c|DWX*3=a+2d~$iI1`6vm+*Yj%yVa42Ga{xuX#Cdr+0iX@O@Xz z8JCy~tGe}CLNu4cB`KZ?+L0fU+}M5GX;JGnv4N>w(p4FJXvAWyp5R68j5^2LoLj`Z zI4I$r!OS8BhM^7Np^dQ_-B~}nR6Rj|sEu@um_4*DhQsZWZh9_^>pE)Sxe0-18|7Ld1{y$;bYH#j( VY58et?%SA3!xaB74^5uG;UB8=Unl?o literal 18363 zcmdVCc{r9`-#>aaNl}JSQX!ONp379GP%4GYW5!G=nTJ9Y5=n!ih-3(n%tD4rNhM^a zWXKevgx_bm@8@}+_j&d{_PgKX*ne!tao-i!bzbXS=UU(IXId^DJ$zu@+RbYz6v{ev zHRWRz%5nz^Wtj&x6}~gLH(3II>^ZBVclNlm^;vgwS1XF9`B@hS=d%uW798iST+i4! zJBbO33ySe`*q%M>a%QiPkmEmJAn5FBBUB%++<=R$aZ%GhL!r=YApb3++`hAkLOH;z zuDoB{Uq0c*0&A59lgNv z`RmPF=d@pad?kEbqukzP|1~a?cX=fz9~?7bSSfVBZe(($bM zcdvao8O@8AMOEgQap8i;q*)xu=dJypecqK-Z2x$3nzDt(_B;cDjLgjYP4-bYZ|ZT0 z(KAH(#LwP;6q>eOM1(;^L`1L5XOE(y;?>)?FAogZQpl}Eyu|;1Lx?2RmRXBFGj zTvjMX33&QcV(r?sW~WZ2$LVTouk`lzj){r6`P7leievls*TUM*vgz7Z1krmbTuc!O z^c36lp^WEeph2dpy?t6|-p7yHsZI8|&oUp-Dl2mfVG`&VHf#vQARjzqUuO3I#bc3lUCr^Uu&8LekWkk9U)<`Vv$w;-Xk5>n z(PTY%j;^g!RFT>`bs1~8T>@);m%JG7&J~ddUSkc_y?&kkW546~kY{^6T@uuyPfpM& zi1BhMsW`s8dw)k6UH!c~w0{oiZ4ehEcP?N52f1tg%iG^( zGjH6;wQJX!st`IU>Bt*5Hd3DBh67jA)l>woUiVhU?~liWhYz{r2Sy*W3zK4hJy8NE9 z^YHez{Pp82B|zfTrriPp8C|9pv559Vpe&x!Q_k8Dm4s?|(;6?>l@8YJ^ zB%?i|S9dO_-?HV;JDYq~nejr-luc7cqqHfT{4>*rQ-|a!^$L_y#+pZ#RMtl|=IWo* zYP{xfpG&bwb<(QWTiF7b?Ao>|J&4w|ugZI@CkH#0xhL=p^Y}jHLNVDjZTEu6#|j79#oADP;BTOP zWv?_!tKlIekmDyWeFJludfVb(D=SldQxkJEx7^g~=SrsTZf==BS?!B9`+r!5jUD~< z>(^Tk#&q2pj((V+{bxPIBmJ*p`Yl^$;&#zrTQNOvePP0cHBIvsSEJ<1LE7~SFlj0OXdMYv zDfBvn#b0`REh@Qxh^Q=BdQH5Pbmy!4)^EK8_f_AW)M=G^P=PE@zYWYfi5JwMvx zz2C}%pT48&U?Mi)e|CqtrLM%f|HY@r?^pP!IE>Vq#QwEl7#_4rr7v{17t|WY-cZJp z3T68D(uTdSrKRQK?vBmSq!|_#7Kn|te8mceO`Adm4D+=MzJJOzYf-tV+val8fymy0#-xGfEYrf~gBlv+uXbm3*RuP+czJCn z8dB)Bokt9|i{hX>% zj%`z!GB+&o5HWb>6p@)!Ld)nT?DQ=>+m@nuxv(b)Z)k&zMmF1)+j?4*s2 z!Z8;0=qW#1O|B;^3$N6!Zu5vq*m*j8y6X>^{iXuyqMzS<2~l5o6}3)PW081YJy6cYFfU)C9pdvbtO8mZ_8e55BFrRpYJ$oEGm2H%fg{e#a*X9|8>#H@o~}@Gcq#9d&7i!yDI{}_D`VH z{hIvd=5JcyvdqN9BsN@qsRXyu@9g4*z`&^ZctQ7Y zz9??>pJkk`Hdl*%lTRL9j%~q%QgXC1=jaB}n-=pr#v#WG=7k00)Ms zrD>yG!NS0>?7Bv|13JSmI!57eK0>G9_5^1dH5wxe*SBGCTFgzZb( z6g_{P=KDdkv3lkAi>gy4ii?ZG#>y8>s5xKQB>3(aYR<~?cKr7CZlZ3cfzEnc!N}v; zcH)~cj0`D(J$v+R#Wx?X_TrZ4dA)CN>O6{>0dvrN~S*szzYnfv?){QTs%Y~AYi z!Kte(!r-a>OVRGUEh~&COA8K+j_ugD;CnB|vd2%NM@*|}f5WmqD)|#$7hm1%)dRNN z)D$u@KhstF^i(t1B}`0A9D;&}XFg*rVTbST)!B9DJ@Dm&l$0UOgPNMb2ATP4bG@Cn z8bTIi2LZ95=7aB(y*|VW8n3;sVHNfBdcat9oEbaeLja25j#i*?GR zPyeK}Z%b&M@Sfkp^t)IUHq6wOvVU>v(q>Kj7~=Tu-hRDjPR7@l6OPi@Cu08~u*`R^ zx9Nmw^_d2_ko|#F6(2t2ws&ln^ZqG*a34xe;_bJo2NQL5nG-^H%S`W7kFIvw<*!}B zt#Q&oqu~3#2i$)SwR6q*pF*s>~>`x1~V4QJ5oKvHCoL8f2HvRwY|)3uD(;~1$tcUYCsY1FwWaFt6Qx)OM0 zwzxf<9{n$}n)e0H;l`jtO_e5Cj89ZKma^JRN#-xNJR z*dLo1Y z+I=sui>kyYRBYE(rh0mt92`a?t~TXZ9xy6!sYrFh8yK3HP$)ESi|;ouFbK}tD(gWH zJSwh!Q>biqIoMa`xWs?smfR!cO**Sp*Dc6{#n#`I*;rOqwrTHK-T?1a+8P>bS@`t= z3JMDNR$q#Y42g(XhaSG$M@~Y5888gRn@>?msps3bkjKWwy3)>yiWeTIzJB}mvFj28 z+r#R1!&Y5=4c?P;Zp0u}o3Fjpd*k}`>v?&3pA*RHHEo~721@)wtU)%guQqZxCDW*o z@pY^~6|OfG-|eVoWVGeZojbz5zo#_5eKjUX{z%!*c|onDx7qrJhL&$`OL%;}ej?j# zSQi*J32=g%j_$xSr;aox2Rx(M?m)V1n}%(H)duL38V3*deE%MfP2|v3wiTr;?N~7` zsN7VoM3aB#&K4iw*V(>Eh3?+o3-^^mw#&;e+5fl^$@1qD=65+b>ND!hsUhtH>f$=(+<;`Fv|J<7KaRw*1Wp@^XJVNVb$~V zD+E}w(>&B;LPG~$&O9(>l<>GQVCY=B3Tn{z&Qi8tzkbb5H=8z=`FbCUlYEo0pA>qv zgo+Czc7j>fFE}$A^v_eeK$G3eV1+ zH2C}R?P)JPWQV-f)Gc*W{Mc!m1gM<%WDbxu=LLi&?v)E-=*k+J%w2>-PFCjJ)GXwA>`3|ej* zmsGR?S6`j9A3hq1wbgxEtmGvU@4=ntvsO$HX>aJ`E}$c{)Z9R+mltZ2MD>Pzh3)wp zhr)p%(20vYzO4R6`e>AB_J5ZtZL-bSL{CyL%=Xbyp5HL_yL77gu|7W&*@yFy6&D<< zF0QM4^JW#LWW16_`b>X#wIcaZ<06JAD=T|7HkPWpvubeG#fY?EPkcAtf5G$6-M!48 zK7G2%y$0Pl=;>3pU=`}ygqkQB|h zMC0OfH}{;`@z|));;j$aQ4;Z5tJ;9DuLJ~8e15##>Ei0Dh)&q^ z=nL+ho(Hn@R#4d4*H6{-JxQ&`+@W_EAS6LOmj;oqwy0d!<1>&1?yH*J#lk(QN{JN@+) zv(HS2dtF`Kb2O(ncdwC0TO*ogMngwei(4Q6Wa!K(FK;51Zwoq;WA|Z4P;l@qnVql zVq#+V=;-=P-SoKFxVW%)?~aN)cW$|V|2~mVU0QY0b?;d<&ik2l8)c|cI zybjRK0?b!UQ?vS(n2pQN@A{?emJwTJSPY*zHO2izE4_ar%LH??FUzEK9RIv-C@3Yh zG1sP{27r=0OAzcfGxGzu<`j2S5Pjm4TNxP(Cz{oxwR>cFcz9H$Zr{3f$tK>DYDs_1 zb7*A*9l!YS;Z8x*vT*dezNx_vUa!eGW=1>o@*P+yW|cu}20BY+upG91)^%|ahBpxL zmM~}TjY@7|T3bKpX6Tv!*f;a~)vF7*5ak|ldEKj5d{Pb7VH+D$wYWOEIy*ZHJSHrH zhYzZ$?Nd}-PT`P|X`{VF>MDP2>IKL8no!T&z^7>6 zm3x1t1)T)i{^{?nxvNp0chKM|pGU!5LBY6b-Q8zgCxI&o*efa*GAf{8r(Gk8{`O;h zNi_N3!c6Nni|<4AZ_KqhV$7b4A@*E5BLC=E=&}`51Ear2>O6ff`l+YC<| z4@=3!WLv&-*A;w6`;jrOl{f^5F_POLUlp_KxUlUzjtt{smYJ@H?~)I0%rGtQ9H7G9 ze)s73PQcvFxMkvFboxwces9SkB6BUO!33D~atdZp1ab!@AU%C|r{A0-!G{o&t1|R+ zyN8B;^R_MBw*Y#1szGK=z_JzNP+L%gSLWyEs~tIV;OJ3$aEWmE4n~Ep)r_9(tYeH& z?-GY9k9JsmWQC6WmbK)MUb?OTflC@aWRceiC#{u~l9D=UZLK@|dGN!-)?W$a+u`AS zE%BcHto66V4mc~XP>;TP?OGrRvKh!%|0}YPwEI|fvP zTl>^t9VkcrZHd?Id&sl2=T8#4l=ARlU&7*_otH0PewSx=oN41mOQ-~D2M;Qt+|>VL zKMx6_Zo3nsK+8=lIY;?*dx_@;tjSuenVyjm=pDoYxE4&RP~wkp!Iu8|TY=C3`cUIO z$w@c2wz7&@*FQ(sw#pB{AeANVqTV<-@OOHC+ZxU$wVq2gJRl@wHGt(+hE;m|@K6%{o*UPbr1RMPkNSsw@m1!o7N^_S~1FNu|8Y*Fi-+6&BG z9t4h$yR;XaPO=|dnof?SwfXC}?(KeeUx~Tw93b!6fp--T?vtMl_|yJ0-z^}}G`|2= zWj5Yjk)4xM0k!a~Z_B60#$f~)f>39x>5-eeU1!EFxqJ6+wdeS zGIA)3(RnUUj5cj!*&kmdgH%SbHud|(g9^o=&e-13VQypdaAxmZ5vh&0BGEu( z#!3QFNG#wfq#8bZe2Y+5hQ@g;5p}WeH^i)xI7JO%WT7Z^K z3yY9RIH%IZdju5H&;&wvEA-6B@Tl5_t3>VDq?7IG?VSYwXOo1zc5v3g=m#x-72q@( zOy)*YABHZ!IRUD5n^!6*l)El14u+^-c$;HO_A++ASUAkj3(3I z>3@x2RU3^^Nq}?NubOs!G9{_YL8zxECiYucYzJy)*tX52$2bu(^563j0EO)O8|_vu z8E$n&b@fXx6>lB;tHAwje(oX#&ZY$$*XGAQGJ_|#V1+MLd|7E(U=vuPtZo-G)vxWi z$~}00@{XMMCvLcp1TJDZ0u{evc4&TVTm{*p8?88A&igjc7BZ=<`q=>9Pbvo?LmvPr z^O_koPNs(!Rx{pH<>sFt=go4azrNyBR%uFHzW0n1?G|ZzaExUXT2|4O{{p1XYpsgo zB+gkls~9~{R20_%`JY|@nU|n*FQ;f|Xmo%58Vv3FMqCzfGsK1umd{8d)84A{D`f=` zFCj8a`V>m>xe>(=DVm-(d>CHi;!Mjb!_%ilu56RL49W_h&w%E}C0et=hSBClP-M4pLQBO&*hPV(zHOcTknj zSpNm!_(~6o%gC@1Rt)#S%-J~-^Jxyio~n}`%kzV*#U>9bntV1Xr*5K6CaQ#S1U*NC z8?Rw=eva9T{zcZay=>qr!)rSP6WS8v=n(evks+;mK5!%h@!PnQ1_h>N5aiRoo$>g7~M?;+Q$qXe#MgL1}yi~KN@R`_?$ zHga>^bpP9U0VeRj?6m(69rS<0i@VayCa0%^%gYsrA+=?T(Wo2eN)z8{9pXi08a}JR zt~{wmu=h!QnC~7(!Sb<6`Fuv;J1OItiHeH4bU$BK^5@5EX_xMR;0Ju*?&$*C7Kqq*@s?nBR4Q&Z!e`TcL0E0Kq5=~{OZ z1uvzfq*T6sO#=j}Vr$F$=g*&akTnjN93dJ)H#7uEw?mk~?P140vPuF#Q38sKWvJ-3 zg~Pdy^`8F+wz_B7?+4-FfS1=^;25oPKi|oV#3C0Jt7dWlHY;!&jvbxBa|a6^dLsr! z)CZ;&y`mYsj@081*8}8#4LwNaLgaEG_iZ@Us7@;=m&3wDz-fa*LM$PBQ37t5c&(ZL zJzWL8{vB*LfOw1Q%gnB-SFxMJ46E9Jm|(Th<=Ho_-5fzhvr&*=ssSip>*3+8E2*dmEku`z;#_Lb zUt8<8QYa1%4#NHmJ|I0k5X``_1kgDf({y&1{wg{=dxnp!A*-Xx73a$9>ks{boIQXtSJ?di{d;vg&AZ-udEKBLnxDAwUt;9!d9=C zU^;3Sy~PC(rHI=tiUkn$a#NZi)0vBz2;wM(tXIJ+3N6-A?3*92Lwlj@EBBi}s;wOa z+38>{sf|yhRhS$Usg(~LP|DP`{G4aU{PqmkXUtt%S&wlJ5Du*@6S=>g%;4>#jPqmu zi(y%1zt=7-EKt+ZuA~s@&VPP-Bc(g}hDl|S+i>>Dmy9hfEzc_|mYw>PaURK2Ha#c%aPhk|s|gWy;_xV=s8LFtjv3{F_9JzP`S} z#m&7E*%Rc7s3=(3b$3QzR*Df+IHiXyQI5|q*QtTV6<`K1wO7XqnO>Ql^(ah|JH6Cy z8ZGxAc7!n1R7!AAQ1{12$3=O(T$h$pVr`;sderUPX;K2v7VV!Jq$nQ|T-p~?dKMNI z^jo(^#KbT$F*AehuWD>;483$IO6K#15UH(jM;a}673Y}!w^Wm7)p^z>-6gRW4rs;l zH_Mk4w*SX8+P{(R|C?yp9Y8hL5aFF*Fpw+cfBtA~ZH3ugHn?0w>8V2k>&^XktY4h| z@hAKvXiM;%k1wp+PuG<1XjsT49Ju_m4H7K|Ff{-1r<6OD31LqE+BGs6QQdCHEEnUw z=WA_7m23sG=pTQcvGM42-n*nNj(S}DN7jy&o|$=-ySqEYKmE@NXv$tw1Lr~R;ar>b zR0gv&96fq8;O9si7Y7FgyD%pw2j5Boopb!0R{);#|;PIK61JFxgZd<){L7A7G zX+Hzun}p8{3~sBmDL}|XdvQ}h(XK(?aA>5ZVc`!@O**feuA;2G60tV^&+-(0qXK$^ zOqR_NH5P5AjWb$KPJ(0umw28Dx_A+ZuZCXMvbj+i06IN=eNH*Kj*JnuSHhMxv`8M^ z2aqIE>SNP#rwLl5t0YOD0V+G``0tYsV%XLTe|}x%e$-p5cr#}nz!0o^u#7$5q17V) z=Q=A&04#=zh6Xy^Cd{8akBdE3A;Ukzxd_|{t?rn zv+7&qee~cA0}HAEDOLj<^54Fnm#5ucyJ!7{g`Y$d# z$s6nI;{xQgvMa8~@~~W_@^7#Q@5PVVs=QYT9gX%|(#N+9?pN?=p&{j9> z*3HP)n^UBoK!j{9RMQ`mlPX$TQ3FlsH=wZydlxhNvcI`0q6C-V2*y|9Ir#!KSs=a# znqDtV+YKE>ZW}_@ZxuZ?cTv=#EngG6WesN#l(`iCxgG$qqOOgCM!Y)?-87q^#m6+8 z`d`Y<7H%v!ZJFz5s`Js$!6AdN&o`e^L|7r;szB9I25qBP49&>k53?!g0$hIq%|r9k zwuWq0wCfWEMMbYZl>vEOxNw0&dHeP)q%%k>i7H}h(JPnAoR$^?s5ggtw2BzzIkdlQ z&q-?#;f6y-T35ZyH~V+e)iz9D8K%b zm0)i>V1SXxTt_eKD{9Vc_!y{mH#6i|9Gdo7Tkr5&_+>-LcCX`&m>3SUFgVK8>(*W8 zsRCQNNGCr_(bfI2^>H*eC)_~bA{F49>NW-U(JhD_L~b^T>rnaLb;}i zS#?CYMI12^eQV%TCL4r>lM}R7KSw*DdeT8ZY(F`CvLeOBe{o*w;`*(ZBNZ0(#{5sm zS~xmJkUUdmFb&KBjw|d6PK`gM96zr_HOg~r`;<5$&x_)I;L4T?yd{+AU<&h7*Hqes z1O*8w9sluKsP9{Xzba@nkrVaBm2N@tbZ9SN!2Za!E%x;EY{@oX0RkKXHpHo*z;5b4 z|5QZ`LVU?Y4I9Xd638p|HZm%XjkL@NV$#F%ixI~Zw|l=5 zA5H$R05bG}rq2#OOd!q`ByK&~6%-E-k8a5HlmO_Gaq~YSqlvQ? zC+SGmfR&ID7c4oyd9Sd1PuTf)WZc(-L61*QS7VFPGcg72KJi$OKM;x)+!rw7V8|hj zyHo#))O4G_q>^jGCo>`u6?=Ck8HJB)>BB!d|hIk2VepKb<$zs944 zH0tP;bok+BpbY3CD4UR+(TZs5;QS$@^$sd%Sc1;WhK5?ule6W{U1c4;?sQVN?;S;x5&{^+Ww296V3z$I2u{=h6#)6l4_ zi{cW9Uq+##-4p~SFc@mmt7s)BNFmj$*?j^~fGQgswPI=EMig~PIkcEfjH&zk z`x}*dF~dj0@PeK_le)5H&jrXpdi+YQ{@WWv18E)8Z(|dcdoLd!KM%dTPwvM7>x;C|aAIY}I_d?+I^}k;u&w8h|1&$c5s4f9jt` zC^+}2GcR#afr%fyvlUMSinl=3XKCOFqPMIGXE+$kFXHLFWiWsM`=0+XZrj!Q>iTZC zBd#~N*Ps(&YM&$WsAXhCOKBXU-7k^)wv9FdI)M4CVkF2F)jr zVGfH!h=n%)L30klpvJ;8HXpN0+4-)o1u6pUtwG7Lik4)rX>Q&KA7A1Wo6eqo{-~@( zNzGsH22s~qw)ds--Qrdc4GX&_Q3d-!_;jzbzSvc(mb$G0b$VUCGh4AhPEYo05@+eA ztf%N>lhVt3&h&He@>1K`**%dvbPgK*O=0upV4(yISfD2m6Dg~Ffp3^&BvurRsGzXW z989Lj4il$@MlF1%|Io)w!;M6$#_%?Aa&kV2tla)E zFHih~!j@@<>YAEFR1%Mor_CqX+yeOnSF!1^oj-rx_EQEcg+y5V|4giA5i|UbflIY6_BG>ZXK5IK7bn7G&U*KD9Zwl}(+u`B zJ3GrEE4u|Hw|V#Ip-enSaZ=8` zs9DS=@k8)^uyC_c2|)-e8XFm~guDC~eGA=ST2}(-{rve8z_k`wC;jY8Vaz9GN^o%v zXSP|za$+uF5syzzy+C@<1=HUli#-nU4Yls0p{dR@XUJXz;%X#cP)&N|5?{W!z=rs( zDlFyu#~#5&yMo5s2cYFWkiP(&1d~?6zP$tiwq@X{+ZOz*pY)F5$4UwEzDMD9h! z0;Z!-e5RXDkPBbCwt--AK+yq##crP3C$ER*X2uSjJjo3l5^-@I8_ANX?BBmXxe%Tn z(H}lOHfAGoD$t}`RlXcAV*JG3O-kY#`ji=FUUgB&i&YwW+J+s6_Jy$s01|~_hns(? ziy|n@DIU!N$;>UtXSM&p8kZ{anEjsHKokt53b}ZB)udt?<^g~MvEM6TVjxqbh|#;i z+v*s`dY?tTaThz`oJtnEdU!E}NB6?twHFj%P`P2A7H6swab(GVOuOZ25i5WEcy z5C3SaNJmSXF)l54?)xSbU<&a)rKRt|32G^J&+3%L#z6s*TEb3)?^nSDB@QHFMh1fm zyXG=7P0P2DmmqvjW(Lg_i8oE>&ecMfVz)j+u_k8-5DV#s1WQ&Wz`1iP!WQ>{3S3-V z_9dxC2)mCOy{M^)WutLJrvWU*_XBV}5SrH`H?UI8riYpeu#%G74m53~kxa`6svt_G z^qxJecfJ8w-xRf43y1e2>}L-zFAD$jf^Qr60S6xc(21^nX|Nc zU0=VFBJTKETS@?k3uRIX($>P*;sPBW`U{k&#&Z8fSJVC)QR}&LqwSXfdJ@qKNxOn# zPK1Pxf(KS9$c2MeZI_f}kvaGM`4g+x^qV%>W()7i1*!nn3AFrqJtn3b<%|S}gdIPN z6Ga6P84>$AtfGqx^K*Rwzx&`wGvJ7e|NOA2-jkDSNc1T~FK0PQgrt{jga4mCb^^4c zqfy`iynw{3!72ERolwr9%x~y_dp8WMiv`JAR4LcOUwA&3k&8)0J6+PCkzEBjO+q&< zny}p+9T!If0Uzvyj`UXy04sqOzKs5fqwC=p5TPBnG8H>N@~n%5a)_3F-KiG0G0}K{ z9WMGdB2#E2D+01kUkN7pWHfXlvVf^X0Ett$6b`Go}L9iFM;e&?{UknUXDzw85419jNo6-%@5H)iJ^2a1}Yle+Yy>@LS^q`#6 zeX1R<1ejtLBG5&Bezw}^mHWw|@Pv?EkEQR`=7pjWzGV+1mRBX_`5nUML?dNpNoDp# z^@NK>bP{&TlWZE|XL~}}iA9SQIaK4jDgdg_)KC*mVPT;jtX>jI z05iBg7x@{VH-WALX=XWr_T-=KXBs%Aq)s@OAreIrav+{!eC#^Mcd&oIT=xQQHzy?& zP8DH$moV}iWW0gcc;FxN1{FxX<)uVLM<*IS#xtp`sZsp{@3zPeA*IS!uQZTe8BTE< z`lt^6tz}@478i>kJ0;Yqqe$mAUBGN}`2r8f+l#w0?k{j7!Mf?ps6I?cSSV6+Vl+Fx zfB*ghia8$XPGw+`2Pk;4OZhq>6BJ$#h&v)eE%eC!cqwNbw zKf60RiFr=;z-FIP6rkk+6rwjoY_=4Zl+>lrr|V|E*L?lv4av1sHZ|$M?o^WU#cp06 z0A%)2b8=#$v8~yv7Ue8=>hoY%c{z&6FQr_ByNoIHuvol4R8>_?cV5G-UqUAd1KHZ| zT!whUT4bwp&=UfGZPPX~;$QeZEVOJNAnagDZB5N(@=|PPLn%l25{a0MUZ^E>9qW-c zF+X)`H+gkO9=g(6R5fCWbmXB-Tn2I)67Yr}L3BD1?BvpE6;;*PQ#Q{7mL&r4VanjV z1mUR2O-aYw1P@|0Lthl}nRRKrue7>D6i#5}n>U(YzI++TOh+<*I|s+U8TW>Gx!{C^ zgaSmLJIf#meDK{!ecGA-0A)Lp=~9{Z?(G8!zYKgnVP330qd)xNVPxkNkb(i_9h(A6 zKxjln)4cJycE5@0jb5*zt0A_QHa7=L{2|VbY=AS{tXb?kmye??8)p`C|KRvZC=L+F zif7R)B0dv4*Z$#Jh)qlCXVSpHI}kY*0iFSu!r_cEj{#9^(*uC7ZvF_>R{ie9NS3mAK@H8) z40o;iY&x~g9ac7xp0c0(?y4d2vAjIsJxZ{IU4{b07xFSsVXtDgKKKUjB1)b0@qC zMd2o5!F~PRF4rO@f`3RkcPgVr1B}NbfOkRFAX%2umm7LyN@3(9IC?I#lTBa`vn; zqz%3fD#}1>?oL!RBGeH+jc6W;S0VN~`rZnh10dqQp*0{X4r{PujV3iak){p$Kw=B- zqwN(~jKU5r!qC(P`xzAPVKIGuvIoK8rvNe}Xqq&3488Z;^n&22=9{^CblYqYZq4eL zpPNa-9D7Oeqg%%qVvC<6Nz@%j;=@q`$Tnckx53d7oNw%g0C(LwX()`KMPM*Fhy+0> zL+eOf5$&W0$&q(fd|t-M#|8z(KrP6DR7fLV`*FTUc(0+hHWPUVREF(>g6oNH4T8Lk zb0uX!&>Zb{NWjL@G7!+}dhrW$e#>WBiH@EwpWy}yn^&&%!CJO$e!LZ#0TH($?Z8E~ zm|eWQ0UF7ovtIl5Q82n7oO*%+whm6Ec$yG{OO{%3!ri;Z!5?0^YWG*nCm(y{0=OR{ zcm~;Hgj)wLkBQQamZzV{T26uWy$)0A0u^Zm z;>SdvX#U#khxqOHs-Ho9#);aFAZ8u#nR{{injAM#&?d2|_jkXhh7(OMFmPFW@j-3s z^YDHxAueu`bhtT6^9L{ntgYxPb_9{3I);I|DFF~_N~hT->8w;<HBk-6xAqA((!nS2Xftmi@vg+T{sox*D|Gt4$b(9j1UZ+DojeC#pb~tKPg>hmij)a)xff`Y1Ofpe%0xks2IfpuI5H z=@zbkA9&KEFG7mX$OZxwp^`|(l>B(L8y4u<;K>eumcq1c?I+L>5zzWDlAZ>3AwGNe zjDmVJS*M3?3NIs)Rhh30k(0>r;??W7yo-Zt&}^n~%u95fmaWMa#Rh4G8f4b&atrvJ@}(4{~b( zUrBh2kXM;GSh(lcF5WPysjXd&ey|s^!fPu}sEq7y;mY*u%`cbsSoNKNlGg$%&vf``PB~z4!i6KP`4X0fhW!#_#TLJW@~Wh7=h$C9r`aD+uKiuZ7C@B{gcdJO(C&BuIj7pfa=|NX&0-G?1EYnwu*g zD^s$wd*o!QqXKm)DmL~a)Q5qT4g@0aC!9ftCbJIR&Zn^93r<|2q>jI{3{O*tH&5E^ z4CVvPunLE>MEw4Epz-1W)OzTr9^V&pWTd6LO&5P}#DRk#PypJkdzr{A0)U0!nALsL zazAo}zSC=1ASftk;P+#-=peWY87#T0D*|39S=g!sm#99zg!%_A(c(Q#}bP6waXO&#Q=T42ZZNx`bK=#bR zXPq7E?C9>uKy1-taehVwT!~CP_JdcFs_Xzhs0NXXS8^EzqNGScRz(aSGI%GrHqQ9; z0l-tajLptXeK;b5b49=jz1T+~adB)2xMicl5$cP&w}L{53BXS^5E2r6E1+5o{#N-3 zhcK(;$69EMjd-S%nfQ(USZ(n45Z*f|)C?K+9n$VN(awyF#|11PR06_D5opqFJ~5pX zDX$3Gqw(Ppc4(hfA3l&@76Hwa8UTyv#;m16d}pBSkO1{25sQ_6i}UXAZtr0rFjG!k zZ4%Z2A28GPK4}m`+0-6TCt6s2>&|Q?v}WrrGe4sjtSBK`j;{ek@PwQ~b!P)mttE_QM;bS4%wmP8ch-r$WU^r*(d zH^%@NdSOO0;?z~;%a`g?V_l|rg!%2pp;kC@z)cB-w0q+A{DLIZ=q0x--fL(VVt_j# z;a3BFyn0iN#RSgmuZ4qmz%D_Nk&%dI7qmQcPH>7p{_yZ6{9XYdN)F0^YpCm@b3dic>s{ zBWnC23Rg#2kNOi2zIzxTvbsskIviP%E1;qzy|P_K#t>RW7rRpJ2-pu9Q)eE|sD(j6 zpt-KWvsu!C7x_>w61gGc?vRDT#DxC&!7)86D~kwiuY7G_f*po*`}2OAN>c*&3*YAR zq0|(Yp2}4urGsBPQj|+~QV$@7obvVoR&zb@h(UhtyBKLIU?;^d=iEM>MOs>wxD99z zYv(3z;n$9=ffLu=-+vL%jkVMW_!FMc1fl|LmUhoA;Zd`-sWDLqImXs;y-2 zigE1!K2o2cGjFq#!wH_i;$rV)P??I}zJUyCTv+RJw0f`m zXgE0miyD2h!deww=>>7&U~%;mZD)T+V-EZt9STKV<*@Q&MY9Y42c)3# A?EnA( diff --git a/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/retrievability_applying_code_mods.png b/implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/retrievability_applying_code_mods.png new file mode 100644 index 0000000000000000000000000000000000000000..1c16bfb66fa8b312825d7a3961dfa275c38c1f8c GIT binary patch literal 15122 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 Date: Wed, 18 Jan 2023 16:49:44 +0100 Subject: [PATCH 16/16] apply suggestions + add IP-churn & contributions paragraphs --- ...rfm17.1-sharing-prs-with-multiaddresses.md | 82 ++++++++++++------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/results/rfm17.1-sharing-prs-with-multiaddresses.md b/results/rfm17.1-sharing-prs-with-multiaddresses.md index c827553c..958f2749 100644 --- a/results/rfm17.1-sharing-prs-with-multiaddresses.md +++ b/results/rfm17.1-sharing-prs-with-multiaddresses.md @@ -2,6 +2,7 @@ # RFM 17.1 | Sharing Provider Records with Multiaddresses _DRI/Team_: [`Mikel Cortes-Goicoechea`](https://github.com/cortze) & [`Leonardo Bautista-Gomez`](https://github.com/leobago) ([`Barcelona Supercomputing Center`](https://bsc.es/)) + _Date_: 11/11/2022 ## Table of contents @@ -10,21 +11,22 @@ _Date_: 11/11/2022 2. [Findings](#2-Findings) 3. [Methodology](#3-Methodology) 4. [Discussion](#4-Discussion) -5. [Conclusion](#5-Conclusion) -6. [References](#6-References) +5. [Contributions](#5-Contributions) +6. [Conclusion](#6-Conclusion) +7. [References](#7-references) ## 1-Introduction **_Context_**: [Slack Discussion](https://filecoinproject.slack.com/archives/C03FFEVK30F/p1662995123912119) & [GitHub Issue](https://github.com/ipfs/kubo/issues/9264) -Currently, content routing through DHT lookups in IPFS involves two different steps: +Content routing through DHT lookups in IPFS involves two different steps: -1. Routing the CID to nodes hosting the content - find the Provider Records (PR) in the public Provider Records DHT -2. Mapping the ID of the nodes hosting the content to their public multiaddress - find the multiaddress of a peer in the Public Address DHT +1. Routing the desired CID to the nodes that host the content - find the Provider's Records (PR) in the public Provider Records DHT +2. Mapping the peer ID of the nodes hosting the content to their public multiaddress - find the multiaddress of a peer in the Public Address DHT In this context, we understand the PR as the link between a CID and a Peer ID of the content provider, which is how the PRs are stored in the public DHT. However, in the networking layer, when a host requests or looks for the Providers of a given CID, the method [`dht.FindProviders()`](https://github.com/libp2p/go-libp2p-kad-dht/blob/dae5a9a5bd9c7cc8cfb5073c711bc308efad0ada/routing.go#L445) returns two arrays of `peer.AddrInfo`: - The first array relates to the `[]AddrInfo` of content providers that the remote host is aware of. -- The second array relates to peers that are closer to the CID from the remote peer's perspective (from its routing table). +- The second array relates to peers closer to the CID from the remote peer's perspective (from its routing table). Given that the structure of the `peer.AddrInfo` is: @@ -35,7 +37,7 @@ type AddrInfo struct { } ``` -one could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? +One could think: Why do we split the retrieval process into two different steps or lookups when we could simply return the `ID` and `[]Multiaddr` of the peer in the same response? - The simple answer is: it already happens (sometimes). @@ -45,41 +47,41 @@ In the current IPFS network, the TTL of those `Multiaddresses` is between 10 and So, when some node requests the PR of a given CID, the node that stores the PR will only reply with the `[]Multiaddr` together with the `PeerID` of the content provider if the TTL for the `Multiaddr` hasn't expired yet. This prevents sharing non-updated records for any peer in the network. Effectively, it avoids sending the client to the wrong multiaddress. -However, since the PRs have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shortening the current process that performs 2 lookups to a single one? In other words: +However, since the PRs have a TTL of 24 hours, and we intend to extend it up to 48h, is it worth shortening the current process that performs two lookups to a single one? In other words: - Should we extend the TTL of the `ID` - `Multiaddr` mapping? (30-10 mins VS 24 hours matching the PR TTL) - Should we always share the `Multiaddr` with the `ID` if any peer asks for a PR that we know? -This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after the connection with a PR Holder to store the records. Ultimately, and perhaps as an item of future work, proving that extending that TTL to match the PR expiration time, would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. This will bring a significant performance increase to the DHT Lookup process, as it will reduce the latency by half, i.e., clients will need to "walk" the DHT once, instead of twice as is the case today. +This extension of RFM17 aims to prove that the mapping between `ProviderID` and `[]Multiaddr` is actually shared for those 10 to 30 mins after connecting with a PR Holder to store the records. Ultimately, and perhaps as an item of future work, proving that extending that TTL to match the PR expiration time would remove the need to make a second DHT lookup to map the provider's `ID` and its `Multiaddress`. This will bring a significant performance increase to the DHT Lookup process, as it will reduce the latency by half, i.e., clients will need to "walk" the DHT once instead of twice, as is the case today. ## 2-Findings -- As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending on the IPFS client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18, 2022) +- As we were expecting, peers no longer share the provider’s `ID` + `Multiaddress` after 30 mins (some of them still share them after the expected 10 mins depending on the IPFS client that they are using. The TTL increase was included in `go-libp2p@v0.22.0` August 18th, 2022) - Even though the lookup process can find the `Multaddress` for the provider over those 10-30 mins, the lookup process sometimes returns an empty `Multaddress` field in the `peer.AddrInfo`. The problem? The `dht.FindProviders()` method only reports once each content provider, so if the first peer that reports the PR only includes the content provider's `PeerID`, later coming `PeerID` + `Multiaddress` mapping will no longer be notified. ## 3-Methodology -The study uses as a basis the CID-Hoarder from RFM17. It includes some complementary modifications that can track the retrieval side of the DHT lookup in more detail. +The study uses as a basis the CID-Hoarder from RFM17. It includes some complementary modifications that trace down the retrieval process of the DHT lookup. -The tool uses two hosts, one for publishing the content (gets closed after the publication process), and the second one for pinging the PR Holders individually asking for the PRs and for performing a public DHT lookup for the content. +The tool uses two hosts, one for publishing the content (gets closed after the publication process), and the second for pinging the PR Holders individually, asking for the PRs, and performing a public DHT lookup for the content. -The result of each ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR and the content of the received `AddrInfo` response. These logs are then parsed in a Python script to produce the plots analyzed in Section [4](#4-Discussion). +The result of each ping for the PR holders and the result of the lookup for the PRs are written in the `stdout` as logs. The logs contain both the peer reporting the PR and the content of the received `AddrInfo` response. These logs are then parsed in Python to produce the plots analyzed in section [4](#4-Discussion). **_Notes_**: *Holder: Peers elected to store the PR in the publication process for the CIDs.* ## 4-Discussion -As previously introduced, this RFM aims to measure how PRs are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section into three different chapters, i) the outcome of a request for a PR to the PR holders (successful, failed), ii) the reply from those peers that share the PR during the lookup process, and iii) the final result of the `dht.FindProviders()` method form the `kubo` implementation. +As previously introduced, this RFM aims to measure how PRs are shared when someone tries to find the content provider for a given CID. To do so, we will divide this section into four different chapters, i) the outcome of a request for a PR to the PR holders (successful, failed), ii) the reply from those peers that share the PR during the lookup process, iii) the final result of the `dht.FindProviders()` method form the `go-libp2p-kad-dht` implementation (same as the `kubo` one), and iv) an overview of the measured IP churn of the DHT servers in IPFS. -The experiment was done for a total of 100 CIDs for over 50 minutes on the 23rd of September, 2022. +The experiment was done for a total of 100 CIDs for over 50 minutes on January 17th, 2023. ### 4.1-PR holder's direct reply -Looking closely at the ratio of PR holders that reply with the PR from Figure [1], we see that continuously 16 to 17 PR holders are sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds. +Looking closely at the ratio of PR holders that reply with the PR from Figure [1], we see that 6 to 10 PR holders are continuously sharing them over the entire study. Please keep in mind that there is a delay of 3 mins between ping rounds and that the network is currently experiencing some difficulties because half of the network is apparently unreachable. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_prholders_pings.png) _Figure 1: Number of PR holders replying with the PR._ -However, if we check the actual content of the `AddrInfo` that we receive back from the remote peers as it is displayed in Figure [2], we can observe that those 16 to 17 stable PR holders only share both `PeerID` + `Multiaddress` for around three ping rounds or 9 to 12 minutes. Afterwards, the median drops to 7 stable peers sharing the combo until ping round 10, i.e., 30 mins, which is then followed by a period of only `PeerID` replies. +However, suppose we check the actual content of the `AddrInfo` that we receive back from the remote peers, as displayed in Figure [2]. In that case, we can observe that those 6 to 10 stable PR holders only share both `PeerID` + `Multiaddress` for around three ping rounds or 9 to 12 minutes. Afterward, the median drops to 4-5 stable peers sharing the combo until ping round 10, i.e., 30 mins, which is then followed by a period of only `PeerID` replies. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_per_prholders.png) @@ -87,15 +89,13 @@ _Figure 2: Number of PR Holders replying with the `PeerID` + `Multiaddress` comb ### 4.2-Reply of peers reporting the PR during the DHT lookup -Results are similar when we analyze the replies of the peers that report back the PR from the DHT lookup process. We increased the number of content providers we were looking for to track the multiple remote peers. Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see a stable 20 peers by median over the entire study. - -For those wondering why more than 20 peers (k replication value when publishing the CIDs) are reporting the PR, we must remind you that Hydra-Boosters share the PR database among different `PeerID` heads. Which means that if one hydra hears about a PR, all the heads of that common database will also share it. +Results are similar when we analyze the replies of the peers that report back the PR from the DHT lookup process. We set to 20 (same as K) the number of content providers we were looking for to track the multiple remote peers, adding a timeout of two minutes for the [`LookupForProviders()`](https://github.com/cortze/go-libp2p-kad-dht/blob/6b490320a6c1b70eba2031260a2515c26e7519fe/routing.go#L473) operation (same as [`FindProviders()`](https://github.com/cortze/go-libp2p-kad-dht/blob/6b490320a6c1b70eba2031260a2515c26e7519fe/routing.go#L456) but without checking the PRs locally at the `ProviderStore`). Figure [3] represents the number of remote peers reporting the PR for the CIDs we were looking for, where we can see seven stable peers by median over the entire study. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/pr_from_lookup_process.png) _Figure 3: Number of remote peers replying with the PR during the DHT lookup._ -We spotted no difference when comparing the number of PRs that contained the `Multiaddress` of the content's provider. Figure [4] shows the exact drop of peers sharing the combo after ~9-12 mins, with a sudden decline after round 10 (~30 mins). It is clear from these results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. +We spotted no difference with the individual when comparing the number of content provider's `Multiaddress` shared among PRs. Figure [4] also shows the same drop of peers sharing the combo after ~9-12 mins, with a sudden decline after round 10 (~30 mins). It is clear from these results that the network is quite segmented in terms of client versions, where the TTL of the `Multiaddress` records varies from 10 to 30 mins. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/id_plus_multiaddres_from_lookup.png) @@ -104,24 +104,46 @@ _Figure 4: Number or remote peers replying with the `PeerID` + `Multiaddress` co ### 4.3-Result from the DHT lookup -It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process doesn't fully match the previous results. +It is essential to notice that despite being able to show empirically what we already knew, the combo of `PeerID` + `Multiaddress` gets shared only over the TTL of the `Multiaddress` records, the result that we got from the DHT lookup process don't fully match the results previously showed. -Figure [5] displays the final result of the `dht.FindProviders()` method, distinguishing the content of the received PR. In the figure, we can appreciate that despite round one, two and three are inside the first 10 minutes, there are still some DHT lookup that only contain the `PeerID`. +Figure [5] displays the final result of the `LookupForProviders()` method, distinguishing the content of the received PR. In the figure, we can appreciate that for rounds one, two, and three (first 10 minutes) the Provider Records always come along the `Multiaddress` of the provider. ![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/lookup_result.png) _Figure 5: Result of the `dht.FindProviders` method, together with the filtered content of the received provider's `AddrInfo`._ -We would expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network, with different TTLs for the multiaddress, makes some inconsistent replies when asking for the PRs. In the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the return value of the lookup gets defined by the first `AddrInfo` response we get for each provider in the network (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if after 15 minutes of publishing a content some client wants to retrieve it through a DHT lookup, if the first peer that we connect from the closest ones replies with only the `PeerID`, that requester client will have to perform a second DHT lookup to map the `PeerID` with the providers `Multiaddress`. This phenomena will still happen even though a second reply might arrive with the entire combo 20ms later. +We expect to retrieve the combo over the current TTL of the multiaddress records. However, the fragmentation between IPFS nodes in the network, with different TTLs for the multiaddress, makes some inconsistent replies when asking for the PRs. In the current [`libp2p/go-libp2p-kad-dht`](https://github.com/libp2p/go-libp2p-kad-dht) implementation, the return value of the lookup gets defined by the first `AddrInfo` response we get for each provider in the network (code [here](https://github.com/libp2p/go-libp2p-kad-dht/blob/e33a4be6e9a3a8fb603d21126e2d8a42c5e37d1b/routing.go#L490)). This means that if after 15 minutes of publishing a content some client wants to retrieve it through a DHT lookup if the first peer that we connect from the closest ones replies with only the `PeerID`, that requester client will have to perform a second DHT lookup to map the `PeerID` with the providers `Multiaddress`. This phenomenon will still happen even though a second reply might arrive with the entire combo 20ms later. + +### 4.4 IP Churn of PR Holders + +The possible improvement we want to measure with the RFM by increasing the TTL of the provider's Multiaddress would only be beneficial for the network if peers keep their IP at least for the same time that the PRs are alive in the network. To measure the IP churn among nodes in the IPFS network, Figure [6] refers to an experiment done in [RFM-17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md) where the hoarder was pinging PR Holders of 10k CIDs for over 80 hours. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/active_pr_holders_80h.png) + +_Figure 6: Distribution of online PR Holders over 80 hours._ + +In the figure, we can appreciate how the online-ness of the PR Holders barely variates, keeping a median of 13 to 15 online PR Holders online. Considering that the hoarder only attempts to connect the PR Holders to the initial `Multiaddress` that we tracked when storing the PRs, we can conclude that the IP churn is not that perceptible among DHT servers. + + +## 5-Contributions + +To improve the impact that [increasing the provider multiaddres's TTL (@dennis-tra)](https://github.com/libp2p/go-libp2p-kad-dht/pull/795) would have in the retrieval of content, we have suggested to [adjust the PeerSet logic in the DHT lookup process (@cortze)](https://github.com/libp2p/go-libp2p-kad-dht/pull/802) to notify those `Multiaddress` of providers that previously were only reported with the `PeerID` of the provider. Figure [7] shows the result of the DHT lookup method when applying the proposed changes, where we observe that the lookup process always reports the combo `PeerID` + `Multiaddress` as soon as someone has a valid TTL for the `Multiaddress`. + +![img](./../implementations/rmf17.1-sharing-prs-with-multiaddresses/plots/retrievability_applying_code_mods.png) + +_Figure 7: Result of the `dht.FindProviders` method applying code suggestions._ + +To minimize the impact of increasing the TTL of the provider's address, `kubo` maintainers suggested adding a backup DHT lookup for a possible updated provider's multiaddress [libp2p/go-libp2p#1835 (@dennis-tra)](https://github.com/libp2p/go-libp2p/pull/1835) in the `libp2p.RoutedHost` in case the multiaddress shared with the PRs ended into a connection failure. + +## 6-Conclusion -## 5-Conclusion +With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared for as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could reduce to a single DHT lookup the process of retrieving a CID's content using the public DHT. This would significantly improve the overall DHT lookup time, as it would decrease latency by half. -With this study, we have demonstrated empirically that the combo of `PeerID` + `Multiaddress` are, in fact, shared for as long as the TTL of the `Multiaddress` records don't expire. This means that if we increase this TTL to match the PR expiration time, we could be reducing to a single DHT lookup the process of retrieving a CID's content using the public DHT. This would be a significant improvement to the overall DHT lookup time, as it would decrease latency by half. +On the other hand, we have identified some code limitations that could affect the impact of such improvements as the network keeps fragmented based on client versions and mismatches between configurations. Thus, the final intention of removing that extra second lookup might only achieve the expected result if the majority of the network accepts and upgrades the TTL of provider's multiaddresses. For that reason, we suggest merging both `increasing the provider Multiaddress TTL` and the `new PeerSet logic` together to maximize the results. -On the other hand, we have identified some code limitations that could affect the impact of such improvements as far as the network keeps fragmented based on client versions and mismatches between configurations. Thus, the final intention of removing that extra second lookup might not achieve the expected result unless the majority of the network accepts and upgrades the TTL of provider's multiaddresses. -## 6-References +## 7-References -* [RFM17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md) -* [CID-Hoarder](https://github.com/cortze/ipfs-cid-hoarder) +* [RFM-17](https://github.com/protocol/network-measurements/blob/master/results/rfm17-provider-record-liveness.md) +* [CID-Hoarder](https://github.com/cortze/ipfs-cid-hoarder) \ No newline at end of file