From 702143fa5dc9c584ae1dc04096520829b3ed8c36 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Wed, 28 Sep 2022 16:25:08 +0200 Subject: [PATCH 01/14] Changing structure of Communication package Adding the Structure for the communication guide and moving the infomodel to a new location. --- Communication/CommunicationGuide.md | 112 ++++++++++++++++++ Communication/FoundationalStandards/README.md | 39 ++++++ .../Message/DescriptionRequestMessage_POST.md | 0 .../Infomodel}/Message/README.md | 0 .../Infomodel}/Message/requests/README.md | 0 .../Infomodel}/README.md | 0 6 files changed, 151 insertions(+) create mode 100644 Communication/CommunicationGuide.md create mode 100644 Communication/FoundationalStandards/README.md rename {Infomodel => Communication/Infomodel}/Message/DescriptionRequestMessage_POST.md (100%) rename {Infomodel => Communication/Infomodel}/Message/README.md (100%) rename {Infomodel => Communication/Infomodel}/Message/requests/README.md (100%) rename {Infomodel => Communication/Infomodel}/README.md (100%) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md new file mode 100644 index 0000000..1309d73 --- /dev/null +++ b/Communication/CommunicationGuide.md @@ -0,0 +1,112 @@ +# IDS Communication Guide # + +## Introduction ## + +Interoperability is a major goal of the IDS. Therefore, the interoperability between IDS Connectors and other components is of high importance. The IDS Communication Guide shall provide the required data structure and the interaction sequences to be realized for interoperability and to be used for interoperability testing. + +The Communication Guide is organized into a modular and composable structure. + +## Terms and Definitions ## + +### Control Plane vs. Data Plane and in-band vs. out of band ### + +Joint understanding of the terms `in-band` and `out-of-band`, as well as the `control plane` and `data plane`: + +**Commonalities:** Both term pairs… + +- represent the split of a previously joint, combined flow of information into two separate parts +- have a background in technology +- have some overlap, but put different emphasis + +#### in-band/out-of-band #### + +- **origins:** selection of radio frequencies (“bands”) for primary/secondary communication +- the split is motivated mainly by isolation & break-out reasons +- `in-band`: the same `frequency`, `connection` or `means of communication` is used for all transfers +- `out-of-band`: for a selected subset of communication, a different, dedicated band is selected +- **example:** main process is using HTTP, user identity verification subprocess uses SMTP (email) + + +#### control plane/data plane: #### + +- **origins:** in a networking device… +- the `control plane` is optimized for customizability and security. it controls the data plane. +- the `data plane` is optimized for speed, throughput and bandwidth. it handles the data payloads. +- the split is motivated mainly by “separation of concerns” +- `control plane`: controls what happens on the data plane +- `data plane`: agnostic of control logic, only used for payload transfers + +## Foundation ## + +The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. + +### Foundational standards ### + +[The Foundational Standards list.](./FoundationalStandards/README.md) + + +### Information Model ### + +The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. + +**Insert entity model after update.** + +The realization bases on DCAT for the Data Products and ODRL for Contract Policies. + +[The IDS-Information Model is here.](./Infomodel/README.md) + +### Identities ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +### Trust Frameworks ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +### Policies (authorization and Policy Description) ### + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Data Sharing (Conector) ## + +### Contract Negotiation ### + +part of the control plane + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + + +### Data Transfer ### + +part of the data plane. How data is exchanged with focus on communication and not on how the data plane is built. + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Catalog (Publish and query meta-data) ## + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + +## Registration ## + +messages and data types: +protocols: state machines for message flows and interaction patterns: +API binding: + + +## Audit logging ## +currently out of scope + +## Vocabularies ## +currently out of scope \ No newline at end of file diff --git a/Communication/FoundationalStandards/README.md b/Communication/FoundationalStandards/README.md new file mode 100644 index 0000000..b291095 --- /dev/null +++ b/Communication/FoundationalStandards/README.md @@ -0,0 +1,39 @@ +# Foundational Standards # + +These Foundational Standards are used in the IDS Communication Guide: + +## Attribute Based Access Control (ABAC) ## + +Related to Access Control that is not part of the [IDS-RAM](https://github.com/International-Data-Spaces-Association/IDS-G/blob/master/Glossary/README.md#ids-ram-international-data-spaces-reference-architecture-model). +[NIST, Guide to Attribute Based Access Control (ABAC) Definition and Considerations](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-162.pdf) + +## Linked Data Platform (LDP) ## + +[W3C, "Linked Data Platform"](https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp.html) + +[W3C, "Linked Data Platform 1.0 Primer"](https://www.w3.org/TR/ldp-primer/) + +## Open Digital Rights Language (ODRL) ## + +[W3C, ODRL](https://www.w3.org/TR/odrl-model/) as basis + for IDS usage control. + +## Resource Description Framework (RDF) ## + +[Wikipedia, „Resource Description Framework“](https://en.wikipedia.org/wiki/Resource_Description_Framework). + +## Time Ontology in OWL ## + +[W3C, "Time Ontology"](https://www.w3.org/TR/owl-time/) + +## The Organization Ontology ## + +[W3C, "The Organization Ontology"](https://www.w3.org/TR/vocab-org/) + +## WebAccessControl (WAC) ## + +[W3C, "Web Acces Control"](https://www.w3.org/wiki/WebAccessControl) + +## eXtensible Access Control Markup Language (XAML) ## + +[Wikipedia, "XAML"](https://en.wikipedia.org/wiki/XACML) diff --git a/Infomodel/Message/DescriptionRequestMessage_POST.md b/Communication/Infomodel/Message/DescriptionRequestMessage_POST.md similarity index 100% rename from Infomodel/Message/DescriptionRequestMessage_POST.md rename to Communication/Infomodel/Message/DescriptionRequestMessage_POST.md diff --git a/Infomodel/Message/README.md b/Communication/Infomodel/Message/README.md similarity index 100% rename from Infomodel/Message/README.md rename to Communication/Infomodel/Message/README.md diff --git a/Infomodel/Message/requests/README.md b/Communication/Infomodel/Message/requests/README.md similarity index 100% rename from Infomodel/Message/requests/README.md rename to Communication/Infomodel/Message/requests/README.md diff --git a/Infomodel/README.md b/Communication/Infomodel/README.md similarity index 100% rename from Infomodel/README.md rename to Communication/Infomodel/README.md From cd16a2ac6ab1e8ba54e8327c762ad3c91f7e5c94 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Wed, 28 Sep 2022 16:28:48 +0200 Subject: [PATCH 02/14] Update CommunicationGuide.md tidy up formatting --- Communication/CommunicationGuide.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 1309d73..4a6a178 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -26,8 +26,7 @@ Joint understanding of the terms `in-band` and `out-of-band`, as well as the `co - `out-of-band`: for a selected subset of communication, a different, dedicated band is selected - **example:** main process is using HTTP, user identity verification subprocess uses SMTP (email) - -#### control plane/data plane: #### +#### control plane/data plane #### - **origins:** in a networking device… - the `control plane` is optimized for customizability and security. it controls the data plane. @@ -44,7 +43,6 @@ The foundation package contains elements that commonly used. This includes stand [The Foundational Standards list.](./FoundationalStandards/README.md) - ### Information Model ### The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. @@ -83,7 +81,6 @@ messages and data types: protocols: state machines for message flows and interaction patterns: API binding: - ### Data Transfer ### part of the data plane. How data is exchanged with focus on communication and not on how the data plane is built. @@ -104,9 +101,10 @@ messages and data types: protocols: state machines for message flows and interaction patterns: API binding: - ## Audit logging ## + currently out of scope ## Vocabularies ## -currently out of scope \ No newline at end of file + +currently out of scope From 6a45b745dcc41d7400f8ad8693ba5a5ecdcdea55 Mon Sep 17 00:00:00 2001 From: Sebastian Bader Date: Thu, 29 Sep 2022 11:10:09 +0200 Subject: [PATCH 03/14] add more foundational standards --- Communication/FoundationalStandards/README.md | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Communication/FoundationalStandards/README.md b/Communication/FoundationalStandards/README.md index b291095..944b3ad 100644 --- a/Communication/FoundationalStandards/README.md +++ b/Communication/FoundationalStandards/README.md @@ -9,6 +9,8 @@ Related to Access Control that is not part of the [IDS-RAM](https://github.com/I ## Linked Data Platform (LDP) ## +W3C Recommendation how to read and write RDF data in RESTful manners, e.g. IDS Self-Descriptions, at a remote server. + [W3C, "Linked Data Platform"](https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp.html) [W3C, "Linked Data Platform 1.0 Primer"](https://www.w3.org/TR/ldp-primer/) @@ -32,8 +34,30 @@ Related to Access Control that is not part of the [IDS-RAM](https://github.com/I ## WebAccessControl (WAC) ## +LDP-inspired access control language for decentralized systems. + [W3C, "Web Acces Control"](https://www.w3.org/wiki/WebAccessControl) -## eXtensible Access Control Markup Language (XAML) ## +## eXtensible Access Control Markup Language (XACML) ## + +OASIS standard defining an XML-based policy language and reference architecture for access control systems. + +[Wikipedia, "XACML"](https://en.wikipedia.org/wiki/XACML) + +## Verifiable Credentials/Verifiable Presentations (VC/VP) ## + +W3C Recommendation to sign RDF statements, in particular JSON-LD. + +[W3C, "Verifiable Credentials"](https://www.w3.org/TR/vc-data-model/) + +## Transport Layer Security (TLS)## + +RFC 8446 (TLS v1.3) specifies how to encrypt data transfer in the internet. + +[RFC 8446](https://datatracker.ietf.org/doc/html/rfc8446) + +## Multipart ## + +Message format to transfer content with several parts. Used, e.g., for the exchange of IDS messages applying the Multipart-over-HTTPS scheme. -[Wikipedia, "XAML"](https://en.wikipedia.org/wiki/XACML) +[Wikipedia, Multipart MIME](https://en.wikipedia.org/wiki/MIME#Multipart_messages) \ No newline at end of file From 44c777c2bb37f9431314ec15323d949b3c526fa9 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 08:36:17 +0100 Subject: [PATCH 04/14] 57 common entities in a data space (#59) * Adding prelimmary figure and source Adding entities and realtionship of dataspaces as png and draw.io source * Linking the entity model to the Communication Guide * Add Catalog section to the CommunicationGuide * Add Catalog section to the CommunicationGuide Co-authored-by: Sebastian Bader Co-authored-by: Anil Turkmayali <77683020+anilturkmayali@users.noreply.github.com> --- Communication/CommunicationGuide.md | 69 +++++++++++++++++- ...Communicatoin-Guide_Dataspace_entities.png | Bin 0 -> 68728 bytes ...mmunicatoinGuide_Dataspace_entities.drawio | 1 + .../images/catalog-connector-interaction.png | Bin 0 -> 24571 bytes .../images/catalog-query-interaction.png | Bin 0 -> 3400 bytes .../catalog-request-connector-interaction.png | Bin 0 -> 4978 bytes .../catalog-request-resource-interaction.png | Bin 0 -> 4748 bytes .../images/catalog-resource-interaction.png | Bin 0 -> 31421 bytes .../connector-broker-interactions.drawio | 1 + 9 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 Communication/images/Communicatoin-Guide_Dataspace_entities.png create mode 100644 Communication/images/CommunicatoinGuide_Dataspace_entities.drawio create mode 100644 Communication/images/catalog-connector-interaction.png create mode 100644 Communication/images/catalog-query-interaction.png create mode 100644 Communication/images/catalog-request-connector-interaction.png create mode 100644 Communication/images/catalog-request-resource-interaction.png create mode 100644 Communication/images/catalog-resource-interaction.png create mode 100644 Communication/images/connector-broker-interactions.drawio diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 4a6a178..b227c88 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -47,7 +47,9 @@ The foundation package contains elements that commonly used. This includes stand The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. -**Insert entity model after update.** +![Entities and relationships in data spaces](./images/Communicatoin-Guide_Dataspace_entities.png) + +(find the source file of the image above [here](./images/CommunicatoinGuide_Dataspace_entities.drawio)) The realization bases on DCAT for the Data Products and ODRL for Contract Policies. @@ -91,9 +93,68 @@ API binding: ## Catalog (Publish and query meta-data) ## -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +The catalog in the IDS is a collection of Self-Descriptions, either of IDS Connectors or IDS Resources published by such IDS Connectors. The Self-Descriptions are the first-class-citizen in the catalogs, therefore all messages have the Self-Descriptions as their target, instead of the catalogs containing them. + +### Messages and Datatypes + +The messages, expected content, and the error behaviour are described in the [Functions and Correlated Messages](../Components/MetaDataBroker/FunctionsAndCorrelatedMessages/) section of the Metadata Broker. + +### Interaction Sequences + +Creating and manipulating catalog entries follows different state transitions depending wether Connector or Resource self-descriptions are concerned. + +#### Register and Update a Connector Self-Description + +An IDS Connector self-description is either unknown to a catalog (`initial state`), registered (`ConnectorRegistered`), temporarily inactive (`ConnectorInactive`), or deleted from the catalog (`end state`) as shown in Fig. C1. An inactive self-description is intended for Connectors, which are currently not reachable but intend to become active again in the dataspace. A Connector which self-description has been deleted before (aka. has reached the `end state`) must never come back with the same URI identifier. This is to prevent *false-flag operations* where evil players claim the identity of removed Connectors. + +![catalog-connector-interaction](./images/catalog-connector-interaction.png) + +___Figure C1: State transitions of Connector self-descriptions in a catalog.___ + + +#### Retrieve a Connector Self-Description + +Fig. C2 shows the diagram how to request a Connector self-description entry from a catalog. The DescriptionRequestMessage contains a reference to the target Connector self-discription identifier, defining which catalog entry shall be returned. There is no intermediate state so the operation is either successful or fails, for instance, due to a non-existing entry or an incorrectly formatted message. + +![catalog-request-connector-interaction](./images/catalog-request-connector-interaction.png) + +___Figure C2: Requesting a Connector self-description has no further states apart of the standard success or error cases.___ + + +#### Register and Update a Resource Self-Description + +An IDS Resource is either unknown to a catalog (`initial state`), registered (`ResourceRegistered`), temporarily inactive (`ResourceInactive`), or deleted from the catalog (`end state`) as shown in Fig. C3. It may be automatically created if a Connector self-description is added or extended (ConnectorUpdateMessage) and its self-description also contains Resource entries. A Resource self-description becomes inactive - and active again - if its parent Connector catalog entry becomes inactive or active. Similarily, a Resource self-description gets deleted automatically if the containing Connector gets deleted through a ConnectorUnavailableMessage. + +![catalog-resource-interaction](./images/catalog-resource-interaction.png) + +___Figure C3: State transitions of Connector self-descriptions in a catalog.___ + +#### Rerieve a Resource Self-Description + +Fig. C4 shows the diagram how to request a Resource entry from a catalog, similar to the operation for a Connector self-description. The DescriptionRequestMessage contains a reference to the target Resource self-discription identifier, defining which catalog entry shall be returned. There is no intermediate state so the operation is either successful or fails, for instance, due to a non-existing entry or an incorrectly formatted message. + +![catalog-request-resource-interaction](./images/catalog-request-resource-interaction.png) + +___Figure C4: Requesting a Resource self-description has no further states apart of the standard success or error cases.___ + + +#### Query a Catalog + +Fig. C5 shows the diagram how to send a formulated query a catalog. Different to the retrieval of Connector or Resource self-description entries, the return format is not predefined but depends on the query. The QueryMessage contains formulated query string in a standardized query language, for instance, SPARQL or the upcoming GQL. There is no intermediate state so the operation is either successful or fails, for instance, if the query language is not supported by the catalog hoster or the query itself contains syntax errors. + +![catalog-query-interaction](./images/catalog-query-interaction.png) + +___Figure C5: Sending a catalog query has no further states apart of the standard success or error cases.___ + + + +### API Bindings + +The API Operations of catalogs in the different protocol bindings are explained in the respective protocol sections: +* [IDS REST](./protocols/ids-rest/README.md#complex-operations-and-workflows) +* [IDS Multipart](./protocols/multipart/README.md#41-metadata-broker-communication) +* [idscp2](./protocols/idscp2/ApplicationLayer/README.md) + ## Registration ## diff --git a/Communication/images/Communicatoin-Guide_Dataspace_entities.png b/Communication/images/Communicatoin-Guide_Dataspace_entities.png new file mode 100644 index 0000000000000000000000000000000000000000..c3395332b52f766afcd3e68b8ea5fe41c2f86137 GIT binary patch literal 68728 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∓*H9%tB@dT;^-d!&iD!<3X=GONGY;#jKUr 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 \ No newline at end of file diff --git a/Communication/images/catalog-connector-interaction.png b/Communication/images/catalog-connector-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..bcb31d8740b990f4212d717043e965aeeb9d340c GIT binary patch literal 24571 zcmbTe2UJs0*DVS$U;-iu0hHdWAXRz?DbfTiAVn!6NS77_1VWc8paP)^3W#)&C`Ecv znu5|H6zRQ6e>?j9_x<=0wbxl^t-0nrkvH`;D9Gr^h=_4x`&}w`>FTWKn zO>0_(Ra+Vj>bZ&E+@G!p>7c_dqe6MhOQU zQ*E#W9mm%BW{5!C8s#mUp#G-^^Y_qGq1RR``)xn)ycP4_n(dsvKSF2h`r5h6JQ1E8 z2)B6=Na9Va(Je8bK!jm%^Jyfxw9tamALtV6Wt3W}+nPYVxsmk05? zx@D`i+dbqu=Pxqm7kwOgUtFwuQCjWpegCQn|9x}8x}6`o$?d~m5hP#^#7*-vZgm~Bz_^!9~jg`<_6 zo^;vetl*1}%PF+rYww0=;cN2yV`4BgnG4c3)8Ff4Z`6f$OqcogeLD#E0|@uczD+9u z@XIi`f`wHim&bsC#v(qLvRLf!WPfr{tXD3l`J${2i{D1jMJYT{-R>__

