more details, but still ongoing

This commit is contained in:
Claus-Peter Hübner 2022-04-15 16:27:08 +02:00
parent 3ad89dab71
commit 62e3eabef9
3 changed files with 560 additions and 227 deletions

View File

@ -27,10 +27,325 @@ The Variant A with an internal server contains the benefit to be as independent
The Varaint B with an external server contains the benefit to reduce the implementation efforts and the responsibility for an own ActivitPub-Server. But it will cause an additional dependency to a third party service provider and the growing hosting costs.
## HyperSwarm
## HyperSwarm {HyperSwarm}
The decision to switch from ActivityPub to HyperSwarm base on the arguments, that the *hyperswarm/dht* library will satify the most federation requirements out of the box. It is now to design the business requirements of the [gradido community communication](../BusinessRequirements/CommunityVerwaltung.md#UC-createCommunity) in a technical conception.
At first the following diagramm shows the pure logical handshake between an existing community-A and a new created community-B and the data exchange for buildup an authenticated relationship.
The challenge for the decentralized communities of gradido will be *how to become a new community aquainted with an existing community* ?
To enable such a relationship between an existing community and a new community several stages has to run through:
1. Federation
* join&connect
* direct exchange
2. Authentication
3. Autorized Communication
### Overview {Overview}
At first the following diagramm gives an overview of the three stages and shows the handshake between an existing community-A and a new created community-B including the data exchange for buildup such a federated, authenticated and autorized relationship.
![FederationHyperSwarm.png](./image/FederationHyperSwarm.png)
### Prerequisits {Prerequisits}
Before starting in describing the details of the federation handshake, some prerequisits have to be defined.
#### Database {Database}
With the federation additional data tables/entities have to be created.
##### Community-Entity
Create the new *Community* table to store attributes of the own community. This table is used more like a frame for lists of federated foreign communities, users, AUF- and Welfare-account and the profile data of the own community:
| Attributes | Type | Description |
| ----------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id | int | technical unique key of this entity |
| uuid | string | unique key for a community, which will never changed as long as the community exists |
| name | string | name of the community shown on UI e.g for selection of a community |
| description | string | description of the community shown on UI to present more community details |
| ... | | for the near future additional attributes like profile-info, trading-level, set-of-rights,... will follow with the next level of Multi-Community Readyness |
##### CommunityFederation-Entity
Create the new *CommunityFederation* table to store at this point of time only the attributes used by the federation handshake:
| Attributes | Type | Description |
| ---------------- | --------- | ------------------------------------------------------------------------------------------------------ |
| id | int | technical unique key of this entity |
| uuid | string | unique key for a community, which will never changed as long as the community exists |
| foreign | boolean | flag to mark the entry as a foreign or own community entry |
| createdAt | timestamp | the timestamp the community entry was created |
| privateKey | string | the private key of the community for asynchron encryption (only set for the own community) |
| pubKey | string | the public key of the community for asynchron encryption |
| pubKeyVerifiedAt | timestamp | the timestamp the pubkey of this foreign community is verified (for the own community its always null) |
| authenticatedAt | timestamp | the timestamp of the last successfull authentication with this foreign community |
| | | for the near future additional attributes will follow with the next level of Multi-Community Readyness |
##### CommunityApiVersion-Entity
Create the new *CommunityApiVersion* table to support several urls and apiversion of one community at once. It references the table *CommunityFederation* with the foreignkey *communityFederationID* (naming pattern foreignkea = `<referred entityname>ID`) for a 1:n relationship
| Attributes | Type | Description |
| --------------------- | --------- | ------------------------------------------------------------------------------------------------------------------ |
| id | int | technical unique key of this entity |
| communityFederationID | int | the technical foreign key to the community entity |
| url | string | the URL the community will provide its services, could be changed during lifetime of the community |
| apiversion | string | the API version the community will provide its services, will increase with each release |
| validFrom | timestamp | the timestamp as of the url and api are provided by the community |
| verifiedAt | timestamp | the timestamp the url and apiversion of this foreign community is verified (for the own community its always null) |
#### Configuration {Configuration}
The preparation of a community infrastructure needs some application-outside configuration, which will be read during the start phase of the gradido components. The configuration will be defined in a file based manner like key-value-pairs as properties or in a structured way like xml or json files.
| Key | Value | Default-Value | Description |
| ----------------------------------------------- | :------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------- |
| stage.name | dev<br />stage1<br />stage2<br />prod | dev | defines the name of the stage this instance will serve |
| stage.host | | | the name of the host or ip this instance will run |
| stage.mode | test<br />prod | test | the running mode this instance will work |
| federation.communityname | | Gradido-Akademie | the name of this community |
| federation.apiversion | `<versionNr>` | current 1.7 | defines the current api version this instance will provide its services |
| federation.apiversion.`<versionNr>.`url | | <br />gdd.gradido.net | <br />defines the url on which this instance of a community will provide its services |
| federation.apiversion.`<versionNr>.`validFrom | | | defines the timestamp the apiversion is or will be valid |
| federation.dhtnode.topic | | dht_gradido_topic | defines the name of the federation topic, which is used to join and connect as federation-channel |
| federation.dhtnode.host | | | defines the host where the DHT-Node is hosted, if outside apollo |
| federation.dhtnode.port | | | defines the port on which the DHT-node will provide its services, if outside apollo |
#### 1st Start of a community {1st Start of Community}
The first time a new community infrastructure on a server is started, the start-phase has to check and prepair the own community database for federation. That means the application has to read the configuration and check against the database, if all current configured data is propagated in the database especially in the *CommunityXXX* entities.
* check if the*Community* table is empty or if an exisiting community entry is not equals the configured values, then update as follows:
* community.id = next sequence value
* community.uuid = generated UUID (version 4)
* community.name = federation.communityname
* community.description = null
* prepare the *CommunityFederation* table
* communityFederation.id = next sequence value
* communityFederation.uuid = community.uuid
* communityFederation.foreign = FALSE
* communityFederation.createdAt = NOW
* communityFederation.privateKey = null
* communityFederation.pubKey = null
* communityFederation.pubKeyVerifiedAt = null
* communityFederation.authenticatedAt = null
* prepare the *CommunityApiVersion* table with all configured apiversions:
* communityApiVersion.id = next sequence value
* communityApiVersion.communityFederationID = communityFederation.id
* communityApiVersion.url = federation.apiversion.`<versionNr>`.url
* communityApiVersion.apiversion = federation.apiversion
* communityApiVersion.validFrom = federation.apiversion.`<versionNr>`.validFrom
* communityApiVersion.verifiedAt = null
### Stage1 - Federation {Stage1 - Federation}
For the 1st stage the *hyperswarm dht library* will be used. It supports an easy way to connect a new community with other existing communities. As shown in the picture above the *hyperswarm dht library* will be part of the component *DHT-Node* separated from the *apollo server* component. The background for this separation is to keep off the federation activity from the business processes or to enable component specific scaling in the future. In consequence for the inter-component communication between *DHT-Node*, *apollo server* and other components like *database* the interface and security has to be defined.
For the first federation release the DHT-node will be part of the apollo server, but internally designed and implemented as a logical saparated component.
#### Sequence join&connect {join&connect}
1. In the own database of community_A the entites *Community*, *CommunityFederation* and *CommunityApiVersion* are initialized
2. When starting the *DHT-Node* of community_A it search per *apollo-ORM* for the own community entry and check on existing keypair *CommunityFederation.pubKey* and *CommunityFederation.privateKey* in the database. If they not exist, the *DHT-Node* generates the keypair *pubkey* and *privatekey* and writes them per *apollo-ORM* in the database
3. For joining with the correct channel of *hyperswarm dht* a topic has to be used. The *DHT-Node* reads the configured value of the property *federation.dhtnode.topic*.
4. with the *CommunityFederation.pubKey* and the *federation.dhtnode.topic* the *DHT-Node* joins the *hyperswarm dht* and listen for other *DHT-nodes* on the topic.
5. As soon as a the *hyperswarm dht* notifies an additional node in the topic the *DHT-node* reads the *pubKey* of this additional node and search it per *apollo-ORM* in the *CommunityFederation* table by filtering with *CommunityFederation.foreign* = TRUE
6. if an entry with the C*ommunityFederation.pubKey* of the additional node still exists and the *CommunityFederation.pubKeyVerifiedAt* is not NULL the *DHT-node* do nothing and join and listen again on the topic
7. if an entry with the *CommunityFederation.pubKey* of the additional node can't be found, the *DHT-Node* starts with the next step *direct exchange* of the federation handshake
#### Sequence direct exchange {direct exchange}
1. if the *CommunityFederation.pubKey* of the additional node does not exists in the *CommunityFederation* table the *DHT-node* starts a *direct exchange* with this additional node
2. the *DHT-node* opens a direct connection per hyperswarm with the additional node and exchange respectively the *url* and *apiversion* between each other.
1. to support the future feature that one community can provide several urls and apiversion at once the exchanged data should be in a format, which can represent structured information, like JSON (or simply CSV - feel free how to implement, but be aware about security aspects to avoid possible attacks during parsing the exchanged data and the used parsers for it)
```
{
"API":
{
"url" : "comB.com",
"version" : "1.0",
"validFrom" : "2020.01.01"
}
"API" :
{
"url" : "comB.com",
"version" : "1.1",
"validFrom" : "2020.04.15"
}
"API" :
{
"url" : "comB.de",
"version" : "2.0",
"validFrom" : "2022.06.01"
}
}
```
2. the *DHT-Node* writes per *apollo-ORM* the received and parsed data from the other node in the database
1. For the future an optimization step will be introduced here to avoid possible attacks of a foreign node by polute our database with mass of data.
1. before the *apollo-ORM* writes the data in the database, the *apollo-graphQL* invokes for all received urls and apiversions at the foreign node the request https.//`<url>/<apiversion>/getPubKey()`.
2. Normally the foreign node will repsonse in a very short time with its publicKey
3. if such a request runs in a timeout, the previous exchanged data with the foreign node will be a fake and can be refused without storing in database.
4. if the response is in time the received publicKey must be equals with the pubKey of the foreign node the DHT-Node gets from hyperswarm dht per topic before
5. if both keys are the same, the writing of the exchanged data per apollo-ORM can go on.
6. if both keys will not match the exchanged data during the direct connection will be a fake and can be refused without storing in database.
2. the *apollo-ORM* write the received data as follow
* insert in the *CommunityFederation* table for this foreign node:
* communityFederation.id = next sequence value
* communityFederation.uuid = null
* communityFederation.foreign = TRUE
* communityFederation.createdAt = NOW
* communityFederation.privateKey = null
* communityFederation.pubKey = exchangedData.pubKey
* communityFederation.pubKeyVerifiedAt = null
* communityFederation.authenticatedAt = null
* insert in the *CommunityApiVersion* table for all exchangedData APIs:
* communityApiVersion.id = next sequence value
* communityApiVersion.communityFederationID = communityFederation.id
* communityApiVersion.url = exchangedData.API.url
* communityApiVersion.apiversion = exchangedData.API.version
* communityApiVersion.validFrom = exchangedData.API.validFrom
* communityApiVersion.verifiedAt = null
3. After all received data is stored successfully, the DHT-Node starts the *stage2 - Authentication* of the federation handshake
### Stage2 - Authentication
The 2nd stage of federation is called authentication, because during the 1st stage the hyperswarm dht only ensures the knowledge that one node is the owner of its keypairs pubkey and private key. The exchanged data between two nodes during the *direct exchange* on the hyperswarm dht channel must be verified, means ensure if the proclaimed url and apiversion of a node is the correct address to reach the same node outside the hyperswarm infrastructure.
As mentioned the DHT-node invokes the authentication stage on apollo server with the received data from *direct exchange*.
#### Sequence
### Stage3 - Autorized Business Communication
# Review von Ulf
## Communication concept
The communication happens in 4 stages.
- Stage1: Federation
- Stage2: Direct-Connection
- Stage3: GraphQL-Verification
- Stage4: GraphQL-Content
### Stage1 - Federation
Using the hyperswarm dht library we can find eachother easily and exchange a pubKey and data of which we know that the other side owns the private key of.
```
ComA ---- announce ----> DHT
ComB <--- listen ------- DHT
```
Each peer will know the `pubKey` of the other participants. Furthermore a direct connection is possible.
```
ComB ---- connect -----> ComA
ComB ---- data --------> ComA
```
### Stage2 - Direct-Connection
The hyperswarm dht library offers a secure channel based on the exchanged `pubKey` so we do not need to verify things.
The Idea is now to exchange the GraphQL Endpoints and their corresponding versions API versions in form of json
```
{
"API": {
"1.0": "https://comB.com/api/1.0/",
"1.1": "https://comB.com/api/1.1/",
"2.4": "https://comB.de/api/2.4/"
}
}
```
### Stage3 - GraphQL-Verification
The task of Stage3 is to verify that the collected data through the two Federation Stages are correct, since we did not verify yet that the proclaimed URL is actually the guy we talked to in the federation. Furthermore the sender must be verified to ensure the queried community does not reveal things to a third party not authorized.
```
ComA ----- verify -----> ComB
ComA <---- authorize --- ComB
```
Assuming this Dataset on ComA after a federation (leaving out multiple API endpoints to simplify things):
```
| PubKey | API-Endpoint | PubKey Verified On |
|--------|---------------|--------------------|
| PubA* | ComA.com/api/ | NULL |
| PubB | ComB.com/api/ | NULL |
| PubC | ComB.com/api/ | NULL |
* = self
```
using the GraphQL Endpoint to query things:
```
ComA ---- getPubKey ---> ComB.com
ComA <--- PubB --------- ComB.com
ComA UPDATE database SET pubKeyVerifiedOn = now WHERE API-Endpoint=queryURL AND PubKey=QueryResult
```
resulting in:
```
| PubKey | API-Endpoint | PubKey Verified On |
|--------|---------------|--------------------|
| PubA* | ComA.com/api/ | 1.1.1970 |
| PubB | ComB.com/api/ | NOW |
| PubC | ComB.com/api/ | NULL |
```
Furthermore we use the Header to transport a proof of who the caller is when calling and when answering:
```
ComA ---- getPubKey, sign({pubA, crypt(timeToken,pubB)},privA) --> ComB.com
ComB: is pubA known to me?
ComB: is the signature correct?
ComB: can I decrypt payload?
ComB: is timeToken <= 10sec?
ComA <----- PubB, sign({timeToken}, privB) ----------------------- ComB.com
ComA: is timeToken correct?
ComA: is signature correct?
```
This process we call authentication and can result in several errors:
1. Your pubKey was not known to me
2. Your signature is incorrect
3. I cannot decrypt your payload
4. Token Timeout (recoverable)
5. Result token was incorrect
6. Result signature was incorrect
```
| PubKey | API-Endpoint | PubKey Verified On | AuthenticationLastSuccess |
|--------|---------------|--------------------|----------------------------|
| PubA* | ComA.com/api/ | 1.1.1970 | 1.1.1970 |
| PubB | ComB.com/api/ | NOW | NOW |
| PubC | ComB.com/api/ | NULL | NULL |
```
The next process is the authorization. This happens on every call on the receiver site to determine which call is allowed for the other side.
```
ComA ---- getPubKey, sign({pubA, crypt(timeToken,pubB)},privA) --> ComB.com
ComB: did I verify pubA? SELECT PubKeyVerifiedOn FROm database WHERE PubKey = pubA
ComB: is pubA allowed to query this?
```

View File

@ -1,61 +1,61 @@
<mxfile host="65bd71144e">
<diagram id="jqy9GLoHfEna4h-l2pXZ" name="Seite-1">
<mxGraphModel dx="1416" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2336" pageHeight="1654" math="0" shadow="0">
<mxGraphModel dx="2893" dy="1778" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2336" pageHeight="1654" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="57" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" parent="1" vertex="1">
<mxGeometry x="1360" y="1340" width="920" height="294" as="geometry"/>
<mxGeometry x="1365" y="1340" width="920" height="294" as="geometry"/>
</mxCell>
<mxCell id="153" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="1370" y="1370" width="900" height="240" as="geometry"/>
<mxCell id="153" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1375" y="1370" width="900" height="240" as="geometry"/>
</mxCell>
<mxCell id="44" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new infrastructure Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" parent="1" vertex="1">
<mxGeometry x="1360" y="811" width="920" height="450" as="geometry"/>
<mxGeometry x="1365" y="811" width="920" height="450" as="geometry"/>
</mxCell>
<mxCell id="148" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="1385" y="856" width="853.14" height="270" as="geometry"/>
<mxCell id="148" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1390" y="856" width="853.14" height="270" as="geometry"/>
</mxCell>
<mxCell id="42" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;existing infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" parent="1" vertex="1">
<mxGeometry x="70" y="841" width="490" height="480" as="geometry"/>
<mxGeometry x="75" y="841" width="490" height="480" as="geometry"/>
</mxCell>
<mxCell id="147" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="80" y="881" width="470" height="310" as="geometry"/>
<mxCell id="147" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="85" y="881" width="470" height="310" as="geometry"/>
</mxCell>
<mxCell id="144" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new infrastructure Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" vertex="1" parent="1">
<mxGeometry x="1360" y="400" width="280" height="120" as="geometry"/>
<mxCell id="144" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new infrastructure Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" parent="1" vertex="1">
<mxGeometry x="1365" y="400" width="280" height="120" as="geometry"/>
</mxCell>
<mxCell id="143" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; existing Infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" vertex="1" parent="1">
<mxGeometry x="280" y="320" width="280" height="120" as="geometry"/>
<mxCell id="143" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; existing Infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" parent="1" vertex="1">
<mxGeometry x="285" y="320" width="280" height="120" as="geometry"/>
</mxCell>
<mxCell id="39" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new infrastrucutre Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" parent="1" vertex="1">
<mxGeometry x="1358.14" y="530" width="440" height="240" as="geometry"/>
<mxGeometry x="1363.14" y="530" width="440" height="240" as="geometry"/>
</mxCell>
<mxCell id="35" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;existing Infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" parent="1" vertex="1">
<mxGeometry x="118.14" y="530" width="440" height="240" as="geometry"/>
<mxGeometry x="123.14" y="530" width="440" height="240" as="geometry"/>
</mxCell>
<mxCell id="2" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; existing Infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" parent="1" vertex="1">
<mxGeometry x="280" y="40" width="360" height="140" as="geometry"/>
<mxGeometry x="285" y="40" width="360" height="140" as="geometry"/>
</mxCell>
<mxCell id="138" style="edgeStyle=none;html=1;fontSize=10;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="3" target="137">
<mxCell id="138" style="edgeStyle=none;html=1;fontSize=10;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="3" target="137" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="DHT-Node&lt;br&gt;- dht_gradido-topic&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;- keypair_A&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#008a00;fontColor=#ffffff;strokeColor=#005700;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="480" y="80" width="160" height="80" as="geometry"/>
<mxGeometry x="485" y="80" width="160" height="80" as="geometry"/>
</mxCell>
<mxCell id="4" value="&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new infrastructure Community-B&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" parent="1" vertex="1">
<mxGeometry x="1280" y="180" width="320" height="160" as="geometry"/>
<mxGeometry x="1285" y="180" width="320" height="160" as="geometry"/>
</mxCell>
<mxCell id="141" style="edgeStyle=none;html=1;fontSize=12;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="5" target="140">
<mxCell id="141" style="edgeStyle=none;html=1;fontSize=12;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="5" target="140" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="5" value="dht-node&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- dht_gradido_topic&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;&lt;font color=&quot;#ff0000&quot;&gt;- keypair_B&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1290" y="240" width="140" height="80" as="geometry"/>
<mxGeometry x="1295" y="240" width="140" height="80" as="geometry"/>
</mxCell>
<mxCell id="15" value="" style="endArrow=classic;html=1;fontSize=14;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="220" as="sourcePoint"/>
<mxPoint x="1000" y="220" as="targetPoint"/>
<mxPoint x="565" y="220" as="sourcePoint"/>
<mxPoint x="1005" y="220" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="17" value="&lt;b&gt;&amp;nbsp; join_AsServer&lt;/b&gt;(dht_gradido_topic, &lt;font color=&quot;#cc0000&quot;&gt;keypair_A.pubKey&lt;/font&gt;)&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="15" vertex="1" connectable="0">
@ -65,8 +65,8 @@
</mxCell>
<mxCell id="19" value="" style="endArrow=classic;html=1;fontSize=14;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1360" y="360" as="sourcePoint"/>
<mxPoint x="560" y="360" as="targetPoint"/>
<mxPoint x="1365" y="360" as="sourcePoint"/>
<mxPoint x="565" y="360" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="20" value="&lt;b&gt;&amp;nbsp; join_AsClient&lt;/b&gt;(dht_gradido_topic, &lt;font color=&quot;#cc0000&quot;&gt;keypair_B.pubKey&lt;/font&gt;)&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="19" vertex="1" connectable="0">
@ -76,26 +76,26 @@
</mxCell>
<mxCell id="23" value="" style="endArrow=none;html=1;fontSize=14;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="1620" as="sourcePoint"/>
<mxPoint x="990" y="330" as="targetPoint"/>
<mxPoint x="565" y="1620" as="sourcePoint"/>
<mxPoint x="995" y="330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="24" value="" style="endArrow=none;html=1;fontSize=14;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1360" y="1620" as="sourcePoint"/>
<mxPoint x="1090" y="40" as="targetPoint"/>
<mxPoint x="1365" y="1620" as="sourcePoint"/>
<mxPoint x="1095" y="40" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="25" value="dht-node&lt;br&gt;- dht_gradido-topic&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- keypair_A&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;&lt;font color=&quot;#ff8000&quot;&gt;* pubKey_B&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#008a00;fontColor=#ffffff;strokeColor=#005700;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="400" y="360" width="160" height="70" as="geometry"/>
<mxGeometry x="405" y="360" width="160" height="70" as="geometry"/>
</mxCell>
<mxCell id="26" value="dht-node&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- dht_gradido_topic&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- keypair_B&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;&lt;font color=&quot;#ff8000&quot;&gt;* pubKey_A&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1360" y="430" width="140" height="80" as="geometry"/>
<mxGeometry x="1365" y="430" width="140" height="80" as="geometry"/>
</mxCell>
<mxCell id="27" value="" style="endArrow=classic;html=1;fontSize=14;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1" target="26" source="25">
<mxCell id="27" value="" style="endArrow=classic;html=1;fontSize=14;entryX=0;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" source="25" target="26" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="440" as="sourcePoint"/>
<mxPoint x="1360" y="460" as="targetPoint"/>
<mxPoint x="565" y="440" as="sourcePoint"/>
<mxPoint x="1365" y="460" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="28" value="&lt;b&gt;&amp;nbsp; connect&lt;/b&gt;( socket_B( &lt;font color=&quot;#cc0000&quot;&gt;keypair_A.pubKey&lt;/font&gt;) )&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="27" vertex="1" connectable="0">
@ -105,8 +105,8 @@
</mxCell>
<mxCell id="31" value="" style="shape=flexArrow;endArrow=classic;startArrow=classic;html=1;fontSize=14;" parent="1" edge="1">
<mxGeometry width="100" height="100" relative="1" as="geometry">
<mxPoint x="558.14" y="560" as="sourcePoint"/>
<mxPoint x="1358.14" y="560" as="targetPoint"/>
<mxPoint x="563.14" y="560" as="sourcePoint"/>
<mxPoint x="1363.14" y="560" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="32" value="&amp;nbsp; SocketStream( exchange (&lt;font color=&quot;#cc0000&quot;&gt;url_A, apiVer_A&lt;/font&gt;), exchange(&lt;font color=&quot;#cc0000&quot;&gt;url_B, apiVer_B&lt;/font&gt;) )&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="31" vertex="1" connectable="0">
@ -115,15 +115,15 @@
</mxGeometry>
</mxCell>
<mxCell id="33" value="dht-node&lt;br&gt;- dht_gradido-topic&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- keypair_A&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#008a00;fontColor=#ffffff;strokeColor=#005700;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="398.14" y="560" width="160" height="57" as="geometry"/>
<mxGeometry x="403.14" y="560" width="160" height="57" as="geometry"/>
</mxCell>
<mxCell id="34" value="dht-node&lt;br&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- dht_gradido_topic&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left&quot;&gt;&lt;span&gt;- keypair_B&lt;/span&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1358.14" y="560" width="140" height="57" as="geometry"/>
<mxGeometry x="1363.14" y="560" width="140" height="57" as="geometry"/>
</mxCell>
<mxCell id="46" value="" style="endArrow=classic;html=1;fontSize=14;entryX=0;entryY=0.25;entryDx=0;entryDy=0;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="48" target="51" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="931" as="sourcePoint"/>
<mxPoint x="970" y="941" as="targetPoint"/>
<mxPoint x="545" y="931" as="sourcePoint"/>
<mxPoint x="975" y="941" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="47" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;url_B&amp;gt;/&amp;lt;apiVer_B&amp;gt;/&lt;b&gt;openConnection&lt;/b&gt;( &lt;b&gt;&lt;font color=&quot;#ff0000&quot;&gt;pubkey_A&lt;/font&gt;&lt;/b&gt;, &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;encrypted and signed url_A&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="46" vertex="1" connectable="0">
@ -132,12 +132,12 @@
</mxGeometry>
</mxCell>
<mxCell id="48" value="encrypt &lt;font color=&quot;#000000&quot;&gt;url_A&lt;/font&gt;&amp;nbsp;with &lt;font color=&quot;#ff8000&quot;&gt;pubkey_B&lt;/font&gt; +&lt;br&gt;sign it with privatKey_A&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="345" y="896" width="195" height="38.5" as="geometry"/>
<mxGeometry x="350" y="896" width="195" height="38.5" as="geometry"/>
</mxCell>
<mxCell id="49" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="100" target="87" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="990" y="651" as="sourcePoint"/>
<mxPoint x="1040" y="601" as="targetPoint"/>
<mxPoint x="995" y="651" as="sourcePoint"/>
<mxPoint x="1045" y="601" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="50" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;url_A&amp;gt;/&amp;lt;apiVer_A&amp;gt;//&lt;b&gt;openConnectionRedirect&lt;/b&gt;(&lt;font color=&quot;#ff00ff&quot;&gt;&lt;b&gt;onetimeCode&lt;/b&gt;&lt;/font&gt;, url_B, encrypted &lt;font color=&quot;#cc0000&quot;&gt;&lt;b&gt;redirect_URL&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="49" vertex="1" connectable="0">
@ -145,13 +145,13 @@
<mxPoint x="72" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="132" style="edgeStyle=none;html=1;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=none;endFill=0;dashed=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" edge="1" parent="1" source="51">
<mxCell id="132" style="edgeStyle=none;html=1;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=none;endFill=0;dashed=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="51" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1360" y="926" as="targetPoint"/>
<mxPoint x="1365" y="926" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="51" value="decrypt &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;encoded_url_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp; &lt;br&gt;with &lt;font color=&quot;#000000&quot;&gt;privatkey_B&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1401.8600000000001" y="896" width="180" height="40" as="geometry"/>
<mxGeometry x="1406.8600000000001" y="896" width="180" height="40" as="geometry"/>
</mxCell>
<mxCell id="84" value="" style="edgeStyle=none;html=1;fontColor=#00FF00;startArrow=none;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="98" target="83" edge="1">
<mxGeometry relative="1" as="geometry">
@ -159,39 +159,39 @@
</mxGeometry>
</mxCell>
<mxCell id="53" value="&lt;font color=&quot;#009900&quot;&gt;pubkey_A of url_A&lt;/font&gt;&lt;br&gt;==&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;pubkey_A&lt;/font&gt;?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1993.14" y="880.25" width="150" height="70" as="geometry"/>
<mxGeometry x="1998.14" y="880.25" width="150" height="70" as="geometry"/>
</mxCell>
<mxCell id="55" value="&lt;div style=&quot;text-align: center&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;existing infrastructure Community-A&lt;/span&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;verticalAlign=top;fontStyle=1;fontSize=14;align=left;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=#97d077;" parent="1" vertex="1">
<mxGeometry x="40" y="1370" width="520" height="264" as="geometry"/>
<mxGeometry x="45" y="1370" width="520" height="264" as="geometry"/>
</mxCell>
<mxCell id="74" value="" style="edgeStyle=none;html=1;fontSize=14;fontColor=#FF8000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="64" target="65" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="155" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="65" target="154">
<mxCell id="155" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="65" target="154" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="64" value="decrypt encoded parameters&amp;nbsp;with privatkey_B" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1380" y="1411" width="280" height="28" as="geometry"/>
<mxGeometry x="1385" y="1411" width="280" height="28" as="geometry"/>
</mxCell>
<mxCell id="80" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=4;fontSize=14;fontColor=#FF8000;" parent="1" edge="1">
<mxCell id="80" value="" style="endArrow=none;dashed=1;html=1;strokeWidth=4;fontSize=14;fontColor=#FF8000;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="40" y="803" as="sourcePoint"/>
<mxPoint x="1960" y="803" as="targetPoint"/>
<mxPoint x="5" y="803" as="sourcePoint"/>
<mxPoint x="2325" y="800" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="81" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;Federation&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="40" y="763" width="120" height="30" as="geometry"/>
<mxCell id="81" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;Federation&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="5" y="40" width="120" height="30" as="geometry"/>
</mxCell>
<mxCell id="82" value="&lt;font style=&quot;font-size: 18px&quot;&gt;GraphQL - Authentication Handshake&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="40" y="813" width="440" height="30" as="geometry"/>
<mxCell id="82" value="&lt;font style=&quot;font-size: 24px;&quot;&gt;Authentication&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="5" y="812" width="140" height="30" as="geometry"/>
</mxCell>
<mxCell id="83" value="&lt;font color=&quot;#009900&quot;&gt;url_A&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt;&amp;nbsp;&lt;/font&gt;==&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;unsigned url_A&lt;/font&gt;?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1748.14" y="946" width="180" height="50" as="geometry"/>
<mxGeometry x="1753.14" y="946" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="85" value="" style="endArrow=classic;html=1;fontSize=14;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="113" target="128" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="590" y="1101" as="sourcePoint"/>
<mxPoint x="1372.1999999999998" y="913" as="targetPoint"/>
<mxPoint x="595" y="1101" as="sourcePoint"/>
<mxPoint x="1377.1999999999998" y="913" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="86" value="&lt;b&gt;&amp;nbsp; redirect: &lt;/b&gt;http://&amp;lt;&lt;b&gt;redirect_URL&lt;/b&gt;&amp;gt;( &lt;font color=&quot;#ff00ff&quot;&gt;&lt;b&gt;onetimeCode&lt;/b&gt;&lt;/font&gt;,&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;encrypted&amp;nbsp;uuid_A&lt;/b&gt;&lt;/font&gt;)&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="85" vertex="1" connectable="0">
@ -199,36 +199,36 @@
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="123" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="87" target="122">
<mxCell id="123" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="87" target="122" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="87" value="decrypt &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;redirect_URL&lt;/b&gt;&lt;/font&gt;&amp;nbsp;with &lt;font color=&quot;#000000&quot;&gt;privatekey_A&lt;/font&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="250" y="948.5" width="290" height="22.5" as="geometry"/>
<mxGeometry x="255" y="948.5" width="290" height="22.5" as="geometry"/>
</mxCell>
<mxCell id="104" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.349;exitY=1.025;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="88" target="130" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points"/>
<mxPoint x="2239.4199999999996" y="1071" as="targetPoint"/>
<mxPoint x="2244.4199999999996" y="1071" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="88" value="decrypt &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;encoded_uuid_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp; &lt;br&gt;with &lt;font color=&quot;#00ff00&quot; style=&quot;font-weight: bold&quot;&gt;pubkey_A&lt;/font&gt; of &lt;font color=&quot;#ff00ff&quot; style=&quot;font-weight: bold&quot;&gt;oneTImeCode&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1798.14" y="1021" width="226.28" height="40" as="geometry"/>
<mxGeometry x="1803.14" y="1021" width="226.28" height="40" as="geometry"/>
</mxCell>
<mxCell id="90" value="found &amp;amp; valid&lt;br&gt;&lt;font color=&quot;#ff00ff&quot;&gt;oneTimeCode&lt;/font&gt;?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1581.8600000000001" y="1016" width="180" height="50" as="geometry"/>
<mxGeometry x="1586.8600000000001" y="1016" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="91" value="" style="endArrow=classic;html=1;fontSize=14;fontColor=#FF8000;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="90" target="88" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1361.8600000000001" y="1076" as="sourcePoint"/>
<mxPoint x="1411.8600000000001" y="1026" as="targetPoint"/>
<mxPoint x="1366.8600000000001" y="1076" as="sourcePoint"/>
<mxPoint x="1416.8600000000001" y="1026" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="95" value="" style="endArrow=classic;html=1;fontSize=14;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" target="48" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1360" y="925" as="sourcePoint"/>
<mxPoint x="560" y="891" as="targetPoint"/>
<mxPoint x="1365" y="925" as="sourcePoint"/>
<mxPoint x="565" y="891" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="96" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;OK" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="95" vertex="1" connectable="0">
@ -237,43 +237,43 @@
</mxGeometry>
</mxCell>
<mxCell id="98" value="verify&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;signed_url_A&lt;/font&gt;&amp;nbsp; &lt;br&gt;with &lt;font color=&quot;#009900&quot;&gt;pubkey_A&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1768.14" y="896" width="140" height="40" as="geometry"/>
<mxGeometry x="1773.14" y="896" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="99" value="" style="edgeStyle=none;html=1;fontColor=#00FF00;endArrow=classic;endFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="53" target="98" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1568.14" y="911" as="sourcePoint"/>
<mxPoint x="1803.14" y="911" as="targetPoint"/>
<mxPoint x="1573.14" y="911" as="sourcePoint"/>
<mxPoint x="1808.14" y="911" as="targetPoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="100" value="encrypt redirect_URL&amp;nbsp;&amp;nbsp;&lt;br&gt;with &lt;font color=&quot;#009900&quot;&gt;publickey_A&lt;/font&gt; + sign with &lt;font color=&quot;#009900&quot;&gt;privatKey_B&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1401.8600000000001" y="951" width="276.28" height="40" as="geometry"/>
<mxGeometry x="1406.8600000000001" y="951" width="276.28" height="40" as="geometry"/>
</mxCell>
<mxCell id="101" value="" style="endArrow=classic;html=1;fontSize=14;fontColor=#FF8000;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=0;endFill=1;" parent="1" source="83" target="100" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1708.14" y="981" as="sourcePoint"/>
<mxPoint x="1359.5800000000002" y="980" as="targetPoint"/>
<mxPoint x="1713.14" y="981" as="sourcePoint"/>
<mxPoint x="1364.5800000000002" y="980" as="targetPoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="107" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="130" target="106" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points"/>
<mxPoint x="1893.14" y="1126" as="sourcePoint"/>
<mxPoint x="1898.14" y="1126" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="134" value="2." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#FF0000;" vertex="1" connectable="0" parent="107">
<mxCell id="134" value="2." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#FF0000;" parent="107" vertex="1" connectable="0">
<mxGeometry x="-0.9248" relative="1" as="geometry">
<mxPoint x="-14" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="106" value="encrypt &lt;font color=&quot;#000000&quot;&gt;&lt;b&gt;uuid_B&lt;/b&gt;&lt;/font&gt;&amp;nbsp;with &lt;b&gt;privatkey_B&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1401.8600000000001" y="1081" width="226.28" height="30" as="geometry"/>
<mxGeometry x="1406.8600000000001" y="1081" width="226.28" height="30" as="geometry"/>
</mxCell>
<mxCell id="108" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="106" target="110" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1368.56" y="1012.2" as="sourcePoint"/>
<mxPoint x="570" y="1013" as="targetPoint"/>
<mxPoint x="1373.56" y="1012.2" as="sourcePoint"/>
<mxPoint x="575" y="1013" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="109" value="&lt;b&gt;&amp;nbsp; response:&lt;font color=&quot;#ff0000&quot;&gt; &lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=&quot;#ff0000&quot;&gt;encoded_uuid_B&lt;/font&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="108" vertex="1" connectable="0">
@ -282,153 +282,153 @@
</mxGeometry>
</mxCell>
<mxCell id="110" value="decrypt &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;encoded_uuid_B&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;br&gt;with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt; &amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="360" y="1066" width="180" height="50" as="geometry"/>
<mxGeometry x="365" y="1066" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="112" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="110" target="135" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="570" y="1150.2" as="sourcePoint"/>
<mxPoint x="525" y="1151" as="targetPoint"/>
<mxPoint x="575" y="1150.2" as="sourcePoint"/>
<mxPoint x="530" y="1151" as="targetPoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="113" value="&lt;span style=&quot;color: rgb(255 , 255 , 255) ; font-size: 14px ; text-align: left&quot;&gt;encrypt&amp;nbsp;&lt;/span&gt;&lt;font color=&quot;#000000&quot; style=&quot;font-size: 14px ; text-align: left&quot;&gt;uuid_A&lt;/font&gt;&lt;span style=&quot;color: rgb(255 , 255 , 255) ; font-size: 14px ; text-align: left&quot;&gt;&amp;nbsp;with &lt;/span&gt;&lt;span style=&quot;font-size: 14px ; text-align: left&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;privatKey_A&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255 , 255 , 255) ; font-size: 14px ; text-align: left&quot;&gt;&amp;nbsp;&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontColor=#ffffff;fillColor=#60a917;strokeColor=#2D7600;" parent="1" vertex="1">
<mxGeometry x="320" y="1023.5" width="220" height="25" as="geometry"/>
<mxGeometry x="325" y="1023.5" width="220" height="25" as="geometry"/>
</mxCell>
<mxCell id="115" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=4;fontSize=14;fontColor=#FF8000;" parent="1" edge="1">
<mxCell id="115" value="" style="endArrow=none;dashed=1;html=1;strokeWidth=4;fontSize=14;fontColor=#FF8000;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="50" y="1333" as="sourcePoint"/>
<mxPoint x="1970" y="1333" as="targetPoint"/>
<mxPoint x="5" y="1333" as="sourcePoint"/>
<mxPoint x="2325" y="1330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="120" value="search &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;url_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;in &lt;br&gt;local Community-List" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1608.14" y="896" width="140" height="40" as="geometry"/>
<mxCell id="120" value="search &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;url_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;in &lt;br&gt;local Community-List" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1613.14" y="896" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="121" value="" style="endArrow=classic;html=1;fontSize=14;fontColor=#FF8000;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;" edge="1" parent="1" source="51" target="120">
<mxCell id="121" value="" style="endArrow=classic;html=1;fontSize=14;fontColor=#FF8000;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=1;" parent="1" source="51" target="120" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1581.8600000000004" y="921" as="sourcePoint"/>
<mxPoint x="1848.14" y="921" as="targetPoint"/>
<mxPoint x="1586.8600000000004" y="921" as="sourcePoint"/>
<mxPoint x="1853.14" y="921" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="122" value="search with&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;url_B&lt;/font&gt;&amp;nbsp;for the&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="90" y="940" width="140" height="38.5" as="geometry"/>
<mxCell id="122" value="search with&amp;nbsp;&lt;font color=&quot;#000000&quot;&gt;url_B&lt;/font&gt;&amp;nbsp;for the&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="95" y="940" width="140" height="38.5" as="geometry"/>
</mxCell>
<mxCell id="127" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.128;exitY=0.98;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="126" target="113">
<mxCell id="127" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.128;exitY=0.98;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="126" target="113" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="287" y="1036"/>
<mxPoint x="292" y="1036"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="126" value="verify sign of&amp;nbsp;&lt;b style=&quot;color: rgb(255 , 0 , 0)&quot;&gt;redirect_URL&lt;/b&gt;&amp;nbsp;with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubKey_B&lt;/b&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="250" y="978.5" width="290" height="25" as="geometry"/>
<mxCell id="126" value="verify sign of&amp;nbsp;&lt;b style=&quot;color: rgb(255 , 0 , 0)&quot;&gt;redirect_URL&lt;/b&gt;&amp;nbsp;with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubKey_B&lt;/b&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="255" y="978.5" width="290" height="25" as="geometry"/>
</mxCell>
<mxCell id="129" style="edgeStyle=none;html=1;entryX=0.061;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="128" target="90">
<mxCell id="129" style="edgeStyle=none;html=1;entryX=0.061;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="128" target="90" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="128" value="search&amp;nbsp;&lt;span style=&quot;color: rgb(255 , 0 , 255) ; font-weight: 700&quot;&gt;oneTImeCode&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1401.8600000000001" y="1026" width="146.28" height="30" as="geometry"/>
<mxCell id="128" value="search&amp;nbsp;&lt;span style=&quot;color: rgb(255 , 0 , 255) ; font-weight: 700&quot;&gt;oneTImeCode&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1406.8600000000001" y="1026" width="146.28" height="30" as="geometry"/>
</mxCell>
<mxCell id="130" value="overwrite&amp;nbsp;&lt;font color=&quot;#ff00ff&quot; style=&quot;font-weight: bold&quot;&gt;oneTImeCode &lt;/font&gt;with&amp;nbsp;decrypted&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;uuid_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1798.14" y="1081" width="160" height="40" as="geometry"/>
<mxCell id="130" value="overwrite&amp;nbsp;&lt;font color=&quot;#ff00ff&quot; style=&quot;font-weight: bold&quot;&gt;oneTImeCode &lt;/font&gt;with&amp;nbsp;decrypted&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;uuid_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1803.14" y="1081" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="135" value="insert&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;uuid_B&amp;nbsp;&lt;/b&gt;&lt;/font&gt;in entry with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt; &amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="360" y="1131" width="180" height="50" as="geometry"/>
<mxCell id="135" value="insert&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;uuid_B&amp;nbsp;&lt;/b&gt;&lt;/font&gt;in entry with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt; &amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="365" y="1131" width="180" height="50" as="geometry"/>
</mxCell>
<mxCell id="137" value="&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- uuid_A&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- apiVer_A&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px;&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px;&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px;&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;" vertex="1" parent="1">
<mxGeometry x="300" y="75" width="100" height="90" as="geometry"/>
<mxCell id="137" value="&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- uuid_A&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;- apiVer_A&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px;&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px;&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font-size: 10px; font-weight: 700; text-align: left;&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px;&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;" parent="1" vertex="1">
<mxGeometry x="305" y="75" width="100" height="90" as="geometry"/>
</mxCell>
<mxCell id="139" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="128.14" y="610" width="250" height="130" as="geometry"/>
<mxCell id="139" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="133.14" y="610" width="250" height="130" as="geometry"/>
</mxCell>
<mxCell id="37" value="&lt;font color=&quot;#ff8000&quot; style=&quot;font-size: 12px;&quot;&gt;&amp;nbsp;* url_B / pubKey_B / apiVer_B&lt;br style=&quot;font-size: 12px;&quot;&gt;&lt;br style=&quot;font-size: 12px;&quot;&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;arcSize=30;gradientColor=#006600;gradientDirection=north;" parent="1" vertex="1">
<mxGeometry x="208.14" y="685" width="170" height="30" as="geometry"/>
<mxGeometry x="213.14" y="685" width="170" height="30" as="geometry"/>
</mxCell>
<mxCell id="140" value="&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- uuid_B&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- apiVer_B&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="1480" y="235" width="100" height="90" as="geometry"/>
<mxCell id="140" value="&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- uuid_B&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;- apiVer_B&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0 , 0 , 0) ; font-size: 10px ; font-weight: 700 ; text-align: left&quot;&gt;&lt;font color=&quot;#cc0000&quot; style=&quot;font-size: 10px&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1485" y="235" width="100" height="90" as="geometry"/>
</mxCell>
<mxCell id="142" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="1538.14" y="610" width="250" height="130" as="geometry"/>
<mxCell id="142" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1543.14" y="610" width="250" height="130" as="geometry"/>
</mxCell>
<mxCell id="40" value="&lt;font color=&quot;#ff8000&quot; style=&quot;font-size: 12px&quot;&gt;&amp;nbsp;* url_A / pubKey_A / apiVer_A&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;align=left;arcSize=20;" parent="1" vertex="1">
<mxGeometry x="1618.14" y="693" width="170" height="30" as="geometry"/>
<mxGeometry x="1623.14" y="693" width="170" height="30" as="geometry"/>
</mxCell>
<mxCell id="145" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="100" y="1201" width="400" height="110" as="geometry"/>
<mxCell id="145" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="105" y="1201" width="400" height="110" as="geometry"/>
</mxCell>
<mxCell id="146" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="1798.14" y="1136" width="440" height="110" as="geometry"/>
<mxCell id="146" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1803.14" y="1136" width="440" height="110" as="geometry"/>
</mxCell>
<mxCell id="43" value="1: * url_B / &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt; / apiVer_B&lt;br&gt;2: * url_B /&amp;nbsp;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/ apiVer_B &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;/ uuid-B&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;arcSize=22;gradientColor=#006600;gradientDirection=north;" parent="1" vertex="1">
<mxGeometry x="180" y="1251" width="270" height="50" as="geometry"/>
<mxGeometry x="185" y="1251" width="270" height="50" as="geometry"/>
</mxCell>
<mxCell id="136" style="edgeStyle=none;html=1;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="135">
<mxCell id="136" style="edgeStyle=none;html=1;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="135" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="315" y="1251" as="targetPoint"/>
<mxPoint x="320" y="1251" as="targetPoint"/>
<Array as="points">
<mxPoint x="315" y="1156"/>
<mxPoint x="320" y="1156"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="125" style="edgeStyle=none;html=1;entryX=0.045;entryY=0.98;entryDx=0;entryDy=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;entryPerimeter=0;" edge="1" parent="1" target="126">
<mxCell id="125" style="edgeStyle=none;html=1;entryX=0.045;entryY=0.98;entryDx=0;entryDy=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;entryPerimeter=0;" parent="1" target="126" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="263" y="1251" as="sourcePoint"/>
<mxPoint x="268" y="1251" as="sourcePoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="124" style="edgeStyle=none;html=1;entryX=0.1;entryY=-0.04;entryDx=0;entryDy=0;entryPerimeter=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" target="43">
<mxCell id="124" style="edgeStyle=none;html=1;entryX=0.1;entryY=-0.04;entryDx=0;entryDy=0;entryPerimeter=0;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" target="43" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="207" y="981" as="sourcePoint"/>
<mxPoint x="212" y="981" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="149" value="&lt;font color=&quot;#000000&quot;&gt;1:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt; &lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt; / apiVer_A&lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;2:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt;&amp;nbsp;&lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/ apiVer_A /&amp;nbsp;&lt;b&gt;&lt;font color=&quot;#ff00ff&quot;&gt;oneTimeCode&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;3:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt;&amp;nbsp;&lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/ apiVer_A &lt;b&gt;&lt;font color=&quot;#00ff00&quot;&gt;/ &lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;uuid_A&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=&quot;#ff00ff&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=14;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;align=left;arcSize=28;" vertex="1" parent="1">
<mxGeometry x="1908.14" y="1171" width="320" height="60" as="geometry"/>
<mxCell id="149" value="&lt;font color=&quot;#000000&quot;&gt;1:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt; &lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt; / apiVer_A&lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;2:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt;&amp;nbsp;&lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/ apiVer_A /&amp;nbsp;&lt;b&gt;&lt;font color=&quot;#ff00ff&quot;&gt;oneTimeCode&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;font color=&quot;#000000&quot;&gt;3:*&lt;/font&gt;&lt;font color=&quot;#00ff00&quot;&gt;&amp;nbsp;&lt;b&gt;url_A / pubkey_A&lt;/b&gt;&lt;/font&gt;&amp;nbsp;/ apiVer_A &lt;b&gt;&lt;font color=&quot;#00ff00&quot;&gt;/ &lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;uuid_A&lt;/font&gt;&lt;/b&gt;&lt;b&gt;&lt;font color=&quot;#ff00ff&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=14;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;align=left;arcSize=28;" parent="1" vertex="1">
<mxGeometry x="1913.14" y="1171" width="320" height="60" as="geometry"/>
</mxCell>
<mxCell id="131" style="edgeStyle=none;html=1;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="130" target="149">
<mxCell id="131" style="edgeStyle=none;html=1;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="1" source="130" target="149" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="2178.14" y="1236" as="targetPoint"/>
<mxPoint x="2183.14" y="1236" as="targetPoint"/>
<Array as="points">
<mxPoint x="1988.14" y="1101"/>
<mxPoint x="1993.14" y="1101"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="133" value="1." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#FF0000;" vertex="1" connectable="0" parent="131">
<mxCell id="133" value="1." style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#FF0000;" parent="131" vertex="1" connectable="0">
<mxGeometry x="-0.4043" y="-2" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="67" value="" style="endArrow=classic;html=1;fontSize=14;fontColor=#FF8000;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=none;" parent="1" source="120" target="149" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1348.14" y="886" as="sourcePoint"/>
<mxPoint x="2077.64" y="816" as="targetPoint"/>
<mxPoint x="1353.14" y="886" as="sourcePoint"/>
<mxPoint x="2082.64" y="816" as="targetPoint"/>
<Array as="points">
<mxPoint x="1678.14" y="866"/>
<mxPoint x="2148.14" y="866"/>
<mxPoint x="1683.14" y="866"/>
<mxPoint x="2153.14" y="866"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="119" style="edgeStyle=none;html=1;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="149" target="53">
<mxCell id="119" style="edgeStyle=none;html=1;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="149" target="53" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1888.14" y="831" as="sourcePoint"/>
<mxPoint x="2068.14" y="946" as="targetPoint"/>
<mxPoint x="1893.14" y="831" as="sourcePoint"/>
<mxPoint x="2073.14" y="946" as="targetPoint"/>
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="150" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="90" y="1520" width="400" height="104" as="geometry"/>
<mxCell id="150" value="&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_A&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_A&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px; font-weight: 700;&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_A&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;fontColor=#FF0000;gradientColor=#006600;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="95" y="1520" width="400" height="104" as="geometry"/>
</mxCell>
<mxCell id="56" value="&amp;nbsp;* url_B / &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt; / uuid_B &lt;font color=&quot;#ff8000&quot;&gt;&lt;b&gt;/ name_B, etc.&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=14;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;arcSize=20;gradientColor=#006600;gradientDirection=north;" parent="1" vertex="1">
<mxGeometry x="180" y="1580" width="300" height="34" as="geometry"/>
<mxGeometry x="185" y="1580" width="300" height="34" as="geometry"/>
</mxCell>
<mxCell id="151" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="50" y="1400" width="500" height="110" as="geometry"/>
<mxCell id="151" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="55" y="1400" width="500" height="110" as="geometry"/>
</mxCell>
<mxCell id="61" value="encrypt with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_B&amp;nbsp;&lt;/font&gt;&lt;/b&gt;+ sign with &lt;font style=&quot;font-size: 12px&quot; color=&quot;#000000&quot;&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;privatekey_A&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;- &lt;font color=&quot;#000000&quot;&gt;uuid_A&lt;/font&gt;,&amp;nbsp;&lt;/b&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;uuid_B,&lt;/b&gt;&amp;nbsp;payload : name_A, description_A, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="210" y="1410" width="330" height="28" as="geometry"/>
<mxGeometry x="215" y="1410" width="330" height="28" as="geometry"/>
</mxCell>
<mxCell id="59" value="" style="endArrow=classic;html=1;fontSize=14;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="61" target="64" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="1564" as="sourcePoint"/>
<mxPoint x="970" y="1514" as="targetPoint"/>
<mxPoint x="925" y="1564" as="sourcePoint"/>
<mxPoint x="975" y="1514" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="60" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;url_B&amp;gt;/&amp;lt;apiVer_B&amp;gt;/familiarizeCommunity( encrypted+signed( uuid_A, uuid_B, payload) )&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="59" vertex="1" connectable="0">
@ -436,65 +436,65 @@
<mxPoint x="83" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="152" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="1810" y="1496" width="450" height="110" as="geometry"/>
<mxCell id="152" value="&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- uuid_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- url_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;- apiVer_B&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- privatkey_B&lt;br style=&quot;font-size: 10px&quot;&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 10px ; font-weight: 700&quot;&gt;&lt;font style=&quot;font-size: 10px&quot; color=&quot;#000000&quot;&gt;- publickey_B&lt;/font&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;gradientColor=#7ea6e0;gradientDirection=north;fontSize=10;align=left;verticalAlign=top;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1815" y="1496" width="450" height="110" as="geometry"/>
</mxCell>
<mxCell id="160" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="58" target="159">
<mxCell id="160" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="58" target="159" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="2075" y="1462"/>
<mxPoint x="2080" y="1462"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="58" value="&amp;nbsp;* url_A / &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_A&lt;/b&gt;&lt;/font&gt; / apiVer_A / uuid_A &lt;font color=&quot;#ff8000&quot;&gt;/ &lt;b&gt;name_A, etc.&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fontSize=14;fillColor=#1ba1e2;fontColor=#ffffff;strokeColor=#006EAF;align=left;arcSize=26;" parent="1" vertex="1">
<mxGeometry x="1890" y="1564.5" width="370" height="23" as="geometry"/>
<mxGeometry x="1895" y="1564.5" width="370" height="23" as="geometry"/>
</mxCell>
<mxCell id="156" style="edgeStyle=none;html=1;entryX=0.77;entryY=0.022;entryDx=0;entryDy=0;entryPerimeter=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="154" target="58">
<mxCell id="156" style="edgeStyle=none;html=1;entryX=0.77;entryY=0.022;entryDx=0;entryDy=0;entryPerimeter=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="154" target="58" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points"/>
</mxGeometry>
</mxCell>
<mxCell id="154" value="search entry with uuid_A" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="2096" y="1411" width="158.14" height="28" as="geometry"/>
<mxCell id="154" value="search entry with uuid_A" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="2101" y="1411" width="158.14" height="28" as="geometry"/>
</mxCell>
<mxCell id="65" value="matching &lt;br&gt;uui_B&amp;nbsp;?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1958.14" y="1400" width="120" height="50" as="geometry"/>
<mxGeometry x="1963.14" y="1400" width="120" height="50" as="geometry"/>
</mxCell>
<mxCell id="157" value="" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=none;endFill=1;" edge="1" parent="1" source="64" target="65">
<mxCell id="157" value="" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=none;endFill=1;" parent="1" source="64" target="65" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1570" y="1430" as="sourcePoint"/>
<mxPoint x="1728.1400000000003" y="1430" as="targetPoint"/>
<mxPoint x="1575" y="1430" as="sourcePoint"/>
<mxPoint x="1733.1400000000003" y="1430" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="162" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="159" target="161">
<mxCell id="162" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="159" target="161" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="159" value="verify sign of parameters&lt;br&gt;with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_A&lt;/b&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1830.35" y="1443" width="161.86" height="38" as="geometry"/>
<mxCell id="159" value="verify sign of parameters&lt;br&gt;with &lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_A&lt;/b&gt;&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1835.35" y="1443" width="161.86" height="38" as="geometry"/>
</mxCell>
<mxCell id="164" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="161" target="166">
<mxCell id="164" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="161" target="166" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1738" y="1531"/>
<mxPoint x="1743" y="1531"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="161" value="matching &lt;br&gt;uui_A ?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="1678.14" y="1438" width="120" height="50" as="geometry"/>
<mxCell id="161" value="matching &lt;br&gt;uui_A ?" style="rhombus;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="1683.14" y="1438" width="120" height="50" as="geometry"/>
</mxCell>
<mxCell id="163" value="encrypt with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_A&amp;nbsp;&lt;/font&gt;&lt;/b&gt;+ sign with &lt;font style=&quot;font-size: 12px&quot; color=&quot;#000000&quot;&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;privatekey_B&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_B, description_B, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1380" y="1459" width="280" height="40" as="geometry"/>
<mxCell id="163" value="encrypt with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_A&amp;nbsp;&lt;/font&gt;&lt;/b&gt;+ sign with &lt;font style=&quot;font-size: 12px&quot; color=&quot;#000000&quot;&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;privatekey_B&lt;/b&gt;&lt;/font&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_B, description_B, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1385" y="1459" width="280" height="40" as="geometry"/>
</mxCell>
<mxCell id="170" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="165" target="169">
<mxCell id="170" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="165" target="169" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="165" value="decrypt encoded parameters&amp;nbsp;with privatkey_A&lt;br&gt;verify sign with&lt;span style=&quot;color: rgb(0 , 0 , 0)&quot;&gt; &lt;/span&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0 , 0 , 0)&quot;&gt;&lt;br&gt;&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="290" y="1464" width="250" height="29" as="geometry"/>
<mxCell id="165" value="decrypt encoded parameters&amp;nbsp;with privatkey_A&lt;br&gt;verify sign with&lt;span style=&quot;color: rgb(0 , 0 , 0)&quot;&gt; &lt;/span&gt;&lt;font color=&quot;#ff0000&quot;&gt;&lt;b&gt;pubkey_B&lt;/b&gt;&lt;/font&gt;&lt;span style=&quot;color: rgb(0 , 0 , 0)&quot;&gt;&lt;br&gt;&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="295" y="1464" width="250" height="29" as="geometry"/>
</mxCell>
<mxCell id="62" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="163" target="165" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="990" y="1224" as="sourcePoint"/>
<mxPoint x="1040" y="1174" as="targetPoint"/>
<mxPoint x="995" y="1224" as="sourcePoint"/>
<mxPoint x="1045" y="1174" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="63" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;encrypted + signed ( payload_B )&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="62" vertex="1" connectable="0">
@ -502,130 +502,148 @@
<mxPoint x="52" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="167" style="edgeStyle=none;html=1;entryX=0;entryY=0;entryDx=0;entryDy=75;entryPerimeter=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="166" target="152">
<mxCell id="167" style="edgeStyle=none;html=1;entryX=0;entryY=0;entryDx=0;entryDy=75;entryPerimeter=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="166" target="152" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1600" y="1571"/>
<mxPoint x="1605" y="1571"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="168" style="edgeStyle=none;html=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="166" target="163">
<mxCell id="168" style="edgeStyle=none;html=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;fontSize=12;fontColor=#FF0000;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="166" target="163" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1450" y="1530"/>
<mxPoint x="1455" y="1530"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="166" value="write payload in entry with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_A&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_A, description_A, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1490" y="1511" width="220" height="40" as="geometry"/>
<mxCell id="166" value="write payload in entry with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_A&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_A, description_A, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1495" y="1511" width="220" height="40" as="geometry"/>
</mxCell>
<mxCell id="171" style="edgeStyle=none;html=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="169" target="56">
<mxCell id="171" style="edgeStyle=none;html=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="169" target="56" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="169" value="write payload in entry with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_B&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_B, description_B, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;strokeColor=#2D7600;align=left;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="55" y="1463" width="220" height="40" as="geometry"/>
<mxCell id="169" value="write payload in entry with &lt;b style=&quot;font-size: 12px&quot;&gt;&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 12px&quot;&gt;pubkey_B&lt;/font&gt;&lt;/b&gt;&lt;b style=&quot;font-size: 12px&quot;&gt;:&lt;br style=&quot;font-size: 12px&quot;&gt;&lt;/b&gt;- payload : name_B, description_B, etc." style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;strokeColor=#2D7600;align=left;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="60" y="1463" width="220" height="40" as="geometry"/>
</mxCell>
<mxCell id="180" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="398.14" y="640" width="140" height="120" as="geometry"/>
<mxCell id="180" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#006600;fontColor=#ffffff;strokeColor=#2D7600;align=left;gradientColor=#ffffff;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="403.14" y="640" width="140" height="120" as="geometry"/>
</mxCell>
<mxCell id="181" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="1368.14" y="640" width="130" height="120" as="geometry"/>
<mxCell id="181" value="&amp;nbsp; Apollo-Server" style="rounded=0;whiteSpace=wrap;html=1;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;gradientColor=#7ea6e0;gradientDirection=north;fontStyle=1;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="1373.14" y="640" width="130" height="120" as="geometry"/>
</mxCell>
<mxCell id="183" value="ask for pub&lt;font color=&quot;#000000&quot; style=&quot;font-size: 12px&quot;&gt;key_A&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1388.14" y="720" width="101.86" height="20" as="geometry"/>
<mxCell id="183" value="ask for pub&lt;font color=&quot;#000000&quot; style=&quot;font-size: 12px&quot;&gt;key_A&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1393.14" y="720" width="101.86" height="20" as="geometry"/>
</mxCell>
<mxCell id="182" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="142" target="191">
<mxCell id="182" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="142" target="191" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="184" value="read&amp;nbsp;&lt;b style=&quot;font-size: 12px;&quot;&gt;pubkey_A&lt;/b&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="425.93" y="720" width="90" height="20" as="geometry"/>
<mxCell id="184" value="read&amp;nbsp;&lt;b style=&quot;font-size: 12px;&quot;&gt;pubkey_A&lt;/b&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="430.93" y="720" width="90" height="20" as="geometry"/>
</mxCell>
<mxCell id="185" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=1;exitY=1;exitDx=0;exitDy=-15;exitPerimeter=0;" edge="1" parent="1" source="139" target="184">
<mxCell id="185" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;exitX=1;exitY=1;exitDx=0;exitDy=-15;exitPerimeter=0;" parent="1" source="139" target="184" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="186" value="&lt;font style=&quot;font-size: 18px&quot;&gt;GraphQL - Business-Communication&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontColor=#000000;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="40" y="1340" width="340" height="30" as="geometry"/>
<mxCell id="186" value="&lt;font style=&quot;font-size: 24px&quot;&gt;Autorized Communication&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="5" y="1340" width="440" height="30" as="geometry"/>
</mxCell>
<mxCell id="189" value="ask for&amp;nbsp;&lt;b style=&quot;font-size: 12px&quot;&gt;pubkey_B&lt;/b&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" vertex="1" parent="1">
<mxGeometry x="425.93" y="679" width="108.14" height="20" as="geometry"/>
<mxCell id="189" value="ask for&amp;nbsp;&lt;b style=&quot;font-size: 12px&quot;&gt;pubkey_B&lt;/b&gt;&amp;nbsp;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;align=left;" parent="1" vertex="1">
<mxGeometry x="430.93" y="679" width="108.14" height="20" as="geometry"/>
</mxCell>
<mxCell id="187" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" edge="1" parent="1" source="33" target="189">
<mxCell id="187" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#FFFFFF;startArrow=none;startFill=0;endArrow=classic;endFill=1;" parent="1" source="33" target="189" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="188" value="&lt;font color=&quot;#000000&quot;&gt;url_B&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontColor=#FFFFFF;labelBackgroundColor=default;labelBorderColor=default;" vertex="1" connectable="0" parent="187">
<mxCell id="188" value="&lt;font color=&quot;#000000&quot;&gt;url_B&lt;/font&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontColor=#FFFFFF;labelBackgroundColor=default;labelBorderColor=default;" parent="187" vertex="1" connectable="0">
<mxGeometry x="-0.423" relative="1" as="geometry">
<mxPoint x="1" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="174" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="191" target="189">
<mxCell id="174" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" source="191" target="189" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1358.14" y="710" as="sourcePoint"/>
<mxPoint x="558.14" y="710" as="targetPoint"/>
<mxPoint x="1363.14" y="710" as="sourcePoint"/>
<mxPoint x="563.14" y="710" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="175" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;pubkey_B" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" vertex="1" connectable="0" parent="174">
<mxCell id="175" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;pubkey_B" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="174" vertex="1" connectable="0">
<mxGeometry x="0.255" y="2" relative="1" as="geometry">
<mxPoint x="52" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="172" value="" style="endArrow=classic;html=1;fontSize=14;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="189" target="191">
<mxCell id="172" value="" style="endArrow=classic;html=1;fontSize=14;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="189" target="191" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="558.14" y="690" as="sourcePoint"/>
<mxPoint x="1358.14" y="690" as="targetPoint"/>
<mxPoint x="563.14" y="690" as="sourcePoint"/>
<mxPoint x="1363.14" y="690" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="173" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;&lt;b&gt;url_B&lt;/b&gt;&amp;gt;/&amp;lt;&lt;b&gt;apiVer_B&lt;/b&gt;&amp;gt;/&lt;b&gt;getPubKey&lt;/b&gt;()&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" vertex="1" connectable="0" parent="172">
<mxCell id="173" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;&lt;b&gt;url_B&lt;/b&gt;&amp;gt;/&amp;lt;&lt;b&gt;apiVer_B&lt;/b&gt;&amp;gt;/&lt;b&gt;getPubKey&lt;/b&gt;()&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="172" vertex="1" connectable="0">
<mxGeometry x="-0.215" y="-1" relative="1" as="geometry">
<mxPoint x="76" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="190" style="edgeStyle=none;html=1;entryX=0.936;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;entryPerimeter=0;exitX=0.89;exitY=1.004;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="34" target="183">
<mxCell id="190" style="edgeStyle=none;html=1;entryX=0.936;entryY=0;entryDx=0;entryDy=0;fontSize=12;fontColor=#000000;startArrow=none;startFill=0;endArrow=classic;endFill=1;entryPerimeter=0;exitX=0.89;exitY=1.004;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="34" target="183" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1483" y="620" as="sourcePoint"/>
<mxPoint x="1488" y="620" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="192" value="url_A" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontColor=#000000;labelBorderColor=default;" vertex="1" connectable="0" parent="190">
<mxCell id="192" value="url_A" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontColor=#000000;labelBorderColor=default;" parent="190" vertex="1" connectable="0">
<mxGeometry x="-0.766" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="191" value="read pub&lt;font color=&quot;#000000&quot; style=&quot;font-size: 12px&quot;&gt;key_B&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" vertex="1" parent="1">
<mxGeometry x="1374.85" y="679" width="85.15" height="20" as="geometry"/>
<mxCell id="191" value="read pub&lt;font color=&quot;#000000&quot; style=&quot;font-size: 12px&quot;&gt;key_B&lt;/font&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontSize=12;fillColor=#dae8fc;strokeColor=#6c8ebf;align=left;" parent="1" vertex="1">
<mxGeometry x="1379.85" y="679" width="85.15" height="20" as="geometry"/>
</mxCell>
<mxCell id="178" value="" style="endArrow=none;html=1;fontSize=14;startArrow=classic;startFill=1;endFill=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="184" target="183">
<mxCell id="178" value="" style="endArrow=none;html=1;fontSize=14;startArrow=classic;startFill=1;endFill=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="184" target="183" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="558.14" y="730" as="sourcePoint"/>
<mxPoint x="1358.14" y="730" as="targetPoint"/>
<mxPoint x="563.14" y="730" as="sourcePoint"/>
<mxPoint x="1363.14" y="730" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="179" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;&lt;b&gt;url_A&lt;/b&gt;&amp;gt;/&amp;lt;&lt;b&gt;apiVer_A&lt;/b&gt;&amp;gt;/&lt;b&gt;getPubKey&lt;/b&gt;()&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" vertex="1" connectable="0" parent="178">
<mxCell id="179" value="&lt;b&gt;&amp;nbsp; request: &lt;/b&gt;http://&amp;lt;&lt;b&gt;url_A&lt;/b&gt;&amp;gt;/&amp;lt;&lt;b&gt;apiVer_A&lt;/b&gt;&amp;gt;/&lt;b&gt;getPubKey&lt;/b&gt;()&amp;nbsp;&amp;nbsp;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="178" vertex="1" connectable="0">
<mxGeometry x="-0.215" y="-1" relative="1" as="geometry">
<mxPoint x="76" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="176" value="" style="endArrow=none;html=1;fontSize=14;startArrow=classic;startFill=1;endFill=0;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="183" target="184">
<mxCell id="176" value="" style="endArrow=none;html=1;fontSize=14;startArrow=classic;startFill=1;endFill=0;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" source="183" target="184" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1358.14" y="750" as="sourcePoint"/>
<mxPoint x="558.14" y="750" as="targetPoint"/>
<mxPoint x="1363.14" y="750" as="sourcePoint"/>
<mxPoint x="563.14" y="750" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="177" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;pubkey_A" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" vertex="1" connectable="0" parent="176">
<mxCell id="177" value="&lt;b&gt;&amp;nbsp; response:&lt;/b&gt;&amp;nbsp;pubkey_A" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=14;" parent="176" vertex="1" connectable="0">
<mxGeometry x="0.255" y="2" relative="1" as="geometry">
<mxPoint x="52" y="-3" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="41" value="" style="endArrow=classic;html=1;fontSize=14;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="183" target="40" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1768.14" y="510" as="sourcePoint"/>
<mxPoint x="1818.14" y="460" as="targetPoint"/>
<mxPoint x="1773.14" y="510" as="sourcePoint"/>
<mxPoint x="1823.14" y="460" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="36" value="" style="endArrow=classic;html=1;fontSize=14;exitX=0;exitY=0.5;exitDx=0;exitDy=0;startArrow=none;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="189" target="37" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="618.14" y="693" as="sourcePoint"/>
<mxPoint x="238.14" y="652" as="targetPoint"/>
<mxPoint x="623.14" y="693" as="sourcePoint"/>
<mxPoint x="243.14" y="652" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="193" value="" style="endArrow=none;dashed=1;html=1;strokeWidth=4;fontSize=14;fontColor=#FF8000;dashPattern=1 4;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="5" y="524" as="sourcePoint"/>
<mxPoint x="2325" y="524" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="194" value="&lt;font style=&quot;font-size: 18px&quot;&gt;direct exchange&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="5" y="536" width="110" height="30" as="geometry"/>
</mxCell>
<mxCell id="195" value="" style="endArrow=none;dashed=1;html=1;strokeWidth=4;fontSize=14;fontColor=#FF8000;dashPattern=1 4;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="5" y="180" as="sourcePoint"/>
<mxPoint x="2325" y="180" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="196" value="&lt;font style=&quot;font-size: 18px&quot;&gt;join&amp;amp;connect&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="5" y="192" width="140" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

After

Width:  |  Height:  |  Size: 653 KiB