t{E|GhW z3*J_Ouk1eke$_wjJy{fq;#q1U7rHfAY#!QoyqK4{1OBr6voWPCoaxp^cevfF==qf| zZvmL+hnagf&1vs$$cs#1$*EHkT4SYlX5SAZADs%p1ofRpD!(&%k7XasXMV||s97o3 zE}eRZb^g(ptyW+3AVr;bLC+snDm{1m(-_ z-KCbzP1kxA&uV|&a}Z1qI6XMrXr?@~Ww2P{h?QdB@eZZA)A#nZ1^u4}V*NiAy$XdQ z)@^oebdLu5^%a?DC54$pZ6d%`WtakvH=i!Pecfal$`L1L$Ry*@7fh*exfpBzE~TrM}s8*9w- zS)X4r_xR3AicDOu+s|P3-!WhtxMX63G!Ho0{k-;h8KdNXv|8Qld7SA`e|qTP1dOa4 z$f59w#qD^+p~SwVZtq84=Ck+Tb2J=kRzH%z*=uJB7*J<$%8gSzm5LbpdH24&-?-0w zI{8THSN=k~F`V1yKhsfFz=cT5Ms8|$K3y)lq#}i*E!l?iq-9CZry22N`aMDXL1(`< z_cB=pE|%@G6Vyk&mZMMjpcG3&y07uklI1sUCbqw7(1L*$cHeLFI;=mNg~fm8MXbW% zLMiUSRMVS4l8bCyU~LA*HXHt#3jQq$njvS5?p@iw>vfWT59QD}Y@ng)8x%ar|87ZV!ESs{$jpO-&%(G*(uHwngA@JWS zV8n1^n~*gy=QpjirUK|fWZvp%^`L!TI_(li*SWIpee{PKk436ydeP|hiMrrRjO+Vg zk*H^}=Y8rA=K80?S(sIBc#S$$lRB|Ve16oMF#^tQs*AX*CNw2%z!t`Uj0vZ2jM-16 zc(Go)9s6n zJAn#p$;h$7qK~N=AU>2Ll$2(!tq+x1BgVk~pf^HLgLRv24B@92>BV``KP=UQkRR{4 z&hNV~Wncs0$x3Vx+OcO>byzu|Fuul_=lj>FYLibpIO3ql$PP2V&DLeLB`}z(T}#Ic zj^O!AB^&e(ACOS)i8W1Ejcm3Tcy(iT!_5J9r5sF$2A---d4V+a^472|Rxkv|s)T$K zaiGcD?$qG>tdr~YfFSM1iKokW1C0iC5>w|dCwquCOwkwMbAM>qn6S>D?Qtw_(J|Ce z*)t8-ZC^6xJ%b$e#h~-df3Wzu`G^JgUip0&1|9g_#^pG?t!2>VJPNsEq53~o8#Wxc z&0N&yU|jv`$I*ctjX2h}sUF1}llA_=532D!9pPVXQwfVzfePSIkX2iqthZ3a7)-T^ zKSGF`nST9RHZ}V3{$#)z0-_wf8!Nk(&)`xk0_(hM;lmZtY6X?duxh$e{An%~VTE~= zc9gRb#glAGICUhny_@wxGn zXM0=Ugu-1>P0poJGVo8zxc;jXORALem3pof`HeL_(sIwiA( zTnp@Oc?zp2axB8oDh1h*F5~%r+f@jM$5^^^k(5PLze3wDU9U8xbof!sf*6 zHXD*wDvdCBUdl5^N8J6cSw(^shs<{r$h~=qL3XoGgYTjVC*ldl_`2&%8IM|6Oa$yn zivx8|xBNh4I1{C$r6BqpasqZ=ZM|D^l9Bep3#X6~SEkLSo#h_c^;`RE&C+IdRBJ`>T$%EjhYU6j7vdXEqvBF)Fpju6aJxPFO<3O3DOh9MIK}pm^aya&YI` zewW(KHpTL?B&bc~l}2pu+>P=#AAoB%Hk*F|X~yNxg<^z9LNu}z-!l|AZ1y)-0iO^) zbR>NE3q5@Azkm4uawM;0&^lMQ$(p+1t+UHog*OgauS*P5{~M2=<3XeO!*fe($x7sK zow*ORdQL8u@+P0;T~4~c;)e7HN9FSa7rcEfZ7mvJnM?%n(9&Y5!o7366<>X7YkkY{ zEn$(j=!nVJ_!(|`w?pq~5)t2^T8uL_*1zN2YZ_1?di7)fU(-DYhPX|UCuX1L+<`>qY5l#0pAyUJe;0j`rn}?)cYq()8!)ow zGnNiISwEnNtSGI+${%5z1J5Q7v4}g8)_+qJ1kZ!U)%ixK4yzuk3nc0EDnE!x=l)|Y z-b-MXPhNP|amVXIV13s){a@*BM}3rWIT56fcOe*<7-c67j(H{KLBV}f7rMo*wEb)H z@zXowmk8f=Tmav7U3f`xEl3T}&#__9 zWt9dKj7_M&QQZ0bV^a0$9qNw^k^~Q^r2-zX+)*>heKT2U0%|vLxI8~WI9DeN0)pce zqH*0+rRVTj-M}A{BwYUK(;{W||13-gOq0GzTzSBK(+Uhu!WqNsR%c&y)#XHYS!(F& z->rU3*lPLOwKO=j?qB=$2rXjYXdRIL$AWh3U}@Z#t%uz4D2NX#Yo|Im*Tr45e(fD$ z;mJxQgd~*cGgdr^8r6X%>NX89I$jtS|2wt?82hK}$F&r=csOt)1uYJ&yF2N6r)hwg zl$ylw-}UQ*^&eR;FefYV!3S=nN@`%Rr#&2tHHIo4=Kof~{lD&TkKm%OBI$p=ym=K| z#QRV|F>f3qqu`T&S5d(B`f z2%dlU=Ak{o-@xrp1kNN=@=oNAxB9m%Tdgm7XdTDYe_P%Lmi@?&$f+KruK!GGI^Ev- zGv)8CARY=PY{Yv&kLsWV&VKVyHZfOmORQzB;NQtVfXgOwukGouj)Obei7Q5{I)$sE z2UBCiYyRTjA*$ez6Gt$^mVZX4vX1r?Z z^fwm7lK`WdT;>|JgLER5T<5h2_Ue?^a_;=MVX=WE)hxiXgQWgVtuA--*@b_upp#_= zF8l5JuiaE73HYrVqE(@S!d&8nkFTkB_b+P6YCYBb;Wf-C^IuoG1FmGxL^t{n@{;Z5 zD#rJ!)}*eo_WhJ|IVHzvHm&=&Nb5|m{WB-w(4R8pYp>zraY|L>&iQgz?1Lfbup3Kb za*p-i{!Xm{O3w}ASY9(BjuADQbJ$zaSf`l&=zyG<-u!X*_Lz%z_rEm|5~3^6iSAUT z8}M0W*WlBKS`KY(4HK(L3h@$u2YVj`w%}Uyo1+Jiw;X|ZXF>ZXi|=(F>TcgSZ|bO7>Z#P*uq1W>nYYDw(JJ-H$-9-A8nPZ<3Bg zeA~B^)ZCxTJ~bz5|2#BVNedkCnmX@_SWpYhY@*)(h>2T2LvBA=#QL6ovM^g&*!WFL z$hB+NKpmdKUG@0qQVmEFcN0BuCIpvJg2T}DLc}eGcfO|`Okiq~IPjl!vW}t5F8%Mi z-#L6J3;XQ7uAn>Llm4^7h^NYF^y9H$O{hBj7$idU3Vyh-3v_R4);)*o+uLutg&S5@cMd>zTU0&a_ZT1dvam_&juVJI<)d~O+itlw;`Ei=dM3VNP^u`}3Fw6|( zzoh8i2eDchx2Cd7Wj9%W@@JyXcW|g8{Y0c~`+LQsUU-grOzPF6IyXw-(l>M)w*3nt z?-bXo5U%;VtyvJ;FaVRQ2PL`-q0~Kcm$_z0cW@#x>S!eEidS;U?dm`e>!38_1Lu#R zmOS5Yog7RAbR=f2N$6zJK}Ra>#e6#A*(O+rFL>G4g~nV#F%@Mj5+4)&O;EyHJ(4Q)we<6(|eFUiS2-kFb?n za>t8lcPFkZ9o7dw76?4Cq%I@RcYcfLW6j7_tZ zsXf3Z^uU&U)2c4_Y@hcfU;7#xYAP9ofdX4fx^3Vai_%?c4w(@aV#T0bNmP$xmUr6S z?U5HHM)AG^E3}GyIDhyDOf)^+t>UdT`%NPwBiY9TyqT;fq1HX{hoE5Oxt=vY$_@d+M=g z`1gN;+y}|1l5M}97a>6(Z)!KPCVhkcCylvD56KABZWei2m22)ws8UkJ?GxtGy(eyM zRTvDj3j;*!=fFU2j~)5i0EO0VdYeY`m(5Fhw~-*E^V4@7nrju}PiGVLE5BW>S%{IG z=mQwm2b#NP2JKAVX&*rm_&la<;d_oJ*r0`mbCiw=6!)JUyp{1hJ9z&1VK!n7Y(eJv-SQ zEXRInq0(L;05t%0`4DyWvu3Z{wob59kLWjn!^yML{Wv$1hc9n?04(Kky5}$Z4GV=U zS4wKjEeN2;Uz|g*v;i{WIcN@kysy=iz{%FaIX8&{Mgz+-*0J)>7r%VR$evi+kZ%(V zP7@bEPqI%yRtR{5=jzDqOBU$tdsUBVLe?73vk0g;)_AS*i?Rzq5N5hGFCu<|g>nr& z{r&PT8S;iAuUNNuBADyv=Q}xkF?wlI1^`cccgNJ}TDof!TqS>R>F1S~7zX0HjV5vj z;BA6bW3SDgME(N6ggS}jm*a(;xXK}`sL<;!yla-Jz)J)hknH>2wgS znhKv^+5`9<+1Z98sLPA!C7sil1CHICJ}vMktdIUr>)l?6-!L|ZTHbm><(J^>H^#&{cwN% zeqR{CHFQB)?S|Vc$jcyO$Ewr~NxI@2HvCmr*Gii&E)5hUGC%uc*$u#xMrLpS;I(%!thbB`~=w`DSr_#7th)w9OHkDJC{0N&JSTGyvS9$GR) z+6&M>#esGPlA&qAu*tQWb>@}Xdr(PhWriVTX#mWMk2+S^?+rhq^rPQ$?dMslJ6fv= zjemq}wIaKt!RQtO5VG&W+_jCyzN=ML0P+dhgL4p|px``4uU>_t4_855EPRK-8JA56 z2Bofz&a~(5`|sXP$FB{R+;4PPYzF|s<&oT?40&JDFf@*%QTOa`=@{LfLLpBD%2gsyuQqa2LnG)+2)I&@Tf91Bax zCIRIHe#aeA0GxssEr)czYwr2-4wyP?7xEp2-&W@X zQ)>)X;rsoST7YM&n7Vv9@hY_k&zGr3=z_AC&va1%C(HMzJxrxoV@>cI>Ue+{U!3W* zBHH}g^x>H%+^R0yVex!a{C1D55X@%jw@DOKl0CV;S%hkAV-%oH!T7d2e@YQY(@{cA zDwxprfU~1X*29BS0EAxXW&e+U2m3{r3M z4e4*VvmW9?>Af3Ut+z)yAraTa-Wzb=tGF&gLyb}ruYGC-@iy<0a1HFjSWUJ#%){4Fd zY$Pnj?aeV8;|?WtO{QTgB4ZTh+KPycTH>rp0LH_cd;l6v$-D-d8CT?3c4C?^j{uBH z9z}B4HH|3?=IdPuXL*(nTth<69VA~A{??5Rm>3dba;Xt3w?_2lg&wfbP^dS(Z3;3$ z1|TVxykD(@NxXer{_OoT?dgr@F z_L`0_ryH?3zIlCRW>~$C-D~)R zv8HQ-nMaZ*st*U6hv1Oqx0P zQ_#n8h~#T4jLdor+C>N#vq@Zxm54HJ~6#84e(SeN=i;hGywWQ`){AWvq^yPLZEWw#M*s znn6lLrUW7$s9AF2+N0@Ehg%?rcK|T+1xqg2Xh*aBwZ;?hXby?LNan<@zInq)acrY& zTRjlxpz>s6MS>Go5FXETx@k-NYarCW~IavuqC2Yr^X zR@##`uhX&(Ys-Dm-GfSmB$aO96=)H_#kKf9{1O?vEtjcZ*2*CvI~bzK`YQ@%xYufg`~+gJDaL%h_mqRXR!PB3RRY4Xr~ zR+|FZ@}g`nq&*ss%t5y<2Cz{|PVrZU5^)`4(4K1IDoIpMy+)@xA%RF}gkZ|p&4Lv+(p=5u1X;<;!iwKsrKJyf(GcOrzDtj`oytgpbjNoho2DyXpQ$GAhAn@=B(6^*Qnbr3@nCqk}bhH%!r3Fx`^uS2(6;Ls29;nZSqS;J| zhN-0xA-W#3-?)Ut7CSedCYlEhI7Mheh2EsyeQERdK_U%9o#y)Wl#%seM0=!vWjiT< zxmA2?&;@F0iIo?IF*EN>SmWWrhnqGDD6s0PZrUyh_DNzIW>|WJj zycSy<+y!O^m2oSA-8Fnq=(tV=UeNn6;|dQE4!<4$JSy3B4Lh=qoXw4j(z~Jt)8J`& zp&L}&?WezH{p4~Y54~kv!#q^(2^j~j^HyJS`dD+>cWT3e7ZtCU6ZvV!v|f10a>v6# z0e#n0P)gywPrVQ)PFwI}PTu$%SyZMkLkblnQm=s#9W|&u`#y9yK_nm)7xd96YD6{ zw&b8Q;V7=#8;SoVK*pDnn*IVmm;ZQ6oyYvY@W7v73+Erymk8msY1Du8C9ZBH+zOa; zGJ6i=lp*GLA}tu-zeIl}?M=HS9pf`3job{nV^axrZ>yP7F@z&42ZNi9CzG3it%W_) zkAN{SOaG2l73D>bAt%!~HHxP|CB@AsL)A;cRE4@UW>k?#Ld3jw*q+RD?exE!!(Di? zokWs>vqT5~oin+gfe%Hr$}OtP`W>EZw2Nr5;hzeOKu79ja$Fm}D7%t1?lrpVa^M(Q zHfK|(>FORqng<7uDTYINKA3c8tkJrZ$W;r(l+BH)0jb)>&>Lp1?jhdRUg{WG84{62 zo>q*k{j_s0)R2JHIHKQs*2j^rWu~UYk>eWw=!P91hPtkSija6Hi6HmgfI{%p9f30}vSL1$Lj{ZtMRd$5m&bZ6{}OamvoV?m5JEnnx|oGCc^OB%RKI{S zEdP1O)E-pC${`y2Rcfv*9(~Gexgqh$kr`flt8&mQRdC}JpSlWrBB5ShmXPee_6ZB{TRyfokmc2=8#8duk^|(xyJN1Yiiq z+wru5BXX}A!bLrGS-<{y?M2E*J?5=FQuTsZ*ALPb9CKcJr1bJ|TboMkb?yt8`3&lS zV*!2}YBtV?ASt)&Yu3H62l5TMpOZ6OJdVEsk%#=JI}s%x% z_ZYJhi@K(>G8$j{ihhi&r%@z@XpkK0zb2QM_XJ~8pa@IT9DYCW@>Pw30y5$o`BfaN zBUO~%j4Dx@|K2d$71g(7*nx<;m~u(+){AnO>ai!dXd3eY!ljFOn3V3ZO@>*c7JiA+acxSX5n;H;H`U*lbL*Ydl#_IjX5=?hh6AO}NR zG+mCq!hsrqEsTtB(#ovNfu?l->-*0N^wMQO>8#Db))pjN*$W|x^TJ9vorcW=170w> zNjBWpnGA49^Ns8 z%%Ut4Ks{C*!+>bSXyLhinBJ_iQF{A5{^6{rT*(mjUINvaZW+KtLP%Nhd}t%2dqh4z zYRqGuM(aD>ENnd}!7D-h+1Ed}9U;z3+cV3lpbJ!Uu;P~ozr_YT@wQaH!Rt2%%#GuB ze-P6wELSC*j?le)(ZqvEvSVcGUf#^FJv%*m3g9P|=;iY)ep%-(O0lLjg(G;bdKJ8V zMOM=C+SK_|e4Nw`&tFvzgRVmz`idvH0RB;K4yUBV97K!tAS`N)^rX2ME4mBa0oBNH zi@o^e;He|6?B0;|&yP-{8}v;2cu;;L^+vDQob!n<`(GGF+@{cv`0FjcF@p>xr=V6U zJUuyD-s#t;9B)4tDLj{I*&G(?Aa&tkQPnT9vdR!xi&L|J-x)<>!&f>kC?85f6)f!Z=4L#U57k*E{=E%4wWrnmQ_ z9Gexsy0tT1lE9ZK;c?DQ9t-F5s1i{0u>$nQ)TIrL&E0Ksv~+&@cgUEnLKO4J$|K`S z97n7jjq?XkV?x@G<++mh4sRG69iREJoJ67@SMj?YSL z|ATOJ;9wVloF6i(#iPG;`s*|X>qwlBt>DfL8Ed8(R&w;{&5&1pevNFJ=DW6(&aH?k zb+wsnb=R3XTUAc`8L1uywirq28|2}6OmSkMN$Sqddcr}=;MTi23J{hI=l_*nl*X@F z{E!v`v#Xs0DE$S@5lBxcGhC-XOHQC?`X-fwNlEmddi0S+msSPh=Qv+!Q5<7=BmFP< z{Z9RJ_w@e4(Zal6y72E*m9u&8@9WEFnPX3PukSA>c)b!I!_*A3{2Z9HYfL|6D-Yt1 z=LCs5r#;Wu9eTMjAPEO?HgBv(93-A>=d5e@2ermpyhWQTQ3wfw`BL=I-y|7Pr7LYAc zV+R_Gqtz~m6%wfTiP3G-4bG(5U&~ypmkJlt`La2i0i1_&)e_FD08dem*r+1WATlHX z{@FIP#FsCx+1{K(1qpM0!2GeA&fc^@-3ZF_0vHY@8=}QH@k;V>tJxWdozODlXndQI z4w@u9@W1nv*k`Z2laH0!7Ka6gI_=#vw-v zi$6bx5wpEY)y+Wpbj!%tcA<^3^9*G?&JD41cJ7^<&?-fqJEEcg~&|p3|TjJ)iPt z?P&drA{xDk;4tg7#dN5-a@>e~sLq zy!@Mi`+ty|coF|U$W21hNhZQ-AE$=rWTt;E5&~Mm+IY?Rj2C!rXQuUQ5DGUIxU)jU zaT=Tmi*Mu$ZwWvxslX^1)JvE~QIlmXv zs!!v*RM%=2zJ0;67wb&cqp0$jL-&@BxqY3)Rb1J39~@TL5M)GFFU=ZYHgdI_O>P4b zt)aB{cw1bnbMgLaE3Eh#l3tlNa)5mW*ixNXvuFw!MT<}r(M3cyD=v~HkEul@3WLrL z5D;FPf57b*MtMO8aXNH980R#gnkMPfTvnZoDH;mC#AMo8p##&RejS^~qVG-p1obmr zrBS}hnMZ<{1LxyT{4KvBC6qEso7Qbp>a2jyVqstLctiD1t$5|I)HD6#h`qVW+bi<4 zW35!%yCAjW;*KBko4i$%NHxYO)8KZ{r%FlEkN9&;p}}%XyFdu%|HB5QF5#IO!96rK zrp?~Sbjh;2s4#86Y?CTZg6)a`{l;-3Q>Y}_rd8wk2Co{Xrat_&Fga~ZtvtR6I9qSveyu<2xb$>m};RDuvJMT<4fnHj2V?acu!`Th_KD5`4t-&$nQOh}dW z&GP#A;=Ubdd5(j1#UM1(Ya__l0O%=Io6W+))@qfPsykJhz2@4XE7BYAJPlMMuWAA)@RkA}o6QHkM|_nUJSpQxs) z=29KPe!87lHJYd4ZP`?#|E8?rW~r!Fs?MLx`jm9q~7HV~Im`tfSOW1S01U z!$2vK;VAbDo$Qm|0qtt(R_{h@!kbbeU&_2G<(IqS*ktp92JRdpbwr-}m?r~ec;C=C zceA|_Q$rQ^X%s9t9v#&2>Cqw|fVTZ6X1hffV~06HQ6Y8qQkJ~OCk-i>3eq@<0Mv$h z#bk6-n%>g=35#Epe34K|7f~PgNQ5F#6g0IxV-#8un_1Ve4v5<*%`2d$8k-HP5hdne zdv+VLii4v%M1xwm@!-Mvluze)h3Ns+^;yvuRPTf4F{-a4GV|1U-ib~ddzCNB}PMTsy3ZpejNstoQgy@rkqK;g!nMzUEG}-vUkjg%Y;r0oW9!rtb)Pr zWh7QUqhnw;%U1RJI>dF?3G$FFeh4~t^Md3AnVOi}Pz#>WU$dOH$#Jb^ZHg?iwrVkA zq|qa7m9>~`?p{aEp{3A*omW)JP<(VQ(_r_c%4Q9^ylzQ~__vsI;E-zu7HICnwiTOT z&H(7290bkM;?Kg@B;F>>)^{I6xci`gqi!jenW3g@d)>w{bKZ3iThf$)p_+=l5r^xWeJmAe=YP!2o zug2_o>MC3|+HB61$>`k-E!SWzJE$+POXbHQ8$uw(l|OE<35t@;lTR}=cAqj!wCt}> zDxzEYq@BvZb2@`p_9QF z+v4nX(Y;A5$U6jq;x?|GJkAu4Ye9=Cb5y1TZf1ZxH<3r*c|dQP$fu~2RLANZavK)l zlG@dz(Ik}N$ z2ADPX*F!#5IL8zXb6%Rlc9&RVVS`%dvOF1z)y?xbx~a#bMHtJfRn-oEo5uYW${075 zA#QIt6ccM4N0xY1WCmTfnUu&Dn(21Gl0p76?TgsEB%{eg$YY%q1Aun5q-kKiap9^d z5sKB}H9IUZEzHwDuo*}6V#&jN->hGKjw5rqI*e^TO;$Pox>fattJ#J`!lz73MaUP5 zYa7*&MqO@dMoH=)$5i(&Go20&_$cU7sv1Eh z_sU;veXz9^Vq@s!n_x|OXIU*s#~%L~e%UMHp^6e>CM4N)gpZ_5&rEy~t2wInRO!c> z$aks)!+b=4xbfU=o0D^Il5x^^GMZoV+OTAs*G}$ITJqoWR`pUJG-R>l%Y}UiaJ@~{ zt7)N^8m-t;doSz&$a%)56SWgB=RBzj@{SF#*EYZN zwKUlTan@8R$5z?h_oc4`6;DG&dBkl{ReELW}^_iQfKE}hIhXD$#(p8!9l%=eAlLKE7_XVdwH%Rj>uai zxazh9k3cD(3I6%yf*NPYTh91T@MP6TSAo)KgZ{;klZuK|`#DD`@?sK})2rzPzG|M=`g8Lw*?I9Yp`bcqUBUlIw45z|a{v^DF7j=w zwO!-*fPrqSX9{-RNLi3Wy;9BfQErq(KNMh;6)53hZ6K1u+W+}2QBT|$)5m@KZaZm@ z!53@njM6q#q!cMhj{Fim-^Rrva|Dq}i5=`~`TpgvW~)N$xoUL8vYGRz-%W5&gC6g4 zMpp68FxAgr0cYfVV;7c2B}GsAcM>A57ZZ2pE?@F~_`H%jli@vPzzCW;uu<0393a3Y z(;DQ%O7EB)AIu0#Pjo)(ix0_q2#S)rJ#EMrV#OAnV_o_wth<4+ zMQ!DZFJk)R)LYv`p_7N!q71$GbLZuzW)coiY_ z-_NTU;o=mK&qBuqgmH@H6i2+XY_`@SfN^&0(P>>eT6M4hJ(Yqfxt@lxce9gwE1`y6(1@hnlt zw9z8@4&9Po@H@R^;p|u4B@yOZTW#bSk5pJ9X4I*-J&*rvTAo|2o_xj-8^aAy4Tj&3 z=b2mh_}cVjS1WHaSu#gB)wf&g_S^?0BI85|&`?QE=~ByeW<`8dNzZk5L~qyBAOxy2iSZ$AzJO`vOoz zUvn6RQF|;?Fn&&nS8l4s(|zpP36r?p&5hjVXb6X66~1_Zr)S&$`sV9uH}bWuEzec% zK11LOrZ0D#;O|1p9ylafB*b6b`s%JYEhR%i)7W!{9Qz)LMh{8bzeJhN{6#6i z!v8x;f%ceY36I_IWBZR}ireWCpfh4Fhs&Pv68IFDx%46prG?Ke_}71ZEfyWjsBk@iC3!Oh}jn7bs*dO3>0U<@w0f&7Ap}9gTBZV zO`7P92zZ9uT3nNmlyPKQL#4(uORGh?A}$@IDmMV4;(9^FWPzNot3wKN347cW zQiz{Yw@VDpKp?CNhQ*(2FuCbyk_}emD-od{tH{ZcLsqgTVQU~=sqT?5Mr!x;b~xzc z;Fgj@*V9ABSjX%yxm=T;<7n)DL%J>#b*V+JDZP||7LjW=vr0sMk(L7H?3j(j?jThzDY8+g^Gsr zU1xTFQdaRP0b|@^s$DC-%YLtbM}{{zZ8Ibcp`q6S$DTvJh51@#Ap0C;1Z>V>7=pgG zsgQY=m7ys8lcwXZL->S|g)nEiy^xMlBvLsR9b;AbDO_f=bY_bC14*xV6T?*0!tVwI zK`n*;_$e0cdDzN!n~{;^KT@gGeoN#&kmMzAyUYCR(l zGJG$Fm*e$3R5txGdDmga zD00EdKE;d5{9eZJ|Fd8!u-||W<~-eQf8NdPERg%K9TJ?pf@bq0b&)2302++GV-m$Y zJ=of*R$HQ`J1dP*u|Nq8BO(2zb`9J5Uepu3f5TPI!hwRpSf_+-W4eG# zwJoHTY6EH}Pz9-H*bSv3u$bLuJFfw7lhL8t2GY%jhvTFNM4!Zwc&n2FRict8 zXjJ~ar9eL)TElQH=p8b@prGJ4YqXUZm3WcY{o7iQmfk0Z(?G8Jt{|7mc@&WPnZQYT z){I{*ulv>Shupu|RNN1QQ&~V9j5<%rJofb9_iGnR-FkT^sFb=dpvz{80~pf2-xj+n zLX6TR@P%hncz#;>)mP*7o_`({31Wv;x=cP(1NznZnGN#SOY9BbC**zij%^3>4Q~5? z@b!#I^|gk8%;BKk&+&@6JK@aY9Xp&qidW~qld=m};KL7sDIRBnD*Or;lf^@GcW=Pv zPSpTC$!*-*)8fCR>;jgn49RyPfC`f$XVVdH&v?gBUZ1GslC1Zd86e#ceTn7q0237^ z*2-8fTo=h#oHTX4J9)WAdDC*T-wTW2`?_oO$R({>BPF z9>`xTpJdo4NTCLReP5^A{a(5vPPnwQ+*mnWJXC2vH8oWhkb5iu0l129@Fay^I zz|Wq`>iiAkoZ~N5P)-Rzgzy`Vt}i*hTsedZn*(HW+8j?3?wei^o?in4JN47guh{5& z51YKMC6;3XozBZvHF>!TTrLeXK)HAe1v*xA%-wB-^Da<+(CwuOS_ACyFNEGt>Ry_A z&!+m<3m4=WY@hBf-97^3Xnn?Oj|V3993MUCb9@8O4F>D=h*nK3vil0?=;JnN^?gu7 zW&Eau(}?5eHhPDA-~F|IkF_xqpz+*_OyavtuSd=BzY8BeNNT=&;OK~f+a!SjlP;RM z6DE{&@m;rQPyqs03mz1*IvH|4Ye2_dnIUY63A&xEq^lc4cs+tv5g;8n1IIZ@dsNeO zZhB5P>nTuW=nor9JR&&UFzW~-s)H}+o>oTO6PZ72AA!Y+VY5%__gQde@-u56;JL4q zuJYgqV#6r@N*TA159(cj?&Kg<^L{t&*dhbU)CS_i3FK()2Hu%KzqF+ZbYF2fYYITo zoQnZ^75=bBb%LNoX_%lUVJc$)3J&3*CP2G9vHAPC0(g+kTc?d{gO90!Bu;NCYlxGe z^WZ&4Ja3df@QKxN#G3I3rLR_H5#7mH{~Tk_+gEOirE0 z3Hp}=ASOzuwy*xHB-{mO9KHB^SwDhktX-<+H8_EfFzY7eGA-~s_f1kr*M7e?{r#}d zMy7AAaYnM@5?#i}S+$p((0zW7`hs1$^QL=nJ<9QI})OLKY|JEgbUHzbVe zAkZPrD5_;0z>wCU%O}n3=M5HQYU z!i3?@{j~-`vr7Y6w}Pyi0K!^xq;0TaEpKv{_M=SA+5 z&@B8dH_)O&rB9ePlcew0YbQxo2d7A!-Db0|3NE}LU-w& z>!r|dmwQTh-UIox@&dEpM&ls}R6mQ& zYo2?=UnhD~emUFBzA+}yg7Bsk^ah?5?%aX~ga~??vE!|rIE5cpQG&F^H6T!W{Fw>| z@psnVGY4!C9UJH^#*GNkl~r@v%Gj22UN(<}S4KC04Dhb+LUuT*oBYX6|KM$}?rVc~ zAYT4>@=Y)g=p1;^vGYJ&!UV`8Q!EpsKtpnSrY)u)aGQ&DCC6_8;zZQx@wUEG)z3Ri zKi)<;1AR5V@j7hg1iXGDKUQXmmx4vX3~&J65)ygVg-PFac|s}k6bQYm0JItYaijPP z!1P8yjWX~h;0z;C3v?XW-GIx)QCUHFhse^D0(i3n=<6y*9+d_?OC!9Z1dQMTTKEg! zHCQNi@#B-=1scIIrP+$qa=!tsymqA8r39rfXMpat^Z=xL2k=Cvbb%wj{u3H7OE?-g zIv{__uHmfh+*hjx?|^o16{uw3l%Vyw`D%Z$UjxOXcMBx;P1gh>He6lGJGn<(n<-Ss zlK?MNtTsIvP)LHqj{p^nysQ3X&y>k)$TGV`tV=k!N8!kE+;6+vQf^@xyzYhAy0=~M z=<&cmTJKMU$vZhIF#+%$I-}4!l3MH zV=bkUElYMrb_yvn9-+dB7<-t>lx&j_WywTILXwcio}P-7EQLV}DGU`^dfxM%=l8tt za~$vc?|U4M4nt<{`?|0Dy3g(D7DmE`4bCe=4}-lryB9-J49%M%rVOMFi0bTh z0Gp*e%?Pk1Cy@k0e7of3CX{#bQ&WGWb}F7D9TmJjQ`s0aKLL|2W&AUor~Q2IETlt> ziRsdMS|k@%>9%KrOfr?JTgL3Sz%FcM;iu3tN1AIQFAGt!_WjY;DH&V=x6=_>NY&KK zj9)|ts+^ZhxP&#&b;1^Xm-ap=hOUz<5Uc<%Wo5Aup5){>Vb?UqrwD{Mg1t+1ZCa~! zw<2nX?Tocp#!WnWVwEU&kXDoIEHGfb|$d9wEj%gi#-}#_CEC;N@Q7 zNJ854FY!pZQJEta^}%4YA34*lX!;~TdEp{%SzMiWwtUsC(G>1!3M_l8-LUB0+ME!# zzS55*fsAcx+|{?=si?8Wo}ijEm7zVJx%*we2{}*hmel3Rr7il;cigRYLU$MuEr&J= z-h(Fd3xlu(CK6LOB}&byhdd?Uu+bg~lh;RiEK6Y63bBX}J-htL%uM~jWSoh*3f#WY z^EU(#Bno}Vjr6s;>n$dz)f@6htD;!%pu z4D6{CtCR1~3*6HSH%rXV;GOjiF^R%xi`144?R+T>A+U z54_d=NZRI@6~-jjeDhgcC%Y#eu{3xjIqi&>eRd?~_ZA#-J*G*{c@F7NdBa%19&J7? zX4&deUqIP%^xODPGE&e8!|4xQ-5c6B)@utsTWZ~E-VrW3H!MWjNk)n@+}_fp2FRAp zVo#-(iL3A2^PK9Sg`Ie1PQ9;6%h!k?A7p`F?C?DuLJ8cKg~S7zxsyC|Ljw5XC?CPy5*Cm zt5lo*Fn?xf(5gar4EI~`?df5&OG1AdbV-Gxg7>-`sl?N06DWoh$q>6{pf1W`rDKweWcCou z(A?gy32XDlap!j{q~H$(BlwA)W-hc3dkA++hMCr~R$k&fNgIz6ejh1l0VA*~c7ngc{I)2TafDmAtoEe6T-!kUrPiHaqZmz25}vP%aQwMfP7 zyIJ*fIi69fq~G20Y00C?wx!|qr*olB3c$$KN2ad$1l+NW2m~=8BkSSE6)Dd^ef_1P zUh*vtshY1sQBnYFJW@5QKskDGB4QHO8l?;|c+u|AD38>2%X&!ZDaiggQptwmSL9_! z*6-xRQS!@Pg?rh`J%)w)wVqbpbELYr#zQ|>*1lsoNSVFG7+#>=n%^M5*=uv|S6mQ& z%&%U+JU>Vv;?>ibBsfrUPyjic<#*VCu77Eagn#P+B}UAFbo$%^xmAWe=TCA?gQU1V zT3zjn9GHVOT=|>y=?3^1n<6y4FlQ{>WFN9O9P*;I#MN=bErAUN@6BrmG;)vT!rkeR&C|r|9+dxif2Ke%%g|H;0ga6!GnD59U`)|5JFsW ztdFTiPB{y32NBb54NAywtTZ@LOKY@d{QbH*$)}VyNC}t3W5Rb;J=5nX^7P(u>Zri z@6{s0VQi>P#!mR0AqjO4P$v$GsBP*GAHO@aw`le}GAjE_5Y3m&9-wm^p0loscZ24_ zxu+WO>|x4=F{^1B0mg=r9p>w{+sX8;3NLmA42vaSpvBR?*U=>vM=m>CAljP^oIx#Z zqZ!_L%P;aJ#|MPV@a!FoOE%*p?I-PxMc;0`y>*mzUp~zOe^Na_5ua~0?9x|5>$Gk- z)Hi-bbA+uDVTK?V>Vi>&1absaVMa-8{}%h7{WLo@E_+!#&%xHkSgOIOdB)=36W9*U zZdyvz!x!#LZ!T>cjO-&<9{gbS)e1*yjIkAd>bi75c>_DNw&aw$=2^|1F-_X<^Gey%sOv5ZV>H+W}Ld2QF>=S@lTCzSQ{hD#F5@;56r?l0Bz z5IBFA&F#PgWR1-RDMF#FW|qPp=LXhf)b4OPZCNVUU}@h?5L&;KJDXZY->R0-UD?V$ zZ8<~`V-mtOU{3ZQl(SyfK2?$Of^~X8+2!f$^%Uoghv$+$6ae+YWhdN?6Ewry!!jaM zZhP*9FSd8YBC|?{(~PM9Lw3(QORd-Uk6DFzNu*4tIc@Chh+VAs`5zz-9yvGp=}EeT zjj0|`NW{3`!N(b&8w{*Tu@RklNse;2Ix_6M5HirdUHpJ=XsJE@w5t2qm;%>>2M?M8 zL-r)>=X!0Uk@~o>!F1a!He4a0kk2cJSC05Yy?4a7!*&og=0XDQ0qIIK6Zmurhj>V5FDT&1HdL=A4v%>#>HgS4ajWOL#%&6H%pA);p?Du}mw3NYcEdg)w6(USvgbdcC=5*I3_xWc4>);;f$*;kQjlB;@ z^{jULynT4D`1P~Qm=BqjCt(w?r7iW`Z^){i1^JIk+fh+vGN0Qf-AwumhTA<=T*E@+ zrA|o!1f#0_2^9#CX1X-r4)Fv$febodm)M{eHdO>ch22NB;l|^hiw5*W*q7U8&(`Cs zlN+ac#1o@c@vU$29(>9{9fD2`J%9cEL}xRi!^4HpPL;1z45T>G>Z!}lN(D*OPLQ4_sh+QfzHQ%14>6GpjhwjZ;1s9DS2FHwtmuN3d5Vu zR_&Xai(tD<16G4SMdZs701LFXVxn)SbnuQL&dJv#eejVqq12y(I5MBtw6f1juBSj< zlO=$eKfd?^7UW1}2fV-%8cz)p6;|27sehYl(jK%v&!gW%R>5|qs(hMRW=(3s+aN>M zzcO=AR-Zv4ANch_8176$i$^Nc;#NWUa6n6V(@UxY?0u&uUp2X;LlC{UcXST%tk%{b ziuMNNk1|SGUJ*TZ{xrj97M~J)*(A=~$;IusHsn`GxmUFcei@fG>IdXgBuC|#++Bt!jl^j1 z%y@6e+Us)Vh0hP;>M!8Bgzb(lf%71xGm+4BxHFM!HDWZfEQ7ggM#GhIB|WpYoGwsa z70egj{ZGaFQPH7WY&PvDF(-m}Y}E_lkZN4a*(cPrc5NQhE;GJ`lu(jOXy5KRl8LiC z2~=QSc@a{qU?Qmz*CI_hZwBBLD;q7DLu7&r_7|CkU3zX|1l#9S5B*-WISNN;&fp{U zOjh?%PsW|^y|k$g``cKO`cXxA+qeSx9JVdZp<^<|$Rgv6fIjt0nH!8(i)}cd%vK!sH3%#dB7@bfV5fr|qld$jOcz8DL;sO5t02qdJb(y0kSSwyDF^miW zrBo~mBN0zEJyC*d-70uN&XPE3pg1d@@cy=Q*?xf~knCbwu1?sqq(h%!i_Afta6O8u z-l<`;j4GCI&lEn>s$|%XYc;$WdLs0=yyTa%v65Zw8Zs*?9r7tC6T7E!LZa_Uk1@)| zL?J!f!Oij-?ZK0paftIUAR`|GXwhldZ$yvpBW1X&VLOeL1ogYn{w62BlySE^drci_ z^`&;42-y%^83}8RslRQONJhriN*uq8Cro`mbcpvgKm_RPkDf9)hHis~+}3M_izm*- zwL}6NhcB?^_T{)5!7G%_DFsuh9P72r%9lM+x1)Vqj-9+w*@Id*D3_{iyI&w8uCS}- zyMEj}AK?npZQzY#nbf0h1Qk<6Hr=?dNXZZ+Z|5@f#1>K)Nc;7hUXpUU@y9OlL5k=U z_O=?=yqxyU7$|p)Yx@jUf1^M8PkHK(4f5`I1`Mo3hg~ibjoEyKq*c}pZ5OJrUol5A zVbf;p47smYKtzh1VaA$mGG@G%rYxA91;uZw`(ywZ!VzCbLWNa$61)_SN$ahBBH%5v zr)u$9zMk8s$DB8R?v-4qIW$YpJcA9pep`uIGU9BYuc*mCo^F}HTUrFy0xuw*&vZaqqnExT+QeVLOt1Ufal(pmeC80`TNqGfEqASkpNSS7&+f z;*gl%AfQI>`ItMHT!sq<`k87!j7IGlaeiDq%1urS%NMdH^n_P` zk9o{KSR->pRd0DBshw~XD_6Q&u3GSw^o&s&W@x>h{5k)Ane_dUEhn2h{}vpFKxa8? zN@;bX%JYn}_Ex3Ry=etm-?Ql2x;#GCBD5{{=1vuuT8} literal 0 HcmV?d00001 diff --git a/Communication/images/catalog-query-interaction.png b/Communication/images/catalog-query-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3667fb402ca704d3d191b67501fadc8a2b9e82 GIT binary patch literal 3400 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 aIQE)GzLqf8GiQE{Sj>tT$UD{m literal 0 HcmV?d00001 diff --git a/Communication/images/catalog-request-connector-interaction.png b/Communication/images/catalog-request-connector-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..43a3f8ca9ec73e0146bf5f44733cc77d816a8fff GIT binary patch literal 4978 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 UQ10p~8bkxo2IiN_^qe0313DNozyJUM literal 0 HcmV?d00001 diff --git a/Communication/images/catalog-request-resource-interaction.png b/Communication/images/catalog-request-resource-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..d01edb0a7cf8e3141ac202afbd80423a5a4c47d3 GIT binary patch literal 4748 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 literal 0 HcmV?d00001 diff --git a/Communication/images/catalog-resource-interaction.png b/Communication/images/catalog-resource-interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..11d52b4f0984b7677f5a04b191af8a253b3051c2 GIT binary patch literal 31421 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

gHnS}NmgcG>;I5(v!_)piRIKw0us8iYWlLm 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 Jmgrf9{U1}iwoU*5 literal 0 HcmV?d00001 diff --git a/Communication/images/connector-broker-interactions.drawio b/Communication/images/connector-broker-interactions.drawio new file mode 100644 index 0000000..28008a6 --- /dev/null +++ b/Communication/images/connector-broker-interactions.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file From b8df07c36a26229c9f366fe9fdabf338d77fbe3d Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 08:37:48 +0100 Subject: [PATCH 05/14] Branch for jim (#82) * Issue 46: Bugfix adding necessary JSON-LD context elements (#49) * Bugfix adding necessary JSON-LD context elements Co-authored-by: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> * Add specification input documents * Remove uneccessary restrictions * Add numbering * Fix cardinality typo * Add mapping section Co-authored-by: sebbader-sap <107036549+sebbader-sap@users.noreply.github.com> Co-authored-by: Jim Marino --- .gitignore | 1 + CHANGELOG.md | 3 - Communication/protocols/multipart/README.md | 38 ++--- Specifications/README.md | 13 ++ .../catalog/catalog.binding.https.md | 134 ++++++++++++++++ Specifications/catalog/catalog.protocol.md | 131 +++++++++++++++ .../message/catalog.error.message.json | 11 ++ .../catalog/message/catalog.message.json | 71 ++++++++ .../message/catalog.request.message.json | 7 + Specifications/diagrams/diagram.styles.puml | 83 ++++++++++ .../model/im.dataspace.relationships.png | Bin 0 -> 26210 bytes .../model/im.dataspace.relationships.puml | 33 ++++ .../model/im.participant.entities.drawio | 1 + .../model/im.participant.entities.png | Bin 0 -> 43549 bytes Specifications/model/information.model.md | 151 ++++++++++++++++++ Specifications/notes/bibliography.md | 23 +++ 16 files changed, 679 insertions(+), 21 deletions(-) create mode 100644 .gitignore create mode 100644 Specifications/README.md create mode 100644 Specifications/catalog/catalog.binding.https.md create mode 100644 Specifications/catalog/catalog.protocol.md create mode 100644 Specifications/catalog/message/catalog.error.message.json create mode 100644 Specifications/catalog/message/catalog.message.json create mode 100644 Specifications/catalog/message/catalog.request.message.json create mode 100644 Specifications/diagrams/diagram.styles.puml create mode 100644 Specifications/model/im.dataspace.relationships.png create mode 100644 Specifications/model/im.dataspace.relationships.puml create mode 100644 Specifications/model/im.participant.entities.drawio create mode 100644 Specifications/model/im.participant.entities.png create mode 100644 Specifications/model/information.model.md create mode 100644 Specifications/notes/bibliography.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/CHANGELOG.md b/CHANGELOG.md index b2bbead..1fdeb92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 2022-09 - ### Changed - fixed missing mandatory elements in multipart message - Fixed wrong references to IDS-G-pre and RAM in CONTRIBUTING.md - ## [Q2/2022] ### Added diff --git a/Communication/protocols/multipart/README.md b/Communication/protocols/multipart/README.md index e6a7d49..6f48e3b 100644 --- a/Communication/protocols/multipart/README.md +++ b/Communication/protocols/multipart/README.md @@ -76,6 +76,7 @@ Content-Type: application/json Content-Length: 409 { + "@context" : "https://w3id.org/idsa/contexts/context.jsonld", "@type" : "ids:DescriptionResponseMessage", "issued" : { "@value" : "2019-12-21T13:11:14.596+02:00", @@ -264,24 +265,25 @@ Content-Type: application/json; charset=utf-8 Content-Disposition: form-data; name="header" { -"@type" : "ids:ConnectorUnavailableMessage", -"@id" : "http://industrialdataspace.org/connectorUnavailableMessage/1a421b8c-3407-44a8-aeb9-253f145c869a", -"issued" : { - "@value" : "2019-10-25T15:35:34.589+02:00", - "@type" : "http://www.w3.org/2001/XMLSchema#dateTimeStamp" -}, -"modelVersion" : "4.1.0", -"ids:issuerConnector" : { - "@id" : "https://test.connector.de/" -}, -"securityToken" : { - "@type" : "ids:DynamicAttributeToken", - "@id" : "http://industrialdataspace.org/token/e43c08e1-157b-4207-94a8-754e53f48839", - "ids:tokenFormat" : { - "@id" : "idsc:JWT" - }, - "tokenValue" : "eyJhbGciOiJSUzI1NiIsInR5cCI..." -} + "@context" : "https://w3id.org/idsa/contexts/context.jsonld", + "@type" : "ids:ConnectorUnavailableMessage", + "@id" : "http://industrialdataspace.org/connectorUnavailableMessage/1a421b8c-3407-44a8-aeb9-253f145c869a", + "issued" : { + "@value" : "2019-10-25T15:35:34.589+02:00", + "@type" : "http://www.w3.org/2001/XMLSchema#dateTimeStamp" + }, + "modelVersion" : "4.1.0", + "ids:issuerConnector" : { + "@id" : "https://test.connector.de/" + }, + "securityToken" : { + "@type" : "ids:DynamicAttributeToken", + "@id" : "http://industrialdataspace.org/token/e43c08e1-157b-4207-94a8-754e53f48839", + "ids:tokenFormat" : { + "@id" : "idsc:JWT" + }, + "tokenValue" : "eyJhbGciOiJSUzI1NiIsInR5cCI..." + } } --msgpart-- ``` diff --git a/Specifications/README.md b/Specifications/README.md new file mode 100644 index 0000000..3938f1b --- /dev/null +++ b/Specifications/README.md @@ -0,0 +1,13 @@ +# Getting Started + +The [Information Model document](./model/information.model.md) defines the core concepts, entities, and relationships that underpin a `Dataspace`. + +The [Catalog Protocol document](./catalog/catalog.protocol.md) defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. + +The [Catalog Binding document](./catalog/catalog.binding.https.md) defines a RESTful API over HTTPS for the `Catalog Protocol`. + +The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. + +Note that PlantUML diagrams will be replaced by Draw-IO alternatives. + + diff --git a/Specifications/catalog/catalog.binding.https.md b/Specifications/catalog/catalog.binding.https.md new file mode 100644 index 0000000..164daf0 --- /dev/null +++ b/Specifications/catalog/catalog.binding.https.md @@ -0,0 +1,134 @@ +# Catalog HTTPS Binding + +## 1 Introduction + +This specification defines a RESTful API over HTTPS for the [Catalog Protocol]. + +The OpenAPI definitions for this specification can be accessed [here](TBD). + +## 2 Path Bindings + +### 2.1 Prerequisites + +1. The `` notation indicates the base URL for a catalog service endpoint. For example, if the base catalog URL is `api.example.com`, the URL `https:///catalog/request` + will map to `https//api.example.com/catalog/request`. + +2. All request and response messages must use the `application/json` media type. + +### 2.2 CatalogErrorMessage + +In the event of a request error, the catalog service must return an appropriate HTTP code and a [CatalogErrorMessage](./catalog.protocol.md#) in the response body. + +| Field | Type | Description | +|---------|---------------|-------------------------------------------------------------| +| code | string | An optional implementation-specific error code. | +| reasons | Array[object] | An optional array of implementation-specific error objects. | + +### 2.3 The `catalog/request` endpoint + +#### 2.3.1 POST + +The [CatalogRequestMessage](catalog.protocol.md#1-catalogrequestmessage) corresponds to `POST https:///catalog/request`: + +``` +POST https://provider.com/catalog/request + +Authorization: ... + +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequest" + "ids:filter": {} +} +``` + +The `Authorization` header is optional if the catalog service does not require authorization. If present, the contents of the `Authorization` header are detailed in the +[Authorization section](#authorization). + +The `filter` property is optional. If present, the `filter` property can contain an implementation-specific filter expression or query to be executed as part of the catalog +request. + +#### 2.3.2 OK (200) Response + +If the request is successful, the catalog service must return a response body containing a [CatalogMessage](./message/catalog.message.json) which is a profiled DCAT Catalog type +described by the [Catalog Protocol Specification](catalog.protocol.md). + +## 3 Technical Considerations + +### 3.1 Authorization + +A catalog service may require authorization. If the catalog service requires authorization, requests must include an HTTP `Authorization` header with a token. The contents of +the token are undefined by may be an OAUTH2, Web DID, or other access token type. + +### 3.2 Versioning + +- Versioning will be done via URLs. TBD. + +### 3.3 Pagination + +A catalog service may paginate the results of a `CatalogRequestMessage`. Pagination data is specified using [Web Linking](https://datatracker.ietf.org/doc/html/rfc5988) +and the HTTP `Link` header. The `Link` header will contain URLs for navigating to previous and subsequent results. The following request sequence demonstrates pagination: + +``` +Link: ; rel="next" +{ + "@context": { + "dcat": "http://www.w3.org/ns/dcat/" + }, + "@type": "dcat:Catalog" + ... +} + +``` + +Second page response: + +``` +Link: ; rel="previous" +Link: ; rel="next" + +{ + "@type": "dcat:Catalog" + ... +} +``` + +Last page response: + +``` +Link: ; rel="previous" + +{ + "@type": "dcat:Catalog" + ... +} +``` + +### 3.4 Compression + +Catalog services MAY compress responses to a catalog request by setting the `Content-Encoding` header to `gzip` as described in +the [HTTP 1.1 Specification](https://www.rfc-editor.org/rfc/rfc9110.html#name-gzip-coding). + +## 4 Notes + +### 4.1 Asynchronous Interactions + +We may want to specify optional support for asynchronous callbacks for the catalog response. This would require addling a `callbackAddress` property and an `@id` to the request: + +``` +POST https://provider.com/catalog/request + +Authorization: ... + +{ + "@context:{}, + "@type": "ids:CatalogRequest" + "@id: "..." + "ids:callbackAddress": "https://example.com/endpoint" +} +``` + +The `CatalogResponseMessage` would be POSTed back to the endpoint. the response message could be posted mutiple times for paginated results and would need to include the +original `@id` value as a `correlationId` and a property indicating if the contents are complete (or additional responses will be sent). diff --git a/Specifications/catalog/catalog.protocol.md b/Specifications/catalog/catalog.protocol.md new file mode 100644 index 0000000..6417dba --- /dev/null +++ b/Specifications/catalog/catalog.protocol.md @@ -0,0 +1,131 @@ +# Catalog Protocol + +## 1 Introduction: Terms + +This document outlines the catalog protocol. The following terms are used: + +- A _**message type**_ defines the structure of a _message_. +- A _**message**_ is an instantiation of a _message type_. +- A _**catalog**_ is a [DCAT catalog](https://www.w3.org/TR/vocab-dcat-3/) offered by a _provider_ +- a _**catalog service**_ is a provider participant agent that advertises offered assets +- A _**consumer**_ is a participant agent that requests access to an offered asset. + +The catalog protocol defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. The concrete message exchange wire +format is defined in binding specifications. + +## 2 Message Types + +All messages must be serialized in JSON-LD compact form as specified in the [JSON-LD 1.1 Processing Algorithms and API](https://www.w3.org/TR/json-ld11-api/#compaction-algorithms). +Future IDS specifications may define additional optional serialization formats. + +### 2.1 CatalogRequestMessage + +**Sent by**: Consumer + +**Example**: + +``` +{ + "@context: { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequest" + "ids:filter": {} +} +``` + +**Response**: [CatalogMessage](./message/catalog.message.json) containing the [DCAT catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). + +**Schema**: (xx)[] + +#### Description + +The `CatalogRequestMessage` is message sent by a consumer to a catalog service. The catalog service must respond with a `CatalogMessage,` which is a +valid [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog). + +The `CatalogRequestMessage` may have a `filter` property which contains an implementation-specific query or filter expression type supported by the catalog service. + +The catalog service may require an authorization token. Details for including that token can be found in the relevant catalog binding specification. Similarly, pagination may +be defined in the relevant catalog binding specification. + +## 3 DCAT Vocabulary Mapping + +This section describes how the IDS Information Model maps to DCAT resources. + +### 3.1 Asset Entry + +An `Asset Entry` is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: + +#### 3.1.1 dcat:haPolicy + +An asset entry Dataset may have 0..N `hasPolicy` attributes that contain an ODRL `Offer` defining the usage control policy associated with the asset. Offers must NOT contain any +target attributes. The target of an offer is the asset associated with the containing asset entry. If an entry is has no associated policies (hasPolicy does not contain any offer +entries), the asset is does not have any usage control policy. + +### 3.2 Distributions + +An asset may contain 0..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where +the distribution is obtained. Specifically, a `DataService` specifies the endpoint for initiating a `ContractNegotiation` and `AssetTransfer`. + +### 3.3 DataService + +A DataService may specify an IDS service endpoint such as a `Connector`. + +#### 3.3.1 ids:dataServiceType + +If the DataService refers to an IDS service endpoint, it must include the property `ids:dataServiceType`: + +| Category | Description | +|------------|----------------------------------------------------------------------------| +| Definition | Specifies the IDS service type | +| Domain | [dcat:DataService](https://www.w3.org/TR/vocab-dcat-2/#Class:Data_Service) | +| Type | xsd:string | +| Note | The value of this field is left intentionally open for future extension. | + +The following table lists well-know IDS endpoint types: + +| Value | Description | +|---------------|----------------------| +| ids:connector | A Connector endpoint | +| | | + + +#### 3.3.2 dcat:servesDataset + +Note that the property `dcat:servesDataset` should be omitted from the `DataService` since `DataSets` are included as top-level entries. Clients are not required to process the +contents of `dcat:servesDataset`. + +## 4 Technical Considerations + +### 4.1 Queries and Filter Expressions + +A _**catalog service**_ may support catalog queries or filter expressions as an implementation-specific feature. However, it is expected that query capabilities will be implemented +by the consumer against the results of a `CatalogRequestMessage,` as the latter is an RDF vocabulary. Client-side querying can be scaled by periodically crawling provider catalog +services, caching the results, and executing queries against the locally-stored catalogs. + +### 4.2 Replication Protocol + +The catalog protocol is designed to be used by federated services without the need for a replication protocol. Each consumer is responsible for issuing requests +to 1..N catalog services, and managing the results. It follows that a specific replication protocol is not needed, or more precisely, each consumer replicates data from catalog +services by issuing `CatalogRequestMessages`. + +The discovery protocol adopted by a particular dataspace defines how a consumer discovers catalog services. + +### 4.3 Security + +It is expected (although not required) that catalog services implement access control. A catalog as well as individual catalog _datasets_ may be restricted to trusted parties. +The catalog service may require consumers to include a security token along with a `CatalogRequestMessage.` The specifics of how this is done can be found in the relevant +catalog binding specification. In addition, this specification does not define the contents of the security token. It is expected different security mechanisms may be used such +as [OAuth2 2.1](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-06) or [did:web](https://w3c-ccg.github.io/did-method-web/). + +### 4.4 Catalog Brokers + +A dataspace may include _**catalog brokers**_. A catalog broker is a consumer that has trusted access to 1..N upstream catalog services and advertises their respective catalogs as +a single catalog service. The broker is expected to honor upstream access control requirements. + +## 5 DCAT and ODRL Profiles + +The catalog is a DCAT catalog with the following restrictions: + +1. Each ODRL `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. +2. Each ODRL `Offer` must NOT include an explicit `target` attribute. diff --git a/Specifications/catalog/message/catalog.error.message.json b/Specifications/catalog/message/catalog.error.message.json new file mode 100644 index 0000000..0147e7f --- /dev/null +++ b/Specifications/catalog/message/catalog.error.message.json @@ -0,0 +1,11 @@ +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogErrorMessage", + "code": "123:A", + "reasons": [ + {}, + {} + ] +} diff --git a/Specifications/catalog/message/catalog.message.json b/Specifications/catalog/message/catalog.message.json new file mode 100644 index 0000000..8f2b7b8 --- /dev/null +++ b/Specifications/catalog/message/catalog.message.json @@ -0,0 +1,71 @@ +{ + "@context": { + "dcat": "http://www.w3.org/ns/dcat/", + "dct": "http://purl.org/dc/terms/", + "odrl": "https://www.w3.org/TR/odrl-model/", + "ids": "https://idsa.org/" + }, + "@id": "urn:uuid:3afeadd8-ed2d-569e-d634-8394a8836d57", + "@type": "dcat:Catalog", + "dct:title": "Data Provider A Catalog", + "dct:description": "A catalog of data items", + "dct:publisher": "Data Provider A", + "dcat:keyword": [ + "traffic", "government" + ], + "dcat:DataService": [ + { + "@id": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77", + "@type": "dcat:DataService", + "dct:terms": "ids:connector", + "dct:endpointUrl": "https://provder-a.com/connector" + } + ], + "dcat:dataset": [ + { + "@id": "urn:uuid:3dd1add8-4d2d-569e-d634-8394a8836a88", + "@type": "dcat:Dataset", + "dct:title": "Traffic Data", + "dct:description": "Traffic data sample extract", + "dcat:keyword": [ + "traffic" + ], + "dcat:hasPolicy": [ + { + "@context": { + "@vocab": "https://www.w3.org/TR/odrl-model/" + }, + "uid": "urn:uuid:2828282:3dd1add8-4d2d-569e-d634-8394a8836a88", + "permissions": [ + { + "action": "use", + "constraints": [ + { + "leftExpression": { + "@value": "spatial" + }, + "rightExpression": { + "@value": "EU" + }, + "operator": "EQ" + } + ], + "duties": [] + } + ], + "prohibitions": [], + "obligations": [] + } + ], + "dcat:distribution": [ + { + "@type": "dcat:Distribution", + "dct:format": { + "@id": "ids:s3+push" + }, + "dcat:accessService": "urn:uuid:4aa2dcc8-4d2d-569e-d634-8394a8834d77" + } + ] + } + ] +} diff --git a/Specifications/catalog/message/catalog.request.message.json b/Specifications/catalog/message/catalog.request.message.json new file mode 100644 index 0000000..b3ed3d8 --- /dev/null +++ b/Specifications/catalog/message/catalog.request.message.json @@ -0,0 +1,7 @@ +{ + "@context": { + "ids": "https://idsa.org/" + }, + "@type": "ids:CatalogRequestMessage", + "ids:filter": {} +} diff --git a/Specifications/diagrams/diagram.styles.puml b/Specifications/diagrams/diagram.styles.puml new file mode 100644 index 0000000..911f758 --- /dev/null +++ b/Specifications/diagrams/diagram.styles.puml @@ -0,0 +1,83 @@ + + +!$blue = "#066DFA" +!$gray = "#98A3AB" +!$lightGray = "#F4F5F9" +!$darkGray = "#747C94" +!$green = "#24DCC1" +!$blueFill = "#E4EBFA" +!$greenFill = "#CFFBDE" +!$borderRed = "#F40000" +!$lightRed = "#FDCCCC" + +skinparam sequence { +ArrowColor Black +LifeLineBorderColor 000000 +LifeLineBackgroundColor #A9DCDF +} + +skinparam roundCorner 10 + +skinparam ArrowColor $darkGray +skinparam ArrowHeadColor $darkGray +skinparam LifeLineBackgroundColor $darkGray + + +skinparam CloudBackgroundColor $lightGray +skinparam CloudBorderColor $gray +skinparam CloudFontColor Black + +skinparam ArtifactBackgroundColor $lightGray +skinparam ArtifactBorderColor $gray + +skinparam ComponentBackgroundColor $blueFill +skinparam ComponentBorderColor $blue +skinparam ComponentFontColor Black + +skinparam DatabaseBackgroundColor $greenFill +skinparam DatabaseBorderColor $green +skinparam DatabaseFontColor Black + +skinparam ParticipantBorderColor $blue +skinparam ParticipantBackgroundColor $blueFill +skinparam SequenceGroupBorderColor #DADADA +skinparam SequenceGroupHeaderFontColor #898A89 +skinparam BoxPadding 20 +skinparam ParticipantPadding 10 + +skinparam AgentBackgroundColor White +skinparam AgentBackgroundColor $blueFill +skinparam AgentBorderColor #066DFA +skinparam noteBorderColor FEF3BF +skinparam SequenceBoxBorderColor F2F2F2 +skinparam shadowing false +skinparam AgentBorderThickness 1 + +skinparam NoteBackgroundColor FEFFDD + +skinparam FrameBackgroundColor $lightGray +skinparam FrameBorderColor $lightGray +skinparam FrameFontColor $darkGray + +skinparam ActivityBackgroundColor $blueFill + +skinparam StateBackgroundColor $blueFill +skinparam StateBorderColor $blue +skinparam StateStartColor $blue +skinparam StateEndColor $blue +skinparam StateFontSize 12 + +skinparam ActivityBackgroundColor $blueFill +skinparam ActivityBorderColor $blue +skinparam ActivityEndColor $blue +skinparam ActivityStartColor $blue +skinparam ActivityDiamondBackgroundColor $lightGray +skinparam ActivityDiamondBorderColor $blue + +skinparam PartitionBackgroundColor $lightGray +skinparam PartitionBorderColor $darkGray +skinparam PartitionFontColor $darkGray + +skinparam ClassAttributeFontColor Black +skinparam ClassBorderColor $blue +skinparam ClassBackgroundColor $blueFill diff --git a/Specifications/model/im.dataspace.relationships.png b/Specifications/model/im.dataspace.relationships.png new file mode 100644 index 0000000000000000000000000000000000000000..607785e4b2a2736af64e893cf684516364bed2d9 GIT binary patch literal 26210 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μv`FY)SC&B_FpX^a zbxM_0fuFcuq>@F<&+}7r*0ts3d+n*>KHS){@^WToJU?@pD_eM=J#YnoFJ#-aeYk3< zvI@J(6L({J*~T#!v$0I2s7zilM0P^A=&e2FkPNx+cc1;x@X?llJJ#xr6yC)ylb7wo zo1mu_L=ZDCdPzJE0R-f;QYk5z^El4oxi?fT{lPYpRk^v2ZObAU$PK6@S3s}}x;p}% zBDGw%GekY)ke{5LM2+nA=$~s<++6K^cHdtXGVVsTNb~gQz4nHT4!b(UoF7a9!rcT5f(rLD|@d_Zjt$E0g{Y^9)?hqA^a zR>$VqGhB2M8_|FEa62eQ+kPeehqeG@Os6Mkue>ZRU}rjiv3lrHx5$SMN*+6@Bp8V( z(!;-K1>$0gA!;Ud4Iw2U z2nYfKg0z%`0s=z~H6W=H0)liYIl#~1H`uv4q24Dh#a(xIcv#Sd?EjX9>b<>W;(#t%iH@|pz zc8({`l9P{|On>3l4ILY#RgO6}jr5qL1VZ~)Z0)%Xb` z>wM4|eK(h~S)N7Tx5~4TW9K1=oy%BdT3e?>c;|b3=4N5nBZ8EB;o9F*wBZJ?WXlfM z;vLZ0-KiZF9|(ftS`gsJir-R-j?Si+e$-AM7{hx14rmRS3rbxdD3*jcoTcCM&6GfQ zPX<1x@9O6bqtH4sCV3Xaqe4;Fau$5woz6X*ax|rO zQ0Iq_;JTGM?h)%hHQp1Tzv7v5_IJ7vx5VkTy|$^ruYj z15KhIThb$<<&aCURHmZ$B=CEf`KbB7A_}#5`DXQE>eH@)Q~PU_iG#Pu$5*(u9_MM% zh2&>GV+t^7zR;!weF#07@!ou4#`i~kp}{_FCTsxUM9qpfa@BFovHkQJIn*&^17P5 z(zZK-LN2&=bQI|sZv14*!fVN-vd~G!hST=Y((avGR_aPN`bVIt>nu1P$Eo1x-&8Ghq-l}6xe6?Sjw@wOlR(?^^? z^L1X|_g_gZ3DRXVPX;N|#BO&yHu>d9!+XDiWIaMqP}wpsPZBnGhHvKv&*r(XIUV}a z>GAEStq{_vCk6d0QuZM?{2jD~%JNZ_86fuI;6R zItIa*pJyM)F7?*V8{NO}>e;~y(q=-z0{~jv_RQB`e*v6$R$(!4zNR2IFc|UxyuQ|8 zl0_a&aHzjHNMHMhT)V1nXP2a;kti%yhB|f^A7SX?3_5QtEpf%~oNWqSKEY+#n$-xM zAD$I$*{&j?&lez5<*9w{K4>|Z#~Gk+J?Z}Q!gPs;QRSk)td-Rl|Ih4%Sh|<7+|avg zFk@+tUDDu0vL2(|=aaLcR8k+)HRxbay@3#fUYYldQSJ1#3Vh5WXaHInQ2atmBjsBy zEwso0KKNTwwhEaWzAwBGNr)@~vH%F>FV$jaZY5b z@AAFR!iq`I@U_{qz8Y${nac4%OHVjQlH+hf@VUs^B~7Zb}5#M&^90SLPGfVAfuQo19NEud-Icbd61$bSoPOeCt zdVu9t>Rz&~^_136_IHh0mfQFlsu*b3E9~{C^WFgOC|#BFk#mU^N0cCbG6ywc9cuCB zD5klhX{6z7ca~&&KRa}duC64~!hEJm)-1b~;CznJReXP#6Bli?r7x5hUy@97%qsiH%8GGp^T-pqzs zCU6zm9!rgwnw1dq=*Z8?>aSBsCO@8~H>^RrH<9GkpwXFR($HT*2tVlBR15-c`7Em>@zxhn5r_S2OlXdFK9JG5 zS>*dYcTy{K#*9*o^Gd}lNdihPpV}l2YTbA+3=FZRCz3BzJ6aVDYnbUtBq_R^sqUz* zy9Z=}(qWS z8uXVY(c7lYTp%*&0*aX6UN%#V512Pt`8$YH($n>^08q}JIIEt_sJ-7Hx64|c?N}-I z%lYWl<%z(y1*2hdjWbXI1Y&AQo79}Sm?>xXTRMD9AGBMsoQnSzL+ISf@@Z za-T%90u!0HpN?JWyYCGI#4kla=v*GTl=&Tg25Msj5PDLwc)2lGJ5?dAr9Box?Ap9> z2>dl_Q#A5YmU)8>D?BGqm{z$#v+v0N=&FrE50(Gv=7e`gWqaz+&n)UpaCc4_LAA%i z*d2atQW!!t=x;xx?0b93>j-FowQ&*jU7hMK)ymmxgSNA$r}+c#R<2mm zcrI7=5NpB`GP8Ll9lg5wbEo;j+4@y)$2bvoth14?LtDtT1n5-xuk_syG~>VW1XJ-& z(}Bjs&Ey0S0}$hvMN4bZOpAGI=R<1id7|k#ABg z>=fIJkP0RW;mkv0-RbU%r=VE?Z*#igvDkb3AC3Xnk}j|CAOo9EIJ)rQ%Kcj@__=W+ zdLa1bs0O8-R!Qx=dyvVQ%Cv?z07;{GQmVUF7yfUh$d=EIFjcqypc>3MXAod2h^rU< zwWom9s7-xhC3$8Eaqf00QG${WnqB3N1PvpkJp)t5V&8vvmddE~ZB8urYAg5fWzOUv!DLwLrA9M)Cr zIx8>fXYHeiLrJVa75-borLTmGSF~!A7^PObo*0;*hS8E493)hMO2_$P|5;8S-V?~R z9oHadDi4g%x{4;vgoM*L5k;Y{D*hsK?8&Ipn8MmA#zqg=H9FS3Kll=*oudlp#Nx|K zhqmth{ZB-w&zEBAI<+aw*XF(SwU_%dvFwhk$qA=;zAzwun)`5`ypmaGt%~|%r2K~C z`DiXWm0D6Vp{~%y`4R77jZRNPXQ#m+%xv{TBElGgD+B0eCNn@OPdJF{A5VUM6D|=x z$`q-aGtRmdE#aHC$HM+fsAvnz09mrtf0Xn5>4Hwy4&SBxRDY}M5bhs+WP*RJ43Vh6 z|DtVe{M^uCRryQdY@}w`OC(n45?W2pd;ElQWUQbB?skf)CD*Qrd)Rk|0iv!SJxR4Q zB<0)}oHA+Rgp_$%ma66e^`sI|PnbB7UA@L{TF!U*gTy}_A=9L86pX+B+SRZ13Vfh$ zCQI)sy!Ka*%fzb&(wQy7o)d0SIvU~dzmZ$vrGp}wB2PuAo;toH$d z!sp0RSPE^s`HkyJKwgy4&7z~*(FKS_FM>U8S{z)-{mm!u0#6gwkDm1}1A)-jw4_PD zp~;4c=IvUd&az%0x;JOUuYte$BswQbB9P6^Xh&5a&$F}acR&xr0Sn7%f` zTrQ#^4&ULlQD9DpOxlhN6S@A{L4amkLH+`>4USnt?iYDjO2fq=lqt832&Ds$AoFb~ zvkGytasF$*%VeLewzF^L%1L(Hx-v=)PdC=CZk+6p)uvCIRm=_ap&$Cy%sDwXZJy3$ zHhNOb@(h;Nc?Dbv@QXT7pYO)Od=S&h8(uCmHX23XH|uH{qetlF2+!*Xt=Aae)ps3# zcV9ASczOb*_^H6GfBMVGAqS72_1QyqS8oP_W`1lE;*l8AwBF!k?rt6;l}Fb&zEJMDTSKxu z_(SDW!S-wLG^b3O`k6Ji8}0Mi+ge;)tY7&u&R0_^=Q$d5P4(2|*tqNh*K~b_EIvJx zXkygNCzW?iFMz?~AyKn71JCS?2C6W5d3hCOkfHQ1OmT;L(;}x}g!wkf z#~nx*47!q~8k?0TmIxzM&%+~la{ak%c|rFH!DSDW(rmFmuI@Z{AK!Oze^-@EIz}%N{tE zTf5YJ45>1Bq@S6U!t|{8O^7u}Jr9uKbSRM=xwg%7*bPm}b3@r2_k@t@hJgn1dX+gpdev)=jP;gSH7Ty+FTY^S?!3zKio4`cmg}e;&*Y1(Ek>m# zg_^3pt+KlGiSE9xq}5=MexWWlh{7}(sK*T7jfb|QR#D(Zd)~tHRz7Q54ttsi>rIH9 zs{Y=8D|mqtcAD>8ht80IotN+eRqh)x!p!=2OjjCghoz0YuWn?@&Wm~;v?VoLH9jw+ zlG6*K)!wpNYPl`0MTly97@xYBP$niquw?3>DJlVgk04Nh>z>t2=F#xG>1vwj-cG2nz4SM#NZ030- z4(1Afl8z8sXcoI1(r8njsUi>`^E>QqlK4EEW4!t04l&1rI$~R4KUFl01P;Cl7aMS5 z0Z*|268`jFYo`@I@yIt?$fj$*8M;j~tkf5=qnhe+n8*0Pj8KczUY{qEEcqFPVM_4l z&b9$iYP1|KIqvyVTMniNkkN%}*C2v8thnZTdUdjV=yXNptH7?G8Bq-z&`xh#ZXJLv z1&-JG?edg}!%Z>M(6*Zu8f9=9=)Mg-G zP6FuhC2F;U*RNnnhfbQ!UU|zv*uL?e_lpn7ukQWjm5q<#`ucYy+4^r`O(8N+`v>*^ zem*>`IPd>K_=wLw*u`PC=H|MHs!V@4jvrq@w=np^$O@lE(f3+5ap*4h=}1mn3snCh z!d|Se(^wfYnn*}*${@?o&Evo<6Ri{8>XQV9IF)r4%qq@nA#@8BDQcvwckJhjYB11d zbaVJv#3EF7!ndmD&rRC@4r34jH}e{QR*-;uqlIh;v2V0d;PX8$$glCnuOmDkB=fb@ z?UkXfMYDsuaX$FVJSKp+m6Vv0|AeA3*f$Pql`UdUyp9{Hvl6@5vAFTA^ zVnjP3QZBaMX&)K+PKS4d+nabQtn-TIAfxVh_pZ*v<3lJlOcsXftAQ zv!b5J=Yh!3FTA5-B@2+Bk7+CrOu9xdN-rfY4 Dataspace : manages + +Dataspace -down-> Registry: uses + +Participant -up-> Dataspace : member of +Participant -down-> ParticipantAgent : controls + +ParticipantAgent --> Registry : registers/uses + +IDP --> ParticipantAgent : issues +ParticipantAgent --> IDP : verifies + +CI --> ParticipantAgent : issues +ParticipantAgent --> CI : verifies + + + + +@enduml diff --git a/Specifications/model/im.participant.entities.drawio b/Specifications/model/im.participant.entities.drawio new file mode 100644 index 0000000..430f867 --- /dev/null +++ b/Specifications/model/im.participant.entities.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Specifications/model/im.participant.entities.png b/Specifications/model/im.participant.entities.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1601a3e6dc6c0005de3bc2408d5dc2c3e2a88b GIT binary patch literal 43549 zcmeFZc{J4T|35r41|wuFkxIsvCHvUdF&N9(#@JOD24i0aW0zExBBf|SWQnwhRLB-7 zDv1`95Xrt~Uw+r<{rTPB`+GjWbN_MQ=iI;FIiGWw?X_Ib>v=u*=i_>%SXmgc?>n>) z0)eob7#mnaATSj8zlvZ2zpSKN^@BHPsI?Im^5FfE2?%802-VPm>QD2e_>m!EX#KyR z#1!Sd14F4|Xag}tMMFQbJ2fOQ0DJ_$`v-bZJSk+4zsD5i6%}O^FLJ;?H&T|B2RD!~cXOu%Py<7~#n4#r-6ViY_5<(WXYguC1TPNY zUqRkQLD@xB5`5GP3i2b{lSz0ARZJ15j8>IJtAL*+@WwXgW@3u^;Ikjamki#F$nL&@ z^h-QK+#+Ntf#7sSd0F({xcc59f&SnmoPxZPth}tUf`X!~f`Sq_`Tv?A{cHtUH296^ z=IItf`7guK=T4@&dHtO?EhtP$o}lWYfTaW~`O(6otUYmm=NnEA38esL?Xm7(gVQgj zMh21p{^~&vr?>-36vfbnfaM+(H?I&ke{c%rAFk>vTVq3&(18YSGI)@NG$#*L^FSkWz(SmjyNXkoJ;gH2+>Y!N<{KG6Ql^3_;ha1| z#1yfP1Z#IITcRN;$TvV$h2U;$7aZwkpa z=BaOJ@9ss8bTW{)^t15O^Ybzycvv|GQ1LV$Ko-{68*kvKWEJA16zEQi@KRPISjdOC zlLOtUI4l8g>uc&x@$6@orpeOHf9R?ZpO4A za7PCpoSC1ua-@U0TDWDnx-B@BK53jIc(L>hbpvmD^wqZk|El18k8ooj6TE6D+0?>J z-q$n2*OrV92@eTU@BtzLJ}!B zwqfq}Dg;j@bqks)IOZM_WEEzBRgI7jv?UYe6+)G$hNOT{a}~!3Qx8>RpU_aXfH1@G z0CRT}bu|jr&&0>r*T|Ge^|!G0bfmhgdizr&aZxl=f}4esf3Ukh5N@m$#ng^K_3-nu zcl5G%Q1vr3_ft`_C0c+(Ms`v95wu_>HGR7<$6ytrKEXd!*_&YO>*TBI73QF4r({f3 zh_E*zn0gXCR1M`#g6xTocD^>@Rs?S+t01B|+0@P3isWZ$6cI+Hs+tAaD0!QJ$*XvW z;JiX95m6*-Uo&5Kw1Eu~ZEve;=0zqL7>7H0l0#|UQF@+=SW`p4z;G2eoULD^uY7>1 zsfur?nj=m<(p1mbGQ^$g9^yqp>yebrjID^lR4e-ss(+}rsj2~)qCmCrbMqwxSm=>F z{M|#aWRh2;k`K+%+}6gO&PZT+aAswWD5eUw!7OauI^%z`3<{E7B%>Pq3n zP=be(r+JvQkELOhqg|9TPQ_XeXJH-@9-Oq{}KB!63FPjIFaUfoB<)<$0`*q`X+Kr{(gly|ZZ^$qa#G6y%pI(fU% z>~Vf7zK#lZ@*Zw>K57B@Jk?rW4QuJ>r>g29PBPCO;N{EL!-khfHZQ&gh>=$OKq(>!qV}S+|!t?_o@bVGnPDBMD zv^aSn4vqm%j;gAGBvVCSV;>`n5OoVBl>qlJQ`OKw8+{uGie8|81n^^63mlQ)<)Nx# z>gE$n^r89LI7E;Y6g`x&c40<_J`vs~IBP?2nmff9rw(rIYvvZ|5P%OPsQD^~$ph|s z27Alf2P;uLeS!DH+W8XgY_S&B)}FR@G>Zr?J5}3AGn$Ekv2n1kho?0ySlPitFT~ow z%+Ae*8mzD25M&fW^bGd3Gob}IQ1lhhzV>8FpoywSm@QSGrlMd-@=~>P$9WNH%6N5} zHObJ#T3OyF$}|L+G_;40wOKedGRn}D(J;sf zSWujukssPCMA=Q=&!1{zL?fvi+Xn@@;lt#u-3_e#^^~ysX7VBQ6RikJYE*l=x%RaJ zCI?th`8^%h4yUu27k7!AMvib#F_5BRa7T7XH?rMqz{Vd#5>p+6WslR$+WOQeY$V=j<8o#aKJ|TkW7KsF(ZW%&4MgxZoXz=rjdbW z)^=2Xg$OSy+S*n>44jQNktc@Q(fQ-65aw>~7NlgT5E@}`NO1S^!mHZ`;mBc*s^l=L zXNYl#hbc9fj8+9PATHcL0BvfgMsRS$JD|~FM)VcX5B8$3sgkvwkDH>JDLPCUO+-6} zhP%l-5Q4$+pl~;Ps*e@XOy9=Mh>ErevoMf138Sbh(VQ%Z3Qo!%rV*+JVd_yP!Rm@$ zZt78{WO=(loUMFVIJlUMM!N@w7^_=3q3s;WL`5f0Pj5qqC{<;BYl8q4;|O{@ME?V> z68EoIYA>(?-~S0`(S~vh`^q2?6vV_p&xUqtI+u}lpnY|fW41Z9uCA`;neS%2d8H}$PJrXS{TL9UvI~6eP18UeBss* zv%YvX=rjajEFvF1?NCcwC{)^%XM;6!8fVK2gw6CHxP)m6fwy219Au9Ly>^2;ReS4k zA2SPbc=$n}4*9#cjN3e4=ez7|i{)7aCP9M7kNW8d42k*`WOQ%W2m*s&ceMpy?Jlxy zg|I;p$o8a<*91;OD#>57f)2q9QsnPk@#IQ?C|uF$KL^p|{_n72h4HA0w640d7=DCyJdCb@QG0wmZ>!oQCbfpk7+ z&QdCb$wHttD96Bn=!rZ22;^vjEen`}vf_NF0=z;Lv$H-f7%bhhYg=T@Sxzk7Kh|;e zxWU_qxk2+XVrhw}$>k5$oO^Pvev09lKbs6SIc7sTx>f zU2IAieVxgm{QX(5`|ywcC%%%{Bm_=n&a0DKw@7LFl>|JQzqh+Y91yKlkfeyZeJ0^5 z{PmCcUGrSch!WkMwKFYAEc()HywVPs&6SxuSC89UKMNYxnw8|3WIwD@#3g2$+?>li zH2UTWvs1pyvzU=qmX1q8`j>>8f1YcUTH9I=EkE)6@%--1z=rjV>z&zh+?yR=UT2Dw z1r4`2-P~7`rwQnoJWW6#IZy@3l7J4g=5(B`u&W{Tap<^(5N0ie{exCo<}vd_8#7OT zv|eZ_wamY3ReDAa`D~c@Y)n^w=XMN5=7q&w;iyzKp0plZLCa-|rY@9A(j4 zoNL_u_$>Hm(#Z!uDjdS>fUP)_FsZ;f8x$2?kz-6LwFWg=-In`1nUqmk9-VQ4H^cu@|Po8&F z=YW!UBde#7jM;KCqA$S#B=pI0R)|@vbxDo!OSXme-{D!=}Gx*7y(LroKGn z!~R-Z_=#;|JFH^1c0ebF)|g!Bde^b)*q`6s`qjeigSE0&`k`U?TIuBB2G zf|l6!&9x8Z-*>FSy*(NugQ2aQ@e-T;(P;U^=Mz^L?HE|bsZaOBC!?dI)B3W%Jal1Q zcv&ST9hB&lI4oA$5WAWBLNH%9zC@ASk*u@uYHUvXX05o zUQOvd&#t`tZ#d9%@I7Un83JYmrHjERLXYo5=7kNVd9iYd8V?yIv^BlGj!yA1rq!Hz zC>XcaY?-jNG4+syLrFj{%Q&kjTw1C~-R*qB@=2MYrR6kpbOSB^_0u15cw(u=0ldcP zCv#k=9o5Rk%Pg#drv_O}6Xq)rt75?;t%dgoo(2+|6B#MXzq_%t`M1n+G7D|dHnkCR zvT)<=jXx8wE*^$%G-=W1-hR1B(O%FGNoDjs3Trjn@IDNKt3zPNxE>Wk78;pbb#Itl zIhGQOWMJOU(~^|!NXt0q%anBXjPD(aD;jm+xE)U?FBpvPu#=!pjKsAFDcf=$SEkl4 zU+kp^=G&sNG+pL7nc;lK&kgv5N6$>MBr@-g2Mk5LyF7oHef6~5DbfwK;6fzV(yw>i zo$?Q~1vSH`kvDA|6XqYAy}za2_Lkj6>-f^zg1b8BO`9ub;V9zN z16Q{u21VBWyD*Pe7x+hZwax^MbsPx(n8XO5dpZQY`S1ciIyJx2I7sH?EzOAcftdKk z(G-X9iJnr9vG=(*6Mf?Qt0~yt811DYjpscj=7%*R7d;a0JgbjXp?oaDnyoj|CeC`D zjERX!&d#DO$!uoo#>W8%DSZFbiyNmJVkB460V`S`3hJL@2GI4gh1eC!meV_5f+$Ec?Vux`q0|w>z-1}H=UhnE$7%b^C!1v(|&i~*&UClAOHF3 zo;{Chz_;Dr;dlAcq7F9m$87Urg9KQ9wFpsuGzOnKHhe`h@02ul?RU`1bf4j7y?v|l zRI>^#a9?2Rm`G#H#;eAR<|mxix>|qiebo`j`=eHtD$utHuaB{9c5pws3CR?Y&xQ>1 z^PuH;bsw89GbpfI-%ST4Ux1a1PxbXGMH7|G9bY7egq z{T#auL^?TEsvh1tcR0A85js+xtWm0qM7>WDiy{%gLh-U+5Dw5wkl^w@9L^1EJ*Ri3 zb43{V=Z7@)cg_f8sbR1B_Gw74g>*M}8gTfP-mW~stT2O2%)q0YNR$fOp%XQHz+FeT zby5bg32HKh?XfHMy&6jyu zlGKAlnI`e)DqVpvLFlo`s9;D_Ibe9jA^x?ogRp~;BiyFW;qY~@&PS5NO7LVZH=Ou8 z(FAA{-P)|5Kk`TljCT*m6sLX;++i=A(%b1%^fOgshZY*-beo`ATp{v+cHE8-bA>60 zqRKN*yQB+&JM4v1m*Q*KZgN@ZCrEI5Qa_r30qNmXX8ddDe@Olhm;cWY4Eca>YPCVb ziDMf}W1V~>x^6GeJ-HPa9{PJ}yo=|U*}>tOsla>7La`gmy~TLGd(RkjF-;jjlP^Qz zJgE86H{7-1GdI>kw>QETRySAYfJd+dL8C(#RKfb8~ znksFn2Ri36c6aM`1k^)3A}yK~5e~P2scB(G)V>Uju*sxqmaN^>CVJrS`{hBg-WjHpA2C~N1O#U~sK#*@3_{1Utg3huAq zM5GlxUJVg4I-hIoI^1%0neNXuX!Dy+eyt$?z&v%Sr|IQtgcWw*F(Tel3%->s+PgVA zHHDWXmK3EPI3CrzQt96Ay)e?I6f$buDKkLph4R3lxxmIyVFqDH`J0fg0P0Nt)x}@$ z@ME3Xr4QS1t~>WnJhztSR`UMP(wuJ`SG_MGdK+){b8JP-1?wwRAq2Q-sMe z7{p)Hxj}88k3}ituLvLAVbZWj7jxiwVfRBPK8h`_tdxM|&&=e3!N`^7ur; zN#r9&U|OA%SS%6~#^JBh1@Pctq3Knr?b44f@!N*kaxNv;WSpY{kYf5~sJrZChgAba zcdnrHU?61TEe6R=YYhPkzl8-9NM;)7ViJ;%YDXEw)Q9ixZ1>(Jh;&>>dqHHiqn44I z+#gHKSx<4Xz-xs5%zm#UWxNMjT@u2Bvqg^OB_pgHu$Q2``1|Qk1X$t3U+;7A#im!e zI*(U*b@6WMoe)-`ps`&TApO3cOJhSdC+htdo z+{y@(0_i(JsN?q?5tjKn-Cyr+id$5}|40S$O4N@JfdG}X!qBr-kiReHn@Yg9XF`K( zotwrWGv?XYf5#As5Cg$S0sPRrgoI3Z_}rjOD|4VySj4R>XZOW(jTb{s{6Y@#r(cS} z&o-Z7rfe)v2zwrovXO76RPTdb1~ma=CblIM>I`J=@Q@=%M490!qWwH zWv`uBOZEpfg_%KtwTGvh-rZD9aS3|Wsra??4ir`HKv(cFEbKf6g@Wo>bpBYNXVAO# z4r~>@!b7{SWycw0k&n<|*))wf8jkA^4Zl2pG`6iy5yLYp5$L_W`Xjy#|1RisLN1{H zt9sP@_e%KM=)T5!Dd!r$^cfM2l6**7=9??xX?!`uuOGzaJwnz3?Z;-TIx#?>!m%N( zpYJR11ZkZHC5Gf4MYYFMYgU>M&LC0gtdbfYUa**tWDrh~8ky6-_N!kmn9>yNdqJJx z0_lr1^)SvCR51Yk`)POg!El^IW7j|k%Nj~g;eo;)A|DFp5goe0Nq98%`|(AZ<(*K3^9wc!<5)1T0zWYR8Fs8mCdX{#C6*tddZ~rAu7;kx2PV2~)}b zSB{xW7^NR!aylpZiDf?XJFx7;@3mpJMyGe2|Hgw1PkT}G?Sk=E-Gzq1t#%iK&PT~@ z$1}5cJ$B15zIz_R&IC$G@ChiafWBfSK##MW4MU~4fsvMyajH%xwI&N)BXb=yyQ{c= z`MWS+kTe(KSpgID3+F)iO#krx5}%}R)-Ogy>Oe`P1XLcJI^@*u&`V0nKhsa$#JIk> zEH*NnAyRX!$>>TPeC_pvsbX?HLHT4Y^)>^n1jw`kqvj#o%%&^imJ*<9rbfC)nwR-H z&LOB{m9G;k;nEO8a%AE|B&mRze>j%Dk|o?^LQmsD@PMWYV0l`V?sEGMCzW0jB)Lf2`x8mK}75awBj+# z%ZAHvU@EcBPXi8&`~*cJ!eyw2za?yNa4<_VBH&2h6R$PDF=cr2{T4;U9HT$83A}hefGYG8>ZqwPTER>KE70+_m9YGquOQ0Y`3q29=2(;nbZRtSeAKAX*J=pLw>t zZ4{w--+z+%EcX}dWmLq@JIVti05SzP5@-kuHX^^`UK36yve?3P)J~{;bl6jK1 z9|ZIWFgu)868jjU!lf~fUQmhMTq*uq>3;l6JoO-aW$uR@TrGWCn6DZb(r(lJf3ifI z0y97sC=1*Rn~~quw-9Q-VM4YCjdISiW5_u?lg|kZ>RoV7!<2jI>CKTgl4&VKV^ibg-hQ5*GF~GGdGI-o{8N#7@eyu!-^p-w?ngVPb8!_UmxBdN@jECx z5<$64-}(UgfC#X$4o%%Bkq{{Il6liEUqA4(DJ^GN#p_JIJ{1B39%f>f?Gyu|15_sU zVo8X?%UWSLjb#ZK9g^d@Mi(Gr&%oSJe3+qlcu*^E83guZH(NXoDCf^oNn z4O0*PKuGsr26`>?lBtx89Fn^{@GMvaB&C+;BEQ0+#Xtv7`kC2kFz)n#?0odhB7Ezi z{c#Qk2nNN2nD;~EUu%9ka}MUmstSdYhKHJz*Wt9-jlmbuy`ZGGezAZNOh9i4%xt7{ zCdk8nCJC5)&7F>w9T3HgT%Fv~=3V1;Cig%DRIfw2l6YjCcz!(a4LS1G2h>@l7rnnw zVKM#1px#=t31!9rGIzFDT^0oJK;~il4Z-w4-br2BMPR5XZcNh+c=}OoscU4~9jWwb zCo~Qh%?Kqa5x!Q5LU)b))~`+m|9thNC_iW)+~(Mj#$)G4u6m}|q_1~KWc}9sn{kO- z+%jh25^dsiE`lMxCO3h?+wX;+?LZTS4@a`wYlF)3h@@mzl``~{b2_Na-QR?a>tU2( zhgJNLor?9MXGH4Wr|H0xmq@8cw=*Dul`<|3S|EgEH3P)^nF7UGylDf1SEG8RGo9){ zcW!axmq-7#KJSk;MH_F2bC)CWxjk}Q47daj^gy!^!_ zK84H=^f=I0p$f6+JM^ELfR~_S!FI zmU9WjEG6+x{MV`9@laK=uF!vE@dgyUfgDP=V%66ZT z-xDDN8Kl*@CQ#mPbGC_$N6;5_8j1RRfwg{LViRz5lECrNNrAwQ(#HelwXi;NDaz*P zSuBYAjel3-@P`of@w=yPg;2T+&z|eQ3!|S5WpVAP4O4`{S~V&Y#9j6XgCppH1Wo;1 zHo4F!BVD8pm-xvW6e>j2EXyxChg^6t7&&P|$YM!q+Kg_O^lSCz(Fu2&@5Z3Wg$}*N z0T%4agtqa zsLET_d~#Xfpn4W0Pi{YZg?TNxb%_yXKzg*0a0$Uz@|{b51Ug*9$s>OeoKR9=^wPlN z?+H@FP$5oPvpO-?R)!XT5ee5rP%RfT{fu)$n2LM`8pc5vXR(5WwZ7>VYguaRTX+&R zcY)U6%49&w`d{5T2U;1oe+cTfeNeqmAAuA%;zOg}r$6`;?FEKJqqu&uL52VAkO~Z> z?IVu{7)HL=J*EEaKd`u%YO=t6tVVQ5&ZXhQ{loT>gv+BmvM1E=8{P*>LA`^EMLq88 z%zEM3M1edLr;V{B4V;#XJcF*`SCI9dFPwsp3|-@ z0$;0g3)|-lE7TX^&JO}UjV#B0&o5iaFjwM?-~6R~QLsBh<-tk4h`Db?-req27d6<+ zc7p=VR~jBvZ$JFgTSpA-kDsg&TB&etO=eCyumKf>iMwWxr(Ii{h&)E2SmFgN^JAU- z1`5(SyZ8{ul+2o!42gluKE+GcXUm_I`DZuq91lOC5xOYxN!mW4KYYSyrj8wP&8lsr z@2=ryp3Qx`ZB%FM*8FKj@igplRl&lFzEEFb9TLXAHe#Ij&k?nAT*oX-+jrEB!=w%r z7{*WEu4hd1c|6g`H4wMBCPaQaa!Xa@&_cooc3!3;&POko4DsWCbgooamldarcj?H4 z&sewrl_c+hVQBYsdk2pY$zUyutf$P>5;1sUvt>N-VVJjj!CqyD57mPh&ZS0WJ}onNZZE zlJ~Lxu@LujD&3uhw=kc< zlEeNxp$85eC#0KRy@wsQ5G);LsQviHJ)YP-*J1TV=cS}!c{LVt@#x1ZD>MD3lpe3b z27Pg>b8q{^JTK|=;IvT7kqP~ZEMJG$3yXL2w64hB(loro6jmy7ewFxfRFd*KhmwW1 zglfc%BF&fhP5MGc3l89a5sQp7y^B_lbmScu{4=q|T5NjrlvdSRB%#vB|ByyNEp3)D zA~4XQ?$)u3{00#LKZ+)w9I|@Y>|WMp`3a`AnWqzbb+#^#nN!{5rPNk5@JP7j4&#IL41g-x56 zS{~&jd3?#dM>07ZOZoWt%E9UO{WCJxoGebn3I%*kbmRivNy6Rm?Gl@34kp8at;v~5 zU0)uYC{#SFXq`Q%FKOS<()-jGFLkQ$$RB>iypYl~{fDO-Zu8DWS=F3~Ec3t8zr4E6 zOrlIYecn**`q{&&aYlk{!g&$MjS0V^*B#PxYpbfyCnW-#NlMj$MpCv9q@K)t%kDVv z4$GJpWAw>K^|oPX>Bs9m?UbcKG#A=9pCWP;xuJ#ezYee1iRu0rVVP$l=c2{8>Rmjk zYjr>BB4x)+ur}_`V_L)8Tpfbel^fNQ(zBm-zB{FHaO%IZxMOA_O!yW!!rC3|{lkKA zE&Bv$NC=F+cn2#DxJpuT>&K?@NGd)F*wTJ?YD@fNZP2T^zU*VM$2MdGCo$WON`W`l zkgbBLaem)YrEJQI8Pmk34lcx;hGZUex~GeB=v!(y-`J&nJ81YNv*}3lb{%!(x7)@8 zs$o>n-2RJ4zM5yJO-7}|6DBJJ3v$%@#SN??sP;%V2 zP{+ybm2y3E(Xi@+F5gkmQGHj`Bc7hhyx*nnsehpn$6U|2Ts~!@r4L&a&W{Cgk|I(C0z<5N84#wx<8E~N6{a-{rhcRY`>|93;St%VWsq6e|(d)k(~ z5~c0$`04oc)-(8@sJr#}*X!fgPOgQpBh&sGhIyQ^cdI_^v5_f2Ms0p5)U!;bR9`~Qg~>>ReC%|3YtHu`P`GQ3ToQntAbFY@Lx zv8@)Q{usN>Reb!T+)OPiW0$Jh9G|33h3Hk8%hxr+1&ztaKO-KWcu>zM87(E}^z`RJ z<$Lzm*UsH1HkRFfk5{XE8ptJl#;~;+9U&QhE3j4k;7)v6`1iA}Wv7nG3Ft)RlU}9% z=FDxS;tdZ@zAyuAdhSh^ ziYWetghxI)xn-$8<5bS{f*UL?JhPC z39OA?E+x|HXO_oHkNHa&P3BYwcTp-W-%+yvh6|2vVbB&;9@bRP`*qfx`?Y_6uZvKM z=r?exch&IMjY-*gLDj2>pVf{#L!z}6xx|&@VwNui#tmjE#jyH*#u zE%m9~$~gJfBzcLjalx_8e0Oa@zudOrl0(Ov%QD$t?LY*=!IMDX0%4OV4=m*QowuZ|VGE>CN zKzy1d=0Te7^9rZh1fQJ`$+)O4UfrECPf01~vU5oER@0=aU*XznQs(x=uZ#Ca(Mu5> zH-``V^c9FJ`}a9Y&joGbzswyt{NumypE0@4i%ahNVrc0uLU5y!fM3w^=_$JA@L4-z zBkAjrj!vm9w>M9eLN_*ieXO4*s!go^?2<8@-1>N1YV3_m&W$G%yuhXlV%GYaRwEzt zlo@DVy|;_X6L{d|($Px+tpAZV-e&Tm>gk~RVy@wy1rgPGQz46aHdPhV{_%IS_O`^l zILn}BrVvr3@=GD^IgI*ek+ISw>x*7wAg(m;Oqp9%xJ|7qlaLPW)osu9#M9S)T1wut zm*#0FN5($YU#e~49q`nw=f5g9SfNarcCDPYt}t-ye-T^tHK7CB9?>FyLv3`)FmU*`aGA#S%JD_dgU{;3v5PIdVRmH0|%=lR3#Y zd%bmKE!R*hx}%G;f!4@7N7xKo@#wD{vjnq}JN4f2u`83zk4G-we(vbX&sQ}+={?j7 z++vdD#sZ5*K$@4ux;|G|#k0Iv>2O+)uj@|GKz)5@^yn=b|DONL;SZ0*%y)misrrDB zn3S@!G@@|ycI5fUj~xtREiO0tU7na5?CkAr|vZNzT zgWqP$4N{KEL{Uv|%3e_m(RBYPQ5!qO#LkcY^l%cW)WqkDQ&~!pshHT&v78J+-BfO+ zoeXYY7CFmL03@ULc4Mv4;fQwJ@+Ipc)1MJAqqOZ0<-j`$SH~D?3en?p{Of4k$g?=B zF43Cyc2AeaC_@lO?hj#zHSTAh9sH#o{G%0*85S{^M^EhbiNDOhv=(6J_)h>fKFXYw z`IV*}J`q@TH*(+sb?R4`(~D_U1(9a2m0*fENT0CLQ+FkAg8T{;&EkUKAWZ_L;kOD} zD6KP{oeK3=wp%M3CByocZ5~*gr)Hxvy{;0ZjA6j6Cw!>|*?M;z~ZCt;kL}^&vA>zchJ1MvphgqzO>&i4nzJ z(k(EXT+VIfbv*=6JeIH(8Xk^nc%T08Q?!@Cj$VTCg~y!G%fFABY2Jb?cJ)DVF}VUR z_g3F0Z=C@l6j=l&+O3@vt_B^=uVT2crlHwjHZwAkP8mmis$UUPa8fg2SBX|=>*PE^WlbM;FW)b1?-*VZq8)7{s)AcZ5S z2xGXupP`)R#_XtTHYGo-`sw>;kUuk?9-aFcB#72B_v{y^Pd9@|Tqpi^u5k1d|K{Hk!} zNhmB+pJix$0T;ZsipoL@vK-v`|mfLS#7RBlT=%oN1| zQxTb8nQ=a(8gL|R;^SFiqjW#?-2LGI(2DQ|fW*&1xXXM<)a9m@ig1{;&d$b^T-5f4 zvf;%;S3!S+fwNFR+$RxpmwPCh26}ro&qK)H>JCllCwRlp`=D-LO^9C@ehlR-yn1Z% zH0C$=P+!J=0gVsmIRqsD%6fEW=At8#-3|12Andjn%<;4*RJb#%^9_1k(ST z6)PNT(8Rp}<>V4Bl3)X!ym{Tt;Sfj_s-J#?i-&zqC$z({!a69d)~nP+6mk*{ySd#Y zoxCCsI!IpUZ=i;*HGy8i8-VKcvtylT>!}4ekdh?Tj$sh<2a6LAu3M;i~<3awO@C39&Zf; zC<9EB1FZR7oGY)vVc%@X^ROviG4mTr37PqE8z}%2ZBS-i{L!PHj(E@r^YIy|xnHt@ zvrU93q>4^^3pWXSv?g=XVHFuu;>MQ}0HT|5VOT+d2M&D>Pu!b~%8Co?B>-@+n*Lfj z0cK-UY9SzHa~FA0Q1{f8U zDA(kbC?7>{s0JSO|Iv_Znk{Q?TW-TC7YLyBr8&00eu#rMgj0>5sV)re-o3m_^VK^N{UW=IhLKMn-ucy>1npKa5B?C~ZEGwcgEK;2lTEG{e*fY$y#y-Xo} zrUjgHp8xPzNL=MN`sRZ9;g`LS-1KW>))fK9!E(#*-3{gC@%;Ey#pspk-~q}W1{PI~ zfQthjV~_9iW`=8tBQN)HyiKINSC)rb-@&mjcslY5Df@md3K{F@1}*g@$n)4u6*1GS zWTyQ`B$C>}7>4d5M(I4A12H@s0FbK$_INCW^73pYKD!M^q+JC7l@A5_=M5rjx^CJz zKk+dn0J#2K!=}a7EiYRdi#BLB+T6xKD@%*~`X1Yq+ej`bADWd#AS06IH?72wIdoQj zLf%$D&gWo^J#|mu7EU3%=9!+te?D&NRFuZ7iMjzeR2k^EWdVrxi1yJKc78>JY5vIN z-<;$(mkpEmHB5fGX9R%k>lqOGwt?@B@h-_MdBJ`4kyR31GxKdNA`!FSvgBNJ8ZCH^ z+nH5^D+vml%~i($G-`=kuK5oythMR{rp!uo$R!CAlO#-2VuT5yZj)DDl8*)&g>g8g zL55=wYjrkbhv+TQva?bd*v};A6en3L+f{h;%K!vbbqh0y=4$1Qu zIvRI(@Ftfojpm&j_(>l zz*=J~2rVSIL()8xxZS*(k8kBrlK>J`2nqpd&F6I^nZp<2;5(v6zP5Ej>*Eu2wSVrr zg)xRBmOMV!H=fDHSlm(*y5>bUvtS1VvQw^JeYxp01CI!fP2upz+jJtgehTT5M} zP$|Jb=9$80bKd1>gh~CG?z;juD2S=t1U-2@zo@a|gK@hb0Sc?lj3rPjSKbYls~dmn z>o}P&AT5JsDdbWeD;hP67+x*mytFQSv`6FYIlU%5_!=?5${zF?TT5qe%MOkvANPhi z<;T|-EQ8%Gq#w*(2G1S<7*7w_;LzIDFqq#QJjxNJg&y0D+E^|_sz^I+xkwv0&>pJ= zpOn^mpQnwd^pqUfG|+nfcLz)f@a)6x1AnwX1 zbgp4N4+FMy#1^oM!HZnr?BxL^E>5N3SSmoM3}Cuj08w zOoulDXoG$Nsu9!FvPbC1p1i$fOZ3k`&>|zd0m$$B`-Eo~K9v#AH*Bu}M102YLL?$b zA9EIJbIg%0(68U3zOEz#Y=cpb6$0*ONI&9ndTj6UN!AObKiN8PYO$VUgD2bip` zLkV<={yPHLp96I5_$0X_D`jibcG;mLoE88gibqSxTVn6V1-Ad9fWB^4 zSqb|X?!Ns{-UL#0Pp0M?S(wzfgjz@e0Ltdj^|^VE;Qwg)f9%$OjQ#(St}F4rc61k_ zc6+(JmG_qa#+yD%9!;W}SA;cbj;r0`@~@>iJI8O(=03;1f!7jvP#U)S<3$2P2R zIVVt%h#O6*FLin!E>cl2C~?ou!}m-}3P1cGU$ana4XX)Ca5+znGf&tx_aV@wp85}!tz)zo!GMrlBgtgXI5}MHnWGun%w4f(uc?hF0yrAzNOP|mm&V3CvbWb4ad5PN#12#@$S7*Q7S)Cgs7K)}wU|SI%5jxQu7mjMv z3|P3ui|%$8n))DBnX6@gbg1$_*)jU5q+)xcWD)W6=ll&(0?78J5 zSp2W;qY@Lc+jUk~K3`yJ_0Cnywii8Fe4NBh2WWuBDX zLrmr!gZ+=cWu7s*tKXAez1b_9(yjUfY&BX}un(^`+ZMtd@QomXI?#0bPRm_kfMLLW7Rg9dDGlimGC2d+xypLew($rmc-F^ z4#BdZ65){_x=I!L((ty%Rbl==15e zvOq1>inRPr6>N2kW3yS=^P4eyP7iSU7{=m<_JM>~8CNHX{cIHP`L*Wd(08x0Buub} z6etD>ilMRNgpWKXcg>0wN5<=(&Xf$!Y+9W^CGa{rNp(i8Cb#A6?(RckV9z5NG0UsB zqSz*nN~}|UmUe%1$?pE8e-rjLe14j>>w;3?k6U>xx^**&QPR^)uESnb@W63LGt%dSUWZ_9yy%Ren7$i@bvOu^Qd?4?k@UVeg7Mp%IaC1klZJ-Uvhy5h{+hK{I}S)#{w&ET zu28Q^EiOLtCIp*cT<_xA@3?2kaAx#?hztFC7Ut2L(7n98z+E}rawfRXl-!!PfAv9(hwLoO7H5D9ERrUH9E>^^Ek$&``hX7%y%g>p4AgW zxbE@o@zqRwGr0xLK?Y(a&hRZD)XTMB{V$>Te+YdK8~r{IVWSbqzft^BZkf2mG?Ml9 zD&D@W#OBMN^(8N<+)}o%nIDF1Z`tpu7G{+Zt%`44HORCS)J+lN%zv(9Q{J-6K0gb8 zJ@Pz_;{DLAdTP`n^|0In7w1@wn;FyMTT-?KJWr;&uYor9ZP>)Vk42F>P)|%l z%BuOLu`O2QpsMu)Q^)cz&+@#}ykctn`*Hg190gp@P4@}4Mw_mc+Y~7(2Yf#WGZ@ik z=y@+hxAtf!sd>;y%FzqwMoq0&a4W5ec04QiInn%rxq9m%nRH1venab%^dIdfv;8;X z{H!z9Vo?q5F_d?UPpUVUWus_wLRa6p$TlUstLfkVmM3hGjQQ!6zGR#*PvJlM8}0c9 z6MJs8KVfIpCy)&x9tkIUT$) z;$zOZappj_G4dhV&9!0oMzO;>I#c~mIZvo(qholoH(T*qTc2(1^Vb;tpD&FU{yx>6 zlI<_WQ*P{Dl3p_Xyej$|2bvX|kYgg~e-ET`7asr112ZNYoVbR5cbFu1>xJ=EUprp3 zw3f(YQs<)UkH6uL{TjD?MSg_eG4Z$eNMbD3tGybtuAQEUfOL+=n1W;In zg6hRV45(f}GFj{y2aqT!gTC5Wuv3}d7-oYRxMbN5o##i!s&n~)$C0E2x%JBc>^|7# zjse9DCaaV+fPDRb3}(2WF5l)0{GWw;1>yF>^kO3@Cn5*Cmqt3!jlc0*R33D~KCP*yZm#U4e~cAdae6k2zbQ27ZkZetb{r~&xkB`{r8~A_|X&m=PvvJ-?m64 zV-C~l+bmgY3LO5AT&?0X2cZ#F=&IS^wOnPQ$5aW=z$D4zYy?8Bo ztLoqI=HHU`4{sD8f8(`vum2wC!2vRPy}4Qkgn1il1vNT!&$xkLbaDP`5D^Rs;Bgo; z*Fe)+MwsUkC>lX+gmt8wUnkv5^k;+YEtSEJqpFG&jR{noI;7@bvVoFRGuH)!IQjbk zL7uD=clUk|b3PkEU^%ckpCM;=`=l~ z%XN3QNDegfHAl%GPS6Tz=Xmmm6G-VNBLo^ncUu2_>U5e;(8U0h&w%q7W$xJkyC;7C zJm0@TkH#lOlK7E8KKYZNm^};wXngNQv_MdM@Nm#f-_saC z6SF;i6+lt$-!76H6PzC4yFva!-7!1Q_X2!C)0w@*AXYt*ADOb{>LdvCC3efoS&*(T zu}Sg_Fn}vKBMXnQ-}154tR!y#{M~0`fJ0E zpKOS^PLBZ^8X9<)KOU8R67c;7{mD(>;T{F_CpUo%j=rr9e%cDPSLVC(x6F6R(C!SkCerJQ;XYDdv{A64e10M9IPryZFjx9 z3$v6c)|*tOyu<|fUaI+M{kqNHBAH_M%6L~k7&K?78X=>I zvmAnXgY}Wz6?|H1>4#O*Nv|$YE)i2u>U<9!%AthO*>`v7+huGf6(^UQBl8N+bA=1C_@MW3Ihfq z4Fb{)(qVvrAl)Gd2na)W2}-w=fs}-F2`C^XA}A@PNK41r!}t4p-uFE3iS?ef&R?!2 zGoQIX_r2@h``Xv0(9?vzF!|fB?&Oo4;~0IFch##7%d=Erc?KAn`Y!Q!ezW^ETujYp zDj)kX4@D&6k9}B=$mxyUk|4$08(3M~rkWA42C)pn+|hIbA7(dR(k_p@VSpCsE;BNG zQkr(Mu+B=Y{(qdu2NkTH;1}q+JWk7Ph<0*vs{X{oz2jM&4XjUzd}fLX;#Haz3w;@R z&{-E8<`8=JA{*4FwwEr8<0Ejf){7p)u1xi>99$h+8OS4)@LX#)Bi|*md3EQFIQLsy znfof!c|Do;p*ubg4)pQ83v<%VeE)=Lr_nR~y!<$p+Y8=1*gC5 z;OtZ##wwX59e;Os9N5_o7s&uY*54N*A2FD`e{$Bz|H@E!6}C$s*lxBwOMjku`smki z&eJQZsf+L4rA<^hFmM^YPxQ=t%S!7cnIYoB(h)|{mN3JHi;Q78je|}8^A6+lPtb?0 zoF25Fz2qZlqUo>O${*fG8TwOA?fCX&NoCz{@KO+Gm|2;jtzSPTH$-Qj1`{bR|0ZVn zzimTvRQM$EjMrwdpNHq{(!cCpx9UAzpdt2I_rzG?-nF|W{m|ZO4PENcpHm|({9?nv z(g0}QzLi^4Xm(Dq6P?F;%wcK66TbX^(!l13aVV^^_`1*-i|cJ<0bkl~L;etwdu$B< z>$s)UkM~#bE}l$B8ZQeyXvH(wInx)2VZ`c#*KW*TwZ?ZYbqgN{JLr&%t_A@00 zL`@5tjvXeh{jT*p*mfAJ^LU#~H%*(kzSAOTKicmV(|QTp>kSX#*Zw!ftluoe)3Ro% zTu&mt70|*HFq^<%j~7Uack485FHrSgyXbp-cw?QCOv5zD5pBpC=Slnl%IIzkN_J=y zihrI62_tOMI>p`_I^MUSe9eiUj3T_hk7a(iU98g)G%|3RC|MJ$fmbcC?h}&r2@adW zRaH)tnL00&AC$BHy6*R9>^f9@DJBJ@U=gPYEP;~$EMjc_O#IG3Wifb6ok_wg5t}mrrMts`=k@mTY3|+sKS$h+ zRdX9G+k@wtNrJd^1vm2OV5bmD`r6RMhl7uo_>W9w|7RiJGKC!I!7OOh+mj{L;#E2R zP@(0y{{p)EQ-2fPBlOq0dTI^-vmoNC)gN_AKyk!;%y{1SH#@g0@miYp-hs*f-``5m zBFX!euJSB0=QO6es`2mEP}y%*zuSoH1eP=h+27XuyvR?_xu|%q&N?xC0Ct1ZIs={R zKOfH4syc%F$GVO8RI@+OZX9YkUhKtJn1aeB&{3e*Wow8iSa7I`*kn%aA6hAzUI7e9 z+_#`5Nd2ji`@5Wl+H^3tabwh73`6KJuj--7Apj4w055Q+f>;i1VgX^{SYDd|)a-@w zf#S?s*fcN|IERRy7IJS$2EvQzf~k^t6YwxcehNzSmCn<$Wm1G-a-|_$@=nyp2-=NA zVQI>Kgq^XK#f+krGiyA5c2Pi`hzjrqpFnrbkp2{x6t$oql@03ES1V(#%AnmKU1_}l zv^*IXZBwN&O}nq9{gJn7oF7o#Q%cB0jaEA`T@?4!@{vJvqnt${y!k@`m8gncf=&Gj zOB?JW0rn{q_r2Eh@2}gb{1zlw8)~F|IAM+ixJ(`}DQE$VMtvKvHxOfpeaAi7Qvgbi znh87y*rW`B9PlAqb=179iV1uJ=*=#H(b86al`Bp(8UZ2Xw)6TyAoQmD)1m$lX$uHq zK_`Yj(-)dNIf3LMXW;T!zswXc#?2H7GIjsm*cg03d|Re@46ZztouT+dO%jjids4=t zN3*X!H?c>(m@+i1bLWzHyb(k%WN*EhSu}ebfKSTizC3y>U*+5*(dbMLY*6gog(U!l zhVKBJff&?vY?%oMlomovi49Kad)1EW0+v1fj_m~3p{Xzs-J*akFO@Q!ZV&{#eP^#f zqV(LHKeJvo2JPHhC5E*{npu+6PzyxA+3-b5jy+!NXa1PPlf||JR0+DkoDtTPem3a_ z9!klzChxW#wB`>m5+2`+hQ@KqCYf*Dw3gDG=Z$<*M*VRKgVxpnv;nS{K>WVtDnJJ`Ccm* zPQ_XPp@&WY9&uRgHxSK)-34(f%Fzxa5T)&Yid0EtllfX=bm^Gj4rhxs5k}@VN-0pf zHOc`iZ{!zARWg*xsB^aHaVkUPL2G=qGc69=I9^Xmbv0`D`8bxW<(jnb z(cio4_=>!9JVeq@w7G1~tE)V{ zOf2Dhs8>Ii=+~zz(9(-3#hLa9fOb0BbmlC8{0QaPhWS&#$}X|BhG2;*tYaBTQTJ7{ zL?69$za&%?PKP2TD85y!bF0Eqef?@Za9j+*d00bNv)lHv{Hl~u0)A1NctpuuFYJ7-7%Hp;Q6!`X|ucW_wSiC zCmJ*`Nih4i75sjA@7>GY`P&!TzR;0f{6e90aZT&X_UU`B0R{&fh^@c&*a)UWMJgu6 zK3KQZnb@Hi9*k5l3N<(;LdPf*Vp&A3W5wa{-HV8^EyU<-5v*JiH}mi<59R}iy7H2| z`e_*(@$Y9zGPERU+t8z)S|^x zW5p^V-am5Pg6GK<*F=jk<_-Du4G2btUffKu1~^#X3Y*u0C)VD`9sc@q?bo-8LQfiz zy;icYjyw?C`!hQ?*C@%juM@3NszHoh1XM`2Zs!}^E@L<9LGY;pp8-Aw**97_NFYi1 zB>jrl!UB1CrVF~~vw4-H?ff;Q9rGIZ(0@lN}yb#TYj<0!)jZ-#qNT zZjqA!68M4gnEVd4>)n}XiAJ%^m)k{UIMd{4NlD3nEfeR3%g0yS-IfOT8lL}XEor?T zNNoS({WI?S^=ysgME~`z_3#?WC;M=|N@1y9L~9;3WQ^i^7aHcAIy>@d{INX?muj)D z6_1#*=*#1+5sK3zipN)mxUge$^3;mZ{{YXblg#^|2o#>?FUqm|YV)M+A+S`f_kIB4 z3P4qf?5=63r%D0rd`!k~dzo&XOyoa?2um9R z_`h~Bv|y>L?KxjsHK1)`2j8aghh=|G8hiYKACczZvjri>JC!h1UK&zLRzrUzei6{m z(rl8gBrBM}=3wbc;iizF&z)_ABH{zO6V#>6S8H2Kx@9NOSuZ9xOvdaF7>WodsrDUA z5Goznv3GzOt8&0nTHVU7Ud*L}9EEi(3n|L?OdIUeJFH>r!RWCmV-bS@u+srC;`({c zung%BjFUhq5nBYRbjO)c5`+1t_J^;J-4C(hVQGx9cpFdVjO!%mP`?S{cDfqQ-ZZpg zR5-ya&F(|&M-R*c(G0>GbrcN4a6?fDsC55xZ{~&FXlagucmTtlOQj|)$p1u!wk0i0 zs9kcbYy-mq*45jho9zxEjLf5E*Rd{&=HNipVClx()s`uAn8&tPFM)`jhr3uZpgTiO z9q*7X5;Qd*$egAV0}Gp}xjXA-;LS7v7N?zzeD6qj8o;z8gJLJej@k&Gn^Z1@J-B{j z005cN5OMJLTqV1a&R+pz5Qqi2VFd};7e1P6_SYK`{i`m@Tn1H@k)PId zWloPDcwyjmy_9h#-G4E&QIksJOg@ha`uDkByKBtRj1u<_U9k3)DzDCMNoT+djJVns zQhhug=V51zw(ch@Si*Y9sY#GPV>HVcrDfyM#3tKh-47mNf8)~DR10p|39bOv|5)gl@o@L zclHJuYg5R@e}pZdIsTFomPgk!372197~vcGAK8BI(1JsB{w7vb)M?O%>NP&pU$J_v z7RKGwTmC;qZyGG6PLqE8CRIGA(ktw(4FF_982%= zMsn;gZ+! zDr-ard%D3L4elwMMv)Z%XZw)Vl%NM%wkvR{?!kBlIR9Id&!kqM1L)>|YVy@{@sQ1A z*KQv2(ME>gi^BUz5OGQa18TeQjOZS}IWYk)CPBBozVWeWHu|I|GXB}UZ9(JLKPwWR z_=B1HA?C5t4_*SWellT*W{@>19c1QNwyvhQr;jWjYi@R=G*sVz3#Zl@gx>{7Uz^d= z2d75bQraGM`L@xPo3uX=pUEM&$A^3nZ~B?R9c65SYqo(v7s?OlcAP2VD~ZJH2u(uj zpT^4Fq80Updow)~25;}e0hqNSflD_Dpu{gvg@K@*Kt|__0(_PTbz1=Pk9T6gb#E_9 zV}dXj2{5Q;S?ySG=$=s|_~BjfgRlSnLBMNUgTYEhtm84`b)6J$f&KQ{nxc3@b;6+8 zzxV9%_Et(!60eJF1U;8+*e}tXwZhn}Mc}@r7SphATJaRk4!U#fV!!&MR%vyzp-}!N zrFKvlg?;q#QbHjX=e-fJWbxa#CVfZH_`-lbgBucJ;y69bTD1{5pkuLSN6?4ZvUC38 zaKQtEUwlPk*X;+iNCLS09P`OihIGplyOE<(r3X0I-~8b07pi6&S6rw1Kt7l?dvc-h zbC#rT$ziSAUcJ{6z38K5>c4aoX)kHsDkkw5ZdWAntE;@!%VT-BxJDWri@JZ9?l)QC zz$5B96J=aW(ECfb8u8=s;~G!nyw^$J6OQ;-=5dXgjou$uJz|+83rzJR3E9%FTivl8 z&dpit{9!?z);#9Y@ih2u#)edXl(x zjKW4d%VqGum5v==FZCLb3Ne&7M&ni{A7SRzQq&LJS7_%%7SgKi6epkWjTmuwZXK|j zJy{z0YasZY)y-qgJC%p=5i-~f8+OO6K`KuW5@kpTC)y^Qi8t&Y}Ezu}=I)sHRv-#igI}pZAwbmlHez0lPr~8S?fOw*8 zrkzr1lc&nlGT*bx$)<1PTOzla=zEtx1aIy;<%}-<2Mh2%)i^GJd(%-0T^aqp2lHHWH=o_zy|cRT zzWp!M{M9O0KNmoKn~tBMbtaGws5n$M8(!q+7VhPC2>l8IvQ6c#lv>+ToD@DYf-?}C zohphOK~SMvq&bI*r0bKSC$rnWPvWSy9Sv$s6 zrbD!(I-vZ;4{lgUQtR^+wPO>$C zJip#?R>|bJaWq^ngF*3R)+Kw=eDIE`-n~JJ%IqzI!nkqm6R~aW&G$`2@$I-PfF}v} ztFx4^LHmu(r^L_yNsIJqahaRUl5`3AmH0-kPIEO^#AWu7^^YOad~W1iBC{$%)1<(s z+p5Re4ocM#S-o2+H|>(%=D}T9dwsB@*x;n3(qU*D$3C^nf!_KCjfYIf=#bt#cU$g&eE0E;ykb`#Nb-nL{_TqTu-_*wBS z#kJY*D?b{^A1!|IuUGOMiZL5!H{3lr@p8+g`&mEzt)-be35U3kwl6rmt-?Tjp2 z(&>*Z$qEaARw%L#XE7~cy|b)WY1_@wbTD&tKn`u(x0y|bES0YJkRj+b0>KQx?L&BHv`yl zs!dVp)epHlBAH_E4LjZZ^7~fa`{>^UqXJWuXsB49oqAG_x6Wof?IZZOhdNc%5%^F> zLI%y1<)F%+&&2RG@7@{PfiB;?_QEPh;I|3+!q9E?g8Ur2w!Ap+o=o3~{YRmyJV^V6G*5wgZrRtuMC)%|ibMtnVMq zKG&m}(T`PK;3j_XX=Z19up<~l^x6=}S#&yBo-KCgv0}kL@ohfF@3;MH+HH>t{ubLm z;}^8rxB$eW=eTywB-OJ-E;T>ltNhCQQs-4U>ZACl1mQ=Lz}fKKJIv9ji5<@%$@u+X z?{DGagJ#D{?{P*x(wYa8S%NM>9@#s>lZE$qG&dDqJsBpY!*WNiZy4_bQ9q>WIN|mb zhmB@!7RiXnrRQEfr}CDX-|fqvv^-Wch_%mwnvPa2a*o}pr5=ngVFcwB5~Et5;PSbT zG>e}f{}DHsSr&Y_K?JLcXdZoK#1k<+cZC26gObGCW==k4NYVbKA5$fYlk+AI4`nyz zK*6i!%WM;yXb+0?rq?VdTxEP0bVwL}KNO$eHmVo`cVSNY|F0|2fiX z`qMzFJI`> z07k2G$RI*~nz-X{hu-Ux=uh}GvvD7u?wGYl(VTh0E{N$z|^GL zzjAZ;?8Zf@+eC4aZ3kNZZum!*2A+9kJIYKiCwG-NQVMUy?NpB}T*V8!^YGy>xS=eN zASjXUhs1(T-)(P|IbSLBX(<%hrK0)#kn`9z{`|0~O|HSKm39V}#~jZIg&3!h2agM0 z(-q5urj&9TzY~v6;~RN{Lu^YNg5Q;q=5c6w!SlyKdpwma89?GaiGzZPjdvU;^PbkK z4ul-}MQHkemzpr&KN%AvUu281I754bgeo(c}i{_y0du|yH4ZLl9?U8vYN4HT8Bq78}kKE zhNoE{`B?wtqpun(XNDPm$=16{T-KDyaNETt}4& zpk2N_cH8DbD45yve<*QkQh}GUbN<*u(3SD{>w+?+UDmyRTf-J+qcF|H29t3 zlY2LF=ieFhcRqfo{Z8~t5HZh2{gu|gT63@J&kcoI>&3C1u zBZx8XA?rGMvg_wE=Hf8qIk`TdP+hQ|c<@sEo&Ds~mB|LB9I@@e`pLj{B}2V~oo`JY zNd$eiAE?oXH>{348#hP#Bi?*c$Vj}2A-f= zgi|G`8@d}hccol3FzX&yH>~*-`F=UTG?uJuzyFabw@b)Jzjl#`s4!|$4xSA|LxVye zBjykE)sFIql5x^a(j@oG?oc03MARrei#WQ>uWyKFYnyS;y}-Qt=|D}&aVnm&VdG`Z z_;i(X9O`YjA>plGr{-GPO&^Vv>u>EP1-H}mry9NLm|b%DX3@8w<0)SMc};RlH8RAM zA)d7S@ux5W_N&u^PLEJe*5_yitv+5@5B4XuwNlSKnt0UmjWToSFl=wX!HF&vj|i-T zn?+BezZdx*bu3~$Jdbr?q|Km6|INJ1{mGFD?*Fcq8*`roJyr~fP;@~KN47(+@7qnN zzI#ZY+O*_+`?yxXFVg8-eb+|y`xV@}NCnU1D16J4KK6Nc^|4557+L#pD{F-(lV*DC zjIU{+(=s1ZNA#)$x?aRyzv-_8;vviO<>;()Xp*y!T^zo@FJrs>^B!S|4BvI#vC+JQ z(5}T~J5Iw{m`@S^VaZ}w{nNp6P4AEbbK0OGUiz$Ztt;I)s&DdExD+J)qb_za$rOr}m7EbuG(u04X1np!@P zki6>nGRXy-B(kt&Wb^8UDK8S=YT2Gns@Z)pKZd%8OC@pzQ)-{&2gd2+iJStZ2es~j73}l$w3Q>=n*t6u>h;B|*v5Amt~cocL95lzy3}62ZhS z1@DrMX|B)I>=PrUdgICCyQ!C7*_$H@BNj>%m0M^fda5d#ZZ;xb>W z5;J&8)Vp2sLUGD6|3Wt28fu|XNIv0zc538A1#xqY$=1C;Xhwc-aMctywfB;}TykkQ zZLY+jZo*sj)k`yv#L0TD&fso7<1^rSr7nZOC=GZ?@VajsB^qg=r41j2)Qhc*Ze9@= zPp_}9XA=?8BSAG4zEFsynduJn*_$|SJd^qtvY@Z6Jl1Cvpd3Jf7e*$_iNl|0l82q7 zcgM8EfyuRTty;-9R#sU#%u}aJXS~*xmFs?eGPVQq!Gj04U;>_M=#(od_Ayy3oYJ0> zXV04)y{#~qtecIICunzhJ&>RXxmbGt+L~IM#?q<9i3TwRdHJxknkXD%GO`ztsn(T- z3T{}&JpBA$G_$l|DMQm6VF@31%{B^Ne8eZb?>YsnStL$=v8;_Ddsg9bc0P>WjTfYR z4bAz@@xsEj-n%VXf6kQX!i+xn2*_RXb*N2LLc;jhWK+{$R_!U}ItyunJ6R>o&eORn zc%F8emiN2IiUr+wUuH-zKgK2rb0lJ6;7%q)mIUs4ID*Xq#e#@$kFVIV{@^2fb{RhL zwp0eA$3#AH*09Q+?(grN9Z->Whqtx)!?bNn(JbD7w;m2EmXI_K`1rM8 zX>X*$kxHhdivH-@myw_buQOgfbbIDv#<+NG5T4kH3+og!+@&{Zxs{4pu7CP2VdZ>? z3MKYQqu3{P*19fO1EI%op(fLB&D`erE({y$^4&+;?lST3TyMve@H_V4K2d%X|2#WFaX($OLqFyZWx_i!H@GD7uX3 z!My@>gUt*9KX>sWPJR-t0WbO?W_eX^V{j9=6fErKM%~)mh}6TwqXIWFEG+xAe#IbUSJ`2J zf$bT_3Hk^e(l|iOXv3_>GuKN-1OIDZgM(jZj0sLPTtSxM6OoeWUi}Hk2Pkk~h0%>{ zPyT+niw!gACAeaZOE94W8=(U@VnYpL0@3ZZ^R< z9d*!F+LSa9I-N)wt|Fl0z-pN)+gj}mNR}WTiWEbj$NTImTI{X)pBG{wIZyFSN#kI& zPvpIr&RC{Mg%dykRYEz3gq*xkHkc%wx*DQrI{qM7tRnEKumc1lmQmc(WTXI4RahXR zZGZOZ@WjLM@3nf?P@unCuf_qTQBylsUS6%R3pBEas)dIJ>^_Y^d_m#Fpq|Vt6P5y_ z>#zfG!UaSCk(wxArGdqY1+W9-#*CBohpWyTKW{Pz)IIubx#-V=Yr44hQbI)k0kd79 z&>2ssaA|u43<)udcbVdB2XYhn`9S;@sI;)Lv4x3CNOZ7&eXWme>n;QsMdZmtE@eX@ zUteEYx6Zy6|r$4=X)07xr@-BArQ3#GHq92E}U=YuI z;o0j9w@%($Po;efcnQy5$cFJOD5ptW|~HNW=1r5TQ!0 z-AolM9%baS+JTxY*w*KsiBApEgdBo!RMLdFz(wi#)Xja+{O)Wvz5e&BF=@Q1Ep`Y_ zfCWHAT76+&qiJ1OFmY-bF?K`_Kt~h-CVG8KIv&C2=J|y&{dH;FJKZ#b`f7Q!B%(Ed z8IZ5-Z)@fivhZ5~TE-4~z(UoU5)9Ls?7io+7 zQUsLhHPX^TLqoeTZj1f?FiGQ5)$N+mL_0Z8v9M}W&$M6#ii6(kOv}GPbmd1b`5hnT z3I(6s0ffz!S=_=o;!~H~7>9^A3Bi{}QmP43#bK>@>cwV+3Prytxu?v6JrQmAhcD*# zyL$R!x>EL^kso?{|74Wthpmlh^z0-%%PhkbQF(uR0Bb&rAWnZ5g9BChrxC$L@eEZa zQ5TFlIf;I0^;F^@6qrqtNrfhGKZbsNcqDj{by(wNtP^#%)`>hLy>`W}bi zd+2tKDQ!7`#ja4~Y)vc~(L5&d)N)&M;{4xPZiFvK#AG>yHdb<*G6e1Y)3?2yPkrG( zb}E_hInlK1ZES)fj2et=sR@VrsaL(}K_+*F*o2XdPDsQdq!~Ln>ogAO>N#t;dm2TZ zy3C<5spT&$n8(?7>ZcsO<3Xv;?r@JbJ^FhozS+-34oRVJ_zEK$E*G39k>In`DDqC% zd-MOn(*Q&vV)Fd2(XzapJ@miYe)(@#*i)~ zhw*cc^IMGb6YJ_aLx;Mgba%b1o13lNJz^GfKtp80XcBQg7^|tuGp%3$o2KH-`#*gU zIAlq5xZcTxMQA{}#*&cR=fAs+W^t`+_t%6Rk(|=Nz9kQnV?sUzah;b7z5A!-^tWt> zFgwrTxAa(oKHtU`Y?*ax)~^4z01URyd~~Xk4hiVit2E4@Lc)Sf=F(&r@4q8t#mY;u zI_`u4?665VO7iYMYwn#~)l72A8giCzO;eQcmD@^XOEJg|S|yXXOyqBvBAGLP<-LJ; zHRD2-Lg51w4~PpoRxZv4p-rrih9@nnNSm)E85y5nza9E^1vmFCGX)?ZBe5(~Z|^tc zB5(<`0O9|4KDXphzs4B~xS-kZH%R+1Sgw(4*zsF}zrdn18yg$XoIF$og9Jd&NQmOj zUDR%Ue+1X3MPoxSJS_QYDf|z_+Q0pSVw}0s96PnK+JeT-?U%3hSj|K+r6a<>4ZgT3 z2T;Wqv6B1BIRhdez5r(vcFLK&74Ya3z(k!J1!h~PBPq}(&%y1Mmhx_FZ14**x7oLR z$1)1-%E zYuU^da0#+L^78WS<7b?B00SBbaYRDg3Y)8=?)EGcty>oWsDdWVRoj|kgD+|mudOzN zp-2b65-lpv$2}*22JjQj%q4MgLk_L_u5zO8G~u_24cgJBR#IxS@-*#56rDA20l0-d zed!lKim!s@oSK;hzNJCNO_onAm%$PZcAoF$b>D6ilr)!#qOpl0#FK`BDbQ|E2-j7e z@hXSgu0{z>DloHCdmO?AYf7f8q7WdV{rvpYOQTFL+}+02N9D<%pT%;Gq<~Z-2jEK# z03(g?l=(7PgMOB^U39DX>GL)+GltU-w*{TYMZkxXn*rGflgf3wFpCl)%*@PKt{47u zI`=k`IsiCwUA`>;nvm)@a&s9&mpdjsfa>#NX-58pEAY?h=^WPT<(0@m1Kz9jFl{#* zkcj%!%$$-iK1C6n>N_#z+ZxvF2mYL49PvR}@Kr@Dj#baxrdA0c4nl&Iau(8R@iR)v*a36URB>)5&+*6m zkh8fxQucjtlc+d;gnar$U6bQ z)jkQ~!N!EuVSw;4pVWMq@yADhQ-aokzDFbgCy6Ru$}bZ{eJ*SzeI%4w0IfE3`~FWB zF;~aQ#*2kZ5T>+StvAqKfpNp-MlENtTO-{}0KP-0d8jR?WP|&Ocj^2eI>*C@LW2JQ zEEhmcUAXudTo|~J#HA{o@d`jmR~)n zHaW{AspfaMPWaAg^1cA|T``z`^Mxg59rR`qD_EI%m!=sa$@>C4y}ecS>Z*wG!t6Sk z@(2;Aep-ZY**v)GBDjL@KkVt7I4^|TI?i(_Iu1eE7+uP`2HgJZlTGE}XntX>h_HL> zrdel9cv3Bd>NnTpFV`QS(8Qn5OPm@SPJbA*I0!=+A!f%X5PJk*lp+Q(&$CFhi8vTs zKsL*Q4hc_8nMQS$8t{h1q-GGp4_IZ3T*MC78I^{W6L`jm4}bm~3+X+p_3HZ{Vwp4{ z5F&qmD-s8XvG%6C%&l|5#jxCS+z)eXVR$zi3rlM}_wN!OBGivyyt6Q#s)pAeI#v3? zuNMLEJftAop5W)(rsG_=VD@7WxYl4VV2V?yC$0r0I+&EU0F*myGTa~MaU>bCz5lBS z0Z3x@c@U8d!YE^=MwqW&=IQ=>L|p~reD8OAI8`q1m(ET?+e|4}qTz z>Jmww>fTyfs0gifGdHiS`89Hov0$Q7oLZMzg6lSe?frQ|-)UgXxRrdf>StmK8&+LqtA^p&u(b=!h=S~9G-_{AfnP-AfFNK*W3x(x5jz={rv};aNABS5v^~n zVD`E1R+sI_>zjn+j6pa6Ycj8D!y<$4qDvjdg|zcVA)J>Zzq<#w%)Hs`mTC6$g#L=c zAU9~V3=UErqO&OYxBa|JI~%A%l#B^rglA;JAuOjelXi(h!hVFp{0S8LVY&%E))d5` zfjWigBk?HVN!(``*6Fo(M6;#v!z-^YW)4+i7P;QeK%AUq%pPHVE z0rXIgu%9t75T}e#AsrX1^#2T_x{%>c;~V`4qz8C3zuHI^4f5fEi4DM-*b-@s-_j9` zbDVMbq39UWivj1R1sN!S8;*6YSA2rB#&Q4!E0}&9gbnhrK-Up#q86GC{a`+%Iu_{; zja2P636f8|mKwKgt@RL;baXdCOY`Bbv-qsR@empl)Y+zpK-Nf6*iHkO(P?0QgOXL_ zurF+{0;HDeL>QO>R|lp(>lA8m-RE0xA!K4x|5S<$nq=Ae{kAFMB&S0Y#t#bMVPENj zDyCXLATV$VZfL2Z8qYcDo^ctB00S8P9n6}lq31!z=g*qD&PD_0k?rU5V)(EYGXckn zAA2_eG{={p1Wwi%l35!`9Nd^Al$?)_j{bHT-IauHUXBZpGnH;uAhQ2n z6F*X7bS(padRYmOg=CwaB@gh4q~v;em;uk59;s&WJCqn@03Ed^nx&pc! z+ngJStfanw|Ni=q&fQMBI~Z)_LA~T$+CKxZ@BkPF27BMf44n=H(4&!|K+*aQYjhZX z4H&kOpnQXDnlT707I>kDBiJh#M;it|o`WT6;b8~gm7{?*FxJB`{ph@uuXw(C+6eEg z@M|0_44<5sxKaFK=#wjiOOp-+iD#7B;T!`;0e8P1Sz|pK&~gD* zg@cfwn&Kq-8c+`{9v6jg9JIV+f=<$bii10QmU@U*ZyNxd3qAtEm*$#5nJ!F?P9@(R z_*Mhult+LwP5UiU*e=M}VEY)hewC~H!UmV70-XMmdY0smtI{RTym(>PnF%t-ooj;f^1%On9;#Ns)#<#WA40#dgQ=ntopvy-I|tn`!SpRajf(;Q{Yq$gN|( z_h9C90e<{OGHHTb5Z+$62P}IGqoU^Cy2i>fXD#4%ruv&&~27J(c z9+u>_1qK!5ltIXIoBljrScCG6I9AC`#QeebN02F3SoYdWrNn%WvmRlb6#lwuG*}in zQs=(YbM51rKIL!C?Ac2dg(t~lhy7o<8KGGU|B?ns&J-G1A*U3t{gsQ5+09G1KI960 z)ySs$kKBxm6|xKciY9Z@;ew^_pODxyOIMbKUI*24B_=aoP|&MRXTUY^Ubqgv=1zo$ zD9i)AIW@oqe;)#GDI$RU-dQpsewVbPbWU%O5}@F0{p?%IiAPUau) zf$q|TfeTFs(_$MLB2UXLKdX2+{>ahEO7aa|UoiI7;Hpp6{gU-6qKQeuGcomx?Qx9y zb9?=wWlf8s&TPg+jz=6WG56)XbfUek&qRMs=+v}U{+v_k`(@u+Y{zg#&^DLn$i%s?s+6$7b9Gz75BC_ zb13s8hrX!ZEe6h$%DH~akL%iJBjtU$?<)E1osnn=-KBMk?oT%J56IH$i*;2w)5(my z%+K=l<+Ilsa~w%|fTAM#+dUP!&8TRlk)G2_C_FI4s#&~6D>ayYu7drfaBu0?+^b5< zZ}j^P6a4fy9^id()Dydhu@@_U27Q~%_jSEjdM1AkGzY%l`XifZG)96LbamEzsW0V- zV7c#P@al$y-*&np9$BF#iLY!dqa-Dj8!)tNjThv%&lFl@+`0AgJNa;dS(?W&m%<1_ z5qu~niW|1a?IvuG8ofX`O^>0nudZMIQwx>B-@YqJ>HBg$VL0b31v=rV zp#NpZE9+VRGqNJdV*u4&!opL+CQX<%^f0f-8lRF-bD$jB5*BvyU$Orj-L^)ww#3vv z8LD?D{g}ZcdawL+$*JEGe&kE4MnAYhJ&K#~0stIInuI+BRd?D8Lt>>2GNw?|1LRRIcaf3LhusSj~R; zlB(5+d~7pX^FS8kqkG8ktG`WbUmW0uG{zd$$7R95l5>SiTCXO^xK5+{DQjU7Ee`-0 zjJIy+lc{I%%Dr|u_v%jetdeHjNmQ9&?q?#vb_qL7o|k<`Kb-sW-78e=gUzwtT%YV` z9@o}|9jhHDaBC{=oL>3f48#H z@o9KCkNxqUXM}6%o5}vNtZ#npO~ zgYWaN3?*%>1ise|iCR(!2^RPp+ILcYHiYpqH)85~!FF0y}Q+9zAR^g+;T z%9`ZH`;4boRXIjxuR5e^<HB#DawBG`OFm-0~Akl~#|1 zv}a_&{f>Q>>+Vaf`8&4KyFuxU24xPlqe=W>)nNc0yOXqUCqg4Me$TpXojNt+cM^kvy$Agp;!!-$?t!yGT%d&8`i^ zUw!KzAB8j??=sK}SP0&JYmg!IdP4d4o!5Y>^3To6E|#HQl)8QoWBw^#{WXuF)`7xy ztDx6L(V|ypW5)hdgZFN?UOnKl)hb2+vLNN*&mLx#bDjrf(kLDT(=7qbpdy zzBMW|#_bGqxbnlH#rf*A`%i~^^}YjQEwijzjfacZ05+A-g-)hIGpET~JI69Z*DCd^ zBE-!U*%$SmvTOGx4s@(hrM|1PSy`r zysj~c7LfT&yrxoSY03+HqS*M89YKdM-A9VqeS5uAg=eXmB6nyZxcrfC?A@azeFVSd z+FQ5PJ|p_;Hp3^j(#M~`VjW-z{+?H(n5IbOM{`mKB)yF;p{jM?qkqP6H==+mlLHT7 zb@u(4<*P+ZH=KjUPFS<`aLW3NzgA`z39}zq)b6n8)>>M`mo1J|9e8K0pKVvFmCC(8 z(U5Crq`1AA4>4fapL32K8&6ovPYl&Q&RlahXxQ`^1Irw2OiC*o#^ARn>ANMOo-81f zg*2aUPm#UyM}mrDJ5KEn%pV-Cv=lJycqZoLSb+?ZQB+VMX1j`@tRn~#;Iz2*jCqxD zLWd5e+f)|mC-SAkHW8oVRSh7u3b#ah=YBLaoc|c;P0q%@LG$EZDF%i9E&DYhH8IE$ zk{Ige7qBUjYp`3b*S!=rY4S!U-h@?OHx=@Id4=Ow{%*MqhitSyZtHKEV5e&lZ~j_3 zq@}(=@LA}^+?SLUZsVfO+0YfK@7me&Mo<}#xl{nWT|J#G-;?Cikp7h${Iw0&{T1VOiNHEM1Q&a!G+&*h$*VNaejc&^>j zia$$@PJb}n>ASmb(1*c7`>5Zg(o1DB9F(DHXfG7G2pkrh#0TVBhcea9ZJjSH(PQhl zB3;AluDfQLT4nu`h}X(mr$9|6k2Mw=;eP)h@r9Jk`3OuD&NRaHVrOERziC}Agl|hQ zjN8;Gh1V8|f5a%Spz6cGB|Q>aLKRg*(*}^W8CH?I_C^|xOW%7);)Xgksr(T0JYUII zrKlB(>Yucd^C#acAQzxGi5(w1XQ$BH-YDSR(fT>s1F1rDC_^1lpplTOxOGuR;JF$t z9c7=dvrADiLHlLtU6Es!9s_>44`*rU;;YU`6hEnUpJ68UtqC+%9~jOf{xjZSY%hl; z1!cM9c#{}4VPrzl*6q*Jco+apIdYK;+&LK!#H?+bD@E{$DyDvr4bApGznU&*D?J*% z>6bxk!+giI;10COtp6k-#dBRn?3Kyd*bcvsSJrfi?86vJZuAWa2EIR&dx3AI4kCr1eQvE0?Udi)KCbtn0PAH%yh<5W6)DamDg?!N%wMj69b$qhN0 z@1BuTcUKHqa49QNZ29KjkmS-)S%!6Fel2@yp&GGI%`G!^{J8h^`0k(CxL3zdA6m#FuW_n01fOA3=z@A$M-B_dM9ohX6&Gs^ekjM8R7!<$W$ z`(}lE6is!Jky>U}(i%Y-FV-uN?HYuup3VeH^V)`?#3(A_J~!toeTdL&QN*CotiRHEtqlT zF0voU#fM&-WVqA5=XJ*PX#824yj!TTE1?h~x&)4357 znwFL}dbWJ{0=G2hjiAqSaJB2I2)IIok#42Z1E@l8hFFrUtZe%b?ej56U!U@wxX!DQ zkdo#BbBvzo<$c#TNcsJC4M9PRTQvlHPd<>bFqkfNq-wZ*oiAaQwpU!Nr-Dmitb`W< zq`{MLNMj%`tSc`cggVEMyv)lR*Ow)wiGY+5`egcN*0paHPso8^DJtS*&1g#~o??Lk zFRWD?k{TkO&KL2>RHmQ{nI(bwlC&BTOeImmPV9h0o=l;9dRqW|Xa1OHgG(CQ8Ri25r;RHF6lX3*t3rkpx#z2AD$t4*gtN(EwryEUCQ~ zFhW7*ED2iu&#Pnbi6RpLQl+ZPH>1lt7$_W;gF+(=yc-_xE@#Sw{1k0-Rt4-VM^xD- z3;+o(_36I4!&R3~ewsq_54z0jYv9!S{#jfQ)$#X#Z|=R#zlNw9g||%ZLgRk(eHTdJ z*;zaD1A9N-Rg=#L#>l#ep-vf$84)6PajSFzAN%iR%s6@~7jOCTiK}*y29pq8*pQq_ z1MYS`4$Lc$#f^c?hqE}sd*bB6s)Uz0QWlfwaM+s$@G4B0Dc(n+;}BVzqX)EaVb1(N z**#~JKj5#fyf!!+kRknJjXs1c8K&3t7rt8%#vzIeilONvhrER*a=ZTI+YnE>Y9>yV z3DipZ1~X~VcwsB8q@i%e0E`9_z88&xFy zy;ZmM^sB8@2sm3(%F>0S&-m+0rd^OxA_{z@F}jH~N0?GFk30^{gGWm@yWkD_Jx~7d zH+`<=>_EZ~5Qfo<#j_gLnur;Zw*yqCIeZPA9jS3T(E~CR3|hyWIhsXQA{fuYd+9fsrUvWb7^ecWbX=cPbL&Y0oSJI#60ns3cgxjap!^7U`-P0y;ARiz~3ug+icG7{jr((m)x4 zFc+LFSlTRug-gmP(CAdkMdsuhI=N%HWKv*UL@t9VdynoP*!l5$^Pc4UlJh>__dd^g zJ`q?ekI;{~dlNx26~^Uq=PVYl5879DAKnTMa&Qk3{BuLho%v;LeVwAs>k4m48J*GB zf-wr_q|s=!*MNvSJE-OTEHqv*-T6E%P&!|_9i%Sc@nH5|aDmggpTenYTVQrH03HkT z_;0jHJuc5SH=S?7 zR5>*$tL`_2j^pRgJbM&cF?wV=m7KwPlDk!j(FEte1t-16;Do+q=*;3Q#h5NWZ(a*} zv`_@P$K_5w7rk4u4QrI+6Vcglb@FiNkKf0Fen}x5y_b7O_lZs@A7LiMCp1jId^%Ss zDp-c9fegk}x7o~lKbv>9etx2@0*N=4zW2qYz{{I;(a&SBr6>2*z@vK}qgTY#fDfM@ z;t75Eybr?(puZ9Ed+bVq!7c202!=?!qqapJPL80Tl`c;N`~Z$xllO8}(0OGfpWNA6 z@oCAyue$;o+i~0n%xB=|_&&S@DdI11^2jWog1+L+UNpG{hvmtI`3G~0CioHh{=%7@RFW@u}w5+vXlgZ>V zf@MHswP6|Jr_`o5dJX5VW?^Yvt1SB>k4=?0WMmllJY^jp%pD^ z44l&Z&(KtC$qYNU>qX?<0GIJZz_CQ7ebltsmQJzyM3{%|iYDn^{Eifr6EpzjdimdmV^i2iY^|xp&jk zU7`3Up@zNDs{kO2wZ4tzLJ)I>rgu@m#Bee>W==PIo{ZycX7KCdK2#QUIAk08r8NM=-j z>mUxqQ7QnR#2z@;Pv$rl zA7*lRR<^CM5GnXV^b#w-Ldys@Tho?Qk6QZ!CaLVIVopQ2I%@sEWb;95F-#TnMdW|) hzOY*?ACu4dFYOWR(_$txNPI8?&naF+SVO4r%D-ypzBK>< literal 0 HcmV?d00001 diff --git a/Specifications/model/information.model.md b/Specifications/model/information.model.md new file mode 100644 index 0000000..e91c514 --- /dev/null +++ b/Specifications/model/information.model.md @@ -0,0 +1,151 @@ +# Dataspace Information Model + +The information model defines the core concepts, entities, and relationships that underpin a `Dataspace`. + +## 1 Terminology + +### Dataspace + +A `Dataspace` is a set of technical services that facilitate interoperable asset sharing between entities. + +### DataspaceAuthority + +A `DataspaceAuthority` is an entity that manages a `Dataspace`. + +### Participant + +A `Participant` is a `Dataspace` member that provides and/or consumes assets. + +### ParticipantAgent + +A `ParticipantAgent` is a technology system that performs operations on behalf of a `Participant`. + +### IdentityProvider + +An `IdentityProvider` is a trusted technology system that creates, maintains, and manages identity information for a `Participant` and `ParticipantAgents`. + +### CredentialIssuer + +A `CredentialIssuer` is a trusted technology system that issues verifiable credentials for a `Participant` and `ParticipantAgents`. + +### ClearingHouse (TBD) + +A `ClearingHouse` is a trusted technology system that records and verifies domain events. + +### DataspaceRegistrationService + +A `DataspaceRegistrationService` is a technology system that maintains the state of `Participants` in a `Dataspace`. + +### Asset + +Data or a technical service that can be shared by a `Participant`. + +### Policy + +A set of rules, duties, and obligations that define the terms of use for an `Asset`. + +### Offer + +A concrete `Policy` associated with a specific `Asset`. + +### Agreement + +A concrete `Policy` associated with a specific `Asset` that has been signed by both the provider and consumer `Participants`. + +### Catalog + +A collection of entries representing `Assets` and their `Offers` that is advertised by a provider `Participant`. + +### CatalogService + +A `PariticipantAgent` that makes a `Catalog` accessible to `Participants`. + +### Connector (DataService) + +A `PariticipantAgent` that produces `Agreements` and manages `Asset` sharing. + +### Contract Negotiation + +A set of interactions between a provider `Connector` and consumer `Connector` that establish an `Agreement`. + +### Asset Transfer + +A set of interactions between a provider `Connector` and consumer `Connector` that give access to an `Asset` under the terms of an `Agreement`. + +## 2 Dataspace Information Model + +The following sections outline the Dataspace Information Model, which form the foundation of this specification. + +### 2.1 Dataspace Entity Relationships + +The relationships between the primary dataspace entities are defined as follows: + +![](./im.dataspace.relationships.png) + +Note that all relationships are multiplicities unless specified. + +- A `Dataspace Authority` manges one or more `Dataspaces`. This will include participant registration and may entail mandating business and/or requirements. For example, a + Dataspace Authority may require participants to obtain some form of business certification. A Dataspace authority may also impose technical requirements such as support for the + technical enforcements of specific usage policies. +- A `Participant` is a member of one or more `Dataspaces`. A participant registers `Participant Agents` that perform tasks on its behalf. +- A `Participant Agent` performs tasks such as publishing a catalog or engaging in an asset transfer. In order to accomplish these tasks, a participant agent may + use a _**verifiable presentation**_ generated from a _**credential**_ obtained from a third-party issuer. A participant agent may also use an _**ID token**_ issued by a + third-party identity provider. Note that a participant agent is a logical construct and does not necessarily correspond to a single runtime process. +- An `Identity Provider` is a trust anchor that generates `ID tokens` used to verify the identity of a `Participant Agent`. Multiple identity providers may operate in + a dataspace. The identity standard used by a provider is not defined but could be _OAuth2_ or _Decentralized Identifiers using did:web_. An identity provider may be a third-party + or a participant itself (for example, in the case of decentralized identifiers). +- A `Credential Issuer` issues _verifiable credentials_ used by participant agents to allow access to assets and verify usage control. + +The diagram below depicts the relationships between `ParticipantAgent` types: + +![](./im.participant.entities.png) + +- A `CatalogService` is a `Participant Agent` that makes a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) available to other participants. +- A `Catalog` contains one or more `Asset Entries`, which are [DCAT Datasets](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset). A `Catalog` also contains **_at least one_** + [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a `Connector` where assets may be obtained. +- An `Asset Entry` has **one** `Offer`, which is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) describing the _usage control policy_ associated with the asset. +- A `Connector` is a `Participant Agent` that performs `Contract Negotiation` and `Asset Transfer` operations with another connector. An outcome of a `ContractNegotiation` may + be the production of an `Agreement`, which is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) defining the _usage control policy_ agreed to for an asset. + +## 2.2 Classes + +Not all dataspace entities have a concrete _technical_ materialization; some entities may exist as purely logical constructs. For example, a `Dataspace Authority` +and `Participant Agent` have no representation in the protocol message flows that constitute dataspace interactions. This section outlines the classes that comprise the concrete +elements of the information model, i.e. those that are represented in protocol message flows. + +### 2.2.1 Catalog + +A `Catalog` is a [DCAT Catalog](https://www.w3.org/TR/vocab-dcat-3/#Class:Catalog) with the following attributes: + +- 0..N `Asset Entries`. Since a catalog may be dynamically generated for a request based on the requesting participant's credentials it is possible for it to contain 0 matching + asset entries. (DCAT PROFILE) +- 1.N [DCAT DataService](https://www.w3.org/TR/vocab-dcat-3/#Class:Data_Service) that references a `Connector` where assets may be obtained. (DCAT PROFILE) + +### 2.2.1 Asset Entry + +An `Asset Entry` is a [DCAT Dataset](https://www.w3.org/TR/vocab-dcat-3/#Class:Dataset) with the following attributes: + +- 1..N `hasPolicy` attributes that contain an ODRL `Offer` defining the usage control policy associated with the asset. **_Offers must NOT contain any target attributes. The + target of an offer is the asset associated with the containing asset entry._** (ODRL PROFILE) +- 1..N [DCAT Distributions](https://www.w3.org/TR/vocab-dcat-3/#Class:Distribution). Each distribution must have at least one `DataService` which specifies where the distribution + is obtained. Specifically, a `DataService` specifies the endpoint for initiating a `ContractNegotiation` and `AssetTransfer`. (DCAT PROFILE) + +### 2.2.1 Offer + +An `Offer` is an [ODRL Offer](https://www.w3.org/TR/odrl-model/#policy-offer) with the following attributes: + +- An ODRL `uid` that is a unique UUID. (ODRL PROFILE) +- The `Offer` must be unique to a dataset since the target of the offer is derived from its enclosing context. +- The `Offer` must NOT include an explicit `target` attribute. + +### 2.2.1 Agreement + +An `Agreement` is an [ODRL Agreement](https://www.w3.org/TR/odrl-model/#policy-agreement) with the following attributes: + +- The `Agreement` class must include one `target` attribute that is the UUID of the asset the agreement is associated with. An agreement is therefore associated with **EXACTLY + ONE** asset. (ODRL PROFILE) + + + + + diff --git a/Specifications/notes/bibliography.md b/Specifications/notes/bibliography.md new file mode 100644 index 0000000..c483ea9 --- /dev/null +++ b/Specifications/notes/bibliography.md @@ -0,0 +1,23 @@ +# Bibliography + +## JSON-LD +- [JSON-LD](https://www.w3.org/TR/json-ld/) + +## DCAT +- [DCAT Working Group GitHub](https://github.com/w3c/dxwg) +- [DCAT Vocabulary WD](https://w3c.github.io/dxwg/dcat/) +- [Profile Guidance](https://w3c.github.io/dxwg/profiles/) +- [Profiles Vocabulary](https://w3c.github.io/dx-prof/prof/) +- [DCAT Vocabulary RDF](https://www.w3.org/ns/dcat2.ttl) + +## RFCs +- [Web Linking](https://datatracker.ietf.org/doc/html/rfc5988) +- [Linkset Media Types](https://www.rfc-editor.org/rfc/rfc9264.html) +- [JSON Web Signature (JWS)](https://www.rfc-editor.org/rfc/rfc7515) +- [JWK Thumbprint](https://www.rfc-editor.org/rfc/rfc7638#section-3) +- [JCS](https://www.rfc-editor.org/rfc/rfc8785) + +## IDS +- [IDS InfoModel](https://international-data-spaces-association.github.io/InformationModel/docs/index.html) +- [IDS GitHub InfoModel](https://github.com/International-Data-Spaces-Association/InformationModel) + From 83238e1221dba8997ea96fe38bca603053ca7451 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 08:39:28 +0100 Subject: [PATCH 06/14] 63 communication guide identities (#83) * Issue 46: Bugfix adding necessary JSON-LD context elements (#49) * Bugfix adding necessary JSON-LD context elements Co-authored-by: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> * First identity token draft * Added mandatory claims section Co-authored-by: sebbader-sap <107036549+sebbader-sap@users.noreply.github.com> Co-authored-by: Michael Lux --- CHANGELOG.md | 4 +++ Communication/Identities/README.md | 40 ++++++++++++++++++++++ Communication/Message-Structure/README.md | 4 +-- Components/IdentityProvider/DAPS/README.md | 6 ++-- 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 Communication/Identities/README.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fdeb92..8ff355b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## 2022-09 + ### Changed - fixed missing mandatory elements in multipart message - Fixed wrong references to IDS-G-pre and RAM in CONTRIBUTING.md + ## [Q2/2022] ### Added diff --git a/Communication/Identities/README.md b/Communication/Identities/README.md new file mode 100644 index 0000000..6bbbd47 --- /dev/null +++ b/Communication/Identities/README.md @@ -0,0 +1,40 @@ +# Identities + +Connector identities according to this specification are typically represented by some sort of token. +This token contains statements about properties of the connector ("claims"), like its membership in one or more data spaces. +In order to establish trust via these tokens, two requirements have to be met: + +- Security-relevant claims within the token, or the entire token as a whole, MUST be signed by one or more trusted entities. +- There MUST exist a sound mechanism that enables a connector to proof ownership over the tokens or claims issued for this particular connector. +Specifically, any connector implementing a corresponding validation mechanism MUST be capable of identifying and rejecting tokens that have not been issued for the respective peer connector(s). + +## Mandatory Claims + +Each implementation of identity tokens MUST at least implement the following claims: + +- `securityProfile`: Reflects the `SecurityProfile` of the owning connector according to IDS certification criteria. +Valid values are `idsc:BASE_SECURITY_PROFILE`, `idsc:TRUST_SECURITY_PROFILE` and `idsc:TRUST_PLUS_SECURITY_PROFILE` as given by the members of https://international-data-spaces-association.github.io/InformationModel/docs/index.html#SecurityProfile. +Any other value denotes the absence of a security profile. +- `extendedGuarantee`: Reflects extended security features or properties that go beyond the requirements of the connector's `SecurityProfile`. +The claim MUST NOT contain any property that reflects a security level lower than the requirements of the stated `SecurityProfile`. +The claim MAY contain one or more values represented by members of `SecurityGuarantee` subclasses. +For a comprehensive list, see https://international-data-spaces-association.github.io/InformationModel/docs/index.html#SecurityGuarantee. + +## X.509/OAuth2-Token-based Identities +Identities of this kind are established via X.509 certificates and corresponding private keys. +The tokens used to provide identity information to other peers are regular OAuth2 JSON Web Tokens (JWTs). +In the IDS context, the OAuth2 server issuing such tokens is called a "Dynamic Attribute Provisioning Server", or DAPS for short. + +### Format and Signature +The format of Dynamic Attribute Tokens (DATs) and the interaction between DAPS and connector are described in the [DAPS Specification](../../Components/IdentityProvider/DAPS/README.md). +As DATs are JWTs with a (RSA) signature, the issuing DAPS acts as a central, trusted entity, which also manages the contained claims about the connector. + +### Token Ownership Verification +The ownership over DAPS tokens is proven to peer connectors via ownership of a private key used for transport encryption, typically an RSA key belonging to a X.509 certificate. + +For typical TLS encryption scenarios, the respective approach via the `transportCertsSha256` claim is documented in the [DAPS Token Response Specification](../../Components/IdentityProvider/DAPS/README.md#token-response). +This claim is specified to contain an array of SHA256 fingerprints as hex-encoded strings, or a single such hash as a string. +As per that specification, DAPS implementations SHOULD allow the `transportCertsSha256` claim to be overridden with a dynamic value when requesting the DAT. +For non-TLS encrypted communication channels, hashes of corresponding public keys or their very values (e.g. for short representations of EC keys) MAY be used instead. + +For verification, a connector MUST check that the fingerprint of its peer's certificate is contained in - or equal to - the value of the `transportCertsSha256` claim. diff --git a/Communication/Message-Structure/README.md b/Communication/Message-Structure/README.md index 67f57dd..66dcc1c 100644 --- a/Communication/Message-Structure/README.md +++ b/Communication/Message-Structure/README.md @@ -43,8 +43,8 @@ A Connector has following properties, which are used for it's self-description. |host† |Network host of the Connector capable of serving / consuming Digital Contents and services| |defaultHost |Default host that should be used for basic infrastructure interactions, e.g., providing the self description| |authInfo |Information of the authentication service used by the Connector (e.g., to access a Connector’s data)| -|securityProfile |Set of security guarantees claimed by a Connector. Value contains one of the default security profile codes, such as idsc:BASE_CONNECTOR_SECURITY_PROFILE. All profiles can be found here: https://github.com/International-Data-Spaces-Association/InformationModel/blob/develop/codes/SecurityGuarantee.ttl Valid attributes are: idsc:BASE_SECURITY_PROFILE idsc:TRUST_SECURITY_PROFILE idsc:TRUST_PLUS_SECURITY_PROFILE| -|extendedGuarantee |Reference to additional security guarantees that, if used in combination with a security profile instance, overrides the respective guarantee of the given predefined instance. Value is a pre-defined code for the claimed guarante, e.g., ids:USAGE_CONTROL_POLICY_ENFORCEMENT| +|securityProfile |Set of security guarantees claimed by a Connector. Value contains one of the default security profile codes, such as idsc:BASE_CONNECTOR_SECURITY_PROFILE. All profiles can be found here: https://international-data-spaces-association.github.io/InformationModel/docs/index.html#SecurityProfile Valid attributes are: idsc:BASE_SECURITY_PROFILE idsc:TRUST_SECURITY_PROFILE idsc:TRUST_PLUS_SECURITY_PROFILE| +|extendedGuarantee |Reference to additional security guarantees that, if used in combination with a security profile instance, overrides the respective guarantee of the given predefined instance. Value is a pre-defined code for the claimed guarante, e.g., ids:USAGE_CONTROL_POLICY_ENFORCEMENT, see subclass members of https://international-data-spaces-association.github.io/InformationModel/docs/index.html#SecurityGuarantee for a full list| |transportCertSha256† |SHA256 fingerprints of currently valid transport certificates| |componentCertification |Certification issued for the given Connector. Value is an instance of class ids:ComponentCertification| |publicKey |Public Key that has been created for the Connector| diff --git a/Components/IdentityProvider/DAPS/README.md b/Components/IdentityProvider/DAPS/README.md index 43efc6c..f2f1ded 100644 --- a/Components/IdentityProvider/DAPS/README.md +++ b/Components/IdentityProvider/DAPS/README.md @@ -116,8 +116,8 @@ Contains the public keys of the used transport certificates, hashed using SHA256 The identifying X509 certificate should not be used for the communication encryption. Therefore, the receiving party needs to connect the identity of a connector by relating its hostname (from the communication encryption layer) and the used private/public key pair, with its IDS identity claim of the DAT. -The public transportation key must be one of the `transportCertsSha256` values. -Otherwise, the receiving connector must expect that the requesting connector is using a false identity claim. +The public transportation key MUST be one of the `transportCertsSha256` values. +Otherwise, the receiving connector MUST expect that the requesting connector is using a false identity claim. In general, this claim holds an Array of Strings, but it may optionally hold a single String instead if the Array would have exactly one element. * **extendedGuarantee** @@ -189,7 +189,7 @@ DAPS implementations are advised to explicitly white-list any requestable claims and to check requested values as appropriate. To allow clients to specify their own transport certificates, -DAPS implementations should support specifying values for the **transportCertsSha256** claim. +DAPS implementations SHOULD support specifying values for the **transportCertsSha256** claim. ### Example From 424bd760699f508bcedfa9a8cb4c84f1b56af0fb Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 09:02:05 +0100 Subject: [PATCH 07/14] Update strucuture of the document Updating the structure of the document --- Communication/CommunicationGuide.md | 29 ++++++++++++++++-- .../images/Structure_Commuication.png | Bin 0 -> 73104 bytes 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 Communication/images/Structure_Commuication.png diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index b227c88..6443c96 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -35,6 +35,31 @@ Joint understanding of the terms `in-band` and `out-of-band`, as well as the `co - `control plane`: controls what happens on the data plane - `data plane`: agnostic of control logic, only used for payload transfers +#### General remarks on transactions and synchronized states ### + +**We should explain briefly on the requirements of state management and how we deal witt it in the remainder of the document.** + +### Structure of the document ### + +The remainder of the document is structures as follows: + +- The foundation package contains the reusable structures and definitions: + - the basic strucutre of elements and their relationship (information model) + - standards that are used in the document + - a definition of digital identities and their interactions + - a definition of policies + - Trust Frameworks as a foundation to establish trust in a data space +- Data Sharing + - Contract negotiation sequence + - Data Transfer +- Catalog +- Registration to a data space +- Audit Logging and observability (currently out of scope) +- Use of vocabularies (currently out of scope) + + +![structure of IDS Communication Specification](./images/Structure_Commuication.png) + ## Foundation ## The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. @@ -57,9 +82,7 @@ The realization bases on DCAT for the Data Products and ODRL for Contract Polici ### Identities ### -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +[This section](./Identities/README.md) ### Trust Frameworks ### diff --git a/Communication/images/Structure_Commuication.png b/Communication/images/Structure_Commuication.png new file mode 100644 index 0000000000000000000000000000000000000000..4254b79de869d0deb8965cab36c0f6d90e20c85c GIT binary patch literal 73104 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 z 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 QGT^6k%TS|2&Ee_)04=qQ?f?J) literal 0 HcmV?d00001 From 0b02b1fe3d0bb8f9c5c71fa06f053b7b5005df7e Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 09:08:22 +0100 Subject: [PATCH 08/14] Bring the Specification to communication Adding the specification folder content to the Communication folder --- Communication/CommunicationGuide.md | 16 ++++++++-------- .../catalog/catalog.binding.https.md | 0 .../catalog/catalog.protocol.md | 0 .../catalog/message/catalog.error.message.json | 0 .../catalog/message/catalog.message.json | 0 .../message/catalog.request.message.json | 0 .../diagrams/diagram.styles.puml | 0 .../model/im.dataspace.relationships.png | Bin .../model/im.dataspace.relationships.puml | 0 .../model/im.participant.entities.drawio | 0 .../model/im.participant.entities.png | Bin .../model/information.model.md | 0 .../notes/bibliography.md | 0 13 files changed, 8 insertions(+), 8 deletions(-) rename {Specifications => Communication}/catalog/catalog.binding.https.md (100%) rename {Specifications => Communication}/catalog/catalog.protocol.md (100%) rename {Specifications => Communication}/catalog/message/catalog.error.message.json (100%) rename {Specifications => Communication}/catalog/message/catalog.message.json (100%) rename {Specifications => Communication}/catalog/message/catalog.request.message.json (100%) rename {Specifications => Communication}/diagrams/diagram.styles.puml (100%) rename {Specifications => Communication}/model/im.dataspace.relationships.png (100%) rename {Specifications => Communication}/model/im.dataspace.relationships.puml (100%) rename {Specifications => Communication}/model/im.participant.entities.drawio (100%) rename {Specifications => Communication}/model/im.participant.entities.png (100%) rename {Specifications => Communication}/model/information.model.md (100%) rename {Specifications => Communication}/notes/bibliography.md (100%) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 6443c96..3e3a458 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -60,6 +60,8 @@ The remainder of the document is structures as follows: ![structure of IDS Communication Specification](./images/Structure_Commuication.png) + +The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. ## Foundation ## The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. @@ -70,15 +72,9 @@ The foundation package contains elements that commonly used. This includes stand ### Information Model ### -The common information model that is used in every other package. This shall include a base model containing the entities of a data space and their relation. - -![Entities and relationships in data spaces](./images/Communicatoin-Guide_Dataspace_entities.png) - -(find the source file of the image above [here](./images/CommunicatoinGuide_Dataspace_entities.drawio)) +The [Information Model document](./model/information.model.md) defines the core concepts, entities, and relationships that underpin a `Dataspace`. -The realization bases on DCAT for the Data Products and ODRL for Contract Policies. - -[The IDS-Information Model is here.](./Infomodel/README.md) +[The IDS-Information Model is the declarative model --> the Binding of the model above to rdf](./Infomodel/README.md) ### Identities ### @@ -118,6 +114,10 @@ API binding: The catalog in the IDS is a collection of Self-Descriptions, either of IDS Connectors or IDS Resources published by such IDS Connectors. The Self-Descriptions are the first-class-citizen in the catalogs, therefore all messages have the Self-Descriptions as their target, instead of the catalogs containing them. +The [Catalog Protocol document](./catalog/catalog.protocol.md) defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. + +The [Catalog Binding document](./catalog/catalog.binding.https.md) defines a RESTful API over HTTPS for the `Catalog Protocol`. + ### Messages and Datatypes The messages, expected content, and the error behaviour are described in the [Functions and Correlated Messages](../Components/MetaDataBroker/FunctionsAndCorrelatedMessages/) section of the Metadata Broker. diff --git a/Specifications/catalog/catalog.binding.https.md b/Communication/catalog/catalog.binding.https.md similarity index 100% rename from Specifications/catalog/catalog.binding.https.md rename to Communication/catalog/catalog.binding.https.md diff --git a/Specifications/catalog/catalog.protocol.md b/Communication/catalog/catalog.protocol.md similarity index 100% rename from Specifications/catalog/catalog.protocol.md rename to Communication/catalog/catalog.protocol.md diff --git a/Specifications/catalog/message/catalog.error.message.json b/Communication/catalog/message/catalog.error.message.json similarity index 100% rename from Specifications/catalog/message/catalog.error.message.json rename to Communication/catalog/message/catalog.error.message.json diff --git a/Specifications/catalog/message/catalog.message.json b/Communication/catalog/message/catalog.message.json similarity index 100% rename from Specifications/catalog/message/catalog.message.json rename to Communication/catalog/message/catalog.message.json diff --git a/Specifications/catalog/message/catalog.request.message.json b/Communication/catalog/message/catalog.request.message.json similarity index 100% rename from Specifications/catalog/message/catalog.request.message.json rename to Communication/catalog/message/catalog.request.message.json diff --git a/Specifications/diagrams/diagram.styles.puml b/Communication/diagrams/diagram.styles.puml similarity index 100% rename from Specifications/diagrams/diagram.styles.puml rename to Communication/diagrams/diagram.styles.puml diff --git a/Specifications/model/im.dataspace.relationships.png b/Communication/model/im.dataspace.relationships.png similarity index 100% rename from Specifications/model/im.dataspace.relationships.png rename to Communication/model/im.dataspace.relationships.png diff --git a/Specifications/model/im.dataspace.relationships.puml b/Communication/model/im.dataspace.relationships.puml similarity index 100% rename from Specifications/model/im.dataspace.relationships.puml rename to Communication/model/im.dataspace.relationships.puml diff --git a/Specifications/model/im.participant.entities.drawio b/Communication/model/im.participant.entities.drawio similarity index 100% rename from Specifications/model/im.participant.entities.drawio rename to Communication/model/im.participant.entities.drawio diff --git a/Specifications/model/im.participant.entities.png b/Communication/model/im.participant.entities.png similarity index 100% rename from Specifications/model/im.participant.entities.png rename to Communication/model/im.participant.entities.png diff --git a/Specifications/model/information.model.md b/Communication/model/information.model.md similarity index 100% rename from Specifications/model/information.model.md rename to Communication/model/information.model.md diff --git a/Specifications/notes/bibliography.md b/Communication/notes/bibliography.md similarity index 100% rename from Specifications/notes/bibliography.md rename to Communication/notes/bibliography.md From 91ec3fa9b6b5792e32cdc031485aca934eb100ed Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 09:31:15 +0100 Subject: [PATCH 09/14] Linking the current text in the com guide --- Communication/CommunicationGuide.md | 45 ++++++++++++--------- Communication/ContractNegotiation/README.md | 1 + Communication/README.md | 4 ++ Communication/Registration/README.md | 4 ++ Communication/TrustFrameworks/README.md | 19 +++++++++ 5 files changed, 53 insertions(+), 20 deletions(-) create mode 100644 Communication/ContractNegotiation/README.md create mode 100644 Communication/Registration/README.md create mode 100644 Communication/TrustFrameworks/README.md diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 3e3a458..44c6c6b 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -8,6 +8,8 @@ The Communication Guide is organized into a modular and composable structure. ## Terms and Definitions ## +Most important terms and definition are in the [Glossary](../Glossary/README.md) + ### Control Plane vs. Data Plane and in-band vs. out of band ### Joint understanding of the terms `in-band` and `out-of-band`, as well as the `control plane` and `data plane`: @@ -57,11 +59,10 @@ The remainder of the document is structures as follows: - Audit Logging and observability (currently out of scope) - Use of vocabularies (currently out of scope) - ![structure of IDS Communication Specification](./images/Structure_Commuication.png) - The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. + ## Foundation ## The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. @@ -76,42 +77,48 @@ The [Information Model document](./model/information.model.md) defines the core [The IDS-Information Model is the declarative model --> the Binding of the model above to rdf](./Infomodel/README.md) +The general message structure is described [here](./Message-Structure/README.md). + +And the message types are listed [here](./Message-Types/README.md). + +And messages are part of the [IDS Infomodel](./Infomodel/Message/README.md). + ### Identities ### [This section](./Identities/README.md) +While the API binding is [here](../Components/IdentityProvider/README.md). + ### Trust Frameworks ### -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +[This section](./TrustFrameworks/README.md) ### Policies (authorization and Policy Description) ### -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +Policies in this context are the IDS Usage Contracts that are defined [here](../UsageControl/Contract/README.md) -## Data Sharing (Conector) ## +## Data Sharing (Connector) ## -### Contract Negotiation ### +Data Sharing and the interaction between connectors focus on Contract Negotiation and Data Transfer -part of the control plane +### Contract Negotiation ### -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +[This section](./ContractNegotiation/README.md) ### Data Transfer ### part of the data plane. How data is exchanged with focus on communication and not on how the data plane is built. -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +Bindings for the data exchange are described in the [protocols section](./protocols/README.md). + +- [IDS-REST](./protocols/ids-rest/README.md) +- [Multipart](./protocols/multipart/README.md) +- [IDSCP V2](./protocols/idscp2/README.md) ## Catalog (Publish and query meta-data) ## +**This section mixes old and new please review** + The catalog in the IDS is a collection of Self-Descriptions, either of IDS Connectors or IDS Resources published by such IDS Connectors. The Self-Descriptions are the first-class-citizen in the catalogs, therefore all messages have the Self-Descriptions as their target, instead of the catalogs containing them. The [Catalog Protocol document](./catalog/catalog.protocol.md) defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. @@ -181,9 +188,7 @@ The API Operations of catalogs in the different protocol bindings are explained ## Registration ## -messages and data types: -protocols: state machines for message flows and interaction patterns: -API binding: +[This section](./Registration/README.md) ## Audit logging ## diff --git a/Communication/ContractNegotiation/README.md b/Communication/ContractNegotiation/README.md new file mode 100644 index 0000000..e899305 --- /dev/null +++ b/Communication/ContractNegotiation/README.md @@ -0,0 +1 @@ +to be added \ No newline at end of file diff --git a/Communication/README.md b/Communication/README.md index fa301cd..43ca8a0 100644 --- a/Communication/README.md +++ b/Communication/README.md @@ -28,3 +28,7 @@ In general, each communication between two components includes the following bui Every communication requires an authenticated, integrity-protected and encrypted connection. The verification of the connector's identity is based on the IDS identity certificate (X.509v3), dynamic attributes and details for the company operating the connector. Additionally, connectors in the Trust or Trust+ Level need to prove their integrity with Remote Attestation based on a transmitted Attestation Report. Based on the secure channel, the desired IDS interaction is conducted as described in the Sequence Specifications above. If no secure channel can be established, the IDS interaction must not be executed. After the IDS Message was handled, the process/communication channel is terminated if no further interaction is required. Otherwise, the behavior depends on the utilized communication protocol. For a communication with the [IDS-REST protocol](./protocols/ids-rest) or [Multipart](./protocols/multipart), the communication channel will be re-established for every IDS Message. With the IDSCP2, the communication channel is established once via the [IDSCP2 Transport Layer Protocol](./protocols/idscp2/TransportLayer) and all IDS interactions will be executed via this channel with the [IDSCP2 Application Layer protocol](./protocols/idscp2/ApplicationLayer). + +## Communication Guide ## + +The specification of the Commmunication in IDS is descibed in the [IDS Communication Guide](./CommunicationGuide.md). diff --git a/Communication/Registration/README.md b/Communication/Registration/README.md new file mode 100644 index 0000000..52e78d8 --- /dev/null +++ b/Communication/Registration/README.md @@ -0,0 +1,4 @@ +# Registration # + +## Introduction ## + diff --git a/Communication/TrustFrameworks/README.md b/Communication/TrustFrameworks/README.md new file mode 100644 index 0000000..d26a74a --- /dev/null +++ b/Communication/TrustFrameworks/README.md @@ -0,0 +1,19 @@ +# Trust Frameworks # + +## Introduction ## + +The Trust Framework for IDS is described in the [IDS-RAM Secruity Perspective](https://docs.internationaldataspaces.org/ids-ram-4/perspectives-of-the-reference-architecture-model/4_perspectives/4_1_security_perspective). + +It focusses on: + +- Identity and Trust Management +- Securing the platform (out of scope for Communication) +- Securing Applications (out of scope for Communication) +- Securing interaction between connectors + +## Messages and data types ## + +## protocols: state machines for message flows and interaction patterns ## + + +## API binding ## From 6abe263352e92868de45d4e35eada5e63380f526 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 09:32:14 +0100 Subject: [PATCH 10/14] Delete README.md --- Specifications/README.md | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 Specifications/README.md diff --git a/Specifications/README.md b/Specifications/README.md deleted file mode 100644 index 3938f1b..0000000 --- a/Specifications/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Getting Started - -The [Information Model document](./model/information.model.md) defines the core concepts, entities, and relationships that underpin a `Dataspace`. - -The [Catalog Protocol document](./catalog/catalog.protocol.md) defines a how a `Catalog` is requested from a catalog service by a consumer using an abstract message exchange format. - -The [Catalog Binding document](./catalog/catalog.binding.https.md) defines a RESTful API over HTTPS for the `Catalog Protocol`. - -The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. - -Note that PlantUML diagrams will be replaced by Draw-IO alternatives. - - From 259422a9ba0d7b0f053de1bc6a031493d9d9c2bd Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 09:34:24 +0100 Subject: [PATCH 11/14] Update README.md --- Communication/Registration/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Communication/Registration/README.md b/Communication/Registration/README.md index 52e78d8..03dfb7d 100644 --- a/Communication/Registration/README.md +++ b/Communication/Registration/README.md @@ -1,4 +1,3 @@ # Registration # ## Introduction ## - From 0a910880a0aeb6072526a5ba94fec2490c8df6f5 Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 10:36:15 +0100 Subject: [PATCH 12/14] editorial changes --- Communication/CommunicationGuide.md | 55 +++++++++++++++++------------ Communication/README.md | 4 +-- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 44c6c6b..948e070 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -2,10 +2,43 @@ ## Introduction ## +This section is non normative. + Interoperability is a major goal of the IDS. Therefore, the interoperability between IDS Connectors and other components is of high importance. The IDS Communication Guide shall provide the required data structure and the interaction sequences to be realized for interoperability and to be used for interoperability testing. The Communication Guide is organized into a modular and composable structure. +### Aims of the Communication Guide ### + +tbd + +### Conformance ### + +tbd + +### Structure of the document ### + +The remainder of the document is structures as follows: + +- Terms and Definitions +- The foundation package contains the reusable structures and definitions: + - the basic strucutre of elements and their relationship (information model) + - standards that are used in the document + - a definition of digital identities and their interactions + - a definition of policies + - Trust Frameworks as a foundation to establish trust in a data space +- Data Sharing + - Contract negotiation sequence + - Data Transfer +- Catalog +- Registration to a data space +- Audit Logging and observability (currently out of scope) +- Use of vocabularies (currently out of scope) + +![structure of IDS Communication Specification](./images/Structure_Commuication.png) + +The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. + ## Terms and Definitions ## Most important terms and definition are in the [Glossary](../Glossary/README.md) @@ -41,28 +74,6 @@ Joint understanding of the terms `in-band` and `out-of-band`, as well as the `co **We should explain briefly on the requirements of state management and how we deal witt it in the remainder of the document.** -### Structure of the document ### - -The remainder of the document is structures as follows: - -- The foundation package contains the reusable structures and definitions: - - the basic strucutre of elements and their relationship (information model) - - standards that are used in the document - - a definition of digital identities and their interactions - - a definition of policies - - Trust Frameworks as a foundation to establish trust in a data space -- Data Sharing - - Contract negotiation sequence - - Data Transfer -- Catalog -- Registration to a data space -- Audit Logging and observability (currently out of scope) -- Use of vocabularies (currently out of scope) - -![structure of IDS Communication Specification](./images/Structure_Commuication.png) - -The [Bibliography](./notes/bibliography.md) contains links to relevant standards referenced by the above documents. - ## Foundation ## The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. diff --git a/Communication/README.md b/Communication/README.md index 43ca8a0..d586f4d 100644 --- a/Communication/README.md +++ b/Communication/README.md @@ -1,4 +1,4 @@ -# Overview +# Overview # ![sequence overview](./images/sequences_overview.png) @@ -19,7 +19,7 @@ Since all IDS components are, at their core, a Connector, the connection of these to the DAPS (sequence 8-12) is designed in the same way as that of the Connector to the DAPS. -## General Component Interaction +## General Component Interaction ## In general, each communication between two components includes the following building blocks: From b244a4145d7326adb056c8e2372051ab42a8819a Mon Sep 17 00:00:00 2001 From: Sebastian Steinbuss <23654606+ssteinbuss@users.noreply.github.com> Date: Thu, 10 Nov 2022 11:48:13 +0100 Subject: [PATCH 13/14] Updates from todays discussion Adding the comments from the discussion today. --- Communication/CommunicationGuide.md | 2 ++ Communication/Registration/README.md | 23 +++++++++++++++++++++++ Communication/TrustFrameworks/README.md | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Communication/CommunicationGuide.md b/Communication/CommunicationGuide.md index 948e070..07029e2 100644 --- a/Communication/CommunicationGuide.md +++ b/Communication/CommunicationGuide.md @@ -74,6 +74,8 @@ Joint understanding of the terms `in-band` and `out-of-band`, as well as the `co **We should explain briefly on the requirements of state management and how we deal witt it in the remainder of the document.** +- Good practice is correlation ID and go to TERMINATED state in case of error + ## Foundation ## The foundation package contains elements that commonly used. This includes standards that are used as foundation for the Communication Guide. diff --git a/Communication/Registration/README.md b/Communication/Registration/README.md index 03dfb7d..32d9812 100644 --- a/Communication/Registration/README.md +++ b/Communication/Registration/README.md @@ -1,3 +1,26 @@ # Registration # ## Introduction ## + +You register a participant and the participant registers their agents. + +Catalog function is out of scope here, so you get basic information about the participant, and you can validate if it is a participant. + + +particpant contains a list of valid agents (or at least to them). + +The participant maintaines the agents it has/provides. + +## messages ## + +- register(participant) +- deregister(participant) +- +- Validate a participants registration status (not whois) +- + +We register participants and find the agents via the participants + +## States ## + + diff --git a/Communication/TrustFrameworks/README.md b/Communication/TrustFrameworks/README.md index d26a74a..1d38236 100644 --- a/Communication/TrustFrameworks/README.md +++ b/Communication/TrustFrameworks/README.md @@ -2,7 +2,7 @@ ## Introduction ## -The Trust Framework for IDS is described in the [IDS-RAM Secruity Perspective](https://docs.internationaldataspaces.org/ids-ram-4/perspectives-of-the-reference-architecture-model/4_perspectives/4_1_security_perspective). +The Trust Framework for IDS is described in the [IDS-RAM Security Perspective](https://docs.internationaldataspaces.org/ids-ram-4/perspectives-of-the-reference-architecture-model/4_perspectives/4_1_security_perspective). It focusses on: @@ -11,6 +11,8 @@ It focusses on: - Securing Applications (out of scope for Communication) - Securing interaction between connectors +The Trust Framework is not part of the communication guide, but part of the IDSA Rulebook and IDS-RAM. (plus some sentences) + ## Messages and data types ## ## protocols: state machines for message flows and interaction patterns ## From b301713b2ae35c9dae21b19e6be2936bb6a13381 Mon Sep 17 00:00:00 2001 From: gbrost Date: Wed, 14 Dec 2022 16:42:08 +0100 Subject: [PATCH 14/14] Update README.md --- Communication/TrustFrameworks/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Communication/TrustFrameworks/README.md b/Communication/TrustFrameworks/README.md index 1d38236..d65b77c 100644 --- a/Communication/TrustFrameworks/README.md +++ b/Communication/TrustFrameworks/README.md @@ -13,6 +13,17 @@ It focusses on: The Trust Framework is not part of the communication guide, but part of the IDSA Rulebook and IDS-RAM. (plus some sentences) +## Trust and security requirements for communication in IDS context +- A connector must be able to validate the identity of its communcation partner +- To initiate communication, a connector must be able to retrieve a Dynamic Attribute Token (DAT) issued by a Dynamic Attribute Provisioning Service (DAPS) and present it to its communication partner +- A connector must be able to validate a DAT presented by its communication partner +- Further requirements can be found in https://github.com/International-Data-Spaces-Association/IDS-G/tree/63-communication-guide-identities +- Communication must be performed encrypted between authenticated entities +- The transport certificate must be referenced in the DAT, preventing token spoofing +- Remote attestation should be supported if trust anchors are used such as TPM, SGX enclaves and AMD SEV VMs + +The trust level is defined by all components involded in the communication. + ## Messages and data types ## ## protocols: state machines for message flows and interaction patterns ##